aboutsummaryrefslogtreecommitdiff
path: root/tests/EmbeddedKitchenSinkApp
diff options
context:
space:
mode:
authorBill Yi <byi@google.com>2018-11-28 18:35:00 -0800
committerBill Yi <byi@google.com>2018-11-28 18:35:00 -0800
commit0f8320f6b95736ea4b703764a7d11a8a6ca13674 (patch)
treed7b300e81f05e45345ada1ffcaf39b2512dd8f6f /tests/EmbeddedKitchenSinkApp
parentf02b56678700a4035d0ad8882f7d20371bb96ee2 (diff)
parent911e6566751a60c29eada6ad0679694bed11be4f (diff)
downloadCar-pie-platform-release.tar.gz
Merge pi-qpr1-release PQ1A.181105.017.A1 to pi-platform-releasepie-platform-releasepie-cuttlefish-testing
Change-Id: Ibafbc25e1d704d7e84a168b32d35a165dd41e06f
Diffstat (limited to 'tests/EmbeddedKitchenSinkApp')
-rw-r--r--tests/EmbeddedKitchenSinkApp/AndroidManifest.xml2
-rw-r--r--tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml55
-rw-r--r--tests/EmbeddedKitchenSinkApp/res/layout/list_item.xml22
-rw-r--r--tests/EmbeddedKitchenSinkApp/res/values/strings.xml5
-rw-r--r--tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java70
-rw-r--r--tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java154
-rw-r--r--tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java141
-rw-r--r--tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java23
-rw-r--r--tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/property/PropertyTestFragment.java32
-rw-r--r--tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java21
10 files changed, 411 insertions, 114 deletions
diff --git a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
index bc89ad4311..6e8e80f73a 100644
--- a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
+++ b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
@@ -42,6 +42,8 @@
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+ <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS" />
<uses-permission android:name="android.permission.INJECT_EVENTS" />
<application android:label="@string/app_title"
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
new file mode 100644
index 0000000000..15422b1116
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <ListView
+ android:id="@+id/networks"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ </ListView>
+ </LinearLayout>
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="4dp">
+ <Button android:id="@+id/networksRefresh"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Refresh"/>
+ <Button android:id="@+id/networkRequestOemPaid"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Request OEM-paid"/>
+ <Button android:id="@+id/networkRequestEth1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Request eth1"/>
+ <Button android:id="@+id/networkReleaseNetwork"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Release Request"/>
+ </LinearLayout>
+
+</LinearLayout> \ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/list_item.xml b/tests/EmbeddedKitchenSinkApp/res/layout/list_item.xml
new file mode 100644
index 0000000000..f517913acb
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/list_item.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ android:paddingTop="2dip"
+ android:paddingBottom="3dip"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textSize="24sp" /> \ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
index 74c7c2637b..452fec8d81 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
@@ -211,14 +211,14 @@
<!-- sensors test -->
<string name="sensor_na">N/A</string>
- <string name="sensor_environment">Environment[%1$s]: temperature=%2$s, pressure=%3$s</string>
+ <string name="sensor_environment">Environment[%1$s]: temperature=%2$s</string>
<string name="sensor_night">Night[%1$s]: isNight=%2$s</string>
<string name="sensor_gear">Gear[%1$s]: gear=%2$s</string>
<string name="sensor_parking_brake">Parking brake[%1$s]: isEngaged=%2$s</string>
<string name="sensor_odometer">Odometer[%1$s]: kms=%2$s</string>
<string name="sensor_rpm">RPM[%1$s]: rpm=%2$s</string>
<string name="sensor_speed">Speed[%1$s]: speed=%2$s</string>
- <string name="sensor_driving_status">Driving status[%1$s]: status=%2$s [bin=%3$s]</string>
+ <string name="sensor_ignition_status">Ignition status[%1$s]: status=%2$s</string>
<string name="sensor_compass">Compass[%1$s]: bear=%2$s, pitch=%3$s, roll=%4$s</string>
<string name="sensor_accelerometer">Accelerometer[%1$s]: x=%2$s, y=%3$s, z=%4$s</string>
<string name="sensor_gyroscope">Gyroscope[%1$s]: x=%2$s, y=%3$s, z=%4$s</string>
@@ -231,6 +231,7 @@
<string name="sensor_traction_control_is_active">Traction Control[%1$s]: isActive=%2$s</string>
<string name="sensor_fuel_level">Fuel Level[%1$s]: %2$s</string>
<string name="sensor_fuel_door_open">Fuel Door Open[%1$s]: %2$s</string>
+ <string name="sensor_engine_oil_level">Engine Oil Level[%1$s]: %2$s</string>
<string name="sensor_engine_is_on">Engine Is On[%1$s]: %2$s</string>
<string name="sensor_ev_battery_level">EV Battery Level[%1$s]: %2$s</string>
<string name="sensor_ev_charge_port_is_open">EV Charge Port Is Open[%1$s]: %2$s</string>
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 7837f2e775..caca03af01 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
@@ -23,7 +23,9 @@ import android.car.hardware.power.CarPowerManager;
import android.car.hardware.property.CarPropertyManager;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Handler;
import android.support.car.Car;
import android.support.car.CarAppFocusManager;
import android.support.car.CarConnectionCallback;
@@ -42,6 +44,7 @@ import com.google.android.car.kitchensink.audio.AudioTestFragment;
import com.google.android.car.kitchensink.bluetooth.BluetoothHeadsetFragment;
import com.google.android.car.kitchensink.bluetooth.MapMceTestFragment;
import com.google.android.car.kitchensink.cluster.InstrumentClusterFragment;
+import com.google.android.car.kitchensink.connectivity.ConnectivityFragment;
import com.google.android.car.kitchensink.cube.CubesTestFragment;
import com.google.android.car.kitchensink.diagnostic.DiagnosticTestFragment;
import com.google.android.car.kitchensink.displayinfo.DisplayInfoFragment;
@@ -167,6 +170,7 @@ public class KitchenSinkActivity extends CarDrawerActivity {
startActivity(intent);
});
add("activity view", ActivityViewTestFragment.class);
+ add("connectivity", ConnectivityFragment.class);
add("quit", KitchenSinkActivity.this::finish);
}
@@ -183,6 +187,7 @@ public class KitchenSinkActivity extends CarDrawerActivity {
private CarPropertyManager mPropertyManager;
private CarSensorManager mSensorManager;
private CarAppFocusManager mCarAppFocusManager;
+ private Object mPropertyManagerReady = new Object();
public CarHvacManager getHvacManager() {
return mHvacManager;
@@ -212,12 +217,20 @@ public class KitchenSinkActivity extends CarDrawerActivity {
setMainContent(R.layout.kitchen_content);
// Connection to Car Service does not work for non-automotive yet.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
- mCarApi = Car.createCar(this, mCarConnectionCallback);
- mCarApi.connect();
+ initCarApi();
}
Log.i(TAG, "onCreate");
}
+ private void initCarApi() {
+ if (mCarApi != null && mCarApi.isConnected()) {
+ mCarApi.disconnect();
+ mCarApi = null;
+ }
+ mCarApi = Car.createCar(this, mCarConnectionCallback);
+ mCarApi.connect();
+ }
+
@Override
protected void onStart() {
super.onStart();
@@ -268,18 +281,22 @@ public class KitchenSinkActivity extends CarDrawerActivity {
@Override
public void onConnected(Car car) {
Log.d(TAG, "Connected to Car Service");
- try {
- mHvacManager = (CarHvacManager) mCarApi.getCarManager(android.car.Car.HVAC_SERVICE);
- mPowerManager = (CarPowerManager) mCarApi.getCarManager(
- android.car.Car.POWER_SERVICE);
- mPropertyManager = (CarPropertyManager) mCarApi.getCarManager(
- android.car.Car.PROPERTY_SERVICE);
- mSensorManager = (CarSensorManager) mCarApi.getCarManager(
- android.car.Car.SENSOR_SERVICE);
- mCarAppFocusManager =
- (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE);
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "Car is not connected!", e);
+ synchronized (mPropertyManagerReady) {
+ try {
+ mHvacManager = (CarHvacManager) mCarApi.getCarManager(
+ android.car.Car.HVAC_SERVICE);
+ mPowerManager = (CarPowerManager) mCarApi.getCarManager(
+ android.car.Car.POWER_SERVICE);
+ mPropertyManager = (CarPropertyManager) mCarApi.getCarManager(
+ android.car.Car.PROPERTY_SERVICE);
+ mSensorManager = (CarSensorManager) mCarApi.getCarManager(
+ android.car.Car.SENSOR_SERVICE);
+ mCarAppFocusManager =
+ (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE);
+ mPropertyManagerReady.notifyAll();
+ } catch (CarNotConnectedException e) {
+ Log.e(TAG, "Car is not connected!", e);
+ }
}
}
@@ -322,4 +339,29 @@ public class KitchenSinkActivity extends CarDrawerActivity {
getDrawerController().closeDrawer();
}
}
+
+ // Use AsyncTask to refresh Car*Manager after car service connected
+ public void requestRefreshManager(final Runnable r, final Handler h) {
+ final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... unused) {
+ synchronized (mPropertyManagerReady) {
+ while (!mCarApi.isConnected()) {
+ try {
+ mPropertyManagerReady.wait();
+ } catch (InterruptedException e) {
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void unused) {
+ h.post(r);
+ }
+ };
+ task.execute();
+ }
}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java
new file mode 100644
index 0000000000..0ffa6bf37e
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java
@@ -0,0 +1,154 @@
+/*
+ * 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 com.google.android.car.kitchensink.connectivity;
+
+import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
+import android.net.NetworkRequest;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.Toast;
+
+import com.google.android.car.kitchensink.R;
+
+import java.util.ArrayList;
+
+@SuppressLint("SetTextI18n")
+public class ConnectivityFragment extends Fragment {
+ private static final String TAG = ConnectivityFragment.class.getSimpleName();
+
+ private final Handler mHandler = new Handler();
+ private final ArrayList<String> mNetworks = new ArrayList<>();
+
+ private ConnectivityManager mConnectivityManager;
+ private ArrayAdapter<String> mNetworksAdapter;
+
+ private final NetworkCallback mNetworkCallback = new NetworkCallback() {
+ @Override
+ public void onAvailable(Network network) {
+ showToast("onAvailable, netId: " + network);
+ refreshNetworks();
+ }
+
+ @Override
+ public void onLost(Network network) {
+ showToast("onLost, netId: " + network);
+ refreshNetworks();
+ }
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mConnectivityManager = getActivity().getSystemService(ConnectivityManager.class);
+
+ mConnectivityManager.addDefaultNetworkActiveListener(() -> refreshNetworks());
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.connectivity_fragment, container, false);
+
+ ListView networksView = view.findViewById(R.id.networks);
+ mNetworksAdapter = new ArrayAdapter<>(getActivity(), R.layout.list_item, mNetworks);
+ networksView.setAdapter(mNetworksAdapter);
+
+ setClickAction(view, R.id.networksRefresh, this::refreshNetworks);
+ setClickAction(view, R.id.networkRequestOemPaid, this::requestOemPaid);
+ setClickAction(view, R.id.networkRequestEth1, this::requestEth1);
+ setClickAction(view, R.id.networkReleaseNetwork, this::releaseNetworkRequest);
+
+ return view;
+ }
+
+ private void releaseNetworkRequest() {
+ mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+ showToast("Release request sent");
+ }
+
+ private void requestEth1() {
+ NetworkRequest request = new NetworkRequest.Builder()
+ .clearCapabilities()
+ .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
+ .setNetworkSpecifier("eth1")
+ .build();
+ mConnectivityManager.requestNetwork(request, mNetworkCallback, mHandler);
+ }
+
+ private void requestOemPaid() {
+ NetworkRequest request = new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID)
+ .build();
+
+ mConnectivityManager.requestNetwork(request, mNetworkCallback, mHandler);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ refreshNetworks();
+ }
+
+ private void setClickAction(View view, int id, Runnable action) {
+ view.findViewById(id).setOnClickListener(v -> action.run());
+ }
+
+ private void refreshNetworks() {
+ mNetworks.clear();
+
+ for (Network network : mConnectivityManager.getAllNetworks()) {
+ boolean isDefault = sameNetworkId(network, mConnectivityManager.getActiveNetwork());
+ NetworkCapabilities nc = mConnectivityManager.getNetworkCapabilities(network);
+ boolean isOemPaid = nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID);
+ boolean isInternet = nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+
+ NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);
+
+ mNetworks.add("netId: " + network.netId
+ + (isInternet ? " [INTERNET]" : "")
+ + (isDefault ? " [DEFAULT]" : "")
+ + (isOemPaid ? " [OEM-paid]" : "") + nc + " " + networkInfo);
+ }
+
+ mNetworksAdapter.notifyDataSetChanged();
+ }
+
+ private void showToast(String text) {
+ Log.d(TAG, "showToast: " + text);
+ Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
+ }
+
+ private static boolean sameNetworkId(Network net1, Network net2) {
+ return net1 != null && net2 != null && net1.netId == net2.netId;
+
+ }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
index a1f8e1dece..c7b80e8462 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
@@ -25,6 +25,7 @@ import android.car.hardware.hvac.CarHvacManager;
import android.hardware.automotive.vehicle.V2_0.VehicleAreaSeat;
import android.hardware.automotive.vehicle.V2_0.VehicleAreaWindow;
import android.os.Bundle;
+import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
@@ -76,6 +77,8 @@ public class HvacTestFragment extends Fragment {
private int mZoneForSetTempP;
private int mZoneForFanSpeed;
private int mZoneForFanPosition;
+ private List<CarPropertyConfig> mCarPropertyConfigs;
+ private View mHvacView;
private final CarHvacManager.CarHvacEventCallback mHvacCallback =
new CarHvacManager.CarHvacEventCallback () {
@@ -171,13 +174,9 @@ public class HvacTestFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
- mCarHvacManager = ((KitchenSinkActivity)getActivity()).getHvacManager();
+
super.onCreate(savedInstanceState);
- try {
- mCarHvacManager.registerCallback(mHvacCallback);
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "Car is not connected!");
- }
+
}
@Override
@@ -188,77 +187,85 @@ public class HvacTestFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
- View v = inflater.inflate(R.layout.hvac_test, container, false);
-
- List<CarPropertyConfig> props;
- try {
- props = mCarHvacManager.getPropertyList();
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "Failed to get list of properties", e);
- props = new ArrayList<>();
- }
+ mHvacView = inflater.inflate(R.layout.hvac_test, container, false);
+ final Runnable r = () -> {
+ mCarHvacManager = ((KitchenSinkActivity) getActivity()).getHvacManager();
+ try {
+ mCarHvacManager.registerCallback(mHvacCallback);
+ } catch (CarNotConnectedException e) {
+ Log.e(TAG, "Car is not connected!");
+ }
+ try {
+ mCarPropertyConfigs = mCarHvacManager.getPropertyList();
+ } catch (CarNotConnectedException e) {
+ Log.e(TAG, "Failed to get list of properties", e);
+ mCarPropertyConfigs = new ArrayList<>();
+ }
+ for (CarPropertyConfig prop : mCarPropertyConfigs) {
+ int propId = prop.getPropertyId();
- for(CarPropertyConfig prop : props) {
- int propId = prop.getPropertyId();
+ if (DBG) {
+ Log.d(TAG, prop.toString());
+ }
- if(DBG) {
- Log.d(TAG, prop.toString());
+ switch(propId) {
+ case CarHvacManager.ID_OUTSIDE_AIR_TEMP:
+ configureOutsideTemp(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_DUAL_ZONE_ON:
+ configureDualOn(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_AC_ON:
+ configureAcOn(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_FAN_DIRECTION:
+ configureFanPosition(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT:
+ configureFanSpeed(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_TEMP_SETPOINT:
+ configureTempSetpoint(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON:
+ configureAutoModeOn(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON:
+ configureRecircOn(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_MAX_AC_ON:
+ configureMaxAcOn(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_ZONED_MAX_DEFROST_ON:
+ configureMaxDefrostOn(mHvacView, prop);
+ break;
+ case CarHvacManager.ID_WINDOW_DEFROSTER_ON:
+ configureDefrosterOn(mHvacView, prop);
+ break;
+ default:
+ Log.w(TAG, "propertyId " + propId + " is not handled");
+ break;
+ }
}
- switch(propId) {
- case CarHvacManager.ID_OUTSIDE_AIR_TEMP:
- configureOutsideTemp(v, prop);
- break;
- case CarHvacManager.ID_ZONED_DUAL_ZONE_ON:
- configureDualOn(v, prop);
- break;
- case CarHvacManager.ID_ZONED_AC_ON:
- configureAcOn(v, prop);
- break;
- case CarHvacManager.ID_ZONED_FAN_DIRECTION:
- configureFanPosition(v, prop);
- break;
- case CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT:
- configureFanSpeed(v, prop);
- break;
- case CarHvacManager.ID_ZONED_TEMP_SETPOINT:
- configureTempSetpoint(v, prop);
- break;
- case CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON:
- configureAutoModeOn(v, prop);
- break;
- case CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON:
- configureRecircOn(v, prop);
- break;
- case CarHvacManager.ID_ZONED_MAX_AC_ON:
- configureMaxAcOn(v, prop);
- break;
- case CarHvacManager.ID_ZONED_MAX_DEFROST_ON:
- configureMaxDefrostOn(v, prop);
- break;
- case CarHvacManager.ID_WINDOW_DEFROSTER_ON:
- configureDefrosterOn(v, prop);
- break;
- default:
- Log.w(TAG, "propertyId " + propId + " is not handled");
- break;
- }
- }
+ mTvFanSpeed = (TextView) mHvacView.findViewById(R.id.tvFanSpeed);
+ mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
+ mTvDTemp = (TextView) mHvacView.findViewById(R.id.tvDTemp);
+ mTvDTemp.setText(String.valueOf(mCurDTemp));
+ mTvPTemp = (TextView) mHvacView.findViewById(R.id.tvPTemp);
+ mTvPTemp.setText(String.valueOf(mCurPTemp));
+ mTvOutsideTemp = (TextView) mHvacView.findViewById(R.id.tvOutsideTemp);
+ mTvOutsideTemp.setText("N/A");
+ };
- mTvFanSpeed = (TextView) v.findViewById(R.id.tvFanSpeed);
- mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
- mTvDTemp = (TextView) v.findViewById(R.id.tvDTemp);
- mTvDTemp.setText(String.valueOf(mCurDTemp));
- mTvPTemp = (TextView) v.findViewById(R.id.tvPTemp);
- mTvPTemp.setText(String.valueOf(mCurPTemp));
- mTvOutsideTemp = (TextView) v.findViewById(R.id.tvOutsideTemp);
- mTvOutsideTemp.setText("N/A");
+ ((KitchenSinkActivity) getActivity()).requestRefreshManager(r,
+ new Handler(getContext().getMainLooper()));
if(DBG) {
Log.d(TAG, "Starting HvacTestFragment");
}
- return v;
+ return mHvacView;
}
private void configureOutsideTemp(View v, CarPropertyConfig prop) {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java
index fed1fbd322..9a6c2b92cf 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java
@@ -20,6 +20,7 @@ import android.car.CarNotConnectedException;
import android.car.hardware.power.CarPowerManager;
import android.content.Context;
import android.os.Bundle;
+import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
@@ -58,16 +59,20 @@ public class PowerTestFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
- mCarPowerManager = ((KitchenSinkActivity)getActivity()).getPowerManager();
- mExecutor = new ThreadPerTaskExecutor();
+ final Runnable r = () -> {
+ mCarPowerManager = ((KitchenSinkActivity) getActivity()).getPowerManager();
+ mExecutor = new ThreadPerTaskExecutor();
+ try {
+ mCarPowerManager.setListener(mPowerListener, mExecutor);
+ } catch (CarNotConnectedException e) {
+ Log.e(TAG, "Car is not connected!");
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "CarPowerManager listener was not cleared");
+ }
+ };
+ ((KitchenSinkActivity) getActivity()).requestRefreshManager(r,
+ new Handler(getContext().getMainLooper()));
super.onCreate(savedInstanceState);
- try {
- mCarPowerManager.setListener(mPowerListener, mExecutor);
- } catch (CarNotConnectedException e) {
- Log.e(TAG, "Car is not connected!");
- } catch (IllegalStateException e) {
- Log.e(TAG, "CarPowerManager listener was not cleared");
- }
}
@Override
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/property/PropertyTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/property/PropertyTestFragment.java
index fc6621a7ca..ff1c402fea 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/property/PropertyTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/property/PropertyTestFragment.java
@@ -26,6 +26,7 @@ import android.content.DialogInterface.OnClickListener;
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
import android.hardware.automotive.vehicle.V2_0.VehiclePropertyType;
import android.os.Bundle;
+import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
@@ -85,20 +86,23 @@ public class PropertyTestFragment extends Fragment implements OnItemSelectedList
mPropertyId = view.findViewById(R.id.sPropertyId);
mScrollView = view.findViewById(R.id.svEventLog);
mSetValue = view.findViewById(R.id.etSetPropertyValue);
-
- populateConfigList();
- mListView.setAdapter(new PropertyListAdapter(mPropInfo, mMgr, mEventLog, mScrollView,
- mActivity));
-
- // Configure dropdown menu for propertyId spinner
- ArrayAdapter<PropertyInfo> adapter =
- new ArrayAdapter<PropertyInfo>(mActivity, android.R.layout.simple_spinner_item,
- mPropInfo);
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- mPropertyId.setAdapter(adapter);
- mPropertyId.setOnItemSelectedListener(this);
-
-
+ mActivity = (KitchenSinkActivity) getActivity();
+
+ final Runnable r = () -> {
+ mMgr = mActivity.getPropertyManager();
+ populateConfigList();
+ mListView.setAdapter(new PropertyListAdapter(mPropInfo, mMgr, mEventLog, mScrollView,
+ mActivity));
+
+ // Configure dropdown menu for propertyId spinner
+ ArrayAdapter<PropertyInfo> adapter =
+ new ArrayAdapter<PropertyInfo>(mActivity, android.R.layout.simple_spinner_item,
+ mPropInfo);
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ mPropertyId.setAdapter(adapter);
+ mPropertyId.setOnItemSelectedListener(this);
+ };
+ mActivity.requestRefreshManager(r, new Handler(getContext().getMainLooper()));
// Configure listeners for buttons
Button b = view.findViewById(R.id.bGetProperty);
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 abc2c10b49..1440ff0571 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
@@ -99,17 +99,19 @@ public class SensorsTestFragment extends Fragment {
View view = inflater.inflate(R.layout.sensors, container, false);
mActivity = (KitchenSinkActivity) getHost();
-
mSensorInfo = (TextView) view.findViewById(R.id.sensor_info);
mNaString = getContext().getString(R.string.sensor_na);
-
return view;
}
@Override
public void onResume() {
super.onResume();
- initPermissions();
+ final Runnable r = () -> {
+ initPermissions();
+ };
+ ((KitchenSinkActivity) getActivity()).requestRefreshManager(r,
+ new Handler(getContext().getMainLooper()));
}
@Override
@@ -207,6 +209,12 @@ public class SensorsTestFragment extends Fragment {
case CarSensorManager.SENSOR_TYPE_FUEL_DOOR_OPEN:
summary.add(getFuelDoorOpen(event));
break;
+ case CarSensorManager.SENSOR_TYPE_IGNITION_STATE:
+ summary.add(getContext().getString(R.string.sensor_ignition_status,
+ getTimestamp(event),
+ event == null ? mNaString :
+ event.getIgnitionStateData(null).ignitionState));
+ break;
case CarSensorManager.SENSOR_TYPE_PARKING_BRAKE:
summary.add(getContext().getString(R.string.sensor_parking_brake,
getTimestamp(event),
@@ -223,18 +231,15 @@ public class SensorsTestFragment extends Fragment {
getTimestamp(event),
event == null ? mNaString : event.getNightData(null).isNightMode));
break;
- case CarSensorManager.SENSOR_TYPE_ENVIRONMENT:
+ case CarSensorManager.SENSOR_TYPE_ENV_OUTSIDE_TEMPERATURE:
String temperature = mNaString;
- String pressure = mNaString;
if (event != null) {
CarSensorEvent.EnvironmentData env = event.getEnvironmentData(null);
temperature = Float.isNaN(env.temperature) ? temperature :
String.valueOf(env.temperature);
- pressure = Float.isNaN(env.pressure) ? pressure :
- String.valueOf(env.pressure);
}
summary.add(getContext().getString(R.string.sensor_environment,
- getTimestamp(event), temperature, pressure));
+ getTimestamp(event), temperature));
break;
case CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE:
if(event != null) {