diff options
author | Steve Paik <spaik@google.com> | 2018-02-12 10:54:51 -0800 |
---|---|---|
committer | Steve Paik <spaik@google.com> | 2018-02-20 20:18:25 -0800 |
commit | 388d77770e00eadde4e45df95678f1468ce6fbc8 (patch) | |
tree | ee4d0fbd709463ab6c8203b953422eb4c57b6f4a /tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink | |
parent | 7f657e738447297ff692ae8b3704c0f4b5c42e33 (diff) | |
download | Car-388d77770e00eadde4e45df95678f1468ce6fbc8.tar.gz |
Add CarPowerManager
- Add Java API for apps to call into power manager
- Update EmbeddedKitchenSink to test API
- Update CarPowrManagementService to handle binder interface
Bug: 32061842
Test: EmbeddedKitchenSink
Change-Id: I15f5c25262507d4a6d6e5f381643f3e584f1843e
Diffstat (limited to 'tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink')
2 files changed, 99 insertions, 25 deletions
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java index 2748ece795..bfc90d1be6 100644 --- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java +++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java @@ -16,17 +16,8 @@ package com.google.android.car.kitchensink; -import android.car.hardware.hvac.CarHvacManager; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.Bundle; -import android.support.car.Car; -import android.support.car.CarAppFocusManager; -import android.support.car.CarConnectionCallback; -import android.support.car.CarNotConnectedException; -import android.support.car.hardware.CarSensorManager; -import android.support.v4.app.Fragment; -import android.util.Log; +import java.util.ArrayList; +import java.util.List; import com.google.android.car.kitchensink.alertdialog.AlertDialogTestFragment; import com.google.android.car.kitchensink.assistant.CarAssistantFragment; @@ -50,8 +41,18 @@ import com.google.android.car.kitchensink.touch.TouchTestFragment; import com.google.android.car.kitchensink.vhal.VehicleHalFragment; import com.google.android.car.kitchensink.volume.VolumeTestFragment; -import java.util.ArrayList; -import java.util.List; +import android.car.hardware.hvac.CarHvacManager; +import android.car.hardware.power.CarPowerManager; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.car.Car; +import android.support.car.CarAppFocusManager; +import android.support.car.CarConnectionCallback; +import android.support.car.CarNotConnectedException; +import android.support.car.hardware.CarSensorManager; +import android.support.v4.app.Fragment; +import android.util.Log; import androidx.car.drawer.CarDrawerActivity; import androidx.car.drawer.CarDrawerAdapter; @@ -172,6 +173,7 @@ public class KitchenSinkActivity extends CarDrawerActivity { }; private Car mCarApi; private CarHvacManager mHvacManager; + private CarPowerManager mPowerManager; private CarSensorManager mCarSensorManager; private CarAppFocusManager mCarAppFocusManager; @@ -187,6 +189,10 @@ public class KitchenSinkActivity extends CarDrawerActivity { return mHvacManager; } + public CarPowerManager getPowerManager() { + return mPowerManager; + } + @Override protected CarDrawerAdapter getRootAdapter() { return new DrawerAdapter(); @@ -260,6 +266,8 @@ public class KitchenSinkActivity extends CarDrawerActivity { Log.d(TAG, "Connected to Car Service"); try { mHvacManager = (CarHvacManager) mCarApi.getCarManager(android.car.Car.HVAC_SERVICE); + mPowerManager = (CarPowerManager) mCarApi.getCarManager( + android.car.Car.POWER_SERVICE); mCarSensorManager = (CarSensorManager) mCarApi.getCarManager(Car.SENSOR_SERVICE); mCarSensorManager.addListener(mListener, CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java index b90f02104a..4dd7eeff11 100644 --- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java +++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java @@ -17,10 +17,15 @@ package com.google.android.car.kitchensink.power; import static java.lang.Integer.toHexString; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executor; import com.google.android.car.kitchensink.KitchenSinkActivity; import com.google.android.car.kitchensink.R; +import android.car.CarNotConnectedException; +import android.car.hardware.power.CarPowerManager; import android.content.Context; import android.os.Bundle; import android.os.PowerManager; @@ -31,23 +36,67 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; - -import java.util.ArrayList; -import java.util.List; +import android.widget.TextView; +import android.widget.Toast; public class PowerTestFragment extends Fragment { private final boolean DBG = false; private final String TAG = "PowerTestFragment"; + private CarPowerManager mCarPowerManager; + private TextView mTvBootReason; + private Executor mExecutor; + + private class ThreadPerTaskExecutor implements Executor { + public void execute(Runnable r) { + new Thread(r).start(); + } + } + + private final CarPowerManager.CarPowerStateListener mPowerListener = + new CarPowerManager.CarPowerStateListener () { + @Override + public void onStateChanged(int state) { + Log.i(TAG, "onStateChanged() state = " + state); + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + mCarPowerManager = ((KitchenSinkActivity)getActivity()).getPowerManager(); + mExecutor = new ThreadPerTaskExecutor(); + super.onCreate(savedInstanceState); + try { + mCarPowerManager.setListener(mPowerListener, mExecutor); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Car is not connected!"); + } catch (IllegalStateException e) { + Log.e(TAG, "CarPowerManager listener was not cleared"); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + mCarPowerManager.clearListener(); + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) { View v = inflater.inflate(R.layout.power_test, container, false); - Button b = v.findViewById(R.id.btnPwrShutdown); - b.setOnClickListener(this::shutdown); + Button b = v.findViewById(R.id.btnPwrGetBootReason); + b.setOnClickListener(this::getBootReasonBtn); + + b = v.findViewById(R.id.btnPwrRequestShutdown); + b.setOnClickListener(this::requestShutdownBtn); + + b = v.findViewById(R.id.btnPwrShutdown); + b.setOnClickListener(this::shutdownBtn); b = v.findViewById(R.id.btnPwrSleep); - b.setOnClickListener(this::sleep); + b.setOnClickListener(this::sleepBtn); + + mTvBootReason = v.findViewById(R.id.tvPowerBootReason); if(DBG) { Log.d(TAG, "Starting PowerTestFragment"); @@ -56,23 +105,40 @@ public class PowerTestFragment extends Fragment { return v; } - private void shutdown(View v) { + private void getBootReasonBtn(View v) { + try { + int bootReason = mCarPowerManager.getBootReason(); + mTvBootReason.setText(String.valueOf(bootReason)); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Failed to getBootReason()", e); + } + } + + private void requestShutdownBtn(View v) { + try { + mCarPowerManager.requestShutdownOnNextSuspend(); + } catch (CarNotConnectedException e) { + Log.e(TAG, "Failed to set requestShutdownOnNextSuspend()", e); + } + } + + private void shutdownBtn(View v) { if(DBG) { Log.d(TAG, "Calling shutdown method"); } - PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE); pm.shutdown(/* confirm */ false, /* reason */ null, /* wait */ false); Log.d(TAG, "shutdown called!"); } - private void sleep(View v) { - // TBD + private void sleepBtn(View v) { if(DBG) { Log.d(TAG, "Calling sleep method"); } - + // NOTE: This doesn't really work to sleep the device. Actual sleep is implemented via + // SystemInterface via libsuspend::force_suspend() PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE); - pm.goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); + pm.goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, + PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); } } |