From 1881be24fcd33181367efc5a37711884def5f00e Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Thu, 2 Nov 2023 13:03:09 -0600 Subject: [PATCH] Fix some deprecations and other warnings * Replace deprecated onBackPressed() * Fixes some AndroidManifest warnings * Use android:dataExtractionRules for Android 12+ * Add tools:ignore for ScopedStorage and QueryAllPackagesPermission * Make VideoDownloadRestartReceiver not exported (fixes " Exported receiver does not require permission") - if this was incorrect I can revert this part * Bump tools:targetApi * Enable android:enableOnBackInvokedCallback for predictive back gestures on Android 13 (if enabled in developer options) and Android 14 (also fixes "OnBackInvokedCallback is not enabled for the application." which is commonly seen in logcat) --- app/src/main/AndroidManifest.xml | 16 ++++-- .../lagradost/cloudstream3/MainActivity.kt | 55 +++++++++---------- .../ui/download/DownloadChildFragment.kt | 6 +- .../ui/settings/SettingsFragment.kt | 4 +- .../ui/settings/extensions/PluginsFragment.kt | 4 +- .../lagradost/cloudstream3/utils/UIHelper.kt | 4 +- .../main/res/xml/data_extraction_rules.xml | 3 + 7 files changed, 49 insertions(+), 43 deletions(-) create mode 100644 app/src/main/res/xml/data_extraction_rules.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 453c1fae..a71c5ecb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ - + @@ -17,7 +17,11 @@ - + + + + tools:targetApi="tiramisu"> - + android:exported="false"> + diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index a41028bd..22fa330d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -19,6 +19,7 @@ import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.widget.Toast +import androidx.activity.OnBackPressedCallback import androidx.activity.result.ActivityResultLauncher import androidx.annotation.IdRes import androidx.annotation.MainThread @@ -132,7 +133,6 @@ import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.migrateResumeWatching import com.lagradost.cloudstream3.utils.Event -import com.lagradost.cloudstream3.utils.IOnBackPressed import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.changeStatusBarState @@ -650,34 +650,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { builder.show().setDefaultFocus() } - private fun backPressed() { - this.window?.navigationBarColor = - this.colorFromAttribute(R.attr.primaryGrayBackground) - this.updateLocale() - this.updateLocale() - - val navHostFragment = - supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as? NavHostFragment - val navController = navHostFragment?.navController - val isAtHome = - navController?.currentDestination?.matchDestination(R.id.navigation_home) == true - - if (isAtHome && isTvSettings()) { - showConfirmExitDialog() - } else { - super.onBackPressed() - } - } - - override fun onBackPressed() { - ((supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as? NavHostFragment?)?.childFragmentManager?.primaryNavigationFragment as? IOnBackPressed)?.onBackPressed() - ?.let { runNormal -> - if (runNormal) backPressed() - } ?: run { - backPressed() - } - } - override fun onDestroy() { val broadcastIntent = Intent() broadcastIntent.action = "restart_service" @@ -1087,6 +1059,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } catch (_: Throwable) { } } + override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) @@ -1384,6 +1357,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { this.putString(SearchFragment.SEARCH_QUERY, nextSearchQuery) } } + + if (isTvSettings()) { + if (navDestination.matchDestination(R.id.navigation_home)) { + attachBackPressedCallback() + } else detachBackPressedCallback() + } } //val navController = findNavController(R.id.nav_host_fragment) @@ -1597,7 +1576,25 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // showToast(this, currentFocus.toString(), Toast.LENGTH_LONG) // } // } + } + private var backPressedCallback: OnBackPressedCallback? = null + + private fun attachBackPressedCallback() { + if (backPressedCallback == null) { + backPressedCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + showConfirmExitDialog() + } + } + } + + backPressedCallback?.isEnabled = true + onBackPressedDispatcher.addCallback(this, backPressedCallback!!) + } + + private fun detachBackPressedCallback() { + backPressedCallback?.isEnabled = false } suspend fun checkGithubConnectivity(): Boolean { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt index f62482ed..c3ec2bbd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt @@ -60,7 +60,7 @@ class DownloadChildFragment : Fragment() { } }.sortedBy { it.data.episode + (it.data.season ?: 0) * 100000 } if (eps.isEmpty()) { - activity?.onBackPressed() + activity?.onBackPressedDispatcher?.onBackPressed() return@main } @@ -78,7 +78,7 @@ class DownloadChildFragment : Fragment() { val folder = arguments?.getString("folder") val name = arguments?.getString("name") if (folder == null) { - activity?.onBackPressed() // TODO FIX + activity?.onBackPressedDispatcher?.onBackPressed() // TODO FIX return } fixPaddingStatusbar(binding?.downloadChildRoot) @@ -87,7 +87,7 @@ class DownloadChildFragment : Fragment() { title = name setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) setNavigationOnClickListener { - activity?.onBackPressed() + activity?.onBackPressedDispatcher?.onBackPressed() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index a4d19eba..08990b4d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -63,7 +63,7 @@ class SettingsFragment : Fragment() { setTitle(title) setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) setNavigationOnClickListener { - activity?.onBackPressed() + activity?.onBackPressedDispatcher?.onBackPressed() } } fixPaddingStatusbar(settingsToolbar) @@ -78,7 +78,7 @@ class SettingsFragment : Fragment() { setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) children.firstOrNull { it is ImageView }?.tag = getString(R.string.tv_no_focus_tag) setNavigationOnClickListener { - activity?.onBackPressed() + activity?.onBackPressedDispatcher?.onBackPressed() } } fixPaddingStatusbar(settingsToolbar) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index 172ea659..62702a98 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -69,7 +69,7 @@ class PluginsFragment : Fragment() { val isLocal = arguments?.getBoolean(PLUGINS_BUNDLE_LOCAL) == true if (url == null || name == null) { - activity?.onBackPressed() + activity?.onBackPressedDispatcher?.onBackPressed() return } @@ -117,7 +117,7 @@ class PluginsFragment : Fragment() { if (searchView?.isIconified == false) { searchView.isIconified = true } else { - activity?.onBackPressed() + activity?.onBackPressedDispatcher?.onBackPressed() } } searchView?.setOnQueryTextFocusChangeListener { _, hasFocus -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index d5357e0c..ab63867f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -418,7 +418,7 @@ object UIHelper { } fun FragmentActivity.popCurrentPage() { - this.onBackPressed() + this.onBackPressedDispatcher.onBackPressed() /*val currentFragment = supportFragmentManager.fragments.lastOrNull { it.isVisible } ?: return @@ -438,7 +438,7 @@ object UIHelper { val currentFragment = supportFragmentManager.fragments.lastOrNull { it.isVisible } - ?: //this.onBackPressed() + ?: //this.onBackPressedDispatcher.onBackPressed() return /* diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 00000000..ae9ece33 --- /dev/null +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file