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

Commit ccb56785 authored by Tony Mak's avatar Tony Mak
Browse files

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
parent 8017f4ed
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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 {
+46 −0
Original line number Diff line number Diff line
@@ -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;
        }
    }
}
+79 −0
Original line number Diff line number Diff line
@@ -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);
        }
    }

}