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

Commit 50c7cb83 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update App battery usage page and add tests." into tm-qpr-dev

parents f9886847 99d3b54a
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);
  }
}