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
This commit is contained in:
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge.batteryusage;
|
|||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.app.usage.IUsageStatsManager;
|
||||||
import android.app.usage.UsageEvents.Event;
|
import android.app.usage.UsageEvents.Event;
|
||||||
import android.app.usage.UsageStatsManager;
|
import android.app.usage.UsageStatsManager;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
@@ -185,7 +186,8 @@ public final class ConvertUtils {
|
|||||||
/** Converts to {@link AppUsageEvent} from {@link Event} */
|
/** Converts to {@link AppUsageEvent} from {@link Event} */
|
||||||
@Nullable
|
@Nullable
|
||||||
public static AppUsageEvent convertToAppUsageEvent(
|
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();
|
final String packageName = event.getPackageName();
|
||||||
if (packageName == null) {
|
if (packageName == null) {
|
||||||
// See b/190609174: Event package names should never be null, but sometimes they are.
|
// 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 =
|
final String effectivePackageName =
|
||||||
getEffectivePackageName(context, packageName, taskRootPackageName);
|
getEffectivePackageName(
|
||||||
|
context, usageStatsManager, packageName, taskRootPackageName);
|
||||||
try {
|
try {
|
||||||
final long uid = context
|
final long uid = context
|
||||||
.getPackageManager()
|
.getPackageManager()
|
||||||
@@ -326,8 +329,9 @@ public final class ConvertUtils {
|
|||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static String getEffectivePackageName(
|
static String getEffectivePackageName(
|
||||||
Context context, final String packageName, final String taskRootPackageName) {
|
Context context, IUsageStatsManager usageStatsManager, final String packageName,
|
||||||
final int usageSource = getUsageSource(context);
|
final String taskRootPackageName) {
|
||||||
|
final int usageSource = getUsageSource(context, usageStatsManager);
|
||||||
switch (usageSource) {
|
switch (usageSource) {
|
||||||
case UsageStatsManager.USAGE_SOURCE_TASK_ROOT_ACTIVITY:
|
case UsageStatsManager.USAGE_SOURCE_TASK_ROOT_ACTIVITY:
|
||||||
return !TextUtils.isEmpty(taskRootPackageName)
|
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) {
|
if (sUsageSource == EMPTY_USAGE_SOURCE) {
|
||||||
sUsageSource = DatabaseUtils.getUsageSource(context);
|
sUsageSource = DatabaseUtils.getUsageSource(context, usageStatsManager);
|
||||||
}
|
}
|
||||||
return sUsageSource;
|
return sUsageSource;
|
||||||
}
|
}
|
||||||
|
@@ -32,6 +32,7 @@ import android.os.BatteryUsageStats;
|
|||||||
import android.os.BatteryUsageStatsQuery;
|
import android.os.BatteryUsageStatsQuery;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
import android.os.ServiceManager;
|
||||||
import android.os.UidBatteryConsumer;
|
import android.os.UidBatteryConsumer;
|
||||||
import android.os.UserBatteryConsumer;
|
import android.os.UserBatteryConsumer;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
@@ -108,6 +109,11 @@ public final class DataProcessor {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static Set<String> sTestSystemAppsPackageNames;
|
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 =
|
public static final String CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER =
|
||||||
"CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER";
|
"CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER";
|
||||||
|
|
||||||
@@ -338,7 +344,8 @@ public final class DataProcessor {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
final AppUsageEvent appUsageEvent =
|
final AppUsageEvent appUsageEvent =
|
||||||
ConvertUtils.convertToAppUsageEvent(context, event, userId);
|
ConvertUtils.convertToAppUsageEvent(
|
||||||
|
context, sUsageStatsManager, event, userId);
|
||||||
if (appUsageEvent != null) {
|
if (appUsageEvent != null) {
|
||||||
numEventsFetched++;
|
numEventsFetched++;
|
||||||
appUsageEventList.add(appUsageEvent);
|
appUsageEventList.add(appUsageEvent);
|
||||||
@@ -694,6 +701,7 @@ public final class DataProcessor {
|
|||||||
final long eventUserId = firstEvent.getUserId();
|
final long eventUserId = firstEvent.getUserId();
|
||||||
final String packageName = getEffectivePackageName(
|
final String packageName = getEffectivePackageName(
|
||||||
context,
|
context,
|
||||||
|
sUsageStatsManager,
|
||||||
firstEvent.getPackageName(),
|
firstEvent.getPackageName(),
|
||||||
firstEvent.getTaskRootPackageName());
|
firstEvent.getTaskRootPackageName());
|
||||||
usageEvents.addAll(deviceEvents);
|
usageEvents.addAll(deviceEvents);
|
||||||
@@ -966,7 +974,7 @@ public final class DataProcessor {
|
|||||||
final long startTime = DatabaseUtils.getAppUsageStartTimestampOfUser(
|
final long startTime = DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||||
context, userID, earliestTimestamp);
|
context, userID, earliestTimestamp);
|
||||||
return loadAppUsageEventsForUserFromService(
|
return loadAppUsageEventsForUserFromService(
|
||||||
DatabaseUtils.sUsageStatsManager, startTime, now, userID, callingPackage);
|
sUsageStatsManager, startTime, now, userID, callingPackage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@@ -31,7 +31,6 @@ import android.os.BatteryUsageStats;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -117,11 +116,6 @@ public final class DatabaseUtils {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static Supplier<Cursor> sFakeSupplier;
|
static Supplier<Cursor> sFakeSupplier;
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static IUsageStatsManager sUsageStatsManager =
|
|
||||||
IUsageStatsManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService(Context.USAGE_STATS_SERVICE));
|
|
||||||
|
|
||||||
private DatabaseUtils() {
|
private DatabaseUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,7 +482,7 @@ public final class DatabaseUtils {
|
|||||||
*
|
*
|
||||||
* @see UsageStatsManager#getUsageSource()
|
* @see UsageStatsManager#getUsageSource()
|
||||||
*/
|
*/
|
||||||
static int getUsageSource(Context context) {
|
static int getUsageSource(Context context, IUsageStatsManager usageStatsManager) {
|
||||||
final SharedPreferences sharedPreferences = getSharedPreferences(context);
|
final SharedPreferences sharedPreferences = getSharedPreferences(context);
|
||||||
if (sharedPreferences != null && sharedPreferences.contains(KEY_LAST_USAGE_SOURCE)) {
|
if (sharedPreferences != null && sharedPreferences.contains(KEY_LAST_USAGE_SOURCE)) {
|
||||||
return sharedPreferences
|
return sharedPreferences
|
||||||
@@ -497,7 +491,7 @@ public final class DatabaseUtils {
|
|||||||
int usageSource = ConvertUtils.DEFAULT_USAGE_SOURCE;
|
int usageSource = ConvertUtils.DEFAULT_USAGE_SOURCE;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
usageSource = sUsageStatsManager.getUsageSource();
|
usageSource = usageStatsManager.getUsageSource();
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Failed to getUsageSource", e);
|
Log.e(TAG, "Failed to getUsageSource", e);
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
|
|||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.usage.IUsageStatsManager;
|
||||||
import android.app.usage.UsageEvents;
|
import android.app.usage.UsageEvents;
|
||||||
import android.app.usage.UsageEvents.Event;
|
import android.app.usage.UsageEvents.Event;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
@@ -61,6 +62,8 @@ public final class ConvertUtilsTest {
|
|||||||
private BatteryUsageStats mBatteryUsageStats;
|
private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
@Mock
|
||||||
private BatteryEntry mMockBatteryEntry;
|
private BatteryEntry mMockBatteryEntry;
|
||||||
|
@Mock
|
||||||
|
private IUsageStatsManager mUsageStatsManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -68,6 +71,7 @@ public final class ConvertUtilsTest {
|
|||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
ConvertUtils.sUsageSource = ConvertUtils.EMPTY_USAGE_SOURCE;
|
ConvertUtils.sUsageSource = ConvertUtils.EMPTY_USAGE_SOURCE;
|
||||||
when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
|
when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
|
||||||
|
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -299,7 +303,7 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
final long userId = 2;
|
final long userId = 2;
|
||||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(
|
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(
|
||||||
mContext, event, userId);
|
mContext, mUsageStatsManager, event, userId);
|
||||||
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
||||||
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
|
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
|
||||||
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
||||||
@@ -320,7 +324,7 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
final long userId = 1;
|
final long userId = 1;
|
||||||
final AppUsageEvent appUsageEvent =
|
final AppUsageEvent appUsageEvent =
|
||||||
ConvertUtils.convertToAppUsageEvent(mContext, event, userId);
|
ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);
|
||||||
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
||||||
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.DEVICE_SHUTDOWN);
|
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.DEVICE_SHUTDOWN);
|
||||||
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
||||||
@@ -336,7 +340,8 @@ public final class ConvertUtilsTest {
|
|||||||
event.mPackage = null;
|
event.mPackage = null;
|
||||||
|
|
||||||
final AppUsageEvent appUsageEvent =
|
final AppUsageEvent appUsageEvent =
|
||||||
ConvertUtils.convertToAppUsageEvent(mContext, event, /*userId=*/ 0);
|
ConvertUtils.convertToAppUsageEvent(
|
||||||
|
mContext, mUsageStatsManager, event, /*userId=*/ 0);
|
||||||
|
|
||||||
assertThat(appUsageEvent).isNull();
|
assertThat(appUsageEvent).isNull();
|
||||||
}
|
}
|
||||||
@@ -352,7 +357,7 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
final long userId = 1;
|
final long userId = 1;
|
||||||
final AppUsageEvent appUsageEvent =
|
final AppUsageEvent appUsageEvent =
|
||||||
ConvertUtils.convertToAppUsageEvent(mContext, event, userId);
|
ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);
|
||||||
|
|
||||||
assertThat(appUsageEvent).isNull();
|
assertThat(appUsageEvent).isNull();
|
||||||
}
|
}
|
||||||
@@ -453,7 +458,7 @@ public final class ConvertUtilsTest {
|
|||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(ConvertUtils.getEffectivePackageName(
|
||||||
mContext, packageName, taskRootPackageName))
|
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,7 +468,7 @@ public final class ConvertUtilsTest {
|
|||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(ConvertUtils.getEffectivePackageName(
|
||||||
mContext, packageName, taskRootPackageName))
|
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,7 +479,7 @@ public final class ConvertUtilsTest {
|
|||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(ConvertUtils.getEffectivePackageName(
|
||||||
mContext, packageName, taskRootPackageName))
|
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||||
.isEqualTo(taskRootPackageName);
|
.isEqualTo(taskRootPackageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -484,10 +489,10 @@ public final class ConvertUtilsTest {
|
|||||||
final String packageName = "com.android.settings1";
|
final String packageName = "com.android.settings1";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(ConvertUtils.getEffectivePackageName(
|
||||||
mContext, packageName, /*taskRootPackageName=*/ null))
|
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ null))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(ConvertUtils.getEffectivePackageName(
|
||||||
mContext, packageName, /*taskRootPackageName=*/ ""))
|
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ ""))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -72,7 +72,7 @@ public final class DataProcessManagerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
DatabaseUtils.sUsageStatsManager = mUsageStatsManager;
|
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
||||||
doReturn(mContext).when(mContext).getApplicationContext();
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mUserManager)
|
doReturn(mUserManager)
|
||||||
.when(mContext)
|
.when(mContext)
|
||||||
|
@@ -93,7 +93,7 @@ public final class DataProcessorTest {
|
|||||||
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
|
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
|
||||||
|
|
||||||
DataProcessor.sTestSystemAppsPackageNames = Set.of();
|
DataProcessor.sTestSystemAppsPackageNames = Set.of();
|
||||||
DatabaseUtils.sUsageStatsManager = mUsageStatsManager;
|
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
||||||
doReturn(mIntent).when(mContext).registerReceiver(
|
doReturn(mIntent).when(mContext).registerReceiver(
|
||||||
isA(BroadcastReceiver.class), isA(IntentFilter.class));
|
isA(BroadcastReceiver.class), isA(IntentFilter.class));
|
||||||
doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());
|
doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());
|
||||||
|
@@ -85,7 +85,7 @@ public final class DatabaseUtilsTest {
|
|||||||
doReturn(mPackageManager).when(mMockContext).getPackageManager();
|
doReturn(mPackageManager).when(mMockContext).getPackageManager();
|
||||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
DatabaseUtils.getSharedPreferences(mContext).edit().clear().apply();
|
DatabaseUtils.getSharedPreferences(mContext).edit().clear().apply();
|
||||||
DatabaseUtils.sUsageStatsManager = mUsageStatsManager;
|
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -466,7 +466,7 @@ public final class DatabaseUtilsTest {
|
|||||||
.putInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_TASK_ROOT_ACTIVITY)
|
.putInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_TASK_ROOT_ACTIVITY)
|
||||||
.apply();
|
.apply();
|
||||||
|
|
||||||
assertThat(DatabaseUtils.getUsageSource(mContext))
|
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||||
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,7 +474,7 @@ public final class DatabaseUtilsTest {
|
|||||||
public void getUsageSource_notHasData_writeLoadedData() throws RemoteException {
|
public void getUsageSource_notHasData_writeLoadedData() throws RemoteException {
|
||||||
when(mUsageStatsManager.getUsageSource()).thenReturn(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
when(mUsageStatsManager.getUsageSource()).thenReturn(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||||
|
|
||||||
assertThat(DatabaseUtils.getUsageSource(mContext))
|
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||||
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils
|
||||||
@@ -487,7 +487,7 @@ public final class DatabaseUtilsTest {
|
|||||||
public void getUsageSource_throwException_writeDefaultData() throws RemoteException {
|
public void getUsageSource_throwException_writeDefaultData() throws RemoteException {
|
||||||
when(mUsageStatsManager.getUsageSource()).thenThrow(new RemoteException());
|
when(mUsageStatsManager.getUsageSource()).thenThrow(new RemoteException());
|
||||||
|
|
||||||
assertThat(DatabaseUtils.getUsageSource(mContext))
|
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||||
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils
|
||||||
|
Reference in New Issue
Block a user