Skip to content

Commit 44d8703

Browse files
Add files via upload
1 parent 924a201 commit 44d8703

1 file changed

Lines changed: 89 additions & 16 deletions

File tree

app/src/main/kotlin/com/google/ai/sample/MainActivity.kt

Lines changed: 89 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
1-
/*
2-
* Copyright 2023 Google LLC
3-
*
4-
* Licensed under the Apache License, Version 2.0 (the "License");
5-
* you may not use this file except in compliance with the License.
6-
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
10-
* Unless required by applicable law or agreed to in writing, software
11-
* distributed under the License is distributed on an "AS IS" BASIS,
12-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-
* See the License for the specific language governing permissions and
14-
* limitations under the License.
15-
*/
16-
171
package com.google.ai.sample
182

3+
import android.Manifest
4+
import android.content.Intent
5+
import android.content.pm.PackageManager
6+
import android.net.Uri
7+
import android.os.Build
198
import android.os.Bundle
9+
import android.provider.Settings
10+
import android.util.Log
11+
import android.widget.Toast
2012
import androidx.activity.ComponentActivity
2113
import androidx.activity.compose.setContent
14+
import androidx.activity.result.contract.ActivityResultContracts
2215
import androidx.compose.foundation.layout.fillMaxSize
2316
import androidx.compose.material3.MaterialTheme
2417
import androidx.compose.material3.Surface
2518
import androidx.compose.ui.Modifier
19+
import androidx.core.app.ActivityCompat
20+
import androidx.core.content.ContextCompat
2621
import androidx.navigation.compose.NavHost
2722
import androidx.navigation.compose.composable
2823
import androidx.navigation.compose.rememberNavController
@@ -33,9 +28,42 @@ import com.google.ai.sample.ui.theme.GenerativeAISample
3328

3429
class MainActivity : ComponentActivity() {
3530

31+
private val requiredPermissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
32+
arrayOf(
33+
Manifest.permission.READ_MEDIA_IMAGES,
34+
Manifest.permission.READ_MEDIA_VIDEO
35+
)
36+
} else {
37+
arrayOf(
38+
Manifest.permission.READ_EXTERNAL_STORAGE,
39+
Manifest.permission.WRITE_EXTERNAL_STORAGE
40+
)
41+
}
42+
43+
private val requestPermissionLauncher = registerForActivityResult(
44+
ActivityResultContracts.RequestMultiplePermissions()
45+
) { permissions ->
46+
val allGranted = permissions.entries.all { it.value }
47+
if (allGranted) {
48+
Log.d(TAG, "All permissions granted")
49+
Toast.makeText(this, "Alle Berechtigungen erteilt", Toast.LENGTH_SHORT).show()
50+
} else {
51+
Log.d(TAG, "Some permissions denied")
52+
Toast.makeText(this, "Einige Berechtigungen wurden verweigert. Die App benötigt Zugriff auf Medien, um Screenshots zu verarbeiten.", Toast.LENGTH_LONG).show()
53+
54+
// If MANAGE_EXTERNAL_STORAGE is needed (for Android 11+)
55+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
56+
requestManageExternalStoragePermission()
57+
}
58+
}
59+
}
60+
3661
override fun onCreate(savedInstanceState: Bundle?) {
3762
super.onCreate(savedInstanceState)
3863

64+
// Check and request permissions
65+
checkAndRequestPermissions()
66+
3967
setContent {
4068
GenerativeAISample {
4169
// A surface container using the 'background' color from the theme
@@ -65,4 +93,49 @@ class MainActivity : ComponentActivity() {
6593
}
6694
}
6795
}
96+
97+
private fun checkAndRequestPermissions() {
98+
val permissionsToRequest = mutableListOf<String>()
99+
100+
// Check which permissions we need to request
101+
for (permission in requiredPermissions) {
102+
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
103+
permissionsToRequest.add(permission)
104+
}
105+
}
106+
107+
// Request permissions if needed
108+
if (permissionsToRequest.isNotEmpty()) {
109+
requestPermissionLauncher.launch(permissionsToRequest.toTypedArray())
110+
} else {
111+
Log.d(TAG, "All permissions already granted")
112+
113+
// If MANAGE_EXTERNAL_STORAGE is needed (for Android 11+)
114+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
115+
requestManageExternalStoragePermission()
116+
}
117+
}
118+
}
119+
120+
private fun requestManageExternalStoragePermission() {
121+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
122+
if (!android.os.Environment.isExternalStorageManager()) {
123+
try {
124+
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
125+
intent.addCategory("android.intent.category.DEFAULT")
126+
intent.data = Uri.parse("package:$packageName")
127+
startActivity(intent)
128+
Toast.makeText(this, "Bitte erteilen Sie Zugriff auf alle Dateien", Toast.LENGTH_LONG).show()
129+
} catch (e: Exception) {
130+
val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
131+
startActivity(intent)
132+
Toast.makeText(this, "Bitte erteilen Sie Zugriff auf alle Dateien", Toast.LENGTH_LONG).show()
133+
}
134+
}
135+
}
136+
}
137+
138+
companion object {
139+
private const val TAG = "MainActivity"
140+
}
68141
}

0 commit comments

Comments
 (0)