1 /* 2 * Copyright (C) 2016 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.cluster.demorenderer; 18 19 import android.car.cluster.demorenderer.CallStateMonitor.PhoneStateListener; 20 import android.content.Context; 21 import android.graphics.Bitmap; 22 import android.graphics.BitmapFactory; 23 import android.telephony.TelephonyManager; 24 import android.util.Log; 25 26 /** 27 * Demo for rendering phone status in instrument cluster. 28 */ 29 public class DemoPhoneRenderer implements PhoneStateListener { 30 private static final String TAG = DemoPhoneRenderer.class.getSimpleName(); 31 32 private final DemoInstrumentClusterView mView; 33 private final Context mContext; 34 35 private static Bitmap sDefaultAvatar; 36 37 private int mCurrentState; 38 private String mCurrentNumber; 39 DemoPhoneRenderer(DemoInstrumentClusterView view)40 DemoPhoneRenderer(DemoInstrumentClusterView view) { 41 mView = view; 42 mContext = view.getContext(); 43 } 44 45 @Override onCallStateChanged(int state, String number)46 public void onCallStateChanged(int state, String number) { 47 Log.d(TAG, "onCallStateChanged, state: " + state + ", number: " + number); 48 mCurrentState = state; 49 mCurrentNumber = PhoneBook.getFormattedNumber(number); 50 51 if (TelephonyManager.CALL_STATE_IDLE == state) { 52 mView.hidePhone(); 53 } else { 54 mView.showPhone(); 55 setPhoneTitleWithState(mCurrentNumber); 56 mView.setPhoneImage(getDefaultAvatar()); 57 } 58 } 59 60 @Override onContactDetailsUpdated(CharSequence name, CharSequence typeLabel, boolean isVoiceMail)61 public void onContactDetailsUpdated(CharSequence name, CharSequence typeLabel, 62 boolean isVoiceMail) { 63 Log.d(TAG, "onContactDetailsUpdated, name: " + name + ", typeLabel: " + typeLabel 64 + ", isVoicemail: " + isVoiceMail); 65 setPhoneTitleWithState(name.toString()); 66 mView.setPhoneSubtitle(mCurrentNumber); 67 } 68 setPhoneTitleWithState(String text)69 private void setPhoneTitleWithState(String text) { 70 mView.setPhoneTitle(getCallStateToDisplay(mCurrentState) + " · " + text); 71 } 72 73 @Override onContactPhotoUpdated(Bitmap picture)74 public void onContactPhotoUpdated(Bitmap picture) { 75 Log.d(TAG, "onContactPhotoUpdated, picture: " + picture); 76 if (picture != null) { 77 mView.setPhoneImage(picture); 78 } 79 } 80 81 getDefaultAvatar()82 private Bitmap getDefaultAvatar() { 83 if (sDefaultAvatar == null) { 84 sDefaultAvatar = BitmapFactory.decodeResource(mContext.getResources(), 85 R.drawable.ic_contactavatar_large_light); 86 } 87 return sDefaultAvatar; 88 } 89 getCallStateToDisplay(int state)90 private String getCallStateToDisplay(int state) { 91 switch (state) { 92 case TelephonyManager.CALL_STATE_OFFHOOK: 93 return mContext.getString(R.string.call_state_active); 94 case TelephonyManager.CALL_STATE_RINGING: 95 return mContext.getString(R.string.call_state_ringing); 96 default: 97 Log.w(TAG, "Unexpected call state: " + state); 98 return ""; 99 } 100 } 101 } 102