From b672f2f427bcd3373205e4bf2527a1724b739dc6 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Mon, 9 Oct 2023 14:01:04 -0600 Subject: [PATCH] Fix and simplify --- app/src/main/AndroidManifest.xml | 4 +- .../lagradost/cloudstream3/CommonActivity.kt | 49 +++++-------------- .../lagradost/cloudstream3/MainActivity.kt | 7 +-- .../ui/player/DownloadedPlayerActivity.kt | 9 ++-- 4 files changed, 24 insertions(+), 45 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 15767d7b..503cd76b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,7 +61,9 @@ android:exported="true" android:resizeableActivity="true" android:screenOrientation="userLandscape" - android:supportsPictureInPicture="true"> + android:supportsPictureInPicture="true" + android:taskAffinity="com.lagradost.cloudstream3.downloadedplayer" + android:launchMode="singleTask"> diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 8a650ac1..16a438b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -64,34 +64,10 @@ object CommonActivity { private set(value) { _activity = WeakReference(value) } - private val activeActivities = mutableListOf>() // Keep track of active activities @MainThread - fun registerActivity(activity: Activity) { - activeActivities.add(WeakReference(activity)) - } - - @MainThread - fun unregisterActivity(activity: Activity) { - val iterator = activeActivities.iterator() - while (iterator.hasNext()) { - val weakReference = iterator.next() - val storedActivity = weakReference.get() - if (storedActivity == null || storedActivity == activity) { - iterator.remove() - } - } - } - - @MainThread - fun getCurrentActivity(): Activity? { - for (weakReference in activeActivities) { - val activity = weakReference.get() - if (activity != null && !activity.isFinishing) { - return activity - } - } - return null + fun setActivityInstance(newActivity: Activity?) { + activity = newActivity } @MainThread @@ -232,24 +208,25 @@ object CommonActivity { setLocale(this, localeCode) } - fun init() { - val act = getCurrentActivity() as? ComponentActivity ?: return + fun init(act: Activity) { + setActivityInstance(act) + + val componentActivity = activity as? ComponentActivity ?: return - activity = act //https://stackoverflow.com/questions/52594181/how-to-know-if-user-has-disabled-picture-in-picture-feature-permission //https://developer.android.com/guide/topics/ui/picture-in-picture canShowPipMode = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && // OS SUPPORT - act.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) && // HAS FEATURE, MIGHT BE BLOCKED DUE TO POWER DRAIN - act.hasPIPPermission() // CHECK IF FEATURE IS ENABLED IN SETTINGS + componentActivity.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) && // HAS FEATURE, MIGHT BE BLOCKED DUE TO POWER DRAIN + componentActivity.hasPIPPermission() // CHECK IF FEATURE IS ENABLED IN SETTINGS - act.updateLocale() - act.updateTv() + componentActivity.updateLocale() + componentActivity.updateTv() NewPipe.init(DownloaderTestImpl.getInstance()) for (resumeApp in resumeApps) { resumeApp.launcher = - act.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + componentActivity.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> val resultCode = result.resultCode val data = result.data if (resultCode == AppCompatActivity.RESULT_OK && data != null && resumeApp.position != null && resumeApp.duration != null) { @@ -266,11 +243,11 @@ object CommonActivity { // Ask for notification permissions on Android 13 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission( - act, + componentActivity, Manifest.permission.POST_NOTIFICATIONS ) != PackageManager.PERMISSION_GRANTED ) { - val requestPermissionLauncher = act.registerForActivityResult( + val requestPermissionLauncher = componentActivity.registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> Log.d(TAG, "Notification permission: $isGranted") diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 60468ff6..5595c377 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -67,6 +67,7 @@ import com.lagradost.cloudstream3.CommonActivity.onColorSelectedEvent import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint import com.lagradost.cloudstream3.CommonActivity.screenHeight +import com.lagradost.cloudstream3.CommonActivity.setActivityInstance import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.updateLocale import com.lagradost.cloudstream3.databinding.ActivityMainBinding @@ -590,6 +591,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { override fun onResume() { super.onResume() afterPluginsLoadedEvent += ::onAllPluginsLoaded + setActivityInstance(this) try { if (isCastApiAvailable()) { //mCastSession = mSessionManager.currentCastSession @@ -681,7 +683,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { broadcastIntent.setClass(this, VideoDownloadRestartReceiver::class.java) this.sendBroadcast(broadcastIntent) afterPluginsLoadedEvent -= ::onAllPluginsLoaded - CommonActivity.unregisterActivity(this) super.onDestroy() } @@ -1370,8 +1371,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // val navView: BottomNavigationView = findViewById(R.id.nav_view) setUpBackup() - CommonActivity.registerActivity(this) - CommonActivity.init() + + CommonActivity.init(this) val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 39338179..4c3376bb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -74,8 +74,7 @@ class DownloadedPlayerActivity : AppCompatActivity() { CommonActivity.loadThemes(this) super.onCreate(savedInstanceState) - CommonActivity.registerActivity(this) - CommonActivity.init() + CommonActivity.init(this) setContentView(R.layout.empty_layout) @@ -112,8 +111,8 @@ class DownloadedPlayerActivity : AppCompatActivity() { } } - override fun onDestroy() { - CommonActivity.unregisterActivity(this) - super.onDestroy() + override fun onResume() { + super.onResume() + CommonActivity.setActivityInstance(this) } } \ No newline at end of file