Add isPropertyAvailable() APIs to check the status of a Vehicle HAL property
This is a convenience helper, as one should be able to get the property value and
read its status directly
Bug: 74805437
Test: manual
Change-Id: Id4817ac11d9820b380e900646d63e20f5e8b3620
Merged-In: Id4817ac11d9820b380e900646d63e20f5e8b3620
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index 419613b..35a0cb2 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -613,6 +613,7 @@
method public float getFloatProperty(int, int) throws android.car.CarNotConnectedException;
method public int getIntProperty(int, int) throws android.car.CarNotConnectedException;
method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList() throws android.car.CarNotConnectedException;
+ method public boolean isPropertyAvailable(int, int) throws android.car.CarNotConnectedException;
method public static boolean isZonedProperty(int);
method public synchronized void registerCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback) throws android.car.CarNotConnectedException;
method public void setBooleanProperty(int, int, boolean) throws android.car.CarNotConnectedException;
diff --git a/car-lib/src/android/car/hardware/CarPropertyValue.java b/car-lib/src/android/car/hardware/CarPropertyValue.java
index cc32146..b54ac4c 100644
--- a/car-lib/src/android/car/hardware/CarPropertyValue.java
+++ b/car-lib/src/android/car/hardware/CarPropertyValue.java
@@ -18,10 +18,13 @@
import static java.lang.Integer.toHexString;
+import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.nio.charset.Charset;
/**
@@ -34,7 +37,6 @@
*/
@SystemApi
public class CarPropertyValue<T> implements Parcelable {
-
private final static Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private final int mPropertyId;
@@ -43,6 +45,24 @@
private final long mTimestamp;
private final T mValue;
+ /** @hide */
+ @IntDef({
+ STATUS_AVAILABLE,
+ STATUS_UNAVAILABLE,
+ STATUS_ERROR
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface PropertyStatus {}
+
+ /** @hide */
+ public static final int STATUS_AVAILABLE = 0;
+
+ /** @hide */
+ public static final int STATUS_UNAVAILABLE = 1;
+
+ /** @hide */
+ public static final int STATUS_ERROR = 2;
+
public CarPropertyValue(int propertyId, int areaId, T value) {
this(propertyId, areaId, 0, 0, value);
}
@@ -124,7 +144,7 @@
return mAreaId;
}
- public int getStatus() {
+ public @PropertyStatus int getStatus() {
return mStatus;
}
diff --git a/car-lib/src/android/car/hardware/hvac/CarHvacManager.java b/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
index 16d6bbc..bfad379 100644
--- a/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
+++ b/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
@@ -341,6 +341,15 @@
}
/**
+ * Check whether a given property is available for use by Car Hvac Manager
+ * @return true if the property is AVAILABLE, false otherwise
+ */
+ public boolean isPropertyAvailable(@PropertyId int propertyId, int area)
+ throws CarNotConnectedException {
+ return mMgr.isPropertyAvailable(propertyId, area);
+ }
+
+ /**
* Get value of boolean property
* @param propertyId
* @param area
diff --git a/car-lib/src/android/car/hardware/property/CarPropertyManagerBase.java b/car-lib/src/android/car/hardware/property/CarPropertyManagerBase.java
index c666bc2..96ea077 100644
--- a/car-lib/src/android/car/hardware/property/CarPropertyManagerBase.java
+++ b/car-lib/src/android/car/hardware/property/CarPropertyManagerBase.java
@@ -163,6 +163,18 @@
}
}
+ public boolean isPropertyAvailable(int propId, int area) throws CarNotConnectedException {
+ try {
+ CarPropertyValue propValue = mService.getProperty(propId, area);
+ return (propValue != null) &&
+ (propValue.getStatus() == CarPropertyValue.STATUS_AVAILABLE);
+ } catch (RemoteException e) {
+ Log.e(mTag, "isPropertyAvailable failed with " + e.toString()
+ + ", propId: 0x" + toHexString(propId) + ", area: 0x" + toHexString(area), e);
+ throw new CarNotConnectedException(e);
+ }
+ }
+
/**
* Returns value of a bool property
*
diff --git a/car-support-lib/proguard-release.flags b/car-support-lib/proguard-release.flags
index 1322b74..332b259 100644
--- a/car-support-lib/proguard-release.flags
+++ b/car-support-lib/proguard-release.flags
@@ -749,6 +749,7 @@
public void finishAndRemoveTask();
public void finishFromChild(android.app.Activity);
public android.app.ActionBar getActionBar();
+ public android.app.ActivityThread getActivityThread();
public android.os.IBinder getActivityToken();
public android.app.Application getApplication();
public android.view.autofill.AutofillManager$AutofillClient getAutofillClient();
@@ -1489,13 +1490,14 @@
}
-keep class android.app.ActivityManager$TaskSnapshot {
- <init>(android.graphics.GraphicBuffer, int, android.graphics.Rect, boolean, float);
+ <init>(android.graphics.GraphicBuffer, int, android.graphics.Rect, boolean, float, boolean);
public int describeContents();
public android.graphics.Rect getContentInsets();
public int getOrientation();
public float getScale();
public android.graphics.GraphicBuffer getSnapshot();
+ public boolean isRealSnapshot();
public boolean isReducedResolution();
public java.lang.String toString();
public void writeToParcel(android.os.Parcel, int);
@@ -1665,7 +1667,7 @@
public android.app.Activity handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions);
public void handleMultiWindowModeChanged(android.os.IBinder, boolean, android.content.res.Configuration);
public void handleNewIntent(android.os.IBinder, java.util.List, boolean);
- public void handlePauseActivity(android.os.IBinder, boolean, boolean, int, boolean, android.app.servertransaction.PendingTransactionActions, java.lang.String);
+ public void handlePauseActivity(android.os.IBinder, boolean, boolean, int, android.app.servertransaction.PendingTransactionActions, java.lang.String);
public void handlePictureInPictureModeChanged(android.os.IBinder, boolean, android.content.res.Configuration);
public void handleRelaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions);
public void handleRequestAssistContextExtras(android.app.ActivityThread$RequestAssistContextExtras);
@@ -1841,6 +1843,7 @@
public static int permissionToOpCode(java.lang.String);
public void resetAllModes();
public void setMode(int, int, java.lang.String, int);
+ public void setMode(java.lang.String, int, java.lang.String, int);
public void setRestriction(int, int, int, java.lang.String[]);
public void setUidMode(int, int, int);
public void setUidMode(java.lang.String, int, int);
@@ -2070,6 +2073,7 @@
<init>();
public android.view.autofill.AutofillManager$AutofillClient getAutofillClient();
+ public static java.lang.String getProcessName();
public void onConfigurationChanged(android.content.res.Configuration);
public void onCreate();
public void onLowMemory();
@@ -2215,7 +2219,7 @@
public abstract android.app.Activity handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions);
public abstract void handleMultiWindowModeChanged(android.os.IBinder, boolean, android.content.res.Configuration);
public abstract void handleNewIntent(android.os.IBinder, java.util.List, boolean);
- public abstract void handlePauseActivity(android.os.IBinder, boolean, boolean, int, boolean, android.app.servertransaction.PendingTransactionActions, java.lang.String);
+ public abstract void handlePauseActivity(android.os.IBinder, boolean, boolean, int, android.app.servertransaction.PendingTransactionActions, java.lang.String);
public abstract void handlePictureInPictureModeChanged(android.os.IBinder, boolean, android.content.res.Configuration);
public abstract void handleRelaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions);
public abstract void handleResumeActivity(android.os.IBinder, boolean, boolean, java.lang.String);
@@ -4355,6 +4359,7 @@
public int describeContents();
public void dump(boolean);
public void ensureData();
+ public void ensureDataForAutofill();
public long getAcquisitionEndTime();
public long getAcquisitionStartTime();
public android.content.ComponentName getActivityComponent();
@@ -4984,7 +4989,6 @@
public void registerContentObserver(android.net.Uri, boolean, android.database.ContentObserver);
public void registerContentObserver(android.net.Uri, boolean, android.database.ContentObserver, int);
public void releasePersistableUriPermission(android.net.Uri, int);
- public void releasePersistableUriPermission(java.lang.String, android.net.Uri, int);
public abstract boolean releaseProvider(android.content.IContentProvider);
public abstract boolean releaseUnstableProvider(android.content.IContentProvider);
public static void removePeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle);
@@ -5921,6 +5925,7 @@
public static java.lang.String ACTION_ASSIST;
public static java.lang.String ACTION_ATTACH_DATA;
public static java.lang.String ACTION_BATTERY_CHANGED;
+ public static java.lang.String ACTION_BATTERY_LEVEL_CHANGED;
public static java.lang.String ACTION_BATTERY_LOW;
public static java.lang.String ACTION_BATTERY_OKAY;
public static java.lang.String ACTION_BOOT_COMPLETED;
@@ -8896,6 +8901,22 @@
}
+-keep class android.content.res.ApkAssets {
+
+ protected void finalize();
+ public java.lang.String getAssetPath();
+ public boolean isUpToDate();
+ public static android.content.res.ApkAssets loadFromFd(java.io.FileDescriptor, java.lang.String, boolean, boolean);
+ public static android.content.res.ApkAssets loadFromPath(java.lang.String);
+ public static android.content.res.ApkAssets loadFromPath(java.lang.String, boolean);
+ public static android.content.res.ApkAssets loadFromPath(java.lang.String, boolean, boolean);
+ public static android.content.res.ApkAssets loadOverlayFromPath(java.lang.String, boolean);
+ public android.content.res.XmlResourceParser openXml(java.lang.String);
+ public java.lang.String toString();
+
+
+}
+
-keep class android.content.res.AssetFileDescriptor {
<init>(android.os.ParcelFileDescriptor, long, long);
<init>(android.os.ParcelFileDescriptor, long, long, android.os.Bundle);
@@ -8921,22 +8942,19 @@
-keep class android.content.res.AssetManager {
<init>();
- public int addAssetFd(java.io.FileDescriptor, java.lang.String);
public int addAssetPath(java.lang.String);
public int addAssetPathAsSharedLibrary(java.lang.String);
- public int[] addAssetPaths(java.lang.String[]);
public int addOverlayPath(java.lang.String);
- public int addOverlayPathNative(java.lang.String);
public void close();
protected void finalize();
+ public int findCookieForPath(java.lang.String);
+ public android.content.res.ApkAssets[] getApkAssets();
public static java.lang.String getAssetAllocations();
public android.util.SparseArray getAssignedPackageIdentifiers();
- public java.lang.String getCookieName(int);
public static int getGlobalAssetCount();
public static int getGlobalAssetManagerCount();
public java.lang.String[] getLocales();
public java.lang.String[] getNonSystemLocales();
- public android.content.res.Configuration[] getSizeConfigurations();
public static android.content.res.AssetManager getSystem();
public boolean isUpToDate();
public java.lang.String[] list(java.lang.String);
@@ -8951,6 +8969,7 @@
public android.content.res.AssetFileDescriptor openNonAssetFd(int, java.lang.String);
public android.content.res.XmlResourceParser openXmlResourceParser(java.lang.String);
public android.content.res.XmlResourceParser openXmlResourceParser(int, java.lang.String);
+ public void setApkAssets(android.content.res.ApkAssets[], boolean);
public void setConfiguration(int, int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
@@ -9772,6 +9791,7 @@
public static int CONFLICT_REPLACE;
public static int CONFLICT_ROLLBACK;
public static int CREATE_IF_NECESSARY;
+ public static int DISABLE_COMPATIBILITY_WAL;
public static int ENABLE_WRITE_AHEAD_LOGGING;
public static int MAX_SQL_CACHE_SIZE;
public static int NO_LOCALIZED_COLLATORS;
@@ -9850,7 +9870,6 @@
public int openFlags;
public java.lang.String path;
public java.lang.String syncMode;
- public boolean useCompatibilityWal;
}
-keep class android.database.sqlite.SQLiteDebug {
@@ -10546,7 +10565,6 @@
public boolean addFont(java.lang.String, int, android.graphics.fonts.FontVariationAxis[], int, int);
public boolean addFontFromAssetManager(android.content.res.AssetManager, java.lang.String, int, boolean, int, int, int, android.graphics.fonts.FontVariationAxis[]);
public boolean addFontFromBuffer(java.nio.ByteBuffer, int, android.graphics.fonts.FontVariationAxis[], int, int);
- protected void finalize();
public boolean freeze();
@@ -11451,7 +11469,6 @@
public static android.graphics.Typeface createFromTypefaceWithVariation(android.graphics.Typeface, java.util.List);
public static android.graphics.Typeface defaultFromStyle(int);
public boolean equals(java.lang.Object);
- protected void finalize();
public static android.graphics.Typeface findFromCache(android.content.res.AssetManager, java.lang.String);
public int getStyle();
public int getWeight();
@@ -12052,9 +12069,10 @@
public static int[] SDK_USAGES;
public static int SUPPRESSIBLE_ALARM;
public static int SUPPRESSIBLE_CALL;
- public static int SUPPRESSIBLE_MEDIA_SYSTEM_OTHER;
+ public static int SUPPRESSIBLE_MEDIA;
public static int SUPPRESSIBLE_NEVER;
public static int SUPPRESSIBLE_NOTIFICATION;
+ public static int SUPPRESSIBLE_SYSTEM;
public static android.util.SparseIntArray SUPPRESSIBLE_USAGES;
public static int USAGE_ALARM;
public static int USAGE_ASSISTANCE_ACCESSIBILITY;
@@ -16073,16 +16091,14 @@
}
-keep class android.view.DisplayCutout {
- <init>(android.graphics.Rect, android.graphics.Region, android.util.Size);
+ <init>(android.graphics.Rect, java.util.List);
- public android.view.DisplayCutout calculateRelativeTo(android.graphics.Rect);
- public android.view.DisplayCutout computeSafeInsets(int, int);
public boolean equals(java.lang.Object);
public static android.view.DisplayCutout fromBoundingRect(int, int, int, int);
public static android.view.DisplayCutout fromBounds(android.graphics.Path);
- public static android.view.DisplayCutout fromResources(android.content.res.Resources, int);
- public static android.view.DisplayCutout fromSpec(java.lang.String, int, float);
- public android.graphics.Rect getBoundingRect();
+ public static android.view.DisplayCutout fromResources(android.content.res.Resources, int, int);
+ public static android.view.DisplayCutout fromSpec(java.lang.String, int, int, float);
+ public java.util.List getBoundingRects();
public android.graphics.Region getBounds();
public int getSafeInsetBottom();
public int getSafeInsetLeft();
@@ -16091,7 +16107,9 @@
public android.graphics.Rect getSafeInsets();
public int hashCode();
public android.view.DisplayCutout inset(int, int, int, int);
+ public boolean isBoundsEmpty();
public boolean isEmpty();
+ public android.view.DisplayCutout replaceSafeInsets(android.graphics.Rect);
public java.lang.String toString();
public void writeToProto(android.util.proto.ProtoOutputStream, long);
@@ -16295,6 +16313,7 @@
public abstract void finish(boolean);
public abstract android.app.ActivityManager$TaskSnapshot screenshotTask(int);
+ public abstract void setAnimationTargetsBehindSystemBars(boolean);
public abstract void setInputConsumerEnabled(boolean);
@@ -17658,9 +17677,11 @@
<init>(android.os.Parcel);
public int describeContents();
+ public int getCallingPid();
public long getDuration();
public android.view.IRemoteAnimationRunner getRunner();
public long getStatusBarTransitionDelay();
+ public void setCallingPid(int);
public void writeToParcel(android.os.Parcel, int);
@@ -17671,10 +17692,12 @@
<init>();
<init>(android.os.Parcel);
+ public void addRemoteAnimation(int, int, android.view.RemoteAnimationAdapter);
public void addRemoteAnimation(int, android.view.RemoteAnimationAdapter);
public int describeContents();
- public android.view.RemoteAnimationAdapter getAdapter(int);
- public boolean hasTransition(int);
+ public android.view.RemoteAnimationAdapter getAdapter(int, android.util.ArraySet);
+ public boolean hasTransition(int, android.util.ArraySet);
+ public void setCallingPid(int);
public void writeToParcel(android.os.Parcel, int);
@@ -17682,11 +17705,13 @@
}
-keep class android.view.RemoteAnimationTarget {
- <init>(int, int, android.view.SurfaceControl, boolean, android.graphics.Rect, android.graphics.Rect, int, android.graphics.Point, android.graphics.Rect, android.app.WindowConfiguration);
+ <init>(int, int, android.view.SurfaceControl, boolean, android.graphics.Rect, android.graphics.Rect, int, android.graphics.Point, android.graphics.Rect, android.app.WindowConfiguration, boolean);
<init>(android.os.Parcel);
public int describeContents();
+ public void dump(java.io.PrintWriter, java.lang.String);
public void writeToParcel(android.os.Parcel, int);
+ public void writeToProto(android.util.proto.ProtoOutputStream, long);
public static android.os.Parcelable$Creator CREATOR;
@@ -17694,6 +17719,7 @@
public static int MODE_OPENING;
public android.graphics.Rect clipRect;
public android.graphics.Rect contentInsets;
+ public boolean isNotInRecents;
public boolean isTranslucent;
public android.view.SurfaceControl leash;
public int mode;
@@ -17871,6 +17897,7 @@
public boolean isValid();
public android.graphics.Canvas lockCanvas(android.graphics.Rect);
public android.graphics.Canvas lockHardwareCanvas();
+ public android.graphics.Canvas lockHardwareWideColorGamutCanvas();
public void readFromParcel(android.os.Parcel);
public void release();
public static java.lang.String rotationToString(int);
@@ -18115,7 +18142,6 @@
public void setResizeBackgroundColor(int);
public void setSecure(boolean);
public void setVisibility(int);
- public void setWindowType(int);
public void setZOrderMediaOverlay(boolean);
public void setZOrderOnTop(boolean);
public void surfacePositionLost_uiRtSync(long);
@@ -20700,6 +20726,7 @@
public static int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
public static int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
public static int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
+ public static int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
public static int MEMORY_TYPE_CHANGED;
public static int MEMORY_TYPE_GPU;
public static int MEMORY_TYPE_HARDWARE;
@@ -21196,7 +21223,7 @@
public static android.view.accessibility.AccessibilityNodeInfo$AccessibilityAction ACTION_SET_TEXT;
public static android.view.accessibility.AccessibilityNodeInfo$AccessibilityAction ACTION_SHOW_ON_SCREEN;
public static android.view.accessibility.AccessibilityNodeInfo$AccessibilityAction ACTION_SHOW_TOOLTIP;
- public int mSerializationFlag;
+ public long mSerializationFlag;
public static android.util.ArraySet sStandardActions;
}
@@ -21888,7 +21915,6 @@
public abstract boolean performEditorAction(int);
public abstract boolean performPrivateCommand(java.lang.String, android.os.Bundle);
public abstract boolean reportFullscreenMode(boolean);
- public void reportLanguageHint(android.os.LocaleList);
public abstract boolean requestCursorUpdates(int);
public abstract boolean sendKeyEvent(android.view.KeyEvent);
public abstract boolean setComposingRegion(int, int);