Snap for 8185746 from a1bb6057b4 to tm-release
Change-Id: I2f4688630559b0131904d7406d81f6fc504b25d7
This commit is contained in:
@@ -3736,7 +3736,7 @@
|
|||||||
errorLine1=" android:color="@color/accessibility_feature_background"/>"
|
errorLine1=" android:color="@color/accessibility_feature_background"/>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="res/drawable/ic_text_and_display.xml"
|
file="res/drawable/ic_color_and_motion.xml"
|
||||||
line="22"
|
line="22"
|
||||||
column="13"/>
|
column="13"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright (C) 2016 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
|
|
||||||
-->
|
|
||||||
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<CheckBox
|
|
||||||
android:id="@+id/lockscreen_remote_input"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_marginStart="20dp"
|
|
||||||
android:paddingStart="20dp"
|
|
||||||
android:paddingEnd="?android:attr/dialogPreferredPadding"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:textColor="?android:attr/textColorAlertDialogListItem"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:text="@string/lockscreen_remote_input"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/restricted_lock_icon_remote_input"
|
|
||||||
android:layout_width="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:layout_height="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:tint="?android:attr/colorAccent"
|
|
||||||
android:src="@*android:drawable/ic_info"
|
|
||||||
android:layout_marginEnd="?android:attr/dialogPreferredPadding"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:scaleType="centerInside" />
|
|
||||||
</LinearLayout>
|
|
||||||
@@ -35,14 +35,4 @@
|
|||||||
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
|
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
|
||||||
android:drawablePadding="20dp"
|
android:drawablePadding="20dp"
|
||||||
android:ellipsize="marquee" />
|
android:ellipsize="marquee" />
|
||||||
<ImageView
|
|
||||||
android:id="@+id/restricted_lock_icon"
|
|
||||||
android:layout_width="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:layout_height="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:tint="?android:attr/colorAccent"
|
|
||||||
android:src="@*android:drawable/ic_info"
|
|
||||||
android:layout_marginLeft="@dimen/restricted_icon_padding"
|
|
||||||
android:baselineAlignBottom="true"
|
|
||||||
android:scaleType="centerInside"
|
|
||||||
android:visibility="gone" />
|
|
||||||
</com.android.settings.CheckableLinearLayout>
|
</com.android.settings.CheckableLinearLayout>
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright (C) 2016 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
|
|
||||||
-->
|
|
||||||
<FrameLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<view android:id="@+id/spinner"
|
|
||||||
class="com.android.settings.notification.RestrictedDropDownPreference$ReselectionSpinner"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="invisible"
|
|
||||||
android:layout_marginStart="@dimen/preference_no_icon_padding_start"/>
|
|
||||||
|
|
||||||
<include layout="@layout/settingslib_preference" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
Copyright (C) 2016 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<com.android.settings.CheckableLinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:background="?android:attr/selectableItemBackground"
|
|
||||||
android:minHeight="?android:attr/listPreferredItemHeightSmall">
|
|
||||||
|
|
||||||
<com.android.settings.CheckableLinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingStart="20dp"
|
|
||||||
android:paddingEnd="?android:attr/dialogPreferredPadding">
|
|
||||||
<CheckedTextView
|
|
||||||
android:id="@android:id/title"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:textColor="?android:attr/textColorAlertDialogListItem"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
|
|
||||||
android:ellipsize="marquee" />
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/restricted_icon"
|
|
||||||
android:layout_width="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:scaleType="centerInside"
|
|
||||||
android:tint="?android:attr/colorAccent"
|
|
||||||
android:src="@*android:drawable/ic_info"
|
|
||||||
android:layout_marginLeft="@dimen/restricted_icon_padding"
|
|
||||||
android:visibility="gone" />
|
|
||||||
</com.android.settings.CheckableLinearLayout>
|
|
||||||
|
|
||||||
|
|
||||||
<TextView android:id="@android:id/summary"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingBottom="8dp"
|
|
||||||
android:paddingStart="52dp"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:maxLines="10" />
|
|
||||||
|
|
||||||
</com.android.settings.CheckableLinearLayout>
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (C) 2016 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.
|
|
||||||
-->
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
<TextView android:id="@android:id/text1"
|
|
||||||
style="?android:attr/spinnerDropDownItemStyle"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="?android:attr/listPreferredItemHeightSmall"
|
|
||||||
android:ellipsize="marquee" />
|
|
||||||
<ImageView android:id="@+id/restricted_icon"
|
|
||||||
android:layout_width="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:layout_height="@*android:dimen/config_restrictedIconSize"
|
|
||||||
android:tint="?android:attr/colorAccent"
|
|
||||||
android:src="@*android:drawable/ic_info"
|
|
||||||
android:baselineAlignBottom="true"
|
|
||||||
android:layout_marginEnd="@dimen/restricted_icon_padding"
|
|
||||||
android:gravity="end|center_vertical"
|
|
||||||
android:visibility="gone" />
|
|
||||||
</LinearLayout>
|
|
||||||
@@ -567,7 +567,19 @@
|
|||||||
<item>2</item>
|
<item>2</item>
|
||||||
<item>3</item>
|
<item>3</item>
|
||||||
</integer-array>
|
</integer-array>
|
||||||
|
|
||||||
|
<!-- The settings/preference description for each settable device state defined in the array
|
||||||
|
"config_perDeviceStateRotationLockDefaults".
|
||||||
|
The item in position "i" describes the auto-rotation setting for the device state also in
|
||||||
|
position "i" in the array "config_perDeviceStateRotationLockDefaults". -->
|
||||||
|
<string-array name="config_settableAutoRotationDeviceStatesDescriptions">
|
||||||
|
<!-- Example:
|
||||||
|
<item>Auto-rotate when folded</item>
|
||||||
|
<item>@null</item> No description for state in position 1
|
||||||
|
<item>Auto-rotate when unfolded</item>
|
||||||
|
-->
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<!-- Whether to aggregate for network selection list-->
|
<!-- Whether to aggregate for network selection list-->
|
||||||
<bool name="config_network_selection_list_aggregation_enabled">false</bool>
|
<bool name="config_network_selection_list_aggregation_enabled">false</bool>
|
||||||
|
|
||||||
@@ -593,4 +605,5 @@
|
|||||||
|
|
||||||
<!-- Whether the dream setup activity should be enabled as part of setupwizard -->
|
<!-- Whether the dream setup activity should be enabled as part of setupwizard -->
|
||||||
<bool name="dream_setup_supported">false</bool>
|
<bool name="dream_setup_supported">false</bool>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -5156,8 +5156,8 @@
|
|||||||
<string name="general_category_title">General</string>
|
<string name="general_category_title">General</string>
|
||||||
<!-- Title for the accessibility preference category of display services and settings. [CHAR LIMIT=50] -->
|
<!-- Title for the accessibility preference category of display services and settings. [CHAR LIMIT=50] -->
|
||||||
<string name="display_category_title">Display</string>
|
<string name="display_category_title">Display</string>
|
||||||
<!-- Title for the accessibility text options page. [CHAR LIMIT=50] -->
|
<!-- Title for the accessibility color and motion page. [CHAR LIMIT=50] -->
|
||||||
<string name="accessibility_text_and_display_title">Text and display</string>
|
<string name="accessibility_color_and_motion_title">Color and motion</string>
|
||||||
<!-- Title for the accessibility text options page. [CHAR LIMIT=50] -->
|
<!-- Title for the accessibility text options page. [CHAR LIMIT=50] -->
|
||||||
<string name="accessibility_turn_screen_darker_title">Turn screen darker</string>
|
<string name="accessibility_turn_screen_darker_title">Turn screen darker</string>
|
||||||
<!-- Title for the accessibility preference category of interaction control services and settings. [CHAR LIMIT=50] -->
|
<!-- Title for the accessibility preference category of interaction control services and settings. [CHAR LIMIT=50] -->
|
||||||
|
|||||||
@@ -17,34 +17,9 @@
|
|||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
android:key="accessibility_text_and_display"
|
android:key="accessibility_color_and_motion"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_and_display_title">
|
android:title="@string/accessibility_color_and_motion_title">
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:fragment="com.android.settings.display.ToggleFontSizePreferenceFragment"
|
|
||||||
android:icon="@drawable/ic_font_size"
|
|
||||||
android:key="font_size_preference_screen"
|
|
||||||
android:persistent="false"
|
|
||||||
android:title="@string/title_font_size"
|
|
||||||
settings:controller="com.android.settings.display.FontSizePreferenceController"
|
|
||||||
settings:searchable="false"/>
|
|
||||||
|
|
||||||
<com.android.settings.display.ScreenZoomPreference
|
|
||||||
android:fragment="com.android.settings.display.ScreenZoomSettings"
|
|
||||||
android:icon="@drawable/ic_screen_zoom"
|
|
||||||
android:key="accessibility_settings_screen_zoom"
|
|
||||||
android:persistent="false"
|
|
||||||
android:title="@string/screen_zoom_title"
|
|
||||||
settings:searchable="false"/>
|
|
||||||
|
|
||||||
<SwitchPreference
|
|
||||||
android:key="toggle_force_bold_text"
|
|
||||||
android:icon="@drawable/ic_force_bold"
|
|
||||||
android:persistent="false"
|
|
||||||
android:title="@string/force_bold_text"
|
|
||||||
settings:keywords="@string/keywords_bold_text"
|
|
||||||
settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
|
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment"
|
android:fragment="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment"
|
||||||
@@ -76,12 +51,6 @@
|
|||||||
android:title="@string/accessibility_toggle_large_pointer_icon_title"
|
android:title="@string/accessibility_toggle_large_pointer_icon_title"
|
||||||
settings:controller="com.android.settings.accessibility.LargePointerIconPreferenceController"/>
|
settings:controller="com.android.settings.accessibility.LargePointerIconPreferenceController"/>
|
||||||
|
|
||||||
<SwitchPreference
|
|
||||||
android:key="toggle_high_text_contrast_preference"
|
|
||||||
android:persistent="false"
|
|
||||||
android:title="@string/accessibility_toggle_high_text_contrast_preference_title"
|
|
||||||
settings:controller="com.android.settings.accessibility.HighTextContrastPreferenceController"/>
|
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="experimental_category"
|
android:key="experimental_category"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
@@ -36,21 +36,19 @@
|
|||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/display_category_title">
|
android:title="@string/display_category_title">
|
||||||
|
|
||||||
<!-- After completely finishing the Text and reading options feature, it will be visible. -->
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.TextReadingPreferenceFragment"
|
android:fragment="com.android.settings.accessibility.TextReadingPreferenceFragment"
|
||||||
android:icon="@drawable/ic_adaptive_font_download"
|
android:icon="@drawable/ic_adaptive_font_download"
|
||||||
android:key="text_reading_options"
|
android:key="text_reading_options"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_reading_options_title"
|
android:title="@string/accessibility_text_reading_options_title" />
|
||||||
settings:isPreferenceVisible="false"/>
|
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.TextAndDisplayFragment"
|
android:fragment="com.android.settings.accessibility.ColorAndMotionFragment"
|
||||||
android:key="text_and_display_preference_screen"
|
android:key="color_and_motion"
|
||||||
android:icon="@drawable/ic_text_and_display"
|
android:icon="@drawable/ic_color_and_motion"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_and_display_title"
|
android:title="@string/accessibility_color_and_motion_title"
|
||||||
settings:searchable="true"/>
|
settings:searchable="true"/>
|
||||||
|
|
||||||
<com.android.settingslib.PrimarySwitchPreference
|
<com.android.settingslib.PrimarySwitchPreference
|
||||||
|
|||||||
@@ -26,23 +26,8 @@
|
|||||||
android:key="text_reading_options"
|
android:key="text_reading_options"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_reading_options_title"
|
android:title="@string/accessibility_text_reading_options_title"
|
||||||
settings:isPreferenceVisible="false"
|
|
||||||
settings:keywords="text_reading_options" />
|
settings:keywords="text_reading_options" />
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:key="font_size_preference"
|
|
||||||
android:icon="@drawable/ic_font_size"
|
|
||||||
android:summary="@string/short_summary_font_size"
|
|
||||||
android:title="@string/title_font_size"
|
|
||||||
settings:controller="com.android.settings.accessibility.FontSizePreferenceController" />
|
|
||||||
|
|
||||||
<com.android.settings.display.ScreenZoomPreference
|
|
||||||
android:key="force_density_preference"
|
|
||||||
android:icon="@drawable/ic_screen_zoom"
|
|
||||||
android:summary="@string/screen_zoom_short_summary"
|
|
||||||
android:title="@string/screen_zoom_title"
|
|
||||||
settings:controller="com.android.settings.accessibility.ScreenSizePreferenceController" />
|
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard"
|
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard"
|
||||||
android:key="screen_magnification_preference"
|
android:key="screen_magnification_preference"
|
||||||
|
|||||||
@@ -42,9 +42,22 @@
|
|||||||
android:title="@string/accessibility_power_button_ends_call_prerefence_title"
|
android:title="@string/accessibility_power_button_ends_call_prerefence_title"
|
||||||
settings:controller="com.android.settings.accessibility.PowerButtonEndsCallPreferenceController"/>
|
settings:controller="com.android.settings.accessibility.PowerButtonEndsCallPreferenceController"/>
|
||||||
|
|
||||||
|
<!-- Standard auto-rotation preference that will be shown when device state based auto-rotation
|
||||||
|
settings are NOT available. -->
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:key="toggle_lock_screen_rotation_preference"
|
android:key="toggle_lock_screen_rotation_preference"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accelerometer_title"
|
android:title="@string/accelerometer_title"
|
||||||
settings:controller="com.android.settings.accessibility.LockScreenRotationPreferenceController"/>
|
settings:controller="com.android.settings.accessibility.LockScreenRotationPreferenceController"/>
|
||||||
|
|
||||||
|
<!-- Auto-rotation preference that will be shown when device state based auto-rotation settings
|
||||||
|
are available. -->
|
||||||
|
<Preference
|
||||||
|
android:key="device_state_auto_rotate_accessibility"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/accelerometer_title"
|
||||||
|
android:fragment="com.android.settings.display.DeviceStateAutoRotateDetailsFragment"
|
||||||
|
settings:keywords="@string/keywords_auto_rotate"
|
||||||
|
settings:controller="com.android.settings.display.DeviceStateAutoRotateOverviewController"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|||||||
24
res/xml/device_state_auto_rotate_settings.xml
Normal file
24
res/xml/device_state_auto_rotate_settings.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2022 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PreferenceScreen
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:title="@string/accelerometer_title" >
|
||||||
|
|
||||||
|
<!-- Device state based auto-rotation preferences will be added programmatically here. -->
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
@@ -103,12 +103,27 @@
|
|||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/category_name_display_controls">
|
android:title="@string/category_name_display_controls">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Standard auto-rotation preference that will be shown when device state based
|
||||||
|
auto-rotation settings are NOT available.
|
||||||
|
-->
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:key="auto_rotate"
|
android:key="auto_rotate"
|
||||||
android:title="@string/accelerometer_title"
|
android:title="@string/accelerometer_title"
|
||||||
settings:keywords="@string/keywords_auto_rotate"
|
settings:keywords="@string/keywords_auto_rotate"
|
||||||
settings:controller="com.android.settings.display.AutoRotatePreferenceController"/>
|
settings:controller="com.android.settings.display.AutoRotatePreferenceController"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Auto-rotation preference that will be shown when device state based auto-rotation
|
||||||
|
settings are available.
|
||||||
|
-->
|
||||||
|
<Preference
|
||||||
|
android:key="device_state_auto_rotate"
|
||||||
|
android:title="@string/accelerometer_title"
|
||||||
|
android:fragment="com.android.settings.display.DeviceStateAutoRotateDetailsFragment"
|
||||||
|
settings:keywords="@string/keywords_auto_rotate"
|
||||||
|
settings:controller="com.android.settings.display.DeviceStateAutoRotateOverviewController"/>
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:key="display_white_balance"
|
android:key="display_white_balance"
|
||||||
android:title="@string/display_white_balance_title"
|
android:title="@string/display_white_balance_title"
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.CheckedTextView;
|
import android.widget.CheckedTextView;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
@@ -53,7 +52,6 @@ public class RestrictedListPreference extends CustomListPreference {
|
|||||||
|
|
||||||
public RestrictedListPreference(Context context, AttributeSet attrs) {
|
public RestrictedListPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
setWidgetLayoutResource(R.layout.restricted_icon);
|
|
||||||
mHelper = new RestrictedPreferenceHelper(context, this, attrs);
|
mHelper = new RestrictedPreferenceHelper(context, this, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,10 +65,6 @@ public class RestrictedListPreference extends CustomListPreference {
|
|||||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||||
super.onBindViewHolder(holder);
|
super.onBindViewHolder(holder);
|
||||||
mHelper.onBindViewHolder(holder);
|
mHelper.onBindViewHolder(holder);
|
||||||
final View restrictedIcon = holder.findViewById(R.id.restricted_icon);
|
|
||||||
if (restrictedIcon != null) {
|
|
||||||
restrictedIcon.setVisibility(isDisabledByAdmin() ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -187,11 +181,9 @@ public class RestrictedListPreference extends CustomListPreference {
|
|||||||
View root = super.getView(position, convertView, parent);
|
View root = super.getView(position, convertView, parent);
|
||||||
CharSequence entry = getItem(position);
|
CharSequence entry = getItem(position);
|
||||||
CheckedTextView text = (CheckedTextView) root.findViewById(R.id.text1);
|
CheckedTextView text = (CheckedTextView) root.findViewById(R.id.text1);
|
||||||
ImageView padlock = (ImageView) root.findViewById(R.id.restricted_lock_icon);
|
|
||||||
if (isRestrictedForEntry(entry)) {
|
if (isRestrictedForEntry(entry)) {
|
||||||
text.setEnabled(false);
|
text.setEnabled(false);
|
||||||
text.setChecked(false);
|
text.setChecked(false);
|
||||||
padlock.setVisibility(View.VISIBLE);
|
|
||||||
} else {
|
} else {
|
||||||
if (mSelectedIndex != -1) {
|
if (mSelectedIndex != -1) {
|
||||||
text.setChecked(position == mSelectedIndex);
|
text.setChecked(position == mSelectedIndex);
|
||||||
@@ -199,7 +191,6 @@ public class RestrictedListPreference extends CustomListPreference {
|
|||||||
if (!text.isEnabled()) {
|
if (!text.isEnabled()) {
|
||||||
text.setEnabled(true);
|
text.setEnabled(true);
|
||||||
}
|
}
|
||||||
padlock.setVisibility(View.GONE);
|
|
||||||
}
|
}
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ import com.android.settings.dashboard.DashboardFragment;
|
|||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settingslib.search.SearchIndexable;
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
|
||||||
/** Accessibility settings for text and display. */
|
/** Accessibility settings for color and motion. */
|
||||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||||
public class TextAndDisplayFragment extends DashboardFragment {
|
public class ColorAndMotionFragment extends DashboardFragment {
|
||||||
|
|
||||||
private static final String TAG = "TextAndDisplayFragment";
|
private static final String TAG = "ColorAndMotionFragment";
|
||||||
|
|
||||||
private static final String CATEGORY_EXPERIMENTAL = "experimental_category";
|
private static final String CATEGORY_EXPERIMENTAL = "experimental_category";
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ public class TextAndDisplayFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
return SettingsEnums.ACCESSIBILITY_TEXT_AND_DISPLAY;
|
return SettingsEnums.ACCESSIBILITY_COLOR_AND_MOTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ public class TextAndDisplayFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getPreferenceScreenResId() {
|
protected int getPreferenceScreenResId() {
|
||||||
return R.xml.accessibility_text_and_display;
|
return R.xml.accessibility_color_and_motion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -104,5 +104,5 @@ public class TextAndDisplayFragment extends DashboardFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider(R.xml.accessibility_text_and_display);
|
new BaseSearchIndexProvider(R.xml.accessibility_color_and_motion);
|
||||||
}
|
}
|
||||||
@@ -25,6 +25,7 @@ import com.android.internal.view.RotationPolicy;
|
|||||||
import com.android.internal.view.RotationPolicy.RotationPolicyListener;
|
import com.android.internal.view.RotationPolicy.RotationPolicyListener;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
import com.android.settings.display.DeviceStateAutoRotationHelper;
|
||||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
@@ -59,7 +60,9 @@ public class LockScreenRotationPreferenceController extends TogglePreferenceCont
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return RotationPolicy.isRotationSupported(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
return RotationPolicy.isRotationSupported(mContext)
|
||||||
|
&& !DeviceStateAutoRotationHelper.isDeviceStateRotationEnabledForA11y(mContext)
|
||||||
|
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -46,21 +46,22 @@ public class BluetoothDetailsMacAddressController extends BluetoothDetailsContro
|
|||||||
protected void init(PreferenceScreen screen) {
|
protected void init(PreferenceScreen screen) {
|
||||||
mFooterPreference = screen.findPreference(KEY_DEVICE_DETAILS_FOOTER);
|
mFooterPreference = screen.findPreference(KEY_DEVICE_DETAILS_FOOTER);
|
||||||
mFooterPreference.setTitle(mContext.getString(
|
mFooterPreference.setTitle(mContext.getString(
|
||||||
R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
|
R.string.bluetooth_device_mac_address, mCachedDevice.getIdentityAddress()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void refresh() {
|
protected void refresh() {
|
||||||
if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
|
if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
|
||||||
StringBuilder title = new StringBuilder(mContext.getString(
|
StringBuilder title = new StringBuilder(mContext.getString(
|
||||||
R.string.bluetooth_multuple_devices_mac_address, mCachedDevice.getAddress()));
|
R.string.bluetooth_multuple_devices_mac_address,
|
||||||
|
mCachedDevice.getIdentityAddress()));
|
||||||
for (CachedBluetoothDevice member: mCachedDevice.getMemberDevice()) {
|
for (CachedBluetoothDevice member: mCachedDevice.getMemberDevice()) {
|
||||||
title.append("\n").append(member.getAddress());
|
title.append("\n").append(member.getIdentityAddress());
|
||||||
}
|
}
|
||||||
mFooterPreference.setTitle(title);
|
mFooterPreference.setTitle(title);
|
||||||
} else {
|
} else {
|
||||||
mFooterPreference.setTitle(mContext.getString(
|
mFooterPreference.setTitle(mContext.getString(
|
||||||
R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
|
R.string.bluetooth_device_mac_address, mCachedDevice.getIdentityAddress()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import com.android.settingslib.utils.ThreadUtils;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -280,6 +281,11 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns all controllers of type T. */
|
||||||
|
protected <T extends AbstractPreferenceController> List<T> useAll(Class<T> clazz) {
|
||||||
|
return (List<T>) mPreferenceControllers.getOrDefault(clazz, Collections.emptyList());
|
||||||
|
}
|
||||||
|
|
||||||
protected void addPreferenceController(AbstractPreferenceController controller) {
|
protected void addPreferenceController(AbstractPreferenceController controller) {
|
||||||
if (mPreferenceControllers.get(controller.getClass()) == null) {
|
if (mPreferenceControllers.get(controller.getClass()) == null) {
|
||||||
mPreferenceControllers.put(controller.getClass(), new ArrayList<>());
|
mPreferenceControllers.put(controller.getClass(), new ArrayList<>());
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ public class UnrestrictedDataAccessPreference extends AppSwitchPreference implem
|
|||||||
ApplicationsState applicationsState, DataSaverBackend dataSaverBackend,
|
ApplicationsState applicationsState, DataSaverBackend dataSaverBackend,
|
||||||
DashboardFragment parentFragment) {
|
DashboardFragment parentFragment) {
|
||||||
super(context);
|
super(context);
|
||||||
setWidgetLayoutResource(R.layout.restricted_switch_widget);
|
|
||||||
mHelper = new RestrictedPreferenceHelper(context, this, null);
|
mHelper = new RestrictedPreferenceHelper(context, this, null);
|
||||||
mEntry = entry;
|
mEntry = entry;
|
||||||
mDataUsageState = (AppStateDataUsageBridge.DataUsageState) mEntry.extraInfo;
|
mDataUsageState = (AppStateDataUsageBridge.DataUsageState) mEntry.extraInfo;
|
||||||
@@ -131,10 +130,6 @@ public class UnrestrictedDataAccessPreference extends AppSwitchPreference implem
|
|||||||
super.onBindViewHolder(holder);
|
super.onBindViewHolder(holder);
|
||||||
|
|
||||||
mHelper.onBindViewHolder(holder);
|
mHelper.onBindViewHolder(holder);
|
||||||
holder.findViewById(R.id.restricted_icon).setVisibility(
|
|
||||||
disabledByAdmin ? View.VISIBLE : View.GONE);
|
|
||||||
holder.findViewById(android.R.id.switch_widget).setVisibility(
|
|
||||||
disabledByAdmin ? View.GONE : View.VISIBLE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ public class AutoRotatePreferenceController extends TogglePreferenceController i
|
|||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return RotationPolicy.isRotationLockToggleVisible(mContext)
|
return RotationPolicy.isRotationLockToggleVisible(mContext)
|
||||||
|
&& !DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext)
|
||||||
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import android.app.settings.SettingsEnums;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.search.Indexable;
|
||||||
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** Fragment that shows all the available device state based auto-rotation preferences. */
|
||||||
|
@SearchIndexable
|
||||||
|
public class DeviceStateAutoRotateDetailsFragment extends DashboardFragment {
|
||||||
|
|
||||||
|
private static final String TAG = "DeviceStateAutoRotateDetailsFragment";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMetricsCategory() {
|
||||||
|
return SettingsEnums.DISPLAY_AUTO_ROTATE_SETTINGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getPreferenceScreenResId() {
|
||||||
|
return R.xml.device_state_auto_rotate_settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
DeviceStateAutoRotationHelper.initControllers(
|
||||||
|
getLifecycle(),
|
||||||
|
useAll(DeviceStateAutoRotateSettingController.class)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
|
return DeviceStateAutoRotationHelper.createPreferenceControllers(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
new BaseSearchIndexProvider(R.xml.device_state_auto_rotate_settings) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SearchIndexableRaw> getRawDataToIndex(Context context,
|
||||||
|
boolean enabled) {
|
||||||
|
return DeviceStateAutoRotationHelper.getRawDataToIndex(context, enabled);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The top-level preference controller for device state based auto-rotation settings.
|
||||||
|
*
|
||||||
|
* It doesn't do anything on its own besides showing/hiding. The toggling of the settings will
|
||||||
|
* always be done in the details screen when device state based auto-rotation is enabled.
|
||||||
|
*/
|
||||||
|
public class DeviceStateAutoRotateOverviewController extends BasePreferenceController {
|
||||||
|
|
||||||
|
/** Preference key for when it is used in "accessibility_system_controls.xml". */
|
||||||
|
private static final String ACCESSIBILITY_PREF_KEY = "device_state_auto_rotate_accessibility";
|
||||||
|
|
||||||
|
public DeviceStateAutoRotateOverviewController(Context context, String key) {
|
||||||
|
super(context, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return isAvailableInternal() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAvailableInternal() {
|
||||||
|
return isA11yPage()
|
||||||
|
? DeviceStateAutoRotationHelper.isDeviceStateRotationEnabledForA11y(mContext)
|
||||||
|
: DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isA11yPage() {
|
||||||
|
return TextUtils.equals(getPreferenceKey(), ACCESSIBILITY_PREF_KEY);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import static androidx.lifecycle.Lifecycle.Event.ON_START;
|
||||||
|
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
|
||||||
|
|
||||||
|
import android.app.settings.SettingsEnums;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
import androidx.lifecycle.LifecycleObserver;
|
||||||
|
import androidx.lifecycle.OnLifecycleEvent;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** Controller for device state based auto rotation preferences. */
|
||||||
|
public class DeviceStateAutoRotateSettingController extends TogglePreferenceController implements
|
||||||
|
LifecycleObserver {
|
||||||
|
|
||||||
|
private SwitchPreference mPreference;
|
||||||
|
|
||||||
|
private final DeviceStateRotationLockSettingsManager mAutoRotateSettingsManager;
|
||||||
|
private final int mOrder;
|
||||||
|
private final DeviceStateRotationLockSettingsManager.DeviceStateRotationLockSettingsListener
|
||||||
|
mDeviceStateRotationLockSettingsListener = () -> updateState(mPreference);
|
||||||
|
private final int mDeviceState;
|
||||||
|
private final String mDeviceStateDescription;
|
||||||
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
|
||||||
|
public DeviceStateAutoRotateSettingController(Context context, int deviceState,
|
||||||
|
String deviceStateDescription, int order) {
|
||||||
|
super(context, getPreferenceKeyForDeviceState(deviceState));
|
||||||
|
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
|
||||||
|
mDeviceState = deviceState;
|
||||||
|
mDeviceStateDescription = deviceStateDescription;
|
||||||
|
mAutoRotateSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(context);
|
||||||
|
mOrder = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
void init(Lifecycle lifecycle) {
|
||||||
|
lifecycle.addObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnLifecycleEvent(ON_START)
|
||||||
|
void onStart() {
|
||||||
|
mAutoRotateSettingsManager.registerListener(mDeviceStateRotationLockSettingsListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnLifecycleEvent(ON_STOP)
|
||||||
|
void onStop() {
|
||||||
|
mAutoRotateSettingsManager.unregisterListener(mDeviceStateRotationLockSettingsListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
|
mPreference = new SwitchPreference(mContext);
|
||||||
|
mPreference.setTitle(mDeviceStateDescription);
|
||||||
|
mPreference.setKey(getPreferenceKey());
|
||||||
|
mPreference.setOrder(mOrder);
|
||||||
|
screen.addPreference(mPreference);
|
||||||
|
super.displayPreference(screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext)
|
||||||
|
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPreferenceKey() {
|
||||||
|
return getPreferenceKeyForDeviceState(mDeviceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getPreferenceKeyForDeviceState(int deviceState) {
|
||||||
|
return "auto_rotate_device_state_" + deviceState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChecked() {
|
||||||
|
return !mAutoRotateSettingsManager.isRotationLocked(mDeviceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setChecked(boolean isChecked) {
|
||||||
|
boolean isRotationLocked = !isChecked;
|
||||||
|
mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATION_LOCK,
|
||||||
|
isRotationLocked);
|
||||||
|
mAutoRotateSettingsManager.updateSetting(mDeviceState, isRotationLocked);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateRawDataToIndex(List<SearchIndexableRaw> rawData) {
|
||||||
|
SearchIndexableRaw indexable = new SearchIndexableRaw(mContext);
|
||||||
|
indexable.key = getPreferenceKey();
|
||||||
|
indexable.title = mDeviceStateDescription;
|
||||||
|
// Maybe pass screen title as param?
|
||||||
|
indexable.screenTitle = mContext.getString(R.string.accelerometer_title);
|
||||||
|
rawData.add(indexable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSliceHighlightMenuRes() {
|
||||||
|
return R.string.menu_key_display;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSliceable() {
|
||||||
|
return true; // Maybe set to false if in accessibility settings screen
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPublicSlice() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
|
||||||
|
import com.android.internal.view.RotationPolicy;
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager.SettableDeviceState;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class with utility methods related to device state auto-rotation that can be used in
|
||||||
|
* auto-rotation settings fragments and controllers.
|
||||||
|
*/
|
||||||
|
public class DeviceStateAutoRotationHelper {
|
||||||
|
|
||||||
|
private static final String TAG = "DeviceStateAutoRotHelpr";
|
||||||
|
|
||||||
|
static void initControllers(Lifecycle lifecycle,
|
||||||
|
List<DeviceStateAutoRotateSettingController> controllers) {
|
||||||
|
for (DeviceStateAutoRotateSettingController controller : controllers) {
|
||||||
|
controller.init(lifecycle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static ImmutableList<AbstractPreferenceController> createPreferenceControllers(
|
||||||
|
Context context) {
|
||||||
|
List<SettableDeviceState> settableDeviceStates = DeviceStateRotationLockSettingsManager
|
||||||
|
.getInstance(context).getSettableDeviceStates();
|
||||||
|
int numDeviceStates = settableDeviceStates.size();
|
||||||
|
if (numDeviceStates == 0) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
String[] deviceStateSettingDescriptions = context.getResources().getStringArray(
|
||||||
|
R.array.config_settableAutoRotationDeviceStatesDescriptions);
|
||||||
|
if (numDeviceStates != deviceStateSettingDescriptions.length) {
|
||||||
|
Log.wtf(TAG,
|
||||||
|
"Mismatch between number of device states and device states descriptions.");
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmutableList.Builder<AbstractPreferenceController> controllers =
|
||||||
|
ImmutableList.builderWithExpectedSize(numDeviceStates);
|
||||||
|
for (int i = 0; i < numDeviceStates; i++) {
|
||||||
|
SettableDeviceState settableDeviceState = settableDeviceStates.get(i);
|
||||||
|
if (!settableDeviceState.isSettable()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Preferences with a lower order will be showed first. Here we go below 0 to make sure
|
||||||
|
// we are shown before statically declared preferences in XML.
|
||||||
|
int order = -numDeviceStates + i;
|
||||||
|
controllers.add(new DeviceStateAutoRotateSettingController(
|
||||||
|
context,
|
||||||
|
settableDeviceState.getDeviceState(),
|
||||||
|
deviceStateSettingDescriptions[i],
|
||||||
|
order
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return controllers.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
static List<SearchIndexableRaw> getRawDataToIndex(
|
||||||
|
Context context, boolean enabled) {
|
||||||
|
// Check what the "enabled" param is for
|
||||||
|
List<AbstractPreferenceController> controllers = createPreferenceControllers(context);
|
||||||
|
List<SearchIndexableRaw> rawData = new ArrayList<>();
|
||||||
|
for (AbstractPreferenceController controller : controllers) {
|
||||||
|
((BasePreferenceController) controller).updateRawDataToIndex(rawData);
|
||||||
|
}
|
||||||
|
return rawData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns whether the device state based auto-rotation settings are enabled. */
|
||||||
|
public static boolean isDeviceStateRotationEnabled(Context context) {
|
||||||
|
return RotationPolicy.isRotationLockToggleVisible(context)
|
||||||
|
&& DeviceStateRotationLockSettingsManager.isDeviceStateRotationLockEnabled(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the device state based auto-rotation settings are enabled for the
|
||||||
|
* accessibility settings page.
|
||||||
|
*/
|
||||||
|
public static boolean isDeviceStateRotationEnabledForA11y(Context context) {
|
||||||
|
return RotationPolicy.isRotationSupported(context)
|
||||||
|
&& DeviceStateRotationLockSettingsManager.isDeviceStateRotationLockEnabled(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,6 +47,7 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SmartAutoRotateController controls whether auto rotation is enabled
|
* SmartAutoRotateController controls whether auto rotation is enabled
|
||||||
@@ -54,6 +55,8 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
|||||||
public class SmartAutoRotateController extends TogglePreferenceController implements
|
public class SmartAutoRotateController extends TogglePreferenceController implements
|
||||||
Preference.OnPreferenceChangeListener, LifecycleObserver {
|
Preference.OnPreferenceChangeListener, LifecycleObserver {
|
||||||
|
|
||||||
|
protected Preference mPreference;
|
||||||
|
|
||||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private final SensorPrivacyManager mPrivacyManager;
|
private final SensorPrivacyManager mPrivacyManager;
|
||||||
private final PowerManager mPowerManager;
|
private final PowerManager mPowerManager;
|
||||||
@@ -63,7 +66,9 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
|
|||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
protected Preference mPreference;
|
private final DeviceStateRotationLockSettingsManager mDeviceStateAutoRotateSettingsManager;
|
||||||
|
private final DeviceStateRotationLockSettingsManager.DeviceStateRotationLockSettingsListener
|
||||||
|
mDeviceStateRotationLockSettingsListener = () -> updateState(mPreference);
|
||||||
private RotationPolicy.RotationPolicyListener mRotationPolicyListener;
|
private RotationPolicy.RotationPolicyListener mRotationPolicyListener;
|
||||||
|
|
||||||
public SmartAutoRotateController(Context context, String preferenceKey) {
|
public SmartAutoRotateController(Context context, String preferenceKey) {
|
||||||
@@ -73,6 +78,8 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
|
|||||||
mPrivacyManager
|
mPrivacyManager
|
||||||
.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> updateState(mPreference));
|
.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> updateState(mPreference));
|
||||||
mPowerManager = context.getSystemService(PowerManager.class);
|
mPowerManager = context.getSystemService(PowerManager.class);
|
||||||
|
mDeviceStateAutoRotateSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(
|
||||||
|
context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(Lifecycle lifecycle) {
|
public void init(Lifecycle lifecycle) {
|
||||||
@@ -89,6 +96,9 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isRotationLocked() {
|
protected boolean isRotationLocked() {
|
||||||
|
if (DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext)) {
|
||||||
|
return mDeviceStateAutoRotateSettingsManager.isRotationLockedForAllStates();
|
||||||
|
}
|
||||||
return RotationPolicy.isRotationLocked(mContext);
|
return RotationPolicy.isRotationLocked(mContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +137,8 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener);
|
RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener);
|
||||||
|
mDeviceStateAutoRotateSettingsManager.registerListener(
|
||||||
|
mDeviceStateRotationLockSettingsListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnLifecycleEvent(ON_STOP)
|
@OnLifecycleEvent(ON_STOP)
|
||||||
@@ -136,6 +148,8 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
|
|||||||
RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
|
RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
|
||||||
mRotationPolicyListener = null;
|
mRotationPolicyListener = null;
|
||||||
}
|
}
|
||||||
|
mDeviceStateAutoRotateSettingsManager.unregisterListener(
|
||||||
|
mDeviceStateRotationLockSettingsListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public class SmartAutoRotatePreferenceController extends TogglePreferenceControl
|
|||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return RotationPolicy.isRotationLockToggleVisible(mContext)
|
return RotationPolicy.isRotationLockToggleVisible(mContext)
|
||||||
|
&& !DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext)
|
||||||
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,14 @@ import com.android.settings.SettingsActivity;
|
|||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.widget.SettingsMainSwitchBar;
|
import com.android.settings.widget.SettingsMainSwitchBar;
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.search.Indexable;
|
import com.android.settingslib.search.Indexable;
|
||||||
import com.android.settingslib.search.SearchIndexable;
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference fragment used for auto rotation
|
* Preference fragment used for auto rotation
|
||||||
*/
|
*/
|
||||||
@@ -60,6 +64,15 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
|
|||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
use(SmartAutoRotateController.class).init(getLifecycle());
|
use(SmartAutoRotateController.class).init(getLifecycle());
|
||||||
|
DeviceStateAutoRotationHelper.initControllers(
|
||||||
|
getLifecycle(),
|
||||||
|
useAll(DeviceStateAutoRotateSettingController.class)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
|
return DeviceStateAutoRotationHelper.createPreferenceControllers(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,7 +92,9 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void createHeader(SettingsActivity activity) {
|
void createHeader(SettingsActivity activity) {
|
||||||
if (isRotationResolverServiceAvailable(activity)) {
|
boolean deviceStateRotationEnabled =
|
||||||
|
DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(activity);
|
||||||
|
if (isRotationResolverServiceAvailable(activity) && !deviceStateRotationEnabled) {
|
||||||
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
|
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
|
||||||
switchBar.setTitle(
|
switchBar.setTitle(
|
||||||
getContext().getString(R.string.auto_rotate_settings_primary_switch_title));
|
getContext().getString(R.string.auto_rotate_settings_primary_switch_title));
|
||||||
@@ -127,5 +142,12 @@ public class SmartAutoRotatePreferenceFragment extends DashboardFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider(R.xml.auto_rotate_settings);
|
new BaseSearchIndexProvider(R.xml.auto_rotate_settings) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SearchIndexableRaw> getRawDataToIndex(
|
||||||
|
Context context, boolean enabled) {
|
||||||
|
return DeviceStateAutoRotationHelper.getRawDataToIndex(context, enabled);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,23 +97,19 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
|
|||||||
|
|
||||||
public PrivateDnsModeDialogPreference(Context context) {
|
public PrivateDnsModeDialogPreference(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
initialize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs) {
|
public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
initialize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
initialize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs, int defStyleAttr,
|
public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs, int defStyleAttr,
|
||||||
int defStyleRes) {
|
int defStyleRes) {
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
initialize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final AnnotationSpan.LinkInfo mUrlLinkInfo = new AnnotationSpan.LinkInfo(
|
private final AnnotationSpan.LinkInfo mUrlLinkInfo = new AnnotationSpan.LinkInfo(
|
||||||
@@ -131,12 +127,6 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
private void initialize() {
|
|
||||||
// Add the "Restricted" icon resource so that if the preference is disabled by the
|
|
||||||
// admin, an information button will be shown.
|
|
||||||
setWidgetLayoutResource(R.layout.restricted_icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||||
super.onBindViewHolder(holder);
|
super.onBindViewHolder(holder);
|
||||||
@@ -146,13 +136,6 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
|
|||||||
// by the controller.
|
// by the controller.
|
||||||
holder.itemView.setEnabled(true);
|
holder.itemView.setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
final View restrictedIcon = holder.findViewById(R.id.restricted_icon);
|
|
||||||
if (restrictedIcon != null) {
|
|
||||||
// Show the "Restricted" icon if, and only if, the preference was disabled by
|
|
||||||
// the admin.
|
|
||||||
restrictedIcon.setVisibility(isDisabledByAdmin() ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,175 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 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.notification;
|
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.os.UserManager;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.CheckBox;
|
|
||||||
import android.widget.CompoundButton;
|
|
||||||
import android.widget.ListView;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.appcompat.app.AlertDialog.Builder;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.RestrictedListPreference;
|
|
||||||
import com.android.settings.Utils;
|
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
|
||||||
|
|
||||||
public class NotificationLockscreenPreference extends RestrictedListPreference {
|
|
||||||
|
|
||||||
private boolean mAllowRemoteInput;
|
|
||||||
private Listener mListener;
|
|
||||||
private boolean mShowRemoteInput;
|
|
||||||
private boolean mRemoteInputCheckBoxEnabled = true;
|
|
||||||
private int mUserId = UserHandle.myUserId();
|
|
||||||
private RestrictedLockUtils.EnforcedAdmin mAdminRestrictingRemoteInput;
|
|
||||||
|
|
||||||
public NotificationLockscreenPreference(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemoteInputCheckBoxEnabled(boolean enabled) {
|
|
||||||
mRemoteInputCheckBoxEnabled = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemoteInputRestricted(RestrictedLockUtils.EnforcedAdmin admin) {
|
|
||||||
mAdminRestrictingRemoteInput = admin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onClick() {
|
|
||||||
final Context context = getContext();
|
|
||||||
if (!Utils.startQuietModeDialogIfNecessary(context, UserManager.get(context), mUserId)) {
|
|
||||||
// Call super to create preference dialog only when work mode is on
|
|
||||||
// startQuietModeDialogIfNecessary will return false if mUserId is not a managed user
|
|
||||||
super.onClick();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserId(int userId) {
|
|
||||||
mUserId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPrepareDialogBuilder(Builder builder,
|
|
||||||
DialogInterface.OnClickListener innerListener) {
|
|
||||||
|
|
||||||
mListener = new Listener(innerListener);
|
|
||||||
builder.setSingleChoiceItems(createListAdapter(builder.getContext()), getSelectedValuePos(),
|
|
||||||
mListener);
|
|
||||||
mShowRemoteInput = getEntryValues().length == 3;
|
|
||||||
mAllowRemoteInput = Settings.Secure.getInt(getContext().getContentResolver(),
|
|
||||||
Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, 0) != 0;
|
|
||||||
builder.setView(R.layout.lockscreen_remote_input);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDialogCreated(Dialog dialog) {
|
|
||||||
super.onDialogCreated(dialog);
|
|
||||||
dialog.create();
|
|
||||||
CheckBox checkbox = (CheckBox) dialog.findViewById(R.id.lockscreen_remote_input);
|
|
||||||
checkbox.setChecked(!mAllowRemoteInput);
|
|
||||||
checkbox.setOnCheckedChangeListener(mListener);
|
|
||||||
checkbox.setEnabled(mAdminRestrictingRemoteInput == null);
|
|
||||||
|
|
||||||
View restricted = dialog.findViewById(R.id.restricted_lock_icon_remote_input);
|
|
||||||
restricted.setVisibility(mAdminRestrictingRemoteInput == null ? View.GONE : View.VISIBLE);
|
|
||||||
|
|
||||||
if (mAdminRestrictingRemoteInput != null) {
|
|
||||||
checkbox.setClickable(false);
|
|
||||||
dialog.findViewById(com.android.internal.R.id.customPanel)
|
|
||||||
.setOnClickListener(mListener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDialogStateRestored(Dialog dialog, Bundle savedInstanceState) {
|
|
||||||
super.onDialogStateRestored(dialog, savedInstanceState);
|
|
||||||
ListView listView = ((AlertDialog) dialog).getListView();
|
|
||||||
int selectedPosition = listView.getCheckedItemPosition();
|
|
||||||
|
|
||||||
View panel = dialog.findViewById(com.android.internal.R.id.customPanel);
|
|
||||||
panel.setVisibility(checkboxVisibilityForSelectedIndex(selectedPosition,
|
|
||||||
mShowRemoteInput));
|
|
||||||
mListener.setView(panel);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDialogClosed(boolean positiveResult) {
|
|
||||||
super.onDialogClosed(positiveResult);
|
|
||||||
Settings.Secure.putInt(getContext().getContentResolver(),
|
|
||||||
Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, mAllowRemoteInput ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean isAutoClosePreference() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int checkboxVisibilityForSelectedIndex(int selected,
|
|
||||||
boolean showRemoteAtAll) {
|
|
||||||
return selected == 1 && showRemoteAtAll && mRemoteInputCheckBoxEnabled ? View.VISIBLE
|
|
||||||
: View.GONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class Listener implements DialogInterface.OnClickListener,
|
|
||||||
CompoundButton.OnCheckedChangeListener, View.OnClickListener {
|
|
||||||
|
|
||||||
private final DialogInterface.OnClickListener mInner;
|
|
||||||
private View mView;
|
|
||||||
|
|
||||||
public Listener(DialogInterface.OnClickListener inner) {
|
|
||||||
mInner = inner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
mInner.onClick(dialog, which);
|
|
||||||
ListView listView = ((AlertDialog) dialog).getListView();
|
|
||||||
int selectedPosition = listView.getCheckedItemPosition();
|
|
||||||
if (mView != null) {
|
|
||||||
mView.setVisibility(
|
|
||||||
checkboxVisibilityForSelectedIndex(selectedPosition, mShowRemoteInput));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
||||||
mAllowRemoteInput = !isChecked;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setView(View view) {
|
|
||||||
mView = view;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (v.getId() == com.android.internal.R.id.customPanel) {
|
|
||||||
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
|
|
||||||
mAdminRestrictingRemoteInput);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -33,15 +33,17 @@ public class SafetySourceBroadcastReceiver extends BroadcastReceiver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImmutableList<String> sourceIds =
|
String[] sourceIdsExtra = intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS);
|
||||||
ImmutableList.copyOf(intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS));
|
if (sourceIdsExtra != null && sourceIdsExtra.length > 0) {
|
||||||
|
ImmutableList<String> sourceIds = ImmutableList.copyOf(sourceIdsExtra);
|
||||||
|
|
||||||
if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) {
|
if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) {
|
||||||
LockScreenSafetySource.sendSafetyData(context);
|
LockScreenSafetySource.sendSafetyData(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) {
|
if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) {
|
||||||
BiometricsSafetySource.sendSafetyData(context);
|
BiometricsSafetySource.sendSafetyData(context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,12 +20,10 @@ import android.content.Context;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceViewHolder;
|
import androidx.preference.PreferenceViewHolder;
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.RestrictedPreferenceHelper;
|
import com.android.settingslib.RestrictedPreferenceHelper;
|
||||||
import com.android.settingslib.widget.AppPreference;
|
import com.android.settingslib.widget.AppPreference;
|
||||||
@@ -55,7 +53,6 @@ public class RestrictedAppPreference extends AppPreference {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initialize(AttributeSet attrs, String userRestriction) {
|
private void initialize(AttributeSet attrs, String userRestriction) {
|
||||||
setWidgetLayoutResource(R.layout.restricted_icon);
|
|
||||||
mHelper = new RestrictedPreferenceHelper(getContext(), this, attrs);
|
mHelper = new RestrictedPreferenceHelper(getContext(), this, attrs);
|
||||||
this.userRestriction = userRestriction;
|
this.userRestriction = userRestriction;
|
||||||
}
|
}
|
||||||
@@ -64,10 +61,6 @@ public class RestrictedAppPreference extends AppPreference {
|
|||||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||||
super.onBindViewHolder(holder);
|
super.onBindViewHolder(holder);
|
||||||
mHelper.onBindViewHolder(holder);
|
mHelper.onBindViewHolder(holder);
|
||||||
final View restrictedIcon = holder.findViewById(R.id.restricted_icon);
|
|
||||||
if (restrictedIcon != null) {
|
|
||||||
restrictedIcon.setVisibility(isDisabledByAdmin() ? View.VISIBLE : View.GONE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ public class WifiNetworkDetailsFragment extends RestrictedDashboardFragment impl
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle icicle) {
|
public void onCreate(Bundle icicle) {
|
||||||
super.onCreate(icicle);
|
super.onCreate(icicle);
|
||||||
setIfOnlyAvailableForAdmins(true);
|
|
||||||
mIsUiRestricted = isUiRestricted();
|
mIsUiRestricted = isUiRestricted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,17 +32,17 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class TextAndDisplayFragmentTest {
|
public class ColorAndMotionFragmentTest {
|
||||||
|
|
||||||
private Context mContext = ApplicationProvider.getApplicationContext();
|
private Context mContext = ApplicationProvider.getApplicationContext();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNonIndexableKeys_existInXmlLayout() {
|
public void getNonIndexableKeys_existInXmlLayout() {
|
||||||
final List<String> niks = TextAndDisplayFragment.SEARCH_INDEX_DATA_PROVIDER
|
final List<String> niks = ColorAndMotionFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||||
.getNonIndexableKeys(mContext);
|
.getNonIndexableKeys(mContext);
|
||||||
final List<String> keys =
|
final List<String> keys =
|
||||||
XmlTestUtils.getKeysFromPreferenceXml(mContext,
|
XmlTestUtils.getKeysFromPreferenceXml(mContext,
|
||||||
R.xml.accessibility_text_and_display);
|
R.xml.accessibility_color_and_motion);
|
||||||
|
|
||||||
assertThat(keys).containsAtLeastElementsIn(niks);
|
assertThat(keys).containsAtLeastElementsIn(niks);
|
||||||
}
|
}
|
||||||
@@ -26,6 +26,7 @@ import androidx.preference.SwitchPreference;
|
|||||||
|
|
||||||
import com.android.internal.view.RotationPolicy;
|
import com.android.internal.view.RotationPolicy;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -50,7 +51,10 @@ public class LockScreenRotationPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {ShadowRotationPolicy.class})
|
@Config(shadows = {
|
||||||
|
ShadowRotationPolicy.class,
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class
|
||||||
|
})
|
||||||
public void getAvailabilityStatus_supportedRotation_shouldReturnAvailable() {
|
public void getAvailabilityStatus_supportedRotation_shouldReturnAvailable() {
|
||||||
ShadowRotationPolicy.setRotationSupported(true /* supported */);
|
ShadowRotationPolicy.setRotationSupported(true /* supported */);
|
||||||
|
|
||||||
@@ -59,8 +63,23 @@ public class LockScreenRotationPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {ShadowRotationPolicy.class})
|
@Config(shadows = {
|
||||||
public void getAvailabilityStatus_unsupportedRotation_shouldReturnUnsupportedOnDevice() {
|
ShadowRotationPolicy.class,
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class
|
||||||
|
})
|
||||||
|
public void getAvailabilityStatus_deviceStateRotationEnabled_returnsUnsupported() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true /* supported */);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||||
|
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(shadows = {
|
||||||
|
ShadowRotationPolicy.class,
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class
|
||||||
|
}) public void getAvailabilityStatus_unsupportedRotation_shouldReturnUnsupportedOnDevice() {
|
||||||
ShadowRotationPolicy.setRotationSupported(false /* supported */);
|
ShadowRotationPolicy.setRotationSupported(false /* supported */);
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ public class AdvancedBluetoothDetailsHeaderControllerTest {
|
|||||||
mController.mBluetoothAdapter = mBluetoothAdapter;
|
mController.mBluetoothAdapter = mBluetoothAdapter;
|
||||||
when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
|
when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
|
||||||
when(mCachedDevice.getAddress()).thenReturn(MAC_ADDRESS);
|
when(mCachedDevice.getAddress()).thenReturn(MAC_ADDRESS);
|
||||||
|
when(mCachedDevice.getIdentityAddress()).thenReturn(MAC_ADDRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ public abstract class BluetoothDetailsControllerTestBase {
|
|||||||
mDevice = mBluetoothAdapter.getRemoteDevice(config.getAddress());
|
mDevice = mBluetoothAdapter.getRemoteDevice(config.getAddress());
|
||||||
when(mCachedDevice.getDevice()).thenReturn(mDevice);
|
when(mCachedDevice.getDevice()).thenReturn(mDevice);
|
||||||
when(mCachedDevice.getAddress()).thenReturn(config.getAddress());
|
when(mCachedDevice.getAddress()).thenReturn(config.getAddress());
|
||||||
|
when(mCachedDevice.getIdentityAddress()).thenReturn(config.getAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ public class BluetoothDeviceDetailsFragmentTest {
|
|||||||
when(fragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
|
when(fragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
|
||||||
|
|
||||||
when(mCachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
|
when(mCachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
|
||||||
|
when(mCachedDevice.getIdentityAddress()).thenReturn(TEST_ADDRESS);
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, TEST_ADDRESS);
|
args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, TEST_ADDRESS);
|
||||||
mFragment.setArguments(args);
|
mFragment.setArguments(args);
|
||||||
|
|||||||
@@ -305,6 +305,7 @@ public class BluetoothPairingDetailTest {
|
|||||||
when(cachedDevice.isConnected()).thenReturn(true);
|
when(cachedDevice.isConnected()).thenReturn(true);
|
||||||
when(cachedDevice.getDevice()).thenReturn(device2);
|
when(cachedDevice.getDevice()).thenReturn(device2);
|
||||||
when(cachedDevice.getAddress()).thenReturn(TEST_DEVICE_ADDRESS_B);
|
when(cachedDevice.getAddress()).thenReturn(TEST_DEVICE_ADDRESS_B);
|
||||||
|
when(cachedDevice.getIdentityAddress()).thenReturn(TEST_DEVICE_ADDRESS_B);
|
||||||
|
|
||||||
mFragment.onProfileConnectionStateChanged(cachedDevice, BluetoothProfile.A2DP,
|
mFragment.onProfileConnectionStateChanged(cachedDevice, BluetoothProfile.A2DP,
|
||||||
BluetoothAdapter.STATE_CONNECTED);
|
BluetoothAdapter.STATE_CONNECTED);
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public class ForgetDeviceDialogFragmentTest {
|
|||||||
FakeFeatureFactory.setupForTest();
|
FakeFeatureFactory.setupForTest();
|
||||||
String deviceAddress = "55:66:77:88:99:AA";
|
String deviceAddress = "55:66:77:88:99:AA";
|
||||||
when(mCachedDevice.getAddress()).thenReturn(deviceAddress);
|
when(mCachedDevice.getAddress()).thenReturn(deviceAddress);
|
||||||
|
when(mCachedDevice.getIdentityAddress()).thenReturn(deviceAddress);
|
||||||
when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
|
when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
|
||||||
when(mCachedDevice.getName()).thenReturn(DEVICE_NAME);
|
when(mCachedDevice.getName()).thenReturn(DEVICE_NAME);
|
||||||
mFragment = spy(ForgetDeviceDialogFragment.newInstance(deviceAddress));
|
mFragment = spy(ForgetDeviceDialogFragment.newInstance(deviceAddress));
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public class RemoteDeviceNameDialogFragmentTest {
|
|||||||
|
|
||||||
String deviceAddress = "55:66:77:88:99:AA";
|
String deviceAddress = "55:66:77:88:99:AA";
|
||||||
when(mCachedDevice.getAddress()).thenReturn(deviceAddress);
|
when(mCachedDevice.getAddress()).thenReturn(deviceAddress);
|
||||||
|
when(mCachedDevice.getIdentityAddress()).thenReturn(deviceAddress);
|
||||||
mFragment = spy(RemoteDeviceNameDialogFragment.newInstance(mCachedDevice));
|
mFragment = spy(RemoteDeviceNameDialogFragment.newInstance(mCachedDevice));
|
||||||
doReturn(mCachedDevice).when(mFragment).getDevice(any());
|
doReturn(mCachedDevice).when(mFragment).getDevice(any());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,21 @@ public class DashboardFragmentTest {
|
|||||||
assertThat(controller1).isSameInstanceAs(retrievedController);
|
assertThat(controller1).isSameInstanceAs(retrievedController);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void useAll_returnsAllControllersOfType() {
|
||||||
|
final TestPreferenceController controller1 = new TestPreferenceController(mContext);
|
||||||
|
final TestPreferenceController controller2 = new TestPreferenceController(mContext);
|
||||||
|
final SubTestPreferenceController controller3 = new SubTestPreferenceController(mContext);
|
||||||
|
mTestFragment.addPreferenceController(controller1);
|
||||||
|
mTestFragment.addPreferenceController(controller2);
|
||||||
|
mTestFragment.addPreferenceController(controller3);
|
||||||
|
|
||||||
|
final List<TestPreferenceController> retrievedControllers = mTestFragment.useAll(
|
||||||
|
TestPreferenceController.class);
|
||||||
|
|
||||||
|
assertThat(retrievedControllers).containsExactly(controller1, controller2);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayTilesAsPreference_shouldAddTilesWithIntent() {
|
public void displayTilesAsPreference_shouldAddTilesWithIntent() {
|
||||||
when(mFakeFeatureFactory.dashboardFeatureProvider
|
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||||
@@ -360,6 +375,13 @@ public class DashboardFragmentTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SubTestPreferenceController extends TestPreferenceController {
|
||||||
|
|
||||||
|
private SubTestPreferenceController(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class TestFragment extends DashboardFragment {
|
private static class TestFragment extends DashboardFragment {
|
||||||
|
|
||||||
private final PreferenceManager mPreferenceManager;
|
private final PreferenceManager mPreferenceManager;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.provider.Settings;
|
|||||||
|
|
||||||
import androidx.preference.SwitchPreference;
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
|
import com.android.internal.R;
|
||||||
import com.android.internal.view.RotationPolicy;
|
import com.android.internal.view.RotationPolicy;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
@@ -64,6 +65,7 @@ public class AutoRotatePreferenceControllerTest {
|
|||||||
mPreference = new SwitchPreference(RuntimeEnvironment.application);
|
mPreference = new SwitchPreference(RuntimeEnvironment.application);
|
||||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||||
when(mContext.getContentResolver()).thenReturn(mContentResolver);
|
when(mContext.getContentResolver()).thenReturn(mContentResolver);
|
||||||
|
disableDeviceStateRotation();
|
||||||
|
|
||||||
mController = new AutoRotatePreferenceController(mContext, "auto_rotate");
|
mController = new AutoRotatePreferenceController(mContext, "auto_rotate");
|
||||||
}
|
}
|
||||||
@@ -111,6 +113,26 @@ public class AutoRotatePreferenceControllerTest {
|
|||||||
.UNSUPPORTED_ON_DEVICE);
|
.UNSUPPORTED_ON_DEVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_deviceRotationDisabled_returnsAvailable() {
|
||||||
|
enableAutoRotationPreference();
|
||||||
|
disableDeviceStateRotation();
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(BasePreferenceController.AVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_deviceRotationEnabled_returnsUnsupported() {
|
||||||
|
enableAutoRotationPreference();
|
||||||
|
enableDeviceStateRotation();
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsCheck() {
|
public void testIsCheck() {
|
||||||
assertThat(mController.isChecked()).isFalse();
|
assertThat(mController.isChecked()).isFalse();
|
||||||
@@ -180,4 +202,15 @@ public class AutoRotatePreferenceControllerTest {
|
|||||||
Settings.System.putIntForUser(mContentResolver,
|
Settings.System.putIntForUser(mContentResolver,
|
||||||
Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT);
|
Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableDeviceStateRotation() {
|
||||||
|
when(mContext.getResources().getStringArray(
|
||||||
|
R.array.config_perDeviceStateRotationLockDefaults)).thenReturn(
|
||||||
|
new String[]{"0:0", "1:1", "2:2"});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableDeviceStateRotation() {
|
||||||
|
when(mContext.getResources().getStringArray(
|
||||||
|
R.array.config_perDeviceStateRotationLockDefaults)).thenReturn(new String[]{});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.settings.SettingsEnums;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
public class DeviceStateAutoRotateDetailsFragmentTest {
|
||||||
|
|
||||||
|
private final DeviceStateAutoRotateDetailsFragment mFragment =
|
||||||
|
spy(new DeviceStateAutoRotateDetailsFragment());
|
||||||
|
private final Context mContext = spy(RuntimeEnvironment.application);
|
||||||
|
private final Resources mResources = spy(mContext.getResources());
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
when(mContext.getApplicationContext()).thenReturn(mContext);
|
||||||
|
when(mFragment.getContext()).thenReturn(mContext);
|
||||||
|
when(mFragment.getResources()).thenReturn(mResources);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getMetricsCategory_returnsAutoRotateSettings() {
|
||||||
|
assertThat(mFragment.getMetricsCategory()).isEqualTo(
|
||||||
|
SettingsEnums.DISPLAY_AUTO_ROTATE_SETTINGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPreferenceScreenResId_returnsDeviceStateAutoRotationSettings() {
|
||||||
|
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
|
||||||
|
R.xml.device_state_auto_rotate_settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createPreferenceControllers_settableDeviceStates_returnsDeviceStateControllers() {
|
||||||
|
enableDeviceStateSettableRotationStates(new String[]{"0:1", "1:1"},
|
||||||
|
new String[]{"Folded", "Unfolded"});
|
||||||
|
|
||||||
|
List<AbstractPreferenceController> preferenceControllers =
|
||||||
|
mFragment.createPreferenceControllers(mContext);
|
||||||
|
|
||||||
|
assertThat(preferenceControllers).hasSize(2);
|
||||||
|
assertThat(preferenceControllers.get(0)).isInstanceOf(
|
||||||
|
DeviceStateAutoRotateSettingController.class);
|
||||||
|
assertThat(preferenceControllers.get(1)).isInstanceOf(
|
||||||
|
DeviceStateAutoRotateSettingController.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createPreferenceControllers_noSettableDeviceStates_returnsEmptyList() {
|
||||||
|
enableDeviceStateSettableRotationStates(new String[]{}, new String[]{});
|
||||||
|
|
||||||
|
List<AbstractPreferenceController> preferenceControllers =
|
||||||
|
mFragment.createPreferenceControllers(mContext);
|
||||||
|
|
||||||
|
assertThat(preferenceControllers).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableDeviceStateSettableRotationStates(String[] settableStates,
|
||||||
|
String[] settableStatesDescriptions) {
|
||||||
|
when(mResources.getStringArray(
|
||||||
|
com.android.internal.R.array.config_perDeviceStateRotationLockDefaults)).thenReturn(
|
||||||
|
settableStates);
|
||||||
|
when(mResources.getStringArray(
|
||||||
|
R.array.config_settableAutoRotationDeviceStatesDescriptions)).thenReturn(
|
||||||
|
settableStatesDescriptions);
|
||||||
|
DeviceStateRotationLockSettingsManager.resetInstance();
|
||||||
|
DeviceStateRotationLockSettingsManager.getInstance(mContext)
|
||||||
|
.resetStateForTesting(mResources);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
|
||||||
|
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(shadows = {ShadowRotationPolicy.class, ShadowDeviceStateRotationLockSettingsManager.class})
|
||||||
|
public class DeviceStateAutoRotateOverviewControllerTest {
|
||||||
|
|
||||||
|
private final DeviceStateAutoRotateOverviewController mController =
|
||||||
|
new DeviceStateAutoRotateOverviewController(
|
||||||
|
RuntimeEnvironment.application, "device_state_auto_rotate");
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_rotationAndDeviceStateRotationEnabled_returnsAvailable() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(AVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_rotationNotSupported_returnsUnsupportedOnDevice() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(false);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_deviceStateRotationNotSupported_returnsUnsupportedOnDevice() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,175 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.display;
|
||||||
|
|
||||||
|
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
|
||||||
|
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settingslib.search.SearchIndexableRaw;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(shadows = {
|
||||||
|
ShadowRotationPolicy.class,
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class
|
||||||
|
})
|
||||||
|
public class DeviceStateAutoRotateSettingControllerTest {
|
||||||
|
|
||||||
|
private static final int DEFAULT_DEVICE_STATE = 1;
|
||||||
|
private static final String DEFAULT_DEVICE_STATE_DESCRIPTION = "Device state description";
|
||||||
|
private static final int DEFAULT_ORDER = -10;
|
||||||
|
|
||||||
|
private final Context mContext = RuntimeEnvironment.application;
|
||||||
|
private final DeviceStateAutoRotateSettingController mController =
|
||||||
|
new DeviceStateAutoRotateSettingController(mContext, DEFAULT_DEVICE_STATE,
|
||||||
|
DEFAULT_DEVICE_STATE_DESCRIPTION, DEFAULT_ORDER);
|
||||||
|
private final DeviceStateRotationLockSettingsManager mAutoRotateSettingsManager =
|
||||||
|
DeviceStateRotationLockSettingsManager.getInstance(mContext);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void displayPreference_addsPreferenceToPreferenceScreen() {
|
||||||
|
PreferenceScreen screen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
|
||||||
|
|
||||||
|
mController.displayPreference(screen);
|
||||||
|
|
||||||
|
assertThat(screen.getPreferenceCount()).isEqualTo(1);
|
||||||
|
Preference preference = screen.getPreference(0);
|
||||||
|
assertThat(preference.getTitle().toString()).isEqualTo(DEFAULT_DEVICE_STATE_DESCRIPTION);
|
||||||
|
assertThat(preference.getOrder()).isEqualTo(DEFAULT_ORDER);
|
||||||
|
assertThat(preference.getKey()).isEqualTo(mController.getPreferenceKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_rotationAndDeviceStateRotationEnabled_returnsAvailable() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(AVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_deviceStateRotationDisabled_returnsUnsupported() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_rotationDisabled_returnsUnsupported() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(false);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
int availability = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availability).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPreferenceKey_returnsKeyBasedOnDeviceState() {
|
||||||
|
String key = mController.getPreferenceKey();
|
||||||
|
|
||||||
|
String expectedKey = "auto_rotate_device_state_" + DEFAULT_DEVICE_STATE;
|
||||||
|
assertThat(key).isEqualTo(expectedKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isChecked_settingForStateIsUnlocked_returnsTrue() {
|
||||||
|
mAutoRotateSettingsManager.updateSetting(DEFAULT_DEVICE_STATE, /* rotationLocked= */ false);
|
||||||
|
|
||||||
|
assertThat(mController.isChecked()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isChecked_settingForStateIsLocked_returnsFalse() {
|
||||||
|
mAutoRotateSettingsManager.updateSetting(DEFAULT_DEVICE_STATE, /* rotationLocked= */ true);
|
||||||
|
|
||||||
|
assertThat(mController.isChecked()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setChecked_true_deviceStateSettingIsUnlocked() {
|
||||||
|
mController.setChecked(true);
|
||||||
|
|
||||||
|
boolean rotationLocked = mAutoRotateSettingsManager.isRotationLocked(DEFAULT_DEVICE_STATE);
|
||||||
|
|
||||||
|
assertThat(rotationLocked).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void setChecked_false_deviceStateSettingIsLocked() {
|
||||||
|
mController.setChecked(false);
|
||||||
|
|
||||||
|
boolean rotationLocked = mAutoRotateSettingsManager.isRotationLocked(DEFAULT_DEVICE_STATE);
|
||||||
|
|
||||||
|
assertThat(rotationLocked).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateRawDataToIndex_addsItemToList() {
|
||||||
|
List<SearchIndexableRaw> rawData = new ArrayList<>();
|
||||||
|
|
||||||
|
mController.updateRawDataToIndex(rawData);
|
||||||
|
|
||||||
|
assertThat(rawData).hasSize(1);
|
||||||
|
SearchIndexableRaw item = rawData.get(0);
|
||||||
|
assertThat(item.key).isEqualTo(mController.getPreferenceKey());
|
||||||
|
assertThat(item.title).isEqualTo(DEFAULT_DEVICE_STATE_DESCRIPTION);
|
||||||
|
assertThat(item.screenTitle).isEqualTo(mContext.getString(R.string.accelerometer_title));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getSliceHighlightMenuRes_returnsMenuKeyDisplay() {
|
||||||
|
int sliceHighlightMenuRes = mController.getSliceHighlightMenuRes();
|
||||||
|
|
||||||
|
assertThat(sliceHighlightMenuRes).isEqualTo(R.string.menu_key_display);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isSliceable_returnsTrue() {
|
||||||
|
assertThat(mController.isSliceable()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isPublicSlice_returnsTrue() {
|
||||||
|
assertThat(mController.isPublicSlice()).isTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,7 +39,10 @@ import android.provider.Settings;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.testutils.ResolveInfoBuilder;
|
import com.android.settings.testutils.ResolveInfoBuilder;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
||||||
import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager;
|
import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -63,6 +66,8 @@ public class SmartAutoRotateControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private ContentResolver mContentResolver;
|
private ContentResolver mContentResolver;
|
||||||
|
private final DeviceStateRotationLockSettingsManager mDeviceStateAutoRotateSettingsManager =
|
||||||
|
DeviceStateRotationLockSettingsManager.getInstance(RuntimeEnvironment.application);
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -122,6 +127,34 @@ public class SmartAutoRotateControllerTest {
|
|||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(shadows = {
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class,
|
||||||
|
ShadowRotationPolicy.class
|
||||||
|
})
|
||||||
|
public void getAvailabilityStatus_deviceStateRotationLocked_returnDisableDependentSetting() {
|
||||||
|
enableDeviceStateRotation();
|
||||||
|
lockDeviceStateRotation();
|
||||||
|
|
||||||
|
int availabilityStatus = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availabilityStatus).isEqualTo(DISABLED_DEPENDENT_SETTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(shadows = {
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class,
|
||||||
|
ShadowRotationPolicy.class
|
||||||
|
})
|
||||||
|
public void getAvailabilityStatus_deviceStateRotationUnlocked_returnAvailable() {
|
||||||
|
enableDeviceStateRotation();
|
||||||
|
unlockDeviceStateRotation();
|
||||||
|
|
||||||
|
int availabilityStatus = mController.getAvailabilityStatus();
|
||||||
|
|
||||||
|
assertThat(availabilityStatus).isEqualTo(AVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
private void enableAutoRotation() {
|
private void enableAutoRotation() {
|
||||||
Settings.System.putIntForUser(mContentResolver,
|
Settings.System.putIntForUser(mContentResolver,
|
||||||
Settings.System.ACCELEROMETER_ROTATION, 1, UserHandle.USER_CURRENT);
|
Settings.System.ACCELEROMETER_ROTATION, 1, UserHandle.USER_CURRENT);
|
||||||
@@ -131,4 +164,23 @@ public class SmartAutoRotateControllerTest {
|
|||||||
Settings.System.putIntForUser(mContentResolver,
|
Settings.System.putIntForUser(mContentResolver,
|
||||||
Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT);
|
Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableDeviceStateRotation() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lockDeviceStateRotation() {
|
||||||
|
mDeviceStateAutoRotateSettingsManager.updateSetting(
|
||||||
|
/* deviceState= */0, /* rotationLocked= */ true);
|
||||||
|
mDeviceStateAutoRotateSettingsManager.updateSetting(
|
||||||
|
/* deviceState= */1, /* rotationLocked= */ true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unlockDeviceStateRotation() {
|
||||||
|
mDeviceStateAutoRotateSettingsManager.updateSetting(
|
||||||
|
/* deviceState= */0, /* rotationLocked= */ false);
|
||||||
|
mDeviceStateAutoRotateSettingsManager.updateSetting(
|
||||||
|
/* deviceState= */1, /* rotationLocked= */ true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.ResolveInfoBuilder;
|
import com.android.settings.testutils.ResolveInfoBuilder;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager;
|
import com.android.settings.testutils.shadow.ShadowSensorPrivacyManager;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -53,7 +54,10 @@ import org.robolectric.RuntimeEnvironment;
|
|||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = ShadowSensorPrivacyManager.class)
|
@Config(shadows = {
|
||||||
|
ShadowSensorPrivacyManager.class,
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class
|
||||||
|
})
|
||||||
public class SmartAutoRotatePreferenceControllerTest {
|
public class SmartAutoRotatePreferenceControllerTest {
|
||||||
|
|
||||||
private static final String PACKAGE_NAME = "package_name";
|
private static final String PACKAGE_NAME = "package_name";
|
||||||
@@ -95,6 +99,7 @@ public class SmartAutoRotatePreferenceControllerTest {
|
|||||||
new SmartAutoRotatePreferenceController(mContext, "smart_auto_rotate"));
|
new SmartAutoRotatePreferenceController(mContext, "smart_auto_rotate"));
|
||||||
when(mController.isCameraLocked()).thenReturn(false);
|
when(mController.isCameraLocked()).thenReturn(false);
|
||||||
when(mController.isPowerSaveMode()).thenReturn(false);
|
when(mController.isPowerSaveMode()).thenReturn(false);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -199,6 +204,16 @@ public class SmartAutoRotatePreferenceControllerTest {
|
|||||||
.UNSUPPORTED_ON_DEVICE);
|
.UNSUPPORTED_ON_DEVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_deviceStateRotationEnabled_returnsUnsupported() {
|
||||||
|
enableAutoRotationPreference();
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||||
|
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isSliceableCorrectKey_returnsTrue() {
|
public void isSliceableCorrectKey_returnsTrue() {
|
||||||
final AutoRotatePreferenceController controller =
|
final AutoRotatePreferenceController controller =
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ package com.android.settings.display;
|
|||||||
|
|
||||||
import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_SWITCH_PREFERENCE_ID;
|
import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_SWITCH_PREFERENCE_ID;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
@@ -33,6 +35,7 @@ import android.content.Context;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.pm.ServiceInfo;
|
import android.content.pm.ServiceInfo;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -40,7 +43,11 @@ import androidx.preference.Preference;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.testutils.ResolveInfoBuilder;
|
import com.android.settings.testutils.ResolveInfoBuilder;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowRotationPolicy;
|
||||||
import com.android.settings.widget.SettingsMainSwitchBar;
|
import com.android.settings.widget.SettingsMainSwitchBar;
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -49,8 +56,15 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(shadows = {
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.class,
|
||||||
|
ShadowRotationPolicy.class
|
||||||
|
})
|
||||||
public class SmartAutoRotatePreferenceFragmentTest {
|
public class SmartAutoRotatePreferenceFragmentTest {
|
||||||
|
|
||||||
private static final String PACKAGE_NAME = "package_name";
|
private static final String PACKAGE_NAME = "package_name";
|
||||||
@@ -70,19 +84,24 @@ public class SmartAutoRotatePreferenceFragmentTest {
|
|||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private Preference mRotateSwitchPreference;
|
private Preference mRotateSwitchPreference;
|
||||||
|
private Resources mResources;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
final Context context = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
ContentResolver mContentResolver = RuntimeEnvironment.application.getContentResolver();
|
ContentResolver mContentResolver = RuntimeEnvironment.application.getContentResolver();
|
||||||
when(context.getPackageManager()).thenReturn(mPackageManager);
|
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||||
when(context.getContentResolver()).thenReturn(mContentResolver);
|
when(mContext.getContentResolver()).thenReturn(mContentResolver);
|
||||||
doReturn(PACKAGE_NAME).when(mPackageManager).getRotationResolverPackageName();
|
doReturn(PACKAGE_NAME).when(mPackageManager).getRotationResolverPackageName();
|
||||||
doReturn(PackageManager.PERMISSION_GRANTED).when(mPackageManager).checkPermission(
|
doReturn(PackageManager.PERMISSION_GRANTED).when(mPackageManager).checkPermission(
|
||||||
Manifest.permission.CAMERA, PACKAGE_NAME);
|
Manifest.permission.CAMERA, PACKAGE_NAME);
|
||||||
|
|
||||||
|
mResources = spy(mContext.getResources());
|
||||||
|
when(mContext.getResources()).thenReturn(mResources);
|
||||||
|
|
||||||
final ResolveInfo resolveInfo = new ResolveInfoBuilder(PACKAGE_NAME).build();
|
final ResolveInfo resolveInfo = new ResolveInfoBuilder(PACKAGE_NAME).build();
|
||||||
resolveInfo.serviceInfo = new ServiceInfo();
|
resolveInfo.serviceInfo = new ServiceInfo();
|
||||||
when(mPackageManager.resolveService(any(), anyInt())).thenReturn(resolveInfo);
|
when(mPackageManager.resolveService(any(), anyInt())).thenReturn(resolveInfo);
|
||||||
@@ -90,15 +109,16 @@ public class SmartAutoRotatePreferenceFragmentTest {
|
|||||||
mFragment = spy(new SmartAutoRotatePreferenceFragment());
|
mFragment = spy(new SmartAutoRotatePreferenceFragment());
|
||||||
when(mActivity.getPackageManager()).thenReturn(mPackageManager);
|
when(mActivity.getPackageManager()).thenReturn(mPackageManager);
|
||||||
when(mFragment.getActivity()).thenReturn(mActivity);
|
when(mFragment.getActivity()).thenReturn(mActivity);
|
||||||
when(mFragment.getContext()).thenReturn(context);
|
when(mFragment.getContext()).thenReturn(mContext);
|
||||||
doReturn(mView).when(mFragment).getView();
|
doReturn(mView).when(mFragment).getView();
|
||||||
|
|
||||||
when(mFragment.findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_ID)).thenReturn(
|
when(mFragment.findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_ID)).thenReturn(
|
||||||
mRotateSwitchPreference);
|
mRotateSwitchPreference);
|
||||||
|
|
||||||
mSwitchBar = spy(new SettingsMainSwitchBar(context));
|
mSwitchBar = spy(new SettingsMainSwitchBar(mContext));
|
||||||
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
|
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
|
||||||
doReturn(mSwitchBar).when(mView).findViewById(R.id.switch_bar);
|
doReturn(mSwitchBar).when(mView).findViewById(R.id.switch_bar);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -110,6 +130,17 @@ public class SmartAutoRotatePreferenceFragmentTest {
|
|||||||
verify(mRotateSwitchPreference, times(1)).setVisible(false);
|
verify(mRotateSwitchPreference, times(1)).setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createHeader_deviceStateRotationSupported_switchBarIsDisabled() {
|
||||||
|
ShadowRotationPolicy.setRotationSupported(true);
|
||||||
|
ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(true);
|
||||||
|
|
||||||
|
mFragment.createHeader(mActivity);
|
||||||
|
|
||||||
|
verify(mSwitchBar, never()).show();
|
||||||
|
verify(mRotateSwitchPreference, never()).setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createHeader_faceDetectionUnSupported_switchBarIsDisabled() {
|
public void createHeader_faceDetectionUnSupported_switchBarIsDisabled() {
|
||||||
doReturn(null).when(mPackageManager).getRotationResolverPackageName();
|
doReturn(null).when(mPackageManager).getRotationResolverPackageName();
|
||||||
@@ -120,4 +151,41 @@ public class SmartAutoRotatePreferenceFragmentTest {
|
|||||||
verify(mRotateSwitchPreference, never()).setVisible(false);
|
verify(mRotateSwitchPreference, never()).setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createPreferenceControllers_noSettableDeviceStates_returnsEmptyList() {
|
||||||
|
enableDeviceStateSettableRotationStates(new String[]{}, new String[]{});
|
||||||
|
|
||||||
|
List<AbstractPreferenceController> preferenceControllers =
|
||||||
|
mFragment.createPreferenceControllers(mContext);
|
||||||
|
|
||||||
|
assertThat(preferenceControllers).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createPreferenceControllers_settableDeviceStates_returnsDeviceStateControllers() {
|
||||||
|
enableDeviceStateSettableRotationStates(new String[]{"0:1", "1:1"},
|
||||||
|
new String[]{"Folded", "Unfolded"});
|
||||||
|
|
||||||
|
List<AbstractPreferenceController> preferenceControllers =
|
||||||
|
mFragment.createPreferenceControllers(mContext);
|
||||||
|
|
||||||
|
assertThat(preferenceControllers).hasSize(2);
|
||||||
|
assertThat(preferenceControllers.get(0)).isInstanceOf(
|
||||||
|
DeviceStateAutoRotateSettingController.class);
|
||||||
|
assertThat(preferenceControllers.get(1)).isInstanceOf(
|
||||||
|
DeviceStateAutoRotateSettingController.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableDeviceStateSettableRotationStates(String[] settableStates,
|
||||||
|
String[] settableStatesDescriptions) {
|
||||||
|
when(mResources.getStringArray(
|
||||||
|
com.android.internal.R.array.config_perDeviceStateRotationLockDefaults)).thenReturn(
|
||||||
|
settableStates);
|
||||||
|
when(mResources.getStringArray(
|
||||||
|
R.array.config_settableAutoRotationDeviceStatesDescriptions)).thenReturn(
|
||||||
|
settableStatesDescriptions);
|
||||||
|
DeviceStateRotationLockSettingsManager.resetInstance();
|
||||||
|
DeviceStateRotationLockSettingsManager.getInstance(mContext)
|
||||||
|
.resetStateForTesting(mResources);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.testutils.shadow;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
|
||||||
|
|
||||||
|
import org.robolectric.annotation.Implementation;
|
||||||
|
import org.robolectric.annotation.Implements;
|
||||||
|
|
||||||
|
@Implements(DeviceStateRotationLockSettingsManager.class)
|
||||||
|
public class ShadowDeviceStateRotationLockSettingsManager {
|
||||||
|
|
||||||
|
private static boolean sDeviceStateRotationLockEnabled;
|
||||||
|
|
||||||
|
@Implementation
|
||||||
|
public static boolean isDeviceStateRotationLockEnabled(Context context) {
|
||||||
|
return sDeviceStateRotationLockEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setDeviceStateRotationLockEnabled(boolean enabled) {
|
||||||
|
sDeviceStateRotationLockEnabled = enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -79,6 +79,16 @@ public class SafetySourceBroadcastReceiverTest {
|
|||||||
verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
|
verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void sendSafetyData_whenSafetyCenterIsEnabled_withNullSourceIds_sendsNoData() {
|
||||||
|
when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
|
||||||
|
Intent intent = new Intent();
|
||||||
|
|
||||||
|
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
|
||||||
|
|
||||||
|
verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void sendSafetyData_whenSafetyCenterIsEnabled_withNoSourceIds_sendsNoData() {
|
public void sendSafetyData_whenSafetyCenterIsEnabled_withNoSourceIds_sendsNoData() {
|
||||||
when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
|
when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user