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

Commit 6a9d4d73 authored by Peter Liang's avatar Peter Liang
Browse files

Should update specific item instead of the whole list of the accessibility target.

Goal:
Avoid always involving notifyDataSetChanged() when any accessibility target is added. And then replace it with notifyItemInserted(), notifyItemRemoved(), and notifyItemChanged();

Actions:
1) Using the DiffUtil callback for updating the target feature list.
2) Fine-tuned the timing point of fade in/out effect.
3) Fine-tuned the setter/getter of the state description.

Fix: 252756133
Test: manual test
Change-Id: Iea848ece58bbc4b8c799a9dcb5c335331d6fd418
parent fde9618e
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS
    private CharSequence mLabel;
    private Drawable mIcon;
    private String mKey;
    private CharSequence mStateDescription;

    @VisibleForTesting
    public AccessibilityTarget(Context context, @ShortcutType int shortcutType,
@@ -106,6 +107,10 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS
        }
    }

    public void setStateDescription(CharSequence stateDescription) {
        mStateDescription = stateDescription;
    }

    /**
     * Gets the state description of this feature target.
     *
@@ -113,7 +118,7 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS
     */
    @Nullable
    public CharSequence getStateDescription() {
        return null;
        return mStateDescription;
    }

    public void setShortcutEnabled(boolean enabled) {
+5 −8
Original line number Diff line number Diff line
@@ -41,6 +41,11 @@ class ToggleAccessibilityServiceTarget extends AccessibilityServiceTarget {
                shortcutType,
                AccessibilityFragmentType.TOGGLE,
                serviceInfo);

        final int statusResId = isAccessibilityServiceEnabled(getContext(), getId())
                ? R.string.accessibility_shortcut_menu_item_status_on
                : R.string.accessibility_shortcut_menu_item_status_off;
        setStateDescription(getContext().getString(statusResId));
    }

    @Override
@@ -53,12 +58,4 @@ class ToggleAccessibilityServiceTarget extends AccessibilityServiceTarget {
        holder.mStatusView.setVisibility(isEditMenuMode ? View.GONE : View.VISIBLE);
        holder.mStatusView.setText(getStateDescription());
    }

    @Override
    public CharSequence getStateDescription() {
        final int statusResId = isAccessibilityServiceEnabled(getContext(), getId())
                ? R.string.accessibility_shortcut_menu_item_status_on
                : R.string.accessibility_shortcut_menu_item_status_off;
        return getContext().getString(statusResId);
    }
}
+5 −8
Original line number Diff line number Diff line
@@ -38,6 +38,11 @@ class ToggleAllowListingFeatureTarget extends AccessibilityTarget {
            boolean isShortcutSwitched, String id, CharSequence label, Drawable icon, String key) {
        super(context, shortcutType, AccessibilityFragmentType.TOGGLE,
                isShortcutSwitched, id, label, icon, key);

        final int statusResId = isFeatureEnabled()
                ? R.string.accessibility_shortcut_menu_item_status_on
                : R.string.accessibility_shortcut_menu_item_status_off;
        setStateDescription(getContext().getString(statusResId));
    }

    @Override
@@ -51,14 +56,6 @@ class ToggleAllowListingFeatureTarget extends AccessibilityTarget {
        holder.mStatusView.setText(getStateDescription());
    }

    @Override
    public CharSequence getStateDescription() {
        final int statusResId = isFeatureEnabled()
                ? R.string.accessibility_shortcut_menu_item_status_on
                : R.string.accessibility_shortcut_menu_item_status_off;
        return getContext().getString(statusResId);
    }

    private boolean isFeatureEnabled() {
        return Settings.Secure.getInt(getContext().getContentResolver(),
                getKey(), /* settingsValueOff */ 0) == /* settingsValueOn */ 1;
+6 −4
Original line number Diff line number Diff line
@@ -100,14 +100,16 @@ public class AccessibilityTargetAdapter extends Adapter<ViewHolder> {
    @ItemType
    @Override
    public int getItemViewType(int position) {
        if (position == 0) {
            return ItemType.FIRST_ITEM;
        }

        // This LAST_ITEM condition should be checked before others to ensure proper padding when
        // adding a second target via notifyItemInserted().
        if (position == (getItemCount() - 1)) {
            return ItemType.LAST_ITEM;
        }

        if (position == 0) {
            return ItemType.FIRST_ITEM;
        }

        return ItemType.REGULAR_ITEM;
    }

+1 −1
Original line number Diff line number Diff line
@@ -403,7 +403,7 @@ class MenuAnimationController {
        }

        cancelAndRemoveCallbacksAndMessages();
        mHandler.post(() -> mMenuView.setAlpha(COMPLETELY_OPAQUE));
        mMenuView.setAlpha(COMPLETELY_OPAQUE);
    }

    void fadeOutIfEnabled() {
Loading