Skip to content

Added support for the Android TVs. #93

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,33 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wajahatkarim3.imagine">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET" />

<application android:name=".ImagineApp"
<uses-feature android:name="android.software.leanback"
android:required="false" />

<uses-feature android:name="android.hardware.touchscreen"
android:required="false" />

<application
android:name=".ImagineApp"
android:allowBackup="true"
android:banner="@drawable/banner"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Imagine">
<activity android:name=".base.BaseActivity"></activity>
<activity
android:name=".tv.TvMainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Imagine.LeanBack">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".base.BaseActivity" />
<activity android:name=".ui.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
36 changes: 36 additions & 0 deletions app/src/main/java/com/wajahatkarim3/imagine/tv/TvMainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.wajahatkarim3.imagine.tv

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.setupActionBarWithNavController
import com.wajahatkarim3.imagine.R
import com.wajahatkarim3.imagine.databinding.ActivityMainBinding
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class TvMainActivity : AppCompatActivity() {

lateinit var bi: ActivityMainBinding
lateinit var navController: NavController

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bi = ActivityMainBinding.inflate(layoutInflater)
setContentView(bi.root)

setupViews()
}

fun setupViews() {
// Navigation
val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHostMain) as NavHostFragment
navController = navHostFragment.navController
setupActionBarWithNavController(navController)
}

override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
*/
package com.wajahatkarim3.imagine.ui.home

import android.app.UiModeManager
import android.content.Context.UI_MODE_SERVICE
import android.content.res.Configuration
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
Expand All @@ -23,6 +26,7 @@ import androidx.core.os.bundleOf
import androidx.core.widget.NestedScrollView
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.flexbox.AlignItems
import com.google.android.flexbox.FlexDirection
Expand Down Expand Up @@ -85,6 +89,11 @@ class HomeFragment : BaseFragment<HomeFragmentBinding>() {
photosAdapter.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
bi.recyclerPopularPhotos.adapter = photosAdapter

val uiModeManager = requireContext().getSystemService(UI_MODE_SERVICE) as UiModeManager
if (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) {
(bi.recyclerPopularPhotos.layoutManager as? GridLayoutManager)?.spanCount = 5
}

// NestedScrollView
bi.nestedScrollView.setOnScrollChangeListener { v: NestedScrollView, _, scrollY, _, _ ->
if (scrollY == v.getChildAt(0).measuredHeight - v.measuredHeight) {
Expand Down
Binary file added app/src/main/res/drawable-xhdpi/banner.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions app/src/main/res/drawable/outline_focus_drawable.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape>
<stroke android:width="10dp"
android:color="#E32424" />
</shape>
</item>

<item android:state_focused="true" android:state_pressed="false" android:state_selected="true">
<shape>
<stroke android:width="10dp"
android:color="#E32424" />
</shape>
</item>

<item>
<shape>
<stroke android:width="10dp"
android:color="#00E32424" />
</shape>
</item>

</selector>
6 changes: 4 additions & 2 deletions app/src/main/res/layout/photo_item_layout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingEnd="10dp">
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@drawable/outline_focus_drawable"
android:padding="10dp">

<com.google.android.material.card.MaterialCardView
android:id="@+id/cardPhoto"
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/values/themes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
<item name="windowNoTitle">true</item>
</style>

<!-- TV theme -->
<style name="Theme.Imagine.LeanBack" parent="Theme.Imagine.Base">
<item name="android:colorPrimary">@color/color_secondary_dark</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
</style>

<!-- Default Theme -->
<style name="Theme.Imagine.Base" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
Expand Down