diff options
author | Bill Yi <byi@google.com> | 2018-11-28 18:35:00 -0800 |
---|---|---|
committer | Bill Yi <byi@google.com> | 2018-11-28 18:35:00 -0800 |
commit | 0f8320f6b95736ea4b703764a7d11a8a6ca13674 (patch) | |
tree | d7b300e81f05e45345ada1ffcaf39b2512dd8f6f /tests/EmbeddedKitchenSinkApp | |
parent | f02b56678700a4035d0ad8882f7d20371bb96ee2 (diff) | |
parent | 911e6566751a60c29eada6ad0679694bed11be4f (diff) | |
download | Car-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')
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) { |