diff options
Diffstat (limited to 'Settings/tests/robotests/src/com/android/tv')
8 files changed, 374 insertions, 62 deletions
diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/apps/NotificationsPreferenceTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/apps/NotificationsPreferenceTest.java index 4bc952827..720a70818 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/device/apps/NotificationsPreferenceTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/apps/NotificationsPreferenceTest.java @@ -51,9 +51,6 @@ public class NotificationsPreferenceTest { private static final String PACKAGE_NAME = "com.example.test"; private static final int PACKAGE_UID = 20; - // private final String[] mFilledNonBlockableAppsList = {PACKAGE_NAME}; - private final String[] mEmptyNonBlockableAppsList = {}; - @Mock ApplicationInfo mApplicationInfo; @Mock @@ -87,13 +84,15 @@ public class NotificationsPreferenceTest { mApplicationInfo.packageName = PACKAGE_NAME; mApplicationInfo.uid = PACKAGE_UID; mAppEntry.info = mApplicationInfo; + mPackageInfo.applicationInfo = mApplicationInfo; + mPackageInfo.packageName = PACKAGE_NAME; } @Test public void testNotificationsPreference_systemAppNotificationsEnabledInRes() { setSystemApp(true); setNotificationsEnabledForPackage(PACKAGE_NAME, true); - setNotificationsUnblockableByResList(PACKAGE_NAME, true); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, true); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -105,7 +104,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_systemAppNotificationsEnabledNotInRes() { setSystemApp(true); setNotificationsEnabledForPackage(PACKAGE_NAME, true); - setNotificationsUnblockableByResList(PACKAGE_NAME, false); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, false); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -117,7 +116,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_notSystemAppNotificationsEnabledInRes() { setSystemApp(false); setNotificationsEnabledForPackage(PACKAGE_NAME, true); - setNotificationsUnblockableByResList(PACKAGE_NAME, true); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, true); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -129,7 +128,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_notSystemAppNotificationsEnabledNotInRes() { setSystemApp(false); setNotificationsEnabledForPackage(PACKAGE_NAME, true); - setNotificationsUnblockableByResList(PACKAGE_NAME, false); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, false); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -141,7 +140,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_systemAppNotificationsDisabledNotInRes() { setSystemApp(true); setNotificationsEnabledForPackage(PACKAGE_NAME, false); - setNotificationsUnblockableByResList(PACKAGE_NAME, false); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, false); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -153,7 +152,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_notSystemAppNotificationsEDisabledInRes() { setSystemApp(false); setNotificationsEnabledForPackage(PACKAGE_NAME, false); - setNotificationsUnblockableByResList(PACKAGE_NAME, true); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, true); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -165,7 +164,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_notSystemAppNotificationsDisabledNotInRes() { setSystemApp(false); setNotificationsEnabledForPackage(PACKAGE_NAME, false); - setNotificationsUnblockableByResList(PACKAGE_NAME, false); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, false); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -177,7 +176,7 @@ public class NotificationsPreferenceTest { public void testNotificationsPreference_systemAppNotificationsDisabledInRes() { setSystemApp(true); setNotificationsEnabledForPackage(PACKAGE_NAME, false); - setNotificationsUnblockableByResList(PACKAGE_NAME, true); + setNotificationsUnblockableByImportanceLocked(mApplicationInfo, true); mNotificationsPreference = new NotificationsPreference(mContext, mAppEntry); mNotificationsPreference.refresh(); @@ -199,15 +198,14 @@ public class NotificationsPreferenceTest { } } - private void setNotificationsUnblockableByResList(String packageName, - boolean inUnblockableResList) { - String[] unblockableResList = - inUnblockableResList ? new String[]{packageName} : mEmptyNonBlockableAppsList; - - when(mResources.getStringArray( - mResources.getIdentifier("config_nonBlockableNotificationPackages", - "array", "android") - )).thenReturn(unblockableResList); + private void setNotificationsUnblockableByImportanceLocked(ApplicationInfo applicationInfo, + boolean isUnblockable) { + try { + when(mNotificationManager.isImportanceLocked(applicationInfo.packageName, + applicationInfo.uid)).thenReturn(isUnblockable); + } catch (RemoteException e) { + e.printStackTrace(); + } } } diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/AdvancedVolumeFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/AdvancedVolumeFragmentTest.java index 569219e93..a1ce37670 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/AdvancedVolumeFragmentTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/AdvancedVolumeFragmentTest.java @@ -61,7 +61,8 @@ import java.util.stream.IntStream; @RunWith(RobolectricTestRunner.class) public class AdvancedVolumeFragmentTest { - @Spy private AudioManager mAudioManager; + @Spy + private AudioManager mAudioManager; @Before public void setUp() { @@ -161,6 +162,100 @@ public class AdvancedVolumeFragmentTest { } @Test + public void testOnPreferenceTreeClick_withDTSFormatsDisabled_disablesFormatInAudioManager() { + Map<Integer, Boolean> formats = ImmutableMap.of( + AudioFormat.ENCODING_DTS_HD, true, + AudioFormat.ENCODING_DTS_HD_MA, true, + AudioFormat.ENCODING_DTS_UHD_P1, true, + AudioFormat.ENCODING_DTS_UHD_P2, true); + List<Integer> reportedFormats = Arrays.asList( + AudioFormat.ENCODING_DTS_HD, + AudioFormat.ENCODING_DTS_HD_MA, + AudioFormat.ENCODING_DTS_UHD_P1, + AudioFormat.ENCODING_DTS_UHD_P2); + AdvancedVolumeFragment fragment = + createAdvancedVolumeFragmentWithAudioManagerReturning(formats, reportedFormats); + + Preference preference = fragment.findPreference(KEY_SURROUND_SOUND_MANUAL); + fragment.onPreferenceTreeClick(preference); + + SwitchPreference pref = (SwitchPreference) fragment.findPreference( + KEY_SURROUND_SOUND_FORMAT_PREFIX + AudioFormat.ENCODING_DTS_HD); + pref.setChecked(false); + fragment.onPreferenceTreeClick(pref); + + pref = (SwitchPreference) fragment.findPreference( + KEY_SURROUND_SOUND_FORMAT_PREFIX + AudioFormat.ENCODING_DTS_UHD_P1); + pref.setChecked(false); + fragment.onPreferenceTreeClick(pref); + + ArgumentCaptor<Integer> audioFormat = ArgumentCaptor.forClass(Integer.class); + ArgumentCaptor<Boolean> formatEnabled = ArgumentCaptor.forClass(Boolean.class); + verify(mAudioManager, times(8)).setSurroundFormatEnabled( + audioFormat.capture(), formatEnabled.capture()); + List<Integer> expectedFormats = Arrays.asList( + AudioFormat.ENCODING_DTS_HD, + AudioFormat.ENCODING_DTS_HD_MA, + AudioFormat.ENCODING_DTS_UHD_P1, + AudioFormat.ENCODING_DTS_UHD_P2, + AudioFormat.ENCODING_DTS_HD, + AudioFormat.ENCODING_DTS_HD_MA, + AudioFormat.ENCODING_DTS_UHD_P1, + AudioFormat.ENCODING_DTS_UHD_P2); + List<Boolean> expectedValues = Arrays.asList( + true, true, true, true, false, false, false, false); + assertThat(audioFormat.getAllValues()).containsExactlyElementsIn(expectedFormats); + assertThat(formatEnabled.getAllValues()).containsExactlyElementsIn(expectedValues); + } + + @Test + public void testOnPreferenceTreeClick_withDTSFormatsEnabled_enablesFormatInAudioManager() { + Map<Integer, Boolean> formats = ImmutableMap.of( + AudioFormat.ENCODING_DTS_HD, false, + AudioFormat.ENCODING_DTS_HD_MA, false, + AudioFormat.ENCODING_DTS_UHD_P1, false, + AudioFormat.ENCODING_DTS_UHD_P2, false); + List<Integer> reportedFormats = Arrays.asList( + AudioFormat.ENCODING_DTS_HD, + AudioFormat.ENCODING_DTS_HD_MA, + AudioFormat.ENCODING_DTS_UHD_P1, + AudioFormat.ENCODING_DTS_UHD_P2); + AdvancedVolumeFragment fragment = + createAdvancedVolumeFragmentWithAudioManagerReturning(formats, reportedFormats); + + Preference preference = fragment.findPreference(KEY_SURROUND_SOUND_MANUAL); + fragment.onPreferenceTreeClick(preference); + + SwitchPreference pref = (SwitchPreference) fragment.findPreference( + KEY_SURROUND_SOUND_FORMAT_PREFIX + AudioFormat.ENCODING_DTS_HD); + pref.setChecked(true); + fragment.onPreferenceTreeClick(pref); + + pref = (SwitchPreference) fragment.findPreference( + KEY_SURROUND_SOUND_FORMAT_PREFIX + AudioFormat.ENCODING_DTS_UHD_P1); + pref.setChecked(true); + fragment.onPreferenceTreeClick(pref); + + ArgumentCaptor<Integer> audioFormat = ArgumentCaptor.forClass(Integer.class); + ArgumentCaptor<Boolean> formatEnabled = ArgumentCaptor.forClass(Boolean.class); + verify(mAudioManager, times(8)).setSurroundFormatEnabled( + audioFormat.capture(), formatEnabled.capture()); + List<Integer> expectedFormats = Arrays.asList( + AudioFormat.ENCODING_DTS_HD, + AudioFormat.ENCODING_DTS_HD_MA, + AudioFormat.ENCODING_DTS_UHD_P1, + AudioFormat.ENCODING_DTS_UHD_P2, + AudioFormat.ENCODING_DTS_HD, + AudioFormat.ENCODING_DTS_HD_MA, + AudioFormat.ENCODING_DTS_UHD_P1, + AudioFormat.ENCODING_DTS_UHD_P2); + List<Boolean> expectedValues = Arrays.asList( + true, true, true, true, true, true, true, true); + assertThat(audioFormat.getAllValues()).containsExactlyElementsIn(expectedFormats); + assertThat(formatEnabled.getAllValues()).containsExactlyElementsIn(expectedValues); + } + + @Test public void testGetPreferenceScreen_whenManual_returnsFormatsInCorrectPreferenceGroup() { Map<Integer, Boolean> formats = ImmutableMap.of( AudioFormat.ENCODING_DTS, true, diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/DisplaySoundFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/DisplaySoundFragmentTest.java index 9ad847dee..64014b79b 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/DisplaySoundFragmentTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/DisplaySoundFragmentTest.java @@ -80,6 +80,7 @@ public class DisplaySoundFragmentTest { Display display = spy(Display.class); doReturn(supportedModes).when(display).getSupportedModes(); doReturn(systemPreferredMode).when(display).getSystemPreferredDisplayMode(); + doReturn(new int[]{}).when(mDisplayManager).getSupportedHdrOutputTypes(); doReturn(display).when(mDisplayManager).getDisplay(Display.DEFAULT_DISPLAY); DisplaySoundFragment fragment = spy(DisplaySoundFragment.class); diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java index e5f301ffc..9b8c9af3c 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/HdrFormatSelectionFragmentTest.java @@ -51,10 +51,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.shadows.androidx.fragment.FragmentController; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -94,10 +91,11 @@ public class HdrFormatSelectionFragmentTest { HDR_TYPE_HDR10, HDR_TYPE_HLG, HDR_TYPE_HDR10_PLUS }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, HDR_TYPE_HLG }; int[] userDisabledHdrTypes = { HDR_TYPE_DOLBY_VISION }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledHdrTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledHdrTypes); RadioPreference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_MANUAL); fragment.onPreferenceTreeClick(preference); @@ -121,10 +119,11 @@ public class HdrFormatSelectionFragmentTest { HDR_TYPE_HDR10, HDR_TYPE_HLG, HDR_TYPE_HDR10_PLUS }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, HDR_TYPE_HLG }; int[] userDisabledTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10 }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledTypes); RadioPreference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_MANUAL); fragment.onPreferenceTreeClick(preference); @@ -148,10 +147,11 @@ public class HdrFormatSelectionFragmentTest { int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, HDR_TYPE_HLG }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HLG }; int[] userDisabledTypes = { HDR_TYPE_HLG }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledTypes); RadioPreference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_MANUAL); fragment.onPreferenceTreeClick(preference); @@ -178,10 +178,11 @@ public class HdrFormatSelectionFragmentTest { int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, HDR_TYPE_HLG }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HLG }; int[] userDisabledTypes = { HDR_TYPE_HLG }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledTypes); RadioPreference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_MANUAL); fragment.onPreferenceTreeClick(preference); @@ -204,10 +205,11 @@ public class HdrFormatSelectionFragmentTest { int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, HDR_TYPE_HLG }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HLG }; int[] userDisabledTypes = { HDR_TYPE_HLG }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledTypes); RadioPreference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_AUTO); fragment.onPreferenceTreeClick(preference); @@ -219,10 +221,11 @@ public class HdrFormatSelectionFragmentTest { int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10, HDR_TYPE_HLG }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HLG }; int[] userDisabledTypes = { HDR_TYPE_HLG }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledTypes); Preference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_AUTO); fragment.onPreferenceTreeClick(preference); @@ -244,10 +247,11 @@ public class HdrFormatSelectionFragmentTest { int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10 }; int[] displayReportedHdrTypes = { HDR_TYPE_DOLBY_VISION }; int[] userDisabledTypes = { HDR_TYPE_DOLBY_VISION }; + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], displayReportedHdrTypes); HdrFormatSelectionFragment fragment = createHdrFormatSelectionFragmentWithDisplayManagerReturning( - deviceHdrTypes, displayReportedHdrTypes, userDisabledTypes); + deviceHdrTypes, new Display.Mode[]{mode}, userDisabledTypes); Preference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_AUTO); fragment.onPreferenceTreeClick(preference); @@ -276,6 +280,37 @@ public class HdrFormatSelectionFragmentTest { fragment.getContext().getString(R.string.hdr_format_hdr10)); } + @Test + public void testGetPreferenceScreen_whenManual_enablesDisplayModeSpecificHdrFormats() { + int[] deviceHdrTypes = { HDR_TYPE_DOLBY_VISION, + HDR_TYPE_HDR10, HDR_TYPE_HLG, HDR_TYPE_HDR10_PLUS }; + int[] mode1SupportedHdrFormats = { HDR_TYPE_HDR10 }; + int[] mode2SupportedHdrFormats = { HDR_TYPE_DOLBY_VISION, HDR_TYPE_HDR10 }; + + Display.Mode mode1 = new Display.Mode(0, 0, 0, 0, new float[0], mode1SupportedHdrFormats); + Display.Mode mode2 = new Display.Mode(1, 0, 0, 0, new float[0], mode2SupportedHdrFormats); + + HdrFormatSelectionFragment fragment = + createHdrFormatSelectionFragmentWithDisplayManagerReturning( + deviceHdrTypes, new Display.Mode[]{mode1, mode2}, new int[0]); + + Preference preference = fragment.findPreference(KEY_HDR_FORMAT_SELECTION_MANUAL); + fragment.onPreferenceTreeClick(preference); + + PreferenceCategory supportedFormatPreference = + (PreferenceCategory) fragment.getPreferenceScreen().getPreference(1); + SwitchPreference dolbyVisionPref = + (SwitchPreference) supportedFormatPreference.getPreference(0); + assertThat(dolbyVisionPref.getTitle().toString()) + .isEqualTo(fragment.getContext().getString(R.string.hdr_format_dolby_vision)); + assertThat(dolbyVisionPref.isChecked()).isFalse(); + SwitchPreference hdr10Pref = + (SwitchPreference) supportedFormatPreference.getPreference(1); + assertThat(hdr10Pref.getTitle().toString()) + .isEqualTo(fragment.getContext().getString(R.string.hdr_format_hdr10)); + assertThat(hdr10Pref.isChecked()).isTrue(); + } + private List<String> getChildrenTitles(Preference preference) { PreferenceCategory category = (PreferenceCategory) preference; @@ -285,22 +320,17 @@ public class HdrFormatSelectionFragmentTest { } private HdrFormatSelectionFragment createDefaultHdrFormatSelectionFragment() { + Display.Mode mode = new Display.Mode(0, 0, 0, 0, new float[0], new int[0]); return createHdrFormatSelectionFragmentWithDisplayManagerReturning( - new int[]{}, new int[]{}, new int[]{}); + new int[]{}, new Display.Mode[]{mode}, new int[]{}); } private HdrFormatSelectionFragment createHdrFormatSelectionFragmentWithDisplayManagerReturning( - int[] deviceHdrTypes, int[] displayReportedHdrTypes, int[] userDisabledHdrTypes) { + int[] deviceHdrTypes, Display.Mode[] displayModes, int[] userDisabledHdrTypes) { doReturn(userDisabledHdrTypes).when(mDisplayManager).getUserDisabledHdrTypes(); Display display = spy(Display.class); - doReturn(displayReportedHdrTypes).when(display).getReportedHdrTypes(); - - int[] hdrCapabilitiesReportedFormats = - difference(displayReportedHdrTypes, userDisabledHdrTypes); - Display.HdrCapabilities hdrCapabilities = new Display.HdrCapabilities( - hdrCapabilitiesReportedFormats, -1 /*maxLuminance*/, - -1 /* maxAverageLuminance*/, -1 /* minLuminance */); - doReturn(hdrCapabilities).when(display).getHdrCapabilities(); + doReturn(displayModes).when(display).getSupportedModes(); + doReturn(displayModes[0]).when(display).getMode(); doReturn(display).when(mDisplayManager).getDisplay(Display.DEFAULT_DISPLAY); @@ -313,16 +343,4 @@ public class HdrFormatSelectionFragmentTest { .start() .get(); } - - private int[] difference(int[] array1, int[] array2) { - Set<Integer> set2 = Arrays.stream(array2).boxed().collect(Collectors.toSet()); - Set<Integer> differenceSet = new HashSet<>(); - for (int i : array1) { - if (!set2.contains(i)) { - differenceSet.add(i); - } - } - return differenceSet.stream().mapToInt(Number::intValue).toArray(); - } - } diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java index 562647de7..769a643a4 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/MatchContentFrameRateFragmentTest.java @@ -67,6 +67,8 @@ public class MatchContentFrameRateFragmentTest { mMatchContentFrameRateFragment.onAttach(RuntimeEnvironment.application); doReturn(mPreferenceGroup).when(mMatchContentFrameRateFragment).getPreferenceGroup(); + doReturn(true).when(mMatchContentFrameRateFragment) + .isSeamlessSwitchingSupported(); mAutoPreference = new RadioPreference(mMatchContentFrameRateFragment.getContext()); mAutoPreference.setKey(KEY_MATCH_CONTENT_FRAME_RATE_SEAMLESS); diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/PreferredDynamicRangeFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/PreferredDynamicRangeFragmentTest.java new file mode 100644 index 000000000..28c89f00a --- /dev/null +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/PreferredDynamicRangeFragmentTest.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2023 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.tv.settings.device.displaysound; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import android.hardware.display.DisplayManager; +import android.hardware.display.HdrConversionMode; +import android.view.Display; + +import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; + +import com.android.tv.settings.R; +import com.android.tv.settings.RadioPreference; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.shadows.androidx.fragment.FragmentController; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +@RunWith(RobolectricTestRunner.class) +public class PreferredDynamicRangeFragmentTest { + private static final Display.Mode TEST_MODE = new Display.Mode(0, 0, 0, 0, new float[0], + new int[]{2, 3}); + + @Mock + private DisplayManager mDisplayManager; + @Mock + private Display mDisplay; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void testOnPreferenceTreeClick_selectSystem() { + PreferredDynamicRangeFragment fragment = createPreferredDynamicRangeFragment(); + RadioPreference preference = fragment.findPreference( + PreferredDynamicRangeFragment.KEY_DYNAMIC_RANGE_SELECTION_SYSTEM); + + fragment.onPreferenceTreeClick(preference); + + ArgumentCaptor<HdrConversionMode> mode = ArgumentCaptor.forClass(HdrConversionMode.class); + verify(mDisplayManager).setHdrConversionMode(mode.capture()); + assertThat(mode.getValue()).isEqualTo( + new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_SYSTEM)); + assertThat(preference.isChecked()).isTrue(); + } + + @Test + public void testOnPreferenceTreeClick_selectMatchContent() { + PreferredDynamicRangeFragment fragment = createPreferredDynamicRangeFragment(); + RadioPreference preference = fragment.findPreference( + PreferredDynamicRangeFragment.KEY_DYNAMIC_RANGE_SELECTION_PASSTHROUGH); + + fragment.onPreferenceTreeClick(preference); + + ArgumentCaptor<HdrConversionMode> mode = ArgumentCaptor.forClass(HdrConversionMode.class); + verify(mDisplayManager).setHdrConversionMode(mode.capture()); + assertThat(mode.getValue()).isEqualTo( + new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_PASSTHROUGH)); + assertThat(preference.isChecked()).isTrue(); + } + + @Test + public void testGetPreferenceScreen_returnsCorrectDescriptions() { + PreferredDynamicRangeFragment fragment = createPreferredDynamicRangeFragment(); + + assertThat(fragment.getPreferenceScreen().getPreferenceCount()).isEqualTo(1); + Preference dynamicRangePreference = fragment.getPreferenceScreen().getPreference(0); + assertThat(getChildrenTitles(dynamicRangePreference)).containsExactly( + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_system_title), + fragment.getContext().getString( + R.string.match_content_dynamic_range_title), + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_force_title)); + + assertThat(getChildrenSummaries(dynamicRangePreference)).containsExactly( + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_system_desc), + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_passthrough_desc), + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_force_desc)); + } + + @Test + public void testDynamicRangeForcePreferenceScreen_returnsCorrectDescriptions() { + PreferredDynamicRangeForceFragment fragment = + createPreferredDynamicRangeForceFragmentWith(new int[]{1, 2, 3}); + assertThat(fragment.getPreferenceScreen().getPreferenceCount()).isEqualTo(1); + Preference dynamicRangePreference = fragment.getPreferenceScreen().getPreference(0); + assertThat(getChildrenTitles(dynamicRangePreference)).containsExactly( + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_force_hdr_title, + fragment.getContext().getString(R.string.hdr_format_hdr10)), + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_force_hdr_title, + fragment.getContext().getString(R.string.hdr_format_hlg)), + fragment.getContext().getString( + R.string.preferred_dynamic_range_selection_force_sdr_title)); + } + + private PreferredDynamicRangeFragment createPreferredDynamicRangeFragment() { + return createPreferredDynamicRangeFragmentWith(new int[]{1, 2, 3}); + } + + private PreferredDynamicRangeFragment createPreferredDynamicRangeFragmentWith(int[] hdrTypes) { + doReturn(mDisplay).when(mDisplayManager).getDisplay(Display.DEFAULT_DISPLAY); + doReturn(new Display.Mode[]{TEST_MODE}).when(mDisplay).getSupportedModes(); + doReturn(hdrTypes).when(mDisplayManager).getSupportedHdrOutputTypes(); + doReturn(new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_PASSTHROUGH)) + .when(mDisplayManager).getHdrConversionModeSetting(); + + PreferredDynamicRangeFragment fragment = spy(PreferredDynamicRangeFragment.class); + doReturn(mDisplayManager).when(fragment).getDisplayManager(); + + return FragmentController.of(fragment) + .create() + .start() + .get(); + } + + private PreferredDynamicRangeForceFragment createPreferredDynamicRangeForceFragmentWith( + int[] hdrTypes) { + doReturn(mDisplay).when(mDisplayManager).getDisplay(Display.DEFAULT_DISPLAY); + doReturn(new Display.Mode[]{TEST_MODE}).when(mDisplay).getSupportedModes(); + doReturn(hdrTypes).when(mDisplayManager).getSupportedHdrOutputTypes(); + doReturn(new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_PASSTHROUGH)) + .when(mDisplayManager).getHdrConversionModeSetting(); + + PreferredDynamicRangeForceFragment fragment = spy(PreferredDynamicRangeForceFragment.class); + doReturn(mDisplayManager).when(fragment).getDisplayManager(); + + return FragmentController.of(fragment) + .create() + .start() + .get(); + } + + private List<String> getChildrenTitles(Preference preference) { + PreferenceCategory category = (PreferenceCategory) preference; + + return IntStream.range(0, category.getPreferenceCount()) + .mapToObj(i -> category.getPreference(i).getTitle().toString()) + .collect(Collectors.toList()); + } + + private List<String> getChildrenSummaries(Preference preference) { + PreferenceCategory category = (PreferenceCategory) preference; + + return IntStream.range(0, category.getPreferenceCount()) + .mapToObj(i -> category.getPreference(i).getSummary().toString()) + .collect(Collectors.toList()); + } +} diff --git a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java index ec9372922..40969edb1 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/device/displaysound/ResolutionSelectionFragmentTest.java @@ -33,6 +33,7 @@ import androidx.preference.PreferenceCategory; import com.android.tv.settings.R; import com.android.tv.settings.RadioPreference; +import com.android.tv.settings.util.ResolutionSelectionUtils; import org.junit.Before; import org.junit.Test; @@ -115,13 +116,27 @@ public class ResolutionSelectionFragmentTest { Preference modePreference = fragment.getPreferenceScreen().getPreference(0); assertThat(getChildrenTitles(modePreference)).containsExactly( fragment.getContext().getString(R.string.resolution_selection_auto_title), - "4k (60 Hz)", - "4k (59.94 Hz)", - "576p (60 Hz)", - "800p (120 Hz)", - "800p (60 Hz)", - "600p (120 Hz)", - "600p (59.94 Hz)"); + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(2160, 2160), + ResolutionSelectionUtils.getRefreshRateString(60)), + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(2160, 2160), + ResolutionSelectionUtils.getRefreshRateString(59.944f)), + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(576, 576), + ResolutionSelectionUtils.getRefreshRateString(60)), + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(800, 1200), + ResolutionSelectionUtils.getRefreshRateString(120)), + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(800, 1200), + ResolutionSelectionUtils.getRefreshRateString(60)), + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(600, 800), + ResolutionSelectionUtils.getRefreshRateString(120)), + fragment.getContext().getString(R.string.resolution_display_mode, + ResolutionSelectionUtils.getResolutionString(600, 800), + ResolutionSelectionUtils.getRefreshRateString(59.944f))); assertThat(getChildrenSummaries(modePreference)).containsExactly( "2160 x 2160", diff --git a/Settings/tests/robotests/src/com/android/tv/settings/users/RestrictedProfileTest.java b/Settings/tests/robotests/src/com/android/tv/settings/users/RestrictedProfileTest.java index 0169823d8..03210c9ee 100644 --- a/Settings/tests/robotests/src/com/android/tv/settings/users/RestrictedProfileTest.java +++ b/Settings/tests/robotests/src/com/android/tv/settings/users/RestrictedProfileTest.java @@ -31,8 +31,6 @@ import android.content.pm.UserInfo; import android.os.UserHandle; import android.os.UserManager; -import com.android.tv.settings.library.users.RestrictedProfileModel; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; |