From 90c04623c6c62788fb25c3847c110c46848e3f78 Mon Sep 17 00:00:00 2001 From: azomDev Date: Fri, 6 Feb 2026 13:37:31 -0500 Subject: [PATCH] Add Android permissions and runtime permission prompts --- .../android/app/src/main/AndroidManifest.xml | 31 +++----- .../java/dev/azom/privacypin/MainActivity.kt | 70 +++++++++++++++++++ 2 files changed, 81 insertions(+), 20 deletions(-) diff --git a/app/src-tauri/gen/android/app/src/main/AndroidManifest.xml b/app/src-tauri/gen/android/app/src/main/AndroidManifest.xml index f72a811..7a2dc45 100644 --- a/app/src-tauri/gen/android/app/src/main/AndroidManifest.xml +++ b/app/src-tauri/gen/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,18 @@ - + + + + + + + - - + + @@ -24,14 +21,8 @@ - - + + diff --git a/app/src-tauri/gen/android/app/src/main/java/dev/azom/privacypin/MainActivity.kt b/app/src-tauri/gen/android/app/src/main/java/dev/azom/privacypin/MainActivity.kt index fdd30cd..ae56a5b 100644 --- a/app/src-tauri/gen/android/app/src/main/java/dev/azom/privacypin/MainActivity.kt +++ b/app/src-tauri/gen/android/app/src/main/java/dev/azom/privacypin/MainActivity.kt @@ -1,11 +1,81 @@ package dev.azom.privacypin +import android.Manifest +import android.content.pm.PackageManager +import android.os.Build import android.os.Bundle import androidx.activity.enableEdgeToEdge +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat class MainActivity : TauriActivity() { + private lateinit var requestForegroundLocationLauncher: ActivityResultLauncher> + private lateinit var requestBackgroundLocationLauncher: ActivityResultLauncher + private lateinit var requestNotificationsLauncher: ActivityResultLauncher + override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge() super.onCreate(savedInstanceState) + registerPermissionLaunchers() + requestRequiredPermissions() + } + + private fun registerPermissionLaunchers() { + requestForegroundLocationLauncher = + registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { + requestRequiredPermissions() + } + + requestBackgroundLocationLauncher = + registerForActivityResult(ActivityResultContracts.RequestPermission()) { + requestRequiredPermissions() + } + + requestNotificationsLauncher = + registerForActivityResult(ActivityResultContracts.RequestPermission()) { + requestRequiredPermissions() + } + } + + private fun requestRequiredPermissions() { + if (!hasForegroundLocation()) { + requestForegroundLocationLauncher.launch( + arrayOf( + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION, + ) + ) + return + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !hasBackgroundLocation()) { + requestBackgroundLocationLauncher.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION) + return + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !hasNotifications()) { + requestNotificationsLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) + } + } + + private fun hasForegroundLocation(): Boolean { + val coarse = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) + val fine = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) + return coarse == PackageManager.PERMISSION_GRANTED || fine == PackageManager.PERMISSION_GRANTED + } + + private fun hasBackgroundLocation(): Boolean { + return ContextCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_BACKGROUND_LOCATION + ) == PackageManager.PERMISSION_GRANTED + } + + private fun hasNotifications(): Boolean { + return ContextCompat.checkSelfPermission( + this, + Manifest.permission.POST_NOTIFICATIONS + ) == PackageManager.PERMISSION_GRANTED } } -- 2.51.2