diff --git a/app/build.gradle b/app/build.gradle
index a940652446..a3a83552a2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -119,7 +119,10 @@ android {
}
buildFeatures {
+ // We need to keep this enabled because submodules use it
dataBinding true
+
+ viewBinding true
}
testOptions {
@@ -211,6 +214,7 @@ dependencies {
implementation Libs.Coroutines.android
implementation Libs.Hilt.library
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
kapt Libs.Hilt.compiler
implementation Libs.AndroidX.Hilt.work
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 268122e553..12f17a1298 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,7 +31,7 @@
android:theme="@style/Theme.Tivi">
@@ -40,15 +40,6 @@
-
-
-
-
-
-
diff --git a/app/src/main/java/app/tivi/home/ActivityAppNavigator.kt b/app/src/main/java/app/tivi/home/ActivityAppNavigator.kt
index 0e9c6ec4af..7d06c204f2 100644
--- a/app/src/main/java/app/tivi/home/ActivityAppNavigator.kt
+++ b/app/src/main/java/app/tivi/home/ActivityAppNavigator.kt
@@ -75,7 +75,7 @@ class ActivityAppNavigator @Inject constructor(
}
private fun provideAuthHandleResponseIntent(requestCode: Int): PendingIntent {
- val intent = Intent(activity, HomeActivity::class.java).apply {
+ val intent = Intent(activity, MainActivity::class.java).apply {
action = TraktConstants.INTENT_ACTION_HANDLE_AUTH_RESPONSE
}
return PendingIntent.getActivity(activity, requestCode, intent, 0)
diff --git a/app/src/main/java/app/tivi/home/HomeActivity.kt b/app/src/main/java/app/tivi/home/MainActivity.kt
similarity index 79%
rename from app/src/main/java/app/tivi/home/HomeActivity.kt
rename to app/src/main/java/app/tivi/home/MainActivity.kt
index 91203ae3a0..e7ea5bd5d3 100644
--- a/app/src/main/java/app/tivi/home/HomeActivity.kt
+++ b/app/src/main/java/app/tivi/home/MainActivity.kt
@@ -19,24 +19,25 @@ package app.tivi.home
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
-import androidx.databinding.DataBindingUtil
import androidx.lifecycle.observe
import androidx.navigation.NavController
import app.tivi.AppNavigator
import app.tivi.R
import app.tivi.TiviActivity
-import app.tivi.databinding.ActivityHomeBinding
+import app.tivi.databinding.ActivityMainBinding
import app.tivi.extensions.hideSoftInput
import app.tivi.extensions.setupWithNavController
import app.tivi.trakt.TraktConstants
import dagger.hilt.android.AndroidEntryPoint
+import dev.chrisbanes.insetter.Insetter
+import dev.chrisbanes.insetter.Side
import javax.inject.Inject
@AndroidEntryPoint
-class HomeActivity : TiviActivity() {
+class MainActivity : TiviActivity() {
private val viewModel: HomeActivityViewModel by viewModels()
- private lateinit var binding: ActivityHomeBinding
+ private lateinit var binding: ActivityMainBinding
private var currentNavController: NavController? = null
@@ -45,7 +46,20 @@ class HomeActivity : TiviActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ Insetter.builder()
+ .applySystemWindowInsetsToPadding(Side.LEFT or Side.RIGHT)
+ .applyToView(binding.root)
+
+ Insetter.builder()
+ .applySystemWindowInsetsToPadding(Side.BOTTOM)
+ // TODO: enable selective consumption when insetter has it
+ // .consumeSystemWindowInsets(true)
+ .applyToView(binding.homeBottomNavigation)
+
+ Insetter.setEdgeToEdgeSystemUiFlags(binding.homeRoot, true)
if (savedInstanceState == null) {
setupBottomNavigationBar()
diff --git a/app/src/main/java/app/tivi/showdetails/ShowDetailsActivity.kt b/app/src/main/java/app/tivi/showdetails/ShowDetailsActivity.kt
deleted file mode 100644
index 111bdde717..0000000000
--- a/app/src/main/java/app/tivi/showdetails/ShowDetailsActivity.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package app.tivi.showdetails
-
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import androidx.core.view.updatePadding
-import androidx.fragment.app.commit
-import androidx.navigation.fragment.NavHostFragment
-import app.tivi.R
-import app.tivi.TiviActivity
-import dagger.hilt.android.AndroidEntryPoint
-import dev.chrisbanes.insetter.doOnApplyWindowInsets
-
-@AndroidEntryPoint
-class ShowDetailsActivity : TiviActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_show_details)
-
- findViewById(R.id.details_root).apply {
- systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
-
- doOnApplyWindowInsets { view, insets, initialState ->
- view.updatePadding(
- left = insets.systemWindowInsetLeft + initialState.paddings.left,
- right = insets.systemWindowInsetRight + initialState.paddings.right
- )
- }
- }
-
- postponeEnterTransition()
- }
-
- override fun handleIntent(intent: Intent) {
- supportFragmentManager.commit {
- replace(
- R.id.details_content,
- NavHostFragment.create(R.navigation.show_details_nav_graph, intent.extras)
- )
- }
- }
-}
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
deleted file mode 100644
index 75ee286efb..0000000000
--- a/app/src/main/res/layout/activity_home.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000000..2ec246beed
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_show_details.xml b/app/src/main/res/layout/activity_show_details.xml
deleted file mode 100644
index 8207a1011d..0000000000
--- a/app/src/main/res/layout/activity_show_details.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
deleted file mode 100644
index 797583a51d..0000000000
--- a/app/src/main/res/layout/fragment_settings.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/navigation/show_details_nav_graph.xml b/app/src/main/res/navigation/show_details_nav_graph.xml
index 48cbb3a69a..79b41909c1 100644
--- a/app/src/main/res/navigation/show_details_nav_graph.xml
+++ b/app/src/main/res/navigation/show_details_nav_graph.xml
@@ -17,7 +17,6 @@
@@ -29,18 +28,6 @@
android:name="show_id"
app:argType="long" />
-
-
-
-
-
-
@@ -51,6 +38,20 @@
-
+
+
+
\ No newline at end of file
diff --git a/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt b/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt
index a41aa74ec6..9a7e8b019b 100644
--- a/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt
+++ b/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt
@@ -45,7 +45,7 @@ object Libs {
const val store = "com.dropbox.mobile.store:store4:4.0.0-alpha05"
object Insetter {
- private const val version = "0.2.2"
+ private const val version = "0.3.0"
const val dbx = "dev.chrisbanes:insetter-dbx:$version"
const val ktx = "dev.chrisbanes:insetter-ktx:$version"
}
diff --git a/common-ui-resources/src/main/res/values/strings.xml b/common-ui-resources/src/main/res/values/strings.xml
index d52773b393..34f1c96152 100644
--- a/common-ui-resources/src/main/res/values/strings.xml
+++ b/common-ui-resources/src/main/res/values/strings.xml
@@ -50,6 +50,7 @@
Logout
Show details
+ Episode details
Search
diff --git a/common-ui-view/src/main/res/values/ids.xml b/common-ui-view/src/main/res/values/ids.xml
index 31fdf75573..61664a40b4 100644
--- a/common-ui-view/src/main/res/values/ids.xml
+++ b/common-ui-view/src/main/res/values/ids.xml
@@ -28,6 +28,7 @@
+
diff --git a/ui-showdetails/build.gradle b/ui-showdetails/build.gradle
index 6a52ab308b..7a423d19d8 100644
--- a/ui-showdetails/build.gradle
+++ b/ui-showdetails/build.gradle
@@ -66,8 +66,6 @@ dependencies {
implementation project(':common-ui-view')
implementation project(':common-ui-compose')
- implementation project(':ui-episodedetails')
-
implementation Libs.AndroidX.Lifecycle.livedata
implementation Libs.AndroidX.Lifecycle.viewmodel
diff --git a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt
index 59b12e887e..7d722d5f37 100644
--- a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt
+++ b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt
@@ -29,7 +29,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.observe
import androidx.navigation.fragment.findNavController
import app.tivi.common.compose.observeWindowInsets
-import app.tivi.episodedetails.EpisodeDetailsFragment
import app.tivi.extensions.scheduleStartPostponedTransitions
import app.tivi.extensions.viewModelProviderFactoryOf
import app.tivi.util.TiviDateFormatter
@@ -90,9 +89,7 @@ class ShowDetailsFragment : Fragment() {
lifecycleScope.launch {
pendingActions.consumeAsFlow().collect { action ->
when (action) {
- NavigateUp -> {
- findNavController().navigateUp() || requireActivity().onNavigateUp()
- }
+ NavigateUp -> findNavController().navigateUp()
else -> viewModel.submitAction(action)
}
}
@@ -107,8 +104,7 @@ class ShowDetailsFragment : Fragment() {
viewModel.submitAction(ClearPendingUiEffect(effect))
}
is OpenEpisodeUiEffect -> {
- EpisodeDetailsFragment.create(effect.episodeId)
- .show(childFragmentManager, "episode")
+ findNavController().navigate("app.tivi://episode/${effect.episodeId}".toUri())
viewModel.submitAction(ClearPendingUiEffect(effect))
}
}