Show quick setting tooltips after shortcut tutorial dialog dismiss
- ToggleAccessibilityServicePreferenceFragment for unbundle accessibility service - LaunchAccessibilityActivityPreferenceFragment for unbundle accessibility shortcut-activity Bug: 210356011 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityGestureNavigationTutorialTest Change-Id: I6f9e7e206ae7642d91e658ceb18b9e7ce4244a22
This commit is contained in:
@@ -46,6 +46,7 @@ import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RawRes;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
@@ -125,9 +126,15 @@ public final class AccessibilityGestureNavigationTutorial {
|
||||
}
|
||||
|
||||
static AlertDialog createAccessibilityTutorialDialog(Context context, int shortcutTypes) {
|
||||
return createAccessibilityTutorialDialog(context, shortcutTypes, mOnClickListener);
|
||||
}
|
||||
|
||||
static AlertDialog createAccessibilityTutorialDialog(Context context, int shortcutTypes,
|
||||
@Nullable DialogInterface.OnClickListener negativeButtonListener) {
|
||||
return new AlertDialog.Builder(context)
|
||||
.setView(createShortcutNavigationContentView(context, shortcutTypes))
|
||||
.setNegativeButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
|
||||
.setNegativeButton(R.string.accessibility_tutorial_dialog_button,
|
||||
negativeButtonListener)
|
||||
.create();
|
||||
}
|
||||
|
||||
|
@@ -20,9 +20,11 @@ import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logA
|
||||
|
||||
import android.accessibilityservice.AccessibilityShortcutInfo;
|
||||
import android.app.ActivityOptions;
|
||||
import android.app.Dialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.ComponentName;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.net.Uri;
|
||||
@@ -124,6 +126,20 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(int dialogId) {
|
||||
switch (dialogId) {
|
||||
case AccessibilityDialogUtils.DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
|
||||
final Dialog dialog = AccessibilityGestureNavigationTutorial
|
||||
.createAccessibilityTutorialDialog(getPrefContext(),
|
||||
getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
|
||||
dialog.setCanceledOnTouchOutside(false);
|
||||
return dialog;
|
||||
default:
|
||||
return super.onCreateDialog(dialogId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
// Do not call super. We don't want to see the "Help & feedback" option on this page so as
|
||||
@@ -208,4 +224,15 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature
|
||||
|
||||
return settingsIntent;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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();
|
||||
}
|
||||
}
|
||||
|
@@ -168,9 +168,9 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(int dialogId) {
|
||||
switch (dialogId) {
|
||||
case DialogEnums.ENABLE_WARNING_FROM_TOGGLE: {
|
||||
final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
|
||||
switch (dialogId) {
|
||||
case DialogEnums.ENABLE_WARNING_FROM_TOGGLE:
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -178,10 +178,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
.createCapabilitiesDialog(getPrefContext(), info,
|
||||
this::onDialogButtonFromEnableToggleClicked,
|
||||
this::onDialogButtonFromUninstallClicked);
|
||||
break;
|
||||
}
|
||||
case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE: {
|
||||
final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
|
||||
return mWarningDialog;
|
||||
case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE:
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -189,10 +187,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
.createCapabilitiesDialog(getPrefContext(), info,
|
||||
this::onDialogButtonFromShortcutToggleClicked,
|
||||
this::onDialogButtonFromUninstallClicked);
|
||||
break;
|
||||
}
|
||||
case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT: {
|
||||
final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
|
||||
return mWarningDialog;
|
||||
case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT:
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -200,23 +196,24 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
.createCapabilitiesDialog(getPrefContext(), info,
|
||||
this::onDialogButtonFromShortcutClicked,
|
||||
this::onDialogButtonFromUninstallClicked);
|
||||
break;
|
||||
}
|
||||
case DialogEnums.DISABLE_WARNING_FROM_TOGGLE: {
|
||||
final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
|
||||
return mWarningDialog;
|
||||
case DialogEnums.DISABLE_WARNING_FROM_TOGGLE:
|
||||
if (info == null) {
|
||||
return null;
|
||||
}
|
||||
mWarningDialog = AccessibilityServiceWarning
|
||||
.createDisableDialog(getPrefContext(), info,
|
||||
this::onDialogButtonFromDisableToggleClicked);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
mWarningDialog = super.onCreateDialog(dialogId);
|
||||
}
|
||||
}
|
||||
return mWarningDialog;
|
||||
case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
|
||||
final Dialog dialog = AccessibilityGestureNavigationTutorial
|
||||
.createAccessibilityTutorialDialog(getPrefContext(),
|
||||
getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
|
||||
dialog.setCanceledOnTouchOutside(false);
|
||||
return dialog;
|
||||
default:
|
||||
return super.onCreateDialog(dialogId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -488,6 +485,17 @@ public class ToggleAccessibilityServicePreferenceFragment extends
|
||||
mWarningDialog.dismiss();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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();
|
||||
}
|
||||
|
||||
void onDialogButtonFromShortcutClicked(View view) {
|
||||
final int viewId = view.getId();
|
||||
if (viewId == R.id.permission_enable_allow_button) {
|
||||
|
@@ -22,26 +22,41 @@ import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutT
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
/** Tests for {@link AccessibilityGestureNavigationTutorial}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class AccessibilityGestureNavigationTutorialTest {
|
||||
|
||||
private Context mContext;
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
|
||||
@Mock
|
||||
private DialogInterface.OnClickListener mMockOnClickListener;
|
||||
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private int mShortcutTypes;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContext.setTheme(R.style.Theme_AppCompat);
|
||||
mShortcutTypes = /* initial */ 0;
|
||||
}
|
||||
|
||||
@@ -86,4 +101,28 @@ public final class AccessibilityGestureNavigationTutorialTest {
|
||||
mShortcutTypes)).hasSize(/* expectedSize= */ 2);
|
||||
assertThat(alertDialog).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void performClickOnNegativeButton_turnOnSoftwareShortcut_dismiss() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes);
|
||||
alertDialog.show();
|
||||
|
||||
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
|
||||
|
||||
assertThat(alertDialog.isShowing()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void performClickOnNegativeButton_turnOnSoftwareShortcut_callOnClickListener() {
|
||||
mShortcutTypes |= UserShortcutType.SOFTWARE;
|
||||
final AlertDialog alertDialog =
|
||||
createAccessibilityTutorialDialog(mContext, mShortcutTypes, mMockOnClickListener);
|
||||
alertDialog.show();
|
||||
|
||||
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
|
||||
|
||||
verify(mMockOnClickListener).onClick(alertDialog, DialogInterface.BUTTON_NEGATIVE);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user