Merge "Fix "Cannot get activity context when service off"."
diff --git a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
index ab8f18a..63ccb6e 100644
--- a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
+++ b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
@@ -19,7 +19,6 @@
 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
-import android.app.Activity;
 import android.app.Dialog;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
@@ -60,10 +59,17 @@
         return false;
     };
 
-    public static Dialog createCapabilitiesDialog(Activity parentActivity,
+    /**
+     * Gets a content View for a dialog to confirm that they want to enable a service.
+     *
+     * @param context A valid context
+     * @param info The info about a service
+     * @return A content view suitable for viewing
+     */
+    public static Dialog createCapabilitiesDialog(Context context,
             AccessibilityServiceInfo info, View.OnClickListener listener) {
-        final AlertDialog ad = new AlertDialog.Builder(parentActivity)
-                .setView(createEnableDialogContentView(parentActivity, info, listener))
+        final AlertDialog ad = new AlertDialog.Builder(context)
+                .setView(createEnableDialogContentView(context, info, listener))
                 .create();
 
         Window window = ad.getWindow();
@@ -77,7 +83,7 @@
     }
 
     /**
-     * Return whether the device is encrypted with legacy full disk encryption. Newer devices
+     * Returns whether the device is encrypted with legacy full disk encryption. Newer devices
      * should be using File Based Encryption.
      *
      * @return true if device is encrypted
@@ -86,13 +92,6 @@
         return StorageManager.isNonDefaultBlockEncrypted();
     }
 
-    /**
-     * Get a content View for a dialog to confirm that they want to enable a service.
-     *
-     * @param context A valid context
-     * @param info The info about a service
-     * @return A content view suitable for viewing
-     */
     private static View createEnableDialogContentView(Context context,
             AccessibilityServiceInfo info, View.OnClickListener listener) {
         LayoutInflater inflater = (LayoutInflater) context.getSystemService(
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index bae6775..fcdd010 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -23,7 +23,6 @@
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.ContentResolver;
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
@@ -98,7 +97,7 @@
     @Override
     public void onPreferenceToggled(String preferenceKey, boolean enabled) {
         ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey);
-        AccessibilityUtils.setAccessibilityServiceState(getActivity(), toggledService, enabled);
+        AccessibilityUtils.setAccessibilityServiceState(getPrefContext(), toggledService, enabled);
     }
 
     // IMPORTANT: Refresh the info since there are dynamically changing
@@ -129,7 +128,7 @@
                     return null;
                 }
                 mDialog = AccessibilityServiceWarning
-                        .createCapabilitiesDialog(getActivity(), info,
+                        .createCapabilitiesDialog(getPrefContext(), info,
                                 this::onDialogButtonFromToggleClicked);
                 break;
             }
@@ -139,17 +138,17 @@
                     return null;
                 }
                 mDialog = AccessibilityServiceWarning
-                        .createCapabilitiesDialog(getActivity(), info,
+                        .createCapabilitiesDialog(getPrefContext(), info,
                                 this::onDialogButtonFromShortcutClicked);
                 break;
             }
             case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL: {
-                if (AccessibilityUtil.isGestureNavigateEnabled(getContext())) {
+                if (AccessibilityUtil.isGestureNavigateEnabled(getPrefContext())) {
                     mDialog = AccessibilityGestureNavigationTutorial
-                            .showGestureNavigationTutorialDialog(getActivity());
+                            .showGestureNavigationTutorialDialog(getPrefContext());
                 } else {
                     mDialog = AccessibilityGestureNavigationTutorial
-                            .showAccessibilityButtonTutorialDialog(getActivity());
+                            .showAccessibilityButtonTutorialDialog(getPrefContext());
                 }
                 break;
             }
@@ -185,7 +184,7 @@
     }
 
     private void updateSwitchBarToggleSwitch() {
-        final boolean checked = AccessibilityUtils.getEnabledServicesFromSettings(getActivity())
+        final boolean checked = AccessibilityUtils.getEnabledServicesFromSettings(getPrefContext())
                 .contains(mComponentName);
         mSwitchBar.setCheckedInternal(checked);
     }
@@ -220,8 +219,8 @@
     }
 
     private boolean isServiceSupportAccessibilityButton() {
-        final AccessibilityManager ams = (AccessibilityManager) getContext().getSystemService(
-                Context.ACCESSIBILITY_SERVICE);
+        final AccessibilityManager ams = getPrefContext().getSystemService(
+                AccessibilityManager.class);
         final List<AccessibilityServiceInfo> services = ams.getInstalledAccessibilityServiceList();
 
         for (AccessibilityServiceInfo info : services) {
@@ -268,17 +267,17 @@
 
     @Override
     public void onCheckboxClicked(ShortcutPreference preference) {
-        final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE);
+        final int shortcutTypes = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE);
         if (preference.getChecked()) {
             if (!getArguments().getBoolean(AccessibilitySettings.EXTRA_CHECKED)) {
                 preference.setChecked(false);
                 showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_SHORTCUT);
             } else {
-                AccessibilityUtil.optInAllValuesToSettings(getContext(), shortcutTypes,
+                AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), shortcutTypes,
                         mComponentName);
             }
         } else {
-            AccessibilityUtil.optOutAllValuesFromSettings(getContext(), shortcutTypes,
+            AccessibilityUtil.optOutAllValuesFromSettings(getPrefContext(), shortcutTypes,
                     mComponentName);
             getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, false);
         }
