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 + + +