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

Commit d5681ee9 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Warn users when selecting non-Direct Boot apps." into nyc-mr1-dev

parents 7335b650 4a8136b5
Loading
Loading
Loading
Loading
+80 −15
Original line number Diff line number Diff line
@@ -18,8 +18,13 @@ package com.android.settings;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v14.preference.ListPreferenceDialogFragment;
import android.support.v7.preference.ListPreference;
@@ -50,6 +55,18 @@ public class CustomListPreference extends ListPreference {
        return true;
    }

    /**
     * Called when a user is about to choose the given value, to determine if we
     * should show a confirmation dialog.
     *
     * @param value the value the user is about to choose
     * @return the message to show in a confirmation dialog, or {@code null} to
     *         not request confirmation
     */
    protected CharSequence getConfirmationMessage(String value) {
        return null;
    }

    protected void onDialogStateRestored(Dialog dialog, Bundle savedInstanceState) {
    }

@@ -82,9 +99,7 @@ public class CustomListPreference extends ListPreference {
                builder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        CustomListPreferenceDialogFragment.this.onClick(dialog,
                                DialogInterface.BUTTON_POSITIVE);
                        dialog.dismiss();
                        onItemChosen();
                    }
                });
            }
@@ -115,18 +130,11 @@ public class CustomListPreference extends ListPreference {

        protected DialogInterface.OnClickListener getOnItemClickListener() {
            return new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    setClickedDialogEntryIndex(which);


                    if (getCustomizablePreference().isAutoClosePreference()) {
                        /*
                         * Clicking on an item simulates the positive button
                         * click, and dismisses the dialog.
                         */
                        CustomListPreferenceDialogFragment.this.onClick(dialog,
                                DialogInterface.BUTTON_POSITIVE);
                        dialog.dismiss();
                        onItemChosen();
                    }
                }
            };
@@ -136,17 +144,74 @@ public class CustomListPreference extends ListPreference {
            mClickedDialogEntryIndex = which;
        }

        private String getValue() {
            final ListPreference preference = getCustomizablePreference();
            if (mClickedDialogEntryIndex >= 0 && preference.getEntryValues() != null) {
                return preference.getEntryValues()[mClickedDialogEntryIndex].toString();
            } else {
                return null;
            }
        }

        /**
         * Called when user has made a concrete item choice, but we might need
         * to make a quick detour to confirm that choice with a second dialog.
         */
        protected void onItemChosen() {
            final CharSequence message = getCustomizablePreference()
                    .getConfirmationMessage(getValue());
            if (message != null) {
                final Fragment f = new ConfirmDialogFragment();
                final Bundle args = new Bundle();
                args.putCharSequence(Intent.EXTRA_TEXT, message);
                f.setArguments(args);
                f.setTargetFragment(CustomListPreferenceDialogFragment.this, 0);
                final FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.add(f, getTag() + "-Confirm");
                ft.commitAllowingStateLoss();
            } else {
                onItemConfirmed();
            }
        }

        /**
         * Called when user has made a concrete item choice and we've fully
         * confirmed they want to move forward (if we took a detour above).
         */
        protected void onItemConfirmed() {
            onClick(getDialog(), DialogInterface.BUTTON_POSITIVE);
            getDialog().dismiss();
        }

        @Override
        public void onDialogClosed(boolean positiveResult) {
            getCustomizablePreference().onDialogClosed(positiveResult);
            final ListPreference preference = getCustomizablePreference();
            if (positiveResult && mClickedDialogEntryIndex >= 0 &&
                    preference.getEntryValues() != null) {
                String value = preference.getEntryValues()[mClickedDialogEntryIndex].toString();
            final String value = getValue();
            if (positiveResult && value != null) {
                if (preference.callChangeListener(value)) {
                    preference.setValue(value);
                }
            }
        }
    }

    public static class ConfirmDialogFragment extends DialogFragment {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            return new AlertDialog.Builder(getActivity())
                    .setMessage(getArguments().getCharSequence(Intent.EXTRA_TEXT))
                    .setPositiveButton(android.R.string.ok, new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            final Fragment f = getTargetFragment();
                            if (f != null) {
                                ((CustomListPreferenceDialogFragment) f).onItemConfirmed();
                            }
                        }
                    })
                    .setNegativeButton(android.R.string.cancel, null)
                    .create();
        }
    }
}
+10 −1
Original line number Diff line number Diff line
@@ -1150,5 +1150,14 @@ public final class Utils extends com.android.settingslib.Utils {
        }
        return false;
    }
}

    public static boolean isPackageDirectBootAware(Context context, String packageName) {
        try {
            final ApplicationInfo ai = context.getPackageManager().getApplicationInfo(
                    packageName, 0);
            return ai.isDirectBootAware() || ai.isPartiallyDirectBootAware();
        } catch (NameNotFoundException ignored) {
        }
        return false;
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.settings.applications;

import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -30,9 +29,11 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.AttributeSet;
import com.android.internal.telephony.SmsApplication;

import com.android.settings.AppListPreference;
import com.android.settings.R;
import com.android.settings.SelfAvailablePreference;
import com.android.settings.Utils;

import java.util.List;
import java.util.Objects;
@@ -56,6 +57,12 @@ public class DefaultEmergencyPreference extends AppListPreference
        load();
    }

    @Override
    protected CharSequence getConfirmationMessage(String value) {
        return Utils.isPackageDirectBootAware(getContext(), value) ? null
                : getContext().getText(R.string.direct_boot_unaware_dialog_message);
    }

    @Override
    protected boolean persistString(String value) {
        String previousValue = Settings.Secure.getString(mContentResolver,
+9 −4
Original line number Diff line number Diff line
@@ -24,22 +24,27 @@ import android.telecom.TelecomManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.AttributeSet;

import com.android.settings.AppListPreference;
import com.android.settings.R;
import com.android.settings.SelfAvailablePreference;
import com.android.settings.Utils;

import java.util.List;
import java.util.Objects;

public class DefaultPhonePreference extends AppListPreference implements SelfAvailablePreference {
    private final Context mContext;

    public DefaultPhonePreference(Context context, AttributeSet attrs) {
        super(context, attrs);

        mContext = context.getApplicationContext();
        loadDialerApps();
    }

    @Override
    protected CharSequence getConfirmationMessage(String value) {
        return Utils.isPackageDirectBootAware(getContext(), value) ? null
                : getContext().getText(R.string.direct_boot_unaware_dialog_message);
    }

    @Override
    protected boolean persistString(String value) {
        if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
+9 −2
Original line number Diff line number Diff line
@@ -22,19 +22,20 @@ import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.AttributeSet;

import com.android.internal.telephony.SmsApplication;
import com.android.internal.telephony.SmsApplication.SmsApplicationData;
import com.android.settings.AppListPreference;
import com.android.settings.R;
import com.android.settings.SelfAvailablePreference;
import com.android.settings.Utils;

import java.util.Collection;
import java.util.Objects;

public class DefaultSmsPreference extends AppListPreference implements SelfAvailablePreference {

    public DefaultSmsPreference(Context context, AttributeSet attrs) {
        super(context, attrs);

        loadSmsApps();
    }

@@ -59,6 +60,12 @@ public class DefaultSmsPreference extends AppListPreference implements SelfAvail
        return null;
    }

    @Override
    protected CharSequence getConfirmationMessage(String value) {
        return Utils.isPackageDirectBootAware(getContext(), value) ? null
                : getContext().getText(R.string.direct_boot_unaware_dialog_message);
    }

    @Override
    protected boolean persistString(String value) {
        if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
Loading