Closes #403 Use Fragments for Navigation, Add Toolbar to HomeActivity

nightly-build-test
Emily Kager 5 years ago committed by Jeff Boek
parent cf260e4b8d
commit 77883c0f30

@ -143,7 +143,9 @@ dependencies {
x86Implementation Deps.geckoview_nightly_x86 x86Implementation Deps.geckoview_nightly_x86
implementation Deps.androidx_legacy implementation Deps.androidx_legacy
implementation Deps.androidx_preference implementation Deps.androidx_preference
implementation Deps.androidx_fragment
implementation Deps.android_arch_navigation implementation Deps.android_arch_navigation
implementation Deps.android_arch_navigation_ui
} }

@ -64,12 +64,6 @@
<action android:name="android.support.customtabs.action.CustomTabsService" /> <action android:name="android.support.customtabs.action.CustomTabsService" />
</intent-filter> </intent-filter>
</service> </service>
<activity
android:name=".settings.SettingsActivity"
android:label="@string/settings"
android:parentActivityName=".HomeActivity"
android:theme="@style/SettingsTheme"/>
</application> </application>
</manifest> </manifest>

@ -9,7 +9,10 @@ import android.os.Bundle
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import mozilla.components.concept.engine.EngineView import mozilla.components.concept.engine.EngineView
import mozilla.components.feature.intent.IntentProcessor import mozilla.components.feature.intent.IntentProcessor
import mozilla.components.support.base.feature.BackHandler import mozilla.components.support.base.feature.BackHandler
@ -35,6 +38,13 @@ open class HomeActivity : AppCompatActivity() {
if (intent?.extras?.getBoolean(OPEN_TO_BROWSER) == true) { if (intent?.extras?.getBoolean(OPEN_TO_BROWSER) == true) {
openToBrowser() openToBrowser()
} }
val host = supportFragmentManager.findFragmentById(R.id.container) as NavHostFragment
val hostNavController = host.navController
val appBarConfiguration = AppBarConfiguration.Builder(setOf(R.id.libraryFragment)).build()
val navigationToolbar = findViewById<Toolbar>(R.id.navigationToolbar)
setSupportActionBar(navigationToolbar)
NavigationUI.setupWithNavController(navigationToolbar, hostNavController, appBarConfiguration)
} }
override fun onCreateView( override fun onCreateView(

@ -14,6 +14,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.accessibility.AccessibilityManager import android.view.accessibility.AccessibilityManager
import androidx.appcompat.app.AppCompatActivity
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -106,6 +107,8 @@ class BrowserFragment : Fragment(), BackHandler {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).supportActionBar?.hide()
val sessionId = arguments?.getString(SESSION_ID) val sessionId = arguments?.getString(SESSION_ID)
val sessionManager = requireComponents.core.sessionManager val sessionManager = requireComponents.core.sessionManager
@ -208,7 +211,7 @@ class BrowserFragment : Fragment(), BackHandler {
is ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke() is ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke()
is ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke() is ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke()
is ToolbarMenu.Item.Settings -> Navigation.findNavController(toolbar) is ToolbarMenu.Item.Settings -> Navigation.findNavController(toolbar)
.navigate(R.id.action_browserFragment_to_settingsActivity, null, null) .navigate(R.id.action_browserFragment_to_settingsFragment, null, null)
is ToolbarMenu.Item.Library -> Navigation.findNavController(toolbar) is ToolbarMenu.Item.Library -> Navigation.findNavController(toolbar)
.navigate(R.id.action_browserFragment_to_libraryFragment, null, null) .navigate(R.id.action_browserFragment_to_libraryFragment, null, null)
is ToolbarMenu.Item.RequestDesktop -> sessionUseCases.requestDesktopSite.invoke(action.item.isChecked) is ToolbarMenu.Item.RequestDesktop -> sessionUseCases.requestDesktopSite.invoke(action.item.isChecked)

@ -10,6 +10,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.Navigation import androidx.navigation.Navigation
@ -40,6 +41,8 @@ class HomeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).supportActionBar?.hide()
layoutComponents(view.homeLayout) layoutComponents(view.homeLayout)
val searchIcon = requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()).let { val searchIcon = requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()).let {
@ -48,7 +51,7 @@ class HomeFragment : Fragment() {
// Temporary so we can easily test settings // Temporary so we can easily test settings
view.menuButton.setOnClickListener { view.menuButton.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.action_homeFragment_to_settingsActivity, null, null) Navigation.findNavController(it).navigate(R.id.action_homeFragment_to_settingsFragment, null, null)
} }
view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null) view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null)