@@ -370,8 +369,8 @@
     private void onAllowButtonFromShortcutClicked() {
         mShortcutPreference.setChecked(true);
 
-        final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE);
-        AccessibilityUtil.optInAllValuesToSettings(getContext(), shortcutTypes, mComponentName);
+        final int shortcutTypes = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE);
+        AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), shortcutTypes, mComponentName);
 
         mDialog.dismiss();
     }
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index ddc9424..409b395 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -114,7 +114,7 @@
         final int resId = getPreferenceScreenResId();
         if (resId <= 0) {
             PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
-                    getActivity());
+                    getPrefContext());
             setPreferenceScreen(preferenceScreen);
         }
     }
@@ -143,7 +143,7 @@
         PreferenceScreen preferenceScreen = getPreferenceScreen();
         if (mImageUri != null) {
             final AnimatedImagePreference animatedImagePreference = new AnimatedImagePreference(
-                    preferenceScreen.getContext());
+                    getPrefContext());
             animatedImagePreference.setImageUri(mImageUri);
             animatedImagePreference.setDividerAllowedAbove(true);
             preferenceScreen.addPreference(animatedImagePreference);
@@ -158,7 +158,7 @@
 
         // Show the "Settings" menu as if it were a preference screen.
         if (mSettingsTitle != null && mSettingsIntent != null) {
-            mSettingsPreference = new Preference(preferenceScreen.getContext());
+            mSettingsPreference = new Preference(getPrefContext());
             mSettingsPreference.setTitle(mSettingsTitle);
             mSettingsPreference.setIconSpaceReserved(true);
             mSettingsPreference.setIntent(mSettingsIntent);
@@ -177,7 +177,7 @@
 
             if (mStaticDescription != null) {
                 final StaticTextPreference staticTextPreference = new StaticTextPreference(
-                        preferenceScreen.getContext());
+                        getPrefContext());
                 staticTextPreference.setSummary(mStaticDescription);
                 staticTextPreference.setSelectable(/* selectable= */ false);
                 footerCategory.addPreference(staticTextPreference);
@@ -189,7 +189,7 @@
                 unsupportedTagList.add(ANCHOR_TAG);
 
                 final HtmlTextPreference htmlTextPreference = new HtmlTextPreference(
-                        preferenceScreen.getContext());
+                        getPrefContext());
                 htmlTextPreference.setSummary(mHtmlDescription);
                 htmlTextPreference.setImageGetter(mImageGetter);
                 htmlTextPreference.setUnsupportedTagList(unsupportedTagList);
