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

Commit 3e32ee9b authored by Menghan Li's avatar Menghan Li Committed by Android (Google) Code Review
Browse files

Merge "Show different tooltips for QS features auto-added and non-auto-added"

parents 5e1fc317 01d02d3d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -23,10 +23,10 @@
    android:background="@drawable/accessibility_qs_tooltips_background">

    <ImageView
        android:id="@+id/qs_illustration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/accessibility_qs_tooltips_margin_top"
        android:src="@drawable/accessibility_qs_tooltips_illustration"
        android:layout_gravity="center_horizontal"
        android:contentDescription="@null" />

+3 −1
Original line number Diff line number Diff line
@@ -5523,8 +5523,10 @@
    <string name="accessibility_service_primary_switch_title">Use <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g></string>
    <!-- Used in the accessibility service settings to open the activity. [CHAR LIMIT=NONE] -->
    <string name="accessibility_service_primary_open_title">Open <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g></string>
    <!-- Used in the accessibility service settings to show quick settings tooltips for auto-added feature. [CHAR LIMIT=NONE] -->
    <string name="accessibility_service_auto_added_qs_tooltips_content"><xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g> added to Quick Settings. Swipe down to turn it on or off anytime.</string>
    <!-- Used in the accessibility service settings to show quick settings tooltips. [CHAR LIMIT=NONE] -->
    <string name="accessibility_service_quick_settings_tooltips_content"><xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g> added to Quick Settings. Swipe down to turn it on or off anytime.</string>
    <string name="accessibility_service_qs_tooltips_content">You can add a shortcut to <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g> by editing quick settings</string>
    <!-- Used in the accessibility action for accessibility quick settings tooltips to dismiss. [CHAR LIMIT=NONE] -->
    <string name="accessibility_quick_settings_tooltips_dismiss">Dismiss</string>
    <!-- Intro for color correction settings screen to control turning on/off the feature entirely. [CHAR LIMIT=NONE] -->
+9 −3
Original line number Diff line number Diff line
@@ -27,10 +27,12 @@ import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;

import androidx.annotation.DrawableRes;
import androidx.annotation.VisibleForTesting;