@ -6,9 +6,14 @@ package org.mozilla.fenix.library
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import org.mozilla.fenix.R import org.mozilla.fenix.R
class LibraryFragment : Fragment() { class LibraryFragment : Fragment() {
@ -20,4 +25,28 @@ class LibraryFragment : Fragment() {
): View? { ): View? {
return inflater.inflate(R.layout.fragment_library, container, false) return inflater.inflate(R.layout.fragment_library, container, false)
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
(activity as AppCompatActivity).supportActionBar?.show()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.library_menu, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.libraryClose -> {
Navigation.findNavController(requireActivity(), R.id.container).popBackStack()
true
}
R.id.librarySearch -> {
// TODO Library Search
true
}
else -> super.onOptionsItemSelected(item)
}
}
} }

@ -9,6 +9,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.Navigation import androidx.navigation.Navigation
import kotlinx.android.synthetic.main.fragment_search.view.* import kotlinx.android.synthetic.main.fragment_search.view.*
@ -47,6 +48,8 @@ class SearchFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).supportActionBar?.hide()
layoutComponents(view.search_layout) layoutComponents(view.search_layout)
lifecycle.addObserver((toolbarComponent.uiView as ToolbarUIView).toolbarIntegration) lifecycle.addObserver((toolbarComponent.uiView as ToolbarUIView).toolbarIntegration)

@ -1,36 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.settings
import android.R.id.content
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
class SettingsActivity : AppCompatActivity(), SettingsFragment.ActionBarUpdater {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
with(supportFragmentManager.beginTransaction()) {
replace(content, SettingsFragment())
commit()
}
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
android.R.id.home -> {
onBackPressed()
true
}
else -> super.onOptionsItemSelected(item)
}
override fun updateTitle(titleResId: Int) {
setTitle(titleResId)
}
}

@ -8,6 +8,7 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.Preference.OnPreferenceClickListener
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
@ -17,8 +18,9 @@ import org.mozilla.fenix.ext.getPreferenceKey
class SettingsFragment : PreferenceFragmentCompat() { class SettingsFragment : PreferenceFragmentCompat() {
interface ActionBarUpdater { override fun onCreate(savedInstanceState: Bundle?) {
fun updateTitle(titleResId: Int) super.onCreate(savedInstanceState)
(activity as AppCompatActivity).supportActionBar?.show()
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@ -29,12 +31,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
super.onResume() super.onResume()
setupPreferences() setupPreferences()
getActionBarUpdater().apply {
updateTitle(R.string.settings)
}
} }
@Suppress("LongMethod") // Yep, this should be refactored.
private fun setupPreferences() { private fun setupPreferences() {
val makeDefaultBrowserKey = context?.getPreferenceKey(pref_key_make_default_browser) val makeDefaultBrowserKey = context?.getPreferenceKey(pref_key_make_default_browser)
@ -61,6 +59,4 @@ class SettingsFragment : PreferenceFragmentCompat() {
defaultClickListener defaultClickListener
} }
} }
private fun getActionBarUpdater() = activity as ActionBarUpdater
} }

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/icons"
android:pathData="M13.326,12l4.337,-4.337a0.938,0.938 0,0 0,-1.326 -1.326L12,10.674 7.663,6.337A0.938,0.938 0,0 0,6.337 7.663L10.674,12 6.337,16.337a0.938,0.938 0,0 0,1.326 1.326L12,13.326l4.337,4.337a0.938,0.938 0,0 0,1.326 -1.326Z" />
</vector>

@ -8,6 +8,6 @@
android:viewportWidth="24.0" android:viewportWidth="24.0"
android:viewportHeight="24.0"> android:viewportHeight="24.0">
<path <path
android:fillColor="#0c0c0d" android:fillColor="@color/icons"
android:pathData="M21.457,20.043l-6,-6a7.528,7.528 0,1 0,-1.414 1.414l6,6a1,1 0,0 0,1.414 -1.414ZM9.5,15A5.5,5.5 0,1 1,15 9.5,5.507 5.507,0 0,1 9.5,15Z"/> android:pathData="M21.457,20.043l-6,-6a7.528,7.528 0,1 0,-1.414 1.414l6,6a1,1 0,0 0,1.414 -1.414ZM9.5,15A5.5,5.5 0,1 1,15 9.5,5.507 5.507,0 0,1 9.5,15Z" />
</vector> </vector>

