summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2021-06-18 12:24:54 -0700
committerXin Li <delphij@google.com>2021-06-18 12:24:54 -0700
commitf9cc2a3b3ae82ee117a5a437823dd78e9d28a719 (patch)
tree2f51e316a4c9d781dfeede010c04e67cda6ea8c7
parent73820f661ba4b3df3eff53e8beabff58795cf7ef (diff)
parent1e1532ab7b3d14744928b1e772b2e8c0b2d3b79f (diff)
downloadsetupwizard-android-s-beta-5.tar.gz
Bug: 190855093 Merged-In: Ie71ce459b10d69c59704a4b9e5fda503c89c5ecc Change-Id: Ife4223f5821408b31315c3c3343afc52e97a51dc
-rw-r--r--library/main/res/values-w1240dp-land/config.xml (renamed from library/main/res/values-w1280dp-land/config.xml)0
-rw-r--r--library/main/res/values-w1240dp-land/dimens.xml (renamed from library/main/res/values-w1280dp-land/dimens.xml)2
-rw-r--r--library/main/res/values-w1280dp-port/dimens.xml (renamed from library/main/res/values-w1280dp/dimens.xml)0
-rw-r--r--library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java2
-rw-r--r--library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java106
-rw-r--r--library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java19
6 files changed, 113 insertions, 16 deletions
diff --git a/library/main/res/values-w1280dp-land/config.xml b/library/main/res/values-w1240dp-land/config.xml
index 98343f3..98343f3 100644
--- a/library/main/res/values-w1280dp-land/config.xml
+++ b/library/main/res/values-w1240dp-land/config.xml
diff --git a/library/main/res/values-w1280dp-land/dimens.xml b/library/main/res/values-w1240dp-land/dimens.xml
index 1ed491e..257d03a 100644
--- a/library/main/res/values-w1280dp-land/dimens.xml
+++ b/library/main/res/values-w1240dp-land/dimens.xml
@@ -16,7 +16,7 @@
-->
<resources>
- <dimen name="suw_page_margin_horizontal">80dp</dimen>
+ <dimen name="suw_page_margin_horizontal">64dp</dimen>
<!-- The column inner padding of a two-column layout -->
<dimen name="suw_column_inner_padding_horizontal">48dp</dimen>
</resources> \ No newline at end of file
diff --git a/library/main/res/values-w1280dp/dimens.xml b/library/main/res/values-w1280dp-port/dimens.xml
index 1a3d98e..1a3d98e 100644
--- a/library/main/res/values-w1280dp/dimens.xml
+++ b/library/main/res/values-w1280dp-port/dimens.xml
diff --git a/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java b/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java
index e110148..ebf0d35 100644
--- a/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java
+++ b/library/main/src/com/android/car/setupwizardlib/summary/PartnerSummaryActionsCollector.java
@@ -310,7 +310,7 @@ public class PartnerSummaryActionsCollector {
if (deferredAction != null) {
deferredActions.add(deferredAction);
}
- } catch (NullPointerException e) {
+ } catch (NullPointerException | IllegalArgumentException e) {
Log.e(
TAG,
"Unable to load the completion or config state for deferred action: "
diff --git a/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java b/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java
index affdd7c..c58e352 100644
--- a/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java
+++ b/library/main/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitor.java
@@ -18,8 +18,13 @@ package com.android.car.setupwizardlib.util;
import android.car.Car;
import android.car.CarNotConnectedException;
+import android.car.VehicleAreaType;
+import android.car.VehicleGear;
+import android.car.VehiclePropertyIds;
import android.car.drivingstate.CarUxRestrictions;
import android.car.drivingstate.CarUxRestrictionsManager;
+import android.car.hardware.CarPropertyValue;
+import android.car.hardware.property.CarPropertyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -43,11 +48,15 @@ public class CarDrivingStateMonitor implements
public static final String EXIT_BROADCAST_ACTION =
"com.android.car.setupwizardlib.driving_exit";
+ public static final String INTENT_EXTRA_REASON = "reason";
+ public static final String REASON_GEAR_REVERSAL = "gear_reversal";
+
private static final String TAG = "CarDrivingStateMonitor";
private static final long DISCONNECT_DELAY_MS = 700;
private Car mCar;
private CarUxRestrictionsManager mRestrictionsManager;
+ private CarPropertyManager mCarPropertyManager;
// Need to track the number of times the monitor is started so a single stopMonitor call does
// not override them all.
private int mMonitorStartedCount;
@@ -61,6 +70,25 @@ public class CarDrivingStateMonitor implements
@VisibleForTesting
final Runnable mDisconnectRunnable = this::disconnectCarMonitor;
+ private final CarPropertyManager.CarPropertyEventCallback mGearChangeCallback =
+ new CarPropertyManager.CarPropertyEventCallback() {
+ @SuppressWarnings("rawtypes")
+ @Override
+ public void onChangeEvent(CarPropertyValue value) {
+ switch (value.getPropertyId()) {
+ case VehiclePropertyIds.GEAR_SELECTION:
+ if ((Integer) value.getValue() == VehicleGear.GEAR_REVERSE) {
+ Log.v(TAG, "Gear has reversed, exiting SetupWizard.");
+ broadcastGearReversal();
+ }
+ break;
+ }
+ }
+
+ @Override
+ public void onErrorEvent(int propertyId, int zone) {}
+ };
+
private CarDrivingStateMonitor(Context context) {
mContext = context.getApplicationContext();
}
@@ -108,18 +136,9 @@ public class CarDrivingStateMonitor implements
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
try {
- mRestrictionsManager = (CarUxRestrictionsManager)
- mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
- if (mRestrictionsManager == null) {
- Log.e(TAG, "Unable to get CarUxRestrictionsManager");
- return;
- }
- onUxRestrictionsChanged(mRestrictionsManager.getCurrentCarUxRestrictions());
- mRestrictionsManager.registerListener(CarDrivingStateMonitor.this);
- if (mStopMonitorAfterUxCheck) {
- mStopMonitorAfterUxCheck = false;
- stopMonitor();
- }
+ registerPropertyManager();
+ registerRestrictionsManager();
+
} catch (CarNotConnectedException e) {
Log.e(TAG, "Car not connected", e);
}
@@ -181,6 +200,10 @@ public class CarDrivingStateMonitor implements
mRestrictionsManager.unregisterListener();
mRestrictionsManager = null;
}
+ if (mCarPropertyManager != null) {
+ mCarPropertyManager.unregisterCallback(mGearChangeCallback);
+ mCarPropertyManager = null;
+ }
} catch (CarNotConnectedException e) {
Log.e(TAG, "Car not connected for unregistering listener", e);
}
@@ -225,8 +248,18 @@ public class CarDrivingStateMonitor implements
}
private boolean checkIsSetupRestricted(@Nullable CarUxRestrictions restrictionInfo) {
- return restrictionInfo != null && (restrictionInfo.getActiveRestrictions()
- & CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP) != 0;
+ if (restrictionInfo == null) {
+ if (isVerboseLoggable()) {
+ Log.v(TAG, "checkIsSetupRestricted restrictionInfo is null, returning false");
+ }
+ return false;
+ }
+ int activeRestrictions = restrictionInfo.getActiveRestrictions();
+ if (isVerboseLoggable()) {
+ Log.v(TAG, "activeRestrictions are " + activeRestrictions);
+ }
+ // There must be at least some restriction in place.
+ return activeRestrictions != 0;
}
@Override
@@ -275,4 +308,49 @@ public class CarDrivingStateMonitor implements
public static void replace(Context context, CarDrivingStateMonitor monitor) {
CarHelperRegistry.getRegistry(context).putHelper(CarDrivingStateMonitor.class, monitor);
}
+
+ private void registerRestrictionsManager() {
+ mRestrictionsManager = (CarUxRestrictionsManager)
+ mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
+ if (mRestrictionsManager == null) {
+ Log.e(TAG, "Unable to get CarUxRestrictionsManager");
+ return;
+ }
+ onUxRestrictionsChanged(mRestrictionsManager.getCurrentCarUxRestrictions());
+ mRestrictionsManager.registerListener(CarDrivingStateMonitor.this);
+ if (mStopMonitorAfterUxCheck) {
+ mStopMonitorAfterUxCheck = false;
+ stopMonitor();
+ }
+ }
+
+ private void registerPropertyManager() {
+ mCarPropertyManager = (CarPropertyManager) mCar.getCarManager(Car.PROPERTY_SERVICE);
+ if (mCarPropertyManager == null) {
+ Log.e(TAG, "Unable to get CarPropertyManager");
+ return;
+ }
+ mCarPropertyManager.registerCallback(
+ mGearChangeCallback, VehiclePropertyIds.GEAR_SELECTION,
+ CarPropertyManager.SENSOR_RATE_ONCHANGE);
+ CarPropertyValue<Integer> gearSelection =
+ mCarPropertyManager.getProperty(Integer.class, VehiclePropertyIds.GEAR_SELECTION,
+ VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL);
+ if (gearSelection != null
+ && gearSelection.getStatus() == CarPropertyValue.STATUS_AVAILABLE) {
+ if (gearSelection.getValue() == VehicleGear.GEAR_REVERSE) {
+ Log.v(TAG, "SetupWizard started when gear is in reverse, exiting.");
+ broadcastGearReversal();
+ }
+ } else {
+ Log.e(TAG, "GEAR_SELECTION is not available.");
+ }
+ }
+
+ private void broadcastGearReversal() {
+ Intent intent = new Intent();
+ intent.setAction(EXIT_BROADCAST_ACTION);
+ intent.putExtra(INTENT_EXTRA_REASON, REASON_GEAR_REVERSAL);
+ mContext.sendBroadcast(intent);
+ }
}
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java
index 2de6f5e..afa28f9 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarDrivingStateMonitorTest.java
@@ -127,6 +127,25 @@ public class CarDrivingStateMonitorTest extends BaseRobolectricTest {
}
@Test
+ public void testOnUxRestrictionsChangedForNonSetup_triggersExit() {
+ mCarDrivingStateMonitor.startMonitor();
+ doReturn(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO).when(mMockRestrictions)
+ .getActiveRestrictions();
+ mCarDrivingStateMonitor.onUxRestrictionsChanged(mMockRestrictions);
+ assertThat(mShadowApplication.getBroadcastIntents().get(0).getAction())
+ .isEqualTo(CarDrivingStateMonitor.EXIT_BROADCAST_ACTION);
+ }
+
+ @Test
+ public void testStartMonitorWhileDrivingForNonSetup_triggersExit() {
+ doReturn(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO).when(mMockRestrictions)
+ .getActiveRestrictions();
+ mCarDrivingStateMonitor.startMonitor();
+ assertThat(mShadowApplication.getBroadcastIntents().get(0).getAction())
+ .isEqualTo(CarDrivingStateMonitor.EXIT_BROADCAST_ACTION);
+ }
+
+ @Test
public void testStartMonitor_clearsStopMonitorRunnable() {
mCarDrivingStateMonitor.startMonitor();
ShadowCar.setIsConnected(true);