Loading res/xml/power_background_usage_detail.xml +1 −2 Original line number Diff line number Diff line Loading @@ -20,9 +20,8 @@ xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/manager_battery_usage_allow_background_usage_settings_title"> <com.android.settingslib.widget.LayoutPreference <com.android.settingslib.widget.IntroPreference android:key="header_view" android:layout="@layout/settings_entity_header" android:selectable="false"/> <PreferenceCategory Loading res/xml/power_usage_detail.xml +1 −2 Original line number Diff line number Diff line Loading @@ -19,9 +19,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto"> <com.android.settingslib.widget.LayoutPreference <com.android.settingslib.widget.IntroPreference android:key="header_view" android:layout="@layout/settings_entity_header" android:selectable="false"/> <com.android.settingslib.widget.ActionButtonsPreference Loading src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +11 −19 Original line number Diff line number Diff line Loading @@ -27,13 +27,11 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.os.UserHandle; import android.util.Log; import android.view.View; import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.appinfo.AppButtonsPreferenceController; import com.android.settings.applications.appinfo.ButtonActionDialogFragment; import com.android.settings.core.InstrumentedPreferenceFragment; Loading @@ -44,12 +42,11 @@ import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUt import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry; import com.android.settings.fuelgauge.batteryusage.BatteryEntry; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.Utils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.IntroPreference; import java.util.ArrayList; import java.util.List; Loading Loading @@ -285,30 +282,26 @@ public class AdvancedPowerUsageDetail extends DashboardFragment @VisibleForTesting void initHeader() { final LayoutPreference headerPreference = findPreference(KEY_PREF_HEADER); final View appSnippet = headerPreference.findViewById(R.id.entity_header); final IntroPreference introPreference = findPreference(KEY_PREF_HEADER); if (introPreference == null) { return; } final Activity context = getActivity(); final Bundle bundle = getArguments(); EntityHeaderController controller = EntityHeaderController.newInstance(context, this, appSnippet) .setButtonActions( EntityHeaderController.ActionType.ACTION_NONE, EntityHeaderController.ActionType.ACTION_NONE); if (mAppEntry == null) { controller.setLabel(bundle.getString(EXTRA_LABEL)); introPreference.setTitle(bundle.getString(EXTRA_LABEL)); final int iconId = bundle.getInt(EXTRA_ICON_ID, 0); if (iconId == 0) { controller.setIcon(context.getPackageManager().getDefaultActivityIcon()); introPreference.setIcon(context.getPackageManager().getDefaultActivityIcon()); } else { controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); introPreference.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); } } else { mState.ensureIcon(mAppEntry); controller.setLabel(mAppEntry); controller.setIcon(mAppEntry); controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info)); introPreference.setTitle(mAppEntry.label); introPreference.setIcon(Utils.getBadgedIcon(context, mAppEntry.info)); } if (mPowerUsageTimeController != null) { Loading @@ -324,7 +317,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment anomalyHintPrefKey, anomalyHintText); } controller.done(true /* rebindActions */); } @Override Loading src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java +9 −20 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; import android.util.Log; import android.view.View; import androidx.annotation.VisibleForTesting; Loading @@ -34,13 +33,12 @@ import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUtils; 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.Utils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.IntroPreference; import java.util.ArrayList; import java.util.List; Loading Loading @@ -153,36 +151,27 @@ public class PowerBackgroundUsageDetail extends DashboardFragment { @VisibleForTesting void initHeader() { final LayoutPreference headerPreference = findPreference(KEY_PREF_HEADER); if (headerPreference == null) { final IntroPreference introPreference = findPreference(KEY_PREF_HEADER); if (introPreference == null) { return; } final View appSnippet = headerPreference.findViewById(R.id.entity_header); final Activity context = getActivity(); final Bundle bundle = getArguments(); EntityHeaderController controller = EntityHeaderController.newInstance(context, this, appSnippet) .setButtonActions( EntityHeaderController.ActionType.ACTION_NONE, EntityHeaderController.ActionType.ACTION_NONE); if (mAppEntry == null) { controller.setLabel(bundle.getString(EXTRA_LABEL)); introPreference.setTitle(bundle.getString(EXTRA_LABEL)); final int iconId = bundle.getInt(EXTRA_ICON_ID, 0); if (iconId == 0) { controller.setIcon(context.getPackageManager().getDefaultActivityIcon()); introPreference.setIcon(context.getPackageManager().getDefaultActivityIcon()); } else { controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); introPreference.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); } } else { mState.ensureIcon(mAppEntry); controller.setLabel(mAppEntry); controller.setIcon(mAppEntry); controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info)); introPreference.setTitle(mAppEntry.label); introPreference.setIcon(Utils.getBadgedIcon(context, mAppEntry.info)); } controller.done(true /* rebindActions */); } @VisibleForTesting Loading tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +30 −46 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; Loading @@ -39,6 +40,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageManager; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; Loading @@ -55,12 +57,12 @@ import com.android.settings.fuelgauge.batteryusage.BatteryEntry; import com.android.settings.fuelgauge.batteryusage.ConvertUtils; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.Utils; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.IntroPreference; import org.junit.After; import org.junit.Before; Loading @@ -75,6 +77,8 @@ import org.mockito.junit.MockitoRule; import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.util.ReflectionHelpers; import java.util.concurrent.TimeUnit; Loading @@ -82,7 +86,6 @@ import java.util.concurrent.TimeUnit; @RunWith(RobolectricTestRunner.class) @Config( shadows = { ShadowEntityHeaderController.class, com.android.settings.testutils.shadow.ShadowFragment.class, }) public class AdvancedPowerUsageDetailTest { Loading @@ -90,6 +93,7 @@ public class AdvancedPowerUsageDetailTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); private static final String APP_LABEL = "app label"; private static final String APP_ENTRY_LABEL = "app entry label"; private static final String SUMMARY = "summary"; private static final String PACKAGE_NAME = "com.android.app"; private static final String INITIATING_PACKAGE_NAME = "com.android.vending"; Loading @@ -100,17 +104,16 @@ public class AdvancedPowerUsageDetailTest { private static final long FOREGROUND_SERVICE_TIME_MS = 123; private static final long BACKGROUND_TIME_MS = 100; private static final long SCREEN_ON_TIME_MS = 321; private static final Drawable TEST_DRAWABLE = new ColorDrawable(0); @Mock(answer = Answers.RETURNS_DEEP_STUBS) private FragmentActivity mActivity; @Mock private EntityHeaderController mEntityHeaderController; @Mock private ApplicationsState mState; @Mock private ApplicationsState.AppEntry mAppEntry; @Mock private BatteryEntry mBatteryEntry; @Mock private PackageManager mPackageManager; @Mock private InstallSourceInfo mInstallSourceInfo; @Mock private LayoutPreference mLayoutPreference; @Mock private AppOpsManager mAppOpsManager; @Mock private LoaderManager mLoaderManager; Loading @@ -123,6 +126,15 @@ public class AdvancedPowerUsageDetailTest { private BatteryDiffEntry mBatteryDiffEntry; private Bundle mBundle; private BatteryOptimizeUtils mBatteryOptimizeUtils; private IntroPreference mIntroPreference; @Implements(Utils.class) private static class ShadowUtils { @Implementation public static Drawable getBadgedIcon(Context context, ApplicationInfo appInfo) { return AdvancedPowerUsageDetailTest.TEST_DRAWABLE; } } @Before public void setUp() throws Exception { Loading @@ -136,7 +148,8 @@ public class AdvancedPowerUsageDetailTest { prepareTestBatteryOptimizationUtils(); mFragment = spy(new AdvancedPowerUsageDetail()); mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; doReturn(mLayoutPreference).when(mFragment).findPreference(any()); mIntroPreference = new IntroPreference(mContext); doReturn(mIntroPreference).when(mFragment).findPreference(any()); mBundle = spy(new Bundle()); doReturn(mContext).when(mFragment).getContext(); doReturn(mActivity).when(mFragment).getActivity(); Loading @@ -145,29 +158,6 @@ public class AdvancedPowerUsageDetailTest { when(mFragment.getArguments()).thenReturn(mBundle); doReturn(mLoaderManager).when(mFragment).getLoaderManager(); ShadowEntityHeaderController.setUseMock(mEntityHeaderController); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setButtonActions(anyInt(), anyInt()); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setIcon(nullable(Drawable.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setIcon(nullable(ApplicationsState.AppEntry.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setLabel(nullable(String.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setLabel(nullable(String.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setLabel(nullable(ApplicationsState.AppEntry.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setSummary(nullable(String.class)); when(mBatteryEntry.getUid()).thenReturn(UID); when(mBatteryEntry.getLabel()).thenReturn(APP_LABEL); when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(FOREGROUND_TIME_MS); Loading Loading @@ -202,7 +192,9 @@ public class AdvancedPowerUsageDetailTest { mFragment.mState = mState; mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; mFragment.mLogStringBuilder = new StringBuilder(); doNothing().when(mState).ensureIcon(mAppEntry); mAppEntry.info = mock(ApplicationInfo.class); mAppEntry.label = APP_ENTRY_LABEL; mTestActivity = spy(new SettingsActivity()); doReturn(mPackageManager).when(mTestActivity).getPackageManager(); Loading Loading @@ -235,34 +227,27 @@ public class AdvancedPowerUsageDetailTest { } @Test @Config(shadows = ShadowUtils.class) public void initHeader_NoAppEntry_BuildByBundle() { mFragment.mAppEntry = null; mFragment.initHeader(); verify(mEntityHeaderController).setIcon(nullable(Drawable.class)); verify(mEntityHeaderController).setLabel(APP_LABEL); assertThat(mIntroPreference.getIcon()).isNotEqualTo(TEST_DRAWABLE); assertThat(mIntroPreference.getTitle()).isEqualTo(APP_LABEL); } @Test @Config(shadows = ShadowUtils.class) public void initHeader_HasAppEntry_BuildByAppEntry() { ReflectionHelpers.setStaticField( AppUtils.class, "sInstantAppDataProvider", new InstantAppDataProvider() { @Override public boolean isInstantApp(ApplicationInfo info) { return false; } }); mFragment.mAppEntry = mAppEntry; mFragment.initHeader(); verify(mEntityHeaderController).setIcon(mAppEntry); verify(mEntityHeaderController).setLabel(mAppEntry); verify(mEntityHeaderController).setIsInstantApp(false); assertThat(mIntroPreference.getIcon()).isEqualTo(TEST_DRAWABLE); assertThat(mIntroPreference.getTitle()).isEqualTo(mAppEntry.label); } @Test @Config(shadows = ShadowUtils.class) public void initHeader_HasAppEntry_InstantApp() { ReflectionHelpers.setStaticField( AppUtils.class, Loading @@ -276,9 +261,8 @@ public class AdvancedPowerUsageDetailTest { mFragment.mAppEntry = mAppEntry; mFragment.initHeader(); verify(mEntityHeaderController).setIcon(mAppEntry); verify(mEntityHeaderController).setLabel(mAppEntry); verify(mEntityHeaderController).setIsInstantApp(true); assertThat(mIntroPreference.getIcon()).isEqualTo(TEST_DRAWABLE); assertThat(mIntroPreference.getTitle()).isEqualTo(mAppEntry.label); } @Test Loading Loading
res/xml/power_background_usage_detail.xml +1 −2 Original line number Diff line number Diff line Loading @@ -20,9 +20,8 @@ xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/manager_battery_usage_allow_background_usage_settings_title"> <com.android.settingslib.widget.LayoutPreference <com.android.settingslib.widget.IntroPreference android:key="header_view" android:layout="@layout/settings_entity_header" android:selectable="false"/> <PreferenceCategory Loading
res/xml/power_usage_detail.xml +1 −2 Original line number Diff line number Diff line Loading @@ -19,9 +19,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto"> <com.android.settingslib.widget.LayoutPreference <com.android.settingslib.widget.IntroPreference android:key="header_view" android:layout="@layout/settings_entity_header" android:selectable="false"/> <com.android.settingslib.widget.ActionButtonsPreference Loading
src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +11 −19 Original line number Diff line number Diff line Loading @@ -27,13 +27,11 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.os.UserHandle; import android.util.Log; import android.view.View; import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.appinfo.AppButtonsPreferenceController; import com.android.settings.applications.appinfo.ButtonActionDialogFragment; import com.android.settings.core.InstrumentedPreferenceFragment; Loading @@ -44,12 +42,11 @@ import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUt import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry; import com.android.settings.fuelgauge.batteryusage.BatteryEntry; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.Utils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.IntroPreference; import java.util.ArrayList; import java.util.List; Loading Loading @@ -285,30 +282,26 @@ public class AdvancedPowerUsageDetail extends DashboardFragment @VisibleForTesting void initHeader() { final LayoutPreference headerPreference = findPreference(KEY_PREF_HEADER); final View appSnippet = headerPreference.findViewById(R.id.entity_header); final IntroPreference introPreference = findPreference(KEY_PREF_HEADER); if (introPreference == null) { return; } final Activity context = getActivity(); final Bundle bundle = getArguments(); EntityHeaderController controller = EntityHeaderController.newInstance(context, this, appSnippet) .setButtonActions( EntityHeaderController.ActionType.ACTION_NONE, EntityHeaderController.ActionType.ACTION_NONE); if (mAppEntry == null) { controller.setLabel(bundle.getString(EXTRA_LABEL)); introPreference.setTitle(bundle.getString(EXTRA_LABEL)); final int iconId = bundle.getInt(EXTRA_ICON_ID, 0); if (iconId == 0) { controller.setIcon(context.getPackageManager().getDefaultActivityIcon()); introPreference.setIcon(context.getPackageManager().getDefaultActivityIcon()); } else { controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); introPreference.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); } } else { mState.ensureIcon(mAppEntry); controller.setLabel(mAppEntry); controller.setIcon(mAppEntry); controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info)); introPreference.setTitle(mAppEntry.label); introPreference.setIcon(Utils.getBadgedIcon(context, mAppEntry.info)); } if (mPowerUsageTimeController != null) { Loading @@ -324,7 +317,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment anomalyHintPrefKey, anomalyHintText); } controller.done(true /* rebindActions */); } @Override Loading
src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java +9 −20 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; import android.util.Log; import android.view.View; import androidx.annotation.VisibleForTesting; Loading @@ -34,13 +33,12 @@ import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUtils; 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.Utils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.IntroPreference; import java.util.ArrayList; import java.util.List; Loading Loading @@ -153,36 +151,27 @@ public class PowerBackgroundUsageDetail extends DashboardFragment { @VisibleForTesting void initHeader() { final LayoutPreference headerPreference = findPreference(KEY_PREF_HEADER); if (headerPreference == null) { final IntroPreference introPreference = findPreference(KEY_PREF_HEADER); if (introPreference == null) { return; } final View appSnippet = headerPreference.findViewById(R.id.entity_header); final Activity context = getActivity(); final Bundle bundle = getArguments(); EntityHeaderController controller = EntityHeaderController.newInstance(context, this, appSnippet) .setButtonActions( EntityHeaderController.ActionType.ACTION_NONE, EntityHeaderController.ActionType.ACTION_NONE); if (mAppEntry == null) { controller.setLabel(bundle.getString(EXTRA_LABEL)); introPreference.setTitle(bundle.getString(EXTRA_LABEL)); final int iconId = bundle.getInt(EXTRA_ICON_ID, 0); if (iconId == 0) { controller.setIcon(context.getPackageManager().getDefaultActivityIcon()); introPreference.setIcon(context.getPackageManager().getDefaultActivityIcon()); } else { controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); introPreference.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); } } else { mState.ensureIcon(mAppEntry); controller.setLabel(mAppEntry); controller.setIcon(mAppEntry); controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info)); introPreference.setTitle(mAppEntry.label); introPreference.setIcon(Utils.getBadgedIcon(context, mAppEntry.info)); } controller.done(true /* rebindActions */); } @VisibleForTesting Loading
tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +30 −46 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; Loading @@ -39,6 +40,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageManager; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; Loading @@ -55,12 +57,12 @@ import com.android.settings.fuelgauge.batteryusage.BatteryEntry; import com.android.settings.fuelgauge.batteryusage.ConvertUtils; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.Utils; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.IntroPreference; import org.junit.After; import org.junit.Before; Loading @@ -75,6 +77,8 @@ import org.mockito.junit.MockitoRule; import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.util.ReflectionHelpers; import java.util.concurrent.TimeUnit; Loading @@ -82,7 +86,6 @@ import java.util.concurrent.TimeUnit; @RunWith(RobolectricTestRunner.class) @Config( shadows = { ShadowEntityHeaderController.class, com.android.settings.testutils.shadow.ShadowFragment.class, }) public class AdvancedPowerUsageDetailTest { Loading @@ -90,6 +93,7 @@ public class AdvancedPowerUsageDetailTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); private static final String APP_LABEL = "app label"; private static final String APP_ENTRY_LABEL = "app entry label"; private static final String SUMMARY = "summary"; private static final String PACKAGE_NAME = "com.android.app"; private static final String INITIATING_PACKAGE_NAME = "com.android.vending"; Loading @@ -100,17 +104,16 @@ public class AdvancedPowerUsageDetailTest { private static final long FOREGROUND_SERVICE_TIME_MS = 123; private static final long BACKGROUND_TIME_MS = 100; private static final long SCREEN_ON_TIME_MS = 321; private static final Drawable TEST_DRAWABLE = new ColorDrawable(0); @Mock(answer = Answers.RETURNS_DEEP_STUBS) private FragmentActivity mActivity; @Mock private EntityHeaderController mEntityHeaderController; @Mock private ApplicationsState mState; @Mock private ApplicationsState.AppEntry mAppEntry; @Mock private BatteryEntry mBatteryEntry; @Mock private PackageManager mPackageManager; @Mock private InstallSourceInfo mInstallSourceInfo; @Mock private LayoutPreference mLayoutPreference; @Mock private AppOpsManager mAppOpsManager; @Mock private LoaderManager mLoaderManager; Loading @@ -123,6 +126,15 @@ public class AdvancedPowerUsageDetailTest { private BatteryDiffEntry mBatteryDiffEntry; private Bundle mBundle; private BatteryOptimizeUtils mBatteryOptimizeUtils; private IntroPreference mIntroPreference; @Implements(Utils.class) private static class ShadowUtils { @Implementation public static Drawable getBadgedIcon(Context context, ApplicationInfo appInfo) { return AdvancedPowerUsageDetailTest.TEST_DRAWABLE; } } @Before public void setUp() throws Exception { Loading @@ -136,7 +148,8 @@ public class AdvancedPowerUsageDetailTest { prepareTestBatteryOptimizationUtils(); mFragment = spy(new AdvancedPowerUsageDetail()); mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; doReturn(mLayoutPreference).when(mFragment).findPreference(any()); mIntroPreference = new IntroPreference(mContext); doReturn(mIntroPreference).when(mFragment).findPreference(any()); mBundle = spy(new Bundle()); doReturn(mContext).when(mFragment).getContext(); doReturn(mActivity).when(mFragment).getActivity(); Loading @@ -145,29 +158,6 @@ public class AdvancedPowerUsageDetailTest { when(mFragment.getArguments()).thenReturn(mBundle); doReturn(mLoaderManager).when(mFragment).getLoaderManager(); ShadowEntityHeaderController.setUseMock(mEntityHeaderController); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setButtonActions(anyInt(), anyInt()); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setIcon(nullable(Drawable.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setIcon(nullable(ApplicationsState.AppEntry.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setLabel(nullable(String.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setLabel(nullable(String.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setLabel(nullable(ApplicationsState.AppEntry.class)); doReturn(mEntityHeaderController) .when(mEntityHeaderController) .setSummary(nullable(String.class)); when(mBatteryEntry.getUid()).thenReturn(UID); when(mBatteryEntry.getLabel()).thenReturn(APP_LABEL); when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(FOREGROUND_TIME_MS); Loading Loading @@ -202,7 +192,9 @@ public class AdvancedPowerUsageDetailTest { mFragment.mState = mState; mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; mFragment.mLogStringBuilder = new StringBuilder(); doNothing().when(mState).ensureIcon(mAppEntry); mAppEntry.info = mock(ApplicationInfo.class); mAppEntry.label = APP_ENTRY_LABEL; mTestActivity = spy(new SettingsActivity()); doReturn(mPackageManager).when(mTestActivity).getPackageManager(); Loading Loading @@ -235,34 +227,27 @@ public class AdvancedPowerUsageDetailTest { } @Test @Config(shadows = ShadowUtils.class) public void initHeader_NoAppEntry_BuildByBundle() { mFragment.mAppEntry = null; mFragment.initHeader(); verify(mEntityHeaderController).setIcon(nullable(Drawable.class)); verify(mEntityHeaderController).setLabel(APP_LABEL); assertThat(mIntroPreference.getIcon()).isNotEqualTo(TEST_DRAWABLE); assertThat(mIntroPreference.getTitle()).isEqualTo(APP_LABEL); } @Test @Config(shadows = ShadowUtils.class) public void initHeader_HasAppEntry_BuildByAppEntry() { ReflectionHelpers.setStaticField( AppUtils.class, "sInstantAppDataProvider", new InstantAppDataProvider() { @Override public boolean isInstantApp(ApplicationInfo info) { return false; } }); mFragment.mAppEntry = mAppEntry; mFragment.initHeader(); verify(mEntityHeaderController).setIcon(mAppEntry); verify(mEntityHeaderController).setLabel(mAppEntry); verify(mEntityHeaderController).setIsInstantApp(false); assertThat(mIntroPreference.getIcon()).isEqualTo(TEST_DRAWABLE); assertThat(mIntroPreference.getTitle()).isEqualTo(mAppEntry.label); } @Test @Config(shadows = ShadowUtils.class) public void initHeader_HasAppEntry_InstantApp() { ReflectionHelpers.setStaticField( AppUtils.class, Loading @@ -276,9 +261,8 @@ public class AdvancedPowerUsageDetailTest { mFragment.mAppEntry = mAppEntry; mFragment.initHeader(); verify(mEntityHeaderController).setIcon(mAppEntry); verify(mEntityHeaderController).setLabel(mAppEntry); verify(mEntityHeaderController).setIsInstantApp(true); assertThat(mIntroPreference.getIcon()).isEqualTo(TEST_DRAWABLE); assertThat(mIntroPreference.getTitle()).isEqualTo(mAppEntry.label); } @Test Loading