Merge "Remove DocumentsContract.ACTION_BROWSE."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2549f61..4c8ba07 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -537,11 +537,11 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter android:priority="5">
+ <intent-filter android:priority="240">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.system" />
+ android:value="com.android.settings.category.ia.system" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.DateTimeSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -552,7 +552,7 @@
android:label="@string/language_picker_title"
android:icon="@drawable/ic_settings_language"
android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+ android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
<intent-filter android:priority="1">
<action android:name="android.settings.LOCALE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
@@ -568,25 +568,25 @@
android:value="true" />
</activity>
- <activity android:name="Settings$InputMethodAndLanguageSettingsActivity"
+ <activity android:name=".Settings$LanguageAndInputSettingsActivity"
android:label="@string/language_keyboard_settings_title"
android:icon="@drawable/ic_settings_language"
android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings">
+ android:parentActivityName="Settings$SystemDashboardActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter android:priority="-1">
- <action android:name="com.android.settings.action.SETTINGS" />
+ <intent-filter android:priority="260">
+ <action android:name="com.android.settings.action.SETTINGS"/>
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.personal" />
+ android:value="com.android.settings.category.ia.system"/>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.inputmethod.InputMethodAndLanguageSettings" />
+ android:value="com.android.settings.language.LanguageAndInputSettings"/>
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
+ android:value="true"/>
</activity>
<activity android:name="Settings$AvailableVirtualKeyboardActivity"
@@ -648,15 +648,15 @@
android:label="@string/language_keyboard_settings_title"
android:clearTaskOnLaunch="true"
android:exported="true"
- android:targetActivity="Settings$InputMethodAndLanguageSettingsActivity">
+ android:targetActivity="Settings$LanguageAndInputSettingsActivity">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.inputmethod.InputMethodAndLanguageSettings" />
+ android:value="com.android.settings.language.LanguageAndInputSettings" />
</activity-alias>
<activity android:name="Settings$SpellCheckersSettingsActivity"
android:label="@string/spellcheckers_settings_title"
android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+ android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
@@ -692,7 +692,7 @@
<activity android:name="Settings$UserDictionarySettingsActivity"
android:label="@string/user_dict_settings_title"
android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+ android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
<intent-filter android:priority="1">
<action android:name="android.settings.USER_DICTIONARY_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
@@ -955,11 +955,11 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
- <intent-filter android:priority="-1">
+ <intent-filter android:priority="10">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.system" />
+ android:value="com.android.settings.category.ia.system" />
<meta-data android:name="com.android.settings.title"
android:resource="@string/about_settings" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1454,15 +1454,17 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
- <intent-filter android:priority="4">
+ <intent-filter android:priority="2">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.system" />
+ android:value="com.android.settings.category.ia.homepage" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.accessibility.AccessibilitySettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
+ <meta-data android:name="com.android.settings.summary"
+ android:resource="@string/accessibility_settings_summary" />
</activity>
<activity android:name=".accessibility.AccessibilitySettingsForSetupWizardActivity"
@@ -1520,7 +1522,7 @@
<activity android:name="Settings$TextToSpeechSettingsActivity"
android:label="@string/tts_settings"
android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+ android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
<intent-filter android:priority="1">
<action android:name="com.android.settings.TTS_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
@@ -1540,11 +1542,11 @@
<action android:name="android.settings.ENTERPRISE_PRIVACY_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter>
+ <intent-filter android:priority="-1">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.device" />
+ android:value="com.android.settings.category.ia.system" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.enterprise.EnterprisePrivacySettings" />
</activity>
@@ -1918,11 +1920,11 @@
<action android:name="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter android:priority="2">
+ <intent-filter android:priority="50">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.system" />
+ android:value="com.android.settings.category.ia.system" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.DevelopmentSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -1943,11 +1945,11 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
- <intent-filter android:priority="3">
+ <intent-filter android:priority="2">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.system" />
+ android:value="com.android.settings.category.ia.device" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.print.PrintSettingsFragment" />
</activity>
@@ -2213,11 +2215,11 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
- <intent-filter android:priority="4">
+ <intent-filter android:priority="8">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.device" />
+ android:value="com.android.settings.category.ia.homepage" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.fuelgauge.PowerUsageSummary" />
</activity>
@@ -2575,15 +2577,21 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
- <intent-filter android:priority="7">
+ <intent-filter android:priority="1">
+ <action android:name="android.settings.ACTION_OTHER_SOUND_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:priority="6">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.device" />
+ android:value="com.android.settings.category.ia.homepage" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.notification.SoundSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
+ <meta-data android:name="com.android.settings.summary"
+ android:value="@string/sound_dashboard_summary"/>
</activity>
<!-- Keep compatibility with old shortcuts. -->
@@ -2595,24 +2603,6 @@
android:value="com.android.settings.notification.SoundSettings" />
</activity-alias>
- <activity android:name="Settings$OtherSoundSettingsActivity"
- android:label="@string/other_sound_settings"
- android:exported="true"
- android:taskAffinity="">
- <intent-filter android:priority="1">
- <action android:name="android.settings.ACTION_OTHER_SOUND_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.notification.OtherSoundSettings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity>
-
<!-- Show apps for which application-level notification settings are applicable -->
<activity android:name="Settings$NotificationAppListActivity"
android:label="@string/app_notifications_title"
@@ -2931,27 +2921,7 @@
android:value="true" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.webview.WebViewAppPicker" />
- </activity-alias>
-
- <!-- activity for gesture settings -->
- <activity android:name="Settings$GestureSettingsActivity"
- android:label="@string/gesture_preference_title"
- android:icon="@drawable/ic_settings_gestures"
- android:enabled="@bool/config_gesture_settings_enabled">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="com.android.settings.SHORTCUT" />
- </intent-filter>
- <intent-filter>
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.device" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.gestures.GestureSettings" />
- <meta-data android:name="com.android.settings.summary"
- android:resource="@string/gesture_preference_summary" />
- </activity>
+ </activity-alias>
<activity android:name=".backup.BackupSettingsActivity"
android:label="@string/privacy_settings_title"
@@ -2968,11 +2938,11 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
- <intent-filter android:priority="-2">
+ <intent-filter android:priority="60">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.personal" />
+ android:value="com.android.settings.category.ia.system" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -3046,33 +3016,6 @@
android:value="@string/app_and_notification_dashboard_summary"/>
</activity>
- <activity-alias android:name="BatteryDashboardAlias"
- android:targetActivity="Settings$PowerUsageSummaryActivity">
- <intent-filter android:priority="8">
- <action android:name="com.android.settings.action.SETTINGS"/>
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.fuelgauge.PowerUsageSummary"/>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.homepage"/>
- </activity-alias>
-
- <activity-alias android:name="SoundDashboardAlias"
- android:targetActivity="Settings$SoundSettingsActivity"
- android:icon="@drawable/ic_dashboard_sound">
- <intent-filter android:priority="6">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.homepage" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.notification.SoundSettings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- <meta-data android:name="com.android.settings.summary"
- android:value="@string/sound_dashboard_summary"/>
- </activity-alias>
-
<activity android:name=".Settings$StorageDashboardActivity"
android:label="@string/storage_settings"
android:icon="@drawable/ic_dashboard_storage">
@@ -3118,21 +3061,6 @@
android:value="true" />
</activity>
- <activity-alias android:name="AccessibilityDashboardAlias"
- android:targetActivity="Settings$AccessibilitySettingsActivity">
- <intent-filter android:priority="2">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.homepage" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.accessibility.AccessibilitySettings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- <meta-data android:name="com.android.settings.summary"
- android:resource="@string/accessibility_settings_summary" />
- </activity-alias>
-
<activity android:name=".Settings$SystemDashboardActivity"
android:label="@string/header_category_system"
android:icon="@drawable/ic_dashboard_system">
@@ -3161,78 +3089,6 @@
android:resource="@string/support_summary"/>
</activity>
- <!-- Alias for IME & Language in new IA. Should merge into TargetActivity when launch -->
- <activity android:name=".Settings$LanguageAndInputSettingsActivity"
- android:label="@string/language_keyboard_settings_title"
- android:icon="@drawable/ic_settings_language">
- <intent-filter android:priority="260">
- <action android:name="com.android.settings.action.SETTINGS"/>
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system"/>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.language.LanguageAndInputSettings"/>
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true"/>
- <!-- Inherit intent-filter from LanguageSettingsActivity -->
- </activity>
-
- <!-- Alias for Date & Time in new IA. Should merge into TargetActivity when launch -->
- <activity-alias android:name="DateTimeDashboardAlias"
- android:targetActivity="Settings$DateTimeSettingsActivity">
- <intent-filter android:priority="240">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.DateTimeSettings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity-alias>
-
- <activity-alias android:name="BackupResetDashboardAlias"
- android:targetActivity=".backup.BackupSettingsActivity">
- <intent-filter android:priority="60">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity-alias>
-
- <!-- Alias for developer setting in new IA. Should merge into TargetActivity when launch -->
- <activity-alias android:name="DevelopmentSettingsDashboardAlias"
- android:targetActivity="Settings$DevelopmentSettingsActivity"
- android:label="@string/development_settings_title"
- android:icon="@drawable/ic_settings_development">
- <intent-filter android:priority="50">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.DevelopmentSettings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity-alias>
-
- <activity-alias android:name="AboutDeviceDashboardAlias"
- android:targetActivity="Settings$DeviceInfoSettingsActivity">
- <intent-filter android:priority="10">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.DeviceInfoSettings" />
- <meta-data android:name="com.android.settings.title"
- android:resource="@string/about_settings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity-alias>
-
<activity-alias android:name="MemorySettingsDashboardAlias"
android:targetActivity=".Settings$MemorySettingsActivity">
<intent-filter>
@@ -3244,17 +3100,6 @@
android:value="com.android.settings.applications.ProcessStatsSummary" />
</activity-alias>
- <activity-alias android:name="PrintDashboardAlias"
- android:targetActivity="Settings$PrintSettingsActivity">
- <intent-filter android:priority="2">
- <action android:name="com.android.settings.action.SETTINGS"/>
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.print.PrintSettingsFragment" />
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.device" />
- </activity-alias>
-
<activity-alias android:name="ManageApplicationsDashboardAlias"
android:targetActivity="Settings$ManageApplicationsActivity">
<intent-filter android:priority="200">
@@ -3335,18 +3180,6 @@
android:value="true"/>
</activity-alias>
- <!-- Alias for enterprise privacy setting in new IA. Should merge into TargetActivity when launch -->
- <activity-alias android:name="EnterprisePrivacyDashboardAlias"
- android:targetActivity="Settings$EnterprisePrivacySettingsActivity">
- <intent-filter android:priority="-1">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.enterprise.EnterprisePrivacySettings" />
- </activity-alias>
-
<!-- End of information architecture host activities -->
<service
diff --git a/res/layout/dashboard_container.xml b/res/layout/dashboard_container.xml
deleted file mode 100644
index f6b81ae..0000000
--- a/res/layout/dashboard_container.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.settings.widget.RtlCompatibleViewPager
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/pager"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
diff --git a/res/layout/dashboard_container_header.xml b/res/layout/dashboard_container_header.xml
deleted file mode 100644
index 37412e7..0000000
--- a/res/layout/dashboard_container_header.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.settings.widget.SlidingTabLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/sliding_tabs"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/dashboard_header_margin_start"
- android:layout_marginEnd="@dimen/dashboard_header_margin_end"/>
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
index 70faa0f..b1ec4c7 100644
--- a/res/values-sw720dp-land/dimens.xml
+++ b/res/values-sw720dp-land/dimens.xml
@@ -21,10 +21,6 @@
<dimen name="dashboard_padding_start">160dp</dimen>
<dimen name="dashboard_padding_end">160dp</dimen>
- <!-- Dashboard Header margin in its container -->
- <dimen name="dashboard_header_margin_start">304dp</dimen>
- <dimen name="dashboard_header_margin_end">304dp</dimen>
-
<!-- ActionBar contentInsetStart -->
<dimen name="actionbar_contentInsetStart">128dp</dimen>
<dimen name="actionbar_subsettings_contentInsetStart">128dp</dimen>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index a0be467..981c936 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -42,10 +42,6 @@
<dimen name="dashboard_padding_start">80dp</dimen>
<dimen name="dashboard_padding_end">80dp</dimen>
- <!-- Dashboard Header margin in its container -->
- <dimen name="dashboard_header_margin_start">176dp</dimen>
- <dimen name="dashboard_header_margin_end">176dp</dimen>
-
<!-- Dashboard category padding start / end -->
<dimen name="dashboard_category_padding_start">24dp</dimen>
<dimen name="dashboard_category_padding_end">24dp</dimen>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 601fb40..8b172fa 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -701,7 +701,7 @@
<!-- Values for the list of long press timeout options. -->
<string-array name="long_press_timeout_selector_values" translatable="false">
- <item>500</item>
+ <item>400</item>
<item>1000</item>
<item>1500</item>
</string-array>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0ddc634..fe5845a 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -88,10 +88,6 @@
<dimen name="dashboard_padding_top">0dp</dimen>
<dimen name="dashboard_padding_bottom">0dp</dimen>
- <!-- Dashboard Header margin in its container -->
- <dimen name="dashboard_header_margin_start">0dp</dimen>
- <dimen name="dashboard_header_margin_end">0dp</dimen>
-
<!-- Dashboard category padding start / end -->
<dimen name="dashboard_category_padding_start">0dp</dimen>
<dimen name="dashboard_category_padding_end">0dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0da0009..01547ef 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8187,7 +8187,7 @@
<string name="do_disclosure_learn_more">Learn more</string>
<!-- Preference label for the Photos & Videos storage section. [CHAR LIMIT=50] -->
- <string name="storage_photos_videos">Photos & Videos</string>
+ <string name="storage_photos_videos">Photos & videos</string>
<!-- Preference label for the Music & Audio storage section. [CHAR LIMIT=50] -->
<string name="storage_music_audio">Music & audio</string>
diff --git a/res/xml/gesture_settings.xml b/res/xml/gesture_settings.xml
deleted file mode 100644
index 808c9b2..0000000
--- a/res/xml/gesture_settings.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/gesture_preference_title"
- settings:keywords="@string/keywords_gesture">
-
- <com.android.settings.gestures.GesturePreference
- android:key="gesture_assist"
- android:title="@string/assist_gesture_title"
- android:summary="@string/assist_gesture_summary"
- settings:animation="@raw/gesture_assist"
- settings:preview="@drawable/gesture_assist"/>
-
- <com.android.settings.gestures.GesturePreference
- android:key="gesture_swipe_down_fingerprint"
- android:title="@string/fingerprint_swipe_for_notifications_title"
- android:summary="@string/fingerprint_swipe_for_notifications_summary"
- settings:animation="@raw/gesture_fingerprint_swipe"
- settings:preview="@drawable/gesture_fingerprint_swipe"/>
-
- <com.android.settings.gestures.GesturePreference
- android:key="gesture_double_tap_power"
- android:title="@string/double_tap_power_for_camera_title"
- android:summary="@string/double_tap_power_for_camera_summary"
- settings:animation="@raw/gesture_double_tap"
- settings:preview="@drawable/gesture_double_tap"/>
-
- <com.android.settings.gestures.GesturePreference
- android:key="gesture_double_twist"
- android:title="@string/double_twist_for_camera_mode_title"
- android:summary="@string/double_twist_for_camera_mode_summary"
- settings:animation="@raw/gesture_twist"
- settings:preview="@drawable/gesture_twist"/>
-
- <com.android.settings.gestures.GesturePreference
- android:key="gesture_double_tap_screen"
- android:title="@string/ambient_display_title"
- android:summary="@string/ambient_display_summary"
- settings:animation="@raw/gesture_ambient_tap"
- settings:preview="@drawable/gesture_ambient_tap"/>
-
- <com.android.settings.gestures.GesturePreference
- android:key="gesture_pick_up"
- android:title="@string/ambient_display_pickup_title"
- android:summary="@string/ambient_display_pickup_summary"
- settings:animation="@raw/gesture_ambient_lift"
- settings:preview="@drawable/gesture_ambient_lift"/>
-
-</PreferenceScreen>
diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml
deleted file mode 100644
index 8aa105b..0000000
--- a/res/xml/language_settings.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:key="language_keyboard_settings"
- android:title="@string/language_keyboard_settings_title">
-
- <Preference
- android:key="phone_language"
- android:title="@string/phone_language"
- android:fragment="com.android.settings.localepicker.LocaleListEditor"
- />
-
- <!-- Spell checker preference title, summary and fragment will be set programmatically. -->
- <!-- Note: Mark this as persistent="false" to remove unnecessarily saved shared preference.
- See: InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference. -->
- <Preference
- android:key="spellcheckers_settings"
- android:title="@string/spellcheckers_settings_title"
- android:fragment="com.android.settings.inputmethod.SpellCheckersSettings"
- android:persistent="false"/>
-
- <!-- User dictionary preference title and fragment will be set programmatically. -->
- <Preference
- android:key="key_user_dictionary_settings"
- android:title="@string/user_dict_settings_title"
- />
-
- <PreferenceCategory
- android:title="@string/keyboard_and_input_methods_category">
- <Preference
- android:title="@string/virtual_keyboard_category"
- android:fragment="com.android.settings.inputmethod.VirtualKeyboardFragment" />
- <Preference
- android:title="@string/physical_keyboard_title"
- android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment" />
- </PreferenceCategory>
-
- <PreferenceCategory
- android:key="voice_category"
- android:title="@string/voice_category" >
-
- <Preference
- android:key="tts_settings"
- android:title="@string/tts_settings_title"
- android:fragment="com.android.settings.tts.TextToSpeechSettings"
- />
-
- </PreferenceCategory>
-
- <PreferenceCategory
- android:key="pointer_settings_category"
- android:title="@string/pointer_settings_category">
-
- <com.android.settings.PointerSpeedPreference
- android:key="pointer_speed"
- android:title="@string/pointer_speed"
- android:dialogTitle="@string/pointer_speed"
- />
-
- </PreferenceCategory>
-
- <PreferenceCategory
- android:key="game_controller_settings_category"
- android:title="@string/game_controller_settings_category">
-
- <SwitchPreference
- android:key="vibrate_input_devices"
- android:title="@string/vibrate_input_devices"
- android:summaryOn="@string/vibrate_input_devices_summary"
- android:summaryOff="@string/vibrate_input_devices_summary"
- />
-
- </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
deleted file mode 100644
index c74d1f1..0000000
--- a/res/xml/sound_settings.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
- android:title="@string/sound_settings"
- android:key="sound_settings"
- settings:keywords="@string/keywords_sounds">
-
- <!-- Media volume -->
- <com.android.settings.notification.VolumeSeekBarPreference
- android:key="media_volume"
- android:icon="@*android:drawable/ic_audio_media"
- android:title="@string/media_volume_option_title" />
-
- <!-- Alarm volume -->
- <com.android.settings.notification.VolumeSeekBarPreference
- android:key="alarm_volume"
- android:icon="@*android:drawable/ic_audio_alarm"
- android:title="@string/alarm_volume_option_title" />
-
- <!-- Ring volume -->
- <com.android.settings.notification.VolumeSeekBarPreference
- android:key="ring_volume"
- android:icon="@*android:drawable/ic_audio_ring_notif"
- android:title="@string/ring_volume_option_title" />
-
- <!-- Notification volume -->
- <com.android.settings.notification.VolumeSeekBarPreference
- android:key="notification_volume"
- android:icon="@*android:drawable/ic_audio_ring_notif"
- android:title="@string/notification_volume_option_title" />
-
- <!-- Also vibrate for calls -->
- <SwitchPreference
- android:key="vibrate_when_ringing"
- android:title="@string/vibrate_when_ringing_title" />
-
-
- <!-- Interruptions -->
- <com.android.settingslib.RestrictedPreference
- android:key="zen_mode"
- android:title="@string/zen_mode_settings_title"
- settings:useAdminDisabledSummary="true"
- settings:keywords="@string/keywords_sounds_and_notifications_interruptions"
- android:fragment="com.android.settings.notification.ZenModeSettings" />
-
- <!-- Phone ringtone -->
- <com.android.settings.DefaultRingtonePreference
- android:key="ringtone"
- android:title="@string/ringtone_title"
- android:dialogTitle="@string/ringtone_title"
- android:summary="@string/ringtone_summary"
- android:ringtoneType="ringtone" />
-
- <!-- Default notification ringtone -->
- <com.android.settings.DefaultRingtonePreference
- android:key="notification_ringtone"
- android:title="@string/notification_ringtone_title"
- android:dialogTitle="@string/notification_ringtone_title"
- android:summary="@string/ringtone_summary"
- android:ringtoneType="notification" />
-
- <!-- Default alarm ringtone -->
- <com.android.settings.DefaultRingtonePreference
- android:key="alarm_ringtone"
- android:title="@string/alarm_ringtone_title"
- android:dialogTitle="@string/alarm_ringtone_title"
- android:summary="@string/ringtone_summary"
- android:persistent="false"
- android:ringtoneType="alarm" />
-
- <com.android.settingslib.RestrictedPreference
- android:key="cell_broadcast_settings"
- android:title="@string/cell_broadcast_settings"
- settings:useAdminDisabledSummary="true">
- <intent
- android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.cellbroadcastreceiver"
- android:targetClass="com.android.cellbroadcastreceiver.CellBroadcastSettings" />
- </com.android.settingslib.RestrictedPreference>
-
- <!-- Other sounds -->
- <Preference
- android:key="other_sounds"
- android:title="@string/other_sound_settings"
- android:persistent="false"
- android:fragment="com.android.settings.notification.OtherSoundSettings" />
-
- <!-- Cast -->
- <Preference
- android:key="wifi_display"
- android:title="@string/wifi_display_settings_title"
- android:fragment="com.android.settings.wfd.WifiDisplaySettings" />
-
-</PreferenceScreen>
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 47cb9829..89ba999 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -17,6 +17,7 @@
package com.android.settings;
import android.app.Activity;
+import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
@@ -24,6 +25,7 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.deviceinfo.AdditionalSystemUpdatePreferenceController;
@@ -38,7 +40,6 @@
import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController;
import com.android.settings.deviceinfo.SELinuxStatusPreferenceController;
import com.android.settings.deviceinfo.SafetyInfoPreferenceController;
-import com.android.settings.deviceinfo.SafetyLegalPreferenceController;
import com.android.settings.deviceinfo.SecurityPatchPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
@@ -51,8 +52,6 @@
private static final String LOG_TAG = "DeviceInfoSettings";
- private BuildNumberPreferenceController mBuildNumberPreferenceController;
-
@Override
public int getMetricsCategory() {
return MetricsEvent.DEVICEINFO;
@@ -65,7 +64,9 @@
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (mBuildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
+ final BuildNumberPreferenceController buildNumberPreferenceController =
+ getPreferenceController(BuildNumberPreferenceController.class);
+ if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
@@ -83,24 +84,8 @@
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
- final List<PreferenceController> controllers = new ArrayList<>();
- mBuildNumberPreferenceController =
- new BuildNumberPreferenceController(context, getActivity(), this /* fragment */);
- getLifecycle().addObserver(mBuildNumberPreferenceController);
- controllers.add(mBuildNumberPreferenceController);
- controllers.add(new AdditionalSystemUpdatePreferenceController(context));
- controllers.add(new ManualPreferenceController(context));
- controllers.add(new FeedbackPreferenceController(this, context));
- controllers.add(new KernelVersionPreferenceController(context));
- controllers.add(new BasebandVersionPreferenceController(context));
- controllers.add(new FirmwareVersionPreferenceController(context, getLifecycle()));
- controllers.add(new RegulatoryInfoPreferenceController(context));
- controllers.add(new DeviceModelPreferenceController(context));
- controllers.add(new SecurityPatchPreferenceController(context));
- controllers.add(new FccEquipmentIdPreferenceController(context));
- controllers.add(new SELinuxStatusPreferenceController(context));
- controllers.add(new SafetyInfoPreferenceController(context));
- return controllers;
+ return buildPreferenceControllers(context, getActivity(), this /* fragment */,
+ getLifecycle());
}
private static class SummaryProvider implements SummaryLoader.SummaryProvider {
@@ -131,6 +116,26 @@
}
};
+ private static List<PreferenceController> buildPreferenceControllers(Context context,
+ Activity activity, Fragment fragment, Lifecycle lifecycle) {
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(
+ new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
+ controllers.add(new AdditionalSystemUpdatePreferenceController(context));
+ controllers.add(new ManualPreferenceController(context));
+ controllers.add(new FeedbackPreferenceController(fragment, context));
+ controllers.add(new KernelVersionPreferenceController(context));
+ controllers.add(new BasebandVersionPreferenceController(context));
+ controllers.add(new FirmwareVersionPreferenceController(context, lifecycle));
+ controllers.add(new RegulatoryInfoPreferenceController(context));
+ controllers.add(new DeviceModelPreferenceController(context));
+ controllers.add(new SecurityPatchPreferenceController(context));
+ controllers.add(new FccEquipmentIdPreferenceController(context));
+ controllers.add(new SELinuxStatusPreferenceController(context));
+ controllers.add(new SafetyInfoPreferenceController(context));
+ return controllers;
+ }
+
/**
* For Search.
*/
@@ -146,19 +151,9 @@
}
@Override
- public List<String> getNonIndexableKeys(Context context) {
- final List<String> keys = new ArrayList<>();
- new SafetyLegalPreferenceController(context).updateNonIndexableKeys(keys);
- new BasebandVersionPreferenceController(context).updateNonIndexableKeys(keys);
- new FeedbackPreferenceController(null, context).updateNonIndexableKeys(keys);
- new AdditionalSystemUpdatePreferenceController(context)
- .updateNonIndexableKeys(keys);
- new RegulatoryInfoPreferenceController(context).updateNonIndexableKeys(keys);
- new SecurityPatchPreferenceController(context).updateNonIndexableKeys(keys);
- new FccEquipmentIdPreferenceController(context).updateNonIndexableKeys(keys);
- new SELinuxStatusPreferenceController(context).updateNonIndexableKeys(keys);
- new SafetyInfoPreferenceController(context).updateNonIndexableKeys(keys);
- return keys;
+ public List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, null /*activity */,
+ null /* fragment */, null /* lifecycle */);
}
};
}
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 1e0547b..6fbffe8 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -69,6 +69,15 @@
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context);
+ }
+
+ @Override
+ protected int getHelpResource() {
+ return R.string.help_uri_display;
+ }
+
+ private static List<PreferenceController> buildPreferenceControllers(Context context) {
final List<PreferenceController> controllers = new ArrayList<>();
controllers.add(new AutoBrightnessPreferenceController(context));
controllers.add(new AutoRotatePreferenceController(context));
@@ -87,11 +96,6 @@
return controllers;
}
- @Override
- protected int getHelpResource() {
- return R.string.help_uri_display;
- }
-
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
@@ -106,32 +110,8 @@
}
@Override
- public List<String> getNonIndexableKeys(Context context) {
- ArrayList<String> result = new ArrayList<>();
-
- new AutoBrightnessPreferenceController(context).updateNonIndexableKeys(result);
- new AutoRotatePreferenceController(context).updateNonIndexableKeys(result);
- new CameraGesturePreferenceController(context).updateNonIndexableKeys(result);
- new DozePreferenceController(context).updateNonIndexableKeys(result);
- new FontSizePreferenceController(context).updateNonIndexableKeys(result);
- new LiftToWakePreferenceController(context).updateNonIndexableKeys(result);
- new NightDisplayPreferenceController(context).updateNonIndexableKeys(result);
- new NightModePreferenceController(context).updateNonIndexableKeys(result);
- new ScreenSaverPreferenceController(context).updateNonIndexableKeys(result);
- new TapToWakePreferenceController(context).updateNonIndexableKeys(result);
- new TimeoutPreferenceController(context).updateNonIndexableKeys(result);
- new VrDisplayPreferenceController(context).updateNonIndexableKeys(result);
- new WallpaperPreferenceController(context).updateNonIndexableKeys(result);
- new ThemePreferenceController(context).updateNonIndexableKeys(result);
-
- return result;
- }
-
- @Override
public List<PreferenceController> getPreferenceControllers(Context context) {
- final List<PreferenceController> controllers = new ArrayList<>();
- controllers.add(new AutoBrightnessPreferenceController(context));
- return controllers;
+ return buildPreferenceControllers(context);
}
};
}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index e92027a..94c12c1 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -40,7 +40,6 @@
public static class PublicVolumeSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ }
- public static class InputMethodAndLanguageSettingsActivity extends SettingsActivity { /* empty */ }
public static class AvailableVirtualKeyboardActivity extends SettingsActivity { /* empty */ }
public static class KeyboardLayoutPickerActivity extends SettingsActivity { /* empty */ }
public static class PhysicalKeyboardActivity extends SettingsActivity { /* empty */ }
@@ -68,10 +67,7 @@
}
public static class BackgroundCheckSummaryActivity extends SettingsActivity { /* empty */ }
public static class StorageUseActivity extends SettingsActivity { /* empty */ }
- public static class DevelopmentSettingsActivity extends SettingsActivity {
- public static final String DASHBOARD_ALIAS =
- "com.android.settings.DevelopmentSettingsDashboardAlias";
- }
+ public static class DevelopmentSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccessibilitySettingsActivity extends SettingsActivity { /* empty */ }
public static class CaptioningSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccessibilityInversionSettingsActivity extends SettingsActivity { /* empty */ }
@@ -87,7 +83,6 @@
public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
- public static class GestureSettingsActivity extends SettingsActivity { /* empty */ }
public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ }
public static class DeviceAdminSettingsActivity extends SettingsActivity { /* empty */ }
public static class DataUsageSummaryActivity extends SettingsActivity { /* empty */ }
@@ -121,7 +116,6 @@
public static class NotificationAppListActivity extends SettingsActivity { /* empty */ }
public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ChannelNotificationSettingsActivity extends SettingsActivity { /* empty */ }
- public static class OtherSoundSettingsActivity extends SettingsActivity { /* empty */ }
public static class ManageDomainUrlsActivity extends SettingsActivity { /* empty */ }
public static class AutomaticStorageManagerSettingsActivity extends SettingsActivity { /* empty */ }
public static class GamesStorageActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 00bdf57..1b9b3b3 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -58,7 +58,6 @@
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.core.instrumentation.SharedPreferencesLogger;
-import com.android.settings.dashboard.DashboardContainerFragment;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.DashboardSummary;
import com.android.settings.dashboard.SearchResultsSummary;
@@ -154,6 +153,7 @@
public static final String EXTRA_SHOW_FRAGMENT_AS_SUBSETTING =
":settings:show_fragment_as_subsetting";
+ @Deprecated
public static final String EXTRA_HIDE_DRAWER = ":settings:hide_drawer";
public static final String META_DATA_KEY_FRAGMENT_CLASS =
@@ -236,7 +236,6 @@
private DashboardFeatureProvider mDashboardFeatureProvider;
private Intent mResultIntentData;
private ComponentName mCurrentSuggestion;
- private final StringBuffer mDebugData = new StringBuffer();
@VisibleForTesting
String mSearchQuery;
@@ -367,9 +366,6 @@
if (intent.hasExtra(EXTRA_UI_OPTIONS)) {
getWindow().setUiOptions(intent.getIntExtra(EXTRA_UI_OPTIONS, 0));
}
- if (intent.getBooleanExtra(EXTRA_HIDE_DRAWER, false)) {
- setIsDrawerPresent(false);
- }
mDevelopmentPreferences = getSharedPreferences(DevelopmentSettings.PREF_FILE,
Context.MODE_PRIVATE);
@@ -436,43 +432,7 @@
mDisplaySearch = savedState.getBoolean(SAVE_KEY_SHOW_SEARCH);
} else {
- if (!mIsShowingDashboard) {
- if (initialFragmentName == null) {
- logFragmentData(intent, className, isSubSettings);
- }
- mDisplaySearch = false;
- // UP will be shown only if it is a sub settings
- if (mIsShortcut) {
- mDisplayHomeAsUpEnabled = isSubSettings;
- } else if (isSubSettings) {
- mDisplayHomeAsUpEnabled = true;
- } else {
- mDisplayHomeAsUpEnabled = false;
- }
- setTitleFromIntent(intent);
-
- Bundle initialArguments = intent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
- switchToFragment(initialFragmentName, initialArguments, true, false,
- mInitialTitleResId, mInitialTitle, false);
- } else {
- // No UP affordance if we are displaying the main Dashboard
- mDisplayHomeAsUpEnabled = false;
- // Show Search affordance
- mDisplaySearch = true;
- mInitialTitleResId = R.string.dashboard_title;
-
- // add argument to indicate which settings tab should be initially selected
- final Bundle args = new Bundle();
- final String extraName = DashboardContainerFragment.EXTRA_SELECT_SETTINGS_TAB;
- args.putString(extraName, intent.getStringExtra(extraName));
- if (isDashboardFeatureEnabled()) {
- switchToFragment(DashboardSummary.class.getName(), args, false, false,
- mInitialTitleResId, mInitialTitle, false);
- } else {
- switchToFragment(DashboardContainerFragment.class.getName(), args, false, false,
- mInitialTitleResId, mInitialTitle, false);
- }
- }
+ launchSettingFragment(initialFragmentName, isSubSettings, intent);
}
mActionBar = getActionBar();
@@ -544,6 +504,35 @@
}
}
+ @VisibleForTesting
+ void launchSettingFragment(String initialFragmentName, boolean isSubSettings, Intent intent) {
+ if (!mIsShowingDashboard && initialFragmentName != null) {
+ mDisplaySearch = false;
+ // UP will be shown only if it is a sub settings
+ if (mIsShortcut) {
+ mDisplayHomeAsUpEnabled = isSubSettings;
+ } else if (isSubSettings) {
+ mDisplayHomeAsUpEnabled = true;
+ } else {
+ mDisplayHomeAsUpEnabled = false;
+ }
+ setTitleFromIntent(intent);
+
+ Bundle initialArguments = intent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
+ switchToFragment(initialFragmentName, initialArguments, true, false,
+ mInitialTitleResId, mInitialTitle, false);
+ } else {
+ // No UP affordance if we are displaying the main Dashboard
+ mDisplayHomeAsUpEnabled = false;
+ // Show Search affordance
+ mDisplaySearch = true;
+ mInitialTitleResId = R.string.dashboard_title;
+
+ switchToFragment(DashboardSummary.class.getName(), null /* args */, false, false,
+ mInitialTitleResId, mInitialTitle, false);
+ }
+ }
+
public void setDisplaySearchMenu(boolean displaySearch) {
if (displaySearch != mDisplaySearch) {
mDisplaySearch = displaySearch;
@@ -705,7 +694,6 @@
String startingFragment = getStartingFragmentClass(superIntent);
// This is called from super.onCreate, isMultiPane() is not yet reliable
// Do not use onIsHidingHeaders either, which relies itself on this method
- log("getIntent() startingFragment", startingFragment);
if (startingFragment != null) {
Intent modIntent = new Intent(superIntent);
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, startingFragment);
@@ -727,11 +715,9 @@
* returns the class name to load as a fragment.
*/
private String getStartingFragmentClass(Intent intent) {
- log("getStartingFragmentClass() mFragmentClass", mFragmentClass);
if (mFragmentClass != null) return mFragmentClass;
String intentClass = intent.getComponent().getClassName();
- log("getStartingFragmentClass() intentClass", intentClass);
if (intentClass.equals(getClass().getName())) return null;
if ("com.android.settings.ManageApplications".equals(intentClass)
@@ -951,18 +937,10 @@
setTileEnabled(new ComponentName(packageName,
Settings.DevelopmentSettingsActivity.class.getName()),
showDev, isAdmin);
- setTileEnabled(new ComponentName(packageName,
- Settings.DevelopmentSettingsActivity.DASHBOARD_ALIAS),
- showDev, isAdmin);
if (UserHandle.MU_ENABLED && !isAdmin) {
// When on restricted users, disable all extra categories (but only the settings ones).
- List<DashboardCategory> categories;
- if (isDashboardFeatureEnabled()) {
- categories = mDashboardFeatureProvider.getAllCategories();
- } else {
- categories = getDashboardCategories();
- }
+ final List<DashboardCategory> categories = mDashboardFeatureProvider.getAllCategories();
for (DashboardCategory category : categories) {
for (Tile tile : category.tiles) {
@@ -981,17 +959,11 @@
setTileEnabled(new ComponentName(packageName,
BackupSettingsActivity.class.getName()), true,
isAdmin || Utils.isCarrierDemoUser(this));
- setTileEnabled(new ComponentName(packageName,
- "com.android.settings.BackupResetDashboardAlias"), true, isAdmin);
setTileEnabled(new ComponentName(packageName,
Settings.EnterprisePrivacySettingsActivity.class.getName()),
FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this)
.hasDeviceOwner(), isAdmin);
- setTileEnabled(new ComponentName(packageName,
- "com.android.settings.EnterprisePrivacyDashboardAlias"),
- FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this)
- .hasDeviceOwner(), isAdmin);
// Final step, refresh categories.
updateCategories();
}
@@ -1017,15 +989,6 @@
}
}
- @Override
- protected boolean isDashboardFeatureEnabled() {
- if (mDashboardFeatureProvider == null) {
- mDashboardFeatureProvider =
- FeatureFactory.getFactory(this).getDashboardFeatureProvider(this);
- }
- return mDashboardFeatureProvider.isEnabled();
- }
-
// give subclasses access to the Next button
public boolean hasNextButton() {
return mNextButton != null;
@@ -1085,16 +1048,6 @@
}
@Override
- protected void onTileClicked(Tile tile) {
- if (mIsShowingDashboard) {
- // If on dashboard, don't finish so the back comes back to here.
- openTile(tile);
- } else {
- super.onTileClicked(tile);
- }
- }
-
- @Override
public void onProfileTileOpen() {
if (!mIsShowingDashboard) {
finish();
@@ -1161,37 +1114,4 @@
}
super.onActivityResult(requestCode, resultCode, data);
}
-
- private void logFragmentData(Intent intent, String className, boolean isSubSettings) {
- if (intent != null) {
- logBundleData(intent.getExtras(), "Intent extra");
- logBundleData(intent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS), "Fragment args");
- } else {
- log("Intent data", "NULL");
- }
- log("Fragment", mFragmentClass);
- log("Shortcut", mIsShortcut);
- log("Class Name", className);
- log("Show dashboard", mIsShowingDashboard);
- log("Sub setting", isSubSettings);
- log("Title", mInitialTitle);
- Log.d(LOG_TAG, mDebugData.toString());
- mDebugData.delete(0, mDebugData.length());
- }
-
- private void logBundleData(Bundle data, String name) {
- if (data != null) {
- final Set<String> keys = data.keySet();
- mDebugData.append(name).append(": ");
- for (String key : keys) {
- log(key, data.get(key));
- }
- } else {
- log(name, "NULL");
- }
- }
-
- private void log(String key, Object data) {
- mDebugData.append(key).append("=").append(data).append(", ");
- }
}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index cf72383..b820cc2 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -46,7 +46,6 @@
// Finish configuring the content view.
getActionBar().setDisplayHomeAsUpEnabled(true);
- setIsDrawerPresent(false);
}
@Override
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index e97a9ac..b4d7526 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -19,9 +19,11 @@
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.AppGlobals;
+import android.app.LoaderManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.Loader;
import android.content.UriPermission;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDataObserver;
@@ -52,8 +54,9 @@
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.Callbacks;
+import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -64,7 +67,8 @@
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
public class AppStorageSettings extends AppInfoWithHeader
- implements OnClickListener, Callbacks, DialogInterface.OnClickListener {
+ implements OnClickListener, Callbacks, DialogInterface.OnClickListener,
+ LoaderManager.LoaderCallbacks<AppStorageStats> {
private static final String TAG = AppStorageSettings.class.getSimpleName();
//internal constants used in Handler
@@ -123,6 +127,7 @@
private boolean mCanClearData = true;
private boolean mHaveSizes = false;
+ private AppStorageStats mLastResult;
private long mLastCodeSize = -1;
private long mLastDataSize = -1;
private long mLastExternalCodeSize = -1;
@@ -139,6 +144,7 @@
private VolumeInfo[] mCandidates;
private AlertDialog.Builder mDialogBuilder;
+ private ApplicationInfo mInfo;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -152,7 +158,7 @@
@Override
public void onResume() {
super.onResume();
- mState.requestSize(mPackageName, mUserId);
+ updateSize();
}
private void setupViews() {
@@ -266,79 +272,13 @@
return Formatter.formatFileSize(getActivity(), size);
}
- private void refreshSizeInfo() {
- if (mAppEntry.size == ApplicationsState.SIZE_INVALID
- || mAppEntry.size == ApplicationsState.SIZE_UNKNOWN) {
- mLastCodeSize = mLastDataSize = mLastCacheSize = mLastTotalSize = -1;
- if (!mHaveSizes) {
- mAppSize.setSummary(mComputingStr);
- mDataSize.setSummary(mComputingStr);
- mCacheSize.setSummary(mComputingStr);
- mTotalSize.setSummary(mComputingStr);
- }
- mClearDataButton.setEnabled(false);
- mClearCacheButton.setEnabled(false);
- } else {
- mHaveSizes = true;
- long codeSize = mAppEntry.codeSize;
- long dataSize = mAppEntry.dataSize;
- if (Environment.isExternalStorageEmulated()) {
- codeSize += mAppEntry.externalCodeSize;
- dataSize += mAppEntry.externalDataSize;
- } else {
- if (mLastExternalCodeSize != mAppEntry.externalCodeSize) {
- mLastExternalCodeSize = mAppEntry.externalCodeSize;
- mExternalCodeSize.setSummary(getSizeStr(mAppEntry.externalCodeSize));
- }
- if (mLastExternalDataSize != mAppEntry.externalDataSize) {
- mLastExternalDataSize = mAppEntry.externalDataSize;
- mExternalDataSize.setSummary(getSizeStr( mAppEntry.externalDataSize));
- }
- }
- if (mLastCodeSize != codeSize) {
- mLastCodeSize = codeSize;
- mAppSize.setSummary(getSizeStr(codeSize));
- }
- if (mLastDataSize != dataSize) {
- mLastDataSize = dataSize;
- mDataSize.setSummary(getSizeStr(dataSize));
- }
- long cacheSize = mAppEntry.cacheSize + mAppEntry.externalCacheSize;
- if (mLastCacheSize != cacheSize) {
- mLastCacheSize = cacheSize;
- mCacheSize.setSummary(getSizeStr(cacheSize));
- }
- if (mLastTotalSize != mAppEntry.size) {
- mLastTotalSize = mAppEntry.size;
- mTotalSize.setSummary(getSizeStr(mAppEntry.size));
- }
-
- if ((mAppEntry.dataSize+ mAppEntry.externalDataSize) <= 0 || !mCanClearData) {
- mClearDataButton.setEnabled(false);
- } else {
- mClearDataButton.setEnabled(true);
- mClearDataButton.setOnClickListener(this);
- }
- if (cacheSize <= 0) {
- mClearCacheButton.setEnabled(false);
- } else {
- mClearCacheButton.setEnabled(true);
- mClearCacheButton.setOnClickListener(this);
- }
- }
- if (mAppsControlDisallowedBySystem) {
- mClearCacheButton.setEnabled(false);
- mClearDataButton.setEnabled(false);
- }
- }
-
@Override
protected boolean refreshUi() {
retrieveAppEntry();
if (mAppEntry == null) {
return false;
}
- refreshSizeInfo();
+ updateUiWithSize(mLastResult);
refreshGrantedUriPermissions();
final VolumeInfo currentVol = getActivity().getPackageManager()
@@ -454,7 +394,7 @@
mClearDataButton.setText(R.string.clear_user_data_text);
if (result == OP_SUCCESSFUL) {
Log.i(TAG, "Cleared user data for package : "+packageName);
- mState.requestSize(mPackageName, mUserId);
+ updateSize();
} else {
mClearDataButton.setEnabled(true);
}
@@ -570,8 +510,91 @@
@Override
public void onPackageSizeChanged(String packageName) {
- if (packageName.equals(mAppEntry.info.packageName)) {
- refreshSizeInfo();
+ }
+
+ @Override
+ public Loader<AppStorageStats> onCreateLoader(int id, Bundle args) {
+ Context context = getContext();
+ return new FetchPackageStorageAsyncLoader(
+ context, new StorageStatsSource(context), mInfo, UserHandle.of(mUserId));
+ }
+
+ @Override
+ public void onLoadFinished(Loader<AppStorageStats> loader, AppStorageStats result) {
+ mLastResult = result;
+ updateUiWithSize(result);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<AppStorageStats> loader) {
+ }
+
+ private void updateSize() {
+ PackageManager packageManager = getPackageManager();
+ try {
+ mInfo = packageManager.getApplicationInfo(mPackageName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, "Could not find package", e);
+ }
+
+ if (mInfo == null) {
+ return;
+ }
+
+ getLoaderManager().restartLoader(1, Bundle.EMPTY, this);
+ }
+
+ private void updateUiWithSize(AppStorageStats result) {
+ if (result == null) {
+ mLastCodeSize = mLastDataSize = mLastCacheSize = mLastTotalSize = -1;
+ if (!mHaveSizes) {
+ mAppSize.setSummary(mComputingStr);
+ mDataSize.setSummary(mComputingStr);
+ mCacheSize.setSummary(mComputingStr);
+ mTotalSize.setSummary(mComputingStr);
+ }
+ mClearDataButton.setEnabled(false);
+ mClearCacheButton.setEnabled(false);
+ } else {
+ mHaveSizes = true;
+ long codeSize = result.getCodeBytes();
+ long dataSize = result.getDataBytes();
+ if (mLastCodeSize != codeSize) {
+ mLastCodeSize = codeSize;
+ mAppSize.setSummary(getSizeStr(codeSize));
+ }
+ if (mLastDataSize != dataSize) {
+ mLastDataSize = dataSize;
+ mDataSize.setSummary(getSizeStr(dataSize));
+ }
+ long cacheSize = result.getCacheBytes();
+ if (mLastCacheSize != cacheSize) {
+ mLastCacheSize = cacheSize;
+ mCacheSize.setSummary(getSizeStr(cacheSize));
+ }
+
+ long totalSize = codeSize + dataSize + cacheSize;
+ if (mLastTotalSize != totalSize) {
+ mLastTotalSize = totalSize;
+ mTotalSize.setSummary(getSizeStr(totalSize));
+ }
+
+ if (dataSize <= 0 || !mCanClearData) {
+ mClearDataButton.setEnabled(false);
+ } else {
+ mClearDataButton.setEnabled(true);
+ mClearDataButton.setOnClickListener(this);
+ }
+ if (cacheSize <= 0) {
+ mClearCacheButton.setEnabled(false);
+ } else {
+ mClearCacheButton.setEnabled(true);
+ mClearCacheButton.setOnClickListener(this);
+ }
+ }
+ if (mAppsControlDisallowedBySystem) {
+ mClearCacheButton.setEnabled(false);
+ mClearDataButton.setEnabled(false);
}
}
@@ -586,7 +609,7 @@
break;
case MSG_CLEAR_CACHE:
// Refresh size info
- mState.requestSize(mPackageName, mUserId);
+ updateSize();
break;
}
}
diff --git a/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java b/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java
new file mode 100644
index 0000000..3477299
--- /dev/null
+++ b/src/com/android/settings/applications/FetchPackageStorageAsyncLoader.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.UserHandle;
+
+import com.android.internal.util.Preconditions;
+import com.android.settings.utils.AsyncLoader;
+import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
+
+/**
+ * Fetches the storage stats using the StorageStatsManager for a given package and user tuple.
+ */
+public class FetchPackageStorageAsyncLoader extends AsyncLoader<AppStorageStats> {
+ private final StorageStatsSource mSource;
+ private final ApplicationInfo mInfo;
+ private final UserHandle mUser;
+
+ public FetchPackageStorageAsyncLoader(Context context, @NonNull StorageStatsSource source,
+ @NonNull ApplicationInfo info, @NonNull UserHandle user) {
+ super(context);
+ mSource = Preconditions.checkNotNull(source);
+ mInfo = info;
+ mUser = user;
+ }
+
+ @Override
+ public AppStorageStats loadInBackground() {
+ return mSource.getStatsForPackage(mInfo.volumeUuid, mInfo.packageName, mUser);
+ }
+
+ @Override
+ protected void onDiscardResult(AppStorageStats result) {
+ }
+}
diff --git a/src/com/android/settings/applications/assist/ManageAssist.java b/src/com/android/settings/applications/assist/ManageAssist.java
index b1ca5c6..a54f0ff 100644
--- a/src/com/android/settings/applications/assist/ManageAssist.java
+++ b/src/com/android/settings/applications/assist/ManageAssist.java
@@ -50,15 +50,7 @@
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
- final Lifecycle lifecycle = getLifecycle();
- final List<PreferenceController> controllers = new ArrayList<>();
- controllers.add(new DefaultAssistPreferenceController(context));
- controllers.add(new GestureAssistPreferenceController(context));
- controllers.add(new AssistContextPreferenceController(context, lifecycle));
- controllers.add(new AssistScreenshotPreferenceController(context, lifecycle));
- controllers.add(new AssistFlashScreenPreferenceController(context, lifecycle));
- controllers.add(new DefaultVoiceInputPreferenceController(context, lifecycle));
- return controllers;
+ return buildPreferenceControllers(context, getLifecycle());
}
@Override
@@ -74,6 +66,19 @@
.setTitle(R.string.assist_footer);
}
+ private static List<PreferenceController> buildPreferenceControllers(Context context,
+ Lifecycle lifecycle) {
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new DefaultAssistPreferenceController(context));
+ controllers.add(new GestureAssistPreferenceController(context));
+ controllers.add(new AssistContextPreferenceController(context, lifecycle));
+ controllers.add(new AssistScreenshotPreferenceController(context, lifecycle));
+ controllers.add(new AssistFlashScreenPreferenceController(context, lifecycle));
+ controllers.add(new DefaultVoiceInputPreferenceController(context, lifecycle));
+ return controllers;
+ }
+
+
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
@@ -85,19 +90,8 @@
}
@Override
- public List<String> getNonIndexableKeys(Context context) {
- List<String> result = new ArrayList<>();
- new DefaultAssistPreferenceController(context).updateNonIndexableKeys(result);
- new GestureAssistPreferenceController(context).updateNonIndexableKeys(result);
- new AssistContextPreferenceController(context, null)
- .updateNonIndexableKeys(result);
- new AssistScreenshotPreferenceController(context, null)
- .updateNonIndexableKeys(result);
- new AssistFlashScreenPreferenceController(context, null)
- .updateNonIndexableKeys(result);
- new DefaultVoiceInputPreferenceController(context, null)
- .updateNonIndexableKeys(result);
- return result;
+ public List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, null /* lifecycle */);
}
};
}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index e0bb8bc..e0ed1eb 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -53,7 +53,6 @@
import com.android.settings.applications.DrawOverlayDetails;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.ManageApplications;
-import com.android.settings.applications.assist.ManageAssist;
import com.android.settings.applications.ManageDomainUrls;
import com.android.settings.applications.NotificationApps;
import com.android.settings.applications.PictureInPictureSettings;
@@ -62,6 +61,7 @@
import com.android.settings.applications.UsageAccessDetails;
import com.android.settings.applications.VrListenerSettings;
import com.android.settings.applications.WriteSettingsDetails;
+import com.android.settings.applications.assist.ManageAssist;
import com.android.settings.bluetooth.BluetoothSettings;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
import com.android.settings.dashboard.SupportFragment;
@@ -84,11 +84,9 @@
import com.android.settings.gestures.DoubleTapPowerSettings;
import com.android.settings.gestures.DoubleTapScreenSettings;
import com.android.settings.gestures.DoubleTwistGestureSettings;
-import com.android.settings.gestures.GestureSettings;
import com.android.settings.gestures.PickupGestureSettings;
import com.android.settings.gestures.SwipeToNotificationSettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.inputmethod.KeyboardLayoutPickerFragment;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.inputmethod.SpellCheckersSettings;
@@ -104,7 +102,6 @@
import com.android.settings.notification.ConfigureNotificationSettings;
import com.android.settings.notification.NotificationAccessSettings;
import com.android.settings.notification.NotificationStation;
-import com.android.settings.notification.OtherSoundSettings;
import com.android.settings.notification.SoundSettings;
import com.android.settings.notification.ZenAccessSettings;
import com.android.settings.notification.ZenModeAutomationSettings;
@@ -147,7 +144,6 @@
VpnSettings.class.getName(),
DateTimeSettings.class.getName(),
LocaleListEditor.class.getName(),
- InputMethodAndLanguageSettings.class.getName(),
AvailableVirtualKeyboardFragment.class.getName(),
LanguageAndInputSettings.class.getName(),
SpellCheckersSettings.class.getName(),
@@ -180,7 +176,6 @@
WifiDisplaySettings.class.getName(),
PowerUsageSummary.class.getName(),
AccountSyncSettings.class.getName(),
- GestureSettings.class.getName(),
AssistGestureSettings.class.getName(),
SwipeToNotificationSettings.class.getName(),
DoubleTapPowerSettings.class.getName(),
@@ -208,7 +203,6 @@
BatterySaverSettings.class.getName(),
AppNotificationSettings.class.getName(),
ChannelNotificationSettings.class.getName(),
- OtherSoundSettings.class.getName(),
ApnSettings.class.getName(),
ApnEditor.class.getName(),
WifiCallingSettings.class.getName(),
@@ -263,11 +257,9 @@
Settings.StorageSettingsActivity.class.getName(),
Settings.ManageApplicationsActivity.class.getName(),
Settings.PowerUsageSummaryActivity.class.getName(),
- Settings.GestureSettingsActivity.class.getName(),
//personal_section
Settings.LocationSettingsActivity.class.getName(),
Settings.SecuritySettingsActivity.class.getName(),
- Settings.InputMethodAndLanguageSettingsActivity.class.getName(),
Settings.UserSettingsActivity.class.getName(),
//system_section
Settings.DateTimeSettingsActivity.class.getName(),
@@ -281,8 +273,9 @@
// Home page
Settings.NetworkDashboardActivity.class.getName(),
Settings.ConnectedDeviceDashboardActivity.class.getName(),
+ Settings.WifiDisplaySettingsActivity.class.getName(),
Settings.AppAndNotificationDashboardActivity.class.getName(),
- "com.android.settings.BatteryDashboardAlias",
+ Settings.StorageDashboardActivity.class.getName(),
"com.android.settings.SoundDashboardAlias",
"com.android.settings.SecurityDashboardAlias",
"com.android.settings.UsersDashboardAlias",
@@ -296,9 +289,5 @@
"com.android.settings.DataUsageDashboardAlias",
// Home page > System
Settings.LanguageAndInputSettingsActivity.class.getName(),
- "com.android.settings.DateTimeDashboardAlias",
- "com.android.settings.AccessibilityDashboardAlias",
- "com.android.settings.AboutDeviceDashboardAlias",
- "com.android.settings.EnterprisePrivacyDashboardAlias",
};
}
diff --git a/src/com/android/settings/dashboard/DashboardContainerFragment.java b/src/com/android/settings/dashboard/DashboardContainerFragment.java
deleted file mode 100644
index b3ee808..0000000
--- a/src/com/android/settings/dashboard/DashboardContainerFragment.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.dashboard;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.Context;
-import android.os.Bundle;
-import android.support.v13.app.FragmentPagerAdapter;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.core.InstrumentedFragment;
-import com.android.settings.core.instrumentation.MetricsFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.overlay.SupportFeatureProvider;
-import com.android.settings.widget.RtlCompatibleViewPager;
-import com.android.settings.widget.SlidingTabLayout;
-import com.android.settingslib.drawer.SettingsDrawerActivity;
-
-/**
- * Container for Dashboard fragments.
- */
-public final class DashboardContainerFragment extends InstrumentedFragment {
-
- public static final String EXTRA_SELECT_SETTINGS_TAB = ":settings:select_settings_tab";
-
- private static final String ARG_SUPPORT_TAB = "SUPPORT";
- private static final String ARG_SUMMARY_TAB = "SUMMARY";
- private static final int INDEX_SUMMARY_FRAGMENT = 0;
- private static final int INDEX_SUPPORT_FRAGMENT = 1;
-
- private RtlCompatibleViewPager mViewPager;
- private View mHeaderView;
- private DashboardViewPagerAdapter mPagerAdapter;
-
- @Override
- public int getMetricsCategory() {
- return MetricsProto.MetricsEvent.DASHBOARD_CONTAINER;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setHasOptionsMenu(true);
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
- final View content = inflater.inflate(R.layout.dashboard_container, parent, false);
- mViewPager = (RtlCompatibleViewPager) content.findViewById(R.id.pager);
- mPagerAdapter = new DashboardViewPagerAdapter(getContext(),
- getChildFragmentManager(), mViewPager);
- mViewPager.setAdapter(mPagerAdapter);
- mViewPager.addOnPageChangeListener(
- new TabChangeListener((SettingsActivity) getActivity(), mMetricsFeatureProvider));
-
- // check if support tab needs to be selected
- final String selectedTab = getArguments().
- getString(EXTRA_SELECT_SETTINGS_TAB, ARG_SUMMARY_TAB);
- if (TextUtils.equals(selectedTab, ARG_SUPPORT_TAB)) {
- mViewPager.setCurrentItem(INDEX_SUPPORT_FRAGMENT);
- } else {
- mViewPager.setCurrentItem(INDEX_SUMMARY_FRAGMENT);
- }
-
- mHeaderView = inflater.inflate(R.layout.dashboard_container_header, parent, false);
- ((SlidingTabLayout) mHeaderView).setViewPager(mViewPager);
- return content;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (mPagerAdapter.getCount() > 1) {
- final Activity activity = getActivity();
- if (activity instanceof SettingsDrawerActivity) {
- ((SettingsDrawerActivity) getActivity()).setContentHeaderView(mHeaderView);
- }
- }
- }
-
- private static final class DashboardViewPagerAdapter extends FragmentPagerAdapter {
-
- private final Context mContext;
- private final SupportFeatureProvider mSupportFeatureProvider;
- private final RtlCompatibleViewPager mViewPager;
-
- public DashboardViewPagerAdapter(Context context, FragmentManager fragmentManager,
- RtlCompatibleViewPager viewPager) {
- super(fragmentManager);
- mContext = context;
- mSupportFeatureProvider =
- FeatureFactory.getFactory(context).getSupportFeatureProvider(context);
- mViewPager = viewPager;
- }
-
- @Override
- public CharSequence getPageTitle(int position) {
- switch (position) {
- case INDEX_SUMMARY_FRAGMENT:
- return mContext.getString(R.string.page_tab_title_summary);
- case INDEX_SUPPORT_FRAGMENT:
- return mContext.getString(R.string.page_tab_title_support);
- }
- return super.getPageTitle(position);
- }
-
- @Override
- public Fragment getItem(int position) {
- switch (position) {
- case INDEX_SUMMARY_FRAGMENT:
- return new DashboardSummary();
- case INDEX_SUPPORT_FRAGMENT:
- return new SupportFragment();
- default:
- throw new IllegalArgumentException(
- String.format(
- "Position %d does not map to a valid dashboard fragment",
- position));
- }
- }
-
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- return super.instantiateItem(container,
- mViewPager.getRtlAwareIndex(position));
- }
-
- @Override
- public int getCount() {
- return mSupportFeatureProvider == null ? 1 : 2;
- }
- }
-
- private static final class TabChangeListener
- implements RtlCompatibleViewPager.OnPageChangeListener {
-
- private final SettingsActivity mActivity;
- private final MetricsFeatureProvider mMetricsFeatureProvider;
-
- public TabChangeListener(SettingsActivity activity,
- MetricsFeatureProvider metricsFeatureProvider) {
- mActivity = activity;
- mMetricsFeatureProvider = metricsFeatureProvider;
- }
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- // Do nothing.
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- // Do nothing
- }
-
- @Override
- public void onPageSelected(int position) {
- switch (position) {
- case INDEX_SUMMARY_FRAGMENT:
- mMetricsFeatureProvider.action(
- mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUMMARY);
- mActivity.setDisplaySearchMenu(true);
- break;
- case INDEX_SUPPORT_FRAGMENT:
- mMetricsFeatureProvider.action(
- mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUPPORT_FRAGMENT);
- mActivity.setDisplaySearchMenu(false);
- break;
- }
- }
- }
-}
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index 4d0b8cf..8935ee3 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -28,7 +28,6 @@
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.language.LanguageAndInputSettings;
import com.android.settings.network.NetworkDashboardFragment;
import com.android.settings.notification.SoundSettings;
@@ -80,8 +79,6 @@
CategoryKey.CATEGORY_ACCOUNT);
PARENT_TO_CATEGORY_KEY_MAP.put(
SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
- PARENT_TO_CATEGORY_KEY_MAP.put(InputMethodAndLanguageSettings.class.getName(),
- CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndInputSettings.class.getName(),
CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettings.class.getName(),
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index a9fd21b..6c492cc 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -36,6 +36,7 @@
import com.android.settings.Utils;
import com.android.settings.core.PreferenceController;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.core.lifecycle.LifecycleObserver;
import com.android.settings.core.lifecycle.events.OnResume;
import com.android.settings.overlay.FeatureFactory;
@@ -61,12 +62,16 @@
private int mDevHitCountdown;
private boolean mProcessingLastDevHit;
- public BuildNumberPreferenceController(Context context, Activity activity, Fragment fragment) {
+ public BuildNumberPreferenceController(Context context, Activity activity, Fragment fragment,
+ Lifecycle lifecycle) {
super(context);
mActivity = activity;
mFragment = fragment;
- mUm = UserManager.get(activity);
+ mUm = UserManager.get(context);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
}
@Override
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 72e1493..298a7ad 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -184,16 +184,19 @@
}
@Override
- public List<String> getNonIndexableKeys(Context context) {
- if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
- .isEnabled()) {
- return null;
- }
- final ManageStoragePreferenceController controller =
- new ManageStoragePreferenceController(context);
- final List<String> keys = new ArrayList<>();
- controller.updateNonIndexableKeys(keys);
- return keys;
+ public List<PreferenceController> getPreferenceControllers(Context context) {
+ final StorageManager sm = context.getSystemService(StorageManager.class);
+ final UserManagerWrapper userManager =
+ new UserManagerWrapperImpl(context.getSystemService(UserManager.class));
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new StorageSummaryDonutPreferenceController(context));
+ controllers.add(new StorageItemPreferenceController(context, null /* host */,
+ null /* volume */, new StorageManagerVolumeProvider(sm)));
+ controllers.addAll(SecondaryUserController.getSecondaryUserControllers(
+ context, userManager));
+ controllers.add(new ManageStoragePreferenceController(context));
+ return controllers;
}
+
};
}
diff --git a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
index 0bf43e2..4fcacd8 100644
--- a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
@@ -28,8 +28,6 @@
import com.android.settings.Utils;
import com.android.settings.core.PreferenceController;
-import java.util.List;
-
import static android.content.Context.CARRIER_CONFIG_SERVICE;
public class SystemUpdatePreferenceController extends PreferenceController {
@@ -67,14 +65,6 @@
}
@Override
- public void updateNonIndexableKeys(List<String> keys) {
- // TODO: system update needs to be fixed for non-owner user b/22760654
- if (!isAvailable()) {
- keys.add(KEY_SYSTEM_UPDATE_SETTINGS);
- }
- }
-
- @Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (KEY_SYSTEM_UPDATE_SETTINGS.equals(preference.getKey())) {
CarrierConfigManager configManager =
diff --git a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
index d5d96a5..f54c685 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
@@ -23,7 +23,6 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.UserInfo;
import android.os.UserHandle;
-import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
@@ -75,27 +74,31 @@
Log.d(TAG, "Loading apps");
List<ApplicationInfo> applicationInfos =
mPackageManager.getInstalledApplicationsAsUser(0, userId);
- ArraySet<Integer> seenUid = new ArraySet<>(); // some apps share a uid
AppsStorageResult result = new AppsStorageResult();
+ UserHandle myUser = UserHandle.of(userId);
for (int i = 0, size = applicationInfos.size(); i < size; i++) {
ApplicationInfo app = applicationInfos.get(i);
- if (seenUid.contains(app.uid)) {
- continue;
- }
- seenUid.add(app.uid);
+ StorageStatsSource.AppStorageStats stats =
+ mStatsManager.getStatsForPackage(mUuid, app.packageName, myUser);
- StorageStatsSource.AppStorageStats stats = mStatsManager.getStatsForUid(mUuid, app.uid);
- // Note: This omits cache intentionally -- we are not attributing it to the apps.
- long appSize = stats.getCodeBytes() + stats.getDataBytes();
+ long attributedAppSizeInBytes = stats.getDataBytes();
+ // This matches how the package manager calculates sizes -- by zeroing out code sizes of
+ // system apps which are not updated. My initial tests suggest that this results in the
+ // original code size being counted for updated system apps when they shouldn't, but
+ // I am not sure how to avoid this problem without specifically going in to find that
+ // code size.
+ if (!app.isSystemApp() || app.isUpdatedSystemApp()) {
+ attributedAppSizeInBytes += stats.getCodeBytes();
+ }
switch (app.category) {
case CATEGORY_GAME:
- result.gamesSize += appSize;
+ result.gamesSize += attributedAppSizeInBytes;
break;
case CATEGORY_AUDIO:
- result.musicAppsSize += appSize;
+ result.musicAppsSize += attributedAppSizeInBytes;
break;
default:
- result.otherAppsSize += appSize;
+ result.otherAppsSize += attributedAppSizeInBytes;
break;
}
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 826ec09..fc96340 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -71,9 +71,11 @@
mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH);
mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST);
- mPowerUsageFeatureProvider = FeatureFactory.getFactory(getContext())
- .getPowerUsageFeatureProvider(getContext());
- mPackageManager = getContext().getPackageManager();
+
+ final Context context = getContext();
+ mPowerUsageFeatureProvider = FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context);
+ mPackageManager = context.getPackageManager();
}
@Override
@@ -137,9 +139,9 @@
return UsageType.USER;
} else if (drainType == DrainType.CELL) {
return UsageType.CELL;
- } else if (uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) {
+ } else if (mPowerUsageFeatureProvider.isTypeSystem(sipper)) {
return UsageType.SYSTEM;
- } else if (mPowerUsageFeatureProvider.isTypeService(sipper.mPackages)) {
+ } else if (mPowerUsageFeatureProvider.isTypeService(sipper)) {
return UsageType.SERVICE;
} else {
return UsageType.APP;
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index 3dab38e..7cb6c00 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -17,38 +17,44 @@
package com.android.settings.fuelgauge;
import android.content.Intent;
+import com.android.internal.os.BatterySipper;
/**
* Feature Provider used in power usage
*/
public interface PowerUsageFeatureProvider {
- /**
- * Check whether location setting is enabled
- */
- boolean isLocationSettingEnabled(String[] packages);
+ /**
+ * Check whether location setting is enabled
+ */
+ boolean isLocationSettingEnabled(String[] packages);
- /**
- * Check whether additional battery info feature is enabled.
- */
- boolean isAdditionalBatteryInfoEnabled();
+ /**
+ * Check whether additional battery info feature is enabled.
+ */
+ boolean isAdditionalBatteryInfoEnabled();
- /**
- * Gets an {@link Intent} to show additional battery info.
- */
- Intent getAdditionalBatteryInfoIntent();
+ /**
+ * Gets an {@link Intent} to show additional battery info.
+ */
+ Intent getAdditionalBatteryInfoIntent();
- /**
- * Check whether advanced ui is enabled
- */
- boolean isAdvancedUiEnabled();
+ /**
+ * Check whether advanced ui is enabled
+ */
+ boolean isAdvancedUiEnabled();
- /**
- * Check whether it is type service
- */
- boolean isTypeService(String[] packages);
+ /**
+ * Check whether it is type service
+ */
+ boolean isTypeService(BatterySipper sipper);
- /**
- * Check whether the toggle for power accounting is enabled
- */
- boolean isPowerAccountingToggleEnabled();
+ /**
+ * Check whether it is type system
+ */
+ boolean isTypeSystem(BatterySipper sipper);
+
+ /**
+ * Check whether the toggle for power accounting is enabled
+ */
+ boolean isPowerAccountingToggleEnabled();
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 7f843e2..b8c40fd 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -16,9 +16,49 @@
package com.android.settings.fuelgauge;
+import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Process;
+import com.android.internal.os.BatterySipper;
+import com.android.internal.util.ArrayUtils;
public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {
+
+ private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar";
+ private static final String PACKAGE_MEDIA_PROVIDER = "com.android.providers.media";
+ private static final String[] PACKAGES_SYSTEM = {PACKAGE_MEDIA_PROVIDER,
+ PACKAGE_CALENDAR_PROVIDER};
+
+ protected PackageManager mPackageManager;
+
+ public PowerUsageFeatureProviderImpl(Context context) {
+ mPackageManager = context.getPackageManager();
+ }
+
+ @Override
+ public boolean isTypeService(BatterySipper sipper) {
+ return false;
+ }
+
+ @Override
+ public boolean isTypeSystem(BatterySipper sipper) {
+ final int uid = sipper.uidObj == null ? -1 : sipper.getUid();
+ sipper.mPackages = mPackageManager.getPackagesForUid(uid);
+ // Classify all the sippers to type system if the range of uid is 0...FIRST_APPLICATION_UID
+ if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) {
+ return true;
+ } else if (sipper.mPackages != null) {
+ for (final String packageName : sipper.mPackages) {
+ if (ArrayUtils.contains(PACKAGES_SYSTEM, packageName)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
@Override
public boolean isLocationSettingEnabled(String[] packages) {
return false;
@@ -40,11 +80,6 @@
}
@Override
- public boolean isTypeService(String[] packages) {
- return false;
- }
-
- @Override
public boolean isPowerAccountingToggleEnabled() {
return false;
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 5f0e6e0..50c3f06 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -99,16 +99,17 @@
@VisibleForTesting
boolean mShowAllApps = false;
-
+ @VisibleForTesting
Preference mScreenUsagePref;
@VisibleForTesting
Preference mScreenConsumptionPref;
@VisibleForTesting
Preference mCellularNetworkPref;
+ @VisibleForTesting
+ PowerUsageFeatureProvider mPowerFeatureProvider;
private LayoutPreference mBatteryLayoutPref;
private PreferenceGroup mAppListGroup;
-
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
@Override
@@ -121,6 +122,8 @@
mScreenUsagePref = findPreference(KEY_SCREEN_USAGE);
mScreenConsumptionPref = findPreference(KEY_SCREEN_CONSUMPTION);
mCellularNetworkPref = findPreference(KEY_CELLULAR_NETWORK);
+
+ initFeatureProvider();
}
@Override
@@ -193,14 +196,11 @@
menu.add(Menu.NONE, MENU_HIGH_POWER_APPS, Menu.NONE, R.string.high_power_apps);
- PowerUsageFeatureProvider powerUsageFeatureProvider =
- FeatureFactory.getFactory(getContext()).getPowerUsageFeatureProvider(getContext());
- if (powerUsageFeatureProvider != null &&
- powerUsageFeatureProvider.isAdditionalBatteryInfoEnabled()) {
+ if (mPowerFeatureProvider.isAdditionalBatteryInfoEnabled()) {
menu.add(Menu.NONE, MENU_ADDITIONAL_BATTERY_INFO,
Menu.NONE, R.string.additional_battery_info);
}
- if (powerUsageFeatureProvider.isPowerAccountingToggleEnabled()) {
+ if (mPowerFeatureProvider.isPowerAccountingToggleEnabled()) {
menu.add(Menu.NONE, MENU_TOGGLE_APPS, Menu.NONE,
mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
}
@@ -579,12 +579,12 @@
@VisibleForTesting
boolean shouldHideSipper(BatterySipper sipper) {
final DrainType drainType = sipper.drainType;
- final int uid = sipper.getUid();
return drainType == DrainType.IDLE || drainType == DrainType.CELL
- || drainType == DrainType.SCREEN || uid == Process.ROOT_UID
- || uid == Process.SYSTEM_UID
- || (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP;
+ || drainType == DrainType.SCREEN || drainType == DrainType.BLUETOOTH
+ || (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP
+ || mPowerFeatureProvider.isTypeService(sipper)
+ || mPowerFeatureProvider.isTypeSystem(sipper);
}
@VisibleForTesting
@@ -620,6 +620,13 @@
mBatteryLayoutPref = layoutPreference;
}
+ @VisibleForTesting
+ void initFeatureProvider() {
+ final Context context = getContext();
+ mPowerFeatureProvider = FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context);
+ }
+
private static List<BatterySipper> getFakeStats() {
ArrayList<BatterySipper> stats = new ArrayList<>();
float use = 5;
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
deleted file mode 100644
index 8c038ff..0000000
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.gestures;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.provider.SearchIndexableResource;
-import android.support.v7.preference.Preference;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.internal.hardware.AmbientDisplayConfiguration;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Top level fragment for gesture settings.
- * This will create individual switch preference for each gesture and handle updates when each
- * preference is updated
- */
-public class GestureSettings extends DashboardFragment {
-
- private static final String TAG = "GestureSettings";
- private List<GesturePreference> mPreferences;
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.gesture_settings;
- }
-
- @Override
- protected List<PreferenceController> getPreferenceControllers(Context context) {
- final AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
- final List<PreferenceController> controllers = new ArrayList<>();
- final Lifecycle lifecycle = getLifecycle();
- controllers.add(new AssistGesturePreferenceController(context, lifecycle));
- controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle));
- controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle));
- controllers.add(new DoubleTwistPreferenceController(context, lifecycle));
- controllers.add(new PickupGesturePreferenceController(
- context, lifecycle, ambientConfig, UserHandle.myUserId()));
- controllers.add(new DoubleTapScreenPreferenceController(
- context, lifecycle, ambientConfig, UserHandle.myUserId()));
- return controllers;
- }
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- super.onCreatePreferences(savedInstanceState, rootKey);
- mPreferences = new ArrayList();
- addPreferenceToTrackingList(AssistGesturePreferenceController.class);
- addPreferenceToTrackingList(SwipeToNotificationPreferenceController.class);
- addPreferenceToTrackingList(DoubleTapScreenPreferenceController.class);
- addPreferenceToTrackingList(DoubleTwistPreferenceController.class);
- addPreferenceToTrackingList(PickupGesturePreferenceController.class);
- addPreferenceToTrackingList(DoubleTapPowerPreferenceController.class);
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = super.onCreateView(inflater, container, savedInstanceState);
- RecyclerView listview = getListView();
- listview.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
- for (GesturePreference pref : mPreferences) {
- pref.setScrolling(true);
- }
- } else if (newState == RecyclerView.SCROLL_STATE_IDLE) {
- for (GesturePreference pref : mPreferences) {
- pref.setScrolling(false);
- }
- }
- }
-
- @Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
- }
- });
- return view;
- }
-
- @Override
- public void onStart() {
- super.onStart();
- for (GesturePreference preference : mPreferences) {
- preference.onViewVisible();
- }
- }
-
- @Override
- public void onStop() {
- super.onStop();
- for (GesturePreference preference : mPreferences) {
- preference.onViewInvisible();
- }
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getHelpResource() {
- return R.string.help_url_gestures;
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.SETTINGS_GESTURES;
- }
-
- private <T extends PreferenceController> void addPreferenceToTrackingList(Class<T> clazz) {
- final PreferenceController controller = getPreferenceController(clazz);
- final Preference preference = findPreference(controller.getPreferenceKey());
- if (preference != null && preference instanceof GesturePreference) {
- mPreferences.add((GesturePreference) preference);
- }
- }
-}
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
deleted file mode 100644
index 121af98..0000000
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.inputmethod;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.hardware.input.InputDeviceIdentifier;
-import android.speech.tts.TtsEngines;
-import android.support.v7.preference.Preference;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.Settings.KeyboardLayoutPickerActivity;
-import com.android.settings.Utils;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.language.PhoneLanguagePreferenceController;
-import com.android.settings.language.TtsPreferenceController;
-import com.android.settings.language.UserDictionaryPreferenceController;
-import com.android.settings.localepicker.LocaleFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settings.search.SearchIndexableRaw;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @deprecated New features should use {@code InputAndGestureSettings} and
- * {@code LanguageAndRegionSettings} instead.
- */
-@Deprecated
-public class InputMethodAndLanguageSettings extends DashboardFragment
- implements KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable {
-
- private static final String TAG = "IMEAndLanguageSetting";
-
- private Intent mIntentWaitingForResult;
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.INPUTMETHOD_LANGUAGE;
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.language_settings;
- }
-
- @Override
- protected List<PreferenceController> getPreferenceControllers(Context context) {
- final GameControllerPreferenceController gameControllerPreferenceController =
- new GameControllerPreferenceController(context);
- getLifecycle().addObserver(gameControllerPreferenceController);
-
- final List<PreferenceController> list = new ArrayList<>();
- list.add(gameControllerPreferenceController);
- list.add(new PhoneLanguagePreferenceController(context));
- list.add(new SpellCheckerPreferenceController(context));
- list.add(new UserDictionaryPreferenceController(context));
- list.add(new TtsPreferenceController(context, new TtsEngines(context)));
- return list;
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- // Input Method stuff
- if (Utils.isMonkeyRunning()) {
- return false;
- }
- return super.onPreferenceTreeClick(preference);
- }
-
- private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) {
- KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment)
- getFragmentManager().findFragmentByTag("keyboardLayout");
- if (fragment == null) {
- fragment = new KeyboardLayoutDialogFragment(inputDeviceIdentifier);
- fragment.setTargetFragment(this, 0);
- fragment.show(getActivity().getFragmentManager(), "keyboardLayout");
- }
- }
-
- @Override
- public void onSetupKeyboardLayouts(InputDeviceIdentifier inputDeviceIdentifier) {
- final Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setClass(getActivity(), KeyboardLayoutPickerActivity.class);
- intent.putExtra(KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER,
- inputDeviceIdentifier);
- mIntentWaitingForResult = intent;
- startActivityForResult(intent, 0);
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- if (mIntentWaitingForResult != null) {
- InputDeviceIdentifier inputDeviceIdentifier = mIntentWaitingForResult
- .getParcelableExtra(KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER);
- mIntentWaitingForResult = null;
- showKeyboardLayoutDialog(inputDeviceIdentifier);
- }
- }
-
- private static class SummaryProvider implements SummaryLoader.SummaryProvider {
-
- private final SummaryLoader mSummaryLoader;
- private LocaleFeatureProvider mLocaleFeatureProvider;
-
- public SummaryProvider(Context context, SummaryLoader summaryLoader) {
- mSummaryLoader = summaryLoader;
- mLocaleFeatureProvider = FeatureFactory.getFactory(context).getLocaleFeatureProvider();
- }
-
- @Override
- public void setListening(boolean listening) {
- if (listening) {
- String localeNames = mLocaleFeatureProvider.getLocaleNames();
- mSummaryLoader.setSummary(this, localeNames);
- }
- }
- }
-
- public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
- = new SummaryLoader.SummaryProviderFactory() {
- @Override
- public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
- SummaryLoader summaryLoader) {
- return new SummaryProvider(activity, summaryLoader);
- }
- };
-
- public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
- @Override
- public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
- List<SearchIndexableRaw> indexables = new ArrayList<>();
-
- final String screenTitle = context.getString(R.string.language_keyboard_settings_title);
-
- // Locale picker.
- final PhoneLanguagePreferenceController mLanguagePrefController =
- new PhoneLanguagePreferenceController(context);
- if (mLanguagePrefController.isAvailable()) {
- String localeNames = FeatureFactory.getFactory(context).getLocaleFeatureProvider()
- .getLocaleNames();
- SearchIndexableRaw indexable = new SearchIndexableRaw(context);
- indexable.key = mLanguagePrefController.getPreferenceKey();
- indexable.title = context.getString(R.string.phone_language);
- indexable.summaryOn = localeNames;
- indexable.summaryOff = localeNames;
- indexable.screenTitle = screenTitle;
- indexables.add(indexable);
- }
-
- // Spell checker.
- SearchIndexableRaw indexable = new SearchIndexableRaw(context);
- indexable.key = SpellCheckerPreferenceController.KEY_SPELL_CHECKERS;
- indexable.title = context.getString(R.string.spellcheckers_settings_title);
- indexable.screenTitle = screenTitle;
- indexable.keywords = context.getString(R.string.keywords_spell_checker);
- indexables.add(indexable);
-
- // User dictionary.
- if (UserDictionaryList.getUserDictionaryLocalesSet(context) != null) {
- indexable = new SearchIndexableRaw(context);
- indexable.key = "user_dict_settings";
- indexable.title = context.getString(R.string.user_dict_settings_title);
- indexable.screenTitle = screenTitle;
- indexables.add(indexable);
- }
-
- // Keyboard settings.
- indexable = new SearchIndexableRaw(context);
- indexable.key = "keyboard_settings";
- indexable.title = context.getString(R.string.keyboard_settings_category);
- indexable.screenTitle = screenTitle;
- indexable.keywords = context.getString(R.string.keywords_keyboard_and_ime);
- indexables.add(indexable);
-
- if (!PhysicalKeyboardFragment.getPhysicalFullKeyboards().isEmpty()) {
- // Hard keyboard category.
- indexable = new SearchIndexableRaw(context);
- indexable.key = "builtin_keyboard_settings";
- indexable.title = context.getString(R.string.builtin_keyboard_settings_title);
- indexable.screenTitle = screenTitle;
- indexables.add(indexable);
- }
-
- // Text-to-speech.
- TtsEngines ttsEngines = new TtsEngines(context);
- if (!ttsEngines.getEngines().isEmpty()) {
- indexable = new SearchIndexableRaw(context);
- indexable.key = "tts_settings";
- indexable.title = context.getString(R.string.tts_settings_title);
- indexable.screenTitle = screenTitle;
- indexable.keywords = context.getString(R.string.keywords_text_to_speech_output);
- indexables.add(indexable);
- }
-
- // Pointer settings.
- indexable = new SearchIndexableRaw(context);
- indexable.key = "pointer_settings_category";
- indexable.title = context.getString(R.string.pointer_settings_category);
- indexable.screenTitle = screenTitle;
- indexables.add(indexable);
-
- indexable = new SearchIndexableRaw(context);
- indexable.key = "pointer_speed";
- indexable.title = context.getString(R.string.pointer_speed);
- indexable.screenTitle = screenTitle;
- indexables.add(indexable);
-
- // Game controllers.
- if (!new GameControllerPreferenceController(context).isAvailable()) {
- indexable = new SearchIndexableRaw(context);
- indexable.key = GameControllerPreferenceController.PREF_KEY;
- indexable.title = context.getString(R.string.vibrate_input_devices);
- indexable.summaryOn = context.getString(R.string.vibrate_input_devices_summary);
- indexable.summaryOff = context.getString(R.string.vibrate_input_devices_summary);
- indexable.screenTitle = screenTitle;
- indexables.add(indexable);
- }
-
- return indexables;
- }
- };
-}
diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java
index 236fa96..5b8d55e 100644
--- a/src/com/android/settings/network/TetherPreferenceController.java
+++ b/src/com/android/settings/network/TetherPreferenceController.java
@@ -21,7 +21,6 @@
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.UserHandle;
-import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -30,7 +29,6 @@
import com.android.settings.TetherSettings;
import com.android.settings.core.PreferenceController;
-import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import static android.os.UserManager.DISALLOW_CONFIG_TETHERING;
@@ -45,7 +43,6 @@
private final AtomicReference<BluetoothPan> mBluetoothPan;
private final ConnectivityManager mConnectivityManager;
private final BluetoothAdapter mBluetoothAdapter;
- private final UserManager mUserManager;
private final BluetoothProfile.ServiceListener mBtProfileServiceListener =
new android.bluetooth.BluetoothProfile.ServiceListener() {
@@ -68,7 +65,6 @@
mBluetoothPan = null;
mConnectivityManager = null;
mBluetoothAdapter = null;
- mUserManager = null;
}
public TetherPreferenceController(Context context) {
@@ -78,7 +74,6 @@
context, DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()) != null;
mConnectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter != null) {
mBluetoothAdapter.getProfileProxy(context, mBtProfileServiceListener,
@@ -114,13 +109,6 @@
}
@Override
- public void updateNonIndexableKeys(List<String> keys) {
- if (!mUserManager.isAdminUser() || !mConnectivityManager.isTetheringSupported()) {
- keys.add(KEY_TETHER_SETTINGS);
- }
- }
-
- @Override
public String getPreferenceKey() {
return KEY_TETHER_SETTINGS;
}
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index d0f6f2e..4c310e6 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -184,6 +184,7 @@
channelPref.setKey(channel.getId());
channelPref.setTitle(channel.getName());
channelPref.setChecked(channel.getImportance() != IMPORTANCE_NONE);
+ channelPref.setMultiLine(true);
if (channel.isDeleted()) {
channelPref.setTitle(
diff --git a/src/com/android/settings/notification/CastPreferenceController.java b/src/com/android/settings/notification/CastPreferenceController.java
index 7de5c48..0156dfd 100644
--- a/src/com/android/settings/notification/CastPreferenceController.java
+++ b/src/com/android/settings/notification/CastPreferenceController.java
@@ -17,11 +17,8 @@
package com.android.settings.notification;
import android.content.Context;
-import android.support.v7.preference.Preference;
-import com.android.settings.Utils;
import com.android.settings.core.PreferenceController;
-import java.util.List;
public class CastPreferenceController extends PreferenceController {
@@ -41,11 +38,4 @@
return true;
}
- @Override
- public void updateNonIndexableKeys(List<String> keys) {
- if (!Utils.isVoiceCapable(mContext)) {
- keys.add(KEY_WIFI_DISPLAY);
- }
- }
-
}
diff --git a/src/com/android/settings/notification/NotificationVolumePreferenceController.java b/src/com/android/settings/notification/NotificationVolumePreferenceController.java
index e4759d7..40448a4 100644
--- a/src/com/android/settings/notification/NotificationVolumePreferenceController.java
+++ b/src/com/android/settings/notification/NotificationVolumePreferenceController.java
@@ -37,7 +37,7 @@
@VisibleForTesting
NotificationVolumePreferenceController(Context context,
- VolumeSeekBarPreference.Callback callback, Lifecycle lifecycle, AudioHelper helper) {
+ Callback callback, Lifecycle lifecycle, AudioHelper helper) {
super(context, callback, lifecycle);
mHelper = helper;
}
diff --git a/src/com/android/settings/notification/OtherSoundSettings.java b/src/com/android/settings/notification/OtherSoundSettings.java
deleted file mode 100644
index 5c409d3..0000000
--- a/src/com/android/settings/notification/OtherSoundSettings.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification;
-
-import android.content.Context;
-import android.provider.SearchIndexableResource;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/* This class has been deprecated Modifications to Other Sounds settings should be made in
- {@link SoundSettings } instead. */
-@Deprecated
-public class OtherSoundSettings extends DashboardFragment {
- private static final String TAG = "OtherSoundSettings";
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.NOTIFICATION_OTHER_SOUND;
- }
-
- @Override
- protected int getHelpResource() {
- return R.string.help_uri_other_sounds;
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.other_sound_settings;
- }
-
- @Override
- protected List<PreferenceController> getPreferenceControllers(Context context) {
- final List<PreferenceController> controllers = new ArrayList<>();
- Lifecycle lifecycle = getLifecycle();
- controllers.add(new DialPadTonePreferenceController(context, this, lifecycle));
- controllers.add(new ScreenLockSoundPreferenceController(context, this, lifecycle));
- controllers.add(new ChargingSoundPreferenceController(context, this, lifecycle));
- controllers.add(new DockingSoundPreferenceController(context, this, lifecycle));
- controllers.add(new TouchSoundPreferenceController(context, this, lifecycle));
- controllers.add(new VibrateOnTouchPreferenceController(context, this, lifecycle));
- controllers.add(new DockAudioMediaPreferenceController(context, this, lifecycle));
- controllers.add(new BootSoundPreferenceController(context));
- controllers.add(new EmergencyTonePreferenceController(context, this, lifecycle));
- return controllers;
- }
-
- // === Indexing ===
-
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
-
- public List<SearchIndexableResource> getXmlResourcesToIndex(
- Context context, boolean enabled) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.other_sound_settings;
- return Arrays.asList(sir);
- }
-
- public List<String> getNonIndexableKeys(Context context) {
- final ArrayList<String> rt = new ArrayList<String>();
- new DialPadTonePreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new ScreenLockSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new ChargingSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new DockingSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new TouchSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new VibrateOnTouchPreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new DockAudioMediaPreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new BootSoundPreferenceController(context).updateNonIndexableKeys(rt);
- new EmergencyTonePreferenceController(context, null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- return rt;
- }
- };
-}
diff --git a/src/com/android/settings/notification/SettingPrefController.java b/src/com/android/settings/notification/SettingPrefController.java
index d126fc4..64d65bb 100644
--- a/src/com/android/settings/notification/SettingPrefController.java
+++ b/src/com/android/settings/notification/SettingPrefController.java
@@ -71,13 +71,6 @@
}
@Override
- public void updateNonIndexableKeys(List<String> keys) {
- if (!mPreference.isApplicable(mContext)) {
- keys.add(mPreference.getKey());
- }
- }
-
- @Override
public void updateState(Preference preference) {
mPreference.update(mContext);
}
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index c7b0384..df60573 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -33,7 +33,6 @@
import com.android.settings.core.PreferenceController;
import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import java.util.ArrayList;
@@ -51,7 +50,6 @@
private final VolumePreferenceCallback mVolumeCallback = new VolumePreferenceCallback();
private final H mHandler = new H();
- private WorkSoundPreferenceController mWorkSoundController;
private RingtonePreference mRequestPreference;
@Override
@@ -100,51 +98,12 @@
@Override
protected int getPreferenceScreenResId() {
- return mDashboardFeatureProvider.isEnabled()
- ? R.xml.ia_sound_settings : R.xml.sound_settings;
+ return R.xml.ia_sound_settings;
}
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
- final List<PreferenceController> controllers = new ArrayList<>();
- Lifecycle lifecycle = getLifecycle();
- if (!mDashboardFeatureProvider.isEnabled()) {
- controllers.add(new CastPreferenceController(context));
- }
- controllers.add(new ZenModePreferenceController(context));
- controllers.add(new EmergencyBroadcastPreferenceController(context));
- controllers.add(new VibrateWhenRingPreferenceController(context));
-
- // === Volumes ===
- controllers.add(new AlarmVolumePreferenceController(context, mVolumeCallback, lifecycle));
- controllers.add(new MediaVolumePreferenceController(context, mVolumeCallback, lifecycle));
- controllers.add(
- new NotificationVolumePreferenceController(context, mVolumeCallback, lifecycle));
- controllers.add(new RingVolumePreferenceController(context, mVolumeCallback, lifecycle));
-
- // === Phone & notification ringtone ===
- controllers.add(new PhoneRingtonePreferenceController(context));
- controllers.add(new AlarmRingtonePreferenceController(context));
- controllers.add(new NotificationRingtonePreferenceController(context));
-
- // === Work Sound Settings ===
- mWorkSoundController = new WorkSoundPreferenceController(context, this, getLifecycle());
- controllers.add(mWorkSoundController);
-
- // === Other Sound Settings ===
- if (mDashboardFeatureProvider.isEnabled()) {
- controllers.add(new DialPadTonePreferenceController(context, this, lifecycle));
- controllers.add(new ScreenLockSoundPreferenceController(context, this, lifecycle));
- controllers.add(new ChargingSoundPreferenceController(context, this, lifecycle));
- controllers.add(new DockingSoundPreferenceController(context, this, lifecycle));
- controllers.add(new TouchSoundPreferenceController(context, this, lifecycle));
- controllers.add(new VibrateOnTouchPreferenceController(context, this, lifecycle));
- controllers.add(new DockAudioMediaPreferenceController(context, this, lifecycle));
- controllers.add(new BootSoundPreferenceController(context));
- controllers.add(new EmergencyTonePreferenceController(context, this, lifecycle));
- }
-
- return controllers;
+ return buildPreferenceControllers(context, this, mVolumeCallback, getLifecycle());
}
@Override
@@ -192,8 +151,6 @@
}
}
- ;
-
// === Callbacks ===
@@ -214,6 +171,43 @@
}
}
+ private static List<PreferenceController> buildPreferenceControllers(Context context,
+ SoundSettings fragment, VolumeSeekBarPreference.Callback callback,
+ Lifecycle lifecycle) {
+ final List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new ZenModePreferenceController(context));
+ controllers.add(new EmergencyBroadcastPreferenceController(context));
+ controllers.add(new VibrateWhenRingPreferenceController(context));
+
+ // === Volumes ===
+ controllers.add(new AlarmVolumePreferenceController(context, callback, lifecycle));
+ controllers.add(new MediaVolumePreferenceController(context, callback, lifecycle));
+ controllers.add(
+ new NotificationVolumePreferenceController(context, callback, lifecycle));
+ controllers.add(new RingVolumePreferenceController(context, callback, lifecycle));
+
+ // === Phone & notification ringtone ===
+ controllers.add(new PhoneRingtonePreferenceController(context));
+ controllers.add(new AlarmRingtonePreferenceController(context));
+ controllers.add(new NotificationRingtonePreferenceController(context));
+
+ // === Work Sound Settings ===
+ controllers.add(new WorkSoundPreferenceController(context, fragment, lifecycle));
+
+ // === Other Sound Settings ===
+ controllers.add(new DialPadTonePreferenceController(context, fragment, lifecycle));
+ controllers.add(new ScreenLockSoundPreferenceController(context, fragment, lifecycle));
+ controllers.add(new ChargingSoundPreferenceController(context, fragment, lifecycle));
+ controllers.add(new DockingSoundPreferenceController(context, fragment, lifecycle));
+ controllers.add(new TouchSoundPreferenceController(context, fragment, lifecycle));
+ controllers.add(new VibrateOnTouchPreferenceController(context, fragment, lifecycle));
+ controllers.add(new DockAudioMediaPreferenceController(context, fragment, lifecycle));
+ controllers.add(new BootSoundPreferenceController(context));
+ controllers.add(new EmergencyTonePreferenceController(context, fragment, lifecycle));
+
+ return controllers;
+ }
+
// === Indexing ===
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
@@ -222,61 +216,24 @@
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.sound_settings;
+ sir.xmlResId = R.xml.ia_sound_settings;
return Arrays.asList(sir);
}
- public List<String> getNonIndexableKeys(Context context) {
- final ArrayList<String> rt = new ArrayList<String>();
- new NotificationVolumePreferenceController(
- context, null /* Callback */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new RingVolumePreferenceController(
- context, null /* Callback */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new PhoneRingtonePreferenceController(context).updateNonIndexableKeys(rt);
- new VibrateWhenRingPreferenceController(context).updateNonIndexableKeys(rt);
- new EmergencyBroadcastPreferenceController(context).updateNonIndexableKeys(rt);
- if (FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
- .isEnabled()) {
- new DialPadTonePreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new ScreenLockSoundPreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new ChargingSoundPreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new DockingSoundPreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new TouchSoundPreferenceController(context, null /*
- SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new VibrateOnTouchPreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new DockAudioMediaPreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- new BootSoundPreferenceController(context).updateNonIndexableKeys(rt);
- new EmergencyTonePreferenceController(context,
- null /* SettingsPreferenceFragment */,
- null /* Lifecycle */).updateNonIndexableKeys(rt);
- } else {
- new CastPreferenceController(context).updateNonIndexableKeys(rt);
- }
-
- return rt;
+ @Override
+ public List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, null /* fragment */,
+ null /* callback */, null /* lifecycle */);
}
};
// === Work Sound Settings ===
void enableWorkSync() {
- if (mWorkSoundController != null) {
- mWorkSoundController.enableWorkSync();
+ final WorkSoundPreferenceController workSoundController =
+ getPreferenceController(WorkSoundPreferenceController.class);
+ if (workSoundController != null) {
+ workSoundController.enableWorkSync();
}
}
}
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 377e6bb..e72ee03 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -80,7 +80,7 @@
@Override
public PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context) {
if (mPowerUsageFeatureProvider == null) {
- mPowerUsageFeatureProvider = new PowerUsageFeatureProviderImpl();
+ mPowerUsageFeatureProvider = new PowerUsageFeatureProviderImpl(context);
}
return mPowerUsageFeatureProvider;
}
diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java
index bb518ba..38c8d40 100644
--- a/src/com/android/settings/search/BaseSearchIndexProvider.java
+++ b/src/com/android/settings/search/BaseSearchIndexProvider.java
@@ -18,8 +18,10 @@
import android.content.Context;
import android.provider.SearchIndexableResource;
+
import com.android.settings.core.PreferenceController;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -28,7 +30,7 @@
*/
public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider {
- private static final List<String> EMPTY_LIST = Collections.<String>emptyList();
+ private static final List<String> EMPTY_LIST = Collections.emptyList();
public BaseSearchIndexProvider() {
}
@@ -45,7 +47,16 @@
@Override
public List<String> getNonIndexableKeys(Context context) {
- return EMPTY_LIST;
+ final List<PreferenceController> controllers = getPreferenceControllers(context);
+ if (controllers != null && !controllers.isEmpty()) {
+ final List<String> nonIndexableKeys = new ArrayList<>();
+ for (PreferenceController controller : controllers) {
+ controller.updateNonIndexableKeys(nonIndexableKeys);
+ }
+ return nonIndexableKeys;
+ } else {
+ return EMPTY_LIST;
+ }
}
@Override
diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
index 0cc2688..c91f381 100644
--- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java
+++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
@@ -49,9 +49,9 @@
import com.android.internal.content.PackageMonitor;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.inputmethod.VirtualKeyboardFragment;
+import com.android.settings.language.LanguageAndInputSettings;
import com.android.settings.print.PrintSettingsFragment;
import java.util.ArrayList;
@@ -423,7 +423,7 @@
mContentResolver = context.getContentResolver();
mInputMethodServices.clear();
// Build index of {@link UserDictionary}.
- buildIndex(InputMethodAndLanguageSettings.class, true /* rebuild */);
+ buildIndex(LanguageAndInputSettings.class, true /* rebuild */);
// Build index of IMEs.
buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
@@ -478,7 +478,7 @@
buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
} else if (UserDictionary.Words.CONTENT_URI.equals(uri)) {
- buildIndex(InputMethodAndLanguageSettings.class, true /* rebuild */);
+ buildIndex(LanguageAndInputSettings.class, true /* rebuild */);
}
}
}
diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java
index b79a7f4..b146a22 100644
--- a/src/com/android/settings/search/Index.java
+++ b/src/com/android/settings/search/Index.java
@@ -707,7 +707,7 @@
}
private String buildSearchMatchStringForColumns(String query, String[] columnNames) {
- final String value = query + "*";
+ final String value = (query != null ? query.trim() : "") + "*";
StringBuilder sb = new StringBuilder();
final int count = columnNames.length;
for (int n = 0; n < count; n++) {
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index fc1b8d9..d3c32ca 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -41,12 +41,16 @@
import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.gestures.GestureSettings;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
+import com.android.settings.gestures.AssistGestureSettings;
+import com.android.settings.gestures.DoubleTapPowerSettings;
+import com.android.settings.gestures.DoubleTapScreenSettings;
+import com.android.settings.gestures.DoubleTwistGestureSettings;
+import com.android.settings.gestures.PickupGestureSettings;
+import com.android.settings.gestures.SwipeToNotificationSettings;
+import com.android.settings.language.LanguageAndInputSettings;
import com.android.settings.location.LocationSettings;
import com.android.settings.location.ScanningSettings;
import com.android.settings.notification.ConfigureNotificationSettings;
-import com.android.settings.notification.OtherSoundSettings;
import com.android.settings.notification.SoundSettings;
import com.android.settings.notification.ZenModeAutomationSettings;
import com.android.settings.notification.ZenModePrioritySettings;
@@ -133,7 +137,6 @@
// Notifications
sRankMap.put(ConfigureNotificationSettings.class.getName(), RANK_NOTIFICATIONS);
- sRankMap.put(OtherSoundSettings.class.getName(), RANK_NOTIFICATIONS);
sRankMap.put(ZenModeSettings.class.getName(), RANK_NOTIFICATIONS);
sRankMap.put(ZenModePrioritySettings.class.getName(), RANK_NOTIFICATIONS);
sRankMap.put(ZenModeAutomationSettings.class.getName(), RANK_NOTIFICATIONS);
@@ -154,7 +157,12 @@
sRankMap.put(UserSettings.class.getName(), RANK_USERS);
// Gestures
- sRankMap.put(GestureSettings.class.getName(), RANK_GESTURE);
+ sRankMap.put(AssistGestureSettings.class.getName(), RANK_GESTURE);
+ sRankMap.put(DoubleTapPowerSettings.class.getName(), RANK_GESTURE);
+ sRankMap.put(DoubleTapScreenSettings.class.getName(), RANK_GESTURE);
+ sRankMap.put(DoubleTwistGestureSettings.class.getName(), RANK_GESTURE);
+ sRankMap.put(PickupGestureSettings.class.getName(), RANK_GESTURE);
+ sRankMap.put(SwipeToNotificationSettings.class.getName(), RANK_GESTURE);
// Location
sRankMap.put(LocationSettings.class.getName(), RANK_LOCATION);
@@ -169,7 +177,7 @@
sRankMap.put(UserAndAccountDashboardFragment.class.getName(), RANK_ACCOUNT);
// IMEs
- sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
+ sRankMap.put(LanguageAndInputSettings.class.getName(), RANK_IME);
// Privacy
sRankMap.put(PrivacySettings.class.getName(), RANK_PRIVACY);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 1968c7a..6ecfe59 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -44,7 +44,6 @@
import com.android.settings.datausage.DataUsageMeteredSettings;
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.deviceinfo.StorageDashboardFragment;
-import com.android.settings.deviceinfo.StorageProfileFragment;
import com.android.settings.deviceinfo.StorageSettings;
import com.android.settings.display.ScreenZoomSettings;
import com.android.settings.enterprise.EnterprisePrivacySettings;
@@ -56,11 +55,9 @@
import com.android.settings.gestures.DoubleTapPowerSettings;
import com.android.settings.gestures.DoubleTapScreenSettings;
import com.android.settings.gestures.DoubleTwistGestureSettings;
-import com.android.settings.gestures.GestureSettings;
import com.android.settings.gestures.PickupGestureSettings;
import com.android.settings.gestures.SwipeToNotificationSettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.inputmethod.VirtualKeyboardFragment;
import com.android.settings.language.LanguageAndInputSettings;
@@ -69,7 +66,6 @@
import com.android.settings.network.NetworkDashboardFragment;
import com.android.settings.nfc.PaymentSettings;
import com.android.settings.notification.ConfigureNotificationSettings;
-import com.android.settings.notification.OtherSoundSettings;
import com.android.settings.notification.SoundSettings;
import com.android.settings.notification.ZenModePrioritySettings;
import com.android.settings.notification.ZenModeSettings;
@@ -122,7 +118,6 @@
addIndex(AppAndNotificationDashboardFragment.class, NO_DATA_RES_ID,
R.drawable.ic_settings_applications);
addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound);
- addIndex(OtherSoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound);
addIndex(ZenModeSettings.class,
R.xml.zen_mode_settings, R.drawable.ic_settings_notifications);
addIndex(ZenModePrioritySettings.class,
@@ -139,7 +134,6 @@
addIndex(SpecialAccessSettings.class,
R.xml.special_access, R.drawable.ic_settings_applications);
addIndex(UserSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_multiuser);
- addIndex(GestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
addIndex(AssistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
addIndex(PickupGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
addIndex(DoubleTapScreenSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
@@ -156,8 +150,6 @@
addIndex(ScreenPinningSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
addIndex(UserAndAccountDashboardFragment.class, NO_DATA_RES_ID,
R.drawable.ic_settings_accounts);
- addIndex(InputMethodAndLanguageSettings.class,
- NO_DATA_RES_ID, R.drawable.ic_settings_language);
addIndex(VirtualKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
addIndex(AvailableVirtualKeyboardFragment.class,
NO_DATA_RES_ID, R.drawable.ic_settings_language);
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index 2898ce2..c4bf0da 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -55,6 +55,10 @@
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context);
+ }
+
+ private static List<PreferenceController> buildPreferenceControllers(Context context) {
final List<PreferenceController> controllers = new ArrayList<>();
controllers.add(new SystemUpdatePreferenceController(context, UserManager.get(context)));
controllers.add(new AdditionalSystemUpdatePreferenceController(context));
@@ -79,17 +83,8 @@
}
@Override
- public List<String> getNonIndexableKeys(Context context) {
- if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
- .isEnabled()) {
- return null;
- }
- final List<String> keys = new ArrayList<>();
- new SystemUpdatePreferenceController(context, UserManager.get(context))
- .updateNonIndexableKeys(keys);
- new AdditionalSystemUpdatePreferenceController(context)
- .updateNonIndexableKeys(keys);
- return keys;
+ public List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context);
}
};
}
diff --git a/src/com/android/settings/widget/MasterSwitchPreference.java b/src/com/android/settings/widget/MasterSwitchPreference.java
index 94c429b..ba3458a 100644
--- a/src/com/android/settings/widget/MasterSwitchPreference.java
+++ b/src/com/android/settings/widget/MasterSwitchPreference.java
@@ -22,6 +22,7 @@
import android.util.AttributeSet;
import android.widget.CompoundButton;
import android.widget.Switch;
+import android.widget.TextView;
import com.android.settings.R;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -34,6 +35,7 @@
private Switch mSwitch;
private boolean mChecked;
+ private boolean mMultiLine;
public MasterSwitchPreference(Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
@@ -74,6 +76,12 @@
}
});
}
+ if (mMultiLine) {
+ TextView textView = (TextView)holder.findViewById(android.R.id.title);
+ if (textView != null) {
+ textView.setSingleLine(false);
+ }
+ }
}
public boolean isChecked() {
@@ -97,6 +105,14 @@
}
}
+ public boolean isMultiLine() {
+ return mMultiLine;
+ }
+
+ public void setMultiLine(boolean multiLine) {
+ mMultiLine = multiLine;
+ }
+
/**
* If admin is not null, disables the switch.
* Otherwise, keep it enabled.
diff --git a/tests/app/src/com/android/settings/dashboard/TabSelectionOnLaunchTest.java b/tests/app/src/com/android/settings/dashboard/TabSelectionOnLaunchTest.java
deleted file mode 100644
index 24c1ead..0000000
--- a/tests/app/src/com/android/settings/dashboard/TabSelectionOnLaunchTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.dashboard;
-
-import android.content.Intent;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.rule.ActivityTestRule;
-import android.support.test.runner.AndroidJUnit4;
-import com.android.settings.Settings;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isSelected;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-import static org.hamcrest.core.IsNot.not;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class TabSelectionOnLaunchTest {
- @Rule
- public ActivityTestRule<Settings> mActivityRule =
- new ActivityTestRule<>(Settings.class, true, false);
-
- private final int FLAG_RESTART = Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK;
- private final String ARG_SELECT_SUPPORT_TAB = "SUPPORT";
- private final String ARG_SELECT_FAKE_TAB = "NOT_SUPPORT";
-
- @Test
- /* cold start for settings app with correct flags and extra always selects support tab */
- public void test_ColdStartWithCorrectArgsCorrectFlags_SupportSelected() {
- launchSettingsWithFlags(ARG_SELECT_SUPPORT_TAB, FLAG_RESTART);
- verifySupportSelected();
- }
-
- @Test
- /* cold start with correct flags and wrong extra defaults to all tab */
- public void test_ColdStartWithWrongExtra_DoesNotSelectSupport() {
- launchSettingsWithFlags(ARG_SELECT_FAKE_TAB, FLAG_RESTART);
- verifySupportNotSelected();
- }
-
- @Test
- /* warm start from elsewhere in settings with wrong flags does not select support */
- public void test_WarmStartSummarySelectedCorrectExtraWrongFlags_DoesNotSelectSupport() {
- InstrumentationRegistry.getContext().
- startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
- launchSettingsNoFlags(ARG_SELECT_SUPPORT_TAB);
- verifySupportNotSelected();
- }
-
- @Test
- /* warm start from elsewhere in settings with with wrong flags & extra does not select support*/
- public void test_WarmStartSummarySelectedWrongExtraWrongFlags_DoesNotSelectSupport() {
- InstrumentationRegistry.getContext().
- startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
- launchSettingsNoFlags(ARG_SELECT_FAKE_TAB);
- verifySupportNotSelected();
- }
-
- @Test
- /* settings does not crash on null string */
- public void test_DoesNotCrashOnNullExtra_DoesNotSelectSupport() {
- launchSettingsWithFlags(null, FLAG_RESTART);
- verifySupportNotSelected();
- }
-
- private void verifySupportNotSelected() {
- onView(withText(mActivityRule.getActivity().getApplicationContext().
- getString(com.android.settings.R.string.page_tab_title_support))).
- check(matches(not(isSelected())));
- }
-
- private void verifySupportSelected() {
- onView(withText(mActivityRule.getActivity().getApplicationContext().
- getString(com.android.settings.R.string.page_tab_title_support))).
- check(matches(isSelected()));
- }
-
- private void launchSettingsWithFlags(String extra, int flags) {
- Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
- intent.setFlags(flags);
- intent.putExtra(DashboardContainerFragment.EXTRA_SELECT_SETTINGS_TAB, extra);
- mActivityRule.launchActivity(intent);
- }
-
- private void launchSettingsNoFlags(String extra) {
- Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
- intent.putExtra(DashboardContainerFragment.EXTRA_SELECT_SETTINGS_TAB, extra);
- mActivityRule.launchActivity(intent);
- }
-}
\ No newline at end of file
diff --git a/tests/app/src/com/android/settings/gesture/GestureSettingsTest.java b/tests/app/src/com/android/settings/gesture/GestureSettingsTest.java
deleted file mode 100644
index 4f3a524..0000000
--- a/tests/app/src/com/android/settings/gesture/GestureSettingsTest.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.gesture;
-
-import android.content.Context;
-import android.content.Intent;
-import android.provider.Settings.Secure;
-import android.support.test.filters.MediumTest;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiSelector;
-import android.support.test.uiautomator.UiScrollable;
-import android.test.InstrumentationTestCase;
-import android.util.Log;
-import android.widget.RelativeLayout;
-import android.widget.Switch;
-
-import com.android.settings.R;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-import org.junit.Test;
-
-/**
- * Test for Gesture preferences.
- */
-@MediumTest
-public class GestureSettingsTest extends InstrumentationTestCase {
-
- private static final String TAG = "GestureSettingsTest";
-
- private UiDevice mDevice;
- private Context mTargetContext;
- private String mTargetPackage;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- mDevice = UiDevice.getInstance(getInstrumentation());
- mTargetContext = getInstrumentation().getTargetContext();
- mTargetPackage = mTargetContext.getPackageName();
- }
-
- @Test
- public void testAmbientDisplaySwitchPreference() throws Exception {
- launchSettings();
- UiObject dozeSwitch = getDozeSwitch();
- assertNotNull(dozeSwitch);
- assertTrue(dozeSwitch.exists());
- assertToggleStateMatchesSettingValue(dozeSwitch, Secure.DOZE_ENABLED, 1, 1);
- }
-
- @Test
- public void testGestureSettingsExists() throws Exception {
- launchMoves();
- UiObject titleObj = mDevice.findObject(new UiSelector().text(
- mTargetContext.getResources().getString(R.string.gesture_preference_title)));
- assertNotNull(titleObj);
- assertTrue(titleObj.exists());
- }
-
- @Test
- public void testCameraDoubleTapToggle() throws Exception {
- assertSwitchToggle(mTargetContext.getResources().getString(
- R.string.double_tap_power_for_camera_title),
- Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0, 0);
- }
-
- @Test
- public void testCameraDoubleTwistToggle() throws Exception {
- assertSwitchToggle(mTargetContext.getResources().getString(
- R.string.double_twist_for_camera_mode_title),
- Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1, 1);
- }
-
- @Test
- public void testFingerprintSwipeToggle() throws Exception {
- assertSwitchToggle(mTargetContext.getResources().getString(
- R.string.fingerprint_swipe_for_notifications_title),
- Secure.SYSTEM_NAVIGATION_KEYS_ENABLED, 0, 1);
- }
-
- @Test
- public void testDozeDoubleTapToggle() throws Exception {
- assertSwitchToggle(mTargetContext.getResources().getString(
- R.string.ambient_display_title),
- Secure.DOZE_PULSE_ON_DOUBLE_TAP, 1, 1);
- }
-
- @Test
- public void testDozePickupToggle() throws Exception {
- assertSwitchToggle(mTargetContext.getResources().getString(
- R.string.ambient_display_pickup_title),
- Secure.DOZE_PULSE_ON_PICK_UP, 1, 1);
- }
-
- private void launchSettings() {
- Intent settingsIntent = new Intent(Intent.ACTION_MAIN)
- .addCategory(Intent.CATEGORY_LAUNCHER)
- .setPackage(mTargetPackage)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- getInstrumentation().getContext().startActivity(settingsIntent);
- }
-
- private void launchMoves() throws Exception {
- launchSettings();
- UiScrollable settings = new UiScrollable(
- new UiSelector().packageName(mTargetPackage).scrollable(true));
- String titleMoves =
- mTargetContext.getResources().getString(R.string.gesture_preference_title);
- settings.scrollTextIntoView(titleMoves);
- mDevice.findObject(new UiSelector().text(titleMoves)).click();
- }
-
- private void navigateToMovesSetting(String title) throws Exception {
- launchMoves();
- UiScrollable moves = new UiScrollable(
- new UiSelector().packageName(mTargetPackage).scrollable(true));
- moves.scrollTextIntoView(title);
- }
-
- private UiScrollable navigateToAmbientDisplay() throws Exception {
- UiScrollable settings = new UiScrollable(
- new UiSelector().packageName(mTargetPackage).scrollable(true));
- String titleDisplay =
- mTargetContext.getResources().getString(R.string.display_settings_title);
- settings.scrollTextIntoView(titleDisplay);
- mDevice.findObject(new UiSelector().text(titleDisplay)).click();
- settings.scrollTextIntoView(mTargetContext.getResources().getString(R.string.doze_title));
- return settings;
- }
-
- private UiObject getGestureSwitch(String title) throws Exception {
- UiObject titleView = mDevice.findObject(new UiSelector().text(title));
- UiObject gestureSwitch =
- titleView.getFromParent(new UiSelector().className(Switch.class.getName()));
- assertNotNull(gestureSwitch);
- assertTrue(gestureSwitch.exists());
- return gestureSwitch;
- }
-
- private UiObject getDozeSwitch() throws Exception {
- UiScrollable settings = navigateToAmbientDisplay();
- UiObject dozeSwitch = null;
- UiSelector relativeLayoutSelector =
- new UiSelector().className(RelativeLayout.class.getName());
- String titleDoze = mTargetContext.getResources().getString(R.string.doze_title);
- for (int i = 0; i <= settings.getChildCount(relativeLayoutSelector); i++) {
- UiObject relativeLayout = settings.getChild(relativeLayoutSelector.instance(i));
- if (relativeLayout.getChildCount() != 2) {
- continue;
- }
- UiObject obj1 = relativeLayout.getChild(new UiSelector().index(0));
- if (obj1.getText() == titleDoze) {
- return relativeLayout.getFromParent(
- new UiSelector().className(Switch.class.getName()));
- }
- }
- return null;
- }
-
- private void assertSwitchToggle(String title, String key, int defaultVal, int enabledVal)
- throws Exception {
- navigateToMovesSetting(title);
- assertToggleStateMatchesSettingValue(getGestureSwitch(title), key, defaultVal, enabledVal);
- }
-
- private void assertToggleStateMatchesSettingValue (
- UiObject testSwitch, String key, int defaultVal, int enabledVal) throws Exception {
- // check initial state
- int currentValue = Secure.getInt(mTargetContext.getContentResolver(), key, defaultVal);
- boolean enabled = currentValue == enabledVal;
- assertEquals(enabled, testSwitch.isChecked());
- // toggle the preference
- testSwitch.click();
- assertEquals(!enabled, testSwitch.isChecked());
- int newValue = currentValue == 1 ? 0 : 1;
- assertEquals(newValue, Secure.getInt(mTargetContext.getContentResolver(), key, defaultVal));
- }
-
-}
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 76d1013..a63bd7f 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -3,6 +3,5 @@
com.android.settings.notification.ZenModePrioritySettings
com.android.settings.inputmethod.InputAndGestureSettings
com.android.settings.accounts.AccountDetailDashboardFragment
-com.android.settings.gestures.GestureSettings
com.android.settings.fuelgauge.PowerUsageDetail
com.android.settings.deviceinfo.StorageProfileFragment
diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
index 1661947..df7a454 100644
--- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
@@ -16,18 +16,47 @@
package com.android.settings;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.Context;
+import android.content.Intent;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SettingsActivityTest {
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+ @Mock
+ private FragmentManager mFragmentManager;
+
private SettingsActivity mActivity;
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ FakeFeatureFactory.setupForTest(mContext);
+ final FakeFeatureFactory factory =
+ (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+ when(factory.dashboardFeatureProvider.isEnabled()).thenReturn(true);
+ }
+
@Test
public void testQueryTextChange_shouldUpdate() {
final String testQuery = "abc";
@@ -42,4 +71,16 @@
assertThat(mActivity.mSearchQuery).isEqualTo(testQuery);
}
+
+ @Test
+ public void launchSettingFragment_nullExtraShowFragment_shouldNotCrash()
+ throws ClassNotFoundException {
+ mActivity = spy(new SettingsActivity());
+ when(mActivity.getFragmentManager()).thenReturn(mFragmentManager);
+ when(mFragmentManager.beginTransaction()).thenReturn(mock(FragmentTransaction.class));
+
+ doReturn(RuntimeEnvironment.application.getClassLoader()).when(mActivity).getClassLoader();
+
+ mActivity.launchSettingFragment(null, true, mock(Intent.class));
+ }
}
diff --git a/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java b/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java
new file mode 100644
index 0000000..0b1d1aa
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.UserHandle;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class FetchPackageStorageAsyncLoaderTest {
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+ @Mock
+ private StorageStatsSource mSource;
+
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Test
+ public void worksForValidPackageNameAndUid() {
+ AppStorageStats stats = mock(AppStorageStats.class);
+ when(stats.getCodeBytes()).thenReturn(1L);
+ when(stats.getDataBytes()).thenReturn(2L);
+ when(stats.getCacheBytes()).thenReturn(3L);
+ when(mSource.getStatsForPackage(anyString(), anyString(), any(UserHandle.class)))
+ .thenReturn(stats);
+ ApplicationInfo info = new ApplicationInfo();
+ info.packageName = "com.test.package";
+
+ FetchPackageStorageAsyncLoader task = new FetchPackageStorageAsyncLoader(
+ mContext, mSource, info, new UserHandle(0));
+ assertThat(task.loadInBackground()).isEqualTo(stats);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
index 017c5a8..0a74cc4 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
@@ -29,6 +29,7 @@
import com.android.settings.DevelopmentSettings;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
@@ -40,6 +41,7 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
@@ -47,6 +49,7 @@
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -65,6 +68,7 @@
@Mock
private UserManager mUserManager;
+ private Lifecycle mLifecycle;
private FakeFeatureFactory mFactory;
private Preference mPreference;
private BuildNumberPreferenceController mController;
@@ -74,8 +78,10 @@
MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest(mContext);
mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
- when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- mController = new BuildNumberPreferenceController(mContext, mActivity, mFragment);
+ mLifecycle = new Lifecycle();
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+ mController = new BuildNumberPreferenceController(
+ mContext, mActivity, mFragment, mLifecycle);
mPreference = new Preference(RuntimeEnvironment.application);
mPreference.setKey(mController.getPreferenceKey());
@@ -104,11 +110,13 @@
@Test
public void handlePrefTreeClick_deviceNotProvisioned_doNothing() {
when(mUserManager.isAdminUser()).thenReturn(true);
- final Context context = ShadowApplication.getInstance().getApplicationContext();
+ final Context context = RuntimeEnvironment.application;
Settings.Global.putInt(context.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0);
- mController = new BuildNumberPreferenceController(context, mActivity, mFragment);
+ mController = new BuildNumberPreferenceController(
+ context, mActivity, mFragment, mLifecycle);
+ ReflectionHelpers.setField(mController, "mContext", context);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
verify(mFactory.metricsFeatureProvider).action(
@@ -118,14 +126,17 @@
@Test
public void handlePrefTreeClick_userHasRestriction_doNothing() {
- when(mUserManager.isAdminUser()).thenReturn(true);
- final Context context = ShadowApplication.getInstance().getApplicationContext();
+ final Context context = spy(RuntimeEnvironment.application);
Settings.Global.putInt(context.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 1);
+
+ when(mUserManager.isAdminUser()).thenReturn(true);
when(mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES))
.thenReturn(true);
- mController = new BuildNumberPreferenceController(context, mActivity, mFragment);
+ mController = new BuildNumberPreferenceController(
+ mContext, mActivity, mFragment, mLifecycle);
+ ReflectionHelpers.setField(mController, "mContext", context);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
verify(mFactory.metricsFeatureProvider).action(
@@ -161,7 +172,8 @@
public void onActivityResult_confirmPasswordRequestCompleted_enableDevPref() {
final Context context = ShadowApplication.getInstance().getApplicationContext();
- mController = new BuildNumberPreferenceController(context, mActivity, mFragment);
+ mController = new BuildNumberPreferenceController(
+ context, mActivity, mFragment, mLifecycle);
final boolean activityResultHandled = mController.onActivityResult(
BuildNumberPreferenceController.REQUEST_CONFIRM_PASSWORD_FOR_DEV_PREF,
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
index e47aac9..ed7e48b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.android.settings.fuelgauge;
import android.content.pm.PackageManager;
@@ -70,13 +85,10 @@
@Test
public void testExtractUsageType_TypeSystem_ReturnSystem() {
mBatterySipper.drainType = DrainType.APP;
- final int uids[] = {Process.SYSTEM_UID, Process.ROOT_UID};
+ when(mPowerUsageFeatureProvider.isTypeSystem(any())).thenReturn(true);
- for (int uid : uids) {
- when(mBatterySipper.getUid()).thenReturn(uid);
- assertThat(mPowerUsageAdvanced.extractUsageType(mBatterySipper))
- .isEqualTo(UsageType.SYSTEM);
- }
+ assertThat(mPowerUsageAdvanced.extractUsageType(mBatterySipper))
+ .isEqualTo(UsageType.SYSTEM);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
new file mode 100644
index 0000000..d467221
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Process;
+import com.android.internal.os.BatterySipper;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Mockito.when;
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class PowerUsageFeatureProviderImplTest {
+ private static final int UID_OTHER = Process.FIRST_APPLICATION_UID + 2;
+ private static final int UID_CALENDAR = Process.FIRST_APPLICATION_UID + 3;
+ private static final int UID_MEDIA = Process.FIRST_APPLICATION_UID + 4;
+ private static final String[] PACKAGES_CALENDAR = {"com.android.providers.calendar"};
+ private static final String[] PACKAGES_MEDIA = {"com.android.providers.media"};
+ @Mock
+ private Context mContext;
+ @Mock
+ private BatterySipper mBatterySipper;
+ @Mock
+ private PackageManager mPackageManager;
+ private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mPowerFeatureProvider = new PowerUsageFeatureProviderImpl(mContext);
+ when(mPackageManager.getPackagesForUid(UID_CALENDAR)).thenReturn(PACKAGES_CALENDAR);
+ when(mPackageManager.getPackagesForUid(UID_MEDIA)).thenReturn(PACKAGES_MEDIA);
+ mPowerFeatureProvider.mPackageManager = mPackageManager;
+ mBatterySipper.uidObj = new FakeUid(UID_OTHER);
+ }
+
+ @Test
+ public void testIsTypeSystem_UidRoot_ReturnTrue() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testIsTypeSystem_UidSystem_ReturnTrue() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testIsTypeSystem_UidMedia_ReturnTrue() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mBatterySipper.getUid()).thenReturn(Process.MEDIA_UID);
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testIsTypeSystem_AppCalendar_ReturnTrue() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mBatterySipper.getUid()).thenReturn(UID_CALENDAR);
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testIsTypeSystem_AppMedia_ReturnTrue() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mBatterySipper.getUid()).thenReturn(UID_MEDIA);
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testIsTypeSystem_UidOther_ReturnFalse() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mBatterySipper.getUid()).thenReturn(UID_OTHER);
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isFalse();
+ }
+
+ @Test
+ public void testIsTypeSystem_UidObjNull_ReturnFalse() {
+ mBatterySipper.drainType = BatterySipper.DrainType.APP;
+ mBatterySipper.uidObj = null;
+
+ assertThat(mPowerFeatureProvider.isTypeSystem(mBatterySipper)).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 0755a36..1a0f3fa 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -17,6 +17,7 @@
import android.content.Context;
import android.content.Intent;
+import android.os.PowerManager;
import android.os.Process;
import android.support.v7.preference.Preference;
import android.text.TextUtils;
@@ -54,6 +55,7 @@
import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_TOGGLE_APPS;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
@@ -124,12 +126,13 @@
private Preference mCellularNetworkPref;
@Mock
private BatteryStatsHelper mBatteryHelper;
+ @Mock
+ private PowerManager mPowerManager;
+ private List<BatterySipper> mUsageList;
private Context mRealContext;
private TestFragment mFragment;
private FakeFeatureFactory mFeatureFactory;
- private PowerUsageSummary mPowerUsageSummary;
- private List<BatterySipper> mUsageList;
@Before
public void setUp() {
@@ -138,8 +141,10 @@
mRealContext = RuntimeEnvironment.application;
FakeFeatureFactory.setupForTest(mContext);
mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+ when(mContext.getSystemService(Context.POWER_SERVICE)).thenReturn(mPowerManager);
- mFragment = new TestFragment(mContext);
+ mFragment = spy(new TestFragment(mContext));
+ mFragment.initFeatureProvider();
when(mAdditionalBatteryInfoMenu.getItemId())
.thenReturn(MENU_ADDITIONAL_BATTERY_INFO);
@@ -148,9 +153,6 @@
.thenReturn(ADDITIONAL_BATTERY_INFO_INTENT);
when(mBatteryHelper.getTotalPower()).thenReturn(TOTAL_POWER);
- mPowerUsageSummary = spy(new PowerUsageSummary());
-
- when(mPowerUsageSummary.getContext()).thenReturn(mRealContext);
when(mNormalBatterySipper.getPackages()).thenReturn(PACKAGE_NAMES);
when(mNormalBatterySipper.getUid()).thenReturn(UID);
mNormalBatterySipper.totalPowerMah = POWER_MAH;
@@ -164,7 +166,7 @@
when(mBatteryLayoutPref.findViewById(R.id.time)).thenReturn(mTimeText);
when(mBatteryLayoutPref.findViewById(R.id.battery_header_icon))
.thenReturn(mBatteryMeterView);
- mPowerUsageSummary.setBatteryLayoutPreference(mBatteryLayoutPref);
+ mFragment.setBatteryLayoutPreference(mBatteryLayoutPref);
mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE;
@@ -179,11 +181,11 @@
mUsageList.add(mScreenBatterySipper);
mUsageList.add(mCellBatterySipper);
- mPowerUsageSummary.mStatsHelper = mBatteryHelper;
+ mFragment.mStatsHelper = mBatteryHelper;
when(mBatteryHelper.getUsageList()).thenReturn(mUsageList);
- mPowerUsageSummary.mScreenUsagePref = mScreenUsagePref;
- mPowerUsageSummary.mScreenConsumptionPref = mScreenConsumptionPref;
- mPowerUsageSummary.mCellularNetworkPref = mCellularNetworkPref;
+ mFragment.mScreenUsagePref = mScreenUsagePref;
+ mFragment.mScreenConsumptionPref = mScreenConsumptionPref;
+ mFragment.mCellularNetworkPref = mCellularNetworkPref;
}
@Test
@@ -235,7 +237,7 @@
mNormalBatterySipper.uidObj = null;
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
- final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
+ final String key = mFragment.extractKeyFromSipper(mNormalBatterySipper);
assertThat(key).isEqualTo(TextUtils.concat(mNormalBatterySipper.getPackages()).toString());
}
@@ -244,7 +246,7 @@
mNormalBatterySipper.uidObj = null;
mNormalBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
- final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
+ final String key = mFragment.extractKeyFromSipper(mNormalBatterySipper);
assertThat(key).isEqualTo(mNormalBatterySipper.drainType.toString());
}
@@ -253,7 +255,7 @@
mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
- final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
+ final String key = mFragment.extractKeyFromSipper(mNormalBatterySipper);
assertThat(key).isEqualTo(Integer.toString(mNormalBatterySipper.getUid()));
}
@@ -263,8 +265,10 @@
sippers.add(mNormalBatterySipper);
sippers.add(mScreenBatterySipper);
sippers.add(mSystemBatterySipper);
+ when(mFeatureFactory.powerUsageFeatureProvider.isTypeSystem(mSystemBatterySipper))
+ .thenReturn(true);
- final double totalUsage = mPowerUsageSummary.removeHiddenBatterySippers(sippers);
+ final double totalUsage = mFragment.removeHiddenBatterySippers(sippers);
assertThat(sippers).containsExactly(mNormalBatterySipper);
assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE);
}
@@ -272,47 +276,58 @@
@Test
public void testShouldHideSipper_TypeIdle_ReturnTrue() {
mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE;
- assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
}
@Test
public void testShouldHideSipper_TypeCell_ReturnTrue() {
mNormalBatterySipper.drainType = BatterySipper.DrainType.CELL;
- assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
}
@Test
public void testShouldHideSipper_TypeScreen_ReturnTrue() {
mNormalBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
- assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
}
@Test
- public void testShouldHideSipper_UidRoot_ReturnTrue() {
+ public void testShouldHideSipper_TypeBluetooth_ReturnTrue() {
+ mNormalBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testShouldHideSipper_TypeSystem_ReturnTrue() {
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
when(mNormalBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
- assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_UidSystem_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
- when(mNormalBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
- assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ when(mFeatureFactory.powerUsageFeatureProvider.isTypeSystem(Matchers.<BatterySipper>any()))
+ .thenReturn(true);
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
}
@Test
public void testShouldHideSipper_UidNormal_ReturnFalse() {
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
when(mNormalBatterySipper.getUid()).thenReturn(UID);
- assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isFalse();
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isFalse();
+ }
+
+ @Test
+ public void testShouldHideSipper_TypeService_ReturnTrue() {
+ mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
+ when(mNormalBatterySipper.getUid()).thenReturn(UID);
+ when(mFeatureFactory.powerUsageFeatureProvider.isTypeService(Matchers.<BatterySipper>any()))
+ .thenReturn(true);
+
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
}
@Test
public void testSetUsageSummary_TimeLessThanOneMinute_DoNotSetSummary() {
final long usageTimeMs = 59 * DateUtils.SECOND_IN_MILLIS;
- mPowerUsageSummary.setUsageSummary(mPreference, "", usageTimeMs);
+ mFragment.setUsageSummary(mPreference, "", usageTimeMs);
verify(mPreference, never()).setSummary(anyString());
}
@@ -320,7 +335,7 @@
public void testSetUsageSummary_TimeMoreThanOneMinute_SetSummary() {
final long usageTimeMs = 2 * DateUtils.MINUTE_IN_MILLIS;
- mPowerUsageSummary.setUsageSummary(mPreference, "", usageTimeMs);
+ mFragment.setUsageSummary(mPreference, "", usageTimeMs);
verify(mPreference).setSummary(anyString());
}
@@ -328,7 +343,7 @@
public void testUpdatePreference_NoEstimatedTime_DoNotShowSummary() {
mBatteryInfo.remainingTimeUs = 0;
mBatteryInfo.remainingLabel = TIME_LEFT;
- mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
+ mFragment.updateHeaderPreference(mBatteryInfo);
verify(mSummary1).setVisibility(View.INVISIBLE);
verify(mSummary2).setVisibility(View.INVISIBLE);
@@ -338,7 +353,7 @@
public void testUpdatePreference_HasEstimatedTime_ShowSummary() {
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
mBatteryInfo.remainingLabel = TIME_LEFT;
- mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
+ mFragment.updateHeaderPreference(mBatteryInfo);
verify(mSummary1).setVisibility(View.VISIBLE);
verify(mSummary2).setVisibility(View.VISIBLE);
@@ -349,7 +364,7 @@
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
mBatteryInfo.mDischarging = false;
- mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
+ mFragment.updateHeaderPreference(mBatteryInfo);
verify(mSummary1).setText(R.string.estimated_charging_time_left);
}
@@ -358,17 +373,17 @@
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
mBatteryInfo.mDischarging = true;
- mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
+ mFragment.updateHeaderPreference(mBatteryInfo);
verify(mSummary1).setText(R.string.estimated_time_left);
}
@Test
public void testUpdateHeaderPreference_AsyncUpdate_ShouldNotCrash() {
- when(mPowerUsageSummary.getContext()).thenReturn(null);
+ when(mFragment.getContext()).thenReturn(null);
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
//Should not crash
- mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
+ mFragment.updateHeaderPreference(mBatteryInfo);
}
private void testToggleAllApps(final boolean isShowApps) {
@@ -380,7 +395,7 @@
@Test
public void testFindBatterySipperByType_findTypeScreen() {
- BatterySipper sipper = mPowerUsageSummary.findBatterySipperByType(mUsageList,
+ BatterySipper sipper = mFragment.findBatterySipperByType(mUsageList,
BatterySipper.DrainType.SCREEN);
assertThat(sipper).isSameAs(mScreenBatterySipper);
@@ -388,7 +403,7 @@
@Test
public void testFindBatterySipperByType_findTypeApp() {
- BatterySipper sipper = mPowerUsageSummary.findBatterySipperByType(mUsageList,
+ BatterySipper sipper = mFragment.findBatterySipperByType(mUsageList,
BatterySipper.DrainType.APP);
assertThat(sipper).isSameAs(mNormalBatterySipper);
@@ -399,9 +414,9 @@
final double percent = POWER_MAH / TOTAL_POWER * DISCHARGE_AMOUNT;
final String expectedSummary = mRealContext.getString(R.string.battery_overall_usage,
Utils.formatPercentage((int) percent));
- doReturn(expectedSummary).when(mPowerUsageSummary)
+ doReturn(expectedSummary).when(mFragment)
.getString(eq(R.string.battery_overall_usage), anyInt());
- mPowerUsageSummary.updateCellularPreference(DISCHARGE_AMOUNT);
+ mFragment.updateCellularPreference(DISCHARGE_AMOUNT);
verify(mCellularNetworkPref).setSummary(expectedSummary);
}
@@ -413,12 +428,12 @@
final double percent = BATTERY_SCREEN_USAGE / TOTAL_POWER * DISCHARGE_AMOUNT;
final String expectedOverallUsage = mRealContext.getString(R.string.battery_overall_usage,
Utils.formatPercentage((int) percent));
- doReturn(expectedUsedTime).when(mPowerUsageSummary).getString(
+ doReturn(expectedUsedTime).when(mFragment).getString(
eq(R.string.battery_used_for), anyInt());
- doReturn(expectedOverallUsage).when(mPowerUsageSummary).getString(
+ doReturn(expectedOverallUsage).when(mFragment).getString(
eq(R.string.battery_overall_usage), anyInt());
- mPowerUsageSummary.updateScreenPreference(DISCHARGE_AMOUNT);
+ mFragment.updateScreenPreference(DISCHARGE_AMOUNT);
verify(mScreenUsagePref).setSummary(expectedUsedTime);
verify(mScreenConsumptionPref).setSummary(expectedOverallUsage);
@@ -427,16 +442,16 @@
@Test
public void testUpdatePreference_UsageListEmpty_ShouldNotCrash() {
when(mBatteryHelper.getUsageList()).thenReturn(new ArrayList<BatterySipper>());
- doReturn("").when(mPowerUsageSummary).getString(anyInt(), Matchers.anyObject());
+ doReturn("").when(mFragment).getString(anyInt(), Matchers.anyObject());
// Should not crash when update
- mPowerUsageSummary.updateScreenPreference(DISCHARGE_AMOUNT);
- mPowerUsageSummary.updateCellularPreference(DISCHARGE_AMOUNT);
+ mFragment.updateScreenPreference(DISCHARGE_AMOUNT);
+ mFragment.updateCellularPreference(DISCHARGE_AMOUNT);
}
@Test
public void testCalculatePercentage() {
- final double percent = mPowerUsageSummary.calculatePercentage(POWER_MAH, DISCHARGE_AMOUNT);
+ final double percent = mFragment.calculatePercentage(POWER_MAH, DISCHARGE_AMOUNT);
assertThat(percent).isWithin(PRECISION).of(POWER_USAGE_PERCENTAGE);
}
diff --git a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
index 3d6a233..a856e8c 100644
--- a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
@@ -51,8 +51,6 @@
@Mock
private BluetoothAdapter mBluetoothAdapter;
@Mock
- private UserManager mUserManager;
- @Mock
private Preference mPreference;
private TetherPreferenceController mController;
@@ -64,7 +62,6 @@
ReflectionHelpers.setField(mController, "mContext", mContext);
ReflectionHelpers.setField(mController, "mConnectivityManager", mConnectivityManager);
ReflectionHelpers.setField(mController, "mBluetoothAdapter", mBluetoothAdapter);
- ReflectionHelpers.setField(mController, "mUserManager", mUserManager);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/notification/CastPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/CastPreferenceControllerTest.java
index 5fe4c42..fc9867e 100644
--- a/tests/robotests/src/com/android/settings/notification/CastPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/CastPreferenceControllerTest.java
@@ -22,9 +22,6 @@
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
-import java.util.ArrayList;
-import java.util.List;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -33,8 +30,10 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
+import java.util.ArrayList;
+import java.util.List;
+
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -61,8 +60,7 @@
}
@Test
- public void updateNonIndexableKeys_voiceCapable_shouldNotUpdate() {
- when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
+ public void updateNonIndexableKeys_shouldNotUpdate() {
final List<String> keys = new ArrayList<>();
mController.updateNonIndexableKeys(keys);
@@ -70,14 +68,4 @@
assertThat(keys).isEmpty();
}
- @Test
- public void updateNonIndexableKeys_voiceIncapable_shouldUpdate() {
- when(mTelephonyManager.isVoiceCapable()).thenReturn(false);
- final List<String> keys = new ArrayList<>();
-
- mController.updateNonIndexableKeys(keys);
-
- assertThat(keys).isNotEmpty();
- }
-
}
diff --git a/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java b/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java
index b36b19b..25581b9 100644
--- a/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java
@@ -53,7 +53,7 @@
@Mock
private PreferenceScreen mScreen;
@Mock
- private OtherSoundSettings mSetting;
+ private SoundSettings mSetting;
@Mock
private Activity mActivity;
@Mock
diff --git a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
new file mode 100644
index 0000000..818f8a2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search;
+
+
+import android.content.Context;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.core.PreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BaseSearchIndexProviderTest {
+
+ private static final String TEST_PREF_KEY = "test_pref_key";
+
+ @Mock
+ private Context mContext;
+ private BaseSearchIndexProvider mIndexProvider;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mIndexProvider = spy(BaseSearchIndexProvider.class);
+ }
+
+ @Test
+ public void getNonIndexableKeys_noPreferenceController_shouldReturnEmptyList() {
+ assertThat(mIndexProvider.getNonIndexableKeys(mContext)).isEqualTo(Collections.EMPTY_LIST);
+ }
+
+ @Test
+ public void getNonIndexableKeys_preferenceIsAvailable_shouldReturnEmptyList() {
+ List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new PreferenceController(mContext) {
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return TEST_PREF_KEY;
+ }
+ });
+ doReturn(controllers).when(mIndexProvider).getPreferenceControllers(mContext);
+
+ assertThat(mIndexProvider.getNonIndexableKeys(mContext)).isEqualTo(Collections.EMPTY_LIST);
+ }
+
+ @Test
+ public void getNonIndexableKeys_preferenceIsNotAvailable_shouldReturnKey() {
+ List<PreferenceController> controllers = new ArrayList<>();
+ controllers.add(new PreferenceController(mContext) {
+ @Override
+ public boolean isAvailable() {
+ return false;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return TEST_PREF_KEY;
+ }
+ });
+ doReturn(controllers).when(mIndexProvider).getPreferenceControllers(mContext);
+
+ assertThat(mIndexProvider.getNonIndexableKeys(mContext)).contains(TEST_PREF_KEY);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
index 5ebc4b9..0bd651a 100644
--- a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
+++ b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
@@ -58,9 +58,9 @@
import com.android.settings.TestConfig;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.inputmethod.VirtualKeyboardFragment;
+import com.android.settings.language.LanguageAndInputSettings;
import com.android.settings.print.PrintSettingsFragment;
import com.android.settings.testutils.shadow.ShadowActivityWithLoadManager;
import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver;
@@ -417,7 +417,7 @@
final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI);
assertThat(observer).isNotNull();
- verifyRebuildIndexing(InputMethodAndLanguageSettings.class);
+ verifyRebuildIndexing(LanguageAndInputSettings.class);
/*
* When user dictionary content is changed, rebuild indexing happens.
@@ -426,7 +426,7 @@
observer.onChange(false /* selfChange */, UserDictionary.Words.CONTENT_URI);
- verifyRebuildIndexing(InputMethodAndLanguageSettings.class);
+ verifyRebuildIndexing(LanguageAndInputSettings.class);
}
/*
diff --git a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java b/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
index 300aaaf..028cbb0 100644
--- a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
+++ b/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
@@ -56,40 +56,40 @@
@Test
public void testDataTitleValid_ReturnsPreferenceTitle() {
- XmlResourceParser parser = getChildByType(R.xml.gesture_settings,
- "com.android.settings.gestures.GesturePreference");
+ XmlResourceParser parser = getChildByType(R.xml.ia_display_settings,
+ "com.android.settings.TimeoutListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String title = XmlParserUtils.getDataTitle(mContext, attrs);
- String expTitle = mContext.getString(R.string.assist_gesture_title);
+ String expTitle = mContext.getString(R.string.screen_timeout);
assertThat(title).isEqualTo(expTitle);
}
@Test
public void testDataKeywordsValid_ReturnsPreferenceKeywords() {
- XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+ XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
final AttributeSet attrs = Xml.asAttributeSet(parser);
String keywords = XmlParserUtils.getDataKeywords(mContext, attrs);
- String expKeywords = mContext.getString(R.string.keywords_gesture);
+ String expKeywords = mContext.getString(R.string.keywords_display);
assertThat(keywords).isEqualTo(expKeywords);
}
@Test
public void testDataKeyValid_ReturnsPreferenceKey() {
- XmlResourceParser parser = getChildByType(R.xml.gesture_settings,
- "com.android.settings.gestures.GesturePreference");
+ XmlResourceParser parser = getChildByType(R.xml.ia_display_settings,
+ "com.android.settings.TimeoutListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String key = XmlParserUtils.getDataKey(mContext, attrs);
- String expKey = "gesture_assist";
+ String expKey = "screen_timeout";
assertThat(key).isEqualTo(expKey);
}
@Test
public void testDataSummaryValid_ReturnsPreferenceSummary() {
- XmlResourceParser parser = getChildByType(R.xml.gesture_settings,
- "com.android.settings.gestures.GesturePreference");
+ XmlResourceParser parser = getChildByType(R.xml.ia_display_settings,
+ "com.android.settings.TimeoutListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String summary = XmlParserUtils.getDataSummary(mContext, attrs);
- String expSummary = mContext.getString(R.string.assist_gesture_summary);
+ String expSummary = mContext.getString(R.string.screen_timeout_summary);
assertThat(summary).isEqualTo(expSummary);
}
@@ -128,7 +128,7 @@
@Test
public void testDataKeyInvalid_ReturnsNull() {
- XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+ XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
final AttributeSet attrs = Xml.asAttributeSet(parser);
String key = XmlParserUtils.getDataKey(mContext, attrs);
assertThat(key).isNull();
@@ -136,7 +136,7 @@
@Test
public void testDataSummaryInvalid_ReturnsNull() {
- XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+ XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
final AttributeSet attrs = Xml.asAttributeSet(parser);
String summary = XmlParserUtils.getDataSummary(mContext, attrs);
assertThat(summary).isNull();
@@ -144,7 +144,7 @@
@Test
public void testDataSummaryOffInvalid_ReturnsNull() {
- XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+ XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
final AttributeSet attrs = Xml.asAttributeSet(parser);
String summaryOff = XmlParserUtils.getDataSummaryOff(mContext, attrs);
assertThat(summaryOff).isNull();
@@ -152,7 +152,7 @@
@Test
public void testDataEntriesInvalid_ReturnsNull() {
- XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+ XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
final AttributeSet attrs = Xml.asAttributeSet(parser);
String entries = XmlParserUtils.getDataEntries(mContext, attrs);
assertThat(entries).isNull();
diff --git a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
index d69ba3e..6f326ab 100644
--- a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
+++ b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
@@ -29,7 +29,7 @@
import com.android.settings.SubSettings;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.SiteMapManager;
-import com.android.settings.gestures.GestureSettings;
+import com.android.settings.gestures.SwipeToNotificationSettings;
import com.android.settings.search2.ResultPayload.PayloadType;
import org.junit.Before;
@@ -155,7 +155,7 @@
TITLES[0], // Title
SUMMARY, // Summary on
SUMMARY, // summary off
- GestureSettings.class.getName(),
+ SwipeToNotificationSettings.class.getName(),
BLANK, // screen title
null, // icon
BLANK, // action
@@ -226,7 +226,7 @@
TITLES[0], // Title
SUMMARY, // Summary on
SUMMARY, // summary off
- GestureSettings.class.getName(),
+ SwipeToNotificationSettings.class.getName(),
BLANK, // screen title
null, // icon
BLANK, // action
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index eaaa00e..fdc1052 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -205,25 +205,25 @@
@Test
public void testAddResource_RowsInserted() {
- SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+ SearchIndexableResource resource = getFakeResource(R.xml.ia_display_settings);
mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
new HashMap<>());
Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
- assertThat(cursor.getCount()).isEqualTo(7);
+ assertThat(cursor.getCount()).isEqualTo(16);
}
@Test
public void testAddResourceWithNIKs_RowsInsertedDisabled() {
- SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
- // Only add 2 of 6 items to be disabled.
- String[] keys = {"gesture_double_tap_power", "gesture_swipe_down_fingerprint"};
+ SearchIndexableResource resource = getFakeResource(R.xml.ia_display_settings);
+ // Only add 2 of 16 items to be disabled.
+ String[] keys = {"brightness", "wallpaper"};
Map<String, List<String>> niks = getNonIndexableKeys(keys);
mManager.indexOneSearchIndexableData(mDb, localeStr, resource, niks);
Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
assertThat(cursor.getCount()).isEqualTo(2);
cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
- assertThat(cursor.getCount()).isEqualTo(5);
+ assertThat(cursor.getCount()).isEqualTo(14);
}
@Test
@@ -306,7 +306,7 @@
@Test
public void testAddResourceCustomSetting_RowsMatch() {
- SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+ SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings);
mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
new HashMap<>());
final String prefTitle =
@@ -339,7 +339,7 @@
assertThat(cursor.getString(9)).isEmpty();
// Screen Title
assertThat(cursor.getString(10)).isEqualTo(
- mContext.getString(R.string.gesture_preference_title));
+ mContext.getString(R.string.fingerprint_swipe_for_notifications_title));
// Class Name
assertThat(cursor.getString(11)).isEqualTo(className);
// Icon
@@ -477,7 +477,7 @@
@Test
public void testResourceProvider_RowInserted() {
- SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+ SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings);
resource.xmlResId = 0;
resource.className = "com.android.settings.display.ScreenZoomSettings";
@@ -489,7 +489,7 @@
@Test
public void testResourceProvider_Matches() {
- SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+ SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings);
resource.xmlResId = 0;
resource.className = "com.android.settings.display.ScreenZoomSettings";
diff --git a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java
index 70e05d6..10ba293 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageAsyncLoaderTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
@@ -45,13 +46,14 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class StorageAsyncLoaderTest {
private static final int PRIMARY_USER_ID = 0;
private static final int SECONDARY_USER_ID = 10;
+ private static final String PACKAGE_NAME_1 = "com.blah.test";
+ private static final String PACKAGE_NAME_2 = "com.blah.test2";
@Mock
private StorageStatsSource mSource;
@@ -81,8 +83,8 @@
@Test
public void testLoadingApps() throws Exception {
- addPackage(1001, 0, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
- addPackage(1002, 0, 100, 1000, ApplicationInfo.CATEGORY_UNDEFINED);
+ addPackage(PACKAGE_NAME_1, 0, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
+ addPackage(PACKAGE_NAME_2, 0, 100, 1000, ApplicationInfo.CATEGORY_UNDEFINED);
SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
@@ -93,7 +95,7 @@
@Test
public void testGamesAreFiltered() throws Exception {
- addPackage(1001, 0, 1, 10, ApplicationInfo.CATEGORY_GAME);
+ addPackage(PACKAGE_NAME_1, 0, 1, 10, ApplicationInfo.CATEGORY_GAME);
SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
@@ -103,19 +105,8 @@
}
@Test
- public void testDuplicateUidsAreSkipped() throws Exception {
- addPackage(1001, 0, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
- addPackage(1001, 0, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
-
- SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
-
- assertThat(result.size()).isEqualTo(1);
- assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(11L);
- }
-
- @Test
public void testCacheIsIgnored() throws Exception {
- addPackage(1001, 100, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
+ addPackage(PACKAGE_NAME_1, 100, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
@@ -140,16 +131,43 @@
assertThat(result.get(SECONDARY_USER_ID).externalStats.totalBytes).isEqualTo(10L);
}
- private void addPackage(int uid, long cacheSize, long codeSize, long dataSize, int category) {
+ @Test
+ public void testSystemAppsBaseSizeIsIgnored() throws Exception {
+ ApplicationInfo systemApp =
+ addPackage(PACKAGE_NAME_1, 100, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
+ systemApp.flags = ApplicationInfo.FLAG_SYSTEM;
+
+ SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
+
+ assertThat(result.size()).isEqualTo(1);
+ assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(10L);
+ }
+
+ @Test
+ public void testUpdatedSystemAppCodeSizeIsCounted() throws Exception {
+ ApplicationInfo systemApp =
+ addPackage(PACKAGE_NAME_1, 100, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);
+ systemApp.flags = ApplicationInfo.FLAG_SYSTEM & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
+
+ SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();
+
+ assertThat(result.size()).isEqualTo(1);
+ assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(11L);
+ }
+
+ private ApplicationInfo addPackage(
+ String packageName, long cacheSize, long codeSize, long dataSize, int category) {
StorageStatsSource.AppStorageStats storageStats =
mock(StorageStatsSource.AppStorageStats.class);
when(storageStats.getCodeBytes()).thenReturn(codeSize);
when(storageStats.getDataBytes()).thenReturn(dataSize);
- when(mSource.getStatsForUid(anyString(), eq(uid))).thenReturn(storageStats);
+ when(mSource.getStatsForPackage(anyString(), eq(packageName), any(UserHandle.class)))
+ .thenReturn(storageStats);
ApplicationInfo info = new ApplicationInfo();
- info.uid = uid;
+ info.packageName = packageName;
info.category = category;
mInfo.add(info);
+ return info;
}
}