Snap for 8904202 from 0e37ac8d7a to udc-release
Change-Id: I427875a91e0f9e282edf708250080564a0b55288
This commit is contained in:
@@ -2110,7 +2110,7 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||
android:value="com.android.settings.accessibility.CaptionPropertiesFragment" />
|
||||
android:value="com.android.settings.accessibility.CaptioningPropertiesFragment" />
|
||||
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
|
||||
android:value="@string/menu_key_accessibility"/>
|
||||
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="440dp"
|
||||
android:layout_marginTop="-52dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:scaleType="centerInside"
|
||||
android:visibility="gone"
|
||||
app:lottie_autoPlay="true"
|
||||
app:lottie_loop="true"
|
||||
@@ -66,7 +66,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="invisible"
|
||||
android:background="@drawable/face_enroll_icon_large"/>
|
||||
android:src="@drawable/face_enroll_icon_large"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@@ -83,7 +83,8 @@
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="-24dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/accessibility_button"
|
||||
|
||||
@@ -97,8 +97,8 @@
|
||||
|
||||
<dimen name="rect_button_radius">8dp</dimen>
|
||||
|
||||
<!-- Default text size for caption preview samples. Uses dp rather than sp because captions are not scaled. -->
|
||||
<dimen name="caption_preview_text_size">48dp</dimen>
|
||||
<!-- Default text size for captioning preview samples. Uses dp rather than sp because captions are not scaled. -->
|
||||
<dimen name="captioning_preview_text_size">48dp</dimen>
|
||||
|
||||
<!-- ActionBar height -->
|
||||
<dimen name="actionbar_size">56dip</dimen>
|
||||
|
||||
@@ -5599,20 +5599,20 @@
|
||||
<string name="accessibility_color_inversion_about_title">About color inversion</string>
|
||||
<!-- Color correction footer link content description [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_color_inversion_footer_learn_more_content_description">Learn more about color inversion</string>
|
||||
<!-- Title for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
|
||||
<string name="accessibility_caption_primary_switch_title">Show captions</string>
|
||||
<!-- Summary for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_caption_primary_switch_summary">For supported app only</string>
|
||||
<!-- Title for Caption preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
|
||||
<string name="captioning_caption_appearance_title">Caption size and style</string>
|
||||
<!-- Summary for Captions settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
|
||||
<string name="captioning_caption_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
|
||||
<!-- Title for Caption preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
|
||||
<!-- Title for captioning settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
|
||||
<string name="accessibility_captioning_primary_switch_title">Show captions</string>
|
||||
<!-- Summary for captioning settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_captioning_primary_switch_summary">For supported app only</string>
|
||||
<!-- Title for captioning preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
|
||||
<string name="captioning_appearance_title">Caption size and style</string>
|
||||
<!-- Summary for captioning settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
|
||||
<string name="captioning_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
|
||||
<!-- Title for captioning preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
|
||||
<string name="captioning_more_options_title">More options</string>
|
||||
<!-- Introduction for the captions preference page. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_caption_preference_intro">Customize caption size and style to make them easier to read</string>
|
||||
<!-- Summary for the captions preference page. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_caption_preference_summary">These caption preferences aren\u2019t supported by all media apps</string>
|
||||
<!-- Introduction for the captioning preference page. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_captioning_preference_intro">Customize caption size and style to make them easier to read</string>
|
||||
<!-- Summary for the captioning preference page. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_captioning_preference_summary">These caption preferences aren\u2019t supported by all media apps</string>
|
||||
<!-- Summary for accessibility shortcut preference for software shortcut type. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_shortcut_type_software">Accessibility button</string>
|
||||
<!-- Summary for accessibility shortcut preference for software shortcut type when gesture mode is on. [CHAR LIMIT=NONE] -->
|
||||
@@ -5793,7 +5793,7 @@
|
||||
<string name="captioning_edge_type">Edge type</string>
|
||||
<!-- Title for the preference to change video caption font family (ex. monospace, sans-serif). [CHAR LIMIT=35] -->
|
||||
<string name="captioning_typeface">Font family</string>
|
||||
<!-- Sample text for previewing video caption preferences. [CHAR LIMIT=NONE] -->
|
||||
<!-- Sample text for previewing video captioning preferences. [CHAR LIMIT=NONE] -->
|
||||
<string name="captioning_preview_text">Captions will look like this</string>
|
||||
<!-- Sample characters for previewing video caption preferences. [CHAR LIMIT=2] -->
|
||||
<string name="captioning_preview_characters">Aa</string>
|
||||
@@ -11261,6 +11261,21 @@
|
||||
<!-- [CHAR_LIMIT=NONE] Label for when app is ignoring battery optimizations -->
|
||||
<string name="not_battery_optimizing">Not using battery optimization</string>
|
||||
|
||||
<!-- Preference title for battery optimization list page[CHAR_LIMIT=50]-->
|
||||
<string name="app_battery_optimization_title">Manage battery usage</string>
|
||||
|
||||
<!-- Preference summary for battery optimization list page[CHAR_LIMIT=50]-->
|
||||
<string name="app_battery_optimization_summary">Set battery usage for apps</string>
|
||||
|
||||
<!-- Filter title for battery unrestricted[CHAR_LIMIT=50]-->
|
||||
<string name="filter_battery_unrestricted_title">Unrestricted</string>
|
||||
|
||||
<!-- Filter title for battery optimized[CHAR_LIMIT=50]-->
|
||||
<string name="filter_battery_optimized_title">Optimized</string>
|
||||
|
||||
<!-- Filter title for battery restricted[CHAR_LIMIT=50]-->
|
||||
<string name="filter_battery_restricted_title">Restricted</string>
|
||||
|
||||
<!-- Text for the setting on whether you can type text into notifications without unlocking the device. -->
|
||||
<string name="lockscreen_remote_input">If device is locked, prevent typing replies or other text in notifications</string>
|
||||
|
||||
|
||||
@@ -119,10 +119,9 @@
|
||||
settings:controller="com.android.settings.accessibility.LiveCaptionPreferenceController"/>
|
||||
|
||||
<Preference
|
||||
android:fragment="com.android.settings.accessibility.CaptionPropertiesFragment"
|
||||
android:fragment="com.android.settings.accessibility.CaptioningPropertiesFragment"
|
||||
android:key="captioning_preference_screen"
|
||||
android:icon="@drawable/ic_captioning"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_captioning_title"
|
||||
settings:controller="com.android.settings.accessibility.CaptioningPreferenceController"/>
|
||||
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/captioning_caption_appearance_title">
|
||||
android:title="@string/captioning_appearance_title">
|
||||
|
||||
<com.android.settingslib.widget.LayoutPreference
|
||||
android:key="caption_preview"
|
||||
android:key="captioning_preview"
|
||||
android:title="@string/summary_placeholder"
|
||||
android:layout="@layout/captioning_preview"
|
||||
android:selectable="false"
|
||||
settings:searchable="false"
|
||||
settings:controller="com.android.settings.accessibility.CaptionPreviewPreferenceController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningPreviewPreferenceController"/>
|
||||
|
||||
<ListPreference
|
||||
android:entries="@array/captioning_font_size_selector_titles"
|
||||
@@ -34,17 +34,17 @@
|
||||
android:key="captioning_font_size"
|
||||
android:summary="%s"
|
||||
android:title="@string/captioning_text_size"
|
||||
settings:controller="com.android.settings.accessibility.CaptionFontSizeController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningFontSizeController"/>
|
||||
|
||||
<com.android.settings.accessibility.PresetPreference
|
||||
android:key="captioning_preset"
|
||||
android:title="@string/captioning_preset"
|
||||
settings:controller="com.android.settings.accessibility.CaptionPresetController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningPresetController"/>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="custom"
|
||||
android:title="@string/captioning_custom_options_title"
|
||||
settings:controller="com.android.settings.accessibility.CaptionCustomController">
|
||||
settings:controller="com.android.settings.accessibility.CaptioningCustomController">
|
||||
|
||||
<ListPreference
|
||||
android:entries="@array/captioning_typeface_selector_titles"
|
||||
@@ -52,58 +52,57 @@
|
||||
android:key="captioning_typeface"
|
||||
android:summary="%s"
|
||||
android:title="@string/captioning_typeface"
|
||||
settings:controller="com.android.settings.accessibility.CaptionTypefaceController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningTypefaceController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:key="captioning_foreground_color"
|
||||
android:title="@string/captioning_foreground_color"
|
||||
settings:controller="com.android.settings.accessibility.CaptionForegroundColorController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningForegroundColorController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:dependency="captioning_foreground_color"
|
||||
android:key="captioning_foreground_opacity"
|
||||
android:title="@string/captioning_foreground_opacity"
|
||||
settings:controller="com.android.settings.accessibility.CaptionForegroundOpacityController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningForegroundOpacityController"/>
|
||||
|
||||
<com.android.settings.accessibility.EdgeTypePreference
|
||||
android:key="captioning_edge_type"
|
||||
android:title="@string/captioning_edge_type"
|
||||
settings:controller="com.android.settings.accessibility.CaptionEdgeTypeController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningEdgeTypeController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:dependency="captioning_edge_type"
|
||||
android:key="captioning_edge_color"
|
||||
android:title="@string/captioning_edge_color"
|
||||
settings:controller="com.android.settings.accessibility.CaptionEdgeColorController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningEdgeColorController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:key="captioning_background_color"
|
||||
android:title="@string/captioning_background_color"
|
||||
settings:controller="com.android.settings.accessibility.CaptionBackgroundColorController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningBackgroundColorController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:dependency="captioning_background_color"
|
||||
android:key="captioning_background_opacity"
|
||||
android:title="@string/captioning_background_opacity"
|
||||
settings:controller="com.android.settings.accessibility.CaptionBackgroundOpacityController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningBackgroundOpacityController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:key="captioning_window_color"
|
||||
android:title="@string/captioning_window_color"
|
||||
settings:controller="com.android.settings.accessibility.CaptionWindowColorController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningWindowColorController"/>
|
||||
|
||||
<com.android.settings.accessibility.ColorPreference
|
||||
android:dependency="captioning_window_color"
|
||||
android:key="captioning_window_opacity"
|
||||
android:title="@string/captioning_window_opacity"
|
||||
settings:controller="com.android.settings.accessibility.CaptionWindowOpacityController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningWindowOpacityController"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<com.android.settings.accessibility.AccessibilityFooterPreference
|
||||
android:key="captioning_appearance_footer"
|
||||
android:title="@string/accessibility_caption_preference_summary"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_captioning_preference_summary"
|
||||
android:selectable="false"
|
||||
settings:searchable="false"
|
||||
settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -24,14 +24,13 @@
|
||||
android:key="captioning_locale"
|
||||
android:summary="%s"
|
||||
android:title="@string/captioning_locale"
|
||||
settings:controller="com.android.settings.accessibility.CaptionLocalePreferenceController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningLocalePreferenceController"/>
|
||||
|
||||
<com.android.settings.accessibility.AccessibilityFooterPreference
|
||||
android:key="captioning_more_options_footer"
|
||||
android:title="@string/accessibility_caption_preference_summary"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_captioning_preference_summary"
|
||||
android:selectable="false"
|
||||
settings:searchable="false"
|
||||
settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -18,46 +18,39 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_captioning_title">
|
||||
|
||||
<com.android.settingslib.widget.TopIntroPreference
|
||||
android:key="captions_intro"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_caption_preference_intro"/>
|
||||
android:key="captioning_intro"
|
||||
android:title="@string/accessibility_captioning_preference_intro"/>
|
||||
|
||||
<com.android.settingslib.widget.IllustrationPreference
|
||||
android:key="captions_preview"
|
||||
android:persistent="false"
|
||||
android:key="captioning_preview"
|
||||
android:selectable="false"
|
||||
settings:lottie_rawRes="@drawable/accessibility_captions_banner"
|
||||
settings:lottie_rawRes="@drawable/accessibility_captioning_banner"
|
||||
settings:searchable="false" />
|
||||
|
||||
<com.android.settings.widget.SettingsMainSwitchPreference
|
||||
android:key="captioning_preference_switch"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_caption_primary_switch_title"
|
||||
settings:controller="com.android.settings.accessibility.CaptionTogglePreferenceController"/>
|
||||
android:title="@string/accessibility_captioning_primary_switch_title"
|
||||
settings:controller="com.android.settings.accessibility.CaptioningTogglePreferenceController"/>
|
||||
|
||||
<Preference
|
||||
android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment"
|
||||
android:key="captioning_caption_appearance"
|
||||
android:persistent="false"
|
||||
android:title="@string/captioning_caption_appearance_title"
|
||||
settings:controller="com.android.settings.accessibility.CaptionAppearancePreferenceController" />
|
||||
android:fragment="com.android.settings.accessibility.CaptioningAppearanceFragment"
|
||||
android:key="captioning_appearance"
|
||||
android:title="@string/captioning_appearance_title"
|
||||
settings:controller="com.android.settings.accessibility.CaptioningAppearancePreferenceController" />
|
||||
|
||||
<Preference
|
||||
android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment"
|
||||
android:fragment="com.android.settings.accessibility.CaptioningMoreOptionsFragment"
|
||||
android:key="captioning_more_options"
|
||||
android:persistent="false"
|
||||
android:title="@string/captioning_more_options_title" />
|
||||
|
||||
<com.android.settings.accessibility.AccessibilityFooterPreference
|
||||
android:key="captioning_settings_footer"
|
||||
android:title="@string/accessibility_caption_preference_summary"
|
||||
android:persistent="false"
|
||||
android:title="@string/accessibility_captioning_preference_summary"
|
||||
android:selectable="false"
|
||||
settings:searchable="false"
|
||||
settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
|
||||
settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -27,6 +27,11 @@
|
||||
settings:controller="com.android.settings.dream.DreamMainSwitchPreferenceController"
|
||||
settings:searchable="false"/>
|
||||
|
||||
<Preference
|
||||
android:key="when_to_start"
|
||||
android:title="@string/screensaver_settings_when_to_dream"
|
||||
android:fragment="com.android.settings.dream.WhenToDreamPicker"/>
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/dream_picker_category">
|
||||
<com.android.settingslib.widget.LayoutPreference
|
||||
@@ -36,17 +41,13 @@
|
||||
settings:controller="com.android.settings.dream.DreamPickerController"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/dream_more_settings_category">
|
||||
<SwitchPreference
|
||||
android:key="dream_complications_toggle"
|
||||
android:title="@string/dream_complications_toggle_title"
|
||||
android:summary="@string/dream_complications_toggle_summary"
|
||||
settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/>
|
||||
<Preference
|
||||
android:key="when_to_start"
|
||||
android:title="@string/screensaver_settings_when_to_dream"
|
||||
android:fragment="com.android.settings.dream.WhenToDreamPicker"/>
|
||||
</PreferenceCategory>
|
||||
<SwitchPreference
|
||||
android:key="dream_complications_toggle"
|
||||
android:title="@string/dream_complications_toggle_title"
|
||||
android:summary="@string/dream_complications_toggle_summary"
|
||||
settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/>
|
||||
|
||||
<com.android.settings.applications.SpacePreference
|
||||
android:layout_height="16dp" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -326,6 +326,8 @@ public class Settings extends SettingsActivity {
|
||||
public static class ChangeWifiStateActivity extends SettingsActivity { /* empty */ }
|
||||
public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
|
||||
public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
|
||||
/** Activity to manage app battery optimization details. */
|
||||
public static class AppBatteryOptimizationActivity extends SettingsActivity { /* empty */ }
|
||||
|
||||
public static class ManageExternalSourcesActivity extends SettingsActivity {/* empty */ }
|
||||
public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
|
||||
|
||||
@@ -93,7 +93,7 @@ public class CaptionHelper {
|
||||
previewText.setTextSize(virtualHeight * LINE_HEIGHT_RATIO * fontScale);
|
||||
} else {
|
||||
final float textSize = mContext.getResources().getDimension(
|
||||
R.dimen.caption_preview_text_size);
|
||||
R.dimen.captioning_preview_text_size);
|
||||
previewText.setTextSize(textSize * fontScale);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,9 +25,9 @@ import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/** Settings fragment containing font style of captioning properties. */
|
||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||
public class CaptionAppearanceFragment extends DashboardFragment {
|
||||
public class CaptioningAppearanceFragment extends DashboardFragment {
|
||||
|
||||
private static final String TAG = "CaptionAppearanceFragment";
|
||||
private static final String TAG = "CaptioningAppearanceFragment";
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -25,12 +25,12 @@ import com.android.settings.core.BasePreferenceController;
|
||||
import com.google.common.primitives.Floats;
|
||||
import com.google.common.primitives.Ints;
|
||||
|
||||
/** Controller that shows the caption scale and style summary. */
|
||||
public class CaptionAppearancePreferenceController extends BasePreferenceController {
|
||||
/** Controller that shows the captioning scale and style summary. */
|
||||
public class CaptioningAppearancePreferenceController extends BasePreferenceController {
|
||||
|
||||
private final CaptioningManager mCaptioningManager;
|
||||
|
||||
public CaptionAppearancePreferenceController(Context context, String preferenceKey) {
|
||||
public CaptioningAppearancePreferenceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptioningManager = context.getSystemService(CaptioningManager.class);
|
||||
}
|
||||
@@ -26,13 +26,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption background color. */
|
||||
public class CaptionBackgroundColorController extends BasePreferenceController
|
||||
/** Preference controller for captioning background color. */
|
||||
public class CaptioningBackgroundColorController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionBackgroundColorController(Context context, String preferenceKey) {
|
||||
public CaptioningBackgroundColorController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -25,13 +25,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption background opacity. */
|
||||
public class CaptionBackgroundOpacityController extends BasePreferenceController
|
||||
/** Preference controller for captioning background opacity. */
|
||||
public class CaptioningBackgroundOpacityController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionBackgroundOpacityController(Context context, String preferenceKey) {
|
||||
public CaptioningBackgroundOpacityController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -35,8 +35,8 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/** Preference controller for caption custom visibility. */
|
||||
public class CaptionCustomController extends BasePreferenceController
|
||||
/** Preference controller for captioning custom visibility. */
|
||||
public class CaptioningCustomController extends BasePreferenceController
|
||||
implements LifecycleObserver, OnStart, OnStop {
|
||||
|
||||
private Preference mCustom;
|
||||
@@ -49,7 +49,7 @@ public class CaptionCustomController extends BasePreferenceController
|
||||
Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET
|
||||
);
|
||||
|
||||
public CaptionCustomController(Context context, String preferenceKey) {
|
||||
public CaptioningCustomController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
mContentResolver = context.getContentResolver();
|
||||
@@ -60,7 +60,7 @@ public class CaptionCustomController extends BasePreferenceController
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
CaptionCustomController(Context context, String preferenceKey,
|
||||
CaptioningCustomController(Context context, String preferenceKey,
|
||||
AccessibilitySettingsContentObserver contentObserver) {
|
||||
this(context, preferenceKey);
|
||||
mSettingsContentObserver = contentObserver;
|
||||
@@ -25,13 +25,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption edge color. */
|
||||
public class CaptionEdgeColorController extends BasePreferenceController
|
||||
/** Preference controller for captioning edge color. */
|
||||
public class CaptioningEdgeColorController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionEdgeColorController(Context context, String preferenceKey) {
|
||||
public CaptioningEdgeColorController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -23,13 +23,13 @@ import androidx.preference.PreferenceScreen;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption edge type. */
|
||||
public class CaptionEdgeTypeController extends BasePreferenceController
|
||||
/** Preference controller for captioning edge type. */
|
||||
public class CaptioningEdgeTypeController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionEdgeTypeController(Context context, String preferenceKey) {
|
||||
public CaptioningEdgeTypeController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -27,14 +27,14 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption font size. */
|
||||
public class CaptionFontSizeController extends BasePreferenceController
|
||||
/** Preference controller for captioning font size. */
|
||||
public class CaptioningFontSizeController extends BasePreferenceController
|
||||
implements Preference.OnPreferenceChangeListener {
|
||||
|
||||
private final CaptioningManager mCaptioningManager;
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionFontSizeController(Context context, String preferenceKey) {
|
||||
public CaptioningFontSizeController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptioningManager = context.getSystemService(CaptioningManager.class);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
@@ -20,12 +20,10 @@ import android.content.Context;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
/**
|
||||
* Preference controller for caption footer.
|
||||
*/
|
||||
public class CaptionFooterPreferenceController extends AccessibilityFooterPreferenceController {
|
||||
/** Preference controller for captioning footer. */
|
||||
public class CaptioningFooterPreferenceController extends AccessibilityFooterPreferenceController {
|
||||
|
||||
public CaptionFooterPreferenceController(Context context, String key) {
|
||||
public CaptioningFooterPreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
}
|
||||
|
||||
@@ -25,13 +25,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption foreground color. */
|
||||
public class CaptionForegroundColorController extends BasePreferenceController
|
||||
/** Preference controller for captioning foreground color. */
|
||||
public class CaptioningForegroundColorController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionForegroundColorController(Context context, String preferenceKey) {
|
||||
public CaptioningForegroundColorController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -25,13 +25,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption foreground opacity. */
|
||||
public class CaptionForegroundOpacityController extends BasePreferenceController
|
||||
/** Preference controller for captioning foreground opacity. */
|
||||
public class CaptioningForegroundOpacityController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionForegroundOpacityController(Context context, String preferenceKey) {
|
||||
public CaptioningForegroundOpacityController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -25,13 +25,13 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Controller that shows the caption locale summary. */
|
||||
public class CaptionLocalePreferenceController extends BasePreferenceController
|
||||
/** Controller that shows the captioning locale summary. */
|
||||
public class CaptioningLocalePreferenceController extends BasePreferenceController
|
||||
implements Preference.OnPreferenceChangeListener {
|
||||
|
||||
private final CaptioningManager mCaptioningManager;
|
||||
|
||||
public CaptionLocalePreferenceController(Context context, String preferenceKey) {
|
||||
public CaptioningLocalePreferenceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptioningManager = context.getSystemService(CaptioningManager.class);
|
||||
}
|
||||
@@ -25,9 +25,9 @@ import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/** Settings fragment containing more options of captioning properties. */
|
||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||
public class CaptionMoreOptionsFragment extends DashboardFragment {
|
||||
public class CaptioningMoreOptionsFragment extends DashboardFragment {
|
||||
|
||||
private static final String TAG = "CaptionMoreOptionsFragment";
|
||||
private static final String TAG = "CaptioningMoreOptionsFragment";
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -24,13 +24,13 @@ import androidx.preference.PreferenceScreen;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption preset. */
|
||||
public class CaptionPresetController extends BasePreferenceController
|
||||
/** Preference controller for captioning preset. */
|
||||
public class CaptioningPresetController extends BasePreferenceController
|
||||
implements ListDialogPreference.OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionPresetController(Context context, String preferenceKey) {
|
||||
public CaptioningPresetController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -39,8 +39,8 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/** Controller that shows the caption locale summary. */
|
||||
public class CaptionPreviewPreferenceController extends BasePreferenceController
|
||||
/** Controller that shows the captioning locale summary. */
|
||||
public class CaptioningPreviewPreferenceController extends BasePreferenceController
|
||||
implements LifecycleObserver, OnStart, OnStop {
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -60,7 +60,7 @@ public class CaptionPreviewPreferenceController extends BasePreferenceController
|
||||
private CaptionHelper mCaptionHelper;
|
||||
private LayoutPreference mPreference;
|
||||
|
||||
public CaptionPreviewPreferenceController(Context context, String preferenceKey) {
|
||||
public CaptioningPreviewPreferenceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
|
||||
@@ -25,9 +25,9 @@ import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/** Settings fragment containing captioning properties. */
|
||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||
public class CaptionPropertiesFragment extends DashboardFragment {
|
||||
public class CaptioningPropertiesFragment extends DashboardFragment {
|
||||
|
||||
private static final String TAG = "CaptionPropertiesFragment";
|
||||
private static final String TAG = "CaptioningPropertiesFragment";
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -26,13 +26,13 @@ import com.android.settings.core.TogglePreferenceController;
|
||||
import com.android.settings.widget.SettingsMainSwitchPreference;
|
||||
import com.android.settingslib.widget.OnMainSwitchChangeListener;
|
||||
|
||||
/** Preference controller for caption more options. */
|
||||
public class CaptionTogglePreferenceController extends TogglePreferenceController
|
||||
/** Preference controller for captioning more options. */
|
||||
public class CaptioningTogglePreferenceController extends TogglePreferenceController
|
||||
implements OnMainSwitchChangeListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionTogglePreferenceController(Context context, String preferenceKey) {
|
||||
public CaptioningTogglePreferenceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -27,13 +27,13 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption type face. */
|
||||
public class CaptionTypefaceController extends BasePreferenceController
|
||||
/** Preference controller for captioning type face. */
|
||||
public class CaptioningTypefaceController extends BasePreferenceController
|
||||
implements Preference.OnPreferenceChangeListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionTypefaceController(Context context, String preferenceKey) {
|
||||
public CaptioningTypefaceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -26,13 +26,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption window color. */
|
||||
public class CaptionWindowColorController extends BasePreferenceController
|
||||
/** Preference controller for captioning window color. */
|
||||
public class CaptioningWindowColorController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionWindowColorController(Context context, String preferenceKey) {
|
||||
public CaptioningWindowColorController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -25,13 +25,13 @@ import com.android.settings.R;
|
||||
import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/** Preference controller for caption window opacity. */
|
||||
public class CaptionWindowOpacityController extends BasePreferenceController
|
||||
/** Preference controller for captioning window opacity. */
|
||||
public class CaptioningWindowOpacityController extends BasePreferenceController
|
||||
implements OnValueChangedListener {
|
||||
|
||||
private final CaptionHelper mCaptionHelper;
|
||||
|
||||
public CaptionWindowOpacityController(Context context, String preferenceKey) {
|
||||
public CaptioningWindowOpacityController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mCaptionHelper = new CaptionHelper(context);
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.applications;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.app.AppOpsManager;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
||||
import com.android.settingslib.applications.ApplicationsState.AppFilter;
|
||||
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Class for bridging the Battery optimization information to ApplicationState.
|
||||
*/
|
||||
public class AppStateBatteryOptimizationBridge extends AppStateBaseBridge {
|
||||
private static final String TAG = AppStateBatteryOptimizationBridge.class.getSimpleName();
|
||||
static final boolean DEBUG = Build.IS_DEBUGGABLE;
|
||||
|
||||
private final Context mContext;
|
||||
private final AppOpsManager mAppOpsManager;
|
||||
private final PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
|
||||
private static final int MODE_UNKNOWN = 0;
|
||||
private static final int MODE_UNRESTRICTED = 1;
|
||||
private static final int MODE_OPTIMIZED = 2;
|
||||
private static final int MODE_RESTRICTED = 3;
|
||||
|
||||
@IntDef(
|
||||
prefix = {"MODE_"},
|
||||
value = {
|
||||
MODE_UNKNOWN,
|
||||
MODE_RESTRICTED,
|
||||
MODE_UNRESTRICTED,
|
||||
MODE_OPTIMIZED,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface OptimizationMode {
|
||||
}
|
||||
|
||||
public AppStateBatteryOptimizationBridge(
|
||||
Context context, ApplicationsState appState, Callback callback) {
|
||||
super(appState, callback);
|
||||
mContext = context;
|
||||
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
||||
mPowerAllowlistBackend = PowerAllowlistBackend.getInstance(mContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
|
||||
app.extraInfo = getAppBatteryOptimizationState(pkg, uid);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadAllExtraInfo() {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Start loadAllExtraInfo()");
|
||||
}
|
||||
mAppSession.getAllApps().stream().forEach(appEntry ->
|
||||
updateExtraInfo(appEntry, appEntry.info.packageName, appEntry.info.uid));
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "End loadAllExtraInfo()");
|
||||
}
|
||||
}
|
||||
|
||||
protected Object getAppBatteryOptimizationState(String pkg, int uid) {
|
||||
// Restricted = AppOpsManager.MODE_IGNORED + !allowListed
|
||||
// Unrestricted = AppOpsManager.MODE_ALLOWED + allowListed
|
||||
// Optimized = AppOpsManager.MODE_ALLOWED + !allowListed
|
||||
|
||||
boolean allowListed = mPowerAllowlistBackend.isAllowlisted(pkg);
|
||||
int aomMode =
|
||||
mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, pkg);
|
||||
@OptimizationMode int mode = MODE_UNKNOWN;
|
||||
String modeName = "";
|
||||
if (aomMode == AppOpsManager.MODE_IGNORED && !allowListed) {
|
||||
mode = MODE_RESTRICTED;
|
||||
if (DEBUG) {
|
||||
modeName = "RESTRICTED";
|
||||
}
|
||||
} else if (aomMode == AppOpsManager.MODE_ALLOWED) {
|
||||
mode = allowListed ? MODE_UNRESTRICTED : MODE_OPTIMIZED;
|
||||
if (DEBUG) {
|
||||
modeName = allowListed ? "UNRESTRICTED" : "OPTIMIZED";
|
||||
}
|
||||
}
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Pkg: " + pkg + ", mode: " + modeName);
|
||||
}
|
||||
return new BatteryOptimizationDetails(mode);
|
||||
}
|
||||
|
||||
@OptimizationMode
|
||||
private static int getBatteryOptimizationDetailsMode(AppEntry entry) {
|
||||
if (entry == null || entry.extraInfo == null) {
|
||||
return MODE_UNKNOWN;
|
||||
}
|
||||
|
||||
return entry.extraInfo instanceof BatteryOptimizationDetails
|
||||
? ((BatteryOptimizationDetails) entry.extraInfo).mMode
|
||||
: MODE_UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by {@link com.android.settings.applications.manageapplications.AppFilterRegistry} to
|
||||
* determine which apps are unrestricted.
|
||||
*/
|
||||
public static final AppFilter FILTER_BATTERY_UNRESTRICTED_APPS =
|
||||
new AppFilter() {
|
||||
@Override
|
||||
public void init() {}
|
||||
|
||||
@Override
|
||||
public boolean filterApp(AppEntry info) {
|
||||
return getBatteryOptimizationDetailsMode(info) == MODE_UNRESTRICTED;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Used by {@link com.android.settings.applications.manageapplications.AppFilterRegistry} to
|
||||
* determine which apps are optimized.
|
||||
*/
|
||||
public static final AppFilter FILTER_BATTERY_OPTIMIZED_APPS =
|
||||
new AppFilter() {
|
||||
@Override
|
||||
public void init() {}
|
||||
|
||||
@Override
|
||||
public boolean filterApp(AppEntry info) {
|
||||
return getBatteryOptimizationDetailsMode(info) == MODE_OPTIMIZED;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Used by {@link com.android.settings.applications.manageapplications.AppFilterRegistry} to
|
||||
* determine which apps are restricted.
|
||||
*/
|
||||
public static final AppFilter FILTER_BATTERY_RESTRICTED_APPS =
|
||||
new AppFilter() {
|
||||
@Override
|
||||
public void init() {}
|
||||
|
||||
@Override
|
||||
public boolean filterApp(AppEntry info) {
|
||||
return getBatteryOptimizationDetailsMode(info) == MODE_RESTRICTED;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Extra details for battery optimization app data.
|
||||
*/
|
||||
static final class BatteryOptimizationDetails {
|
||||
@OptimizationMode
|
||||
int mMode;
|
||||
|
||||
BatteryOptimizationDetails(@OptimizationMode int mode) {
|
||||
mMode = mode;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ import androidx.annotation.IntDef;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
|
||||
import com.android.settings.applications.AppStateBatteryOptimizationBridge;
|
||||
import com.android.settings.applications.AppStateInstallAppsBridge;
|
||||
import com.android.settings.applications.AppStateLocaleBridge;
|
||||
import com.android.settings.applications.AppStateManageExternalStorageBridge;
|
||||
@@ -37,28 +38,31 @@ import com.android.settingslib.applications.ApplicationsState;
|
||||
*/
|
||||
public class AppFilterRegistry {
|
||||
|
||||
@IntDef(value = {
|
||||
FILTER_APPS_POWER_ALLOWLIST,
|
||||
FILTER_APPS_POWER_ALLOWLIST_ALL,
|
||||
FILTER_APPS_ALL,
|
||||
FILTER_APPS_ENABLED,
|
||||
FILTER_APPS_INSTANT,
|
||||
FILTER_APPS_DISABLED,
|
||||
FILTER_APPS_RECENT,
|
||||
FILTER_APPS_FREQUENT,
|
||||
FILTER_APPS_PERSONAL,
|
||||
FILTER_APPS_WORK,
|
||||
FILTER_APPS_USAGE_ACCESS,
|
||||
FILTER_APPS_WITH_OVERLAY,
|
||||
FILTER_APPS_WRITE_SETTINGS,
|
||||
FILTER_APPS_INSTALL_SOURCES,
|
||||
FILTER_APPS_BLOCKED,
|
||||
FILTER_ALARMS_AND_REMINDERS,
|
||||
FILTER_APPS_MEDIA_MANAGEMENT,
|
||||
FILTER_APPS_LOCALE,
|
||||
})
|
||||
@interface FilterType {
|
||||
}
|
||||
@IntDef(
|
||||
value = {
|
||||
FILTER_APPS_POWER_ALLOWLIST,
|
||||
FILTER_APPS_POWER_ALLOWLIST_ALL,
|
||||
FILTER_APPS_ALL,
|
||||
FILTER_APPS_ENABLED,
|
||||
FILTER_APPS_INSTANT,
|
||||
FILTER_APPS_DISABLED,
|
||||
FILTER_APPS_RECENT,
|
||||
FILTER_APPS_FREQUENT,
|
||||
FILTER_APPS_PERSONAL,
|
||||
FILTER_APPS_WORK,
|
||||
FILTER_APPS_USAGE_ACCESS,
|
||||
FILTER_APPS_WITH_OVERLAY,
|
||||
FILTER_APPS_WRITE_SETTINGS,
|
||||
FILTER_APPS_INSTALL_SOURCES,
|
||||
FILTER_APPS_BLOCKED,
|
||||
FILTER_ALARMS_AND_REMINDERS,
|
||||
FILTER_APPS_MEDIA_MANAGEMENT,
|
||||
FILTER_APPS_LOCALE,
|
||||
FILTER_APPS_BATTERY_UNRESTRICTED,
|
||||
FILTER_APPS_BATTERY_OPTIMIZED,
|
||||
FILTER_APPS_BATTERY_RESTRICTED,
|
||||
})
|
||||
@interface FilterType {}
|
||||
|
||||
// Filter options used for displayed list of applications
|
||||
// Filters will appear sorted based on their value defined here.
|
||||
@@ -82,14 +86,18 @@ public class AppFilterRegistry {
|
||||
public static final int FILTER_ALARMS_AND_REMINDERS = 18;
|
||||
public static final int FILTER_APPS_MEDIA_MANAGEMENT = 19;
|
||||
public static final int FILTER_APPS_LOCALE = 20;
|
||||
// Next id: 21. If you add an entry here, length of mFilters should be updated
|
||||
public static final int FILTER_APPS_BATTERY_UNRESTRICTED = 21;
|
||||
public static final int FILTER_APPS_BATTERY_OPTIMIZED = 22;
|
||||
public static final int FILTER_APPS_BATTERY_RESTRICTED = 23;
|
||||
// Next id: 24. If you add an entry here, please change NUM_FILTER_ENTRIES.
|
||||
private static final int NUM_FILTER_ENTRIES = 24;
|
||||
|
||||
private static AppFilterRegistry sRegistry;
|
||||
|
||||
private final AppFilterItem[] mFilters;
|
||||
|
||||
private AppFilterRegistry() {
|
||||
mFilters = new AppFilterItem[21];
|
||||
mFilters = new AppFilterItem[NUM_FILTER_ENTRIES];
|
||||
|
||||
// High power allowlist, on
|
||||
mFilters[FILTER_APPS_POWER_ALLOWLIST] = new AppFilterItem(
|
||||
@@ -212,6 +220,28 @@ public class AppFilterRegistry {
|
||||
AppStateLocaleBridge.FILTER_APPS_LOCALE,
|
||||
FILTER_APPS_LOCALE,
|
||||
R.string.app_locale_picker_title);
|
||||
|
||||
// Battery optimization app states:
|
||||
// Unrestricted
|
||||
mFilters[FILTER_APPS_BATTERY_UNRESTRICTED] =
|
||||
new AppFilterItem(
|
||||
AppStateBatteryOptimizationBridge.FILTER_BATTERY_UNRESTRICTED_APPS,
|
||||
FILTER_APPS_BATTERY_UNRESTRICTED,
|
||||
R.string.filter_battery_unrestricted_title);
|
||||
|
||||
// Optimized
|
||||
mFilters[FILTER_APPS_BATTERY_OPTIMIZED] =
|
||||
new AppFilterItem(
|
||||
AppStateBatteryOptimizationBridge.FILTER_BATTERY_OPTIMIZED_APPS,
|
||||
FILTER_APPS_BATTERY_OPTIMIZED,
|
||||
R.string.filter_battery_optimized_title);
|
||||
|
||||
// Unrestricted
|
||||
mFilters[FILTER_APPS_BATTERY_RESTRICTED] =
|
||||
new AppFilterItem(
|
||||
AppStateBatteryOptimizationBridge.FILTER_BATTERY_RESTRICTED_APPS,
|
||||
FILTER_APPS_BATTERY_RESTRICTED,
|
||||
R.string.filter_battery_restricted_title);
|
||||
}
|
||||
|
||||
|
||||
@@ -248,6 +278,8 @@ public class AppFilterRegistry {
|
||||
return FILTER_APPS_MEDIA_MANAGEMENT;
|
||||
case ManageApplications.LIST_TYPE_APPS_LOCALE:
|
||||
return FILTER_APPS_LOCALE;
|
||||
case ManageApplications.LIST_TYPE_BATTERY_OPTIMIZATION:
|
||||
return FILTER_APPS_BATTERY_OPTIMIZED;
|
||||
default:
|
||||
return FILTER_APPS_ALL;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,9 @@ import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;
|
||||
|
||||
import static com.android.settings.ChangeIds.CHANGE_RESTRICT_SAW_INTENT;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_RESTRICTED;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_UNRESTRICTED;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BLOCKED;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_DISABLED;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ENABLED;
|
||||
@@ -96,6 +99,7 @@ import com.android.settings.applications.AppInfoBase;
|
||||
import com.android.settings.applications.AppStateAlarmsAndRemindersBridge;
|
||||
import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
|
||||
import com.android.settings.applications.AppStateBaseBridge;
|
||||
import com.android.settings.applications.AppStateBatteryOptimizationBridge;
|
||||
import com.android.settings.applications.AppStateInstallAppsBridge;
|
||||
import com.android.settings.applications.AppStateLocaleBridge;
|
||||
import com.android.settings.applications.AppStateManageExternalStorageBridge;
|
||||
@@ -120,6 +124,7 @@ import com.android.settings.applications.appinfo.WriteSettingsDetails;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
|
||||
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
|
||||
import com.android.settings.fuelgauge.HighPowerDetail;
|
||||
import com.android.settings.localepicker.AppLocalePickerActivity;
|
||||
import com.android.settings.notification.ConfigureNotificationSettings;
|
||||
@@ -229,6 +234,7 @@ public class ManageApplications extends InstrumentedFragment
|
||||
public static final int LIST_TYPE_ALARMS_AND_REMINDERS = 12;
|
||||
public static final int LIST_TYPE_MEDIA_MANAGEMENT_APPS = 13;
|
||||
public static final int LIST_TYPE_APPS_LOCALE = 14;
|
||||
public static final int LIST_TYPE_BATTERY_OPTIMIZATION = 15;
|
||||
|
||||
// List types that should show instant apps.
|
||||
public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
|
||||
@@ -327,6 +333,8 @@ public class ManageApplications extends InstrumentedFragment
|
||||
}
|
||||
} else if (className.equals(AppLocaleDetails.class.getName())) {
|
||||
mListType = LIST_TYPE_APPS_LOCALE;
|
||||
} else if (className.equals(Settings.AppBatteryOptimizationActivity.class.getName())) {
|
||||
mListType = LIST_TYPE_BATTERY_OPTIMIZATION;
|
||||
} else {
|
||||
mListType = LIST_TYPE_MAIN;
|
||||
}
|
||||
@@ -460,6 +468,12 @@ public class ManageApplications extends InstrumentedFragment
|
||||
if (mListType == LIST_TYPE_HIGH_POWER) {
|
||||
mFilterAdapter.enableFilter(FILTER_APPS_POWER_ALLOWLIST_ALL);
|
||||
}
|
||||
if (mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
|
||||
mFilterAdapter.enableFilter(FILTER_APPS_ALL);
|
||||
mFilterAdapter.enableFilter(FILTER_APPS_BATTERY_UNRESTRICTED);
|
||||
mFilterAdapter.enableFilter(FILTER_APPS_BATTERY_OPTIMIZED);
|
||||
mFilterAdapter.enableFilter(FILTER_APPS_BATTERY_RESTRICTED);
|
||||
}
|
||||
|
||||
setCompositeFilter();
|
||||
}
|
||||
@@ -511,6 +525,8 @@ public class ManageApplications extends InstrumentedFragment
|
||||
return SettingsEnums.MEDIA_MANAGEMENT_APPS;
|
||||
case LIST_TYPE_APPS_LOCALE:
|
||||
return SettingsEnums.APPS_LOCALE_LIST;
|
||||
case LIST_TYPE_BATTERY_OPTIMIZATION:
|
||||
return SettingsEnums.BATTERY_OPTIMIZED_APPS_LIST;
|
||||
default:
|
||||
return SettingsEnums.PAGE_UNKNOWN;
|
||||
}
|
||||
@@ -641,6 +657,10 @@ public class ManageApplications extends InstrumentedFragment
|
||||
intent.putExtra(AppInfoBase.ARG_PACKAGE_UID, mCurrentUid);
|
||||
startActivity(intent);
|
||||
break;
|
||||
case LIST_TYPE_BATTERY_OPTIMIZATION:
|
||||
AdvancedPowerUsageDetail.startBatteryDetailPage(
|
||||
getActivity(), this, mCurrentPkgName);
|
||||
break;
|
||||
// TODO: Figure out if there is a way where we can spin up the profile's settings
|
||||
// process ahead of time, to avoid a long load of data when user clicks on a managed
|
||||
// app. Maybe when they load the list of apps that contains managed profile apps.
|
||||
@@ -923,6 +943,8 @@ public class ManageApplications extends InstrumentedFragment
|
||||
screenTitle = R.string.app_notifications_title;
|
||||
} else if (className.equals(AppLocaleDetails.class.getName())) {
|
||||
screenTitle = R.string.app_locales_picker_menu_title;
|
||||
} else if (className.equals(Settings.AppBatteryOptimizationActivity.class.getName())) {
|
||||
screenTitle = R.string.app_battery_optimization_title;
|
||||
} else {
|
||||
if (screenTitle == -1) {
|
||||
screenTitle = R.string.all_apps;
|
||||
@@ -1115,6 +1137,8 @@ public class ManageApplications extends InstrumentedFragment
|
||||
mExtraInfoBridge = new AppStateMediaManagementAppsBridge(mContext, mState, this);
|
||||
} else if (mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
|
||||
mExtraInfoBridge = new AppStateLocaleBridge(mContext, mState, this);
|
||||
} else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
|
||||
mExtraInfoBridge = new AppStateBatteryOptimizationBridge(mContext, mState, this);
|
||||
} else {
|
||||
mExtraInfoBridge = null;
|
||||
}
|
||||
@@ -1146,18 +1170,21 @@ public class ManageApplications extends InstrumentedFragment
|
||||
|
||||
public void setFilter(AppFilterItem appFilter) {
|
||||
mAppFilter = appFilter;
|
||||
final int filterType = appFilter.getFilterType();
|
||||
|
||||
// Notification filters require resorting the list
|
||||
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
|
||||
if (FILTER_APPS_FREQUENT == appFilter.getFilterType()) {
|
||||
if (FILTER_APPS_FREQUENT == filterType) {
|
||||
rebuild(R.id.sort_order_frequent_notification, false);
|
||||
} else if (FILTER_APPS_RECENT == appFilter.getFilterType()) {
|
||||
} else if (FILTER_APPS_RECENT == filterType) {
|
||||
rebuild(R.id.sort_order_recent_notification, false);
|
||||
} else if (FILTER_APPS_BLOCKED == appFilter.getFilterType()) {
|
||||
} else if (FILTER_APPS_BLOCKED == filterType) {
|
||||
rebuild(R.id.sort_order_alpha, true);
|
||||
} else {
|
||||
rebuild(R.id.sort_order_alpha, true);
|
||||
}
|
||||
} else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
|
||||
logBatteryOptimization(filterType);
|
||||
} else {
|
||||
rebuild();
|
||||
}
|
||||
@@ -1294,6 +1321,26 @@ public class ManageApplications extends InstrumentedFragment
|
||||
});
|
||||
}
|
||||
|
||||
private void logBatteryOptimization(int filterType) {
|
||||
switch(filterType) {
|
||||
case FILTER_APPS_BATTERY_UNRESTRICTED:
|
||||
logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_UNRESTRICTED);
|
||||
break;
|
||||
case FILTER_APPS_BATTERY_OPTIMIZED:
|
||||
logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_OPTIMIZED);
|
||||
break;
|
||||
case FILTER_APPS_BATTERY_RESTRICTED:
|
||||
logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_RESTRICTED);
|
||||
break;
|
||||
default:
|
||||
logAction(SettingsEnums.ACTION_BATTERY_OPTIMIZED_APPS_FILTER_ALL_APPS);
|
||||
}
|
||||
}
|
||||
|
||||
private void logAction(int action) {
|
||||
mManageApplications.mMetricsFeatureProvider.action(mContext, action);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void filterSearch(String query) {
|
||||
if (mSearchFilter == null) {
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.android.settings.TrustedCredentialsSettings;
|
||||
import com.android.settings.accessibility.AccessibilityDetailsSettingsFragment;
|
||||
import com.android.settings.accessibility.AccessibilitySettings;
|
||||
import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
|
||||
import com.android.settings.accessibility.CaptionPropertiesFragment;
|
||||
import com.android.settings.accessibility.CaptioningPropertiesFragment;
|
||||
import com.android.settings.accessibility.TextReadingPreferenceFragmentForSetupWizard;
|
||||
import com.android.settings.accessibility.ToggleColorInversionPreferenceFragment;
|
||||
import com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment;
|
||||
@@ -230,7 +230,7 @@ public class SettingsGateway {
|
||||
AccessibilitySettings.class.getName(),
|
||||
AccessibilitySettingsForSetupWizard.class.getName(),
|
||||
TextReadingPreferenceFragmentForSetupWizard.class.getName(),
|
||||
CaptionPropertiesFragment.class.getName(),
|
||||
CaptioningPropertiesFragment.class.getName(),
|
||||
ToggleDaltonizerPreferenceFragment.class.getName(),
|
||||
ToggleColorInversionPreferenceFragment.class.getName(),
|
||||
ToggleReduceBrightColorsPreferenceFragment.class.getName(),
|
||||
|
||||
@@ -41,15 +41,16 @@ import com.android.settings.applications.appinfo.ButtonActionDialogFragment;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.widget.EntityHeaderController;
|
||||
import com.android.settingslib.HelpUtils;
|
||||
import com.android.settingslib.applications.AppUtils;
|
||||
import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
import com.android.settingslib.core.instrumentation.Instrumentable;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
import com.android.settingslib.widget.FooterPreference;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
@@ -209,8 +210,11 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
return UserHandle.getUserId(batteryEntry.getUid());
|
||||
}
|
||||
|
||||
public static void startBatteryDetailPage(Activity caller,
|
||||
InstrumentedPreferenceFragment fragment, String packageName) {
|
||||
/**
|
||||
* Start packageName's battery detail page.
|
||||
*/
|
||||
public static void startBatteryDetailPage(
|
||||
Activity caller, Instrumentable instrumentable, String packageName) {
|
||||
final Bundle args = new Bundle(3);
|
||||
final PackageManager packageManager = caller.getPackageManager();
|
||||
args.putString(EXTRA_PACKAGE_NAME, packageName);
|
||||
@@ -225,7 +229,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
.setDestination(AdvancedPowerUsageDetail.class.getName())
|
||||
.setTitleRes(R.string.battery_details_title)
|
||||
.setArguments(args)
|
||||
.setSourceMetricsCategory(fragment.getMetricsCategory())
|
||||
.setSourceMetricsCategory(instrumentable.getMetricsCategory())
|
||||
.launch();
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
|
||||
|
||||
@VisibleForTesting
|
||||
Map<Integer, List<BatteryDiffEntry>> mBatteryIndexedMap;
|
||||
Map<Integer, Map<Integer, BatteryDiffData>> mBatteryUsageMap;
|
||||
|
||||
@VisibleForTesting
|
||||
Context mPrefContext;
|
||||
@@ -112,7 +112,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
private final String mPreferenceKey;
|
||||
private final SettingsActivity mActivity;
|
||||
private final InstrumentedPreferenceFragment mFragment;
|
||||
private final CharSequence[] mNotAllowShowEntryPackages;
|
||||
private final CharSequence[] mNotAllowShowSummaryPackages;
|
||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
@@ -120,8 +119,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
// Preference cache to avoid create new instance each time.
|
||||
@VisibleForTesting
|
||||
final Map<String, Preference> mPreferenceCache = new HashMap<>();
|
||||
@VisibleForTesting
|
||||
final List<BatteryDiffEntry> mSystemEntries = new ArrayList<>();
|
||||
|
||||
public BatteryChartPreferenceControllerV2(
|
||||
Context context, String preferenceKey,
|
||||
@@ -134,10 +131,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
mIs24HourFormat = DateFormat.is24HourFormat(context);
|
||||
mMetricsFeatureProvider =
|
||||
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
|
||||
mNotAllowShowEntryPackages =
|
||||
FeatureFactory.getFactory(context)
|
||||
.getPowerUsageFeatureProvider(context)
|
||||
.getHideApplicationEntries(context);
|
||||
mNotAllowShowSummaryPackages =
|
||||
FeatureFactory.getFactory(context)
|
||||
.getPowerUsageFeatureProvider(context)
|
||||
@@ -266,9 +259,12 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
|
||||
Log.d(TAG, "setBatteryHistoryMap() " + (batteryHistoryMap == null ? "null"
|
||||
: ("size=" + batteryHistoryMap.size())));
|
||||
// TODO: implement the callback function.
|
||||
final BatteryLevelData batteryLevelData =
|
||||
DataProcessor.getBatteryLevelData(mContext, mHandler, batteryHistoryMap, null);
|
||||
DataProcessor.getBatteryLevelData(mContext, mHandler, batteryHistoryMap,
|
||||
batteryUsageMap -> {
|
||||
mBatteryUsageMap = batteryUsageMap;
|
||||
refreshUi();
|
||||
});
|
||||
Log.d(TAG, "getBatteryLevelData: " + batteryLevelData);
|
||||
if (batteryLevelData == null) {
|
||||
mDailyViewModel = null;
|
||||
@@ -293,7 +289,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
}
|
||||
refreshUi();
|
||||
// TODO: Loads item icon and label and build mBatteryIndexedMap.
|
||||
}
|
||||
|
||||
void setBatteryChartView(@NonNull final BatteryChartViewV2 dailyChartView,
|
||||
@@ -335,7 +330,7 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
|
||||
@VisibleForTesting
|
||||
boolean refreshUi() {
|
||||
if (mBatteryIndexedMap == null || mDailyChartView == null || mHourlyChartView == null) {
|
||||
if (mBatteryUsageMap == null || mDailyChartView == null || mHourlyChartView == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -378,45 +373,22 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
}
|
||||
|
||||
private void addAllPreferences() {
|
||||
// TODO: Get the right diff entry according to daily and hourly chart selection.
|
||||
final int index = mDailyChartIndex;
|
||||
final List<BatteryDiffEntry> entries =
|
||||
mBatteryIndexedMap.get(Integer.valueOf(index));
|
||||
addFooterPreferenceIfNeeded(entries != null && !entries.isEmpty());
|
||||
if (entries == null) {
|
||||
Log.w(TAG, "cannot find BatteryDiffEntry for:" + index);
|
||||
final BatteryDiffData batteryDiffData =
|
||||
mBatteryUsageMap.get(mDailyChartIndex).get(mHourlyChartIndex);
|
||||
addFooterPreferenceIfNeeded(batteryDiffData != null
|
||||
&& (!batteryDiffData.getAppDiffEntryList().isEmpty()
|
||||
|| !batteryDiffData.getSystemDiffEntryList().isEmpty()));
|
||||
if (batteryDiffData == null) {
|
||||
Log.w(TAG, "cannot find BatteryDiffEntry for daily_index: " + mDailyChartIndex
|
||||
+ " hourly_index: " + mHourlyChartIndex);
|
||||
return;
|
||||
}
|
||||
// Separates data into two groups and sort them individually.
|
||||
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
|
||||
mSystemEntries.clear();
|
||||
entries.forEach(entry -> {
|
||||
final String packageName = entry.getPackageName();
|
||||
if (!isValidToShowEntry(packageName)) {
|
||||
Log.w(TAG, "ignore showing item:" + packageName);
|
||||
return;
|
||||
}
|
||||
if (entry.isSystemEntry()) {
|
||||
mSystemEntries.add(entry);
|
||||
} else {
|
||||
appEntries.add(entry);
|
||||
}
|
||||
// Validates the usage time if users click a specific slot.
|
||||
if (index >= 0) {
|
||||
validateUsageTime(entry);
|
||||
}
|
||||
});
|
||||
Collections.sort(appEntries, BatteryDiffEntry.COMPARATOR);
|
||||
Collections.sort(mSystemEntries, BatteryDiffEntry.COMPARATOR);
|
||||
Log.d(TAG, String.format("addAllPreferences() app=%d system=%d",
|
||||
appEntries.size(), mSystemEntries.size()));
|
||||
|
||||
// Adds app entries to the list if it is not empty.
|
||||
if (!appEntries.isEmpty()) {
|
||||
addPreferenceToScreen(appEntries);
|
||||
if (!batteryDiffData.getAppDiffEntryList().isEmpty()) {
|
||||
addPreferenceToScreen(batteryDiffData.getAppDiffEntryList());
|
||||
}
|
||||
// Adds the expabable divider if we have system entries data.
|
||||
if (!mSystemEntries.isEmpty()) {
|
||||
if (!batteryDiffData.getSystemDiffEntryList().isEmpty()) {
|
||||
if (mExpandDividerPreference == null) {
|
||||
mExpandDividerPreference = new ExpandDividerPreference(mPrefContext);
|
||||
mExpandDividerPreference.setOnExpandListener(this);
|
||||
@@ -490,11 +462,13 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
}
|
||||
|
||||
private void refreshExpandUi() {
|
||||
final List<BatteryDiffEntry> systemEntries = mBatteryUsageMap.get(mDailyChartIndex).get(
|
||||
mHourlyChartIndex).getSystemDiffEntryList();
|
||||
if (mIsExpanded) {
|
||||
addPreferenceToScreen(mSystemEntries);
|
||||
addPreferenceToScreen(systemEntries);
|
||||
} else {
|
||||
// Removes and recycles all system entries to hide all of them.
|
||||
for (BatteryDiffEntry entry : mSystemEntries) {
|
||||
for (BatteryDiffEntry entry : systemEntries) {
|
||||
final String prefKey = entry.mBatteryHistEntry.getKey();
|
||||
final Preference pref = mAppListPrefGroup.findPreference(prefKey);
|
||||
if (pref != null) {
|
||||
@@ -592,11 +566,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
return !contains(packageName, mNotAllowShowSummaryPackages);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isValidToShowEntry(String packageName) {
|
||||
return !contains(packageName, mNotAllowShowEntryPackages);
|
||||
}
|
||||
|
||||
private void addFooterPreferenceIfNeeded(boolean containAppItems) {
|
||||
if (mIsFooterPrefAdded || mFooterPreference == null) {
|
||||
return;
|
||||
@@ -643,20 +612,6 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
return false;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static boolean validateUsageTime(BatteryDiffEntry entry) {
|
||||
final long foregroundUsageTimeInMs = entry.mForegroundUsageTimeInMs;
|
||||
final long backgroundUsageTimeInMs = entry.mBackgroundUsageTimeInMs;
|
||||
final long totalUsageTimeInMs = foregroundUsageTimeInMs + backgroundUsageTimeInMs;
|
||||
if (foregroundUsageTimeInMs > VALID_USAGE_TIME_DURATION
|
||||
|| backgroundUsageTimeInMs > VALID_USAGE_TIME_DURATION
|
||||
|| totalUsageTimeInMs > VALID_USAGE_TIME_DURATION) {
|
||||
Log.e(TAG, "validateUsageTime() fail for\n" + entry);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Change this method to fromLastFullCharged.
|
||||
|
||||
/** Used for {@link AppBatteryPreferenceController}. */
|
||||
|
||||
@@ -218,7 +218,7 @@ public final class DataProcessor {
|
||||
*
|
||||
* The valid result should be composed of 3 parts:
|
||||
* 1) start timestamp
|
||||
* 2) every 0am timestamp (default timezone) between the start and end
|
||||
* 2) every 00:00 timestamp (default timezone) between the start and end
|
||||
* 3) end timestamp
|
||||
* Otherwise, returns an empty list.
|
||||
*/
|
||||
@@ -277,18 +277,27 @@ public final class DataProcessor {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the timestamp for 0am 1 day after the given timestamp based on local
|
||||
* @return Returns the timestamp for 00:00 1 day after the given timestamp based on local
|
||||
* timezone.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static long getTimestampOfNextDay(long timestamp) {
|
||||
final Calendar nextDayCalendar = Calendar.getInstance();
|
||||
nextDayCalendar.setTimeInMillis(timestamp);
|
||||
nextDayCalendar.add(Calendar.DAY_OF_YEAR, 1);
|
||||
nextDayCalendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
nextDayCalendar.set(Calendar.MINUTE, 0);
|
||||
nextDayCalendar.set(Calendar.SECOND, 0);
|
||||
return nextDayCalendar.getTimeInMillis();
|
||||
return getTimestampWithDayDiff(timestamp, /*dayDiff=*/ 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether currentSlot will be used in daily chart.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static boolean isForDailyChart(final boolean isStartOrEnd, final long currentSlot) {
|
||||
// The start and end timestamps will always be used in daily chart.
|
||||
if (isStartOrEnd) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// The timestamps for 00:00 will be used in daily chart.
|
||||
final long startOfTheDay = getTimestampWithDayDiff(currentSlot, /*dayDiff=*/ 0);
|
||||
return currentSlot == startOfTheDay;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -350,10 +359,13 @@ public final class DataProcessor {
|
||||
startIndex = 1;
|
||||
resultMap.put(expectedStartTimestamp, batteryHistoryMap.get(rawStartTimestamp));
|
||||
}
|
||||
for (int index = startIndex; index < expectedTimestampSlots.size(); index++) {
|
||||
final int expectedTimestampSlotsSize = expectedTimestampSlots.size();
|
||||
for (int index = startIndex; index < expectedTimestampSlotsSize; index++) {
|
||||
final long currentSlot = expectedTimestampSlots.get(index);
|
||||
final boolean isStartOrEnd = index == 0 || index == expectedTimestampSlotsSize - 1;
|
||||
interpolateHistoryForSlot(
|
||||
context, currentSlot, rawTimestampList, batteryHistoryMap, resultMap);
|
||||
context, currentSlot, rawTimestampList, batteryHistoryMap, resultMap,
|
||||
isStartOrEnd);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -362,7 +374,8 @@ public final class DataProcessor {
|
||||
final long currentSlot,
|
||||
final List<Long> rawTimestampList,
|
||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
|
||||
final Map<Long, Map<String, BatteryHistEntry>> resultMap) {
|
||||
final Map<Long, Map<String, BatteryHistEntry>> resultMap,
|
||||
final boolean isStartOrEnd) {
|
||||
final long[] nearestTimestamps = findNearestTimestamp(rawTimestampList, currentSlot);
|
||||
final long lowerTimestamp = nearestTimestamps[0];
|
||||
final long upperTimestamp = nearestTimestamps[1];
|
||||
@@ -385,7 +398,8 @@ public final class DataProcessor {
|
||||
return;
|
||||
}
|
||||
interpolateHistoryForSlot(context,
|
||||
currentSlot, lowerTimestamp, upperTimestamp, batteryHistoryMap, resultMap);
|
||||
currentSlot, lowerTimestamp, upperTimestamp, batteryHistoryMap, resultMap,
|
||||
isStartOrEnd);
|
||||
}
|
||||
|
||||
private static void interpolateHistoryForSlot(
|
||||
@@ -394,7 +408,8 @@ public final class DataProcessor {
|
||||
final long lowerTimestamp,
|
||||
final long upperTimestamp,
|
||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
|
||||
final Map<Long, Map<String, BatteryHistEntry>> resultMap) {
|
||||
final Map<Long, Map<String, BatteryHistEntry>> resultMap,
|
||||
final boolean isStartOrEnd) {
|
||||
final Map<String, BatteryHistEntry> lowerEntryDataMap =
|
||||
batteryHistoryMap.get(lowerTimestamp);
|
||||
final Map<String, BatteryHistEntry> upperEntryDataMap =
|
||||
@@ -405,7 +420,10 @@ public final class DataProcessor {
|
||||
final long upperEntryDataBootTimestamp =
|
||||
upperEntryDataFirstEntry.mTimestamp - upperEntryDataFirstEntry.mBootTimestamp;
|
||||
// Lower data is captured before upper data corresponding device is booting.
|
||||
if (lowerTimestamp < upperEntryDataBootTimestamp) {
|
||||
// Skips the booting-specific logics and always does interpolation for daily chart level
|
||||
// data.
|
||||
if (lowerTimestamp < upperEntryDataBootTimestamp
|
||||
&& !isForDailyChart(isStartOrEnd, currentSlot)) {
|
||||
// Provides an opportunity to force align the slot directly.
|
||||
if ((upperTimestamp - currentSlot) < 10 * DateUtils.MINUTE_IN_MILLIS) {
|
||||
log(context, "force align into the nearest slot", currentSlot, null);
|
||||
@@ -877,6 +895,16 @@ public final class DataProcessor {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static long getTimestampWithDayDiff(final long timestamp, final int dayDiff) {
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(timestamp);
|
||||
calendar.add(Calendar.DAY_OF_YEAR, dayDiff);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
return calendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
private static boolean contains(String target, Set<CharSequence> packageNames) {
|
||||
if (target != null && packageNames != null) {
|
||||
for (CharSequence packageName : packageNames) {
|
||||
|
||||
@@ -92,7 +92,7 @@ public class CaptionHelperTest {
|
||||
final float fontScale = 1.0f;
|
||||
when(mCaptioningManager.getFontScale()).thenReturn(fontScale);
|
||||
final float textSize = mContext.getResources().getDimension(
|
||||
R.dimen.caption_preview_text_size) * fontScale;
|
||||
R.dimen.captioning_preview_text_size) * fontScale;
|
||||
|
||||
mCaptionHelper.applyCaptionProperties(mSubtitleView, /* PreviewWindow= */ null,
|
||||
/* styleId= */ 0);
|
||||
|
||||
@@ -33,16 +33,16 @@ import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Tests for {@link CaptionAppearanceFragment}. */
|
||||
/** Tests for {@link CaptioningAppearanceFragment}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionAppearanceFragmentTest {
|
||||
public class CaptioningAppearanceFragmentTest {
|
||||
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionAppearanceFragment mFragment;
|
||||
private CaptioningAppearanceFragment mFragment;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mFragment = new CaptionAppearanceFragment();
|
||||
mFragment = new CaptioningAppearanceFragment();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -58,7 +58,7 @@ public class CaptionAppearanceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void getLogTag_returnsCorrectTag() {
|
||||
assertThat(mFragment.getLogTag()).isEqualTo("CaptionAppearanceFragment");
|
||||
assertThat(mFragment.getLogTag()).isEqualTo("CaptioningAppearanceFragment");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -68,7 +68,7 @@ public class CaptionAppearanceFragmentTest {
|
||||
|
||||
@Test
|
||||
public void getNonIndexableKeys_existInXmlLayout() {
|
||||
final List<String> niks = CaptionAppearanceFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||
final List<String> niks = CaptioningAppearanceFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||
.getNonIndexableKeys(mContext);
|
||||
final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext,
|
||||
R.xml.captioning_appearance);
|
||||
@@ -34,23 +34,23 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionAppearancePreferenceController}. */
|
||||
/** Tests for {@link CaptioningAppearancePreferenceController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionAppearancePreferenceControllerTest {
|
||||
public class CaptioningAppearancePreferenceControllerTest {
|
||||
|
||||
private static final String TEST_KEY = "test_key";
|
||||
private static final int DEFAULT_PRESET_INDEX = 1;
|
||||
private static final int DEFAULT_FONT_SCALE_INDEX = 2;
|
||||
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionAppearancePreferenceController mController;
|
||||
private CaptioningAppearancePreferenceController mController;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
|
||||
mShadowCaptioningManager = Shadow.extract(captioningManager);
|
||||
mController = new CaptionAppearancePreferenceController(mContext, TEST_KEY);
|
||||
mController = new CaptioningAppearancePreferenceController(mContext, TEST_KEY);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -45,22 +45,23 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionBackgroundColorController}. */
|
||||
/** Tests for {@link CaptioningBackgroundColorController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionBackgroundColorControllerTest {
|
||||
public class CaptioningBackgroundColorControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionBackgroundColorController mController;
|
||||
private CaptioningBackgroundColorController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionBackgroundColorController(mContext, "captioning_background_color");
|
||||
mController = new CaptioningBackgroundColorController(mContext,
|
||||
"captioning_background_color");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -47,21 +47,21 @@ import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionBackgroundOpacityController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionBackgroundOpacityControllerTest {
|
||||
public class CaptioningBackgroundOpacityControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionBackgroundOpacityController mController;
|
||||
private CaptioningBackgroundOpacityController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController =
|
||||
new CaptionBackgroundOpacityController(mContext, "captioning_background_opacity");
|
||||
mController = new CaptioningBackgroundOpacityController(mContext,
|
||||
"captioning_background_opacity");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -41,9 +41,9 @@ import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/** Tests for {@link CaptionCustomController}. */
|
||||
/** Tests for {@link CaptioningCustomController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionCustomControllerTest {
|
||||
public class CaptioningCustomControllerTest {
|
||||
|
||||
private static final String PREF_KEY = "custom";
|
||||
|
||||
@@ -55,13 +55,13 @@ public class CaptionCustomControllerTest {
|
||||
private AccessibilitySettingsContentObserver mAccessibilitySettingsContentObserver;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private ContentResolver mContentResolver;
|
||||
private CaptionCustomController mController;
|
||||
private CaptioningCustomController mController;
|
||||
private Preference mPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContentResolver = mContext.getContentResolver();
|
||||
mController = new CaptionCustomController(mContext, PREF_KEY,
|
||||
mController = new CaptioningCustomController(mContext, PREF_KEY,
|
||||
mAccessibilitySettingsContentObserver);
|
||||
mPreference = new Preference(mContext);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -45,21 +45,21 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionEdgeColorController}. */
|
||||
/** Tests for {@link CaptioningEdgeColorController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionEdgeColorControllerTest {
|
||||
public class CaptioningEdgeColorControllerTest {
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionEdgeColorController mController;
|
||||
private CaptioningEdgeColorController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionEdgeColorController(mContext, "captioning_edge_color");
|
||||
mController = new CaptioningEdgeColorController(mContext, "captioning_edge_color");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -46,22 +46,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionEdgeTypeController}. */
|
||||
/** Tests for {@link CaptioningEdgeTypeController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionEdgeTypeControllerTest {
|
||||
public class CaptioningEdgeTypeControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionEdgeTypeController mController;
|
||||
private CaptioningEdgeTypeController mController;
|
||||
private EdgeTypePreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionEdgeTypeController(mContext, "captioning_edge_type");
|
||||
mController = new CaptioningEdgeTypeController(mContext, "captioning_edge_type");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new EdgeTypePreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -45,22 +45,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionFontSizeController}. */
|
||||
/** Tests for {@link CaptioningFontSizeController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionFontSizeControllerTest {
|
||||
public class CaptioningFontSizeControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionFontSizeController mController;
|
||||
private CaptioningFontSizeController mController;
|
||||
private ListPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionFontSizeController(mContext, "captioning_font_size");
|
||||
mController = new CaptioningFontSizeController(mContext, "captioning_font_size");
|
||||
mPreference = new ListPreference(mContext);
|
||||
mPreference.setEntries(R.array.captioning_font_size_selector_titles);
|
||||
mPreference.setEntryValues(R.array.captioning_font_size_selector_values);
|
||||
@@ -45,22 +45,23 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionForegroundColorController}. */
|
||||
/** Tests for {@link CaptioningForegroundColorController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionForegroundColorControllerTest {
|
||||
public class CaptioningForegroundColorControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionForegroundColorController mController;
|
||||
private CaptioningForegroundColorController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionForegroundColorController(mContext, "captioning_foreground_color");
|
||||
mController = new CaptioningForegroundColorController(mContext,
|
||||
"captioning_foreground_color");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -45,23 +45,23 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionForegroundOpacityController}. */
|
||||
/** Tests for {@link CaptioningForegroundOpacityController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionForegroundOpacityControllerTest {
|
||||
public class CaptioningForegroundOpacityControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionForegroundOpacityController mController;
|
||||
private CaptioningForegroundOpacityController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController =
|
||||
new CaptionForegroundOpacityController(mContext, "captioning_foreground_opacity");
|
||||
mController = new CaptioningForegroundOpacityController(mContext,
|
||||
"captioning_foreground_opacity");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -38,21 +38,21 @@ import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/** Tests for {@link CaptionLocalePreferenceController}. */
|
||||
/** Tests for {@link CaptioningLocalePreferenceController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionLocalePreferenceControllerTest {
|
||||
public class CaptioningLocalePreferenceControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionLocalePreferenceController mController;
|
||||
private CaptioningLocalePreferenceController mController;
|
||||
private LocalePreference mPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionLocalePreferenceController(mContext, "captioning_local_pref");
|
||||
mController = new CaptioningLocalePreferenceController(mContext, "captioning_local_pref");
|
||||
mPreference = new LocalePreference(mContext);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
}
|
||||
@@ -33,16 +33,16 @@ import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Tests for {@link CaptionMoreOptionsFragment}. */
|
||||
/** Tests for {@link CaptioningMoreOptionsFragment}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionMoreOptionsFragmentTest {
|
||||
public class CaptioningMoreOptionsFragmentTest {
|
||||
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionMoreOptionsFragment mFragment;
|
||||
private CaptioningMoreOptionsFragment mFragment;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mFragment = new CaptionMoreOptionsFragment();
|
||||
mFragment = new CaptioningMoreOptionsFragment();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -59,12 +59,12 @@ public class CaptionMoreOptionsFragmentTest {
|
||||
|
||||
@Test
|
||||
public void getLogTag_returnsCorrectTag() {
|
||||
assertThat(mFragment.getLogTag()).isEqualTo("CaptionMoreOptionsFragment");
|
||||
assertThat(mFragment.getLogTag()).isEqualTo("CaptioningMoreOptionsFragment");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNonIndexableKeys_existInXmlLayout() {
|
||||
final List<String> niks = CaptionMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||
final List<String> niks = CaptioningMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||
.getNonIndexableKeys(mContext);
|
||||
final List<String> keys =
|
||||
XmlTestUtils.getKeysFromPreferenceXml(mContext,
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package com.android.settings.accessibility;
|
||||
|
||||
import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
|
||||
import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -30,10 +33,9 @@ import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
/** Tests for {@link CaptioningPreferenceController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptioningPreferenceControllerTest {
|
||||
private static final int ON = 1;
|
||||
private static final int OFF = 0;
|
||||
|
||||
private Context mContext;
|
||||
private CaptioningPreferenceController mController;
|
||||
|
||||
@@ -46,22 +46,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionPresetController}. */
|
||||
/** Tests for {@link CaptioningPresetController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionPresetControllerTest {
|
||||
public class CaptioningPresetControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionPresetController mController;
|
||||
private CaptioningPresetController mController;
|
||||
private PresetPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionPresetController(mContext, "captioning_preset");
|
||||
mController = new CaptioningPresetController(mContext, "captioning_preset");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new PresetPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -42,9 +42,9 @@ import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/** Tests for {@link CaptionPreviewPreferenceController}. */
|
||||
/** Tests for {@link CaptioningPreviewPreferenceController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionPreviewPreferenceControllerTest {
|
||||
public class CaptioningPreviewPreferenceControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@@ -54,13 +54,13 @@ public class CaptionPreviewPreferenceControllerTest {
|
||||
private ContentResolver mContentResolver;
|
||||
@Spy
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionPreviewPreferenceController mController;
|
||||
private CaptioningPreviewPreferenceController mController;
|
||||
private LayoutPreference mLayoutPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
when(mContext.getContentResolver()).thenReturn(mContentResolver);
|
||||
mController = new CaptionPreviewPreferenceController(mContext,
|
||||
mController = new CaptioningPreviewPreferenceController(mContext,
|
||||
"captioning_preference_switch");
|
||||
final View view = new View(mContext);
|
||||
mLayoutPreference = new LayoutPreference(mContext, view);
|
||||
@@ -33,16 +33,16 @@ import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Tests for {@link CaptionPropertiesFragment}. */
|
||||
/** Tests for {@link CaptioningPropertiesFragment}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionPropertiesFragmentTest {
|
||||
public class CaptioningPropertiesFragmentTest {
|
||||
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionPropertiesFragment mFragment;
|
||||
private CaptioningPropertiesFragment mFragment;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mFragment = new CaptionPropertiesFragment();
|
||||
mFragment = new CaptioningPropertiesFragment();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -59,12 +59,12 @@ public class CaptionPropertiesFragmentTest {
|
||||
|
||||
@Test
|
||||
public void getLogTag_returnsCorrectTag() {
|
||||
assertThat(mFragment.getLogTag()).isEqualTo("CaptionPropertiesFragment");
|
||||
assertThat(mFragment.getLogTag()).isEqualTo("CaptioningPropertiesFragment");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNonIndexableKeys_existInXmlLayout() {
|
||||
final List<String> niks = CaptionPropertiesFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||
final List<String> niks = CaptioningPropertiesFragment.SEARCH_INDEX_DATA_PROVIDER
|
||||
.getNonIndexableKeys(mContext);
|
||||
final List<String> keys =
|
||||
XmlTestUtils.getKeysFromPreferenceXml(mContext,
|
||||
@@ -45,22 +45,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionTogglePreferenceController}. */
|
||||
/** Tests for {@link CaptioningTogglePreferenceController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionTogglePreferenceControllerTest {
|
||||
public class CaptioningTogglePreferenceControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionTogglePreferenceController mController;
|
||||
private CaptioningTogglePreferenceController mController;
|
||||
private SettingsMainSwitchPreference mSwitchPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionTogglePreferenceController(mContext,
|
||||
mController = new CaptioningTogglePreferenceController(mContext,
|
||||
"captioning_preference_switch");
|
||||
mSwitchPreference = new SettingsMainSwitchPreference(mContext);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mSwitchPreference);
|
||||
@@ -45,22 +45,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionTypefaceController}. */
|
||||
/** Tests for {@link CaptioningTypefaceController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionTypefaceControllerTest {
|
||||
public class CaptioningTypefaceControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionTypefaceController mController;
|
||||
private CaptioningTypefaceController mController;
|
||||
private ListPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionTypefaceController(mContext, "captioning_typeface");
|
||||
mController = new CaptioningTypefaceController(mContext, "captioning_typeface");
|
||||
mPreference = new ListPreference(mContext);
|
||||
mPreference.setEntries(R.array.captioning_typeface_selector_titles);
|
||||
mPreference.setEntryValues(R.array.captioning_typeface_selector_values);
|
||||
@@ -46,22 +46,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionWindowColorController}. */
|
||||
/** Tests for {@link CaptioningWindowColorController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionWindowColorControllerTest {
|
||||
public class CaptioningWindowColorControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionWindowColorController mController;
|
||||
private CaptioningWindowColorController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionWindowColorController(mContext, "captioning_window_color");
|
||||
mController = new CaptioningWindowColorController(mContext, "captioning_window_color");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -45,22 +45,22 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowCaptioningManager;
|
||||
|
||||
/** Tests for {@link CaptionWindowOpacityController}. */
|
||||
/** Tests for {@link CaptioningWindowOpacityController}. */
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class CaptionWindowOpacityControllerTest {
|
||||
public class CaptioningWindowOpacityControllerTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
private CaptionWindowOpacityController mController;
|
||||
private CaptioningWindowOpacityController mController;
|
||||
private ColorPreference mPreference;
|
||||
private ShadowCaptioningManager mShadowCaptioningManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mController = new CaptionWindowOpacityController(mContext, "captioning_window_opacity");
|
||||
mController = new CaptioningWindowOpacityController(mContext, "captioning_window_opacity");
|
||||
final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
|
||||
mPreference = new ColorPreference(mContext, attributeSet);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batteryusage;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.any;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
@@ -168,13 +169,10 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
|
||||
@Test
|
||||
public void setBatteryChartViewModel_6Hours() {
|
||||
// TODO: Removes the following line after loading mBatteryIndexedMap is supported.
|
||||
mBatteryChartPreferenceController.mBatteryIndexedMap = new HashMap<>();
|
||||
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
|
||||
verify(mDailyChartView).setVisibility(View.GONE);
|
||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
|
||||
verify(mHourlyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 97, 95),
|
||||
List.of("8 am", "10 am", "12 pm"),
|
||||
@@ -184,13 +182,10 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
|
||||
@Test
|
||||
public void setBatteryChartViewModel_60Hours() {
|
||||
// TODO: Removes the following line after loading mBatteryIndexedMap is supported.
|
||||
mBatteryChartPreferenceController.mBatteryIndexedMap = new HashMap<>();
|
||||
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
|
||||
|
||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView).setVisibility(View.GONE);
|
||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
|
||||
verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
|
||||
verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 41),
|
||||
List.of("SAT", "SUN", "MON", "MON"),
|
||||
@@ -255,6 +250,12 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void refreshUi_normalCase_returnTrue() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
assertThat(mBatteryChartPreferenceController.refreshUi()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void refreshUi_batteryIndexedMapIsNull_ignoreRefresh() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(null);
|
||||
@@ -275,13 +276,33 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
|
||||
@Test
|
||||
public void removeAndCacheAllPrefs_emptyContent_ignoreRemoveAll() {
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 1;
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
|
||||
doReturn(0).when(mAppListGroup).getPreferenceCount();
|
||||
|
||||
mBatteryChartPreferenceController.refreshUi();
|
||||
verify(mAppListGroup, never()).removeAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void removeAndCacheAllPrefs_buildCacheAndRemoveAllPreference() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).getPreference(0);
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
doReturn(PREF_KEY).when(mPowerGaugePreference).getKey();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
|
||||
// Ensures the testing data is correct.
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
|
||||
|
||||
mBatteryChartPreferenceController.refreshUi();
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache.get(PREF_KEY))
|
||||
.isEqualTo(mPowerGaugePreference);
|
||||
verify(mAppListGroup).removeAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addPreferenceToScreen_emptyContent_ignoreAddPreference() {
|
||||
mBatteryChartPreferenceController.addPreferenceToScreen(
|
||||
@@ -453,37 +474,10 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
assertThat(pref.getSummary()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateUsageTime_returnTrueIfBatteryDiffEntryIsValid() {
|
||||
assertThat(BatteryChartPreferenceControllerV2.validateUsageTime(
|
||||
createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS)))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateUsageTime_foregroundTimeExceedThreshold_returnFalse() {
|
||||
assertThat(BatteryChartPreferenceControllerV2.validateUsageTime(
|
||||
createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ DateUtils.HOUR_IN_MILLIS * 3,
|
||||
/*backgroundUsageTimeInMs=*/ 0)))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void validateUsageTime_backgroundTimeExceedThreshold_returnFalse() {
|
||||
assertThat(BatteryChartPreferenceControllerV2.validateUsageTime(
|
||||
createBatteryDiffEntry(
|
||||
/*foregroundUsageTimeInMs=*/ 0,
|
||||
/*backgroundUsageTimeInMs=*/ DateUtils.HOUR_IN_MILLIS * 3)))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onExpand_expandedIsTrue_addSystemEntriesToPreferenceGroup() {
|
||||
doReturn(1).when(mAppListGroup).getPreferenceCount();
|
||||
mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
|
||||
mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
|
||||
doReturn("label").when(mBatteryDiffEntry).getAppLabel();
|
||||
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
@@ -505,7 +499,7 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
public void onExpand_expandedIsFalse_removeSystemEntriesFromPreferenceGroup() {
|
||||
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
|
||||
doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
|
||||
mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
|
||||
mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
|
||||
// Verifies the cache is empty first.
|
||||
assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
|
||||
|
||||
@@ -580,18 +574,6 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isValidToShowEntry_returnExpectedResult() {
|
||||
assertThat(mBatteryChartPreferenceController
|
||||
.isValidToShowEntry("com.google.android.apps.scone"))
|
||||
.isTrue();
|
||||
|
||||
// Verifies the items which are defined in the array list.
|
||||
assertThat(mBatteryChartPreferenceController
|
||||
.isValidToShowEntry("com.android.gms.persistent"))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
private static Long generateTimestamp(int index) {
|
||||
// "2021-04-23 07:00:00 UTC" + index hours
|
||||
return 1619247600000L + index * DateUtils.HOUR_IN_MILLIS;
|
||||
@@ -603,6 +585,7 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
for (int index = 0; index < numOfHours; index++) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put("batteryLevel", Integer.valueOf(100 - index));
|
||||
values.put("consumePower", Integer.valueOf(100 - index));
|
||||
final BatteryHistEntry entry = new BatteryHistEntry(values);
|
||||
final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
|
||||
entryMap.put("fake_entry_key" + index, entry);
|
||||
@@ -611,6 +594,22 @@ public final class BatteryChartPreferenceControllerV2Test {
|
||||
return batteryHistoryMap;
|
||||
}
|
||||
|
||||
private Map<Integer, Map<Integer, BatteryDiffData>> createBatteryUsageMap() {
|
||||
final int selectedAll = BatteryChartViewModel.SELECTED_INDEX_ALL;
|
||||
return Map.of(
|
||||
selectedAll, Map.of(
|
||||
selectedAll, new BatteryDiffData(
|
||||
Arrays.asList(mBatteryDiffEntry),
|
||||
Arrays.asList(mBatteryDiffEntry))),
|
||||
0, Map.of(
|
||||
selectedAll, new BatteryDiffData(
|
||||
Arrays.asList(mBatteryDiffEntry),
|
||||
Arrays.asList(mBatteryDiffEntry)),
|
||||
0, new BatteryDiffData(
|
||||
Arrays.asList(mBatteryDiffEntry),
|
||||
Arrays.asList(mBatteryDiffEntry))));
|
||||
}
|
||||
|
||||
private BatteryDiffEntry createBatteryDiffEntry(
|
||||
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
|
||||
return new BatteryDiffEntry(
|
||||
|
||||
@@ -401,6 +401,17 @@ public class DataProcessorTest {
|
||||
.isEqualTo(1640966400000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isForDailyChart_returnExpectedResult() {
|
||||
assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ true, 0L)).isTrue();
|
||||
// 2022-01-01 00:00:00
|
||||
assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640966400000L))
|
||||
.isTrue();
|
||||
// 2022-01-01 01:00:05
|
||||
assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640970005000L))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBatteryUsageMap_emptyHistoryMap_returnNull() {
|
||||
final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.settings.applications.manageapplications;
|
||||
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_ALARMS_AND_REMINDERS;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_INSTALL_SOURCES;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_MEDIA_MANAGEMENT;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_ALLOWLIST;
|
||||
@@ -26,6 +27,7 @@ import static com.android.settings.applications.manageapplications.AppFilterRegi
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_WITH_OVERLAY;
|
||||
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_WRITE_SETTINGS;
|
||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_ALARMS_AND_REMINDERS;
|
||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_BATTERY_OPTIMIZATION;
|
||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_GAMES;
|
||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_HIGH_POWER;
|
||||
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_MAIN;
|
||||
@@ -66,6 +68,8 @@ public class AppFilterRegistryTest {
|
||||
|
||||
assertThat(registry.getDefaultFilterType(LIST_TYPE_MEDIA_MANAGEMENT_APPS))
|
||||
.isEqualTo(FILTER_APPS_MEDIA_MANAGEMENT);
|
||||
assertThat(registry.getDefaultFilterType(LIST_TYPE_BATTERY_OPTIMIZATION))
|
||||
.isEqualTo(FILTER_APPS_BATTERY_OPTIMIZED);
|
||||
|
||||
assertThat(registry.getDefaultFilterType(LIST_TYPE_MAIN)).isEqualTo(FILTER_APPS_ALL);
|
||||
assertThat(registry.getDefaultFilterType(LIST_TYPE_NOTIFICATION))
|
||||
|
||||
Reference in New Issue
Block a user