DO NOT MERGE: Add permission dialogs to the Dialogs Sample page
Bug: 153478255, 154244647
Test: Manual on emulator and on device
Change-Id: Id529e08775603be27cc878b6d7ace864d59a4d6a
(cherry picked from commit 82c381779caf08c73d0b30c88b1afaf92e384bf3)
diff --git a/car-ui-lib/tests/paintbooth/AndroidManifest.xml b/car-ui-lib/tests/paintbooth/AndroidManifest.xml
index ac2e32a..b8dd1ca 100644
--- a/car-ui-lib/tests/paintbooth/AndroidManifest.xml
+++ b/car-ui-lib/tests/paintbooth/AndroidManifest.xml
@@ -26,6 +26,18 @@
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
<uses-permission android:name="android.permission.CHANGE_OVERLAY_PACKAGES"/>
<uses-permission android:name="android.permission.MANAGE_USERS"/>
+ <!-- Required to use the TYPE_DISPLAY_OVERLAY layout param for the current activity overlay -->
+ <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
+ <!-- Required for listening to android task stack changes -->
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+ <uses-permission android:name="android.permission.REAL_GET_TASKS" />
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+ <!-- Required for using TYPE_APPLICATION_OVERLAY to display overlays -->
+ <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+ <!-- Required to test permission dialogs -->
+ <uses-permission android:name="android.permission.CAMERA"/>
+ <uses-permission android:name="android.permission.READ_CONTACTS"/>
+ <uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:supportsRtl="true"
diff --git a/car-ui-lib/tests/paintbooth/res/values/strings.xml b/car-ui-lib/tests/paintbooth/res/values/strings.xml
index cd45f77..feef714 100644
--- a/car-ui-lib/tests/paintbooth/res/values/strings.xml
+++ b/car-ui-lib/tests/paintbooth/res/values/strings.xml
@@ -251,6 +251,12 @@
<!-- Text to show Dialog with single choice items-->
<string name="dialog_show_single_choice">Show with single choice items</string>
+ <!-- Text to show a permission Dialog-->
+ <string name="dialog_show_permission_dialog">Show permission dialog</string>
+
+ <!-- Text to show a permission Dialog for multiple permissions-->
+ <string name="dialog_show_multi_permission_dialog">Show multiple permissions dialog</string>
+
<!--This section is for widget attributes -->
<eat-comment/>
<!-- Text for checkbox [CHAR_LIMIT=16]-->
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
index 1f5f26a..d85d74f 100644
--- a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
@@ -16,7 +16,9 @@
package com.android.car.ui.paintbooth.dialogs;
+import android.Manifest;
import android.app.Activity;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Pair;
import android.view.LayoutInflater;
@@ -78,7 +80,10 @@
v -> showDialogWithSubtitleAndIcon()));
mButtons.add(Pair.create(R.string.dialog_show_single_choice,
v -> showDialogWithSingleChoiceItems()));
-
+ mButtons.add(Pair.create(R.string.dialog_show_permission_dialog,
+ v -> showPermissionDialog()));
+ mButtons.add(Pair.create(R.string.dialog_show_multi_permission_dialog,
+ v -> showMultiPermissionDialog()));
CarUiRecyclerView recyclerView = requireViewById(R.id.list);
recyclerView.setAdapter(mAdapter);
@@ -196,6 +201,44 @@
.show();
}
+ private void showPermissionDialog() {
+ if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this, "Permission already granted. Remove CAMERA permission from "
+ + "Settings > All apps > PaintBooth", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ requestPermissions(new String[]{Manifest.permission.CAMERA}, 1);
+ }
+
+ private void showMultiPermissionDialog() {
+ if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
+ && checkSelfPermission(Manifest.permission.SEND_SMS)
+ == PackageManager.PERMISSION_GRANTED
+ && checkSelfPermission(Manifest.permission.READ_CONTACTS)
+ == PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this, "Permissions are already granted. Remove CAMERA, SEND_SMS or "
+ + "READ_CONTACTS permission from Settings > All apps > PaintBooth",
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+ requestPermissions(new String[]{Manifest.permission.CAMERA,
+ Manifest.permission.READ_CONTACTS, Manifest.permission.SEND_SMS}, 1);
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions,
+ int[] grantResults) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Permission ");
+ for (int i = 0; i < permissions.length; i++) {
+ sb.append(permissions[i]);
+ sb.append("=");
+ sb.append(grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied");
+ sb.append("\n");
+ }
+ Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
+ }
+
private static class ViewHolder extends CarUiRecyclerView.ViewHolder {
private final Button mButton;