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 14d09a8b7..a21398933 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -309,7 +309,7 @@ class BrowserFragment : Fragment(), BackHandler { } ToolbarMenu.Item.Help -> { // TODO Help #1016 - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "1016") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "1016") } ToolbarMenu.Item.NewTab -> { val directions = BrowserFragmentDirections diff --git a/app/src/main/java/org/mozilla/fenix/ext/Context.kt b/app/src/main/java/org/mozilla/fenix/ext/Context.kt index 7f8567bbf..8fd9a7bb7 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Context.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Context.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.ext +import android.app.Activity import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent @@ -11,7 +12,9 @@ import android.content.Intent.ACTION_SEND import android.content.Intent.EXTRA_SUBJECT import android.content.Intent.EXTRA_TEXT import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import android.view.ContextThemeWrapper import androidx.annotation.StringRes +import androidx.fragment.app.FragmentActivity import mozilla.components.support.base.log.Log import mozilla.components.support.base.log.Log.Priority.WARN import org.mozilla.fenix.FenixApplication @@ -30,6 +33,12 @@ val Context.application: FenixApplication val Context.components: Components get() = application.components +fun Context.asActivity() = (this as? ContextThemeWrapper)?.baseContext as? Activity + ?: this as? Activity + +fun Context.asFragmentActivity() = (this as? ContextThemeWrapper)?.baseContext as? FragmentActivity + ?: this as? FragmentActivity + fun Context.getPreferenceKey(@StringRes resourceId: Int): String = resources.getString(resourceId) 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 cb6cbb432..78426bb07 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -252,7 +252,7 @@ class HomeFragment : Fragment(), CoroutineScope { is SessionsAction.MenuTapped -> openSessionMenu(SessionBottomSheetFragment.SessionType.Archived(it.archivedSession)) is SessionsAction.ShareTapped -> - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "244") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "244") } } } diff --git a/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt b/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt index de661fe25..319bf0144 100644 --- a/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/SessionBottomSheetFragment.kt @@ -53,7 +53,7 @@ class SessionBottomSheetFragment : BottomSheetDialogFragment(), LayoutContainer } view.send_and_share_session_button.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "244") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "244") } view.delete_session_button.setOnClickListener { 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 120760dca..7ed70d9a0 100644 --- a/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt @@ -48,19 +48,19 @@ class LibraryFragment : Fragment() { ) ) libraryDownloads.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "348") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "348") } libraryScreenshots.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "89") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "89") } libraryFavorites.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "90") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "90") } libraryReadingList.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "913") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "913") } librarySessions.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "637") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "637") } } @@ -76,7 +76,7 @@ class LibraryFragment : Fragment() { } R.id.librarySearch -> { // TODO Library Search - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "1118") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "1118") true } else -> super.onOptionsItemSelected(item) diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt index 4c8bedef0..2b97bcc24 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt @@ -119,7 +119,7 @@ class HistoryFragment : Fragment(), CoroutineScope, BackHandler { } R.id.librarySearch -> { // TODO Library Search #1118 - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "1118") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "1118") 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 d8e0ccc76..0f1ab6409 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt @@ -52,7 +52,7 @@ class SearchFragment : Fragment() { } ?: "" view.search_scan_button.setOnClickListener { - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "113") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "113") } toolbarComponent = ToolbarComponent( 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 60df1c2ca..0e386b5e7 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -40,6 +40,7 @@ import org.mozilla.fenix.R.string.pref_key_feedback import org.mozilla.fenix.R.string.pref_key_help import org.mozilla.fenix.R.string.pref_key_make_default_browser import org.mozilla.fenix.R.string.pref_key_rate +import org.mozilla.fenix.R.string.pref_key_remote_debugging import org.mozilla.fenix.R.string.pref_key_site_permissions import org.mozilla.fenix.R.string.pref_key_accessibility import org.mozilla.fenix.R.string.pref_key_language @@ -99,7 +100,7 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse } resources.getString(pref_key_language) -> { // TODO #220 - ItsNotBrokenSnack(context!!).showSnackbar(activity = activity!!, issueNumber = "220") + ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "220") } resources.getString(pref_key_data_choices) -> { navigateToDataChoices() diff --git a/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt b/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt index 9d55e25fd..a77d0a7b1 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/ItsNotBrokenSnack.kt @@ -4,25 +4,25 @@ package org.mozilla.fenix.utils -import android.app.Activity import android.content.Context import android.view.View import com.google.android.material.snackbar.Snackbar +import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.components class ItsNotBrokenSnack(val context: Context) { - fun getSnackbar(issueNumber: String, view: View): Snackbar { - val snackbar = Snackbar.make(view, message.replace("%", issueNumber), Snackbar.LENGTH_SHORT) - snackbar.setAction("Add Tab to Issue", { - context.components.useCases.tabsUseCases.addTab - .invoke(issues + issueNumber) - }) - return snackbar - } - fun showSnackbar(issueNumber: String, activity: Activity) { - val rootView = activity.window.decorView.findViewById(android.R.id.content) - getSnackbar(issueNumber, rootView).show() + fun showSnackbar(issueNumber: String) { + val rootView = context.asActivity()?.window?.decorView?.findViewById(android.R.id.content) + rootView?.let { + Snackbar.make(rootView, message.replace("%", issueNumber), Snackbar.LENGTH_SHORT).apply { + setAction("Add Tab to Issue") { + context.components.useCases.tabsUseCases.addTab + .invoke(issues + issueNumber) + } + show() + } + } } companion object {