From de1258f9cf5f57d1aab690896d46967827a45ddb Mon Sep 17 00:00:00 2001 From: menghanli Date: Wed, 29 Apr 2020 07:13:56 +0800 Subject: [PATCH] Fix InvisibleToggle type service does not turn on or turn off correctly when edit shortcut dialog. Root cause: service status is not updated after the shortcut status changed. Next: Add callback to update the service status Bug: 155157599 Test: Manual test Change-Id: I286a04d43066c787304c54eb7b0dfdac5728b6ac --- ...ggleAccessibilityServicePreferenceFragment.java | 14 ++++++++++++++ .../ToggleFeaturePreferenceFragment.java | 8 +++++++- ...oggleScreenMagnificationPreferenceFragment.java | 3 ++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java index beeabd5dcba..6b44a0a0f8e 100644 --- a/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java @@ -17,6 +17,7 @@ package com.android.settings.accessibility; import android.accessibilityservice.AccessibilityServiceInfo; +import android.content.DialogInterface; import android.view.View; import com.android.settings.R; @@ -68,4 +69,17 @@ public class InvisibleToggleAccessibilityServicePreferenceFragment extends true); } } + + /** + * {@inheritDoc} + * + * Enables accessibility service when shortcutPreference is checked. + */ + @Override + protected void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { + super.callOnAlertDialogCheckboxClicked(dialog, which); + + final boolean enabled = mShortcutPreference.isChecked(); + AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName, enabled); + } } diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 8b4f3f25bd7..6b0759a92e1 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -597,7 +597,13 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference return shortcut.getType(); } - private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { + /** + * This method will be invoked when a button in the edit shortcut dialog is clicked. + * + * @param dialog The dialog that received the click + * @param which The button that was clicked + */ + protected void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { if (mComponentName == null) { return; } diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index b550434fc8e..23fb153b5bf 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -381,7 +381,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends return shortcut.getType(); } - private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { + @Override + protected void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { updateUserShortcutType(/* saveChanges= */ true); optInAllMagnificationValuesToSettings(getPrefContext(), mUserShortcutType); optOutAllMagnificationValuesFromSettings(getPrefContext(), ~mUserShortcutType);