From 71aca3b7a9b8cbf9fae9cbf18dbcfd90a259660e Mon Sep 17 00:00:00 2001 From: menghanli Date: Thu, 7 Oct 2021 19:08:18 +0800 Subject: [PATCH] Apply fade transition for font size and display size Suw page - Create font size & screen size controler to simply xml - Add onPuase animation Bug: 194447311 Test: atest AccessibilityScreenSizeForSetupWizardActivityTest Test: atest FontSizePreferenceControllerTest Test: atest ScreenSizePreferenceControllerTest Change-Id: I91f3fd4c22aba4f8cd46f6e82e50987544942245 --- res/values/integers.xml | 5 - ...ccessibility_settings_for_setup_wizard.xml | 18 +--- ...ilityScreenSizeForSetupWizardActivity.java | 67 ++++++++---- .../AccessibilitySettingsForSetupWizard.java | 17 ++- ...ibilitySettingsForSetupWizardActivity.java | 6 +- .../FontSizePreferenceController.java | 56 ++++++++++ .../ScreenSizePreferenceController.java | 56 ++++++++++ ...yScreenSizeForSetupWizardActivityTest.java | 102 ++++++++++++++---- ...itySettingsForSetupWizardActivityTest.java | 3 +- .../FontSizePreferenceControllerTest.java | 75 +++++++++++++ .../ScreenSizePreferenceControllerTest.java | 75 +++++++++++++ 11 files changed, 412 insertions(+), 68 deletions(-) create mode 100644 src/com/android/settings/accessibility/FontSizePreferenceController.java create mode 100644 src/com/android/settings/accessibility/ScreenSizePreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java create mode 100644 tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java diff --git a/res/values/integers.xml b/res/values/integers.xml index 53543889766..3d73f64fabe 100644 --- a/res/values/integers.xml +++ b/res/values/integers.xml @@ -21,9 +21,4 @@ 102 103 104 - - - 0 - 1 diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml index d1b4f4a5bab..047a2bdf223 100644 --- a/res/xml/accessibility_settings_for_setup_wizard.xml +++ b/res/xml/accessibility_settings_for_setup_wizard.xml @@ -24,25 +24,15 @@ android:key="font_size_preference" android:icon="@drawable/ic_font_size" android:summary="@string/short_summary_font_size" - android:title="@string/title_font_size"> - - - - + android:title="@string/title_font_size" + settings:controller="com.android.settings.accessibility.FontSizePreferenceController" /> - - - - + android:title="@string/screen_zoom_title" + settings:controller="com.android.settings.accessibility.ScreenSizePreferenceController" /> { - onBackPressed(); - }; + final View.OnClickListener nextButtonListener = v -> onBackPressed(); final FooterButton primaryButton = new FooterButton.Builder(this) .setText(R.string.done) @@ -124,4 +145,12 @@ public class AccessibilityScreenSizeForSetupWizardActivity extends InstrumentedA } }); } + + private int getTransitionType(Intent intent) { + return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE); + } + + private int getFragmentType(Intent intent) { + return intent.getIntExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE); + } } diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java index da95df9f590..a365566a6fb 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java @@ -38,7 +38,7 @@ import androidx.preference.Preference; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.RestrictedPreference; import com.google.android.setupdesign.GlifPreferenceLayout; @@ -48,8 +48,9 @@ import java.util.List; /** * Activity with the accessibility settings specific to Setup Wizard. */ -public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragment +public class AccessibilitySettingsForSetupWizard extends DashboardFragment implements Preference.OnPreferenceChangeListener { + private static final String TAG = "AccessibilitySettingsForSetupWizard"; // Preferences. private static final String DISPLAY_MAGNIFICATION_PREFERENCE = @@ -97,8 +98,6 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - addPreferencesFromResource(R.xml.accessibility_settings_for_setup_wizard); - mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE); mScreenReaderPreference = findPreference(SCREEN_READER_PREFERENCE); mSelectToSpeakPreference = findPreference(SELECT_TO_SPEAK_PREFERENCE); @@ -137,6 +136,16 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm return super.onPreferenceTreeClick(preference); } + @Override + protected int getPreferenceScreenResId() { + return R.xml.accessibility_settings_for_setup_wizard; + } + + @Override + protected String getLogTag() { + return TAG; + } + /** * Returns accessibility service info by given package name and service name. * diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java index 0625fd28700..3a6bea9caaa 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java @@ -32,11 +32,13 @@ import androidx.preference.PreferenceFragmentCompat; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SetupWizardUtils; +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; import com.android.settings.core.SubSettingLauncher; import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.support.actionbar.HelpResourceProvider; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.transition.SettingsTransitionHelper; +import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupdesign.util.ThemeHelper; @@ -127,8 +129,8 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit getIntent().getComponent())) { final Intent intent = new Intent(this, AccessibilityScreenSizeForSetupWizardActivity.class); - intent.putExtra(VISION_FRAGMENT_NO, - getResources().getInteger(R.integer.suw_font_size_fragment_no)); + intent.putExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE); + intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE); startActivity(intent); Log.d(LOG_TAG, "Launch font size settings"); finish(); diff --git a/src/com/android/settings/accessibility/FontSizePreferenceController.java b/src/com/android/settings/accessibility/FontSizePreferenceController.java new file mode 100644 index 00000000000..35f96d4fd02 --- /dev/null +++ b/src/com/android/settings/accessibility/FontSizePreferenceController.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; +import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE; + +import android.content.Context; +import android.content.Intent; + +import androidx.preference.Preference; + +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; +import com.android.settings.core.BasePreferenceController; +import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; + +/** PreferenceController for displaying font size page. */ +public class FontSizePreferenceController extends BasePreferenceController { + + public FontSizePreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } + + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + if (!mPreferenceKey.equals(preference.getKey())) { + return false; + } + + final Intent intent = new Intent(mContext, + AccessibilityScreenSizeForSetupWizardActivity.class); + intent.putExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE); + intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE); + mContext.startActivity(intent); + return true; + } +} diff --git a/src/com/android/settings/accessibility/ScreenSizePreferenceController.java b/src/com/android/settings/accessibility/ScreenSizePreferenceController.java new file mode 100644 index 00000000000..9734dc64b0f --- /dev/null +++ b/src/com/android/settings/accessibility/ScreenSizePreferenceController.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; +import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE; + +import android.content.Context; +import android.content.Intent; + +import androidx.preference.Preference; + +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; +import com.android.settings.core.BasePreferenceController; +import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; + +/** PreferenceController for displaying screen size page. */ +public class ScreenSizePreferenceController extends BasePreferenceController { + + public ScreenSizePreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } + + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + if (!mPreferenceKey.equals(preference.getKey())) { + return false; + } + + final Intent intent = new Intent(mContext, + AccessibilityScreenSizeForSetupWizardActivity.class); + intent.putExtra(VISION_FRAGMENT_NO, FragmentType.SCREEN_SIZE); + intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE); + mContext.startActivity(intent); + return true; + } +} diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java index 05e5b3217c0..29e921c6b5a 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java @@ -17,20 +17,24 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; +import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE; import static com.google.common.truth.Truth.assertThat; +import static org.robolectric.Shadows.shadowOf; + import android.content.Context; import android.content.Intent; import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; +import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupdesign.GlifLayout; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; @@ -39,46 +43,98 @@ import org.robolectric.RobolectricTestRunner; /** Tests for {@link AccessibilityScreenSizeForSetupWizardActivity} */ @RunWith(RobolectricTestRunner.class) public class AccessibilityScreenSizeForSetupWizardActivityTest { - private static final int DISPLAY_SIZE_FRAGMENT_NO = 1; private Context mContext = ApplicationProvider.getApplicationContext(); - private AccessibilityScreenSizeForSetupWizardActivity mActivity; - @Before - public void setup() { + private AccessibilityScreenSizeForSetupWizardActivity setupActivity(int fragmentType) { final Intent intent = new Intent(); - intent.putExtra(VISION_FRAGMENT_NO, - mContext.getResources().getInteger(R.integer.suw_font_size_fragment_no)); - mActivity = Robolectric.buildActivity(AccessibilityScreenSizeForSetupWizardActivity.class, + intent.putExtra(VISION_FRAGMENT_NO, fragmentType); + return Robolectric.buildActivity(AccessibilityScreenSizeForSetupWizardActivity.class, + intent).create().get(); + } + + private AccessibilityScreenSizeForSetupWizardActivity setupActivity(int fragmentType, + int transitionType) { + final Intent intent = new Intent(); + intent.putExtra(VISION_FRAGMENT_NO, fragmentType); + intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, transitionType); + return Robolectric.buildActivity(AccessibilityScreenSizeForSetupWizardActivity.class, intent).create().get(); } @Test - public void generateHeader_setPageNoAsFontSize_returnFontSizeTitle() { - mActivity.generateHeader( - mActivity.getResources().getInteger(R.integer.suw_font_size_fragment_no)); - - final GlifLayout layout = mActivity.findViewById(R.id.setup_wizard_layout); + public void setupActivity_fontSizePage_returnFontSizeTitle() { + final AccessibilityScreenSizeForSetupWizardActivity activity = + setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE); + final GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout); assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.title_font_size)); } @Test - public void generateHeader_setPageNoAsDisplaySize_returnDisplaySizeTitle() { - mActivity.generateHeader(DISPLAY_SIZE_FRAGMENT_NO); + public void setupActivity_generateDoneButton() { + final AccessibilityScreenSizeForSetupWizardActivity activity = + setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE); - final GlifLayout layout = mActivity.findViewById(R.id.setup_wizard_layout); - - assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.screen_zoom_title)); + final GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout); + final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class); + assertThat(mixin.getPrimaryButton().getText()).isEqualTo(mContext.getText(R.string.done)); } @Test - public void initFooterButton_generateDoneButton() { - mActivity.initFooterButton(); + public void onPause_getPendingTransitionEnterAnimationResourceId_transitionFade_should() { + final AccessibilityScreenSizeForSetupWizardActivity activity = + setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE); - final GlifLayout layout = mActivity.findViewById(R.id.setup_wizard_layout); - final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class); + activity.onPause(); - assertThat(mixin.getPrimaryButton().getText()).isEqualTo(mContext.getText(R.string.done)); + assertThat(shadowOf(activity).getPendingTransitionEnterAnimationResourceId()) + .isEqualTo(R.anim.sud_stay); + } + + @Test + public void onPause_getPendingTransitionExitAnimationResourceId_transitionFade_should() { + final AccessibilityScreenSizeForSetupWizardActivity activity = + setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE); + + activity.onPause(); + + assertThat(shadowOf(activity).getPendingTransitionExitAnimationResourceId()) + .isEqualTo(android.R.anim.fade_out); + } + + @Test + public void onPause_getPendingTransitionEnterAnimationResourceId_transitionNone_should() { + final AccessibilityScreenSizeForSetupWizardActivity activity = + setupActivity(FragmentType.FONT_SIZE); + + activity.onPause(); + + assertThat(shadowOf(activity).getPendingTransitionEnterAnimationResourceId()) + .isNotEqualTo(R.anim.sud_stay); + } + + @Test + public void onPause_getPendingTransitionExitAnimationResourceId_transitionNone_should() { + final AccessibilityScreenSizeForSetupWizardActivity activity = + setupActivity(FragmentType.FONT_SIZE); + + activity.onPause(); + + assertThat(shadowOf(activity).getPendingTransitionExitAnimationResourceId()) + .isNotEqualTo(android.R.anim.fade_out); + } + + @Test + public void generateHeader_displaySizePage_returnDisplaySizeTitle() { + final Intent intent = new Intent(); + intent.putExtra(VISION_FRAGMENT_NO, FragmentType.SCREEN_SIZE); + intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE); + final AccessibilityScreenSizeForSetupWizardActivity activity = Robolectric.buildActivity( + AccessibilityScreenSizeForSetupWizardActivity.class, intent).get(); + activity.setContentView(R.layout.accessibility_screen_size_setup_wizard); + activity.generateHeader(); + final GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout); + assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.screen_zoom_title)); } } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java index 4d9668a6ab0..0849eb2bd1f 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java @@ -27,6 +27,7 @@ import android.content.Intent; import androidx.test.filters.SmallTest; import com.android.settings.R; +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; import com.google.android.setupcompat.util.WizardManagerHelper; @@ -66,7 +67,7 @@ public class AccessibilitySettingsForSetupWizardActivityTest { final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity(); assertThat(launchIntent).isNotNull(); assertThat(launchIntent.getIntExtra(VISION_FRAGMENT_NO, -1)).isEqualTo( - activity.getResources().getInteger(R.integer.suw_font_size_fragment_no)); + FragmentType.FONT_SIZE); assertThat(activity.isFinishing()).isTrue(); } diff --git a/tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java new file mode 100644 index 00000000000..a52c0fe0e0b --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE; + +import static com.google.common.truth.Truth.assertThat; + +import static org.robolectric.Shadows.shadowOf; + +import android.app.Activity; +import android.content.Intent; + +import androidx.preference.Preference; + +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; +import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FontSizePreferenceController}. */ +@RunWith(RobolectricTestRunner.class) +public class FontSizePreferenceControllerTest { + private static final String TEST_KEY = "test_key"; + + private Activity mActivity; + private FontSizePreferenceController mController; + Preference mPreference; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mActivity = Robolectric.setupActivity(Activity.class); + mController = new FontSizePreferenceController(mActivity, TEST_KEY); + mPreference = new Preference(mActivity); + mPreference.setKey(TEST_KEY); + } + + @Test + public void getAvailabilityStatus_returnAvailable() { + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void handlePreferenceTreeClick_launchActivityWithExpectedValues() { + mController.handlePreferenceTreeClick(mPreference); + + final Intent nextActivity = shadowOf(mActivity).getNextStartedActivity(); + assertThat(nextActivity.getIntExtra(VISION_FRAGMENT_NO, /* defaultValue= */-1)) + .isEqualTo(FragmentType.FONT_SIZE); + assertThat(nextActivity.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, /* defaultValue= */-1)) + .isEqualTo(TransitionType.TRANSITION_FADE); + } +} diff --git a/tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java new file mode 100644 index 00000000000..1cbf78ea84c --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE; + +import static com.google.common.truth.Truth.assertThat; + +import static org.robolectric.Shadows.shadowOf; + +import android.app.Activity; +import android.content.Intent; + +import androidx.preference.Preference; + +import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType; +import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link ScreenSizePreferenceController}. */ +@RunWith(RobolectricTestRunner.class) +public class ScreenSizePreferenceControllerTest { + private static final String TEST_KEY = "test_key"; + + private Activity mActivity; + private ScreenSizePreferenceController mController; + Preference mPreference; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mActivity = Robolectric.setupActivity(Activity.class); + mController = new ScreenSizePreferenceController(mActivity, TEST_KEY); + mPreference = new Preference(mActivity); + mPreference.setKey(TEST_KEY); + } + + @Test + public void getAvailabilityStatus_returnAvailable() { + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void handlePreferenceTreeClick_launchActivityWithExpectedValues() { + mController.handlePreferenceTreeClick(mPreference); + + final Intent nextActivity = shadowOf(mActivity).getNextStartedActivity(); + assertThat(nextActivity.getIntExtra(VISION_FRAGMENT_NO, /* defaultValue= */-1)) + .isEqualTo(FragmentType.SCREEN_SIZE); + assertThat(nextActivity.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, /* defaultValue= */-1)) + .isEqualTo(TransitionType.TRANSITION_FADE); + } +}