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")