From db355cb1d8bcbed45c419887588f147c981d563e Mon Sep 17 00:00:00 2001 From: Wajahat Karim Date: Sun, 31 Oct 2021 20:52:32 +0500 Subject: [PATCH] Added support for the Android TVs. --- app/src/main/AndroidManifest.xml | 23 +++++++++-- .../imagine/tv/TvMainActivity.kt | 36 ++++++++++++++++++ .../imagine/ui/home/HomeFragment.kt | 9 +++++ app/src/main/res/drawable-xhdpi/banner.jpg | Bin 0 -> 7135 bytes .../res/drawable/outline_focus_drawable.xml | 24 ++++++++++++ app/src/main/res/layout/photo_item_layout.xml | 6 ++- app/src/main/res/values/themes.xml | 7 ++++ 7 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/wajahatkarim3/imagine/tv/TvMainActivity.kt create mode 100644 app/src/main/res/drawable-xhdpi/banner.jpg create mode 100644 app/src/main/res/drawable/outline_focus_drawable.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a189d0b..9ced824 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,16 +2,33 @@ - + - + + + + - + + + + + + + diff --git a/app/src/main/java/com/wajahatkarim3/imagine/tv/TvMainActivity.kt b/app/src/main/java/com/wajahatkarim3/imagine/tv/TvMainActivity.kt new file mode 100644 index 0000000..90fc8e0 --- /dev/null +++ b/app/src/main/java/com/wajahatkarim3/imagine/tv/TvMainActivity.kt @@ -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() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wajahatkarim3/imagine/ui/home/HomeFragment.kt b/app/src/main/java/com/wajahatkarim3/imagine/ui/home/HomeFragment.kt index d701ecb..827f434 100644 --- a/app/src/main/java/com/wajahatkarim3/imagine/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/wajahatkarim3/imagine/ui/home/HomeFragment.kt @@ -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 @@ -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 @@ -85,6 +89,11 @@ class HomeFragment : BaseFragment() { 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) { diff --git a/app/src/main/res/drawable-xhdpi/banner.jpg b/app/src/main/res/drawable-xhdpi/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39df059858c4d9d146863bbc925f389350fe6cd3 GIT binary patch literal 7135 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 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/photo_item_layout.xml b/app/src/main/res/layout/photo_item_layout.xml index 23f0199..1a9063c 100644 --- a/app/src/main/res/layout/photo_item_layout.xml +++ b/app/src/main/res/layout/photo_item_layout.xml @@ -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"> true + + +