Change Magnification Mode Settings UI
To support new settings UI, we change the UI from scrollview to listview to simplify UI initialization. Bug: 182118397 Test: atest MagnificationSettingsFragmentTest and manual test. Change-Id: Ib65dc139ba54f2281e5cb7e2dc55b3574ad2c733
This commit is contained in:
@@ -16,12 +16,15 @@
|
||||
|
||||
package com.android.settings.accessibility;
|
||||
|
||||
import static com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode;
|
||||
import static com.android.settings.accessibility.MagnificationPreferenceFragment.ON;
|
||||
import static com.android.settings.accessibility.MagnificationSettingsFragment.MagnificationModeInfo;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -29,7 +32,8 @@ import static org.mockito.Mockito.when;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.preference.PreferenceManager;
|
||||
@@ -77,7 +81,7 @@ public class MagnificationSettingsFragmentTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreateDialog_capabilitiesInBundle_matchCheckBoxStatus() {
|
||||
public void onCreateDialog_capabilitiesInBundle_checkedModeInDialogIsExpected() {
|
||||
final Bundle windowModeSavedInstanceState = new Bundle();
|
||||
windowModeSavedInstanceState.putInt(EXTRA_CAPABILITY,
|
||||
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
|
||||
@@ -85,23 +89,21 @@ public class MagnificationSettingsFragmentTest {
|
||||
mFragment.onCreate(windowModeSavedInstanceState);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
assertThat(mFragment.mMagnifyFullScreenCheckBox.isChecked()).isFalse();
|
||||
assertThat(mFragment.mMagnifyWindowCheckBox.isChecked()).isTrue();
|
||||
assertThat(getChoseModeFromDialog()).isEqualTo(MagnificationMode.WINDOW);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreateDialog_capabilitiesInSettings_matchCheckBoxStatus() {
|
||||
public void onCreateDialog_capabilitiesInSetting_checkedModeInDialogIsExpected() {
|
||||
MagnificationCapabilities.setCapabilities(mContext,
|
||||
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
|
||||
mFragment.onCreate(Bundle.EMPTY);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
assertThat(mFragment.mMagnifyFullScreenCheckBox.isChecked()).isTrue();
|
||||
assertThat(mFragment.mMagnifyWindowCheckBox.isChecked()).isFalse();
|
||||
assertThat(getChoseModeFromDialog()).isEqualTo(MagnificationMode.FULLSCREEN);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreateDialog_capabilitiesInSettingsAndBundle_matchBundleValueCheckBoxStatus() {
|
||||
public void onCreateDialog_choseModeIsDifferentFromInSettings_ShowUsersChoseModeInDialog() {
|
||||
final Bundle allModeSavedInstanceState = new Bundle();
|
||||
allModeSavedInstanceState.putInt(EXTRA_CAPABILITY,
|
||||
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL);
|
||||
@@ -111,37 +113,93 @@ public class MagnificationSettingsFragmentTest {
|
||||
mFragment.onCreate(allModeSavedInstanceState);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
assertThat(mFragment.mMagnifyFullScreenCheckBox.isChecked()).isTrue();
|
||||
assertThat(mFragment.mMagnifyWindowCheckBox.isChecked()).isTrue();
|
||||
assertThat(getChoseModeFromDialog()).isEqualTo(MagnificationMode.ALL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreateDialog_emptySettingsAndBundle_matchDefaultValueCheckBoxStatus() {
|
||||
public void onCreateDialog_emptySettingsAndBundle_checkedModeInDialogIsDefaultValue() {
|
||||
mFragment.onCreate(Bundle.EMPTY);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
// Compare to default Capabilities
|
||||
assertThat(mFragment.mMagnifyFullScreenCheckBox.isChecked()).isTrue();
|
||||
assertThat(mFragment.mMagnifyWindowCheckBox.isChecked()).isFalse();
|
||||
assertThat(getChoseModeFromDialog()).isEqualTo(MagnificationMode.FULLSCREEN);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkWindowModeCheckBox_tripleTapEnabled_showSwitchShortcutDialog() {
|
||||
public void chooseWindowMode_tripleTapEnabled_showSwitchShortcutDialog() {
|
||||
enableTripleTap();
|
||||
final Bundle fullScreenModeSavedInstanceState = new Bundle();
|
||||
fullScreenModeSavedInstanceState.putInt(EXTRA_CAPABILITY,
|
||||
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
|
||||
mFragment.onCreate(fullScreenModeSavedInstanceState);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
enableTripleTap();
|
||||
final View dialogWidowView = mFragment.mDialog.findViewById(R.id.magnify_window_screen);
|
||||
final View dialogWindowTextArea = dialogWidowView.findViewById(R.id.container);
|
||||
dialogWindowTextArea.performClick();
|
||||
performItemClickWith(MagnificationMode.WINDOW);
|
||||
|
||||
verify(mFragment).showDialog(
|
||||
MagnificationSettingsFragment.DIALOG_MAGNIFICATION_SWITCH_SHORTCUT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void chooseModeAll_tripleTapEnabled_showSwitchShortcutDialog() {
|
||||
enableTripleTap();
|
||||
final Bundle fullScreenModeSavedInstanceState = new Bundle();
|
||||
fullScreenModeSavedInstanceState.putInt(EXTRA_CAPABILITY,
|
||||
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
|
||||
mFragment.onCreate(fullScreenModeSavedInstanceState);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
performItemClickWith(MagnificationMode.ALL);
|
||||
|
||||
verify(mFragment).showDialog(
|
||||
MagnificationSettingsFragment.DIALOG_MAGNIFICATION_SWITCH_SHORTCUT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void chooseWindowMode_WindowModeInSettingsAndTripleTapEnabled_notShowShortCutDialog() {
|
||||
enableTripleTap();
|
||||
MagnificationCapabilities.setCapabilities(mContext,
|
||||
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
|
||||
mFragment.onCreate(Bundle.EMPTY);
|
||||
mFragment.onCreateDialog(MagnificationSettingsFragment.DIALOG_MAGNIFICATION_CAPABILITY);
|
||||
|
||||
performItemClickWith(MagnificationMode.WINDOW);
|
||||
|
||||
verify(mFragment, never()).showDialog(
|
||||
MagnificationSettingsFragment.DIALOG_MAGNIFICATION_SWITCH_SHORTCUT);
|
||||
}
|
||||
|
||||
private int getChoseModeFromDialog() {
|
||||
final ListView listView = mFragment.mMagnificationModesListView;
|
||||
assertThat(listView).isNotNull();
|
||||
|
||||
final int checkedPosition = listView.getCheckedItemPosition();
|
||||
final MagnificationModeInfo modeInfo =
|
||||
(MagnificationModeInfo) listView.getAdapter().getItem(
|
||||
checkedPosition);
|
||||
return modeInfo.mMagnificationMode;
|
||||
}
|
||||
|
||||
private void performItemClickWith(@MagnificationMode int mode) {
|
||||
final ListView listView = mFragment.mMagnificationModesListView;
|
||||
assertThat(listView).isNotNull();
|
||||
|
||||
int modeIndex = AdapterView.NO_ID;
|
||||
// Index 0 is header.
|
||||
for (int i = 1; i < listView.getAdapter().getCount(); i++) {
|
||||
final MagnificationModeInfo modeInfo =
|
||||
(MagnificationModeInfo) listView.getAdapter().getItem(i);
|
||||
if (modeInfo.mMagnificationMode == mode) {
|
||||
modeIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (modeIndex == AdapterView.NO_ID) {
|
||||
throw new RuntimeException("The mode is not in the list.");
|
||||
}
|
||||
|
||||
listView.performItemClick(listView.getChildAt(modeIndex), modeIndex, modeIndex);
|
||||
}
|
||||
|
||||
private void enableTripleTap() {
|
||||
Settings.Secure.putInt(mContext.getContentResolver(),
|
||||
Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, ON);
|
||||
|
Reference in New Issue
Block a user