@ -1,20 +1,26 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public <!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this - License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<androidx.constraintlayout.widget.ConstraintLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".HomeActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/navigationToolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="56dp"
tools:context=".HomeActivity"> android:background="@color/off_white"
android:elevation="8dp"/>
<fragment <fragment
android:name="androidx.navigation.fragment.NavHostFragment" android:id="@+id/container"
android:layout_width="match_parent" android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_height="match_parent" android:layout_width="match_parent"
app:navGraph="@navigation/nav_graph" android:layout_height="match_parent"
app:defaultNavHost="true" app:defaultNavHost="true"
android:id="@+id/container"/> app:navGraph="@navigation/nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout>

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/librarySearch"
android:icon="@drawable/ic_search"
android:iconTint="@color/icons"
android:title="@string/library_search"
app:showAsAction="always"
tools:targetApi="o" />
<item
android:id="@+id/libraryClose"
android:icon="@drawable/ic_close"
android:iconTint="@color/icons"
android:title="@string/mozac_close_button_description"
app:showAsAction="always"
tools:targetApi="o" />
</menu>

@ -21,8 +21,11 @@
android:id="@+id/action_homeFragment_to_browserFragment" android:id="@+id/action_homeFragment_to_browserFragment"
app:destination="@id/browserFragment" /> app:destination="@id/browserFragment" />
<action <action
android:id="@+id/action_homeFragment_to_settingsActivity" android:id="@+id/action_homeFragment_to_libraryFragment"
app:destination="@id/settingsActivity" /> app:destination="@id/libraryFragment" />
<action
android:id="@+id/action_homeFragment_to_settingsFragment"
app:destination="@id/settingsFragment" />
</fragment> </fragment>
<fragment <fragment
@ -36,36 +39,37 @@
app:popUpTo="@id/homeFragment" /> app:popUpTo="@id/homeFragment" />
</fragment> </fragment>
<fragment
android:id="@+id/libraryFragment"
android:name="org.mozilla.fenix.library.LibraryFragment"
android:label="fragment_library"
tools:layout="@layout/fragment_library">
</fragment>
<fragment <fragment
android:id="@+id/browserFragment" android:id="@+id/browserFragment"
android:name="org.mozilla.fenix.browser.BrowserFragment" android:name="org.mozilla.fenix.browser.BrowserFragment"
android:label="fragment_browser" android:label="fragment_browser"
tools:layout="@layout/fragment_browser"> tools:layout="@layout/fragment_browser">
<action <action
android:id="@+id/action_browserFragment_to_homeFragment" android:id="@+id/action_browserFragment_to_homeFragment"
app:destination="@id/homeFragment" app:popUpToInclusive="true" app:popUpTo="@+id/homeFragment"/> app:destination="@id/homeFragment"
app:popUpTo="@+id/homeFragment"
app:popUpToInclusive="true" />
<action <action
android:id="@+id/action_browserFragment_to_searchFragment" android:id="@+id/action_browserFragment_to_searchFragment"
app:destination="@id/searchFragment" /> app:destination="@id/searchFragment" />
<argument
android:name="session_id"
app:argType="string"
app:nullable="true" />
<action
android:id="@+id/action_browserFragment_to_settingsFragment"
app:destination="@id/settingsFragment" />
<action <action
android:id="@+id/action_browserFragment_to_libraryFragment" android:id="@+id/action_browserFragment_to_libraryFragment"
app:destination="@id/libraryFragment" /> app:destination="@id/libraryFragment" />
<action
android:id="@+id/action_browserFragment_to_settingsActivity"
app:destination="@id/settingsActivity" />
<argument android:name="session_id" app:argType="string" app:nullable="true" />
</fragment> </fragment>
<fragment
<activity android:id="@+id/libraryFragment"
android:id="@+id/settingsActivity" android:name="org.mozilla.fenix.library.LibraryFragment"
android:name="org.mozilla.fenix.settings.SettingsActivity" android:label="@string/library_title"
android:label="SettingsActivity" /> tools:layout="@layout/fragment_library" />
<fragment
android:id="@+id/settingsFragment"
android:name="org.mozilla.fenix.settings.SettingsFragment"
android:label="@string/settings_title" />
</navigation> </navigation>

