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

Commit 20ec9893 authored by Kuan Wang's avatar Kuan Wang Committed by Zaiyue Xue
Browse files

Move static UsageStatsManager from DatabaseUtils to DataProcessor to

avoid reference from DataProcessor.

This is to fix the Accessibility tests hang issue.
Tested on main branch (https://android-build.googleplex.com/builds/abtd/run/L40400000962473343).

Test: make RunSettingsRoboTests
Bug: 293366011
Bug: 295026588
Bug: 295123907
Change-Id: I345e0c060165e4d06f98ada6b2e1ca3cbb4f911a
parent 0ca2e987
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge.batteryusage;

import android.annotation.IntDef;
import android.annotation.Nullable;
import android.app.usage.IUsageStatsManager;
import android.app.usage.UsageEvents.Event;
import android.app.usage.UsageStatsManager;
import android.content.ContentValues;
@@ -185,7 +186,8 @@ public final class ConvertUtils {
    /** Converts to {@link AppUsageEvent} from {@link Event} */
    @Nullable
    public static AppUsageEvent convertToAppUsageEvent(
            Context context, final Event event, final long userId) {
            Context context, IUsageStatsManager usageStatsManager, final Event event,
            final long userId) {
        final String packageName = event.getPackageName();
        if (packageName == null) {
            // See b/190609174: Event package names should never be null, but sometimes they are.
@@ -210,7 +212,8 @@ public final class ConvertUtils {
        }

        final String effectivePackageName =
                getEffectivePackageName(context, packageName, taskRootPackageName);
                getEffectivePackageName(
                        context, usageStatsManager, packageName, taskRootPackageName);
        try {
            final long uid = context
                    .getPackageManager()
@@ -326,8 +329,9 @@ public final class ConvertUtils {
     */
    @VisibleForTesting
    static String getEffectivePackageName(
            Context context, final String packageName, final String taskRootPackageName) {
        final int usageSource = getUsageSource(context);
            Context context, IUsageStatsManager usageStatsManager, final String packageName,
            final String taskRootPackageName) {
        final int usageSource = getUsageSource(context, usageStatsManager);
        switch (usageSource) {
            case UsageStatsManager.USAGE_SOURCE_TASK_ROOT_ACTIVITY:
                return !TextUtils.isEmpty(taskRootPackageName)
@@ -372,9 +376,9 @@ public final class ConvertUtils {
        }
    }

    private static int getUsageSource(Context context) {
    private static int getUsageSource(Context context, IUsageStatsManager usageStatsManager) {
        if (sUsageSource == EMPTY_USAGE_SOURCE) {
            sUsageSource = DatabaseUtils.getUsageSource(context);
            sUsageSource = DatabaseUtils.getUsageSource(context, usageStatsManager);
        }
        return sUsageSource;
    }
+10 −2
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UidBatteryConsumer;
import android.os.UserBatteryConsumer;
import android.os.UserHandle;
@@ -108,6 +109,11 @@ public final class DataProcessor {
    @VisibleForTesting
    static Set<String> sTestSystemAppsPackageNames;

    @VisibleForTesting
    static IUsageStatsManager sUsageStatsManager =
            IUsageStatsManager.Stub.asInterface(
                    ServiceManager.getService(Context.USAGE_STATS_SERVICE));

    public static final String CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER =
            "CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER";

@@ -338,7 +344,8 @@ public final class DataProcessor {
                            break;
                        }
                        final AppUsageEvent appUsageEvent =
                                ConvertUtils.convertToAppUsageEvent(context, event, userId);
                                ConvertUtils.convertToAppUsageEvent(
                                        context, sUsageStatsManager, event, userId);
                        if (appUsageEvent != null) {
                            numEventsFetched++;
                            appUsageEventList.add(appUsageEvent);
@@ -694,6 +701,7 @@ public final class DataProcessor {
            final long eventUserId = firstEvent.getUserId();
            final String packageName = getEffectivePackageName(
                    context,
                    sUsageStatsManager,
                    firstEvent.getPackageName(),
                    firstEvent.getTaskRootPackageName());
            usageEvents.addAll(deviceEvents);
@@ -966,7 +974,7 @@ public final class DataProcessor {
        final long startTime = DatabaseUtils.getAppUsageStartTimestampOfUser(
                context, userID, earliestTimestamp);
        return loadAppUsageEventsForUserFromService(
                DatabaseUtils.sUsageStatsManager, startTime, now, userID, callingPackage);
                sUsageStatsManager, startTime, now, userID, callingPackage);
    }

    @Nullable
+2 −8
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.os.BatteryUsageStats;
import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserManager;
import android.util.Log;
@@ -117,11 +116,6 @@ public final class DatabaseUtils {
    @VisibleForTesting
    static Supplier<Cursor> sFakeSupplier;

    @VisibleForTesting
    static IUsageStatsManager sUsageStatsManager =
            IUsageStatsManager.Stub.asInterface(
                    ServiceManager.getService(Context.USAGE_STATS_SERVICE));

    private DatabaseUtils() {
    }

@@ -488,7 +482,7 @@ public final class DatabaseUtils {
     *
     * @see UsageStatsManager#getUsageSource()
     */
    static int getUsageSource(Context context) {
    static int getUsageSource(Context context, IUsageStatsManager usageStatsManager) {
        final SharedPreferences sharedPreferences = getSharedPreferences(context);
        if (sharedPreferences != null && sharedPreferences.contains(KEY_LAST_USAGE_SOURCE)) {
            return sharedPreferences
@@ -497,7 +491,7 @@ public final class DatabaseUtils {
        int usageSource = ConvertUtils.DEFAULT_USAGE_SOURCE;

        try {
            usageSource = sUsageStatsManager.getUsageSource();
            usageSource = usageStatsManager.getUsageSource();
        } catch (RemoteException e) {
            Log.e(TAG, "Failed to getUsageSource", e);
        }
+14 −9
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.app.usage.IUsageStatsManager;
import android.app.usage.UsageEvents;
import android.app.usage.UsageEvents.Event;
import android.content.ContentValues;
@@ -61,6 +62,8 @@ public final class ConvertUtilsTest {
    private BatteryUsageStats mBatteryUsageStats;
    @Mock
    private BatteryEntry mMockBatteryEntry;
    @Mock
    private IUsageStatsManager mUsageStatsManager;

    @Before
    public void setUp() {
@@ -68,6 +71,7 @@ public final class ConvertUtilsTest {
        mContext = spy(RuntimeEnvironment.application);
        ConvertUtils.sUsageSource = ConvertUtils.EMPTY_USAGE_SOURCE;
        when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
        DataProcessor.sUsageStatsManager = mUsageStatsManager;
    }

    @Test
@@ -299,7 +303,7 @@ public final class ConvertUtilsTest {

        final long userId = 2;
        final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(
                mContext, event, userId);
                mContext, mUsageStatsManager, event, userId);
        assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
        assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
        assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
@@ -320,7 +324,7 @@ public final class ConvertUtilsTest {

        final long userId = 1;
        final AppUsageEvent appUsageEvent =
                ConvertUtils.convertToAppUsageEvent(mContext, event, userId);
                ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);
        assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
        assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.DEVICE_SHUTDOWN);
        assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
@@ -336,7 +340,8 @@ public final class ConvertUtilsTest {
        event.mPackage = null;

        final AppUsageEvent appUsageEvent =
                ConvertUtils.convertToAppUsageEvent(mContext, event, /*userId=*/ 0);
                ConvertUtils.convertToAppUsageEvent(
                        mContext, mUsageStatsManager, event, /*userId=*/ 0);

        assertThat(appUsageEvent).isNull();
    }
@@ -352,7 +357,7 @@ public final class ConvertUtilsTest {

        final long userId = 1;
        final AppUsageEvent appUsageEvent =
                ConvertUtils.convertToAppUsageEvent(mContext, event, userId);
                ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);

        assertThat(appUsageEvent).isNull();
    }
@@ -453,7 +458,7 @@ public final class ConvertUtilsTest {
        final String taskRootPackageName = "com.android.settings2";

        assertThat(ConvertUtils.getEffectivePackageName(
                mContext, packageName, taskRootPackageName))
                mContext, mUsageStatsManager, packageName, taskRootPackageName))
                .isEqualTo(packageName);
    }

@@ -463,7 +468,7 @@ public final class ConvertUtilsTest {
        final String taskRootPackageName = "com.android.settings2";

        assertThat(ConvertUtils.getEffectivePackageName(
                mContext, packageName, taskRootPackageName))
                mContext, mUsageStatsManager, packageName, taskRootPackageName))
                .isEqualTo(packageName);
    }

@@ -474,7 +479,7 @@ public final class ConvertUtilsTest {
        final String taskRootPackageName = "com.android.settings2";

        assertThat(ConvertUtils.getEffectivePackageName(
                mContext, packageName, taskRootPackageName))
                mContext, mUsageStatsManager, packageName, taskRootPackageName))
                .isEqualTo(taskRootPackageName);
    }

@@ -484,10 +489,10 @@ public final class ConvertUtilsTest {
        final String packageName = "com.android.settings1";

        assertThat(ConvertUtils.getEffectivePackageName(
                mContext, packageName, /*taskRootPackageName=*/ null))
                mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ null))
                .isEqualTo(packageName);
        assertThat(ConvertUtils.getEffectivePackageName(
                mContext, packageName, /*taskRootPackageName=*/ ""))
                mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ ""))
                .isEqualTo(packageName);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ public final class DataProcessManagerTest {
        MockitoAnnotations.initMocks(this);

        mContext = spy(RuntimeEnvironment.application);
        DatabaseUtils.sUsageStatsManager = mUsageStatsManager;
        DataProcessor.sUsageStatsManager = mUsageStatsManager;
        doReturn(mContext).when(mContext).getApplicationContext();
        doReturn(mUserManager)
                .when(mContext)
Loading