chore(onefingerpan): update onefingerpan preference summary and magnification settings page footer description
Based on b/338409557#comment5, we update the onefingerpan toggle's summary, and make the magnification settings page's footer HTML description be dynamic based on one finger panning preference state. Bug: 338409557 Flag: com.android.server.accessibility.enable_magnification_one_finger_panning_gesture Test: manually atest MagnificationOneFingerPanningPreferenceControllerTest atest ToggleScreenMagnificationPreferenceFragmentTest atest ToggleFeaturePreferenceFragmentTest Change-Id: I817cad4fb0c034bcd2db0485ca27c30ea88a0280
This commit is contained in:
@@ -28,6 +28,7 @@ import android.os.Looper;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
@@ -103,16 +104,10 @@ public class MagnificationOneFingerPanningPreferenceController extends
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
if (!mSwitchPreference.isEnabled()) {
|
||||
return mContext.getString(
|
||||
R.string.accessibility_magnification_one_finger_panning_summary_unavailable);
|
||||
}
|
||||
|
||||
return (isChecked())
|
||||
? mContext.getString(
|
||||
R.string.accessibility_magnification_one_finger_panning_summary_on)
|
||||
: mContext.getString(
|
||||
R.string.accessibility_magnification_one_finger_panning_summary_off);
|
||||
@StringRes int resId = mSwitchPreference.isEnabled()
|
||||
? R.string.accessibility_magnification_one_finger_panning_summary
|
||||
: R.string.accessibility_magnification_one_finger_panning_summary_unavailable;
|
||||
return mContext.getString(resId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -101,6 +101,7 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
|
||||
protected SettingsMainSwitchPreference mToggleServiceSwitchPreference;
|
||||
protected ShortcutPreference mShortcutPreference;
|
||||
protected Preference mSettingsPreference;
|
||||
@Nullable protected AccessibilityFooterPreference mHtmlFooterPreference;
|
||||
protected AccessibilityFooterPreferenceController mFooterPreferenceController;
|
||||
protected String mPreferenceKey;
|
||||
protected Dialog mDialog;
|
||||
@@ -589,27 +590,40 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
|
||||
}
|
||||
|
||||
private void initHtmlTextPreference() {
|
||||
if (TextUtils.isEmpty(mHtmlDescription)) {
|
||||
if (TextUtils.isEmpty(getCurrentHtmlDescription())) {
|
||||
return;
|
||||
}
|
||||
final PreferenceScreen screen = getPreferenceScreen();
|
||||
final CharSequence htmlDescription = Html.fromHtml(mHtmlDescription.toString(),
|
||||
Html.FROM_HTML_MODE_COMPACT, mImageGetter, /* tagHandler= */ null);
|
||||
|
||||
final AccessibilityFooterPreference htmlFooterPreference =
|
||||
mHtmlFooterPreference =
|
||||
new AccessibilityFooterPreference(screen.getContext());
|
||||
htmlFooterPreference.setKey(KEY_HTML_DESCRIPTION_PREFERENCE);
|
||||
htmlFooterPreference.setSummary(htmlDescription);
|
||||
screen.addPreference(htmlFooterPreference);
|
||||
mHtmlFooterPreference.setKey(KEY_HTML_DESCRIPTION_PREFERENCE);
|
||||
updateHtmlTextPreference();
|
||||
screen.addPreference(mHtmlFooterPreference);
|
||||
|
||||
// TODO(b/171272809): Migrate to DashboardFragment.
|
||||
final String title = getString(R.string.accessibility_introduction_title, mPackageName);
|
||||
mFooterPreferenceController = new AccessibilityFooterPreferenceController(
|
||||
screen.getContext(), htmlFooterPreference.getKey());
|
||||
screen.getContext(), mHtmlFooterPreference.getKey());
|
||||
mFooterPreferenceController.setIntroductionTitle(title);
|
||||
mFooterPreferenceController.displayPreference(screen);
|
||||
}
|
||||
|
||||
protected void updateHtmlTextPreference() {
|
||||
if (mHtmlFooterPreference == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String description = getCurrentHtmlDescription().toString();
|
||||
final CharSequence htmlDescription = Html.fromHtml(description,
|
||||
Html.FROM_HTML_MODE_COMPACT, mImageGetter, /* tagHandler= */ null);
|
||||
mHtmlFooterPreference.setSummary(htmlDescription);
|
||||
}
|
||||
|
||||
CharSequence getCurrentHtmlDescription() {
|
||||
return mHtmlDescription;
|
||||
}
|
||||
|
||||
private void initFooterPreference() {
|
||||
if (!TextUtils.isEmpty(mDescription)) {
|
||||
createFooterPreference(getPreferenceScreen(), mDescription,
|
||||
@@ -617,7 +631,6 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates {@link AccessibilityFooterPreference} and append into {@link PreferenceScreen}
|
||||
*
|
||||
|
@@ -45,6 +45,7 @@ import android.view.accessibility.AccessibilityManager.TouchExplorationStateChan
|
||||
import android.widget.CheckBox;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.SwitchPreferenceCompat;
|
||||
@@ -91,6 +92,9 @@ public class ToggleScreenMagnificationPreferenceFragment extends
|
||||
@Nullable private CheckBox mTwoFingerTripleTapTypeCheckBox;
|
||||
private DialogCreatable mDialogDelegate;
|
||||
|
||||
@Nullable
|
||||
MagnificationOneFingerPanningPreferenceController mOneFingerPanningPreferenceController;
|
||||
|
||||
private boolean mInSetupWizard;
|
||||
|
||||
@Override
|
||||
@@ -236,7 +240,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends
|
||||
context.getString(R.string.accessibility_screen_magnification_intro_text));
|
||||
}
|
||||
|
||||
if (!arguments.containsKey(AccessibilitySettings.EXTRA_HTML_DESCRIPTION)) {
|
||||
if (!arguments.containsKey(AccessibilitySettings.EXTRA_HTML_DESCRIPTION)
|
||||
&& !Flags.enableMagnificationOneFingerPanningGesture()) {
|
||||
String summary = MessageFormat.format(
|
||||
context.getString(R.string.accessibility_screen_magnification_summary),
|
||||
new Object[]{1, 2, 3, 4, 5});
|
||||
@@ -308,12 +313,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends
|
||||
MagnificationOneFingerPanningPreferenceController.PREF_KEY);
|
||||
generalCategory.addPreference(oneFingerPanningPreference);
|
||||
|
||||
var oneFingerPanningPreferenceController =
|
||||
mOneFingerPanningPreferenceController =
|
||||
new MagnificationOneFingerPanningPreferenceController(getContext());
|
||||
oneFingerPanningPreferenceController.setInSetupWizard(mInSetupWizard);
|
||||
getSettingsLifecycle().addObserver(oneFingerPanningPreferenceController);
|
||||
oneFingerPanningPreferenceController.displayPreference(getPreferenceScreen());
|
||||
addPreferenceController(oneFingerPanningPreferenceController);
|
||||
mOneFingerPanningPreferenceController.setInSetupWizard(mInSetupWizard);
|
||||
getSettingsLifecycle().addObserver(mOneFingerPanningPreferenceController);
|
||||
mOneFingerPanningPreferenceController.displayPreference(getPreferenceScreen());
|
||||
addPreferenceController(mOneFingerPanningPreferenceController);
|
||||
}
|
||||
|
||||
private void addJoystickSetting(PreferenceCategory generalCategory) {
|
||||
@@ -471,6 +476,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends
|
||||
);
|
||||
contentObserver.registerKeysToObserverCallback(keysToObserve,
|
||||
key -> updatePreferencesState());
|
||||
|
||||
if (Flags.enableMagnificationOneFingerPanningGesture()) {
|
||||
contentObserver.registerKeysToObserverCallback(
|
||||
List.of(Settings.Secure.ACCESSIBILITY_SINGLE_FINGER_PANNING_ENABLED),
|
||||
key -> updateHtmlTextPreference());
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePreferencesState() {
|
||||
@@ -480,6 +491,25 @@ public class ToggleScreenMagnificationPreferenceFragment extends
|
||||
findPreference(controller.getPreferenceKey())));
|
||||
}
|
||||
|
||||
@Override
|
||||
CharSequence getCurrentHtmlDescription() {
|
||||
CharSequence origin = super.getCurrentHtmlDescription();
|
||||
if (!TextUtils.isEmpty(origin)) {
|
||||
// If in ToggleFeaturePreferenceFragment we already have a fixed html description, we
|
||||
// should use the fixed one, otherwise we'll dynamically decide the description.
|
||||
return origin;
|
||||
}
|
||||
|
||||
Context context = getContext();
|
||||
if (mOneFingerPanningPreferenceController != null && context != null) {
|
||||
@StringRes int resId = mOneFingerPanningPreferenceController.isChecked()
|
||||
? R.string.accessibility_screen_magnification_summary_one_finger_panning_on
|
||||
: R.string.accessibility_screen_magnification_summary_one_finger_panning_off;
|
||||
return MessageFormat.format(context.getString(resId), new Object[]{1, 2, 3, 4, 5});
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getShortcutFeatureSettingsKeys() {
|
||||
final List<String> shortcutKeys = super.getShortcutFeatureSettingsKeys();
|
||||
|
Reference in New Issue
Block a user