public Template onGetTemplate()

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();
    }