From 433d6a0f46f7f04d8752a9f8dfb6663c8e9afb3f Mon Sep 17 00:00:00 2001 From: dankmeme01 <42031238+dankmeme01@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:30:30 +0100 Subject: [PATCH 1/4] add support for requesting permissions from mods or Geode --- app/src/main/AndroidManifest.xml | 1 + .../geode/launcher/GeometryDashActivity.kt | 7 ++++++ .../com/geode/launcher/utils/GeodeUtils.kt | 23 +++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aff44c68..47e372ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ + Date: Fri, 26 Jan 2024 22:35:08 +0100 Subject: [PATCH 2/4] make permission requesting use launchers and add callback --- .../geode/launcher/GeometryDashActivity.kt | 7 ----- .../com/geode/launcher/utils/GeodeUtils.kt | 31 ++++++++++++++----- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/geode/launcher/GeometryDashActivity.kt b/app/src/main/java/com/geode/launcher/GeometryDashActivity.kt index f9294087..37252e26 100644 --- a/app/src/main/java/com/geode/launcher/GeometryDashActivity.kt +++ b/app/src/main/java/com/geode/launcher/GeometryDashActivity.kt @@ -45,17 +45,11 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL private var mHasWindowFocus = false private var mReceiver: BroadcastReceiver? = null - companion object { - var instance: GeometryDashActivity? = null - } - override fun onCreate(savedInstanceState: Bundle?) { setupUIState() super.onCreate(savedInstanceState) - instance = this - // return back to main if Geometry Dash isn't found if (!LaunchUtils.isGeometryDashInstalled(packageManager)) { returnToMain() @@ -319,7 +313,6 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL super.onDestroy() unregisterReceivers() FMOD.close() - instance = null } private fun resumeGame() { diff --git a/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt b/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt index 22267e59..1126d12a 100644 --- a/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt +++ b/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt @@ -30,6 +30,7 @@ object GeodeUtils { private lateinit var openDirectoryResultLauncher: ActivityResultLauncher private lateinit var openFilesResultLauncher: ActivityResultLauncher private lateinit var saveFileResultLauncher: ActivityResultLauncher + private lateinit var requestPermissionLauncher: ActivityResultLauncher fun setContext(activity: AppCompatActivity) { this.activity = WeakReference(activity) @@ -77,6 +78,9 @@ object GeodeUtils { } failedCallback() } + requestPermissionLauncher = activity.registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> + permissionCallback(isGranted) + } } @JvmStatic @@ -257,19 +261,30 @@ object GeodeUtils { @JvmStatic fun getPermissionStatus(permission: String): Boolean { return ContextCompat.checkSelfPermission( - GeometryDashActivity.instance?.applicationContext ?: return false, + activity.get()?.applicationContext ?: return false, permission ) == PackageManager.PERMISSION_GRANTED } @JvmStatic - fun requestPermission(permission: String) { - if (!getPermissionStatus(permission)) { - ActivityCompat.requestPermissions( - GeometryDashActivity.instance!!, - arrayOf(permission), - 12345 - ) + fun requestPermission(permission: String): Boolean { + if (getPermissionStatus(permission)) { + permissionCallback(true) + return true } + + activity.get()?.run { + try { + requestPermissionLauncher.launch(permission) + return true + } catch (e: ActivityNotFoundException) { + return false + } + } + + return false } + + @Suppress("KotlinJniMissingFunction") + external fun permissionCallback(granted: Boolean) } \ No newline at end of file From 5fa42b6ca5b88385d58f66397f07f061fb89787e Mon Sep 17 00:00:00 2001 From: dankmeme01 <42031238+dankmeme01@users.noreply.github.com> Date: Fri, 26 Jan 2024 22:35:28 +0100 Subject: [PATCH 3/4] remove unused imports --- app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt b/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt index 1126d12a..b245f642 100644 --- a/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt +++ b/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt @@ -12,10 +12,8 @@ import android.util.Log import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity -import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.documentfile.provider.DocumentFile -import com.geode.launcher.GeometryDashActivity import com.geode.launcher.activityresult.GeodeOpenFileActivityResult import com.geode.launcher.activityresult.GeodeOpenFilesActivityResult import com.geode.launcher.activityresult.GeodeSaveFileActivityResult From d078879e7b05af6cda57e285aec3150199650fcb Mon Sep 17 00:00:00 2001 From: dankmeme01 <42031238+dankmeme01@users.noreply.github.com> Date: Fri, 26 Jan 2024 23:04:33 +0100 Subject: [PATCH 4/4] change handling of failures --- .../main/java/com/geode/launcher/utils/GeodeUtils.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt b/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt index b245f642..b25cd25a 100644 --- a/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt +++ b/app/src/main/java/com/geode/launcher/utils/GeodeUtils.kt @@ -265,22 +265,23 @@ object GeodeUtils { } @JvmStatic - fun requestPermission(permission: String): Boolean { + fun requestPermission(permission: String) { if (getPermissionStatus(permission)) { permissionCallback(true) - return true + return } activity.get()?.run { try { requestPermissionLauncher.launch(permission) - return true } catch (e: ActivityNotFoundException) { - return false + permissionCallback(false) } + + return } - return false + permissionCallback(false) } @Suppress("KotlinJniMissingFunction")