diff options
author | android-build-team Robot | 2018-06-08 02:21:08 -0500 |
---|---|---|
committer | android-build-team Robot | 2018-06-08 02:21:08 -0500 |
commit | f02b56678700a4035d0ad8882f7d20371bb96ee2 (patch) | |
tree | 59d7dd8b4d27bee6f90ffae1f1bbba0804f5a4ae | |
parent | 577cf630e511be2bb4d9c262c238587a4300af02 (diff) | |
parent | 280eba505892cb722078f0526c10b632d1f994cf (diff) | |
download | platform-packages-services-car-f02b56678700a4035d0ad8882f7d20371bb96ee2.tar.gz platform-packages-services-car-f02b56678700a4035d0ad8882f7d20371bb96ee2.tar.xz platform-packages-services-car-f02b56678700a4035d0ad8882f7d20371bb96ee2.zip |
Snap for 4829593 from 280eba505892cb722078f0526c10b632d1f994cf to pi-releaseandroid-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r3android-wear-9.0.0_r2android-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_r10android-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_r2android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r6android-9.0.0_r5android-9.0.0_r3android-9.0.0_r2android-9.0.0_r18android-9.0.0_r17android-9.0.0_r10android-9.0.0_r1pie-vts-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 00000000..b236d2d6 --- /dev/null +++ b/car-lib/src/android/car/VehiclePropertyType.java | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2018 The Android Open Source Project | ||
3 | * | ||
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | * you may not use this file except in compliance with the License. | ||
6 | * You may obtain a copy of the License at | ||
7 | * | ||
8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | * | ||
10 | * Unless required by applicable law or agreed to in writing, software | ||
11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | * See the License for the specific language governing permissions and | ||
14 | * limitations under the License. | ||
15 | */ | ||
16 | |||
17 | package android.car; | ||
18 | |||
19 | import android.annotation.IntDef; | ||
20 | |||
21 | import java.lang.annotation.Retention; | ||
22 | import java.lang.annotation.RetentionPolicy; | ||
23 | |||
24 | |||
25 | /** | ||
26 | * Value type of VehicleProperty | ||
27 | * @hide | ||
28 | */ | ||
29 | public class VehiclePropertyType { | ||
30 | public static final int STRING = 0x00100000; | ||
31 | public static final int BOOLEAN = 0x00200000; | ||
32 | public static final int INT32 = 0x00400000; | ||
33 | public static final int INT32_VEC = 0x00410000; | ||
34 | public static final int INT64 = 0x00500000; | ||
35 | public static final int INT64_VEC = 0x00510000; | ||
36 | public static final int FLOAT = 0x00600000; | ||
37 | public static final int FLOAT_VEC = 0x00610000; | ||
38 | public static final int BYTES = 0x00700000; | ||
39 | public static final int MIXED = 0x00e00000; | ||
40 | public static final int MASK = 0x00ff0000; | ||
41 | /** @hide */ | ||
42 | @Retention(RetentionPolicy.SOURCE) | ||
43 | @IntDef({ | ||
44 | STRING, | ||
45 | BOOLEAN, | ||
46 | INT32, | ||
47 | INT32_VEC, | ||
48 | INT64, | ||
49 | INT64_VEC, | ||
50 | FLOAT, | ||
51 | FLOAT_VEC, | ||
52 | BYTES, | ||
53 | /** | ||
54 | * Any combination of scalar or vector types. The exact format must be | ||
55 | * provided in the description of the property. | ||
56 | */ | ||
57 | MIXED, | ||
58 | MASK | ||
59 | }) | ||
60 | public @interface Enum {} | ||
61 | private VehiclePropertyType() {} | ||
62 | } | ||
diff --git a/car-lib/src/android/car/hardware/CarSensorManager.java b/car-lib/src/android/car/hardware/CarSensorManager.java index f6cc8dfd..25366046 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; | |||
24 | import android.car.CarLibLog; | 24 | import android.car.CarLibLog; |
25 | import android.car.CarManagerBase; | 25 | import android.car.CarManagerBase; |
26 | import android.car.CarNotConnectedException; | 26 | import android.car.CarNotConnectedException; |
27 | import android.car.VehiclePropertyType; | ||
27 | import android.car.hardware.property.CarPropertyManager; | 28 | import android.car.hardware.property.CarPropertyManager; |
28 | import android.content.Context; | 29 | import android.content.Context; |
29 | import android.os.Bundle; | 30 | import android.os.Bundle; |
@@ -468,26 +469,34 @@ public final class CarSensorManager implements CarManagerBase { | |||
468 | 469 | ||
469 | private CarSensorEvent createCarSensorEvent(CarPropertyValue propertyValue) { | 470 | private CarSensorEvent createCarSensorEvent(CarPropertyValue propertyValue) { |
470 | CarSensorEvent event = null; | 471 | CarSensorEvent event = null; |
471 | Object o = propertyValue.getValue(); | 472 | switch (propertyValue.getPropertyId() & VehiclePropertyType.MASK) { |
472 | if (o instanceof Float) { | 473 | case VehiclePropertyType.FLOAT: |
473 | event = new CarSensorEvent(propertyValue.getPropertyId(), | 474 | event = new CarSensorEvent(propertyValue.getPropertyId(), |
474 | propertyValue.getTimestamp(), 1, 0, 0); | 475 | propertyValue.getTimestamp(), 1, 0, 0); |
475 | event.floatValues[0] = (float) o; | 476 | event.floatValues[0] = (float) propertyValue.getValue(); |
476 | } else if (o instanceof Integer) { | 477 | break; |
477 | event = new CarSensorEvent(propertyValue.getPropertyId(), | 478 | case VehiclePropertyType.INT32: |
478 | propertyValue.getTimestamp(), 0, 1, 0); | 479 | event = new CarSensorEvent(propertyValue.getPropertyId(), |
479 | event.intValues[0] = (int) o; | 480 | propertyValue.getTimestamp(), 0, 1, 0); |
480 | } else if (o instanceof Boolean) { | 481 | event.intValues[0] = (int) propertyValue.getValue(); |
481 | event = new CarSensorEvent(propertyValue.getPropertyId(), | 482 | break; |
482 | propertyValue.getTimestamp(), 0, 1, 0); | 483 | case VehiclePropertyType.BOOLEAN: |
483 | event.intValues[0] = (boolean) o ? 1 : 0; | 484 | event = new CarSensorEvent(propertyValue.getPropertyId(), |
484 | } else if (o instanceof Long[]) { | 485 | propertyValue.getTimestamp(), 0, 1, 0); |
485 | Long[] value = (Long[]) o; | 486 | event.intValues[0] = (boolean) propertyValue.getValue() ? 1 : 0; |
486 | event = new CarSensorEvent(propertyValue.getPropertyId(), | 487 | break; |
487 | propertyValue.getTimestamp(), 0, 0, value.length); | 488 | case VehiclePropertyType.INT64_VEC: |
488 | for (int i = 0; i < value.length; i++) { | 489 | Object[] value = (Object[]) propertyValue.getValue(); |
489 | event.longValues[i] = value[i]; | 490 | event = new CarSensorEvent(propertyValue.getPropertyId(), |
490 | } | 491 | propertyValue.getTimestamp(), 0, 0, value.length); |
492 | for (int i = 0; i < value.length; i++) { | ||
493 | event.longValues[i] = (Long) value[i]; | ||
494 | } | ||
495 | break; | ||
496 | default: | ||
497 | Log.e(TAG, "unhandled VehiclePropertyType for propId=" | ||
498 | + propertyValue.getPropertyId()); | ||
499 | break; | ||
491 | } | 500 | } |
492 | return event; | 501 | return event; |
493 | } | 502 | } |
diff --git a/car-lib/src/android/car/media/ICarVolumeCallback.aidl b/car-lib/src/android/car/media/ICarVolumeCallback.aidl index 10a5ddc4..8540680d 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 { | |||
27 | * The changed-to volume index is not included, the caller is encouraged to | 27 | * The changed-to volume index is not included, the caller is encouraged to |
28 | * get the current group volume index via CarAudioManager. | 28 | * get the current group volume index via CarAudioManager. |
29 | */ | 29 | */ |
30 | void onGroupVolumeChanged(int groupId); | 30 | void onGroupVolumeChanged(int groupId, int flags); |
31 | 31 | ||
32 | /** | 32 | /** |
33 | * This is called whenever the master mute state is changed. | 33 | * This is called whenever the master mute state is changed. |
34 | * The changed-to master mute state is not included, the caller is encouraged to | 34 | * The changed-to master mute state is not included, the caller is encouraged to |
35 | * get the current master mute state via AudioManager. | 35 | * get the current master mute state via AudioManager. |
36 | */ | 36 | */ |
37 | void onMasterMuteChanged(); | 37 | void onMasterMuteChanged(int flags); |
38 | } | 38 | } |
diff --git a/car-support-lib/proguard-release.flags b/car-support-lib/proguard-release.flags index 11d6d8d9..91cab7ea 100644 --- a/car-support-lib/proguard-release.flags +++ b/car-support-lib/proguard-release.flags | |||
@@ -7646,7 +7646,6 @@ | |||
7646 | public abstract java.lang.String[] setPackagesSuspendedAsUser(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String, java.lang.String, int); | 7646 | public abstract java.lang.String[] setPackagesSuspendedAsUser(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String, java.lang.String, int); |
7647 | public abstract void setPermissionEnforced(java.lang.String, boolean); | 7647 | public abstract void setPermissionEnforced(java.lang.String, boolean); |
7648 | public abstract boolean setRequiredForSystemUser(java.lang.String, boolean); | 7648 | public abstract boolean setRequiredForSystemUser(java.lang.String, boolean); |
7649 | public abstract boolean setSystemAppInstallState(java.lang.String, boolean, int); | ||
7650 | public abstract void setUpdateAvailable(java.lang.String, boolean); | 7649 | public abstract void setUpdateAvailable(java.lang.String, boolean); |
7651 | public abstract boolean shouldShowRequestPermissionRationale(java.lang.String, java.lang.String, int); | 7650 | public abstract boolean shouldShowRequestPermissionRationale(java.lang.String, java.lang.String, int); |
7652 | public abstract void systemReady(); | 7651 | public abstract void systemReady(); |
@@ -8590,7 +8589,6 @@ | |||
8590 | public static int MATCH_DISABLED_UNTIL_USED_COMPONENTS; | 8589 | public static int MATCH_DISABLED_UNTIL_USED_COMPONENTS; |
8591 | public static int MATCH_EXPLICITLY_VISIBLE_ONLY; | 8590 | public static int MATCH_EXPLICITLY_VISIBLE_ONLY; |
8592 | public static int MATCH_FACTORY_ONLY; | 8591 | public static int MATCH_FACTORY_ONLY; |
8593 | public static int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; | ||
8594 | public static int MATCH_INSTANT; | 8592 | public static int MATCH_INSTANT; |
8595 | public static int MATCH_KNOWN_PACKAGES; | 8593 | public static int MATCH_KNOWN_PACKAGES; |
8596 | public static int MATCH_STATIC_SHARED_LIBRARIES; | 8594 | public static int MATCH_STATIC_SHARED_LIBRARIES; |
@@ -14031,7 +14029,6 @@ | |||
14031 | public void dump(java.io.FileDescriptor, java.lang.String[]); | 14029 | public void dump(java.io.FileDescriptor, java.lang.String[]); |
14032 | protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); | 14030 | protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); |
14033 | public void dumpAsync(java.io.FileDescriptor, java.lang.String[]); | 14031 | public void dumpAsync(java.io.FileDescriptor, java.lang.String[]); |
14034 | public static void dumpProxyDebugInfo(); | ||
14035 | public static void enableTracing(); | 14032 | public static void enableTracing(); |
14036 | public static void flushPendingCommands(); | 14033 | public static void flushPendingCommands(); |
14037 | public static int getCallingPid(); | 14034 | 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 3a21b1e8..cfd598a7 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; | |||
22 | import android.os.Handler; | 22 | import android.os.Handler; |
23 | import android.os.IBinder; | 23 | import android.os.IBinder; |
24 | import android.support.car.content.pm.CarPackageManagerEmbedded; | 24 | import android.support.car.content.pm.CarPackageManagerEmbedded; |
25 | import android.support.car.hardware.CarSensorManagerEmbedded; | ||
26 | import android.support.car.media.CarAudioManagerEmbedded; | 25 | import android.support.car.media.CarAudioManagerEmbedded; |
27 | import android.support.car.navigation.CarNavigationStatusManagerEmbedded; | 26 | import android.support.car.navigation.CarNavigationStatusManagerEmbedded; |
28 | 27 | ||
@@ -92,8 +91,6 @@ public class CarServiceLoaderEmbedded extends CarServiceLoader { | |||
92 | switch (serviceName) { | 91 | switch (serviceName) { |
93 | case Car.AUDIO_SERVICE: | 92 | case Car.AUDIO_SERVICE: |
94 | return new CarAudioManagerEmbedded(manager); | 93 | return new CarAudioManagerEmbedded(manager); |
95 | case Car.SENSOR_SERVICE: | ||
96 | return new CarSensorManagerEmbedded(manager, getContext()); | ||
97 | case Car.INFO_SERVICE: | 94 | case Car.INFO_SERVICE: |
98 | return new CarInfoManagerEmbedded(manager); | 95 | return new CarInfoManagerEmbedded(manager); |
99 | case Car.APP_FOCUS_SERVICE: | 96 | case Car.APP_FOCUS_SERVICE: |
diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml index 5477f1e0..5212448c 100644 --- a/service/AndroidManifest.xml +++ b/service/AndroidManifest.xml | |||
@@ -39,8 +39,7 @@ | |||
39 | android:description="@string/car_permission_desc_energy" /> | 39 | android:description="@string/car_permission_desc_energy" /> |
40 | <permission | 40 | <permission |
41 | android:name="android.car.permission.CAR_IDENTIFICATION" | 41 | android:name="android.car.permission.CAR_IDENTIFICATION" |
42 | android:permissionGroup="android.car.permission-group.CAR_MONITORING" | 42 | android:protectionLevel="system|signature" |
43 | android:protectionLevel="dangerous" | ||
44 | android:label="@string/car_permission_label_car_identification" | 43 | android:label="@string/car_permission_label_car_identification" |
45 | android:description="@string/car_permission_desc_car_identification" /> | 44 | android:description="@string/car_permission_desc_car_identification" /> |
46 | <permission | 45 | <permission |
diff --git a/service/src/com/android/car/CarAudioService.java b/service/src/com/android/car/CarAudioService.java index 77f0f096..1b7ee67d 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 { | |||
138 | + " suggested usage: " + AudioAttributes.usageToString(usage)); | 138 | + " suggested usage: " + AudioAttributes.usageToString(usage)); |
139 | final int groupId = getVolumeGroupIdForUsage(usage); | 139 | final int groupId = getVolumeGroupIdForUsage(usage); |
140 | final int currentVolume = getGroupVolume(groupId); | 140 | final int currentVolume = getGroupVolume(groupId); |
141 | final int flags = AudioManager.FLAG_FROM_KEY; | 141 | final int flags = AudioManager.FLAG_FROM_KEY | AudioManager.FLAG_SHOW_UI; |
142 | switch (adjustment) { | 142 | switch (adjustment) { |
143 | case AudioManager.ADJUST_LOWER: | 143 | case AudioManager.ADJUST_LOWER: |
144 | if (currentVolume > getGroupMinVolume(groupId)) { | 144 | if (currentVolume > getGroupMinVolume(groupId)) { |
@@ -152,15 +152,15 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { | |||
152 | break; | 152 | break; |
153 | case AudioManager.ADJUST_MUTE: | 153 | case AudioManager.ADJUST_MUTE: |
154 | mAudioManager.setMasterMute(true, flags); | 154 | mAudioManager.setMasterMute(true, flags); |
155 | callbackMasterMuteChange(); | 155 | callbackMasterMuteChange(flags); |
156 | break; | 156 | break; |
157 | case AudioManager.ADJUST_UNMUTE: | 157 | case AudioManager.ADJUST_UNMUTE: |
158 | mAudioManager.setMasterMute(false, flags); | 158 | mAudioManager.setMasterMute(false, flags); |
159 | callbackMasterMuteChange(); | 159 | callbackMasterMuteChange(flags); |
160 | break; | 160 | break; |
161 | case AudioManager.ADJUST_TOGGLE_MUTE: | 161 | case AudioManager.ADJUST_TOGGLE_MUTE: |
162 | mAudioManager.setMasterMute(!mAudioManager.isMasterMute(), flags); | 162 | mAudioManager.setMasterMute(!mAudioManager.isMasterMute(), flags); |
163 | callbackMasterMuteChange(); | 163 | callbackMasterMuteChange(flags); |
164 | break; | 164 | break; |
165 | case AudioManager.ADJUST_SAME: | 165 | case AudioManager.ADJUST_SAME: |
166 | default: | 166 | default: |
@@ -185,11 +185,11 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { | |||
185 | if (groupId == -1) { | 185 | if (groupId == -1) { |
186 | Log.w(CarLog.TAG_AUDIO, "Unknown stream type: " + streamType); | 186 | Log.w(CarLog.TAG_AUDIO, "Unknown stream type: " + streamType); |
187 | } else { | 187 | } else { |
188 | callbackGroupVolumeChange(groupId); | 188 | callbackGroupVolumeChange(groupId, 0); |
189 | } | 189 | } |
190 | break; | 190 | break; |
191 | case AudioManager.MASTER_MUTE_CHANGED_ACTION: | 191 | case AudioManager.MASTER_MUTE_CHANGED_ACTION: |
192 | callbackMasterMuteChange(); | 192 | callbackMasterMuteChange(0); |
193 | break; | 193 | break; |
194 | } | 194 | } |
195 | } | 195 | } |
@@ -260,7 +260,7 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { | |||
260 | synchronized (mImplLock) { | 260 | synchronized (mImplLock) { |
261 | enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME); | 261 | enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME); |
262 | 262 | ||
263 | callbackGroupVolumeChange(groupId); | 263 | callbackGroupVolumeChange(groupId, flags); |
264 | // For legacy stream type based volume control | 264 | // For legacy stream type based volume control |
265 | if (!mUseDynamicRouting) { | 265 | if (!mUseDynamicRouting) { |
266 | mAudioManager.setStreamVolume(STREAM_TYPES[groupId], index, flags); | 266 | mAudioManager.setStreamVolume(STREAM_TYPES[groupId], index, flags); |
@@ -272,22 +272,22 @@ public class CarAudioService extends ICarAudio.Stub implements CarServiceBase { | |||
272 | } | 272 | } |
273 | } | 273 | } |
274 | 274 | ||
275 | private void callbackGroupVolumeChange(int groupId) { | 275 | private void callbackGroupVolumeChange(int groupId, int flags) { |
276 | for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback : | 276 | for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback : |
277 | mVolumeCallbackContainer.getInterfaces()) { | 277 | mVolumeCallbackContainer.getInterfaces()) { |
278 | try { | 278 | try { |
279 | callback.binderInterface.onGroupVolumeChanged(groupId); | 279 | callback.binderInterface.onGroupVolumeChanged(groupId, flags); |
280 | } catch (RemoteException e) { | 280 | } catch (RemoteException e) { |
281 | Log.e(CarLog.TAG_AUDIO, "Failed to callback onGroupVolumeChanged", e); | 281 | Log.e(CarLog.TAG_AUDIO, "Failed to callback onGroupVolumeChanged", e); |
282 | } | 282 | } |
283 | } | 283 | } |
284 | } | 284 | } |
285 | 285 | ||
286 | private void callbackMasterMuteChange() { | 286 | private void callbackMasterMuteChange(int flags) { |
287 | for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback : | 287 | for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback : |
288 | mVolumeCallbackContainer.getInterfaces()) { | 288 | mVolumeCallbackContainer.getInterfaces()) { |
289 | try { | 289 | try { |
290 | callback.binderInterface.onMasterMuteChanged(); | 290 | callback.binderInterface.onMasterMuteChanged(flags); |
291 | } catch (RemoteException e) { | 291 | } catch (RemoteException e) { |
292 | Log.e(CarLog.TAG_AUDIO, "Failed to callback onMasterMuteChanged", e); | 292 | Log.e(CarLog.TAG_AUDIO, "Failed to callback onMasterMuteChanged", e); |
293 | } | 293 | } |
diff --git a/service/src/com/android/car/hal/CarPropertyUtils.java b/service/src/com/android/car/hal/CarPropertyUtils.java index cbca08b3..d9151e20 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; | |||
53 | v.int32Values.get(0) == 1); | 53 | v.int32Values.get(0) == 1); |
54 | } else if (Boolean[].class == clazz) { | 54 | } else if (Boolean[].class == clazz) { |
55 | Boolean[] values = new Boolean[v.int32Values.size()]; | 55 | Boolean[] values = new Boolean[v.int32Values.size()]; |
56 | int i = 0; | 56 | for (int i = 0; i < values.length; i++) { |
57 | for (int val : v.int32Values) { | 57 | values[i] = v.int32Values.get(i) == 1; |
58 | values[i] = val == 1; | ||
59 | } | 58 | } |
60 | return new CarPropertyValue<>(propertyId, areaId, status, timestamp, values); | 59 | return new CarPropertyValue<>(propertyId, areaId, status, timestamp, values); |
61 | } else if (String.class == clazz) { | 60 | } else if (String.class == clazz) { |
@@ -63,6 +62,12 @@ import java.util.List; | |||
63 | } else if (byte[].class == clazz) { | 62 | } else if (byte[].class == clazz) { |
64 | byte[] halData = toByteArray(v.bytes); | 63 | byte[] halData = toByteArray(v.bytes); |
65 | return new CarPropertyValue<>(propertyId, areaId, status, timestamp, halData); | 64 | return new CarPropertyValue<>(propertyId, areaId, status, timestamp, halData); |
65 | } else if (Long[].class == clazz) { | ||
66 | Long[] values = new Long[v.int64Values.size()]; | ||
67 | for (int i = 0; i < values.length; i++) { | ||
68 | values[i] = v.int64Values.get(i); | ||
69 | } | ||
70 | return new CarPropertyValue<>(propertyId, areaId, status, timestamp, values); | ||
66 | } else /* All list properties */ { | 71 | } else /* All list properties */ { |
67 | Object[] values = getRawValueList(clazz, v).toArray(); | 72 | Object[] values = getRawValueList(clazz, v).toArray(); |
68 | return new CarPropertyValue<>(propertyId, areaId, status, timestamp, | 73 | 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 0a00c660..7837f2e7 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 @@ | |||
17 | package com.google.android.car.kitchensink; | 17 | package com.google.android.car.kitchensink; |
18 | 18 | ||
19 | 19 | ||
20 | import android.car.hardware.CarSensorManager; | ||
20 | import android.car.hardware.hvac.CarHvacManager; | 21 | import android.car.hardware.hvac.CarHvacManager; |
21 | import android.car.hardware.power.CarPowerManager; | 22 | import android.car.hardware.power.CarPowerManager; |
22 | import android.car.hardware.property.CarPropertyManager; | 23 | import android.car.hardware.property.CarPropertyManager; |
@@ -27,7 +28,6 @@ import android.support.car.Car; | |||
27 | import android.support.car.CarAppFocusManager; | 28 | import android.support.car.CarAppFocusManager; |
28 | import android.support.car.CarConnectionCallback; | 29 | import android.support.car.CarConnectionCallback; |
29 | import android.support.car.CarNotConnectedException; | 30 | import android.support.car.CarNotConnectedException; |
30 | import android.support.car.hardware.CarSensorManager; | ||
31 | import android.support.v4.app.Fragment; | 31 | import android.support.v4.app.Fragment; |
32 | import android.util.Log; | 32 | import android.util.Log; |
33 | 33 | ||
@@ -181,17 +181,9 @@ public class KitchenSinkActivity extends CarDrawerActivity { | |||
181 | private CarHvacManager mHvacManager; | 181 | private CarHvacManager mHvacManager; |
182 | private CarPowerManager mPowerManager; | 182 | private CarPowerManager mPowerManager; |
183 | private CarPropertyManager mPropertyManager; | 183 | private CarPropertyManager mPropertyManager; |
184 | private CarSensorManager mCarSensorManager; | 184 | private CarSensorManager mSensorManager; |
185 | private CarAppFocusManager mCarAppFocusManager; | 185 | private CarAppFocusManager mCarAppFocusManager; |
186 | 186 | ||
187 | private final CarSensorManager.OnSensorChangedListener mListener = (manager, event) -> { | ||
188 | switch (event.sensorType) { | ||
189 | case CarSensorManager.SENSOR_TYPE_DRIVING_STATUS: | ||
190 | Log.d(TAG, "driving status:" + event.intValues[0]); | ||
191 | break; | ||
192 | } | ||
193 | }; | ||
194 | |||
195 | public CarHvacManager getHvacManager() { | 187 | public CarHvacManager getHvacManager() { |
196 | return mHvacManager; | 188 | return mHvacManager; |
197 | } | 189 | } |
@@ -209,6 +201,10 @@ public class KitchenSinkActivity extends CarDrawerActivity { | |||
209 | return new DrawerAdapter(); | 201 | return new DrawerAdapter(); |
210 | } | 202 | } |
211 | 203 | ||
204 | public CarSensorManager getSensorManager() { | ||
205 | return mSensorManager; | ||
206 | } | ||
207 | |||
212 | @Override | 208 | @Override |
213 | protected void onCreate(Bundle savedInstanceState) { | 209 | protected void onCreate(Bundle savedInstanceState) { |
214 | super.onCreate(savedInstanceState); | 210 | super.onCreate(savedInstanceState); |
@@ -255,9 +251,6 @@ public class KitchenSinkActivity extends CarDrawerActivity { | |||
255 | @Override | 251 | @Override |
256 | protected void onDestroy() { | 252 | protected void onDestroy() { |
257 | super.onDestroy(); | 253 | super.onDestroy(); |
258 | if (mCarSensorManager != null) { | ||
259 | mCarSensorManager.removeListener(mListener); | ||
260 | } | ||
261 | if (mCarApi != null) { | 254 | if (mCarApi != null) { |
262 | mCarApi.disconnect(); | 255 | mCarApi.disconnect(); |
263 | } | 256 | } |
@@ -281,10 +274,8 @@ public class KitchenSinkActivity extends CarDrawerActivity { | |||
281 | android.car.Car.POWER_SERVICE); | 274 | android.car.Car.POWER_SERVICE); |
282 | mPropertyManager = (CarPropertyManager) mCarApi.getCarManager( | 275 | mPropertyManager = (CarPropertyManager) mCarApi.getCarManager( |
283 | android.car.Car.PROPERTY_SERVICE); | 276 | android.car.Car.PROPERTY_SERVICE); |
284 | mCarSensorManager = (CarSensorManager) mCarApi.getCarManager(Car.SENSOR_SERVICE); | 277 | mSensorManager = (CarSensorManager) mCarApi.getCarManager( |
285 | mCarSensorManager.addListener(mListener, | 278 | android.car.Car.SENSOR_SERVICE); |
286 | CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, | ||
287 | CarSensorManager.SENSOR_RATE_NORMAL); | ||
288 | mCarAppFocusManager = | 279 | mCarAppFocusManager = |
289 | (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE); | 280 | (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE); |
290 | } catch (CarNotConnectedException e) { | 281 | } 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 9c84f6eb..abc2c10b 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 @@ | |||
16 | 16 | ||
17 | package com.google.android.car.kitchensink.sensor; | 17 | package com.google.android.car.kitchensink.sensor; |
18 | 18 | ||
19 | import static java.lang.Integer.toHexString; | ||
20 | |||
19 | import android.Manifest; | 21 | import android.Manifest; |
20 | import android.annotation.Nullable; | 22 | import android.annotation.Nullable; |
21 | import android.car.Car; | 23 | import android.car.Car; |
24 | import android.car.CarNotConnectedException; | ||
25 | import android.car.hardware.CarSensorConfig; | ||
26 | import android.car.hardware.CarSensorEvent; | ||
27 | import android.car.hardware.CarSensorManager; | ||
22 | import android.content.pm.PackageManager; | 28 | import android.content.pm.PackageManager; |
23 | import android.location.Location; | ||
24 | import android.os.Bundle; | 29 | import android.os.Bundle; |
25 | import android.os.Handler; | 30 | import android.os.Handler; |
26 | import android.support.car.CarNotConnectedException; | ||
27 | import android.support.car.hardware.CarSensorConfig; | ||
28 | import android.support.car.hardware.CarSensorEvent; | ||
29 | import android.support.car.hardware.CarSensorManager; | ||
30 | import android.support.v4.app.Fragment; | 31 | import android.support.v4.app.Fragment; |
31 | import android.text.TextUtils; | 32 | import android.text.TextUtils; |
32 | import android.util.Log; | 33 | import android.util.Log; |
@@ -51,7 +52,7 @@ import java.util.concurrent.ConcurrentHashMap; | |||
51 | public class SensorsTestFragment extends Fragment { | 52 | public class SensorsTestFragment extends Fragment { |
52 | private static final String TAG = "CAR.SENSOR.KS"; | 53 | private static final String TAG = "CAR.SENSOR.KS"; |
53 | private static final boolean DBG = true; | 54 | private static final boolean DBG = true; |
54 | private static final boolean DBG_VERBOSE = false; | 55 | private static final boolean DBG_VERBOSE = true; |
55 | private static final int KS_PERMISSIONS_REQUEST = 1; | 56 | private static final int KS_PERMISSIONS_REQUEST = 1; |
56 | 57 | ||
57 | private final static String[] REQUIRED_PERMISSIONS = new String[]{ | 58 | private final static String[] REQUIRED_PERMISSIONS = new String[]{ |
@@ -66,7 +67,7 @@ public class SensorsTestFragment extends Fragment { | |||
66 | private final CarSensorManager.OnSensorChangedListener mOnSensorChangedListener = | 67 | private final CarSensorManager.OnSensorChangedListener mOnSensorChangedListener = |
67 | new CarSensorManager.OnSensorChangedListener() { | 68 | new CarSensorManager.OnSensorChangedListener() { |
68 | @Override | 69 | @Override |
69 | public void onSensorChanged(CarSensorManager manager, CarSensorEvent event) { | 70 | public void onSensorChanged(CarSensorEvent event) { |
70 | if (DBG_VERBOSE) { | 71 | if (DBG_VERBOSE) { |
71 | Log.v(TAG, "New car sensor event: " + event); | 72 | Log.v(TAG, "New car sensor event: " + event); |
72 | } | 73 | } |
@@ -115,26 +116,23 @@ public class SensorsTestFragment extends Fragment { | |||
115 | public void onPause() { | 116 | public void onPause() { |
116 | super.onPause(); | 117 | super.onPause(); |
117 | if (mSensorManager != null) { | 118 | if (mSensorManager != null) { |
118 | mSensorManager.removeListener(mOnSensorChangedListener); | 119 | mSensorManager.unregisterListener(mOnSensorChangedListener); |
119 | } | 120 | } |
120 | } | 121 | } |
121 | 122 | ||
122 | private void initSensors() { | 123 | private void initSensors() { |
123 | try { | 124 | try { |
124 | mSensorManager = (CarSensorManager) | 125 | mSensorManager = |
125 | mActivity.getCar().getCarManager(Car.SENSOR_SERVICE); | 126 | (CarSensorManager) ((KitchenSinkActivity) getActivity()).getSensorManager(); |
126 | supportedSensors = mSensorManager.getSupportedSensors(); | 127 | supportedSensors = mSensorManager.getSupportedSensors(); |
127 | for (Integer sensor : supportedSensors) { | 128 | for (Integer sensor : supportedSensors) { |
128 | if ((sensor == CarSensorManager.SENSOR_TYPE_LOCATION | 129 | mSensorManager.registerListener(mOnSensorChangedListener, sensor, |
129 | || sensor == CarSensorManager.SENSOR_TYPE_GPS_SATELLITE) | ||
130 | && !mActivePermissions.contains(Manifest.permission.ACCESS_FINE_LOCATION)) { | ||
131 | continue; | ||
132 | } | ||
133 | mSensorManager.addListener(mOnSensorChangedListener, sensor, | ||
134 | CarSensorManager.SENSOR_RATE_NORMAL); | 130 | CarSensorManager.SENSOR_RATE_NORMAL); |
135 | } | 131 | } |
136 | } catch (CarNotConnectedException e) { | 132 | } catch (CarNotConnectedException e) { |
137 | Log.e(TAG, "Car not connected or not supported", e); | 133 | Log.e(TAG, "Car not connected or not supported", e); |
134 | } catch (Exception e) { | ||
135 | Log.e(TAG, "initSensors() exception caught: ", e); | ||
138 | } | 136 | } |
139 | } | 137 | } |
140 | 138 | ||
@@ -188,23 +186,20 @@ public class SensorsTestFragment extends Fragment { | |||
188 | for (Integer i : supportedSensors) { | 186 | for (Integer i : supportedSensors) { |
189 | CarSensorEvent event = mEventMap.get(i); | 187 | CarSensorEvent event = mEventMap.get(i); |
190 | switch (i) { | 188 | switch (i) { |
191 | case CarSensorManager.SENSOR_TYPE_COMPASS: | ||
192 | summary.add(getCompassString(event)); | ||
193 | break; | ||
194 | case CarSensorManager.SENSOR_TYPE_CAR_SPEED: | 189 | case CarSensorManager.SENSOR_TYPE_CAR_SPEED: |
195 | summary.add(getContext().getString(R.string.sensor_speed, | 190 | summary.add(getContext().getString(R.string.sensor_speed, |
196 | getTimestamp(event), | 191 | getTimestamp(event), |
197 | event == null ? mNaString : event.getCarSpeedData().carSpeed)); | 192 | event == null ? mNaString : event.getCarSpeedData(null).carSpeed)); |
198 | break; | 193 | break; |
199 | case CarSensorManager.SENSOR_TYPE_RPM: | 194 | case CarSensorManager.SENSOR_TYPE_RPM: |
200 | summary.add(getContext().getString(R.string.sensor_rpm, | 195 | summary.add(getContext().getString(R.string.sensor_rpm, |
201 | getTimestamp(event), | 196 | getTimestamp(event), |
202 | event == null ? mNaString : event.getRpmData().rpm)); | 197 | event == null ? mNaString : event.getRpmData(null).rpm)); |
203 | break; | 198 | break; |
204 | case CarSensorManager.SENSOR_TYPE_ODOMETER: | 199 | case CarSensorManager.SENSOR_TYPE_ODOMETER: |
205 | summary.add(getContext().getString(R.string.sensor_odometer, | 200 | summary.add(getContext().getString(R.string.sensor_odometer, |
206 | getTimestamp(event), | 201 | getTimestamp(event), |
207 | event == null ? mNaString : event.getOdometerData().kms)); | 202 | event == null ? mNaString : event.getOdometerData(null).kms)); |
208 | break; | 203 | break; |
209 | case CarSensorManager.SENSOR_TYPE_FUEL_LEVEL: | 204 | case CarSensorManager.SENSOR_TYPE_FUEL_LEVEL: |
210 | summary.add(getFuelLevel(event)); | 205 | summary.add(getFuelLevel(event)); |
@@ -216,38 +211,23 @@ public class SensorsTestFragment extends Fragment { | |||
216 | summary.add(getContext().getString(R.string.sensor_parking_brake, | 211 | summary.add(getContext().getString(R.string.sensor_parking_brake, |
217 | getTimestamp(event), | 212 | getTimestamp(event), |
218 | event == null ? mNaString : | 213 | event == null ? mNaString : |
219 | event.getParkingBrakeData().isEngaged)); | 214 | event.getParkingBrakeData(null).isEngaged)); |
220 | break; | 215 | break; |
221 | case CarSensorManager.SENSOR_TYPE_GEAR: | 216 | case CarSensorManager.SENSOR_TYPE_GEAR: |
222 | summary.add(getContext().getString(R.string.sensor_gear, | 217 | summary.add(getContext().getString(R.string.sensor_gear, |
223 | getTimestamp(event), | 218 | getTimestamp(event), |
224 | event == null ? mNaString : event.getGearData().gear)); | 219 | event == null ? mNaString : event.getGearData(null).gear)); |
225 | break; | 220 | break; |
226 | case CarSensorManager.SENSOR_TYPE_NIGHT: | 221 | case CarSensorManager.SENSOR_TYPE_NIGHT: |
227 | summary.add(getContext().getString(R.string.sensor_night, | 222 | summary.add(getContext().getString(R.string.sensor_night, |
228 | getTimestamp(event), | 223 | getTimestamp(event), |
229 | event == null ? mNaString : event.getNightData().isNightMode)); | 224 | event == null ? mNaString : event.getNightData(null).isNightMode)); |
230 | break; | ||
231 | case CarSensorManager.SENSOR_TYPE_LOCATION: | ||
232 | summary.add(getLocationString(event)); | ||
233 | break; | ||
234 | case CarSensorManager.SENSOR_TYPE_DRIVING_STATUS: | ||
235 | String drivingStatus = mNaString; | ||
236 | String binDrivingStatus = mNaString; | ||
237 | if (event != null) { | ||
238 | CarSensorEvent.DrivingStatusData drivingStatusData = | ||
239 | event.getDrivingStatusData(); | ||
240 | drivingStatus = String.valueOf(drivingStatusData.status); | ||
241 | binDrivingStatus = Integer.toBinaryString(drivingStatusData.status); | ||
242 | } | ||
243 | summary.add(getContext().getString(R.string.sensor_driving_status, | ||
244 | getTimestamp(event), drivingStatus, binDrivingStatus)); | ||
245 | break; | 225 | break; |
246 | case CarSensorManager.SENSOR_TYPE_ENVIRONMENT: | 226 | case CarSensorManager.SENSOR_TYPE_ENVIRONMENT: |
247 | String temperature = mNaString; | 227 | String temperature = mNaString; |
248 | String pressure = mNaString; | 228 | String pressure = mNaString; |
249 | if (event != null) { | 229 | if (event != null) { |
250 | CarSensorEvent.EnvironmentData env = event.getEnvironmentData(); | 230 | CarSensorEvent.EnvironmentData env = event.getEnvironmentData(null); |
251 | temperature = Float.isNaN(env.temperature) ? temperature : | 231 | temperature = Float.isNaN(env.temperature) ? temperature : |
252 | String.valueOf(env.temperature); | 232 | String.valueOf(env.temperature); |
253 | pressure = Float.isNaN(env.pressure) ? pressure : | 233 | pressure = Float.isNaN(env.pressure) ? pressure : |
@@ -256,19 +236,10 @@ public class SensorsTestFragment extends Fragment { | |||
256 | summary.add(getContext().getString(R.string.sensor_environment, | 236 | summary.add(getContext().getString(R.string.sensor_environment, |
257 | getTimestamp(event), temperature, pressure)); | 237 | getTimestamp(event), temperature, pressure)); |
258 | break; | 238 | break; |
259 | case CarSensorManager.SENSOR_TYPE_ACCELEROMETER: | ||
260 | summary.add(getAccelerometerString(event)); | ||
261 | break; | ||
262 | case CarSensorManager.SENSOR_TYPE_GPS_SATELLITE: | ||
263 | summary.add(getGpsSatelliteString(event)); | ||
264 | break; | ||
265 | case CarSensorManager.SENSOR_TYPE_GYROSCOPE: | ||
266 | summary.add(getGyroscopeString(event)); | ||
267 | break; | ||
268 | case CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE: | 239 | case CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE: |
269 | if(event != null) { | 240 | if(event != null) { |
270 | CarSensorEvent.CarWheelTickDistanceData d = | 241 | CarSensorEvent.CarWheelTickDistanceData d = |
271 | event.getCarWheelTickDistanceData(); | 242 | event.getCarWheelTickDistanceData(null); |
272 | summary.add(getContext().getString(R.string.sensor_wheel_ticks, | 243 | summary.add(getContext().getString(R.string.sensor_wheel_ticks, |
273 | getTimestamp(event), d.sensorResetCount, d.frontLeftWheelDistanceMm, | 244 | getTimestamp(event), d.sensorResetCount, d.frontLeftWheelDistanceMm, |
274 | d.frontRightWheelDistanceMm, d.rearLeftWheelDistanceMm, | 245 | d.frontRightWheelDistanceMm, d.rearLeftWheelDistanceMm, |
@@ -295,14 +266,15 @@ public class SensorsTestFragment extends Fragment { | |||
295 | case CarSensorManager.SENSOR_TYPE_ABS_ACTIVE: | 266 | case CarSensorManager.SENSOR_TYPE_ABS_ACTIVE: |
296 | summary.add(getContext().getString(R.string.sensor_abs_is_active, | 267 | summary.add(getContext().getString(R.string.sensor_abs_is_active, |
297 | getTimestamp(event), event == null ? mNaString : | 268 | getTimestamp(event), event == null ? mNaString : |
298 | event.getCarAbsActiveData().absIsActive)); | 269 | event.getCarAbsActiveData(null).absIsActive)); |
299 | break; | 270 | break; |
300 | 271 | ||
301 | case CarSensorManager.SENSOR_TYPE_TRACTION_CONTROL_ACTIVE: | 272 | case CarSensorManager.SENSOR_TYPE_TRACTION_CONTROL_ACTIVE: |
302 | summary.add( | 273 | summary.add( |
303 | getContext().getString(R.string.sensor_traction_control_is_active, | 274 | getContext().getString(R.string.sensor_traction_control_is_active, |
304 | getTimestamp(event), event == null ? mNaString : | 275 | getTimestamp(event), event == null ? mNaString : |
305 | event.getCarTractionControlActiveData().tractionControlIsActive)); | 276 | event.getCarTractionControlActiveData(null) |
277 | .tractionControlIsActive)); | ||
306 | break; | 278 | break; |
307 | case CarSensorManager.SENSOR_TYPE_EV_BATTERY_LEVEL: | 279 | case CarSensorManager.SENSOR_TYPE_EV_BATTERY_LEVEL: |
308 | summary.add(getEvBatteryLevel(event)); | 280 | summary.add(getEvBatteryLevel(event)); |
@@ -318,7 +290,7 @@ public class SensorsTestFragment extends Fragment { | |||
318 | break; | 290 | break; |
319 | default: | 291 | default: |
320 | // Should never happen. | 292 | // Should never happen. |
321 | Log.w(TAG, "Unrecognized event type: " + i); | 293 | Log.w(TAG, "Unrecognized event type: " + toHexString(i)); |
322 | } | 294 | } |
323 | } | 295 | } |
324 | summaryString = TextUtils.join("\n", summary); | 296 | summaryString = TextUtils.join("\n", summary); |
@@ -338,93 +310,10 @@ public class SensorsTestFragment extends Fragment { | |||
338 | return mDateFormat.format(new Date(event.timestamp / (1000L * 1000L))); | 310 | return mDateFormat.format(new Date(event.timestamp / (1000L * 1000L))); |
339 | } | 311 | } |
340 | 312 | ||
341 | private String getCompassString(CarSensorEvent event) { | ||
342 | String bear = mNaString; | ||
343 | String pitch = mNaString; | ||
344 | String roll = mNaString; | ||
345 | if (event != null) { | ||
346 | CarSensorEvent.CompassData compass = event.getCompassData(); | ||
347 | bear = Float.isNaN(compass.bearing) ? bear : String.valueOf(compass.bearing); | ||
348 | pitch = Float.isNaN(compass.pitch) ? pitch : String.valueOf(compass.pitch); | ||
349 | roll = Float.isNaN(compass.roll) ? roll : String.valueOf(compass.roll); | ||
350 | } | ||
351 | return getContext().getString(R.string.sensor_compass, | ||
352 | getTimestamp(event), bear, pitch, roll); | ||
353 | } | ||
354 | |||
355 | private String getGyroscopeString(CarSensorEvent event) { | ||
356 | String x = mNaString; | ||
357 | String y = mNaString; | ||
358 | String z = mNaString; | ||
359 | if (event != null) { | ||
360 | CarSensorEvent.GyroscopeData gyro = event.getGyroscopeData(); | ||
361 | x = Float.isNaN(gyro.x) ? x : String.valueOf(gyro.x); | ||
362 | y = Float.isNaN(gyro.y) ? y : String.valueOf(gyro.y); | ||
363 | z = Float.isNaN(gyro.z) ? z : String.valueOf(gyro.z); | ||
364 | } | ||
365 | return getContext().getString(R.string.sensor_gyroscope, | ||
366 | getTimestamp(event), x, y, z); | ||
367 | } | ||
368 | |||
369 | private String getAccelerometerString(CarSensorEvent event) { | ||
370 | String x = mNaString; | ||
371 | String y = mNaString; | ||
372 | String z = mNaString; | ||
373 | if (event != null) { | ||
374 | CarSensorEvent.AccelerometerData gyro = event.getAccelerometerData(); | ||
375 | x = Float.isNaN(gyro.x) ? x : String.valueOf(gyro.x); | ||
376 | y = Float.isNaN(gyro.y) ? y : String.valueOf(gyro.y); | ||
377 | z = Float.isNaN(gyro.z) ? z : String.valueOf(gyro.z); | ||
378 | } | ||
379 | return getContext().getString(R.string.sensor_accelerometer, | ||
380 | getTimestamp(event), x, y, z); | ||
381 | } | ||
382 | |||
383 | private String getLocationString(CarSensorEvent event) { | ||
384 | String lat = mNaString; | ||
385 | String lon = mNaString; | ||
386 | String accuracy = mNaString; | ||
387 | String alt = mNaString; | ||
388 | String speed = mNaString; | ||
389 | String bearing = mNaString; | ||
390 | if (event != null) { | ||
391 | Location location = event.getLocation(null); | ||
392 | lat = String.valueOf(location.getLatitude()); | ||
393 | lon = String.valueOf(location.getLongitude()); | ||
394 | accuracy = location.hasAccuracy() ? String.valueOf(location.getAccuracy()) : accuracy; | ||
395 | alt = location.hasAltitude() ? String.valueOf(location.getAltitude()) : alt; | ||
396 | speed = location.hasSpeed() ? String.valueOf(location.getSpeed()) : speed; | ||
397 | bearing = location.hasBearing() ? String.valueOf(location.getBearing()) : bearing; | ||
398 | } | ||
399 | return getContext().getString(R.string.sensor_location, | ||
400 | getTimestamp(event), lat, lon, accuracy, alt, speed, bearing); | ||
401 | } | ||
402 | |||
403 | private String getGpsSatelliteString(CarSensorEvent event) { | ||
404 | String inUse = mNaString; | ||
405 | String inView = mNaString; | ||
406 | String perSattelite = ""; | ||
407 | if (event != null) { | ||
408 | CarSensorEvent.GpsSatelliteData gpsData = event.getGpsSatelliteData(true); | ||
409 | inUse = gpsData.numberInUse != -1 ? String.valueOf(gpsData.numberInUse) : inUse; | ||
410 | inView = gpsData.numberInView != -1 ? String.valueOf(gpsData.numberInView) : inView; | ||
411 | List<String> perSatteliteList = new ArrayList<>(); | ||
412 | int num = gpsData.usedInFix.length; | ||
413 | for (int i=0; i<num; i++) { | ||
414 | perSatteliteList.add(getContext().getString(R.string.sensor_single_gps_satellite, | ||
415 | i+1, gpsData.usedInFix[i], gpsData.prn[i], gpsData.snr[i], | ||
416 | gpsData.azimuth[i], gpsData.elevation[i])); | ||
417 | } | ||
418 | perSattelite = TextUtils.join(", ", perSatteliteList); | ||
419 | } | ||
420 | return getContext().getString(R.string.sensor_gps, | ||
421 | getTimestamp(event), inView, inUse, perSattelite); | ||
422 | } | ||
423 | |||
424 | private String getFuelLevel(CarSensorEvent event) { | 313 | private String getFuelLevel(CarSensorEvent event) { |
425 | String fuelLevel = mNaString; | 314 | String fuelLevel = mNaString; |
426 | if(event != null) { | 315 | if(event != null) { |
427 | fuelLevel = String.valueOf(event.getFuelLevelData().level); | 316 | fuelLevel = String.valueOf(event.getFuelLevelData(null).level); |
428 | } | 317 | } |
429 | return getContext().getString(R.string.sensor_fuel_level, getTimestamp(event), fuelLevel); | 318 | return getContext().getString(R.string.sensor_fuel_level, getTimestamp(event), fuelLevel); |
430 | } | 319 | } |
@@ -432,7 +321,7 @@ public class SensorsTestFragment extends Fragment { | |||
432 | private String getFuelDoorOpen(CarSensorEvent event) { | 321 | private String getFuelDoorOpen(CarSensorEvent event) { |
433 | String fuelDoorOpen = mNaString; | 322 | String fuelDoorOpen = mNaString; |
434 | if(event != null) { | 323 | if(event != null) { |
435 | fuelDoorOpen = String.valueOf(event.getCarFuelDoorOpenData().fuelDoorIsOpen); | 324 | fuelDoorOpen = String.valueOf(event.getCarFuelDoorOpenData(null).fuelDoorIsOpen); |
436 | } | 325 | } |
437 | return getContext().getString(R.string.sensor_fuel_door_open, getTimestamp(event), | 326 | return getContext().getString(R.string.sensor_fuel_door_open, getTimestamp(event), |
438 | fuelDoorOpen); | 327 | fuelDoorOpen); |
@@ -441,7 +330,7 @@ public class SensorsTestFragment extends Fragment { | |||
441 | private String getEvBatteryLevel(CarSensorEvent event) { | 330 | private String getEvBatteryLevel(CarSensorEvent event) { |
442 | String evBatteryLevel = mNaString; | 331 | String evBatteryLevel = mNaString; |
443 | if(event != null) { | 332 | if(event != null) { |
444 | evBatteryLevel = String.valueOf(event.getCarEvBatteryLevelData().evBatteryLevel); | 333 | evBatteryLevel = String.valueOf(event.getCarEvBatteryLevelData(null).evBatteryLevel); |
445 | } | 334 | } |
446 | return getContext().getString(R.string.sensor_ev_battery_level, getTimestamp(event), | 335 | return getContext().getString(R.string.sensor_ev_battery_level, getTimestamp(event), |
447 | evBatteryLevel); | 336 | evBatteryLevel); |
@@ -451,7 +340,7 @@ public class SensorsTestFragment extends Fragment { | |||
451 | String evChargePortOpen = mNaString; | 340 | String evChargePortOpen = mNaString; |
452 | if(event != null) { | 341 | if(event != null) { |
453 | evChargePortOpen = String.valueOf( | 342 | evChargePortOpen = String.valueOf( |
454 | event.getCarEvChargePortOpenData().evChargePortIsOpen); | 343 | event.getCarEvChargePortOpenData(null).evChargePortIsOpen); |
455 | } | 344 | } |
456 | return getContext().getString(R.string.sensor_ev_charge_port_is_open, getTimestamp(event), | 345 | return getContext().getString(R.string.sensor_ev_charge_port_is_open, getTimestamp(event), |
457 | evChargePortOpen); | 346 | evChargePortOpen); |
@@ -461,7 +350,7 @@ public class SensorsTestFragment extends Fragment { | |||
461 | String evChargePortConnected = mNaString; | 350 | String evChargePortConnected = mNaString; |
462 | if(event != null) { | 351 | if(event != null) { |
463 | evChargePortConnected = String.valueOf( | 352 | evChargePortConnected = String.valueOf( |
464 | event.getCarEvChargePortConnectedData().evChargePortIsConnected); | 353 | event.getCarEvChargePortConnectedData(null).evChargePortIsConnected); |
465 | } | 354 | } |
466 | return getContext().getString(R.string.sensor_ev_charge_port_is_connected, | 355 | return getContext().getString(R.string.sensor_ev_charge_port_is_connected, |
467 | getTimestamp(event), evChargePortConnected); | 356 | getTimestamp(event), evChargePortConnected); |
@@ -470,7 +359,7 @@ public class SensorsTestFragment extends Fragment { | |||
470 | private String getEvChargeRate(CarSensorEvent event) { | 359 | private String getEvChargeRate(CarSensorEvent event) { |
471 | String evChargeRate = mNaString; | 360 | String evChargeRate = mNaString; |
472 | if(event != null) { | 361 | if(event != null) { |
473 | evChargeRate = String.valueOf(event.getCarEvBatteryChargeRateData().evChargeRate); | 362 | evChargeRate = String.valueOf(event.getCarEvBatteryChargeRateData(null).evChargeRate); |
474 | } | 363 | } |
475 | return getContext().getString(R.string.sensor_ev_charge_rate, getTimestamp(event), | 364 | return getContext().getString(R.string.sensor_ev_charge_rate, getTimestamp(event), |
476 | evChargeRate); | 365 | evChargeRate); |