13c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata/* 23c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * Copyright (C) 2017 The Android Open Source Project 33c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * 43c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * Licensed under the Apache License, Version 2.0 (the "License"); 53c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * you may not use this file except in compliance with the License. 63c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * You may obtain a copy of the License at 73c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * 83c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * http://www.apache.org/licenses/LICENSE-2.0 93c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * 103c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * Unless required by applicable law or agreed to in writing, software 113c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * distributed under the License is distributed on an "AS IS" BASIS, 123c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * See the License for the specific language governing permissions and 143c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata * limitations under the License. 153c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata */ 163c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 173c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granatapackage com.google.android.car.kitchensink.diagnostic; 183c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 193c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.annotation.Nullable; 203c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.car.Car; 2125e89468119cd0b109f62c751446dfdd8e903143Enrico Granataimport android.car.diagnostic.CarDiagnosticEvent; 2225e89468119cd0b109f62c751446dfdd8e903143Enrico Granataimport android.car.diagnostic.CarDiagnosticManager; 2325e89468119cd0b109f62c751446dfdd8e903143Enrico Granataimport android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener; 243c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.graphics.Color; 253c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.os.Bundle; 263c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.support.car.hardware.CarSensorManager; 273c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.support.v4.app.Fragment; 283c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.util.Log; 293c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.view.LayoutInflater; 303c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.view.View; 313c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.view.ViewGroup; 323c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport android.widget.TextView; 333c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport com.google.android.car.kitchensink.KitchenSinkActivity; 343c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport com.google.android.car.kitchensink.R; 353c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granataimport java.util.Objects; 363c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 373c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 383c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granatapublic class DiagnosticTestFragment extends Fragment { 393c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private static final String TAG = "CAR.DIAGNOSTIC.KS"; 403c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 413c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private KitchenSinkActivity mActivity; 423c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private TextView mLiveDiagnosticInfo; 433c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private TextView mFreezeDiagnosticInfo; 443c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private CarDiagnosticManager mDiagnosticManager; 453c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 463c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private final class TestListener implements OnDiagnosticEventListener { 473c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private final TextView mTextView; 483c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 493c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata TestListener(TextView view) { 503c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mTextView = Objects.requireNonNull(view); 513c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 523c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 533c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Override 543c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata public void onDiagnosticEvent(CarDiagnosticEvent carDiagnosticEvent) { 553c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mTextView.post(() -> mTextView.setText(carDiagnosticEvent.toString())); 563c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 573c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 583c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 593c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private OnDiagnosticEventListener mLiveListener; 603c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private OnDiagnosticEventListener mFreezeListener; 613c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 623c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Nullable 633c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Override 643c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata public View onCreateView( 653c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata LayoutInflater inflater, 663c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Nullable ViewGroup container, 673c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Nullable Bundle savedInstanceState) { 683c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata View view = inflater.inflate(R.layout.diagnostic, container, false); 693c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mActivity = (KitchenSinkActivity) getHost(); 703c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 713c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mLiveDiagnosticInfo = (TextView) view.findViewById(R.id.live_diagnostic_info); 723c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mLiveDiagnosticInfo.setTextColor(Color.RED); 733c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mLiveListener = new TestListener(mLiveDiagnosticInfo); 743c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 753c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mFreezeDiagnosticInfo = (TextView) view.findViewById(R.id.freeze_diagnostic_info); 763c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mFreezeDiagnosticInfo.setTextColor(Color.RED); 773c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mFreezeListener = new TestListener(mFreezeDiagnosticInfo); 783c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 793c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata return view; 803c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 813c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 823c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Override 833c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata public void onResume() { 843c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata super.onResume(); 853c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata resumeDiagnosticManager(); 863c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 873c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 883c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata @Override 893c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata public void onPause() { 903c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata super.onPause(); 913c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata pauseDiagnosticManager(); 923c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 933c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 943c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private void resumeDiagnosticManager() { 953c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata try { 963c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mDiagnosticManager = 973c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata (CarDiagnosticManager)mActivity.getCar().getCarManager(Car.DIAGNOSTIC_SERVICE); 983c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata if (mLiveListener != null) { 993c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mDiagnosticManager.registerListener(mLiveListener, 1005e075dac94101efe1bdcde105b8c4194eb9e70d0Enrico Granata CarDiagnosticManager.FRAME_TYPE_LIVE, 1013c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata CarSensorManager.SENSOR_RATE_NORMAL); 1023c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1033c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata if (mFreezeListener != null) { 1043c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mDiagnosticManager.registerListener(mFreezeListener, 1055e075dac94101efe1bdcde105b8c4194eb9e70d0Enrico Granata CarDiagnosticManager.FRAME_TYPE_FREEZE, 1063c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata CarSensorManager.SENSOR_RATE_NORMAL); 1073c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1083c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } catch (android.car.CarNotConnectedException|android.support.car.CarNotConnectedException e) { 1093c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata Log.e(TAG, "Car not connected or not supported", e); 1103c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1113c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1123c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata 1133c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata private void pauseDiagnosticManager() { 1143c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata if (mDiagnosticManager != null) { 1153c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata if (mLiveListener != null) { 1163c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mDiagnosticManager.unregisterListener(mLiveListener); 1173c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1183c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata if (mFreezeListener != null) { 1193c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata mDiagnosticManager.unregisterListener(mFreezeListener); 1203c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1213c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1223c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata } 1233c06d02c560c9e0af0293f5f3adf9bb45822b201Enrico Granata} 124