diff --git a/app/build.gradle b/app/build.gradle
index 320e762bf..9770cb3bc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -132,6 +132,7 @@ dependencies {
armImplementation Deps.geckoview_nightly_arm
x86Implementation Deps.geckoview_nightly_x86
implementation Deps.androidx_legacy
+ implementation Deps.androidx_preference
implementation Deps.android_arch_navigation
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 530aae8e8..773e2d45b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,6 +39,12 @@
+
+
\ No newline at end of file
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 54e582c5e..9c3d15a2d 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
@@ -42,6 +42,11 @@ class HomeFragment : Fragment() {
BitmapDrawable(resources, it.icon)
}
+ // Temporary so we can easily test settings
+ menuButton.setOnClickListener {
+ Navigation.findNavController(it).navigate(R.id.action_homeFragment_to_settingsActivity, null, null)
+ }
+
toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null)
val roundToInt = (toolbarPaddingDp * Resources.getSystem().displayMetrics.density).roundToInt()
toolbar.compoundDrawablePadding = roundToInt
diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsActivity.kt
new file mode 100644
index 000000000..3da2c7287
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsActivity.kt
@@ -0,0 +1,36 @@
+/* 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
new file mode 100644
index 000000000..7ffae300d
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
@@ -0,0 +1,65 @@
+/* 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.content.Intent
+import android.os.Bundle
+import android.provider.Settings
+import android.widget.Toast
+import androidx.preference.Preference.OnPreferenceClickListener
+import androidx.preference.PreferenceFragmentCompat
+import org.mozilla.fenix.R
+import org.mozilla.fenix.R.string.pref_key_make_default_browser
+import org.mozilla.fenix.ext.getPreferenceKey
+
+class SettingsFragment : PreferenceFragmentCompat() {
+
+ interface ActionBarUpdater {
+ fun updateTitle(titleResId: Int)
+ }
+
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ setPreferencesFromResource(R.xml.preferences, rootKey)
+ }
+
+ override fun onResume() {
+ 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)
+
+ val preferenceMakeDefaultBrowser = findPreference(makeDefaultBrowserKey)
+
+ preferenceMakeDefaultBrowser.onPreferenceClickListener = getClickListenerForMakeDefaultBrowser()
+ }
+
+ private val defaultClickListener = OnPreferenceClickListener { preference ->
+ Toast.makeText(context, "${preference.title} Clicked", Toast.LENGTH_SHORT).show()
+ true
+ }
+
+ private fun getClickListenerForMakeDefaultBrowser(): OnPreferenceClickListener {
+ return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
+ OnPreferenceClickListener {
+ val intent = Intent(
+ Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS
+ )
+ startActivity(intent)
+ true
+ }
+ } else {
+ defaultClickListener
+ }
+ }
+
+ private fun getActionBarUpdater() = activity as ActionBarUpdater
+}
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 8793c2e80..6281ccb78 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -1,29 +1,54 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/nav_graph"
+ app:startDestination="@id/homeFragment">
-
-
-
+
+
+
+
-
-
+
+
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml
new file mode 100644
index 000000000..e6eddf1e9
--- /dev/null
+++ b/app/src/main/res/values/preference_keys.xml
@@ -0,0 +1,7 @@
+
+
+
+ pref_key_make_default_browser
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2ebb97ec1..05cd8946f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -23,4 +23,10 @@
Fenix will collect your browsing sessions on your Home Screen for you to retrieve later.
Scan
Shortcuts
+
+
+ Make default browser
+
+
+ Settings
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index cc6377645..1983c6d6e 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -8,6 +8,12 @@
- @color/colorPrimary
- @color/colorPrimaryDark
- @color/colorAccent
+
+ - @style/PreferenceThemeOverlay
+
+
+