180 lines
5.8 KiB
Java
180 lines
5.8 KiB
Java
/*
|
|
* Copyright (C) 2024 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.app.ondeviceintelligence;
|
|
|
|
import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE;
|
|
|
|
import android.annotation.FlaggedApi;
|
|
import android.annotation.NonNull;
|
|
import android.annotation.SystemApi;
|
|
import android.os.Parcelable;
|
|
import android.os.PersistableBundle;
|
|
|
|
import androidx.annotation.IntDef;
|
|
|
|
import java.lang.annotation.ElementType;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.lang.annotation.Target;
|
|
import java.text.MessageFormat;
|
|
|
|
/**
|
|
* Represents a status of a requested {@link Feature}.
|
|
*
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
@FlaggedApi(FLAG_ENABLE_ON_DEVICE_INTELLIGENCE)
|
|
public final class FeatureDetails implements Parcelable {
|
|
@Status
|
|
private final int mFeatureStatus;
|
|
@NonNull
|
|
private final PersistableBundle mFeatureDetailParams;
|
|
|
|
/** Invalid or unavailable {@code AiFeature}. */
|
|
public static final int FEATURE_STATUS_UNAVAILABLE = 0;
|
|
|
|
/** Feature can be downloaded on request. */
|
|
public static final int FEATURE_STATUS_DOWNLOADABLE = 1;
|
|
|
|
/** Feature is being downloaded. */
|
|
public static final int FEATURE_STATUS_DOWNLOADING = 2;
|
|
|
|
/** Feature is fully downloaded and ready to use. */
|
|
public static final int FEATURE_STATUS_AVAILABLE = 3;
|
|
|
|
/** Underlying service is unavailable and feature status cannot be fetched. */
|
|
public static final int FEATURE_STATUS_SERVICE_UNAVAILABLE = 4;
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
@IntDef(value = {
|
|
FEATURE_STATUS_UNAVAILABLE,
|
|
FEATURE_STATUS_DOWNLOADABLE,
|
|
FEATURE_STATUS_DOWNLOADING,
|
|
FEATURE_STATUS_AVAILABLE,
|
|
FEATURE_STATUS_SERVICE_UNAVAILABLE
|
|
}, open = true)
|
|
@Target({ElementType.TYPE_USE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface Status {
|
|
}
|
|
|
|
public FeatureDetails(
|
|
@Status int featureStatus,
|
|
@NonNull PersistableBundle featureDetailParams) {
|
|
this.mFeatureStatus = featureStatus;
|
|
com.android.internal.util.AnnotationValidations.validate(
|
|
Status.class, null, mFeatureStatus);
|
|
this.mFeatureDetailParams = featureDetailParams;
|
|
com.android.internal.util.AnnotationValidations.validate(
|
|
NonNull.class, null, mFeatureDetailParams);
|
|
}
|
|
|
|
public FeatureDetails(
|
|
@Status int featureStatus) {
|
|
this.mFeatureStatus = featureStatus;
|
|
com.android.internal.util.AnnotationValidations.validate(
|
|
Status.class, null, mFeatureStatus);
|
|
this.mFeatureDetailParams = new PersistableBundle();
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns an integer value associated with the feature status.
|
|
*/
|
|
public @Status int getFeatureStatus() {
|
|
return mFeatureStatus;
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns a persistable bundle contain any additional status related params.
|
|
*/
|
|
public @NonNull PersistableBundle getFeatureDetailParams() {
|
|
return mFeatureDetailParams;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return MessageFormat.format("FeatureDetails '{' status = {0}, "
|
|
+ "persistableBundle = {1} '}'",
|
|
mFeatureStatus,
|
|
mFeatureDetailParams);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(@android.annotation.Nullable Object o) {
|
|
if (this == o) return true;
|
|
if (o == null || getClass() != o.getClass()) return false;
|
|
@SuppressWarnings("unchecked")
|
|
FeatureDetails that = (FeatureDetails) o;
|
|
return mFeatureStatus == that.mFeatureStatus
|
|
&& java.util.Objects.equals(mFeatureDetailParams, that.mFeatureDetailParams);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
int _hash = 1;
|
|
_hash = 31 * _hash + mFeatureStatus;
|
|
_hash = 31 * _hash + java.util.Objects.hashCode(mFeatureDetailParams);
|
|
return _hash;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
|
|
dest.writeInt(mFeatureStatus);
|
|
dest.writeTypedObject(mFeatureDetailParams, flags);
|
|
}
|
|
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
/** @hide */
|
|
@SuppressWarnings({"unchecked", "RedundantCast"})
|
|
FeatureDetails(@NonNull android.os.Parcel in) {
|
|
int status = in.readInt();
|
|
PersistableBundle persistableBundle = (PersistableBundle) in.readTypedObject(
|
|
PersistableBundle.CREATOR);
|
|
|
|
this.mFeatureStatus = status;
|
|
com.android.internal.util.AnnotationValidations.validate(
|
|
Status.class, null, mFeatureStatus);
|
|
this.mFeatureDetailParams = persistableBundle;
|
|
com.android.internal.util.AnnotationValidations.validate(
|
|
NonNull.class, null, mFeatureDetailParams);
|
|
}
|
|
|
|
|
|
public static final @NonNull Parcelable.Creator<FeatureDetails> CREATOR =
|
|
new Parcelable.Creator<>() {
|
|
@Override
|
|
public FeatureDetails[] newArray(int size) {
|
|
return new FeatureDetails[size];
|
|
}
|
|
|
|
@Override
|
|
public FeatureDetails createFromParcel(@NonNull android.os.Parcel in) {
|
|
return new FeatureDetails(in);
|
|
}
|
|
};
|
|
|
|
}
|