Merge "Create tooltip for notifying auto-adding the font scaling tile" into udc-dev

This commit is contained in:
Candice Lo
2023-03-28 09:34:13 +00:00
committed by Android (Google) Code Review
5 changed files with 242 additions and 14 deletions

View File

@@ -16,29 +16,45 @@
package com.android.settings.accessibility;
import static com.android.internal.accessibility.AccessibilityShortcutController.FONT_SIZE_COMPONENT_NAME;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.PopupWindow;
import android.widget.SeekBar;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceViewHolder;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.LabeledSeekBarPreference;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowApplication;
/**
* Tests for {@link PreviewSizeSeekBarController}.
@@ -47,30 +63,67 @@ import org.robolectric.annotation.Config;
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class PreviewSizeSeekBarControllerTest {
private static final String FONT_SIZE_KEY = "font_size";
private static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow";
@Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
private PreviewSizeSeekBarController mSeekBarController;
private FontSizeData mFontSizeData;
private LabeledSeekBarPreference mSeekBarPreference;
@Mock
private PreferenceScreen mPreferenceScreen;
private TestFragment mFragment;
private PreferenceViewHolder mHolder;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceManager mPreferenceManager;
@Mock
private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener;
private static PopupWindow getLatestPopupWindow() {
final ShadowApplication shadowApplication =
Shadow.extract(ApplicationProvider.getApplicationContext());
return shadowApplication.getLatestPopupWindow();
}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mFontSizeData = new FontSizeData(mContext);
mSeekBarController =
new PreviewSizeSeekBarController(mContext, FONT_SIZE_KEY, mFontSizeData);
mContext.setTheme(R.style.Theme_AppCompat);
mFragment = spy(new TestFragment());
when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
when(mFragment.getContext()).thenReturn(mContext);
mPreferenceScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null));
when(mPreferenceScreen.getPreferenceManager()).thenReturn(mPreferenceManager);
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
mSeekBarPreference = spy(new LabeledSeekBarPreference(mContext, /* attrs= */ null));
mSeekBarPreference.setKey(FONT_SIZE_KEY);
LayoutInflater inflater = LayoutInflater.from(mContext);
mHolder = PreferenceViewHolder.createInstanceForTests(inflater.inflate(
R.layout.preference_labeled_slider, null));
mSeekBarPreference.onBindViewHolder(mHolder);
when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference);
mFontSizeData = new FontSizeData(mContext);
mSeekBarController =
new PreviewSizeSeekBarController(mContext, FONT_SIZE_KEY, mFontSizeData) {
@Override
ComponentName getTileComponentName() {
return FONT_SIZE_COMPONENT_NAME;
}
@Override
CharSequence getTileTooltipContent() {
return mContext.getText(
R.string.accessibility_font_scaling_auto_added_qs_tooltip_content);
}
};
mSeekBarController.setInteractionListener(mInteractionListener);
when(mPreferenceScreen.findPreference(mSeekBarController.getPreferenceKey())).thenReturn(
mSeekBarPreference);
}
@Test
@@ -123,4 +176,64 @@ public class PreviewSizeSeekBarControllerTest {
verify(mInteractionListener).notifyPreferenceChanged();
}
@Test
public void onProgressChanged_showTooltipView() {
mSeekBarController.displayPreference(mPreferenceScreen);
// Simulate changing the progress for the first time
int newProgress = (mSeekBarPreference.getProgress() != 0) ? 0 : mSeekBarPreference.getMax();
mSeekBarPreference.setProgress(newProgress);
mSeekBarPreference.onProgressChanged(new SeekBar(mContext),
newProgress,
/* fromUser= */ false);
assertThat(getLatestPopupWindow().isShowing()).isTrue();
}
@Test
public void onProgressChanged_tooltipViewHasBeenShown_notShowTooltipView() {
mSeekBarController.displayPreference(mPreferenceScreen);
// Simulate changing the progress for the first time
int newProgress = (mSeekBarPreference.getProgress() != 0) ? 0 : mSeekBarPreference.getMax();
mSeekBarPreference.setProgress(newProgress);
mSeekBarPreference.onProgressChanged(new SeekBar(mContext),
newProgress,
/* fromUser= */ false);
getLatestPopupWindow().dismiss();
// Simulate progress changing for the second time
newProgress = (mSeekBarPreference.getProgress() != 0) ? 0 : mSeekBarPreference.getMax();
mSeekBarPreference.setProgress(newProgress);
mSeekBarPreference.onProgressChanged(new SeekBar(mContext),
newProgress,
/* fromUser= */ false);
assertThat(getLatestPopupWindow().isShowing()).isFalse();
}
@Test
@Config(shadows = ShadowFragment.class)
public void restoreValueFromSavedInstanceState_showTooltipView() {
final Bundle savedInstanceState = new Bundle();
savedInstanceState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
mSeekBarController.onCreate(savedInstanceState);
mSeekBarController.displayPreference(mPreferenceScreen);
assertThat(getLatestPopupWindow().isShowing()).isTrue();
}
private static class TestFragment extends SettingsPreferenceFragment {
@Override
protected boolean shouldSkipForInitialSUW() {
return false;
}
@Override
public int getMetricsCategory() {
return 0;
}
}
}