import com.android.settings.R;
@@ -76,9 +78,10 @@ public class AccessibilityQuickSettingsTooltipWindow extends PopupWindow {
     * Sets up {@link #AccessibilityQuickSettingsTooltipWindow}'s layout and content.
     *
     * @param text text to be displayed
     * @param imageResId the resource ID of the image drawable
     */
    public void setup(String text) {
        this.setup(text, /* closeDelayTimeMillis= */ 0);
    public void setup(String text, @DrawableRes int imageResId) {
        this.setup(text, imageResId, /* closeDelayTimeMillis= */ 0);
    }

    /**
@@ -88,9 +91,10 @@ public class AccessibilityQuickSettingsTooltipWindow extends PopupWindow {
     * close delay time is positive number. </p>
     *
     * @param text text to be displayed
     * @param imageResId the resource ID of the image drawable
     * @param closeDelayTimeMillis how long the popup window be auto-closed
     */
    public void setup(String text, long closeDelayTimeMillis) {
    public void setup(String text, @DrawableRes int imageResId, long closeDelayTimeMillis) {
        this.mCloseDelayTimeMillis = closeDelayTimeMillis;

        setBackgroundDrawable(new ColorDrawable(mContext.getColor(android.R.color.transparent)));
@@ -101,6 +105,8 @@ public class AccessibilityQuickSettingsTooltipWindow extends PopupWindow {
        popupView.setAccessibilityDelegate(mAccessibilityDelegate);
        setContentView(popupView);

        final ImageView imageView = getContentView().findViewById(R.id.qs_illustration);
        imageView.setImageResource(imageResId);
        final TextView textView = getContentView().findViewById(R.id.qs_content);
        textView.setText(text);
        setWidth(getWindowWidthWith(textView));
+44 −7
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.accessibility;

import static com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_GENERAL_CATEGORY;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_QS_TOOLTIP_TYPE;

import android.app.Dialog;
import android.app.settings.SettingsEnums;
@@ -41,6 +42,7 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.utils.LocaleUtils;

@@ -70,6 +72,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
    private CheckBox mHardwareTypeCheckBox;
    private AccessibilityQuickSettingsTooltipWindow mTooltipWindow;
    private boolean mNeedsQSTooltipReshow = false;
    private int mNeedsQSTooltipType = QuickSettingsTooltipType.GUIDE_TO_EDIT;

    /** Returns the accessibility component name. */
    protected abstract ComponentName getComponentName();
@@ -96,6 +99,9 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
            if (savedInstanceState.containsKey(KEY_SAVED_QS_TOOLTIP_RESHOW)) {
                mNeedsQSTooltipReshow = savedInstanceState.getBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW);
            }
            if (savedInstanceState.containsKey(KEY_SAVED_QS_TOOLTIP_TYPE)) {
                mNeedsQSTooltipType = savedInstanceState.getInt(KEY_SAVED_QS_TOOLTIP_TYPE);
            }
        }

        final int resId = getPreferenceScreenResId();
@@ -176,6 +182,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
        }
        if (mTooltipWindow != null) {
            outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, mTooltipWindow.isShowing());
            outState.putInt(KEY_SAVED_QS_TOOLTIP_TYPE, mNeedsQSTooltipType);
        }
        super.onSaveInstanceState(outState);
    }
@@ -198,7 +205,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
            case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
                dialog = AccessibilityGestureNavigationTutorial
                        .createAccessibilityTutorialDialog(getPrefContext(),
                                getUserShortcutTypes());
                                getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
                dialog.setCanceledOnTouchOutside(false);
                return dialog;
            default:
@@ -296,6 +303,17 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
                getComponentName());
    };

    /**
     * This method will be invoked when a button in the tutorial dialog is clicked.
     *
     * @param dialog The dialog that received the click
     * @param which  The button that was clicked
     */
    private void callOnTutorialDialogButtonClicked(DialogInterface dialog, int which) {
        dialog.dismiss();
        showQuickSettingsTooltipIfNeeded();
    }

    /**
     * This method will be invoked when a button in the edit shortcut dialog is clicked.
     *
@@ -308,12 +326,17 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
        }

        final int value = getShortcutTypeCheckBoxValue();

        saveNonEmptyUserShortcutType(value);
        AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), value, getComponentName());
        AccessibilityUtil.optOutAllValuesFromSettings(getPrefContext(), ~value, getComponentName());
        mShortcutPreference.setChecked(value != AccessibilityUtil.UserShortcutType.EMPTY);
        final boolean shortcutAssigned = value != AccessibilityUtil.UserShortcutType.EMPTY;
        mShortcutPreference.setChecked(shortcutAssigned);
        mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));

        // Show the quick setting tooltip if the shortcut assigned in the first time
        if (shortcutAssigned) {
            showQuickSettingsTooltipIfNeeded();
        }
    }

    @VisibleForTesting
@@ -452,7 +475,18 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
        mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
    }

    protected void showQuickSettingsTooltipIfNeeded() {
    /**
     * Shows the quick settings tooltip if the quick settings feature is assigned. The tooltip only
     * shows once.
     *
     * @param type The quick settings tooltip type
     */
    protected void showQuickSettingsTooltipIfNeeded(@QuickSettingsTooltipType int type) {
        mNeedsQSTooltipType = type;
        showQuickSettingsTooltipIfNeeded();
    }

    private void showQuickSettingsTooltipIfNeeded() {
        final ComponentName tileComponentName = getTileComponentName();
        if (tileComponentName == null) {
            // Returns if no tile service assigned.
@@ -471,10 +505,13 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
            return;
        }

        final String title =
                getString(R.string.accessibility_service_quick_settings_tooltips_content, tileName);
        final int titleResId = mNeedsQSTooltipType == QuickSettingsTooltipType.GUIDE_TO_EDIT
                ? R.string.accessibility_service_qs_tooltips_content
                : R.string.accessibility_service_auto_added_qs_tooltips_content;
        final String title = getString(titleResId, tileName);
        final int imageResId = R.drawable.accessibility_qs_tooltips_illustration;
        mTooltipWindow = new AccessibilityQuickSettingsTooltipWindow(getContext());
        mTooltipWindow.setup(title);
        mTooltipWindow.setup(title, imageResId);
        mTooltipWindow.showAtTopCenter(getView());
        AccessibilityQuickSettingUtils.optInValueToSharedPreferences(getContext(),
                tileComponentName);
+12 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ import java.lang.annotation.RetentionPolicy;
import java.util.StringJoiner;

/** Provides utility methods to accessibility settings only. */
final class AccessibilityUtil {
public final class AccessibilityUtil {

    private AccessibilityUtil(){}

@@ -105,6 +105,17 @@ final class AccessibilityUtil {
        int TRIPLETAP = 4; // 1 << 2
    }

    /**
     * Denotes the quick setting tooltip type.
     *
     * {@code GUIDE_TO_EDIT} for QS tiles that need to be added by editing.
     * {@code GUIDE_TO_DIRECT_USE} for QS tiles that have been auto-added already.
     */
    public @interface QuickSettingsTooltipType {
        int GUIDE_TO_EDIT = 0;
        int GUIDE_TO_DIRECT_USE = 1;
    }

    /** Denotes the accessibility enabled status */
    @Retention(RetentionPolicy.SOURCE)
    public @interface State {
Loading