@@ -234,10 +234,10 @@
     public Dialog onCreateDialog(int dialogId) {
         switch (dialogId) {
             case DialogEnums.EDIT_SHORTCUT:
-                final CharSequence dialogTitle = getActivity().getString(
+                final CharSequence dialogTitle = getPrefContext().getString(
                         R.string.accessibility_shortcut_edit_dialog_title, mPackageName);
-                Dialog dialog = AccessibilityEditDialogUtils.showEditShortcutDialog(getActivity(),
-                        dialogTitle, this::callOnAlertDialogCheckboxClicked);
+                Dialog dialog = AccessibilityEditDialogUtils.showEditShortcutDialog(
+                        getPrefContext(), dialogTitle, this::callOnAlertDialogCheckboxClicked);
                 initializeDialogCheckBox(dialog);
                 return dialog;
             default:
@@ -258,37 +258,35 @@
     /** Denotes the dialog emuns for show dialog */
     @Retention(RetentionPolicy.SOURCE)
     protected @interface DialogEnums {
-        int UNKNOWN = 0;
-
         /** OPEN: Settings > Accessibility > Any toggle service > Shortcut > Settings. */
         int EDIT_SHORTCUT = 1;
 
         /** OPEN: Settings > Accessibility > Magnification > Shortcut > Settings. */
-        int MAGNIFICATION_EDIT_SHORTCUT = 2;
+        int MAGNIFICATION_EDIT_SHORTCUT = 1001;
 
         /**
          * OPEN: Settings > Accessibility > Magnification > Toggle user service in gesture
          * navigation.
          */
-        int GESTURE_NAVIGATION_TUTORIAL = 1001;
+        int GESTURE_NAVIGATION_TUTORIAL = 1002;
 
         /**
          * OPEN: Settings > Accessibility > Magnification > Toggle user service in button
          * navigation.
          */
-        int ACCESSIBILITY_BUTTON_TUTORIAL = 1002;
+        int ACCESSIBILITY_BUTTON_TUTORIAL = 1003;
 
         /** OPEN: Settings > Accessibility > Downloaded toggle service > Toggle user service. */
-        int ENABLE_WARNING_FROM_TOGGLE = 1003;
+        int ENABLE_WARNING_FROM_TOGGLE = 1004;
 
         /** OPEN: Settings > Accessibility > Downloaded toggle service > Shortcut checkbox. */
-        int ENABLE_WARNING_FROM_SHORTCUT = 1004;
+        int ENABLE_WARNING_FROM_SHORTCUT = 1005;
 
         /**
          * OPEN: Settings > Accessibility > Downloaded toggle service > Toggle user service > Show
          * launch tutorial.
          */
-        int LAUNCH_ACCESSIBILITY_TUTORIAL = 1005;
+        int LAUNCH_ACCESSIBILITY_TUTORIAL = 1006;
     }
 
     @Override
@@ -364,7 +362,7 @@
 
     private Drawable getDrawableFromUri(Uri imageUri) {
         if (mImageGetterCacheView == null) {
-            mImageGetterCacheView = new ImageView(getContext());
+            mImageGetterCacheView = new ImageView(getPrefContext());
         }
 
         mImageGetterCacheView.setAdjustViewBounds(true);
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 8873da1..b82a344 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -241,16 +241,17 @@
         switch (dialogId) {
             case DialogEnums.GESTURE_NAVIGATION_TUTORIAL:
                 return AccessibilityGestureNavigationTutorial
-                        .showGestureNavigationTutorialDialog(getActivity());
+                        .showGestureNavigationTutorialDialog(getPrefContext());
             case DialogEnums.ACCESSIBILITY_BUTTON_TUTORIAL:
                 return AccessibilityGestureNavigationTutorial
-                        .showAccessibilityButtonTutorialDialog(getActivity());
+                        .showAccessibilityButtonTutorialDialog(getPrefContext());
             case DialogEnums.MAGNIFICATION_EDIT_SHORTCUT:
-                final CharSequence dialogTitle = getActivity().getText(
+                final CharSequence dialogTitle = getPrefContext().getText(
                         R.string.accessibility_shortcut_edit_dialog_title_magnification);
                 final AlertDialog dialog =
                         AccessibilityEditDialogUtils.showMagnificationEditShortcutDialog(
-                                getActivity(), dialogTitle, this::callOnAlertDialogCheckboxClicked);
+                                getPrefContext(), dialogTitle,
+                                this::callOnAlertDialogCheckboxClicked);
                 initializeDialogCheckBox(dialog);
                 return dialog;
         }
@@ -425,7 +426,7 @@
         if (enabled && TextUtils.equals(
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED,
                 preferenceKey)) {
-            showDialog(AccessibilityUtil.isGestureNavigateEnabled(getContext())
+            showDialog(AccessibilityUtil.isGestureNavigateEnabled(getPrefContext())
                     ? DialogEnums.GESTURE_NAVIGATION_TUTORIAL
                     : DialogEnums.ACCESSIBILITY_BUTTON_TUTORIAL);
         }
@@ -457,11 +458,11 @@
 
     @Override
     public void onCheckboxClicked(ShortcutPreference preference) {
-        final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE);
+        final int shortcutTypes = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE);
         if (preference.getChecked()) {
-            optInAllMagnificationValuesToSettings(getContext(), shortcutTypes);
+            optInAllMagnificationValuesToSettings(getPrefContext(), shortcutTypes);
         } else {
-            optOutAllMagnificationValuesFromSettings(getContext(), shortcutTypes);
+            optOutAllMagnificationValuesFromSettings(getPrefContext(), shortcutTypes);
         }
     }
 
@@ -483,31 +484,19 @@
     }
 
     private void initShortcutPreference() {
-        final PreferenceScreen preferenceScreen = getPreferenceScreen();
-        mShortcutPreference = new ShortcutPreference(
-                preferenceScreen.getContext(), null);
+        mShortcutPreference = new ShortcutPreference(getPrefContext(), null);
         mShortcutPreference.setPersistent(false);
-        mShortcutPreference.setKey(getShortcutPreferenceKey());
+        mShortcutPreference.setKey(KEY_SHORTCUT_PREFERENCE);
         mShortcutPreference.setTitle(R.string.accessibility_magnification_shortcut_title);
         mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
         mShortcutPreference.setOnClickListener(this);
     }
 
     private void updateShortcutPreference() {
-        final PreferenceScreen preferenceScreen = getPreferenceScreen();
-        final ShortcutPreference shortcutPreference = preferenceScreen.findPreference(
-                getShortcutPreferenceKey());
-
-        if (shortcutPreference != null) {
-            final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE);
-            shortcutPreference.setChecked(
-                    hasMagnificationValuesInSettings(getContext(), shortcutTypes));
-            shortcutPreference.setSummary(getShortcutTypeSummary(getContext()));
-        }
-    }
-
-    private String getShortcutPreferenceKey() {
-        return KEY_SHORTCUT_PREFERENCE;
+        final int shortcutTypes = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE);
+        mShortcutPreference.setChecked(
+                hasMagnificationValuesInSettings(getPrefContext(), shortcutTypes));
+        mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
     }
 
     private void updateConfigurationWarningIfNeeded() {