Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b742756 authored by Anthony Hugh's avatar Anthony Hugh
Browse files

Add new dialog for warning confirmations

This change updates the Wear warning dialog for when users try
to change permissions for system apps and apps that are targeting
old SDKs.

Because Wear does not have a common dialog yet, I needed to create
a new activity to hold our confirmation view.

Changes:
    - Update logic to show Wear confirmation screen instead of using
      AlertDialog
    - Added WarningConfirmationActivity
    - Change font size for confirmation dialog
    - Make ConfirmationViewHandler support hiding one of the 3 vertical
      buttons
    - rename grant_permissions.xml to more generic confirmation_dialog

BUG: 24132857

Change-Id: Id225e663f0a2cd7b99fb177f780a6a3d0da15214
parent fb9be671
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -121,6 +121,10 @@
                  android:authorities="com.google.android.packageinstaller.wear.provider"
                  android:grantUriPermissions="true"
                  android:exported="true" />

        <activity android:name=".permission.ui.wear.WarningConfirmationActivity"
                  android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS"
                  android:theme="@style/Settings"/>
    </application>

</manifest>
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@

    <style name="GrantPermissions.TitleText">
        <item name="android:fontFamily">sans-serif-condensed-light</item>
        <item name="android:textSize">20sp</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">@color/grant_permissions_title_color</item>
        <item name="android:lineSpacingMultiplier">1.221</item>
    </style>
+29 −20
Original line number Diff line number Diff line
@@ -18,10 +18,7 @@ package com.android.packageinstaller.permission.ui.wear;

import android.annotation.Nullable;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -51,11 +48,13 @@ public final class AppPermissionsFragmentWear extends TitledSettingsFragment {

    private static final String LOG_TAG = "ManagePermsFragment";

    private static final int WARNING_CONFIRMATION_REQUEST = 252;
    private List<AppPermissionGroup> mToggledGroups;
    private AppPermissions mAppPermissions;
    private PermissionsSettingsAdapter mAdapter;

    private boolean mHasConfirmedRevoke;
    private int mPendingPermGroupIndex = -1;

    public static AppPermissionsFragmentWear newInstance(String packageName) {
        return setPackageName(new AppPermissionsFragmentWear(), packageName);
@@ -216,29 +215,39 @@ public final class AppPermissionsFragmentWear extends TitledSettingsFragment {
        } else {
            final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
            if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
                new AlertDialog.Builder(getContext())
                        .setMessage(grantedByDefault ? R.string.system_warning
                                : R.string.old_sdk_deny_warning)
                        .setNegativeButton(R.string.cancel, null)
                        .setPositiveButton(R.string.grant_dialog_button_deny,
                                new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                mPendingPermGroupIndex = index;
                Intent intent = new Intent(getActivity(), WarningConfirmationActivity.class);
                intent.putExtra(WarningConfirmationActivity.EXTRA_WARNING_MESSAGE,
                        getString(grantedByDefault ?
                                R.string.system_warning : R.string.old_sdk_deny_warning));
                startActivityForResult(intent, WARNING_CONFIRMATION_REQUEST);
            } else {
                group.revokeRuntimePermissions(false);
                                if (!grantedByDefault) {
                                    mHasConfirmedRevoke = true;
            }
        }

        updatePermissionGroupSetting(index);
    }
                        })
                        .show();
            } else {

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == WARNING_CONFIRMATION_REQUEST) {
            if (resultCode == Activity.RESULT_OK) {
                SettingsAdapter.Setting<AppPermissionGroup> setting =
                        mAdapter.get(mPendingPermGroupIndex);
                final AppPermissionGroup group = setting.data;
                group.revokeRuntimePermissions(false);
                if (!group.hasGrantedByDefaultPermission()) {
                    mHasConfirmedRevoke = true;
                }

                updatePermissionGroupSetting(mPendingPermGroupIndex);
            }

        updatePermissionGroupSetting(index);
            mPendingPermGroupIndex = -1;
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    private void updatePermissionGroupSetting(int index) {
+12 −4
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public abstract class ConfirmationViewHandler implements
    }

    public View createView() {
        mRoot = LayoutInflater.from(mContext).inflate(R.layout.grant_permissions, null);
        mRoot = LayoutInflater.from(mContext).inflate(R.layout.confirmation_dialog, null);

        mMessage = (TextView) mRoot.findViewById(R.id.message);
        mCurrentPageText = (TextView) mRoot.findViewById(R.id.current_page_text);
@@ -141,16 +141,24 @@ public abstract class ConfirmationViewHandler implements
            case MODE_VERTICAL_BUTTONS:
                mHorizontalButtonBar.setVisibility(View.GONE);
                mVerticalButtonBar.setVisibility(View.VISIBLE);

                mVerticalButton1.setText(getVerticalButton1Text());
                mVerticalButton2.setText(getVerticalButton2Text());
                mVerticalButton3.setText(getVerticalButton3Text());

                mVerticalButton1.setCompoundDrawablesWithIntrinsicBounds(
                        getVerticalButton1Icon(), null, null, null);
                mVerticalButton2.setCompoundDrawablesWithIntrinsicBounds(
                        getVerticalButton2Icon(), null, null, null);

                CharSequence verticalButton3Text = getVerticalButton3Text();
                if (TextUtils.isEmpty(verticalButton3Text)) {
                    mVerticalButton3.setVisibility(View.GONE);
                } else {
                    mVerticalButton3.setText(getVerticalButton3Text());
                    mVerticalButton3.setCompoundDrawablesWithIntrinsicBounds(
                            getVerticalButton3Icon(), null, null, null);
                }

                break;
        }

Loading