script-astra/Android/Sdk/sources/android-35/android/media/AudioHalVersionInfo.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

180 lines
6.7 KiB
Java

/*
* Copyright (C) 2022 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.media;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
/**
* Defines the audio HAL version.
*
* @hide
*/
@TestApi
public final class AudioHalVersionInfo implements Parcelable, Comparable<AudioHalVersionInfo> {
/**
* Indicate the audio HAL is implemented with HIDL (HAL interface definition language).
*
* @see <a href="https://source.android.com/docs/core/architecture/hidl/">HIDL</a>
* <p>The value of AUDIO_HAL_TYPE_HIDL should match the value of {@link
* android.media.AudioHalVersion.Type#HIDL}.
*/
public static final int AUDIO_HAL_TYPE_HIDL = 0;
/**
* Indicate the audio HAL is implemented with AIDL (Android Interface Definition Language).
*
* @see <a href="https://source.android.com/docs/core/architecture/aidl/">AIDL</a>
* <p>The value of AUDIO_HAL_TYPE_AIDL should match the value of {@link
* android.media.AudioHalVersion.Type#AIDL}.
*/
public static final int AUDIO_HAL_TYPE_AIDL = 1;
/** @hide */
@IntDef(
flag = false,
prefix = "AUDIO_HAL_TYPE_",
value = {AUDIO_HAL_TYPE_HIDL, AUDIO_HAL_TYPE_AIDL})
@Retention(RetentionPolicy.SOURCE)
public @interface AudioHalType {}
/** AudioHalVersionInfo object of all valid Audio HAL versions. */
public static final @NonNull AudioHalVersionInfo AIDL_1_0 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_AIDL, 1 /* major */, 0 /* minor */);
public static final @NonNull AudioHalVersionInfo HIDL_7_1 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 7 /* major */, 1 /* minor */);
public static final @NonNull AudioHalVersionInfo HIDL_7_0 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 7 /* major */, 0 /* minor */);
public static final @NonNull AudioHalVersionInfo HIDL_6_0 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 6 /* major */, 0 /* minor */);
public static final @NonNull AudioHalVersionInfo HIDL_5_0 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 5 /* major */, 0 /* minor */);
public static final @NonNull AudioHalVersionInfo HIDL_4_0 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 4 /* major */, 0 /* minor */);
public static final @NonNull AudioHalVersionInfo HIDL_2_0 =
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 2 /* major */, 0 /* minor */);
/**
* List of all valid Audio HAL versions. This list need to be in sync with sAudioHALVersions
* defined in frameworks/av/media/libaudiohal/FactoryHal.cpp.
*
* Note: update {@link android.media.audio.cts.AudioHalVersionInfoTest} CTS accordingly if
* there is a change to supported versions.
*/
public static final @NonNull List<AudioHalVersionInfo> VERSIONS =
List.of(AIDL_1_0, HIDL_7_1, HIDL_7_0, HIDL_6_0, HIDL_5_0);
private static final String TAG = "AudioHalVersionInfo";
private AudioHalVersion mHalVersion = new AudioHalVersion();
public @AudioHalType int getHalType() {
return mHalVersion.type;
}
public int getMajorVersion() {
return mHalVersion.major;
}
public int getMinorVersion() {
return mHalVersion.minor;
}
/** String representative of AudioHalVersion.Type */
private static @NonNull String typeToString(@AudioHalType int type) {
if (type == AudioHalVersion.Type.HIDL) {
return "HIDL";
} else if (type == AudioHalVersion.Type.AIDL) {
return "AIDL";
} else {
return "INVALID";
}
}
/** String representative of type, major and minor */
private static @NonNull String toString(@AudioHalType int type, int major, int minor) {
return typeToString(type) + ":" + Integer.toString(major) + "." + Integer.toString(minor);
}
private AudioHalVersionInfo(@AudioHalType int type, int major, int minor) {
mHalVersion.type = type;
mHalVersion.major = major;
mHalVersion.minor = minor;
}
private AudioHalVersionInfo(Parcel in) {
mHalVersion = in.readTypedObject(AudioHalVersion.CREATOR);
}
/** String representative of this (AudioHalVersionInfo) object */
@Override
public String toString() {
return toString(mHalVersion.type, mHalVersion.major, mHalVersion.minor);
}
/**
* Compare two HAL versions by comparing their index in VERSIONS.
*
* <p>Normally all AudioHalVersionInfo object to compare should exist in the VERSIONS list. If
* both candidates exist in the VERSIONS list, smaller index means newer. Any candidate not
* exist in the VERSIONS list will be considered to be oldest version.
*
* @return 0 if the HAL version is the same as the other HAL version. Positive if the HAL
* version is newer than the other HAL version. Negative if the HAL version is older than
* the other version.
*/
@Override
public int compareTo(@NonNull AudioHalVersionInfo other) {
int indexOther = VERSIONS.indexOf(other);
int indexThis = VERSIONS.indexOf(this);
if (indexThis < 0 || indexOther < 0) {
return indexThis - indexOther;
}
return indexOther - indexThis;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull android.os.Parcel out, int flag) {
out.writeTypedObject(mHalVersion, flag);
}
public static final @NonNull Parcelable.Creator<AudioHalVersionInfo> CREATOR =
new Parcelable.Creator<AudioHalVersionInfo>() {
@Override
public AudioHalVersionInfo createFromParcel(@NonNull Parcel in) {
return new AudioHalVersionInfo(in);
}
@Override
public AudioHalVersionInfo[] newArray(int size) {
return new AudioHalVersionInfo[size];
}
};
}