@ -63,20 +63,6 @@
<!-- Button in the search view that lets a user navigate to the site in their clipboard --> <!-- Button in the search view that lets a user navigate to the site in their clipboard -->
<string name="awesomebar_clipboard_title">Fill link from Clipboard</string> <string name="awesomebar_clipboard_title">Fill link from Clipboard</string>
<!-- Library -->
<!-- Option in Library to open Sessions page -->
<string name="library_sessions">Sessions</string>
<!-- Option in Library to open Screenshots page -->
<string name="library_screenshots">Screenshots</string>
<!-- Option in Library to open Downloads page -->
<string name="library_downloads">Downloads</string>
<!-- Option in Library to open Favorites page -->
<string name="library_favorites">Favorites</string>
<!-- Option in Library to open History page -->
<string name="library_history">History</string>
<!-- Option in Library to open Logins page -->
<string name="library_logins">Logins</string>
<!-- Settings Fragment --> <!-- Settings Fragment -->
<!-- Title for the settings page--> <!-- Title for the settings page-->
<string name="settings">Settings</string> <string name="settings">Settings</string>
@ -119,4 +105,24 @@
<string name="preferences_language">Language</string> <string name="preferences_language">Language</string>
<!-- Preference for data choices --> <!-- Preference for data choices -->
<string name="preferences_data_choices">Data choices</string> <string name="preferences_data_choices">Data choices</string>
<!-- Library -->
<!-- Option in Library to open Sessions page -->
<string name="library_sessions">Sessions</string>
<!-- Option in Library to open Screenshots page -->
<string name="library_screenshots">Screenshots</string>
<!-- Option in Library to open Downloads page -->
<string name="library_downloads">Downloads</string>
<!-- Option in Library to open Favorites page -->
<string name="library_favorites">Favorites</string>
<!-- Option in Library to open History page -->
<string name="library_history">History</string>
<!-- Option in Library to open Logins page -->
<string name="library_logins">Logins</string>
<!-- Menu Item Label for Search in Library -->
<string name="library_search">Search</string>
<!-- Library Page Title -->
<string name="library_title">Library</string>
<!-- Settings Page Title -->
<string name="settings_title">Settings</string>
</resources> </resources>

@ -11,12 +11,13 @@ private object Versions {
const val anko = "0.10.8" const val anko = "0.10.8"
const val sentry = "1.7.10" const val sentry = "1.7.10"
const val androidx_appcompat = "1.0.2" const val androidx_appcompat = "1.1.0-alpha02"
const val androidx_constraint_layout = "2.0.0-alpha2" const val androidx_constraint_layout = "2.0.0-alpha2"
const val androidx_preference = "1.1.0-alpha02" const val androidx_preference = "1.1.0-alpha03"
const val androidx_legacy = "1.0.0" const val androidx_legacy = "1.0.0"
const val androidx_annotation = "1.0.1" const val androidx_annotation = "1.0.1"
const val androidx_lifecycle = "2.0.0" const val androidx_lifecycle = "2.0.0"
const val androidx_fragment = "1.1.0-alpha04"
const val mozilla_android_components = "0.42.0-SNAPSHOT" const val mozilla_android_components = "0.42.0-SNAPSHOT"
@ -24,7 +25,7 @@ private object Versions {
const val test_tools = "1.0.2" const val test_tools = "1.0.2"
const val espresso_core = "2.2.2" const val espresso_core = "2.2.2"
const val android_arch_navigation = "1.0.0-alpha11" const val android_arch_navigation = "1.0.0-beta01"
} }
@Suppress("unused") @Suppress("unused")
@ -92,12 +93,14 @@ object Deps {
const val tools_espresso_core = "com.android.support.test.espresso:espresso-core:${Versions.espresso_core}" const val tools_espresso_core = "com.android.support.test.espresso:espresso-core:${Versions.espresso_core}"
const val androidx_annotation = "androidx.annotation:annotation:${Versions.androidx_annotation}" const val androidx_annotation = "androidx.annotation:annotation:${Versions.androidx_annotation}"
const val androidx_fragment = "androidx.fragment:fragment:${Versions.androidx_fragment}"
const val androidx_appcompat = "androidx.appcompat:appcompat:${Versions.androidx_appcompat}" const val androidx_appcompat = "androidx.appcompat:appcompat:${Versions.androidx_appcompat}"
const val androidx_constraintlayout = "androidx.constraintlayout:constraintlayout:${Versions.androidx_constraint_layout}" const val androidx_constraintlayout = "androidx.constraintlayout:constraintlayout:${Versions.androidx_constraint_layout}"
const val androidx_legacy = "androidx.legacy:legacy-support-v4:${Versions.androidx_legacy}" const val androidx_legacy = "androidx.legacy:legacy-support-v4:${Versions.androidx_legacy}"
const val androidx_lifecycle_runtime = "androidx.lifecycle:lifecycle-runtime:${Versions.androidx_lifecycle}" const val androidx_lifecycle_runtime = "androidx.lifecycle:lifecycle-runtime:${Versions.androidx_lifecycle}"
const val androidx_preference = "androidx.preference:preference-ktx:${Versions.androidx_preference}" const val androidx_preference = "androidx.preference:preference-ktx:${Versions.androidx_preference}"
const val android_arch_navigation = "android.arch.navigation:navigation-fragment:${Versions.android_arch_navigation}" const val android_arch_navigation = "android.arch.navigation:navigation-fragment:${Versions.android_arch_navigation}"
const val android_arch_navigation_ui = "android.arch.navigation:navigation-ui:${Versions.android_arch_navigation}"
} }

Loading…
Cancel
Save