in car_app_library/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/misc/RequestPermissionScreen.java [82:186]
public Template onGetTemplate() {
final Action headerAction = mPreSeedMode ? Action.APP_ICON : Action.BACK;
List<String> permissions = new ArrayList<>();
String[] declaredPermissions;
try {
PackageInfo info =
getCarContext().getPackageManager().getPackageInfo(
getCarContext().getPackageName(),
PackageManager.GET_PERMISSIONS);
declaredPermissions = info.requestedPermissions;
} catch (PackageManager.NameNotFoundException e) {
return new MessageTemplate.Builder("Package Not found.")
.setHeaderAction(headerAction)
.addAction(mRefreshAction)
.build();
}
if (declaredPermissions != null) {
for (String declaredPermission : declaredPermissions) {
// Don't include permissions against the car app host as they are all normal but
// show up as ungranted by the system.
if (declaredPermission.startsWith("androidx.car.app")) {
continue;
}
try {
CarAppPermission.checkHasPermission(getCarContext(), declaredPermission);
} catch (SecurityException e) {
permissions.add(declaredPermission);
}
}
}
if (permissions.isEmpty()) {
return new MessageTemplate.Builder("All permissions have been granted. Please "
+ "revoke permissions from Settings.")
.setHeaderAction(headerAction)
.addAction(new Action.Builder()
.setTitle("Close")
.setOnClickListener(this::finish)
.build())
.build();
}
StringBuilder message = new StringBuilder()
.append("The app needs access to the following permissions:\n");
for (String permission : permissions) {
message.append(permission);
message.append("\n");
}
OnClickListener listener = ParkedOnlyOnClickListener.create(() -> {
getCarContext().requestPermissions(
permissions,
(approved, rejected) -> {
CarToast.makeText(
getCarContext(),
String.format("Approved: %s Rejected: %s", approved, rejected),
CarToast.LENGTH_LONG).show();
});
if (!getCarContext().getPackageManager().hasSystemFeature(FEATURE_AUTOMOTIVE)) {
CarToast.makeText(getCarContext(), "Grant Permission on the phone screen",
CarToast.LENGTH_LONG).show();
}
});
Action action = new Action.Builder()
.setTitle("Grant Access")
.setBackgroundColor(CarColor.BLUE)
.setOnClickListener(listener)
.build();
Action action2 = null;
LocationManager locationManager =
(LocationManager) getCarContext().getSystemService(Context.LOCATION_SERVICE);
if (!LocationManagerCompat.isLocationEnabled(locationManager)) {
message.append("Enable Location Permissions on device\n");
action2 = new Action.Builder()
.setTitle("Enable Location")
.setBackgroundColor(CarColor.BLUE)
.setOnClickListener(ParkedOnlyOnClickListener.create(() -> {
getCarContext().startActivity(
new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS).addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK));
if (!getCarContext().getPackageManager().hasSystemFeature(
FEATURE_AUTOMOTIVE)) {
CarToast.makeText(getCarContext(), "Enable location on the phone "
+ "screen",
CarToast.LENGTH_LONG).show();
}
}))
.build();
}
LongMessageTemplate.Builder builder = new LongMessageTemplate.Builder(message)
.setTitle("Required Permissions")
.addAction(action)
.setHeaderAction(headerAction);
if (action2 != null) {
builder.addAction(action2);
}
return builder.build();
}