Add CarPowerManager.getPowerState()
Allow users to query the current power state.
This requires Car.PERMISSION_CAR_POWER
Fixes: 154360508
Test: Adding testGetPowerState to the in-progress CarPowerManagerTest
Change-Id: If14bba17155410c8a6150d56345d8fc3146d7fba
diff --git a/car-lib/native/include/CarPowerManager.h b/car-lib/native/include/CarPowerManager.h
index 57bbd50..b02c886 100644
--- a/car-lib/native/include/CarPowerManager.h
+++ b/car-lib/native/include/CarPowerManager.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef CAR_POWER_MANAGER
-#define CAR_POWER_MANAGER
+#ifndef CAR_LIB_NATIVE_INCLUDE_CARPOWERMANAGER_H_
+#define CAR_LIB_NATIVE_INCLUDE_CARPOWERMANAGER_H_
#include <binder/Status.h>
#include <utils/RefBase.h>
@@ -38,6 +38,7 @@
// NOTE: The entries in this enum must match the ones in CarPowerStateListener located in
// packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerManager.java
enum class State {
+ kInvalid = 0,
kWaitForVhal = 1,
kSuspendEnter = 2,
kSuspendExit = 3,
@@ -46,8 +47,7 @@
kShutdownPrepare = 7,
kShutdownCancelled = 8,
-
- kFirst = kWaitForVhal,
+ kFirst = kInvalid,
kLast = kShutdownCancelled,
};
@@ -74,7 +74,7 @@
private:
class CarPowerStateListener final : public BnCarPowerStateListener {
public:
- explicit CarPowerStateListener(CarPowerManager* parent) : mParent(parent) {};
+ explicit CarPowerStateListener(CarPowerManager* parent) : mParent(parent) {}
Status onStateChanged(int state) override {
sp<CarPowerManager> parent = mParent;
@@ -102,9 +102,9 @@
sp<CarPowerStateListener> mListenerToService;
};
-} // namespace power
-} // namespace hardware
-} // namespace car
-} // namespace android
+} // namespace power
+} // namespace hardware
+} // namespace car
+} // namespace android
-#endif // CAR_POWER_MANAGER
+#endif // CAR_LIB_NATIVE_INCLUDE_CARPOWERMANAGER_H_
diff --git a/car-lib/src/android/car/hardware/power/CarPowerManager.java b/car-lib/src/android/car/hardware/power/CarPowerManager.java
index 7c2a323..d9ff33d 100644
--- a/car-lib/src/android/car/hardware/power/CarPowerManager.java
+++ b/car-lib/src/android/car/hardware/power/CarPowerManager.java
@@ -16,6 +16,7 @@
package android.car.hardware.power;
+import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.car.Car;
import android.car.CarManagerBase;
@@ -56,10 +57,15 @@
public interface CarPowerStateListener {
/**
* onStateChanged() states. These definitions must match the ones located in the native
- * CarPowerManager: packages/services/Car/car-lib/native/CarPowerManager/CarPowerManager.h
+ * CarPowerManager: packages/services/Car/car-lib/native/include/CarPowerManager.h
*/
/**
+ * The current power state is unavailable, unknown, or invalid
+ * @hide
+ */
+ int INVALID = 0;
+ /**
* Android is up, but vendor is controlling the audio / display
* @hide
*/
@@ -162,6 +168,20 @@
}
/**
+ * Returns the current power state
+ * @return One of the values defined in {@link CarPowerStateListener}
+ * @hide
+ */
+ @RequiresPermission(Car.PERMISSION_CAR_POWER)
+ public int getPowerState() {
+ try {
+ return mService.getPowerState();
+ } catch (RemoteException e) {
+ return handleRemoteExceptionFromCarService(e, CarPowerStateListener.INVALID);
+ }
+ }
+
+ /**
* Sets a listener to receive power state changes. Only one listener may be set at a
* time for an instance of CarPowerManager.
* The listener is assumed to completely handle the 'onStateChanged' before returning.
diff --git a/car-lib/src/android/car/hardware/power/ICarPower.aidl b/car-lib/src/android/car/hardware/power/ICarPower.aidl
index 581e736..505b075 100644
--- a/car-lib/src/android/car/hardware/power/ICarPower.aidl
+++ b/car-lib/src/android/car/hardware/power/ICarPower.aidl
@@ -31,4 +31,6 @@
void scheduleNextWakeupTime(int seconds) = 4;
void registerListenerWithCompletion(in ICarPowerStateListener listener) = 5;
+
+ int getPowerState() = 6;
}
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/CarPowerManagementService.java
index b2331ca..d130c43 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/CarPowerManagementService.java
@@ -878,6 +878,7 @@
@Override
public void scheduleNextWakeupTime(int seconds) {
+ ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_POWER);
if (seconds < 0) {
Log.w(CarLog.TAG_POWER, "Next wake up time is negative. Ignoring!");
return;
@@ -899,6 +900,15 @@
}
}
+ @Override
+ public int getPowerState() {
+ ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_POWER);
+ synchronized (mLock) {
+ return (mCurrentState == null) ? CarPowerStateListener.INVALID
+ : mCurrentState.mCarPowerStateListenerState;
+ }
+ }
+
private void finishedImpl(IBinder binder) {
boolean allAreComplete = false;
synchronized (mLock) {