diff --git a/app/build.gradle b/app/build.gradle
index e819b449cc..cb72347ce0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -143,7 +143,9 @@ dependencies {
x86Implementation Deps.geckoview_nightly_x86
implementation Deps.androidx_legacy
implementation Deps.androidx_preference
+ implementation Deps.androidx_fragment
implementation Deps.android_arch_navigation
+ implementation Deps.android_arch_navigation_ui
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 61f33539d0..57fba80270 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -64,12 +64,6 @@
-
-
diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
index f62b31df73..dc93510f33 100644
--- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
+++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
@@ -9,7 +9,10 @@ import android.os.Bundle
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.NavHostFragment
+import androidx.navigation.ui.AppBarConfiguration
+import androidx.navigation.ui.NavigationUI
import mozilla.components.concept.engine.EngineView
import mozilla.components.feature.intent.IntentProcessor
import mozilla.components.support.base.feature.BackHandler
@@ -35,6 +38,13 @@ open class HomeActivity : AppCompatActivity() {
if (intent?.extras?.getBoolean(OPEN_TO_BROWSER) == true) {
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(R.id.navigationToolbar)
+ setSupportActionBar(navigationToolbar)
+ NavigationUI.setupWithNavController(navigationToolbar, hostNavController, appBarConfiguration)
}
override fun onCreateView(
diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
index 82a8c620e7..1d979fd65a 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
@@ -14,6 +14,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.accessibility.AccessibilityManager
+import androidx.appcompat.app.AppCompatActivity
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
@@ -106,6 +107,8 @@ class BrowserFragment : Fragment(), BackHandler {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ (activity as AppCompatActivity).supportActionBar?.hide()
+
val sessionId = arguments?.getString(SESSION_ID)
val sessionManager = requireComponents.core.sessionManager
@@ -208,7 +211,7 @@ class BrowserFragment : Fragment(), BackHandler {
is ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke()
is ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke()
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)
.navigate(R.id.action_browserFragment_to_libraryFragment, null, null)
is ToolbarMenu.Item.RequestDesktop -> sessionUseCases.requestDesktopSite.invoke(action.item.isChecked)
diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
index fb5b575a9f..c475fae44a 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
@@ -10,6 +10,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
@@ -40,6 +41,8 @@ class HomeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ (activity as AppCompatActivity).supportActionBar?.hide()
+
layoutComponents(view.homeLayout)
val searchIcon = requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()).let {
@@ -48,7 +51,7 @@ class HomeFragment : Fragment() {
// Temporary so we can easily test settings
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)
diff --git a/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt
index d2e8fe6ecb..a8b03e0bf0 100644
--- a/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt
@@ -6,9 +6,14 @@ package org.mozilla.fenix.library
import android.os.Bundle
import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
+import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
+import androidx.navigation.Navigation
import org.mozilla.fenix.R
class LibraryFragment : Fragment() {
@@ -20,4 +25,28 @@ class LibraryFragment : Fragment() {
): View? {
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)
+ }
+ }
}
diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt
index 54bb898d86..bfba52c160 100644
--- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt
@@ -9,6 +9,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import kotlinx.android.synthetic.main.fragment_search.view.*
@@ -47,6 +48,8 @@ class SearchFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ (activity as AppCompatActivity).supportActionBar?.hide()
+
layoutComponents(view.search_layout)
lifecycle.addObserver((toolbarComponent.uiView as ToolbarUIView).toolbarIntegration)
diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsActivity.kt
deleted file mode 100644
index 3da2c7287c..0000000000
--- a/app/src/main/java/org/mozilla/fenix/settings/SettingsActivity.kt
+++ /dev/null
@@ -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)
- }
-}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
index 7ad4afd61b..7992a5ba30 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
@@ -8,6 +8,7 @@ import android.content.Intent
import android.os.Bundle
import android.provider.Settings
import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceClickListener
import androidx.preference.PreferenceFragmentCompat
@@ -17,8 +18,9 @@ import org.mozilla.fenix.ext.getPreferenceKey
class SettingsFragment : PreferenceFragmentCompat() {
- interface ActionBarUpdater {
- fun updateTitle(titleResId: Int)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ (activity as AppCompatActivity).supportActionBar?.show()
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@@ -29,12 +31,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
super.onResume()
setupPreferences()
- getActionBarUpdater().apply {
- updateTitle(R.string.settings)
- }
}
- @Suppress("LongMethod") // Yep, this should be refactored.
private fun setupPreferences() {
val makeDefaultBrowserKey = context?.getPreferenceKey(pref_key_make_default_browser)
@@ -61,6 +59,4 @@ class SettingsFragment : PreferenceFragmentCompat() {
defaultClickListener
}
}
-
- private fun getActionBarUpdater() = activity as ActionBarUpdater
}
diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml
new file mode 100644
index 0000000000..67b6f4a1ff
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml
index afe20e3497..df14489d14 100644
--- a/app/src/main/res/drawable/ic_search.xml
+++ b/app/src/main/res/drawable/ic_search.xml
@@ -8,6 +8,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
-
\ No newline at end of file
+ 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" />
+
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index c3e7eb5e8d..aebbee68e3 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -1,20 +1,26 @@
-
+
+
+ android:layout_height="56dp"
+ android:background="@color/off_white"
+ android:elevation="8dp"/>
-
-
+ android:id="@+id/container"
+ android:name="androidx.navigation.fragment.NavHostFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:defaultNavHost="true"
+ app:navGraph="@navigation/nav_graph" />
+
diff --git a/app/src/main/res/menu/library_menu.xml b/app/src/main/res/menu/library_menu.xml
new file mode 100644
index 0000000000..9c82defbb6
--- /dev/null
+++ b/app/src/main/res/menu/library_menu.xml
@@ -0,0 +1,22 @@
+
+
+
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 70bdb22a70..5aeb2fc2dc 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -21,8 +21,11 @@
android:id="@+id/action_homeFragment_to_browserFragment"
app:destination="@id/browserFragment" />
+ android:id="@+id/action_homeFragment_to_libraryFragment"
+ app:destination="@id/libraryFragment" />
+
-
-
-
+ android:id="@+id/action_browserFragment_to_homeFragment"
+ app:destination="@id/homeFragment"
+ app:popUpTo="@+id/homeFragment"
+ app:popUpToInclusive="true" />
+
+
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c7c6c4b944..06cea1b879 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -63,20 +63,6 @@
Fill link from Clipboard
-
-
- Sessions
-
- Screenshots
-
- Downloads
-
- Favorites
-
- History
-
- Logins
-
Settings
@@ -119,4 +105,24 @@
Language
Data choices
+
+
+
+ Sessions
+
+ Screenshots
+
+ Downloads
+
+ Favorites
+
+ History
+
+ Logins
+
+ Search
+
+ Library
+
+ Settings
diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt
index 03b81d581e..b80805e740 100644
--- a/buildSrc/src/main/java/Dependencies.kt
+++ b/buildSrc/src/main/java/Dependencies.kt
@@ -11,12 +11,13 @@ private object Versions {
const val anko = "0.10.8"
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_preference = "1.1.0-alpha02"
+ const val androidx_preference = "1.1.0-alpha03"
const val androidx_legacy = "1.0.0"
const val androidx_annotation = "1.0.1"
const val androidx_lifecycle = "2.0.0"
+ const val androidx_fragment = "1.1.0-alpha04"
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 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")
@@ -92,12 +93,14 @@ object Deps {
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_fragment = "androidx.fragment:fragment:${Versions.androidx_fragment}"
const val androidx_appcompat = "androidx.appcompat:appcompat:${Versions.androidx_appcompat}"
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_lifecycle_runtime = "androidx.lifecycle:lifecycle-runtime:${Versions.androidx_lifecycle}"
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_ui = "android.arch.navigation:navigation-ui:${Versions.android_arch_navigation}"
}