diff options
| author | 2021-04-09 15:59:50 +0100 | |
|---|---|---|
| committer | 2021-04-14 20:41:56 +0100 | |
| commit | ccb567856977ddd30251f39d2da931b32bf8c5ca (patch) | |
| tree | dc8b9a5802a71aad2621ceea66192097541b9aa6 | |
| parent | 8017f4ed5e5806491b4a6e14422193ea2f588f21 (diff) | |
Add some TestAPIs for replacing some @hide API usages in ExtServices's test
Added a builder class for UsageStats and StorageVolume. This allows
us to create these data classes for testing.
Currently, a test in ExtServices creates these objects by using some
hidden APIs. Those tests are part of the mainline test suite, we should
not use hiden APIs there. Otherwise, the test APK cannot be installed on
older platforms.
Test: atest ExtservicesUnitTest
Bug: 182546925
Change-Id: I32939dedfa55233dfb27337cee8818a9dc25d786
| -rw-r--r-- | core/api/test-current.txt | 20 | ||||
| -rw-r--r-- | core/java/android/app/usage/UsageStats.java | 46 | ||||
| -rw-r--r-- | core/java/android/os/storage/StorageVolume.java | 79 |
3 files changed, 145 insertions, 0 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 20e91873a7e0..35cdd13f7d84 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -656,6 +656,16 @@ package android.app.usage { ctor public UsageStats(); } + public static final class UsageStats.Builder { + ctor public UsageStats.Builder(); + method @NonNull public android.app.usage.UsageStats build(); + method @NonNull public android.app.usage.UsageStats.Builder setFirstTimeStamp(long); + method @NonNull public android.app.usage.UsageStats.Builder setLastTimeStamp(long); + method @NonNull public android.app.usage.UsageStats.Builder setLastTimeUsed(long); + method @NonNull public android.app.usage.UsageStats.Builder setPackageName(@Nullable String); + method @NonNull public android.app.usage.UsageStats.Builder setTotalTimeInForeground(long); + } + public final class UsageStatsManager { method public void forceUsageSourceSettingRead(); } @@ -1897,6 +1907,16 @@ package android.os.storage { method public String getPath(); } + public static final class StorageVolume.Builder { + ctor public StorageVolume.Builder(@NonNull String, @NonNull java.io.File, @NonNull String, @NonNull android.os.UserHandle, @NonNull String); + method @NonNull public android.os.storage.StorageVolume build(); + method @NonNull public android.os.storage.StorageVolume.Builder setEmulated(boolean); + method @NonNull public android.os.storage.StorageVolume.Builder setPrimary(boolean); + method @NonNull public android.os.storage.StorageVolume.Builder setRemovable(boolean); + method @NonNull public android.os.storage.StorageVolume.Builder setStorageUuid(@Nullable java.util.UUID); + method @NonNull public android.os.storage.StorageVolume.Builder setUuid(@Nullable String); + } + } package android.os.strictmode { diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java index cda463408955..b723140e2361 100644 --- a/core/java/android/app/usage/UsageStats.java +++ b/core/java/android/app/usage/UsageStats.java @@ -31,6 +31,8 @@ import static android.app.usage.UsageEvents.Event.ROLLOVER_FOREGROUND_SERVICE; import static android.app.usage.UsageEvents.Event.USER_INTERACTION; import android.annotation.CurrentTimeMillisLong; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; @@ -760,4 +762,48 @@ public final class UsageStats implements Parcelable { return new UsageStats[size]; } }; + + /** @hide */ + // This class is used by the mainline test suite, so we have to keep these APIs around across + // releases. Consider making this class public to help external developers to write tests as + // well. + @TestApi + public static final class Builder { + private final UsageStats mUsageStats = new UsageStats(); + + @NonNull + public UsageStats build() { + return mUsageStats; + } + + @NonNull + public Builder setPackageName(@Nullable String packageName) { + mUsageStats.mPackageName = packageName; + return this; + } + + @NonNull + public Builder setFirstTimeStamp(long firstTimeStamp) { + mUsageStats.mBeginTimeStamp = firstTimeStamp; + return this; + } + + @NonNull + public Builder setLastTimeStamp(long lastTimeStamp) { + mUsageStats.mEndTimeStamp = lastTimeStamp; + return this; + } + + @NonNull + public Builder setTotalTimeInForeground(long totalTimeInForeground) { + mUsageStats.mTotalTimeInForeground = totalTimeInForeground; + return this; + } + + @NonNull + public Builder setLastTimeUsed(long lastTimeUsed) { + mUsageStats.mLastTimeUsed = lastTimeUsed; + return this; + } + } } diff --git a/core/java/android/os/storage/StorageVolume.java b/core/java/android/os/storage/StorageVolume.java index 36177c46ebef..2adcbc318614 100644 --- a/core/java/android/os/storage/StorageVolume.java +++ b/core/java/android/os/storage/StorageVolume.java @@ -20,6 +20,7 @@ import static android.annotation.SystemApi.Client.MODULE_LIBRARIES; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; @@ -551,4 +552,82 @@ public final class StorageVolume implements Parcelable { parcel.writeString8(mFsUuid); parcel.writeString8(mState); } + + /** @hide */ + // This class is used by the mainline test suite, so we have to keep these APIs around across + // releases. Consider making this class public to help external developers to write tests as + // well. + @TestApi + public static final class Builder { + private String mId; + private File mPath; + private String mDescription; + private boolean mPrimary; + private boolean mRemovable; + private boolean mEmulated; + private UserHandle mOwner; + private UUID mStorageUuid; + private String mUuid; + private String mState; + + @SuppressLint("StreamFiles") + public Builder( + @NonNull String id, @NonNull File path, @NonNull String description, + @NonNull UserHandle owner, @NonNull String state) { + mId = id; + mPath = path; + mDescription = description; + mOwner = owner; + mState = state; + } + + @NonNull + public Builder setStorageUuid(@Nullable UUID storageUuid) { + mStorageUuid = storageUuid; + return this; + } + + @NonNull + public Builder setUuid(@Nullable String uuid) { + mUuid = uuid; + return this; + } + + @NonNull + public Builder setPrimary(boolean primary) { + mPrimary = primary; + return this; + } + + @NonNull + public Builder setRemovable(boolean removable) { + mRemovable = removable; + return this; + } + + @NonNull + public Builder setEmulated(boolean emulated) { + mEmulated = emulated; + return this; + } + + @NonNull + public StorageVolume build() { + return new StorageVolume( + mId, + mPath, + /* internalPath= */ mPath, + mDescription, + mPrimary, + mRemovable, + mEmulated, + /* allowMassStorage= */ false, + /* maxFileSize= */ 0, + mOwner, + mStorageUuid, + mUuid, + mState); + } + } + } |