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)) } }