make permission requesting use launchers and add callback

This commit is contained in:
dankmeme01 committed 2024-01-26 22:35:08 +01:00
1 parent 433d6a0f46
commit e164b87436
2 files changed
+23 -15

No files matched your search

@@ -45,17 +45,11 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
private var mHasWindowFocus = false private var mHasWindowFocus = false
private var mReceiver: BroadcastReceiver? = null private var mReceiver: BroadcastReceiver? = null
companion object {
var instance: GeometryDashActivity? = null
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
setupUIState() setupUIState()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
instance = this
// return back to main if Geometry Dash isn't found // return back to main if Geometry Dash isn't found
if (!LaunchUtils.isGeometryDashInstalled(packageManager)) { if (!LaunchUtils.isGeometryDashInstalled(packageManager)) {
returnToMain() returnToMain()
@@ -319,7 +313,6 @@ class GeometryDashActivity : AppCompatActivity(), Cocos2dxHelper.Cocos2dxHelperL
super.onDestroy() super.onDestroy()
unregisterReceivers() unregisterReceivers()
FMOD.close() FMOD.close()
instance = null
} }
private fun resumeGame() { private fun resumeGame() {
@@ -30,6 +30,7 @@ object GeodeUtils {
private lateinit var openDirectoryResultLauncher: ActivityResultLauncher<Uri?> private lateinit var openDirectoryResultLauncher: ActivityResultLauncher<Uri?>
private lateinit var openFilesResultLauncher: ActivityResultLauncher<GeodeOpenFilesActivityResult.OpenFileParams> private lateinit var openFilesResultLauncher: ActivityResultLauncher<GeodeOpenFilesActivityResult.OpenFileParams>
private lateinit var saveFileResultLauncher: ActivityResultLauncher<GeodeSaveFileActivityResult.SaveFileParams> private lateinit var saveFileResultLauncher: ActivityResultLauncher<GeodeSaveFileActivityResult.SaveFileParams>
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>
fun setContext(activity: AppCompatActivity) { fun setContext(activity: AppCompatActivity) {
this.activity = WeakReference(activity) this.activity = WeakReference(activity)
@@ -77,6 +78,9 @@ object GeodeUtils {
} }
failedCallback() failedCallback()
} }
requestPermissionLauncher = activity.registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
permissionCallback(isGranted)
}
} }
@JvmStatic @JvmStatic
@@ -257,19 +261,30 @@ object GeodeUtils {
@JvmStatic @JvmStatic
fun getPermissionStatus(permission: String): Boolean { fun getPermissionStatus(permission: String): Boolean {
return ContextCompat.checkSelfPermission( return ContextCompat.checkSelfPermission(
GeometryDashActivity.instance?.applicationContext ?: return false, activity.get()?.applicationContext ?: return false,
permission permission
) == PackageManager.PERMISSION_GRANTED ) == PackageManager.PERMISSION_GRANTED
} }
@JvmStatic @JvmStatic
fun requestPermission(permission: String) { fun requestPermission(permission: String): Boolean {
if (!getPermissionStatus(permission)) { if (getPermissionStatus(permission)) {
ActivityCompat.requestPermissions( permissionCallback(true)
GeometryDashActivity.instance!!, return true
arrayOf(permission), }
12345
) activity.get()?.run {
try {
requestPermissionLauncher.launch(permission)
return true
} catch (e: ActivityNotFoundException) {
return false
} }
} }
return false
}
@Suppress("KotlinJniMissingFunction")
external fun permissionCallback(granted: Boolean)
} }