diff options
author | 2024-10-01 05:39:21 +0000 | |
---|---|---|
committer | 2024-10-01 05:39:21 +0000 | |
commit | c56e627261c83cbc228730816d30e867f72454e9 (patch) | |
tree | c001f44837edc33b914d05a5832b7f0580806fcf | |
parent | 1409fe366ed2f8356c3ef07c0788ee24079a7651 (diff) | |
parent | fb61df7a52acf1a33d3d5e3a4f56740d594a7a75 (diff) |
Merge "[BC25] Add overlay styles for two preferences" into main
18 files changed, 575 insertions, 42 deletions
diff --git a/PermissionController/res/layout-v35/app_permission_footer_link_preference.xml b/PermissionController/res/layout-v35/app_permission_footer_link_preference.xml new file mode 100644 index 000000000..75381e762 --- /dev/null +++ b/PermissionController/res/layout-v35/app_permission_footer_link_preference.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2024 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. + --> + +<!-- + ~ A copy of PermissionPreference, with custom styles for some elements + --> +<com.android.permissioncontroller.permission.ui.handheld.v35.DrawableStateLinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + style="@style/AppPermissionFooterLinkPreferenceRootLayoutStyle"> + + <RelativeLayout + style="@style/AppPermissionFooterLinkPreferenceTextLayoutStyle"> + + <TextView + android:id="@android:id/summary" + style="@style/AppPermissionFooterLinkPreferenceSummaryStyle"/> + + </RelativeLayout> + +</com.android.permissioncontroller.permission.ui.handheld.v35.DrawableStateLinearLayout> diff --git a/PermissionController/res/layout-v35/permission_preference_selector_with_widget.xml b/PermissionController/res/layout-v35/permission_preference_selector_with_widget.xml new file mode 100644 index 000000000..230e51fc3 --- /dev/null +++ b/PermissionController/res/layout-v35/permission_preference_selector_with_widget.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 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. + --> + +<!-- A direct copy of the following layout, but with overlayable styles: + ~ SettingsLib/SelectorWithWidgetPreference/res/layout-v33/preference_selector_with_widget.xml + --> +<com.android.permissioncontroller.permission.ui.handheld.v35.DrawableStateLinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + style="@style/PermissionSelectorWithWidgetPreferenceRootLayoutStyle"> + + <LinearLayout + android:id="@android:id/widget_frame" + style="@style/PermissionSelectorWithWidgetPreferenceWidgetFrameStyle" /> + + <LinearLayout + android:id="@+id/icon_frame" + style="@style/PermissionSelectorWithWidgetPreferenceIconFrameStyle"> + + <androidx.preference.internal.PreferenceImageView + android:id="@android:id/icon" + style="@style/PermissionSelectorWithWidgetPreferenceIconStyle" /> + </LinearLayout> + + <LinearLayout style="@style/PermissionSelectorWithWidgetPreferenceTextContainerStyle"> + + <TextView + android:id="@android:id/title" + style="@style/PermissionSelectorWithWidgetPreferenceTitleStyle" /> + + <LinearLayout + android:id="@+id/summary_container" + style="@style/PermissionSelectorWithWidgetPreferenceSummaryContainerStyle"> + + <TextView + android:id="@android:id/summary" + style="@style/PermissionSelectorWithWidgetPreferenceSummaryStyle" /> + + <TextView + android:id="@+id/appendix" + style="@style/PermissionSelectorWithWidgetPreferenceAppendixStyle" /> + </LinearLayout> + </LinearLayout> + + <LinearLayout + android:id="@+id/selector_extra_widget_container" + style="@style/PermissionSelectorWithWidgetPreferenceExtraWidgetContainerStyle"> + + <View style="@style/PermissionSelectorWithWidgetPreferenceExtraWidgetDividerStyle" /> + + <ImageView + android:id="@+id/selector_extra_widget" + android:contentDescription="@string/settings_label" + style="@style/PermissionSelectorWithWidgetPreferenceExtraWidgetImageStyle" /> + </LinearLayout> +</com.android.permissioncontroller.permission.ui.handheld.v35.DrawableStateLinearLayout> diff --git a/PermissionController/res/layout-v35/permission_preference_two_target.xml b/PermissionController/res/layout-v35/permission_preference_two_target.xml new file mode 100644 index 000000000..906393b3c --- /dev/null +++ b/PermissionController/res/layout-v35/permission_preference_two_target.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 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. + --> + +<!-- A direct copy of the following layout, but with overlayable styles: + ~ SettingsLib/TwoTargetPreference/res/layout-v33/preference_two_target.xml + --> + +<!-- Based off preference_material_settings.xml except that ripple on only on the left side. --> +<com.android.permissioncontroller.permission.ui.handheld.v35.DrawableStateLinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + style="@style/PermissionTwoTargetPreferenceRootLayoutStyle"> + + <LinearLayout + android:id="@+id/icon_frame" + style="@style/PermissionTwoTargetPreferenceIconFrameStyle"> + + <androidx.preference.internal.PreferenceImageView + android:id="@android:id/icon" + style="@style/PermissionTwoTargetPreferenceIconStyle"/> + + </LinearLayout> + + <RelativeLayout style="@style/PermissionTwoTargetPreferenceTextContainerStyle"> + + <TextView + android:id="@android:id/title" + style="@style/PermissionTwoTargetPreferenceTitleStyle"/> + + <TextView + android:id="@android:id/summary" + style="@style/PermissionTwoTargetPreferenceSummaryStyle"/> + + </RelativeLayout> + + <LinearLayout + android:id="@+id/two_target_divider" + style="@style/PermissionTwoTargetPreferenceDividerContainerStyle"> + <View style="@style/PermissionTwoTargetPreferenceDividerStyle" /> + </LinearLayout> + + <!-- Preference should place its actual preference widget here. --> + <LinearLayout + android:id="@android:id/widget_frame" + style="@style/PermissionTwoTargetPreferenceWidgetFrameStyle" /> + +</com.android.permissioncontroller.permission.ui.handheld.v35.DrawableStateLinearLayout> diff --git a/PermissionController/res/layout-v35/permission_preference_widget_radiobutton.xml b/PermissionController/res/layout-v35/permission_preference_widget_radiobutton.xml new file mode 100644 index 000000000..10e311110 --- /dev/null +++ b/PermissionController/res/layout-v35/permission_preference_widget_radiobutton.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 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. + --> + +<!-- A direct copy of the following layout, but with overlayable styles: + ~ SettingsLib/SelectorWithWidgetPreference/res/layout/preference_widget_radiobutton.xml + --> +<RadioButton + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@android:id/checkbox" + style="@style/PermissionSelectorWithWidgetPreferenceWidgetRadioButton" /> diff --git a/PermissionController/res/values-v35/styles.xml b/PermissionController/res/values-v35/styles.xml index 612125fb1..513754bb8 100644 --- a/PermissionController/res/values-v35/styles.xml +++ b/PermissionController/res/values-v35/styles.xml @@ -197,5 +197,221 @@ <item name="android:visibility">gone</item> </style> + <style name="PermissionSelectorWithWidgetPreferenceRootLayoutStyle"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:background">?android:attr/selectableItemBackground</item> + <item name="android:gravity">center_vertical</item> + <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item> + <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingEnd</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceWidgetFrameStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">match_parent</item> + <item name="android:paddingHorizontal">20dp</item> + <item name="android:gravity">center</item> + <item name="android:minWidth">56dp</item> + <item name="android:orientation">vertical</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceIconFrameStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:gravity">center_vertical</item> + <item name="android:minWidth">32dp</item> + <item name="android:orientation">horizontal</item> + <item name="android:layout_marginEnd">16dp</item> + <item name="android:paddingTop">4dp</item> + <item name="android:paddingBottom">4dp</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceIconStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="maxWidth">@dimen/secondary_app_icon_size</item> + <item name="maxHeight">@dimen/secondary_app_icon_size</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceTextContainerStyle"> + <item name="android:layout_width">0dp</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_weight">1</item> + <item name="android:orientation">vertical</item> + <item name="android:paddingTop">16dp</item> + <item name="android:paddingBottom">16dp</item> + <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingEnd</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceTitleStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:maxLines">2</item> + <item name="android:ellipsize">end</item> + <item name="android:hyphenationFrequency">normalFast</item> + <item name="android:lineBreakWordStyle">phrase</item> + <item name="android:textAppearance">?android:attr/textAppearanceListItem</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceSummaryContainerStyle"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:visibility">gone</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceSummaryStyle"> + <item name="android:layout_width">0dp</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_weight">1</item> + <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> + <item name="android:textAlignment">viewStart</item> + <item name="android:hyphenationFrequency">normalFast</item> + <item name="android:lineBreakWordStyle">phrase</item> + <item name="android:textColor">?android:attr/textColorSecondary</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceAppendixStyle"> + <item name="android:layout_width">0dp</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_weight">1</item> + <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> + <item name="android:textAlignment">viewEnd</item> + <item name="android:textColor">?android:attr/textColorSecondary</item> + <item name="android:maxLines">1</item> + <item name="android:visibility">gone</item> + <item name="android:ellipsize">end</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceExtraWidgetContainerStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">match_parent</item> + <item name="android:orientation">horizontal</item> + <item name="android:gravity">center_vertical</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceExtraWidgetDividerStyle"> + <item name="android:layout_width">.75dp</item> + <item name="android:layout_height">32dp</item> + <item name="android:layout_marginTop">16dp</item> + <item name="android:layout_marginBottom">16dp</item> + <item name="android:background">?android:attr/dividerVertical</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceExtraWidgetImageStyle"> + <item name="android:layout_width">match_parent</item> + <item name="android:minWidth">@dimen/two_target_min_width</item> + <item name="android:layout_height">fill_parent</item> + <item name="android:src">@drawable/ic_settings_accent</item> + <item name="android:paddingStart">24dp</item> + <item name="android:paddingEnd">24dp</item> + <item name="android:layout_gravity">center</item> + <item name="android:background">?android:attr/selectableItemBackground</item> + </style> + + <style name="PermissionSelectorWithWidgetPreferenceWidgetRadioButton"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_gravity">center</item> + <item name="android:background">@null</item> + <item name="android:focusable">false</item> + <item name="android:clickable">false</item> + </style> + + <style name="PermissionTwoTargetPreferenceRootLayoutStyle"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item> + <item name="android:gravity">center_vertical</item> + <item name="android:background">?android:attr/selectableItemBackground</item> + <item name="android:paddingStart">?android:attr/listPreferredItemPaddingStart</item> + <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingEnd</item> + <item name="android:clipToPadding">false</item> + </style> + + <style name="PermissionTwoTargetPreferenceTextContainerStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_weight">1</item> + <item name="android:paddingTop">16dp</item> + <item name="android:paddingBottom">16dp</item> + </style> + + <style name="PermissionTwoTargetPreferenceTitleStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:maxLines">2</item> + <item name="android:hyphenationFrequency">normalFast</item> + <item name="android:lineBreakWordStyle">phrase</item> + <item name="android:textAppearance">?android:attr/textAppearanceListItem</item> + <item name="android:ellipsize">marquee</item> + </style> + + <style name="PermissionTwoTargetPreferenceSummaryStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_below">@android:id/title</item> + <item name="android:layout_alignStart">@android:id/title</item> + <item name="android:textAppearance">?android:attr/textAppearanceListItemSecondary</item> + <item name="android:textColor">?android:attr/textColorSecondary</item> + <item name="android:hyphenationFrequency">normalFast</item> + <item name="android:lineBreakWordStyle">phrase</item> + <item name="android:maxLines">10</item> + </style> + + <style name="PermissionTwoTargetPreferenceWidgetFrameStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">match_parent</item> + <item name="android:minWidth">@dimen/two_target_min_width</item> + <item name="android:gravity">center</item> + <item name="android:orientation">vertical</item> + </style> + + <style name="PermissionTwoTargetPreferenceIconFrameStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:minWidth">48dp</item> + <item name="android:gravity">start|center_vertical</item> + <item name="android:orientation">horizontal</item> + <item name="android:paddingLeft">0dp</item> + <item name="android:paddingStart">0dp</item> + <item name="android:paddingRight">8dp</item> + <item name="android:paddingEnd">8dp</item> + <item name="android:paddingTop">4dp</item> + <item name="android:paddingBottom">4dp</item> + </style> + + <style name="PermissionTwoTargetPreferenceIconStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="maxWidth">48dp</item> + <item name="maxHeight">48dp</item> + </style> + + <style name="PermissionTwoTargetPreferenceDividerContainerStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">match_parent</item> + <item name="android:gravity">start|center_vertical</item> + <item name="android:orientation">horizontal</item> + <item name="android:paddingStart">?android:attr/listPreferredItemPaddingEnd</item> + <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingEnd</item> + <item name="android:paddingTop">16dp</item> + <item name="android:paddingBottom">16dp</item> + </style> + + <style name="PermissionTwoTargetPreferenceDividerStyle"> + <item name="android:layout_width">1dp</item> + <item name="android:layout_height">32dp</item> + <item name="android:background">?android:attr/listDivider</item> + </style> + + <style name="AppPermissionFooterLinkPreferenceRootLayoutStyle" + parent="PermissionPreferenceRootLayoutStyle" /> + + <style name="AppPermissionFooterLinkPreferenceTextLayoutStyle" + parent="PermissionPreferenceTextRelativeLayoutStyle" /> + + <style name="AppPermissionFooterLinkPreferenceSummaryStyle" + parent="PermissionPreferenceSummaryTextStyle" /> + <!-- END PREFERENCE STYLES --> </resources>
\ No newline at end of file diff --git a/PermissionController/res/values/bools.xml b/PermissionController/res/values/bools.xml index b5f33b081..4cfed5e79 100644 --- a/PermissionController/res/values/bools.xml +++ b/PermissionController/res/values/bools.xml @@ -20,4 +20,5 @@ <bool name="is_at_least_t">false</bool> <bool name="is_at_least_u">false</bool> <bool name="is_at_least_v">false</bool> + <bool name="config_usePreferenceForAppPermissionSettings">false</bool> </resources> diff --git a/PermissionController/res/values/overlayable.xml b/PermissionController/res/values/overlayable.xml index 9075fa67c..31f3355e4 100644 --- a/PermissionController/res/values/overlayable.xml +++ b/PermissionController/res/values/overlayable.xml @@ -48,6 +48,35 @@ <item type="style" name="PermissionFooterPreferenceTitleTextStyle" /> <item type="style" name="PermissionFooterPreferenceLearnMoreTextStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceRootLayoutStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceWidgetFrameStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceIconFrameStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceIconStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceTextContainerStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceTitleStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceSummaryContainerStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceSummaryStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceAppendixStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceExtraWidgetContainerStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceExtraWidgetDividerStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceExtraWidgetImageStyle" /> + <item type="style" name="PermissionSelectorWithWidgetPreferenceWidgetRadioButton" /> + + <item type="style" name="PermissionTwoTargetPreferenceRootLayoutStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceTextContainerStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceTitleStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceSummaryStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceWidgetFrameStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceIconFrameStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceIconStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceDividerContainerStyle" /> + <item type="style" name="PermissionTwoTargetPreferenceDividerStyle" /> + + <item type="style" name="AppPermissionFooterLinkPreferenceRootLayoutStyle" /> + <item type="style" name="AppPermissionFooterLinkPreferenceTextLayoutStyle" /> + <item type="style" name="AppPermissionFooterLinkPreferenceSummaryStyle" /> + + <item type="bool" name="config_usePreferenceForAppPermissionSettings" /> <item type="bool" name="config_permissionFooterPreferenceIconVisible" /> <item type="dimen" name="permission_preference_app_icon_size" /> <item type="dimen" name="permission_preference_permission_group_icon_size" /> diff --git a/PermissionController/res/xml/app_permission.xml b/PermissionController/res/xml-v35/app_permission.xml index 5e6857185..87315815d 100644 --- a/PermissionController/res/xml/app_permission.xml +++ b/PermissionController/res/xml-v35/app_permission.xml @@ -19,46 +19,46 @@ android:key="app_permission_button_category" android:title="@string/app_permission_header"> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_allow_radio_button" android:title="@string/app_permission_button_allow" app:checkboxId="@+id/allow_radio_button" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_allow_always_radio_button" android:title="@string/app_permission_button_allow_always" app:checkboxId="@+id/allow_always_radio_button" app:isPreferenceVisible="false" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_allow_foreground_only_radio_button" android:title="@string/app_permission_button_allow_foreground" app:checkboxId="@+id/allow_foreground_only_radio_button" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_select_photos_radio_button" android:title="@string/app_permission_button_allow_limited_access" app:checkboxId="@+id/select_radio_button" app:extraWidgetIcon="@drawable/ic_edit" app:extraWidgetId="@+id/edit_selected_button" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_ask_one_time_radio_button" android:title="@string/app_permission_button_ask" app:checkboxId="@+id/ask_one_time_radio_button" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_ask_radio_button" android:text="@string/app_permission_button_ask" android:title="@string/app_permission_button_ask" app:checkboxId="@+id/ask_radio_button" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_deny_radio_button" android:title="@string/app_permission_button_deny" app:checkboxId="@+id/deny_radio_button" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionSelectorWithWidgetPreference android:key="app_permission_deny_foreground_radio_button" android:title="@string/app_permission_button_deny" app:checkboxId="@+id/deny_foreground_radio_button" /> @@ -71,7 +71,7 @@ android:title="@string/app_permission_location_accuracy" app:isPreferenceVisible="false" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionTwoTargetPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.PermissionTwoTargetPreference android:key="app_permission_details" android:selectable="false" android:summary="@string/permission_summary_enabled_system_fixed" @@ -79,26 +79,24 @@ app:iconSpaceReserved="true" app:isPreferenceVisible="false" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.AppPermissionFooterLinkPreference android:key="app_permission_footer_link_1" android:summary="@string/app_permission_footer_app_permissions_link" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionPreference + <com.android.permissioncontroller.permission.ui.handheld.v36.AppPermissionFooterLinkPreference android:key="app_permission_footer_link_2" android:summary="@string/app_permission_footer_permission_apps_link" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionPreference + <com.android.permissioncontroller.permission.ui.handheld.PermissionFooterPreference android:key="app_permission_footer_storage_special_app_access" android:icon="@drawable/ic_info_outline" - android:selectable="false" - android:summary="@string/app_permission_footer_special_file_access" + android:title="@string/app_permission_footer_special_file_access" app:isPreferenceVisible="false" /> - <com.android.permissioncontroller.permission.ui.handheld.PermissionPreference + <com.android.permissioncontroller.permission.ui.handheld.PermissionFooterPreference android:key="app_permission_additional_info" android:icon="@drawable/ic_info_outline" - android:selectable="false" - android:summary="@string/exempt_info_label" + android:title="@string/exempt_info_label" app:isPreferenceVisible="false" /> </PreferenceScreen> diff --git a/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java b/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java index 188e3a9d0..de7404ead 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/compat/AppPermissionFragmentCompat.java @@ -19,6 +19,7 @@ package com.android.permissioncontroller.permission.compat; import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID; import static com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_CALLER_NAME; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; @@ -29,6 +30,7 @@ import androidx.preference.PreferenceFragmentCompat; import com.android.modules.utils.build.SdkLevel; import com.android.permission.flags.Flags; +import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.ui.handheld.max35.LegacyAppPermissionFragment; import com.android.permissioncontroller.permission.ui.handheld.v36.AppPermissionFragment; @@ -41,8 +43,10 @@ public class AppPermissionFragmentCompat { * Create an instance of this fragment */ @NonNull - public static PreferenceFragmentCompat createFragment() { - if (SdkLevel.isAtLeastV() && Flags.appPermissionFragmentUsesPreferences()) { + public static PreferenceFragmentCompat createFragment(@NonNull Context context) { + if (SdkLevel.isAtLeastV() && (Flags.appPermissionFragmentUsesPreferences() + || context.getResources().getBoolean( + R.bool.config_usePreferenceForAppPermissionSettings))) { return new AppPermissionFragment(); } else { return new LegacyAppPermissionFragment(); diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionWrapperFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionWrapperFragment.java index 8650d99fc..080c7cfdc 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionWrapperFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionWrapperFragment.java @@ -29,7 +29,7 @@ public class AppPermissionWrapperFragment extends PermissionsCollapsingToolbarBa @NonNull @Override public PreferenceFragmentCompat createPreferenceFragment() { - return AppPermissionFragmentCompat.createFragment(); + return AppPermissionFragmentCompat.createFragment(getContext()); } @Override diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionFooterPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionFooterPreference.kt index 1cd4ed23a..e7749d827 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionFooterPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionFooterPreference.kt @@ -17,16 +17,21 @@ package com.android.permissioncontroller.permission.ui.handheld import android.content.Context +import android.util.AttributeSet import android.view.View import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.R import com.android.settingslib.widget.FooterPreference -class PermissionFooterPreference(c: Context) : FooterPreference(c) { +class PermissionFooterPreference : FooterPreference { + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + init { if (SdkLevel.isAtLeastV()) { layoutResource = R.layout.permission_footer_preference - if (c.resources.getBoolean(R.bool.config_permissionFooterPreferenceIconVisible)) { + if (context.resources.getBoolean(R.bool.config_permissionFooterPreferenceIconVisible)) { setIconVisibility(View.VISIBLE) } else { setIconVisibility(View.GONE) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.kt index 5e30183ec..010ca28a7 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.kt @@ -18,15 +18,30 @@ package com.android.permissioncontroller.permission.ui.handheld import android.content.Context import android.util.AttributeSet +import androidx.annotation.AttrRes +import androidx.annotation.StyleRes import androidx.preference.Preference import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.DeviceUtils import com.android.permissioncontroller.R open class PermissionPreference : Preference { - constructor(c: Context) : super(c) + constructor(context: Context) : super(context) - constructor(c: Context, a: AttributeSet) : super(c, a) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + + constructor( + context: Context, + attrs: AttributeSet?, + @AttrRes defStyleAttr: Int, + ) : super(context, attrs, defStyleAttr) + + constructor( + context: Context, + attrs: AttributeSet?, + @AttrRes defStyleAttr: Int, + @StyleRes defStyleRes: Int, + ) : super(context, attrs, defStyleAttr, defStyleRes) init { if (SdkLevel.isAtLeastV() && DeviceUtils.isHandheld(context)) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreferenceCategory.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreferenceCategory.kt index ef1752530..ef95c6c5c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreferenceCategory.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreferenceCategory.kt @@ -18,15 +18,30 @@ package com.android.permissioncontroller.permission.ui.handheld import android.content.Context import android.util.AttributeSet +import androidx.annotation.AttrRes +import androidx.annotation.StyleRes import androidx.preference.PreferenceCategory import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.DeviceUtils import com.android.permissioncontroller.R open class PermissionPreferenceCategory : PreferenceCategory { - constructor(c: Context) : super(c) + constructor(context: Context) : super(context) - constructor(c: Context, a: AttributeSet) : super(c, a) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + + constructor( + context: Context, + attrs: AttributeSet?, + @AttrRes defStyleAttr: Int, + ) : super(context, attrs, defStyleAttr) + + constructor( + context: Context, + attrs: AttributeSet?, + @AttrRes defStyleAttr: Int, + @StyleRes defStyleRes: Int, + ) : super(context, attrs, defStyleAttr, defStyleRes) init { if (SdkLevel.isAtLeastV() && DeviceUtils.isHandheld(context)) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v35/SectionPreferenceGroupAdapter.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v35/SectionPreferenceGroupAdapter.kt index 72e066777..e5dce40b0 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v35/SectionPreferenceGroupAdapter.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v35/SectionPreferenceGroupAdapter.kt @@ -25,6 +25,7 @@ import androidx.preference.PreferenceGroup import androidx.preference.PreferenceGroupAdapter import androidx.preference.PreferenceViewHolder import com.android.permissioncontroller.R +import com.android.permissioncontroller.permission.ui.handheld.v36.AppPermissionFooterLinkPreference import com.android.settingslib.widget.FooterPreference /** @@ -106,7 +107,10 @@ class SectionPreferenceGroupAdapter(preferenceGroup: PreferenceGroup) : } private val Preference.isSectionDivider: Boolean - get() = this is PreferenceCategory || this is FooterPreference + get() = + this is PreferenceCategory || + this is FooterPreference || + this is AppPermissionFooterLinkPreference override fun onBindViewHolder(holder: PreferenceViewHolder, position: Int) { super.onBindViewHolder(holder, position) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFooterLinkPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFooterLinkPreference.kt new file mode 100644 index 000000000..f5f511253 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFooterLinkPreference.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 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.permissioncontroller.permission.ui.handheld.v36 + +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import androidx.annotation.AttrRes +import androidx.annotation.RequiresApi +import androidx.annotation.StyleRes +import com.android.permissioncontroller.R +import com.android.permissioncontroller.permission.ui.handheld.PermissionPreference + +@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) +class AppPermissionFooterLinkPreference : PermissionPreference { + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + + constructor( + context: Context, + attrs: AttributeSet?, + @AttrRes defStyleAttr: Int, + ) : super(context, attrs, defStyleAttr) + + constructor( + context: Context, + attrs: AttributeSet?, + @AttrRes defStyleAttr: Int, + @StyleRes defStyleRes: Int, + ) : super(context, attrs, defStyleAttr, defStyleRes) + + init { + layoutResource = R.layout.app_permission_footer_link_preference + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java index 481dc0dac..4fde26c9d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/AppPermissionFragment.java @@ -79,11 +79,10 @@ import com.android.permissioncontroller.permission.ui.GrantPermissionsViewHandle import com.android.permissioncontroller.permission.ui.handheld.AllAppPermissionsFragment; import com.android.permissioncontroller.permission.ui.handheld.AppPermissionGroupsFragment; import com.android.permissioncontroller.permission.ui.handheld.PermissionAppsFragment; +import com.android.permissioncontroller.permission.ui.handheld.PermissionFooterPreference; import com.android.permissioncontroller.permission.ui.handheld.PermissionPreference; import com.android.permissioncontroller.permission.ui.handheld.PermissionPreferenceCategory; -import com.android.permissioncontroller.permission.ui.handheld.PermissionSelectorWithWidgetPreference; import com.android.permissioncontroller.permission.ui.handheld.PermissionSwitchPreference; -import com.android.permissioncontroller.permission.ui.handheld.PermissionTwoTargetPreference; import com.android.permissioncontroller.permission.ui.handheld.SettingsWithLargeHeader; import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel; import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonState; @@ -133,10 +132,10 @@ public class AppPermissionFragment extends SettingsWithLargeHeader private @NonNull SelectorWithWidgetPreference mDenyForegroundButton; private @NonNull PermissionSwitchPreference mLocationAccuracySwitch; private @NonNull PermissionTwoTargetPreference mDetails; - private @NonNull PermissionPreference mFooterLink1; - private @NonNull PermissionPreference mFooterLink2; - private @NonNull PermissionPreference mFooterStorageSpecialAppAccess; - private @NonNull PermissionPreference mAdditionalInfo; + private @NonNull AppPermissionFooterLinkPreference mFooterLink1; + private @NonNull AppPermissionFooterLinkPreference mFooterLink2; + private @NonNull PermissionFooterPreference mFooterStorageSpecialAppAccess; + private @NonNull PermissionFooterPreference mAdditionalInfo; private @NonNull String mPackageName; private @NonNull String mPermGroupName; @@ -268,7 +267,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader if (exemptedPackages.contains(mPackageName)) { int additional_info_label = Utils.isStatusBarIndicatorPermission(mPermGroupName) ? R.string.exempt_mic_camera_info_label : R.string.exempt_info_label; - mAdditionalInfo.setSummary(context.getString(additional_info_label, mPackageLabel)); + mAdditionalInfo.setTitle(context.getString(additional_info_label, mPackageLabel)); mAdditionalInfo.setVisible(true); } else { mAdditionalInfo.setVisible(false); diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionSelectorWithWidgetPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/PermissionSelectorWithWidgetPreference.kt index 9d095c7dc..1574eaba3 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionSelectorWithWidgetPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/PermissionSelectorWithWidgetPreference.kt @@ -14,14 +14,16 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.handheld +package com.android.permissioncontroller.permission.ui.handheld.v36 import android.content.Context +import android.os.Build import android.util.AttributeSet import android.widget.ImageView import androidx.annotation.AttrRes import androidx.annotation.DrawableRes import androidx.annotation.IdRes +import androidx.annotation.RequiresApi import androidx.preference.PreferenceViewHolder import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.utils.ResourceUtils @@ -34,6 +36,7 @@ import com.android.settingslib.widget.SelectorWithWidgetPreference * - Propagates the supplied `app:checkboxId` id to the checkbox (or radio button, on the left) * - Allows defining a "disabled click listener" handler that handles clicks when disabled */ +@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) class PermissionSelectorWithWidgetPreference : SelectorWithWidgetPreference { constructor(context: Context) : super(context) { init(context, null) @@ -46,7 +49,7 @@ class PermissionSelectorWithWidgetPreference : SelectorWithWidgetPreference { constructor( context: Context, attrs: AttributeSet?, - @AttrRes defStyleAttr: Int + @AttrRes defStyleAttr: Int, ) : super(context, attrs, defStyleAttr) { init(context, attrs) } @@ -56,6 +59,8 @@ class PermissionSelectorWithWidgetPreference : SelectorWithWidgetPreference { } private fun init(context: Context, attrs: AttributeSet?) { + layoutResource = R.layout.permission_preference_selector_with_widget + widgetLayoutResource = R.layout.permission_preference_widget_radiobutton extraWidgetIconRes = ResourceUtils.getResourceIdByAttr(context, attrs, R.attr.extraWidgetIcon) extraWidgetIdRes = ResourceUtils.getResourceIdByAttr(context, attrs, R.attr.extraWidgetId) @@ -69,9 +74,10 @@ class PermissionSelectorWithWidgetPreference : SelectorWithWidgetPreference { override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val extraWidget = holder.findViewById( - com.android.settingslib.widget.preference.selector.R.id.selector_extra_widget - ) as? ImageView + val extraWidget = + holder.findViewById( + com.android.settingslib.widget.preference.selector.R.id.selector_extra_widget + ) as? ImageView val checkbox = holder.findViewById(android.R.id.checkbox) if (extraWidgetIconRes != 0) { extraWidget?.setImageResource(extraWidgetIconRes) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionTwoTargetPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/PermissionTwoTargetPreference.kt index 13c9ee7c4..cf6585f4d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionTwoTargetPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v36/PermissionTwoTargetPreference.kt @@ -14,13 +14,15 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.handheld +package com.android.permissioncontroller.permission.ui.handheld.v36 import android.content.Context +import android.os.Build import android.util.AttributeSet import android.widget.ImageView import androidx.annotation.AttrRes import androidx.annotation.DrawableRes +import androidx.annotation.RequiresApi import androidx.annotation.StyleRes import androidx.preference.PreferenceViewHolder import com.android.permissioncontroller.R @@ -32,6 +34,7 @@ import com.android.settingslib.widget.TwoTargetPreference * - Propagates the supplied `app:extraWidgetIcon` drawable to the second target * - Allows defining a click listener on the second target (the icon on the right) */ +@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) class PermissionTwoTargetPreference : TwoTargetPreference { constructor(context: Context) : super(context) { init(context, null) @@ -44,7 +47,7 @@ class PermissionTwoTargetPreference : TwoTargetPreference { constructor( context: Context, attrs: AttributeSet?, - @AttrRes defStyleAttr: Int + @AttrRes defStyleAttr: Int, ) : super(context, attrs, defStyleAttr) { init(context, attrs) } @@ -53,12 +56,13 @@ class PermissionTwoTargetPreference : TwoTargetPreference { context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int, - @StyleRes defStyleRes: Int + @StyleRes defStyleRes: Int, ) : super(context, attrs, defStyleAttr, defStyleRes) { init(context, attrs) } private fun init(context: Context, attrs: AttributeSet?) { + layoutResource = R.layout.permission_preference_two_target extraWidgetIconRes = ResourceUtils.getResourceIdByAttr(context, attrs, R.attr.extraWidgetIcon) } |