diff options
32 files changed, 244 insertions, 214 deletions
diff --git a/PermissionController/res/values-am/strings.xml b/PermissionController/res/values-am/strings.xml index 616e84740..0250bdf2d 100644 --- a/PermissionController/res/values-am/strings.xml +++ b/PermissionController/res/values-am/strings.xml @@ -412,7 +412,7 @@ <string name="ongoing_usage_dialog_separator" msgid="1715181526581520068">"፣ "</string> <string name="ongoing_usage_dialog_last_separator" msgid="4170995004748832163">" እና "</string> <string name="default_app_search_keyword" msgid="8330125736889689743">"ነባሪ መተግበሪያዎች"</string> - <string name="permgroup_list_microphone_and_camera" msgid="962768198001487969">"ድምጽ ማጉያ እና ካሜራ"</string> + <string name="permgroup_list_microphone_and_camera" msgid="962768198001487969">"ድምፅ ማጉያ እና ካሜራ"</string> <string name="settings_button" msgid="4414988414732479636">"ቅንብሮች"</string> <string name="default_apps" msgid="5119201969348748639">"ነባሪ መተግበሪያዎች"</string> <string name="no_default_apps" msgid="2593466527182950231">"ምንም ነባሪ መተግበሪያዎች የሉም"</string> diff --git a/PermissionController/res/values-as-television/strings.xml b/PermissionController/res/values-as-television/strings.xml index 3a8197d38..2c92996a9 100644 --- a/PermissionController/res/values-as-television/strings.xml +++ b/PermissionController/res/values-as-television/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="grant_dialog_button_deny_dont_ask_again" msgid="747769682501286250">"অস্বীকাৰ কৰক আৰু পুনৰাই নুসুধিব"</string> - <string name="grant_dialog_how_to_change" msgid="997462845048160559">"আপুনি ইয়াক পিছত ছেটিং > এপসমূহলৈ গৈ সলনি কৰিব পাৰিব"</string> + <string name="grant_dialog_how_to_change" msgid="997462845048160559">"আপুনি ইয়াক পাছত ছেটিং > এপসমূহলৈ গৈ সলনি কৰিব পাৰিব"</string> <string name="current_permission_template" msgid="6240787325714651204">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="preference_show_system_apps" msgid="4262140518693221093">"ছিষ্টেম এপসমূহ দেখুৱাওক"</string> <string name="app_permissions_decor_title" msgid="7438716722786036814">"এপৰ অনুমতি"</string> diff --git a/PermissionController/res/values-as/strings.xml b/PermissionController/res/values-as/strings.xml index 50ac8c758..6bb5e8007 100644 --- a/PermissionController/res/values-as/strings.xml +++ b/PermissionController/res/values-as/strings.xml @@ -72,7 +72,7 @@ <string name="additional_permissions" msgid="5801285469338873430">"অতিৰিক্ত অনুমতি"</string> <string name="app_permissions_info_button_label" msgid="7633312050729974623">"এপৰ তথ্য খোলক"</string> <string name="additional_permissions_more" msgid="5681220714755304407">"{count,plural, =1{আৰু # টা}one{আৰু # টা}other{আৰু # টা}}"</string> - <string name="old_sdk_deny_warning" msgid="2382236998845153919">"এই এপটো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে প্ৰস্তুত কৰা হৈছিল। অনুমতি নিদিলে ই বিচৰা ধৰণে কাম নকৰিবও পাৰে।"</string> + <string name="old_sdk_deny_warning" msgid="2382236998845153919">"এই এপ্টো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে প্ৰস্তুত কৰা হৈছিল। অনুমতি নিদিলে ই বিচৰা ধৰণে কাম নকৰিবও পাৰে।"</string> <string name="storage_supergroup_warning_allow" msgid="103093462784523190">"এই এপ্টো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে ডিজাইন কৰা হৈছিল। যদি আপুনি এই অনুমতিটো দিয়ে, তেন্তে আটাইবোৰ ষ্ট’ৰেজলৈ (ফট’, ভিডিঅ’, সংগীত, অডিঅ’ আৰু অন্য ফাইলসমূহকে ধৰি) এক্সেছৰ অনুমতি দিয়া হ’ব।"</string> <string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"এই এপ্টো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে ডিজাইন কৰা হৈছিল। যদি আপুনি এই অনুমতিটো অস্বীকাৰ কৰে, তেন্তে আটাইবোৰ ষ্ট’ৰেজলৈ (ফট’, ভিডিঅ’, সংগীত, অডিঅ’ আৰু অন্য ফাইলসমূহকে ধৰি) এক্সেছ অস্বীকাৰ কৰা হ’ব।"</string> <string name="default_permission_description" msgid="4624464917726285203">"অজ্ঞাত কাৰ্য কৰিব পাৰে"</string> @@ -110,7 +110,7 @@ <string name="other_permissions" msgid="2901186127193849594">"অন্য এপৰ কার্যক্ষমতা"</string> <string name="permission_request_title" msgid="8790310151025020126">"অনুমতি বিচাৰি কৰা অনুৰোধ"</string> <string name="screen_overlay_title" msgid="6977038513913222078">"স্ক্ৰীন অভাৰলে\' চিনাক্ত কৰা হৈছে"</string> - <string name="screen_overlay_message" msgid="5622563069757142102">"এই অনুমতিৰ ছেটিং সলনি কৰিবলৈ আপুনি প্ৰথমে ছেটিংসমূহ > এপসমূহলৈ গৈ স্ক্ৰীণ অভাৰলে\' অফ কৰিব লাগিব"</string> + <string name="screen_overlay_message" msgid="5622563069757142102">"এই অনুমতিৰ ছেটিং সলনি কৰিবলৈ আপুনি প্ৰথমে ছেটিংসমূহ > এপসমূহলৈ গৈ স্ক্ৰীন অভাৰলে\' অফ কৰিব লাগিব"</string> <string name="screen_overlay_button" msgid="4655005928054025250">"ছেটিং খোলক"</string> <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> <string name="wear_not_allowed_dlg_text" msgid="512340555334769098">"ইনষ্টল/আনইনষ্টল কাৰ্য Wearত কৰিব নোৱাৰি।"</string> @@ -308,7 +308,7 @@ <string name="unused_app_permissions_removed_summary_some" msgid="5080490037831563441">"আপোনাৰ ডেটা সুৰক্ষিত কৰিবলৈ আপুনি কেইমাহমান ব্যৱহাৰ নকৰা কিছুমান এপৰ পৰা অনুমতিসমূহ আঁতৰোৱা হৈছে"</string> <string name="one_unused_app_summary" msgid="7831913934488881991">"১ টা এপ্ কেইমাহমান ব্যৱহাৰ কৰা হোৱা নাই"</string> <string name="num_unused_apps_summary" msgid="1870719749940571227">"<xliff:g id="NUMBER_OF_APPS">%s</xliff:g> টা এপ্ কেইমাহমান ব্যৱহাৰ কৰা হোৱা নাই"</string> - <string name="permission_subtitle_only_in_foreground" msgid="9068389431267377564">"কেৱল এপটো ব্যৱহাৰ হৈ থকা সময়ত"</string> + <string name="permission_subtitle_only_in_foreground" msgid="9068389431267377564">"কেৱল এপ্টো ব্যৱহাৰ হৈ থকা সময়ত"</string> <string name="permission_subtitle_media_only" msgid="8917869683764720717">"মিডিয়া"</string> <string name="permission_subtitle_all_files" msgid="4982613338298067862">"আটাইবোৰ ফাইল"</string> <string name="permission_subtitle_background" msgid="8916750995309083180">"সকলো সময়ৰ বাবে অনুমতি দিয়া হৈছে"</string> @@ -372,7 +372,7 @@ <string name="role_emergency_search_keywords" msgid="1920007722599213358">"বৰফ"</string> <string name="role_home_label" msgid="3871847846649769412">"ডিফ’ল্ট হ’ম এপ্"</string> <string name="role_home_short_label" msgid="8544733747952272337">"হ’ম এপ্"</string> - <string name="role_home_description" msgid="7997371519626556675">"যিবোৰ এপক সাধাৰণতে লঞ্চাৰ বুলি কোৱা হয় সেই এপ্বোৰে আপোনাৰ Android ডিভাইচত গৃহ স্ক্ৰীণৰ ঠাই লয় আৰু আপোনাক নিজৰ ডিভাইচৰ সমল আৰু সুবিধাবোৰৰ এক্সেছ দিয়ে"</string> + <string name="role_home_description" msgid="7997371519626556675">"যিবোৰ এপক সাধাৰণতে লঞ্চাৰ বুলি কোৱা হয় সেই এপ্বোৰে আপোনাৰ Android ডিভাইচত গৃহ স্ক্ৰীনৰ ঠাই লয় আৰু আপোনাক নিজৰ ডিভাইচৰ সমল আৰু সুবিধাবোৰৰ এক্সেছ দিয়ে"</string> <string name="role_home_request_title" msgid="738136983453341081">"<xliff:g id="APP_NAME">%1$s</xliff:g>ক আপোনাৰ ডিফ’ল্ট হ’ম এপ্ হিচাপে ছেট কৰিবনে?"</string> <string name="role_home_request_description" msgid="2658833966716057673">"কোনো অনুমতিৰ প্ৰয়োজন নাই"</string> <string name="role_home_search_keywords" msgid="3830755001192666285">"লঞ্চাৰ"</string> diff --git a/PermissionController/res/values-gu-television/strings.xml b/PermissionController/res/values-gu-television/strings.xml index a382722a7..5fde391de 100644 --- a/PermissionController/res/values-gu-television/strings.xml +++ b/PermissionController/res/values-gu-television/strings.xml @@ -20,8 +20,8 @@ <string name="grant_dialog_how_to_change" msgid="997462845048160559">"તમે થોડા સમય પછી આને સેટિંગ > ઍપમાં બદલી શકો છો"</string> <string name="current_permission_template" msgid="6240787325714651204">"<xliff:g id="CURRENT_PERMISSION_INDEX">%1$s</xliff:g> / <xliff:g id="PERMISSION_COUNT">%2$s</xliff:g>"</string> <string name="preference_show_system_apps" msgid="4262140518693221093">"સિસ્ટમ ઍપ બતાવો"</string> - <string name="app_permissions_decor_title" msgid="7438716722786036814">"ઍપ પરવાનગીઓ"</string> - <string name="manage_permissions_decor_title" msgid="4138423885439613577">"ઍપ પરવાનગીઓ"</string> + <string name="app_permissions_decor_title" msgid="7438716722786036814">"ઍપની પરવાનગીઓ"</string> + <string name="manage_permissions_decor_title" msgid="4138423885439613577">"ઍપની પરવાનગીઓ"</string> <string name="permission_apps_decor_title" msgid="2811550489429789828">"<xliff:g id="PERMISSION">%1$s</xliff:g> પરવાનગીઓ"</string> <string name="additional_permissions_decor_title" msgid="5113847982502484225">"વધારાની પરવાનગીઓ"</string> <string name="system_apps_decor_title" msgid="4402004958937474803">"<xliff:g id="PERMISSION">%1$s</xliff:g> પરવાનગીઓ"</string> diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml index c5f471151..9e9f42906 100644 --- a/PermissionController/res/values-gu/strings.xml +++ b/PermissionController/res/values-gu/strings.xml @@ -53,7 +53,7 @@ <string name="grant_dialog_button_allow_all_files" msgid="4955436994954829894">"બધી ફાઇલો મેનેજ કરવાની મંજૂરી આપો"</string> <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"મીડિયા ફાઇલો ઍક્સેસ કરવાની મંજૂરી આપો"</string> <string name="app_permissions_breadcrumb" msgid="5136969550489411650">"ઍપ"</string> - <string name="app_permissions" msgid="3369917736607944781">"ઍપ પરવાનગીઓ"</string> + <string name="app_permissions" msgid="3369917736607944781">"ઍપની પરવાનગીઓ"</string> <string name="unused_apps" msgid="2058057455175955094">"ન વપરાયેલી ઍપ"</string> <string name="no_unused_apps" msgid="12809387670415295">"કોઈ બિનવપરાયેલી ઍપ નથી"</string> <string name="zero_unused_apps" msgid="9024448554157499748">"બિનવપરાયેલી 0 ઍપ"</string> diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java index 6dd429b7a..bc147efd0 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java @@ -57,9 +57,9 @@ import com.android.modules.utils.build.SdkLevel; import com.android.permissioncontroller.DeviceUtils; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.ui.auto.GrantPermissionsAutoViewHandler; -import com.android.permissioncontroller.permission.ui.model.v31.GrantPermissionsViewModel; -import com.android.permissioncontroller.permission.ui.model.v31.GrantPermissionsViewModel.RequestInfo; -import com.android.permissioncontroller.permission.ui.model.v31.GrantPermissionsViewModelFactory; +import com.android.permissioncontroller.permission.ui.model.GrantPermissionsViewModel; +import com.android.permissioncontroller.permission.ui.model.GrantPermissionsViewModel.RequestInfo; +import com.android.permissioncontroller.permission.ui.model.GrantPermissionsViewModelFactory; import com.android.permissioncontroller.permission.ui.wear.GrantPermissionsWearViewHandler; import com.android.permissioncontroller.permission.utils.KotlinUtils; import com.android.permissioncontroller.permission.utils.Utils; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/ReviewOngoingUsageActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/ReviewOngoingUsageActivity.java index 6dfceb90d..05a75f594 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/ReviewOngoingUsageActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/ReviewOngoingUsageActivity.java @@ -25,8 +25,8 @@ import android.view.MenuItem; import androidx.annotation.NonNull; import com.android.permissioncontroller.DeviceUtils; -import com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt; import com.android.permissioncontroller.permission.ui.handheld.v31.ReviewOngoingUsageWrapperFragment; +import com.android.permissioncontroller.permission.utils.KotlinUtils; /** * A dialog listing the currently uses of camera, microphone, and location. @@ -40,8 +40,8 @@ public final class ReviewOngoingUsageActivity extends SettingsActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (!DashboardUtilsKt.shouldShowCameraMicIndicators() - && !DashboardUtilsKt.shouldShowLocationIndicators()) { + if (!KotlinUtils.INSTANCE.shouldShowCameraMicIndicators() + && !KotlinUtils.INSTANCE.shouldShowLocationIndicators()) { finishAfterTransition(); return; } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionsFragment.java index 0973d1dfe..cf58f1e17 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/auto/AutoAppPermissionsFragment.java @@ -23,7 +23,6 @@ import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_ import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__ALLOWED_FOREGROUND; import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__DENIED; import static com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_CALLER_NAME; -import static com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt.is7DayToggleEnabled; import static java.util.concurrent.TimeUnit.DAYS; @@ -146,7 +145,7 @@ public class AutoAppPermissionsFragment extends AutoSettingsFrameFragment implem if (SdkLevel.isAtLeastS()) { mPermissionUsages = new PermissionUsages(getContext()); - long aggregateDataFilterBeginDays = is7DayToggleEnabled() + long aggregateDataFilterBeginDays = KotlinUtils.INSTANCE.is7DayToggleEnabled() ? AppPermissionGroupsViewModel.AGGREGATE_DATA_FILTER_BEGIN_DAYS_7 : AppPermissionGroupsViewModel.AGGREGATE_DATA_FILTER_BEGIN_DAYS_1; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java index 9bb49bed6..568d7f225 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionGroupsFragment.java @@ -24,7 +24,6 @@ import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_ import static com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSIONS_FRAGMENT_VIEWED__CATEGORY__DENIED; import static com.android.permissioncontroller.hibernation.HibernationPolicyKt.isHibernationEnabled; import static com.android.permissioncontroller.permission.ui.handheld.UtilsKt.pressBack; -import static com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt.is7DayToggleEnabled; import static java.util.concurrent.TimeUnit.DAYS; @@ -183,7 +182,7 @@ public final class AppPermissionGroupsFragment extends SettingsWithLargeHeader i Context context = getPreferenceManager().getContext(); mPermissionUsages = new PermissionUsages(context); - long aggregateDataFilterBeginDays = is7DayToggleEnabled() + long aggregateDataFilterBeginDays = KotlinUtils.INSTANCE.is7DayToggleEnabled() ? AppPermissionGroupsViewModel.AGGREGATE_DATA_FILTER_BEGIN_DAYS_7 : AppPermissionGroupsViewModel.AGGREGATE_DATA_FILTER_BEGIN_DAYS_1; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java index 6245c9229..8e3192eee 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ManageStandardPermissionsFragment.java @@ -20,7 +20,6 @@ import static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory; import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID; import static com.android.permissioncontroller.Constants.INVALID_SESSION_ID; import static com.android.permissioncontroller.permission.ui.handheld.UtilsKt.pressBack; -import static com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt.shouldShowPermissionsDashboard; import android.app.Application; import android.content.Intent; @@ -39,6 +38,7 @@ import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity; import com.android.permissioncontroller.permission.ui.UnusedAppsFragment; import com.android.permissioncontroller.permission.ui.model.ManageStandardPermissionsViewModel; +import com.android.permissioncontroller.permission.utils.KotlinUtils; import com.android.permissioncontroller.permission.utils.StringUtils; import com.android.permissioncontroller.permission.utils.Utils; import com.android.settingslib.widget.FooterPreference; @@ -123,7 +123,7 @@ public final class ManageStandardPermissionsFragment extends ManagePermissionsFr public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (shouldShowPermissionsDashboard()) { + if (KotlinUtils.INSTANCE.shouldShowPermissionsDashboard()) { menu.add(Menu.NONE, MENU_PERMISSION_USAGE, Menu.NONE, R.string.permission_usage_title); } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java index 1d92a6e74..90d7204cf 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionAppsFragment.java @@ -22,7 +22,6 @@ import static com.android.permissioncontroller.permission.ui.Category.ALLOWED_FO import static com.android.permissioncontroller.permission.ui.Category.ASK; import static com.android.permissioncontroller.permission.ui.Category.DENIED; import static com.android.permissioncontroller.permission.ui.handheld.UtilsKt.pressBack; -import static com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt.shouldShowPermissionsDashboard; import android.Manifest; import android.app.ActionBar; @@ -197,7 +196,7 @@ public final class PermissionAppsFragment extends SettingsWithLargeHeader implem updateMenu(mViewModel.getShouldShowSystemLiveData().getValue()); } - if (shouldShowPermissionsDashboard()) { + if (KotlinUtils.INSTANCE.shouldShowPermissionsDashboard()) { menu.add(Menu.NONE, MENU_PERMISSION_USAGE, Menu.NONE, R.string.permission_usage_title); } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.java index 9569baeeb..658a82af5 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/PermissionPreference.java @@ -36,10 +36,10 @@ import androidx.preference.PreferenceFragmentCompat; import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.PermissionSummary; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.PermissionTarget; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.SummaryMessage; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.PermissionSummary; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.PermissionTarget; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.SummaryMessage; import com.android.permissioncontroller.permission.utils.LocationUtils; import com.android.permissioncontroller.permission.utils.Utils; import com.android.settingslib.RestrictedLockUtils; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ReviewPermissionsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ReviewPermissionsFragment.java index a6f74c822..5e5c221ae 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ReviewPermissionsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/ReviewPermissionsFragment.java @@ -57,9 +57,9 @@ import com.android.permissioncontroller.R; import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup; import com.android.permissioncontroller.permission.model.livedatatypes.LightPermission; import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionViewModelFactory; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel; -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.PermissionTarget; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionViewModelFactory; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel; +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.PermissionTarget; import com.android.permissioncontroller.permission.utils.KotlinUtils; import com.android.permissioncontroller.permission.utils.Utils; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/DashboardUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/DashboardUtils.kt index 19b19f620..5b92dd36d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/DashboardUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/DashboardUtils.kt @@ -19,7 +19,6 @@ package com.android.permissioncontroller.permission.ui.handheld.v31 import android.content.Context import android.icu.util.Calendar import android.os.Build -import android.provider.DeviceConfig import android.text.format.DateFormat.getMediumDateFormat import android.text.format.DateFormat.getTimeFormat import android.util.Pair @@ -30,58 +29,12 @@ import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage. import com.android.permissioncontroller.permission.utils.StringUtils import java.util.Locale -/** Whether to show the Permissions Hub. */ -private const val PROPERTY_PERMISSIONS_HUB_2_ENABLED = "permissions_hub_2_enabled" - -/** Whether to show the mic and camera icons. */ -const val PROPERTY_CAMERA_MIC_ICONS_ENABLED = "camera_mic_icons_enabled" - -/** Whether to show the location indicators. */ -const val PROPERTY_LOCATION_INDICATORS_ENABLED = "location_indicators_enabled" - -/* Whether location accuracy feature is enabled */ -const val PROPERTY_LOCATION_ACCURACY_ENABLED = "location_accuracy_enabled" - -/** Whether to show 7-day toggle in privacy hub. */ -private const val PRIVACY_DASHBOARD_7_DAY_TOGGLE = "privacy_dashboard_7_day_toggle" - -/* Default location precision */ -const val PROPERTY_LOCATION_PRECISION = "location_precision" - const val SECONDS = 1 const val MINUTES = 2 const val HOURS = 3 const val DAYS = 4 /** - * Whether the Permissions Hub 2 flag is enabled - * - * @return whether the flag is enabled - */ -fun isPermissionsHub2FlagEnabled(): Boolean { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_PERMISSIONS_HUB_2_ENABLED, false) -} -/** - * Whether to show the Permissions Dashboard - * - * @return whether to show the Permissions Dashboard. - */ -fun shouldShowPermissionsDashboard(): Boolean { - return isPermissionsHub2FlagEnabled() -} - -/** - * Whether we should enable the 7-day toggle in privacy dashboard - * - * @return whether the flag is enabled - */ -fun is7DayToggleEnabled(): Boolean { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PRIVACY_DASHBOARD_7_DAY_TOGGLE, false) -} - -/** * Whether to show the subattribution in the Permissions Dashboard * * @return whether to show subattribution in the Permissions Dashboard. @@ -91,62 +44,6 @@ fun shouldShowSubattributionInPermissionsDashboard(): Boolean { } /** - * Whether the Camera and Mic Icons are enabled by flag. - * - * @return whether the Camera and Mic Icons are enabled. - */ -fun isCameraMicIconsFlagEnabled(): Boolean { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_CAMERA_MIC_ICONS_ENABLED, true) -} - -/** - * Whether to show Camera and Mic Icons. They should be shown if the permission hub, or the icons - * specifically, are enabled. - * - * @return whether to show the icons. - */ -fun shouldShowCameraMicIndicators(): Boolean { - return isCameraMicIconsFlagEnabled() || isPermissionsHub2FlagEnabled() -} - -/** - * Whether the location indicators are enabled by flag. - * - * @return whether the location indicators are enabled by flag. - */ -fun isLocationIndicatorsFlagEnabled(): Boolean { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_LOCATION_INDICATORS_ENABLED, false) -} - -/** - * Whether to show the location indicators. The location indicators are enable if the - * permission hub, or location indicator specifically are enabled. - */ -fun shouldShowLocationIndicators(): Boolean { - return isLocationIndicatorsFlagEnabled() || isPermissionsHub2FlagEnabled() -} - -/** - * Whether the location accuracy feature is enabled - */ -fun isLocationAccuracyEnabled(): Boolean { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_LOCATION_ACCURACY_ENABLED, true) -} - -/** - * Default state of location precision - * true: default is FINE. - * false: default is COARSE. - */ -fun getDefaultPrecision(): Boolean { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_LOCATION_PRECISION, true) -} - -/** * Build a string representing the given time if it happened on the current day and the date * otherwise. * diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionDetailsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionDetailsFragment.java index 07bcf68bd..5b24bc316 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionDetailsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionDetailsFragment.java @@ -18,7 +18,6 @@ package com.android.permissioncontroller.permission.ui.handheld.v31; import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID; import static com.android.permissioncontroller.Constants.INVALID_SESSION_ID; -import static com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt.is7DayToggleEnabled; import android.app.ActionBar; import android.app.Activity; @@ -130,7 +129,7 @@ public class PermissionDetailsFragment extends SettingsWithLargeHeader mShowSystem = getArguments().getBoolean(ManagePermissionsActivity.EXTRA_SHOW_SYSTEM, false); mShow7Days = - is7DayToggleEnabled() + KotlinUtils.INSTANCE.is7DayToggleEnabled() && getArguments() .getBoolean(ManagePermissionsActivity.EXTRA_SHOW_7_DAYS, false); mSessionId = getArguments().getLong(EXTRA_SESSION_ID, INVALID_SESSION_ID); @@ -258,7 +257,7 @@ public class PermissionDetailsFragment extends SettingsWithLargeHeader menu.add(Menu.NONE, MENU_SHOW_SYSTEM, Menu.NONE, R.string.menu_show_system); mHideSystemMenu = menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE, R.string.menu_hide_system); - if (is7DayToggleEnabled()) { + if (KotlinUtils.INSTANCE.is7DayToggleEnabled()) { mShow7DaysDataMenu = menu.add( Menu.NONE, @@ -316,7 +315,8 @@ public class PermissionDetailsFragment extends SettingsWithLargeHeader break; case MENU_SHOW_7_DAYS_DATA: case MENU_SHOW_24_HOURS_DATA: - mShow7Days = is7DayToggleEnabled() && itemId == MENU_SHOW_7_DAYS_DATA; + mShow7Days = KotlinUtils.INSTANCE.is7DayToggleEnabled() + && itemId == MENU_SHOW_7_DAYS_DATA; updateUI(); updateMenu(); break; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageV2Fragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageV2Fragment.java index cd285f918..a065c7a74 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageV2Fragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageV2Fragment.java @@ -22,7 +22,6 @@ import static com.android.permissioncontroller.PermissionControllerStatsLog.PERM import static com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_USAGE_FRAGMENT_INTERACTION__ACTION__SEE_OTHER_PERMISSIONS_CLICKED; import static com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_USAGE_FRAGMENT_INTERACTION__ACTION__SHOW_SYSTEM_CLICKED; import static com.android.permissioncontroller.PermissionControllerStatsLog.write; -import static com.android.permissioncontroller.permission.ui.handheld.v31.DashboardUtilsKt.is7DayToggleEnabled; import android.app.ActionBar; import android.app.Activity; @@ -219,7 +218,7 @@ public class PermissionUsageV2Fragment extends SettingsWithLargeHeader menu.add(Menu.NONE, MENU_HIDE_SYSTEM, Menu.NONE, R.string.menu_hide_system); } - if (is7DayToggleEnabled()) { + if (KotlinUtils.INSTANCE.is7DayToggleEnabled()) { mShow7DaysDataMenu = menu.add( Menu.NONE, @@ -264,7 +263,8 @@ public class PermissionUsageV2Fragment extends SettingsWithLargeHeader break; case MENU_SHOW_7_DAYS_DATA: case MENU_SHOW_24_HOURS_DATA: - mShow7Days = is7DayToggleEnabled() && itemId == MENU_SHOW_7_DAYS_DATA; + mShow7Days = KotlinUtils.INSTANCE.is7DayToggleEnabled() + && itemId == MENU_SHOW_7_DAYS_DATA; updateUI(); updateMenu(); break; diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt index bb060e831..5e3cd8684 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionGroupsViewModel.kt @@ -38,7 +38,6 @@ import com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISS import com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSION_GROUPS_FRAGMENT_AUTO_REVOKE_ACTION__ACTION__SWITCH_ENABLED import com.android.permissioncontroller.R import com.android.permissioncontroller.hibernation.isHibernationEnabled -import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.data.AppPermGroupUiInfoLiveData import com.android.permissioncontroller.permission.data.FullStoragePermissionAppsLiveData import com.android.permissioncontroller.permission.data.HibernationSettingStateLiveData @@ -47,19 +46,20 @@ import com.android.permissioncontroller.permission.data.PackagePermissionsLiveDa import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData.Companion.NON_RUNTIME_NORMAL_PERMS import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData import com.android.permissioncontroller.permission.data.get -import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo.PermGrantState +import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage import com.android.permissioncontroller.permission.ui.Category -import com.android.permissioncontroller.permission.ui.handheld.v31.is7DayToggleEnabled import com.android.permissioncontroller.permission.utils.IPC +import com.android.permissioncontroller.permission.utils.KotlinUtils +import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.Utils import com.android.permissioncontroller.permission.utils.Utils.AppPermsLastAccessType import com.android.permissioncontroller.permission.utils.navigateSafe -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch import java.time.Instant import java.util.concurrent.TimeUnit import kotlin.math.max +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch /** * ViewModel for the AppPermissionGroupsFragment. Has a liveData with the UI information for all @@ -281,7 +281,7 @@ class AppPermissionGroupsViewModel( return } - val aggregateDataFilterBeginDays = if (is7DayToggleEnabled()) + val aggregateDataFilterBeginDays = if (KotlinUtils.is7DayToggleEnabled()) AGGREGATE_DATA_FILTER_BEGIN_DAYS_7 else AGGREGATE_DATA_FILTER_BEGIN_DAYS_1 accessTime.clear() diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt index 7781216e2..99b97b52c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt @@ -19,7 +19,6 @@ package com.android.permissioncontroller.permission.ui.model import android.Manifest import android.Manifest.permission.ACCESS_COARSE_LOCATION import android.Manifest.permission.ACCESS_FINE_LOCATION -import android.Manifest.permission_group.LOCATION import android.annotation.SuppressLint import android.app.AppOpsManager import android.app.AppOpsManager.MODE_ALLOWED @@ -44,7 +43,6 @@ import com.android.permissioncontroller.PermissionControllerStatsLog import com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSION_FRAGMENT_ACTION_REPORTED import com.android.permissioncontroller.PermissionControllerStatsLog.APP_PERMISSION_FRAGMENT_VIEWED import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.data.FullStoragePermissionAppsLiveData import com.android.permissioncontroller.permission.data.FullStoragePermissionAppsLiveData.FullStoragePackageState import com.android.permissioncontroller.permission.data.LightAppPermGroupLiveData @@ -55,9 +53,6 @@ import com.android.permissioncontroller.permission.model.livedatatypes.LightPerm import com.android.permissioncontroller.permission.service.PermissionChangeStorageImpl import com.android.permissioncontroller.permission.service.v33.PermissionDecisionStorageImpl import com.android.permissioncontroller.permission.ui.AdvancedConfirmDialogArgs - -import com.android.permissioncontroller.permission.ui.handheld.v31.getDefaultPrecision -import com.android.permissioncontroller.permission.ui.handheld.v31.isLocationAccuracyEnabled import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.ALLOW import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.ALLOW_ALWAYS import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.ALLOW_FOREGROUND @@ -67,7 +62,10 @@ import com.android.permissioncontroller.permission.ui.model.AppPermissionViewMod import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.DENY_FOREGROUND import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.LOCATION_ACCURACY import com.android.permissioncontroller.permission.utils.KotlinUtils +import com.android.permissioncontroller.permission.utils.KotlinUtils.getDefaultPrecision +import com.android.permissioncontroller.permission.utils.KotlinUtils.isLocationAccuracyEnabled import com.android.permissioncontroller.permission.utils.LocationUtils +import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.SafetyNetLogger import com.android.permissioncontroller.permission.utils.Utils import com.android.permissioncontroller.permission.utils.navigateSafe @@ -200,8 +198,8 @@ class AppPermissionViewModel( /** * A livedata which computes the state of the radio buttons */ - val buttonStateLiveData = object - : SmartUpdateMediatorLiveData<@JvmSuppressWildcards Map<ButtonType, ButtonState>>() { + val buttonStateLiveData = object : + SmartUpdateMediatorLiveData<@JvmSuppressWildcards Map<ButtonType, ButtonState>>() { private val appPermGroupLiveData = LightAppPermGroupLiveData[packageName, permGroupName, user] @@ -376,9 +374,8 @@ class AppPermissionViewModel( } if (shouldShowLocationAccuracy == null) { - shouldShowLocationAccuracy = group.permGroupName == LOCATION && - group.permissions.containsKey(ACCESS_FINE_LOCATION) && - isLocationAccuracyEnabled() + shouldShowLocationAccuracy = isLocationAccuracyEnabled() && + group.permissions.containsKey(ACCESS_FINE_LOCATION) } val locationAccuracyState = ButtonState(isFineLocationChecked(group), true, false, null) @@ -669,11 +666,12 @@ class AppPermissionViewModel( } if (shouldGrantForeground) { - if (shouldShowLocationAccuracy == true && !isFineLocationChecked(newGroup)) { - newGroup = KotlinUtils.grantForegroundRuntimePermissions(app, newGroup, - filterPermissions = listOf(ACCESS_COARSE_LOCATION)) + newGroup = if (shouldShowLocationAccuracy == true && + !isFineLocationChecked(newGroup)) { + KotlinUtils.grantForegroundRuntimePermissions(app, newGroup, + filterPermissions = listOf(ACCESS_COARSE_LOCATION)) } else { - newGroup = KotlinUtils.grantForegroundRuntimePermissions(app, newGroup) + KotlinUtils.grantForegroundRuntimePermissions(app, newGroup) } if (!wasForegroundGranted) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index b7566e757..764ddcf38 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.model.v31 +package com.android.permissioncontroller.permission.ui.model import android.Manifest import android.Manifest.permission.ACCESS_COARSE_LOCATION @@ -59,7 +59,6 @@ import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_ import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_GRANTED_ONE_TIME import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_IGNORED import com.android.permissioncontroller.auto.DrivingDecisionReminderService -import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.data.LightAppPermGroupLiveData import com.android.permissioncontroller.permission.data.LightPackageInfoLiveData import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData @@ -99,10 +98,11 @@ import com.android.permissioncontroller.permission.ui.GrantPermissionsViewHandle import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_RESULT_PERMISSION_INTERACTED import com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_RESULT_PERMISSION_RESULT -import com.android.permissioncontroller.permission.ui.handheld.v31.getDefaultPrecision -import com.android.permissioncontroller.permission.ui.handheld.v31.isLocationAccuracyEnabled import com.android.permissioncontroller.permission.utils.AdminRestrictedPermissionsUtils import com.android.permissioncontroller.permission.utils.KotlinUtils +import com.android.permissioncontroller.permission.utils.KotlinUtils.getDefaultPrecision +import com.android.permissioncontroller.permission.utils.KotlinUtils.isLocationAccuracyEnabled +import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.SafetyNetLogger import com.android.permissioncontroller.permission.utils.Utils @@ -442,7 +442,7 @@ class GrantPermissionsViewModel( // Show location permission dialogs based on location permissions val locationVisibilities = MutableList(NEXT_LOCATION_DIALOG) { false } if (groupState.group.permGroupName == LOCATION && isLocationAccuracyEnabled() && - packageInfo.targetSdkVersion >= Build.VERSION_CODES.S) { + packageInfo.targetSdkVersion >= Build.VERSION_CODES.S) { if (needFgPermissions) { locationVisibilities[LOCATION_ACCURACY_LAYOUT] = true if (fgState != null && diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt index 9814a115f..cd1a936f7 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt @@ -38,25 +38,25 @@ import androidx.savedstate.SavedStateRegistryOwner import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.PermissionControllerStatsLog import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__ALLOWED -import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__UNDEFINED import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__ALLOWED_FOREGROUND import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__DENIED +import com.android.permissioncontroller.PermissionControllerStatsLog.PERMISSION_APPS_FRAGMENT_VIEWED__CATEGORY__UNDEFINED import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.data.AllPackageInfosLiveData import com.android.permissioncontroller.permission.data.FullStoragePermissionAppsLiveData import com.android.permissioncontroller.permission.data.FullStoragePermissionAppsLiveData.FullStoragePackageState import com.android.permissioncontroller.permission.data.SinglePermGroupPackagesUiInfoLiveData -import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo.PermGrantState +import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage import com.android.permissioncontroller.permission.ui.Category import com.android.permissioncontroller.permission.ui.LocationProviderInterceptDialog -import com.android.permissioncontroller.permission.ui.handheld.v31.is7DayToggleEnabled import com.android.permissioncontroller.permission.ui.model.PermissionAppsViewModel.Companion.CREATION_LOGGED_KEY import com.android.permissioncontroller.permission.ui.model.PermissionAppsViewModel.Companion.HAS_SYSTEM_APPS_KEY import com.android.permissioncontroller.permission.ui.model.PermissionAppsViewModel.Companion.SHOULD_SHOW_SYSTEM_KEY import com.android.permissioncontroller.permission.ui.model.PermissionAppsViewModel.Companion.SHOW_ALWAYS_ALLOWED import com.android.permissioncontroller.permission.utils.KotlinUtils.getPackageUid +import com.android.permissioncontroller.permission.utils.KotlinUtils.is7DayToggleEnabled import com.android.permissioncontroller.permission.utils.LocationUtils import com.android.permissioncontroller.permission.utils.Utils import com.android.permissioncontroller.permission.utils.navigateSafe @@ -169,8 +169,8 @@ class PermissionAppsViewModel( } } - inner class CategorizedAppsLiveData(groupName: String) - : MediatorLiveData<@kotlin.jvm.JvmSuppressWildcards + inner class CategorizedAppsLiveData(groupName: String) : + MediatorLiveData<@kotlin.jvm.JvmSuppressWildcards Map<Category, List<Pair<String, UserHandle>>>>() { private val packagesUiInfoLiveData = SinglePermGroupPackagesUiInfoLiveData[groupName] diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt index e65c5c1ff..309b9eba1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewOngoingUsageViewModel.kt @@ -47,15 +47,15 @@ import com.android.permissioncontroller.permission.data.PermGroupUsageLiveData import com.android.permissioncontroller.permission.data.SmartAsyncMediatorLiveData import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData import com.android.permissioncontroller.permission.data.micMutedLiveData -import com.android.permissioncontroller.permission.ui.handheld.v31.shouldShowLocationIndicators -import com.android.permissioncontroller.permission.ui.handheld.v31.shouldShowPermissionsDashboard import com.android.permissioncontroller.permission.ui.handheld.v31.ReviewOngoingUsageFragment.PHONE_CALL import com.android.permissioncontroller.permission.ui.handheld.v31.ReviewOngoingUsageFragment.VIDEO_CALL import com.android.permissioncontroller.permission.utils.KotlinUtils +import com.android.permissioncontroller.permission.utils.KotlinUtils.shouldShowLocationIndicators +import com.android.permissioncontroller.permission.utils.KotlinUtils.shouldShowPermissionsDashboard import com.android.permissioncontroller.permission.utils.Utils -import kotlinx.coroutines.Job import java.time.Instant import kotlin.math.max +import kotlinx.coroutines.Job private const val FIRST_OPENED_KEY = "FIRST_OPENED" private const val CALL_OP_USAGE_KEY = "CALL_OP_USAGE" diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewPermissionsViewModel.kt index 97c5d7596..4e1fc1861 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ReviewPermissionsViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.permissioncontroller.permission.ui.model.v33 +package com.android.permissioncontroller.permission.ui.model import android.app.Application import android.content.Context @@ -26,13 +26,13 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.NavController import androidx.navigation.fragment.NavHostFragment import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.data.LightAppPermGroupLiveData import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData import com.android.permissioncontroller.permission.data.PackagePermissionsLiveData.Companion.NON_RUNTIME_NORMAL_PERMS import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData import com.android.permissioncontroller.permission.data.get import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup +import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.Utils import com.android.permissioncontroller.permission.utils.navigateSafe import com.android.settingslib.RestrictedLockUtils @@ -326,4 +326,4 @@ class ReviewPermissionViewModelFactory( @Suppress("UNCHECKED_CAST") return ReviewPermissionsViewModel(app, packageInfo = packageInfo) as T } -}
\ No newline at end of file +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt index af8e689a5..1171cfb0f 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt @@ -38,8 +38,8 @@ import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage.TimelineUsage import com.android.permissioncontroller.permission.model.v31.PermissionUsages import com.android.permissioncontroller.permission.ui.handheld.v31.getDurationUsedStr -import com.android.permissioncontroller.permission.ui.handheld.v31.is7DayToggleEnabled import com.android.permissioncontroller.permission.ui.handheld.v31.shouldShowSubattributionInPermissionsDashboard +import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.permissioncontroller.permission.utils.KotlinUtils.getPackageLabel import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.StringUtils @@ -108,7 +108,7 @@ class PermissionUsageDetailsViewModel( show7Days: Boolean ): PermissionUsageDetailsUiData { val showPermissionUsagesDuration = - if (is7DayToggleEnabled() && show7Days) { + if (KotlinUtils.is7DayToggleEnabled() && show7Days) { TIME_7_DAYS_DURATION } else { TIME_24_HOURS_DURATION diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt index 1c27f2bbb..ef6a987f2 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageViewModel.kt @@ -24,13 +24,13 @@ import android.os.Build import androidx.annotation.RequiresApi import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.model.AppPermissionGroup import com.android.permissioncontroller.permission.model.legacy.PermissionApps.PermissionApp import com.android.permissioncontroller.permission.model.v31.AppPermissionUsage import com.android.permissioncontroller.permission.model.v31.PermissionUsages -import com.android.permissioncontroller.permission.ui.handheld.v31.is7DayToggleEnabled +import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel +import com.android.permissioncontroller.permission.utils.PermissionMapping import com.android.permissioncontroller.permission.utils.Utils import java.time.Instant import java.util.concurrent.TimeUnit @@ -48,7 +48,8 @@ class PermissionUsageViewModel(val roleManager: RoleManager) : ViewModel() { private val TIME_FILTER_MILLIS = TimeUnit.DAYS.toMillis(7) private val TIME_7_DAYS_DURATION = TimeUnit.DAYS.toMillis(7) private val TIME_24_HOURS_DURATION = TimeUnit.DAYS.toMillis(1) - + /** Permission groups that should be hidden from the permissions usage UI. */ + private val EXEMPTED_PERMISSION_GROUPS = setOf(Manifest.permission_group.NOTIFICATIONS) @JvmStatic /** Map to represent ordering for permission groups in the permissions usage UI. */ val PERMISSION_GROUP_ORDER: Map<String, Int> = @@ -92,7 +93,7 @@ class PermissionUsageViewModel(val roleManager: RoleManager) : ViewModel() { ): PermissionUsagesUiData { val curTime = System.currentTimeMillis() val showPermissionUsagesDuration = - if (is7DayToggleEnabled() && show7Days) { + if (KotlinUtils.is7DayToggleEnabled() && show7Days) { TIME_7_DAYS_DURATION } else { TIME_24_HOURS_DURATION @@ -122,11 +123,14 @@ class PermissionUsageViewModel(val roleManager: RoleManager) : ViewModel() { showSystem: Boolean ): Map<String, Int> { val permissionGroupsUsageCountMap: MutableMap<String, Int> = HashMap() - extractAllPlatformAppPermissionGroups().forEach { permissionGroupsUsageCountMap[it] = 0 } + extractPlatformAppPermissionGroupsToDisplay().forEach { + permissionGroupsUsageCountMap[it] = 0 + } for (appUsage in this) { appUsage.groupUsages .filter { showSystem || !it.group.isSystem() } + .filter { !EXEMPTED_PERMISSION_GROUPS.contains(it.group.name) } .filter { it.lastAccessTime >= startTime } .forEach { permissionGroupsUsageCountMap[it.group.name] = @@ -141,9 +145,11 @@ class PermissionUsageViewModel(val roleManager: RoleManager) : ViewModel() { startTime: Long, ): java.util.ArrayList<PermissionApp> { return ArrayList( - filter { - it.groupUsages.any { it.lastAccessTime >= startTime || it.lastAccessTime == 0L } - } + filter { appPermissionUsage -> + appPermissionUsage.groupUsages + .filter { !EXEMPTED_PERMISSION_GROUPS.contains(it.group.name) } + .any { it.lastAccessTime >= startTime || it.lastAccessTime == 0L } + } .map { it.app }) } @@ -155,6 +161,7 @@ class PermissionUsageViewModel(val roleManager: RoleManager) : ViewModel() { startTime: Long, ): Boolean { return flatMap { it.groupUsages } + .filter { !EXEMPTED_PERMISSION_GROUPS.contains(it.group.name) } .filter { it.lastAccessTime > startTime && it.lastAccessTime > 0L } .any { it.group.isSystem() } } @@ -180,11 +187,16 @@ class PermissionUsageViewModel(val roleManager: RoleManager) : ViewModel() { { PERMISSION_GROUP_ORDER.getOrDefault(it.permGroup, DEFAULT_ORDER) }, { getPermGroupLabel(context, it.permGroup).toString() })) - /** Extracts to a set all the permission groups declared by the platform. */ - private fun List<AppPermissionUsage>.extractAllPlatformAppPermissionGroups(): Set<String> = + /** + * Extracts to a set all the permission groups declared by the platform that should be displayed + * in the UI. + */ + private fun List<AppPermissionUsage>.extractPlatformAppPermissionGroupsToDisplay(): + Set<String> = this.flatMap { it.groupUsages } .map { it.group.name } .filter { PermissionMapping.isPlatformPermissionGroup(it) } + .filter { !EXEMPTED_PERMISSION_GROUPS.contains(it) } .toSet() /** diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt index 82ad2494b..3bc20744a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt @@ -75,16 +75,16 @@ import com.android.permissioncontroller.permission.model.livedatatypes.LightPerm import com.android.permissioncontroller.permission.model.livedatatypes.PermState import com.android.permissioncontroller.permission.service.LocationAccessCheck import com.android.permissioncontroller.permission.ui.handheld.SettingsWithLargeHeader -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.async -import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicReference import kotlin.coroutines.Continuation import kotlin.coroutines.CoroutineContext import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.async +import kotlinx.coroutines.launch /** * A set of util functions designed to work with kotlin, though they can work with java, as well. */ @@ -117,6 +117,116 @@ object KotlinUtils { private val ONE_TIME_PACKAGE_IMPORTANCE_LEVEL_TO_KEEP_SESSION_ALIVE = ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE + /** Whether to show the Permissions Hub. */ + private const val PROPERTY_PERMISSIONS_HUB_2_ENABLED = "permissions_hub_2_enabled" + + /** Whether to show the mic and camera icons. */ + private const val PROPERTY_CAMERA_MIC_ICONS_ENABLED = "camera_mic_icons_enabled" + + /** Whether to show the location indicators. */ + private const val PROPERTY_LOCATION_INDICATORS_ENABLED = "location_indicators_enabled" + + /** Whether location accuracy feature is enabled */ + private const val PROPERTY_LOCATION_ACCURACY_ENABLED = "location_accuracy_enabled" + + /** Whether to show 7-day toggle in privacy hub. */ + private const val PRIVACY_DASHBOARD_7_DAY_TOGGLE = "privacy_dashboard_7_day_toggle" + + /** Default location precision */ + private const val PROPERTY_LOCATION_PRECISION = "location_precision" + + /** + * Whether the Permissions Hub 2 flag is enabled + * + * @return whether the flag is enabled + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun isPermissionsHub2FlagEnabled(): Boolean { + return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_PERMISSIONS_HUB_2_ENABLED, false) + } + /** + * Whether to show the Permissions Dashboard + * + * @return whether to show the Permissions Dashboard. + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun shouldShowPermissionsDashboard(): Boolean { + return isPermissionsHub2FlagEnabled() + } + + /** + * Whether the Camera and Mic Icons are enabled by flag. + * + * @return whether the Camera and Mic Icons are enabled. + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun isCameraMicIconsFlagEnabled(): Boolean { + return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_CAMERA_MIC_ICONS_ENABLED, true) + } + + /** + * Whether to show Camera and Mic Icons. They should be shown if the permission hub, or the icons + * specifically, are enabled. + * + * @return whether to show the icons. + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun shouldShowCameraMicIndicators(): Boolean { + return isCameraMicIconsFlagEnabled() || isPermissionsHub2FlagEnabled() + } + + /** + * Whether the location indicators are enabled by flag. + * + * @return whether the location indicators are enabled by flag. + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun isLocationIndicatorsFlagEnabled(): Boolean { + return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_INDICATORS_ENABLED, false) + } + + /** + * Whether to show the location indicators. The location indicators are enable if the + * permission hub, or location indicator specifically are enabled. + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun shouldShowLocationIndicators(): Boolean { + return isLocationIndicatorsFlagEnabled() || isPermissionsHub2FlagEnabled() + } + + /** + * Whether the location accuracy feature is enabled + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun isLocationAccuracyEnabled(): Boolean { + return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_ACCURACY_ENABLED, true) + } + + /** + * Default state of location precision + * true: default is FINE. + * false: default is COARSE. + */ + fun getDefaultPrecision(): Boolean { + return !SdkLevel.isAtLeastS() || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_PRECISION, true) + } + + /** + * Whether we should enable the 7-day toggle in privacy dashboard + * + * @return whether the flag is enabled + */ + @ChecksSdkIntAtLeast(Build.VERSION_CODES.S) + fun is7DayToggleEnabled(): Boolean { + return SdkLevel.isAtLeastS() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + PRIVACY_DASHBOARD_7_DAY_TOGGLE, false) + } + /** * Given a Map, and a List, determines which elements are in the list, but not the map, and * vice versa. Used primarily for determining which liveDatas are already being watched, and @@ -1267,4 +1377,4 @@ fun NavController.navigateSafe(destResId: Int, args: Bundle? = null) { navigate(destResId, args) } } -}
\ No newline at end of file +} diff --git a/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt b/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt index e8d98cd53..a1a4873a3 100644 --- a/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt +++ b/PermissionController/src/com/android/permissioncontroller/privacysources/AccessibilitySourceService.kt @@ -903,13 +903,12 @@ class AccessibilityJobService : JobService() { override fun onCreate() { super.onCreate() - if (DEBUG) { - Log.v(LOG_TAG, "accessibility privacy source job created.") - } + Log.v(LOG_TAG, "accessibility privacy source job created.") mSourceService = AccessibilitySourceService(this) } override fun onStartJob(params: JobParameters?): Boolean { + Log.v(LOG_TAG, "accessibility privacy source job started.") synchronized(mLock) { if (mCurrentJob != null) { Log.v(LOG_TAG, "Accessibility privacy source job already running") diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/ReviewPermissionsViewModelTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/ReviewPermissionsViewModelTest.kt index df6e92154..0f4216066 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/ReviewPermissionsViewModelTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/ReviewPermissionsViewModelTest.kt @@ -26,11 +26,11 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.permissioncontroller.PermissionControllerApplication import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup import com.android.permissioncontroller.permission.model.livedatatypes.LightPermission -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.PermissionTarget.PERMISSION_BACKGROUND -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.PermissionTarget.PERMISSION_BOTH -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.PermissionTarget.PERMISSION_FOREGROUND -import com.android.permissioncontroller.permission.ui.model.v33.ReviewPermissionsViewModel.SummaryMessage +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.PermissionTarget.PERMISSION_BACKGROUND +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.PermissionTarget.PERMISSION_BOTH +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.PermissionTarget.PERMISSION_FOREGROUND +import com.android.permissioncontroller.permission.ui.model.ReviewPermissionsViewModel.SummaryMessage import com.android.permissioncontroller.permission.utils.Utils import com.android.settingslib.RestrictedLockUtils import org.junit.After @@ -42,10 +42,10 @@ import org.mockito.Mock import org.mockito.Mockito.doReturn import org.mockito.Mockito.mock import org.mockito.Mockito.spy +import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations import org.mockito.MockitoSession import org.mockito.quality.Strictness -import org.mockito.Mockito.`when` as whenever /** * Unit tests for [ReviewPermissionsViewModel] @@ -247,4 +247,4 @@ class ReviewPermissionsViewModelTest { requestedPermissionsFlags = listOf<Int>().toIntArray() } } -}
\ No newline at end of file +} diff --git a/SafetyCenter/Resources/Android.bp b/SafetyCenter/Resources/Android.bp index 2a19f5c1b..2d720a6df 100644 --- a/SafetyCenter/Resources/Android.bp +++ b/SafetyCenter/Resources/Android.bp @@ -40,7 +40,6 @@ android_app { privileged: true, sdk_version: "system_current", min_sdk_version: "30", - target_sdk_version: "33", apex_available: ["com.android.permission"], certificate: ":com.android.safetycenter.resources.certificate", lint: { diff --git a/service/java/com/android/safetycenter/SafetyCenterListeners.java b/service/java/com/android/safetycenter/SafetyCenterListeners.java index f7abdc137..9ea81277d 100644 --- a/service/java/com/android/safetycenter/SafetyCenterListeners.java +++ b/service/java/com/android/safetycenter/SafetyCenterListeners.java @@ -142,10 +142,11 @@ final class SafetyCenterListeners { * Adds a {@link IOnSafetyCenterDataChangedListener} for the given {@code packageName} and * {@code userId}. * - * <p>Returns whether the callback was successfully registered. Returns {@code true} if the - * callback was already registered. + * <p>Returns the registered {@link IOnSafetyCenterDataChangedListener} if this operation was + * successful. Otherwise, returns {@code null}. */ - boolean addListener( + @Nullable + IOnSafetyCenterDataChangedListener addListener( @NonNull IOnSafetyCenterDataChangedListener listener, @NonNull String packageName, @UserIdInt int userId) { @@ -153,11 +154,15 @@ final class SafetyCenterListeners { mSafetyCenterDataChangedListeners.get(userId); if (listeners == null) { listeners = new RemoteCallbackList<>(); - mSafetyCenterDataChangedListeners.put(userId, listeners); } OnSafetyCenterDataChangedListenerWrapper listenerWrapper = new OnSafetyCenterDataChangedListenerWrapper(listener, packageName); - return listeners.register(listenerWrapper); + boolean registered = listeners.register(listenerWrapper); + if (!registered) { + return null; + } + mSafetyCenterDataChangedListeners.put(userId, listeners); + return listenerWrapper; } /** diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index e522f8ce0..c44c2a229 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -418,13 +418,13 @@ public final class SafetyCenterService extends SystemService { UserProfileGroup userProfileGroup = UserProfileGroup.from(getContext(), userId); synchronized (mApiLock) { - boolean registered = + IOnSafetyCenterDataChangedListener registeredListener = mSafetyCenterListeners.addListener(listener, packageName, userId); - if (!registered) { + if (registeredListener == null) { return; } SafetyCenterListeners.deliverUpdateForListener( - listener, + registeredListener, mSafetyCenterDataFactory.getSafetyCenterData(packageName, userProfileGroup), null); } diff --git a/service/java/com/android/safetycenter/UserProfileGroup.java b/service/java/com/android/safetycenter/UserProfileGroup.java index 264f8bd22..777050bfa 100644 --- a/service/java/com/android/safetycenter/UserProfileGroup.java +++ b/service/java/com/android/safetycenter/UserProfileGroup.java @@ -233,7 +233,7 @@ final class UserProfileGroup { @Override public String toString() { - return "UserProfiles{" + return "UserProfileGroup{" + "mProfileParentUserId=" + mProfileParentUserId + ", mManagedProfilesUserIds=" diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/ui/SafetyCenterActivityTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/ui/SafetyCenterActivityTest.kt index c51f18dc0..ce50853ec 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/ui/SafetyCenterActivityTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/ui/SafetyCenterActivityTest.kt @@ -445,6 +445,19 @@ class SafetyCenterActivityTest { } @Test + fun entryListWithSingleSource_clickingTheIconActionButton_redirectsToDifferentScreen() { + safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) + safetyCenterCtsHelper.setData( + SINGLE_SOURCE_ID, safetySourceCtsData.informationWithIconAction) + + context.launchSafetyCenterActivity { + waitDisplayed(By.desc("Settings")) { it.click() } + waitButtonDisplayed("Exit test activity") { it.click() } + waitDisplayed(By.text("Ok title")) + } + } + + @Test fun staticSource_clickingTheEntry_redirectsToDifferentScreen() { safetyCenterCtsHelper.setConfig(STATIC_SOURCES_CONFIG) |