diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-06-08 07:21:08 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-06-08 07:21:08 +0000 |
commit | f02b56678700a4035d0ad8882f7d20371bb96ee2 (patch) | |
tree | 59d7dd8b4d27bee6f90ffae1f1bbba0804f5a4ae | |
parent | 577cf630e511be2bb4d9c262c238587a4300af02 (diff) | |
parent | 280eba505892cb722078f0526c10b632d1f994cf (diff) | |
download | Car-pie-release-2.tar.gz |
Snap for 4829593 from 280eba505892cb722078f0526c10b632d1f994cf to pi-releaseandroid-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r19android-vts-9.0_r18android-vts-9.0_r17android-vts-9.0_r16android-vts-9.0_r15android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-security-9.0.0_r76android-security-9.0.0_r75android-security-9.0.0_r74android-security-9.0.0_r73android-security-9.0.0_r72android-security-9.0.0_r71android-security-9.0.0_r70android-security-9.0.0_r69android-security-9.0.0_r68android-security-9.0.0_r67android-security-9.0.0_r66android-security-9.0.0_r65android-security-9.0.0_r64android-security-9.0.0_r63android-security-9.0.0_r62android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r20android-cts-9.0_r2android-cts-9.0_r19android-cts-9.0_r18android-cts-9.0_r17android-cts-9.0_r16android-cts-9.0_r15android-cts-9.0_r14android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r61android-9.0.0_r60android-9.0.0_r6android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r3android-9.0.0_r2android-9.0.0_r18android-9.0.0_r17android-9.0.0_r10android-9.0.0_r1security-pi-releasepie-vts-releasepie-security-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-releasepie-cts-release
Change-Id: Ib96b59a1b301b3a85a024c85581518a223d59b8a
10 files changed, 153 insertions, 204 deletions
diff --git a/car-lib/src/android/car/VehiclePropertyType.java b/car-lib/src/android/car/VehiclePropertyType.java new file mode 100644 index 0000000000..b236d2d643 --- /dev/null +++ b/car-lib/src/android/car/VehiclePropertyType.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2018 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.car; + +import android.annotation.IntDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + + +/** + * Value type of VehicleProperty + * @hide + */ +public class VehiclePropertyType { + public static final int STRING = 0x00100000; + public static final int BOOLEAN = 0x00200000; + public static final int INT32 = 0x00400000; + public static final int INT32_VEC = 0x00410000; + public static final int INT64 = 0x00500000; + public static final int INT64_VEC = 0x00510000; + public static final int FLOAT = 0x00600000; + public static final int FLOAT_VEC = 0x00610000; + public static final int BYTES = 0x00700000; + public static final int MIXED = 0x00e00000; + public static final int MASK = 0x00ff0000; + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + STRING, + BOOLEAN, + INT32, + INT32_VEC, + INT64, + INT64_VEC, + FLOAT, + FLOAT_VEC, + BYTES, + /** + * Any combination of scalar or vector types. The exact format must be + * provided in the description of the property. + */ + MIXED, + MASK + }) + public @interface Enum {} + private VehiclePropertyType() {} +} diff --git a/car-lib/src/android/car/hardware/CarSensorManager.java b/car-lib/src/android/car/hardware/CarSensorManager.java index f6cc8dfdbf..253660462f 100644 --- a/car-lib/src/android/car/hardware/CarSensorManager.java +++ b/car-lib/src/android/car/hardware/CarSensorManager.java @@ -24,6 +24,7 @@ import android.car.CarApiUtil; import android.car.CarLibLog; import android.car.CarManagerBase; import android.car.CarNotConnectedException; +import android.car.VehiclePropertyType; import android.car.hardware.property.CarPropertyManager; import android.content.Context; import android.os.Bundle; @@ -468,26 +469,34 @@ public final class CarSensorManager implements CarManagerBase { private CarSensorEvent createCarSensorEvent(CarPropertyValue propertyValue) { CarSensorEvent event = null; - Object o = propertyValue.getValue(); - if (o instanceof Float) { - event = new CarSensorEvent(propertyValue.getPropertyId(), - propertyValue.getTimestamp(), 1, 0, 0); - event.floatValues[0] = (float) o; - } else if (o instanceof Integer) { - event = new CarSensorEvent(propertyValue.getPropertyId(), - propertyValue.getTimestamp(), 0, 1, 0); - event.intValues[0] = (int) o; - } else if (o instanceof Boolean) { - event = new CarSensorEvent(propertyValue.getPropertyId(), - propertyValue.getTimestamp(), 0, 1, 0); - event.intValues[0] = (boolean) o ? 1 : 0; - } else if (o instanceof Long[]) { - Long[] value = (Long[]) o; - event = new CarSensorEvent(propertyValue.getPropertyId(), - propertyValue.getTimestamp(), 0, 0, value.length); - for (int i = 0; i < value.length; i++) { - event.longValues[i] = value[i]; - } + switch (propertyValue.getPropertyId() & VehiclePropertyType.MASK) { + case VehiclePropertyType.FLOAT: + event = new CarSensorEvent(propertyValue.getPropertyId(), + propertyValue.getTimestamp(), 1, 0, 0); + event.floatValues[0] = (float) propertyValue.getValue(); + break; + case VehiclePropertyType.INT32: + event = new CarSensorEvent(propertyValue.getPropertyId(), + propertyValue.getTimestamp(), 0, 1, 0); + event.intValues[0] = (int) propertyValue.getValue(); + break; + case VehiclePropertyType.BOOLEAN: + event = new CarSensorEvent(propertyValue.getPropertyId(), + propertyValue.getTimestamp(), 0, 1, 0); + event.intValues[0] = (boolean) propertyValue.getValue() ? 1 : 0; + break; + case VehiclePropertyType.INT64_VEC: + Object[] value = (Object[]) propertyValue.getValue(); + event = new CarSensorEvent(propertyValue.getPropertyId(), + propertyValue.getTimestamp(), 0, 0, value.length); + for (int i = 0; i < value.length; i++) { + event.longValues[i] = (Long) value[i]; + } + break; + default: + Log.e(TAG, "unhandled VehiclePropertyType for propId=" + + propertyValue.getPropertyId()); + break; } return event; } diff --git a/car-lib/src/android/car/media/ICarVolumeCallback.aidl b/car-lib/src/android/car/media/ICarVolumeCallback.aidl index 10a5ddc42b..8540680d0e 100644 --- a/car-lib/src/android/car/media/ICarVolumeCallback.aidl +++ b/car-lib/src/android/car/media/ICarVolumeCallback.aidl @@ -27,12 +27,12 @@ oneway interface ICarVolumeCallback { * The changed-to volume index is not included, the caller is encouraged to * get the current group volume index via CarAudioManager. */ - void onGroupVolumeChanged(int groupId); + void onGroupVolumeChanged(int groupId, int flags); /** * This is called whenever the master mute state is changed. * The changed-to master mute state is not included, the caller is encouraged to * get the current master mute state via AudioManager. */ - void onMasterMuteChanged(); + void onMasterMuteChanged(int flags); } diff --git a/car-support-lib/proguard-release.flags b/car-support-lib/proguard-release.flags index 11d6d8d9ec..91cab7ea24 100644 --- a/car-support-lib/proguard-release.flags +++ b/car-support-lib/proguard-release.flags @@ -7646,7 +7646,6 @@ public abstract java.lang.String[] setPackagesSuspendedAsUser(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String, java.lang.String, int); public abstract void setPermissionEnforced(java.lang.String, boolean); public abstract boolean setRequiredForSystemUser(java.lang.String, boolean); - public abstract boolean setSystemAppInstallState(java.lang.String, boolean, int); public abstract void setUpdateAvailable(java.lang.String, boolean); public abstract boolean shouldShowRequestPermissionRationale(java.lang.String, java.lang.String, int); public abstract void systemReady(); @@ -8590,7 +8589,6 @@ public static int MATCH_DISABLED_UNTIL_USED_COMPONENTS; public static int MATCH_EXPLICITLY_VISIBLE_ONLY; public static int MATCH_FACTORY_ONLY; - public static int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; public static int MATCH_INSTANT; public static int MATCH_KNOWN_PACKAGES; public static int MATCH_STATIC_SHARED_LIBRARIES; @@ -14031,7 +14029,6 @@ public void dump(java.io.FileDescriptor, java.lang.String[]); protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); public void dumpAsync(java.io.FileDescriptor, java.lang.String[]); - public static void dumpProxyDebugInfo(); public static void enableTracing(); public static void flushPendingCommands(); public static int getCallingPid(); diff --git a/car-support-lib/src/android/support/car/CarServiceLoaderEmbedded.java b/car-support-lib/src/android/support/car/CarServiceLoaderEmbedded.java index 3a21b1e8c5..cfd598a7ef 100644 --- a/car-support-lib/src/android/support/car/CarServiceLoaderEmbedded.java +++ b/car-support-lib/src/android/support/car/CarServiceLoaderEmbedded.java @@ -22,7 +22,6 @@ import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.support.car.content.pm.CarPackageManagerEmbedded; -import android.support.car.hardware.CarSensorManagerEmbedded; import android.support.car.media.CarAudioManagerEmbedded; import android.support.car.navigation.CarNavigationStatusManagerEmbedded; @@ -92,8 +91,6 @@ public class CarServiceLoaderEmbedded extends CarServiceLoader { switch (serviceName) { case Car.AUDIO_SERVICE: return new CarAudioManagerEmbedded(manager); - case Car.SENSOR_SERVICE: - return new CarSensorManagerEmbedded(manager, getContext()); case Car.INFO_SERVICE: return new CarInfoManagerEmbedded(manager); case Car.APP_FOCUS_SERVICE: diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml index 5477f1e04c..5212448ceb 100644 --- a/service/AndroidManifest.xml +++ b/service/AndroidManifest.xml @@ -39,8 +39,7 @@ android:description="@string/car_permission_desc_energy" /> <permission android:name="android.car.permission.CAR_IDENTIFICATION" - android:permissionGroup="android.car.permission-group.CAR_MONITORING" - android:protectionLevel="dangerous" + android:protectionLevel="system|signature" android:label="@string/car_permission_label_car_identification" android:description="@string/car_permission_desc_car_identification" /> <permission diff --git a/service/src/com/android/car/CarAudioService.java b/service/src/com/android/car/CarAudioService.java index 77f0f09606..1b7ee67dcd 100644 --- a/service/src/com/android/car/CarAudioService.java +++ b/service/src/com/android/car/CarAudioService.java @@ -138,7 +138,7 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { + " suggested usage: " + AudioAttributes.usageToString(usage)); final int groupId = getVolumeGroupIdForUsage(usage); final int currentVolume = getGroupVolume(groupId); - final int flags = AudioManager.FLAG_FROM_KEY; + final int flags = AudioManager.FLAG_FROM_KEY | AudioManager.FLAG_SHOW_UI; switch (adjustment) { case AudioManager.ADJUST_LOWER: if (currentVolume > getGroupMinVolume(groupId)) { @@ -152,15 +152,15 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { break; case AudioManager.ADJUST_MUTE: mAudioManager.setMasterMute(true, flags); - callbackMasterMuteChange(); + callbackMasterMuteChange(flags); break; case AudioManager.ADJUST_UNMUTE: mAudioManager.setMasterMute(false, flags); - callbackMasterMuteChange(); + callbackMasterMuteChange(flags); break; case AudioManager.ADJUST_TOGGLE_MUTE: mAudioManager.setMasterMute(!mAudioManager.isMasterMute(), flags); - callbackMasterMuteChange(); + callbackMasterMuteChange(flags); break; case AudioManager.ADJUST_SAME: default: @@ -185,11 +185,11 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { if (groupId == -1) { Log.w(CarLog.TAG_AUDIO, "Unknown stream type: " + streamType); } else { - callbackGroupVolumeChange(groupId); + callbackGroupVolumeChange(groupId, 0); } break; case AudioManager.MASTER_MUTE_CHANGED_ACTION: - callbackMasterMuteChange(); + callbackMasterMuteChange(0); break; } } @@ -260,7 +260,7 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { synchronized (mImplLock) { enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME); - callbackGroupVolumeChange(groupId); + callbackGroupVolumeChange(groupId, flags); // For legacy stream type based volume control if (!mUseDynamicRouting) { mAudioManager.setStreamVolume(STREAM_TYPES[groupId], index, flags); @@ -272,22 +272,22 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { } } - private void callbackGroupVolumeChange(int groupId) { + private void callbackGroupVolumeChange(int groupId, int flags) { for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback : mVolumeCallbackContainer.getInterfaces()) { try { - callback.binderInterface.onGroupVolumeChanged(groupId); + callback.binderInterface.onGroupVolumeChanged(groupId, flags); } catch (RemoteException e) { Log.e(CarLog.TAG_AUDIO, "Failed to callback onGroupVolumeChanged", e); } } } - private void callbackMasterMuteChange() { + private void callbackMasterMuteChange(int flags) { for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback : mVolumeCallbackContainer.getInterfaces()) { try { - callback.binderInterface.onMasterMuteChanged(); + callback.binderInterface.onMasterMuteChanged(flags); } catch (RemoteException e) { Log.e(CarLog.TAG_AUDIO, "Failed to callback onMasterMuteChanged", e); } diff --git a/service/src/com/android/car/hal/CarPropertyUtils.java b/service/src/com/android/car/hal/CarPropertyUtils.java index cbca08b335..d9151e202a 100644 --- a/service/src/com/android/car/hal/CarPropertyUtils.java +++ b/service/src/com/android/car/hal/CarPropertyUtils.java @@ -53,9 +53,8 @@ import java.util.List; v.int32Values.get(0) == 1); } else if (Boolean[].class == clazz) { Boolean[] values = new Boolean[v.int32Values.size()]; - int i = 0; - for (int val : v.int32Values) { - values[i] = val == 1; + for (int i = 0; i < values.length; i++) { + values[i] = v.int32Values.get(i) == 1; } return new CarPropertyValue<>(propertyId, areaId, status, timestamp, values); } else if (String.class == clazz) { @@ -63,6 +62,12 @@ import java.util.List; } else if (byte[].class == clazz) { byte[] halData = toByteArray(v.bytes); return new CarPropertyValue<>(propertyId, areaId, status, timestamp, halData); + } else if (Long[].class == clazz) { + Long[] values = new Long[v.int64Values.size()]; + for (int i = 0; i < values.length; i++) { + values[i] = v.int64Values.get(i); + } + return new CarPropertyValue<>(propertyId, areaId, status, timestamp, values); } else /* All list properties */ { Object[] values = getRawValueList(clazz, v).toArray(); return new CarPropertyValue<>(propertyId, areaId, status, timestamp, 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 0a00c66015..7837f2e775 100644 --- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java +++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java @@ -17,6 +17,7 @@ package com.google.android.car.kitchensink; +import android.car.hardware.CarSensorManager; import android.car.hardware.hvac.CarHvacManager; import android.car.hardware.power.CarPowerManager; import android.car.hardware.property.CarPropertyManager; @@ -27,7 +28,6 @@ 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; @@ -181,17 +181,9 @@ public class KitchenSinkActivity extends CarDrawerActivity { private CarHvacManager mHvacManager; private CarPowerManager mPowerManager; private CarPropertyManager mPropertyManager; - private CarSensorManager mCarSensorManager; + private CarSensorManager mSensorManager; private CarAppFocusManager mCarAppFocusManager; - private final CarSensorManager.OnSensorChangedListener mListener = (manager, event) -> { - switch (event.sensorType) { - case CarSensorManager.SENSOR_TYPE_DRIVING_STATUS: - Log.d(TAG, "driving status:" + event.intValues[0]); - break; - } - }; - public CarHvacManager getHvacManager() { return mHvacManager; } @@ -209,6 +201,10 @@ public class KitchenSinkActivity extends CarDrawerActivity { return new DrawerAdapter(); } + public CarSensorManager getSensorManager() { + return mSensorManager; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -255,9 +251,6 @@ public class KitchenSinkActivity extends CarDrawerActivity { @Override protected void onDestroy() { super.onDestroy(); - if (mCarSensorManager != null) { - mCarSensorManager.removeListener(mListener); - } if (mCarApi != null) { mCarApi.disconnect(); } @@ -281,10 +274,8 @@ public class KitchenSinkActivity extends CarDrawerActivity { android.car.Car.POWER_SERVICE); mPropertyManager = (CarPropertyManager) mCarApi.getCarManager( android.car.Car.PROPERTY_SERVICE); - mCarSensorManager = (CarSensorManager) mCarApi.getCarManager(Car.SENSOR_SERVICE); - mCarSensorManager.addListener(mListener, - CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, - CarSensorManager.SENSOR_RATE_NORMAL); + mSensorManager = (CarSensorManager) mCarApi.getCarManager( + android.car.Car.SENSOR_SERVICE); mCarAppFocusManager = (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE); } catch (CarNotConnectedException e) { diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java index 9c84f6eb6b..abc2c10b49 100644 --- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java +++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java @@ -16,17 +16,18 @@ package com.google.android.car.kitchensink.sensor; +import static java.lang.Integer.toHexString; + import android.Manifest; import android.annotation.Nullable; import android.car.Car; +import android.car.CarNotConnectedException; +import android.car.hardware.CarSensorConfig; +import android.car.hardware.CarSensorEvent; +import android.car.hardware.CarSensorManager; import android.content.pm.PackageManager; -import android.location.Location; import android.os.Bundle; import android.os.Handler; -import android.support.car.CarNotConnectedException; -import android.support.car.hardware.CarSensorConfig; -import android.support.car.hardware.CarSensorEvent; -import android.support.car.hardware.CarSensorManager; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.Log; @@ -51,7 +52,7 @@ import java.util.concurrent.ConcurrentHashMap; public class SensorsTestFragment extends Fragment { private static final String TAG = "CAR.SENSOR.KS"; private static final boolean DBG = true; - private static final boolean DBG_VERBOSE = false; + private static final boolean DBG_VERBOSE = true; private static final int KS_PERMISSIONS_REQUEST = 1; private final static String[] REQUIRED_PERMISSIONS = new String[]{ @@ -66,7 +67,7 @@ public class SensorsTestFragment extends Fragment { private final CarSensorManager.OnSensorChangedListener mOnSensorChangedListener = new CarSensorManager.OnSensorChangedListener() { @Override - public void onSensorChanged(CarSensorManager manager, CarSensorEvent event) { + public void onSensorChanged(CarSensorEvent event) { if (DBG_VERBOSE) { Log.v(TAG, "New car sensor event: " + event); } @@ -115,26 +116,23 @@ public class SensorsTestFragment extends Fragment { public void onPause() { super.onPause(); if (mSensorManager != null) { - mSensorManager.removeListener(mOnSensorChangedListener); + mSensorManager.unregisterListener(mOnSensorChangedListener); } } private void initSensors() { try { - mSensorManager = (CarSensorManager) - mActivity.getCar().getCarManager(Car.SENSOR_SERVICE); + mSensorManager = + (CarSensorManager) ((KitchenSinkActivity) getActivity()).getSensorManager(); supportedSensors = mSensorManager.getSupportedSensors(); for (Integer sensor : supportedSensors) { - if ((sensor == CarSensorManager.SENSOR_TYPE_LOCATION - || sensor == CarSensorManager.SENSOR_TYPE_GPS_SATELLITE) - && !mActivePermissions.contains(Manifest.permission.ACCESS_FINE_LOCATION)) { - continue; - } - mSensorManager.addListener(mOnSensorChangedListener, sensor, + mSensorManager.registerListener(mOnSensorChangedListener, sensor, CarSensorManager.SENSOR_RATE_NORMAL); } } catch (CarNotConnectedException e) { Log.e(TAG, "Car not connected or not supported", e); + } catch (Exception e) { + Log.e(TAG, "initSensors() exception caught: ", e); } } @@ -188,23 +186,20 @@ public class SensorsTestFragment extends Fragment { for (Integer i : supportedSensors) { CarSensorEvent event = mEventMap.get(i); switch (i) { - case CarSensorManager.SENSOR_TYPE_COMPASS: - summary.add(getCompassString(event)); - break; case CarSensorManager.SENSOR_TYPE_CAR_SPEED: summary.add(getContext().getString(R.string.sensor_speed, getTimestamp(event), - event == null ? mNaString : event.getCarSpeedData().carSpeed)); + event == null ? mNaString : event.getCarSpeedData(null).carSpeed)); break; case CarSensorManager.SENSOR_TYPE_RPM: summary.add(getContext().getString(R.string.sensor_rpm, getTimestamp(event), - event == null ? mNaString : event.getRpmData().rpm)); + event == null ? mNaString : event.getRpmData(null).rpm)); break; case CarSensorManager.SENSOR_TYPE_ODOMETER: summary.add(getContext().getString(R.string.sensor_odometer, getTimestamp(event), - event == null ? mNaString : event.getOdometerData().kms)); + event == null ? mNaString : event.getOdometerData(null).kms)); break; case CarSensorManager.SENSOR_TYPE_FUEL_LEVEL: summary.add(getFuelLevel(event)); @@ -216,38 +211,23 @@ public class SensorsTestFragment extends Fragment { summary.add(getContext().getString(R.string.sensor_parking_brake, getTimestamp(event), event == null ? mNaString : - event.getParkingBrakeData().isEngaged)); + event.getParkingBrakeData(null).isEngaged)); break; case CarSensorManager.SENSOR_TYPE_GEAR: summary.add(getContext().getString(R.string.sensor_gear, getTimestamp(event), - event == null ? mNaString : event.getGearData().gear)); + event == null ? mNaString : event.getGearData(null).gear)); break; case CarSensorManager.SENSOR_TYPE_NIGHT: summary.add(getContext().getString(R.string.sensor_night, getTimestamp(event), - event == null ? mNaString : event.getNightData().isNightMode)); - break; - case CarSensorManager.SENSOR_TYPE_LOCATION: - summary.add(getLocationString(event)); - break; - case CarSensorManager.SENSOR_TYPE_DRIVING_STATUS: - String drivingStatus = mNaString; - String binDrivingStatus = mNaString; - if (event != null) { - CarSensorEvent.DrivingStatusData drivingStatusData = - event.getDrivingStatusData(); - drivingStatus = String.valueOf(drivingStatusData.status); - binDrivingStatus = Integer.toBinaryString(drivingStatusData.status); - } - summary.add(getContext().getString(R.string.sensor_driving_status, - getTimestamp(event), drivingStatus, binDrivingStatus)); + event == null ? mNaString : event.getNightData(null).isNightMode)); break; case CarSensorManager.SENSOR_TYPE_ENVIRONMENT: String temperature = mNaString; String pressure = mNaString; if (event != null) { - CarSensorEvent.EnvironmentData env = event.getEnvironmentData(); + CarSensorEvent.EnvironmentData env = event.getEnvironmentData(null); temperature = Float.isNaN(env.temperature) ? temperature : String.valueOf(env.temperature); pressure = Float.isNaN(env.pressure) ? pressure : @@ -256,19 +236,10 @@ public class SensorsTestFragment extends Fragment { summary.add(getContext().getString(R.string.sensor_environment, getTimestamp(event), temperature, pressure)); break; - case CarSensorManager.SENSOR_TYPE_ACCELEROMETER: - summary.add(getAccelerometerString(event)); - break; - case CarSensorManager.SENSOR_TYPE_GPS_SATELLITE: - summary.add(getGpsSatelliteString(event)); - break; - case CarSensorManager.SENSOR_TYPE_GYROSCOPE: - summary.add(getGyroscopeString(event)); - break; case CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE: if(event != null) { CarSensorEvent.CarWheelTickDistanceData d = - event.getCarWheelTickDistanceData(); + event.getCarWheelTickDistanceData(null); summary.add(getContext().getString(R.string.sensor_wheel_ticks, getTimestamp(event), d.sensorResetCount, d.frontLeftWheelDistanceMm, d.frontRightWheelDistanceMm, d.rearLeftWheelDistanceMm, @@ -295,14 +266,15 @@ public class SensorsTestFragment extends Fragment { case CarSensorManager.SENSOR_TYPE_ABS_ACTIVE: summary.add(getContext().getString(R.string.sensor_abs_is_active, getTimestamp(event), event == null ? mNaString : - event.getCarAbsActiveData().absIsActive)); + event.getCarAbsActiveData(null).absIsActive)); break; case CarSensorManager.SENSOR_TYPE_TRACTION_CONTROL_ACTIVE: summary.add( getContext().getString(R.string.sensor_traction_control_is_active, getTimestamp(event), event == null ? mNaString : - event.getCarTractionControlActiveData().tractionControlIsActive)); + event.getCarTractionControlActiveData(null) + .tractionControlIsActive)); break; case CarSensorManager.SENSOR_TYPE_EV_BATTERY_LEVEL: summary.add(getEvBatteryLevel(event)); @@ -318,7 +290,7 @@ public class SensorsTestFragment extends Fragment { break; default: // Should never happen. - Log.w(TAG, "Unrecognized event type: " + i); + Log.w(TAG, "Unrecognized event type: " + toHexString(i)); } } summaryString = TextUtils.join("\n", summary); @@ -338,93 +310,10 @@ public class SensorsTestFragment extends Fragment { return mDateFormat.format(new Date(event.timestamp / (1000L * 1000L))); } - private String getCompassString(CarSensorEvent event) { - String bear = mNaString; - String pitch = mNaString; - String roll = mNaString; - if (event != null) { - CarSensorEvent.CompassData compass = event.getCompassData(); - bear = Float.isNaN(compass.bearing) ? bear : String.valueOf(compass.bearing); - pitch = Float.isNaN(compass.pitch) ? pitch : String.valueOf(compass.pitch); - roll = Float.isNaN(compass.roll) ? roll : String.valueOf(compass.roll); - } - return getContext().getString(R.string.sensor_compass, - getTimestamp(event), bear, pitch, roll); - } - - private String getGyroscopeString(CarSensorEvent event) { - String x = mNaString; - String y = mNaString; - String z = mNaString; - if (event != null) { - CarSensorEvent.GyroscopeData gyro = event.getGyroscopeData(); - x = Float.isNaN(gyro.x) ? x : String.valueOf(gyro.x); - y = Float.isNaN(gyro.y) ? y : String.valueOf(gyro.y); - z = Float.isNaN(gyro.z) ? z : String.valueOf(gyro.z); - } - return getContext().getString(R.string.sensor_gyroscope, - getTimestamp(event), x, y, z); - } - - private String getAccelerometerString(CarSensorEvent event) { - String x = mNaString; - String y = mNaString; - String z = mNaString; - if (event != null) { - CarSensorEvent.AccelerometerData gyro = event.getAccelerometerData(); - x = Float.isNaN(gyro.x) ? x : String.valueOf(gyro.x); - y = Float.isNaN(gyro.y) ? y : String.valueOf(gyro.y); - z = Float.isNaN(gyro.z) ? z : String.valueOf(gyro.z); - } - return getContext().getString(R.string.sensor_accelerometer, - getTimestamp(event), x, y, z); - } - - private String getLocationString(CarSensorEvent event) { - String lat = mNaString; - String lon = mNaString; - String accuracy = mNaString; - String alt = mNaString; - String speed = mNaString; - String bearing = mNaString; - if (event != null) { - Location location = event.getLocation(null); - lat = String.valueOf(location.getLatitude()); - lon = String.valueOf(location.getLongitude()); - accuracy = location.hasAccuracy() ? String.valueOf(location.getAccuracy()) : accuracy; - alt = location.hasAltitude() ? String.valueOf(location.getAltitude()) : alt; - speed = location.hasSpeed() ? String.valueOf(location.getSpeed()) : speed; - bearing = location.hasBearing() ? String.valueOf(location.getBearing()) : bearing; - } - return getContext().getString(R.string.sensor_location, - getTimestamp(event), lat, lon, accuracy, alt, speed, bearing); - } - - private String getGpsSatelliteString(CarSensorEvent event) { - String inUse = mNaString; - String inView = mNaString; - String perSattelite = ""; - if (event != null) { - CarSensorEvent.GpsSatelliteData gpsData = event.getGpsSatelliteData(true); - inUse = gpsData.numberInUse != -1 ? String.valueOf(gpsData.numberInUse) : inUse; - inView = gpsData.numberInView != -1 ? String.valueOf(gpsData.numberInView) : inView; - List<String> perSatteliteList = new ArrayList<>(); - int num = gpsData.usedInFix.length; - for (int i=0; i<num; i++) { - perSatteliteList.add(getContext().getString(R.string.sensor_single_gps_satellite, - i+1, gpsData.usedInFix[i], gpsData.prn[i], gpsData.snr[i], - gpsData.azimuth[i], gpsData.elevation[i])); - } - perSattelite = TextUtils.join(", ", perSatteliteList); - } - return getContext().getString(R.string.sensor_gps, - getTimestamp(event), inView, inUse, perSattelite); - } - private String getFuelLevel(CarSensorEvent event) { String fuelLevel = mNaString; if(event != null) { - fuelLevel = String.valueOf(event.getFuelLevelData().level); + fuelLevel = String.valueOf(event.getFuelLevelData(null).level); } return getContext().getString(R.string.sensor_fuel_level, getTimestamp(event), fuelLevel); } @@ -432,7 +321,7 @@ public class SensorsTestFragment extends Fragment { private String getFuelDoorOpen(CarSensorEvent event) { String fuelDoorOpen = mNaString; if(event != null) { - fuelDoorOpen = String.valueOf(event.getCarFuelDoorOpenData().fuelDoorIsOpen); + fuelDoorOpen = String.valueOf(event.getCarFuelDoorOpenData(null).fuelDoorIsOpen); } return getContext().getString(R.string.sensor_fuel_door_open, getTimestamp(event), fuelDoorOpen); @@ -441,7 +330,7 @@ public class SensorsTestFragment extends Fragment { private String getEvBatteryLevel(CarSensorEvent event) { String evBatteryLevel = mNaString; if(event != null) { - evBatteryLevel = String.valueOf(event.getCarEvBatteryLevelData().evBatteryLevel); + evBatteryLevel = String.valueOf(event.getCarEvBatteryLevelData(null).evBatteryLevel); } return getContext().getString(R.string.sensor_ev_battery_level, getTimestamp(event), evBatteryLevel); @@ -451,7 +340,7 @@ public class SensorsTestFragment extends Fragment { String evChargePortOpen = mNaString; if(event != null) { evChargePortOpen = String.valueOf( - event.getCarEvChargePortOpenData().evChargePortIsOpen); + event.getCarEvChargePortOpenData(null).evChargePortIsOpen); } return getContext().getString(R.string.sensor_ev_charge_port_is_open, getTimestamp(event), evChargePortOpen); @@ -461,7 +350,7 @@ public class SensorsTestFragment extends Fragment { String evChargePortConnected = mNaString; if(event != null) { evChargePortConnected = String.valueOf( - event.getCarEvChargePortConnectedData().evChargePortIsConnected); + event.getCarEvChargePortConnectedData(null).evChargePortIsConnected); } return getContext().getString(R.string.sensor_ev_charge_port_is_connected, getTimestamp(event), evChargePortConnected); @@ -470,7 +359,7 @@ public class SensorsTestFragment extends Fragment { private String getEvChargeRate(CarSensorEvent event) { String evChargeRate = mNaString; if(event != null) { - evChargeRate = String.valueOf(event.getCarEvBatteryChargeRateData().evChargeRate); + evChargeRate = String.valueOf(event.getCarEvBatteryChargeRateData(null).evChargeRate); } return getContext().getString(R.string.sensor_ev_charge_rate, getTimestamp(event), evChargeRate); |