Snap for 8904202 from 0e37ac8d7a to udc-release

Change-Id: I427875a91e0f9e282edf708250080564a0b55288
This commit is contained in:
Android Build Coastguard Worker
2022-08-04 01:30:56 +00:00
63 changed files with 661 additions and 390 deletions

View File

@@ -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"

View File

@@ -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"

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"/>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 */ }

View File

@@ -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);
}

View File

@@ -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() {

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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() {

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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() {

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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(),

View File

@@ -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();
}

View File

@@ -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}. */

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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,

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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(

View File

@@ -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 =

View File

@@ -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))