Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99d3b54a authored by Tiffany Nguyen's avatar Tiffany Nguyen
Browse files

Update App battery usage page and add tests.

- Add tests
- Remove duplicated "Set battery usage for apps" text
- Clean up some code

Screenshot: https://screenshot.googleplex.com/8LHhyxFA6X4ZFkT.png

Test: make RunSettingsRoboTests -j40
Bug: 244995036
Change-Id: Iaac9b0af10f541100e91b10affacf3307bd5edca
parent 9b24df2c
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context;
import android.os.Build;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter;
@@ -37,14 +38,21 @@ public class AppStateAppBatteryUsageBridge extends AppStateBaseBridge {
    private static final String TAG = AppStateAppBatteryUsageBridge.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;
    @VisibleForTesting
    Context mContext;
    @VisibleForTesting
    AppOpsManager mAppOpsManager;
    @VisibleForTesting
    PowerAllowlistBackend mPowerAllowlistBackend;

    @VisibleForTesting
    static final int MODE_UNKNOWN = 0;
    @VisibleForTesting
    static final int MODE_UNRESTRICTED = 1;
    @VisibleForTesting
    static final int MODE_OPTIMIZED = 2;
    @VisibleForTesting
    static final int MODE_RESTRICTED = 3;

    @IntDef(
            prefix = {"MODE_"},
@@ -110,8 +118,9 @@ public class AppStateAppBatteryUsageBridge extends AppStateBaseBridge {
        return new AppBatteryUsageDetails(mode);
    }

    @VisibleForTesting
    @OptimizationMode
    private static int getAppBatteryUsageDetailsMode(AppEntry entry) {
    static int getAppBatteryUsageDetailsMode(AppEntry entry) {
        if (entry == null || entry.extraInfo == null) {
            return MODE_UNKNOWN;
        }
+5 −2
Original line number Diff line number Diff line
@@ -1196,9 +1196,12 @@ public class ManageApplications extends InstrumentedFragment
                    rebuild(R.id.sort_order_alpha, true);
                }
                return;
            } else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
            }

            if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
                logAppBatteryUsage(filterType);
            }

            rebuild();
        }

@@ -1673,7 +1676,7 @@ public class ManageApplications extends InstrumentedFragment
                    holder.setSummary(AppLocaleDetails.getSummary(mContext, entry));
                    break;
                case LIST_TYPE_BATTERY_OPTIMIZATION:
                    holder.setSummary(R.string.app_battery_usage_summary);
                    holder.setSummary(null);
                    break;
                default:
                    holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);
+78 −0
Original line number Diff line number Diff line
package com.android.settings.applications;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.when;

import android.app.AppOpsManager;
import android.content.Context;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@RunWith(AndroidJUnit4.class)
public final class AppStateAppBatteryUsageBridgeTest {
  private static final String TEST_PACKAGE_1 = "com.example.test.pkg1";
  private static final String TEST_PACKAGE_2 = "com.example.test.pkg2";
  private static final int UID_1 = 12345;
  private static final int UID_2 = 7654321;

  @Mock(answer = Answers.RETURNS_DEEP_STUBS)
  private Context mContext;
  @Mock
  private AppOpsManager mAppOpsManager;
  @Mock
  private PowerAllowlistBackend mPowerAllowlistBackend;

  @Before
  public void initMocks() {
      MockitoAnnotations.initMocks(this);
  }

  @Test
  public void updateExtraInfo_updatesRestricted() {
    when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE_1)).thenReturn(false);
    when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
            UID_1, TEST_PACKAGE_1)).thenReturn(AppOpsManager.MODE_IGNORED);
    AppStateAppBatteryUsageBridge bridge =
            new AppStateAppBatteryUsageBridge(mContext, null, null);
    bridge.mAppOpsManager = mAppOpsManager;
    bridge.mPowerAllowlistBackend = mPowerAllowlistBackend;
    AppEntry entry = new AppEntry(mContext, null, 0);

    bridge.updateExtraInfo(entry, TEST_PACKAGE_1, UID_1);

    assertThat(entry.extraInfo.getClass())
            .isEqualTo(AppStateAppBatteryUsageBridge.AppBatteryUsageDetails.class);
    assertThat(AppStateAppBatteryUsageBridge.getAppBatteryUsageDetailsMode(entry))
            .isEqualTo(AppStateAppBatteryUsageBridge.MODE_RESTRICTED);
  }

  @Test
  public void updateExtraInfo_updatesUnrestricted() {
    when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE_1)).thenReturn(true);
    when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
            UID_2, TEST_PACKAGE_2)).thenReturn(AppOpsManager.MODE_ALLOWED);
    AppStateAppBatteryUsageBridge bridge =
            new AppStateAppBatteryUsageBridge(mContext, null, null);
    bridge.mAppOpsManager = mAppOpsManager;
    bridge.mPowerAllowlistBackend = mPowerAllowlistBackend;
    AppEntry entry = new AppEntry(mContext, null, 0);

    bridge.updateExtraInfo(entry, TEST_PACKAGE_2, UID_2);

    assertThat(entry.extraInfo.getClass())
            .isEqualTo(AppStateAppBatteryUsageBridge.AppBatteryUsageDetails.class);
    assertThat(AppStateAppBatteryUsageBridge.getAppBatteryUsageDetailsMode(entry))
            .isEqualTo(AppStateAppBatteryUsageBridge.MODE_UNRESTRICTED);
  }
}