CallCardFragment.java revision af2589a6aa68d9906fe46b31ffaf214010632c02
1e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng/* 2e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * Copyright (C) 2013 The Android Open Source Project 3e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * 4e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 5e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * you may not use this file except in compliance with the License. 6e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * You may obtain a copy of the License at 7e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * 8e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 9e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * 10e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * Unless required by applicable law or agreed to in writing, software 11e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 12e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * See the License for the specific language governing permissions and 14e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * limitations under the License 15e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng */ 16e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng 17e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Chengpackage com.android.incallui; 18e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng 19ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordonimport android.animation.LayoutTransition; 20b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordonimport android.content.Context; 21988d06b64b99a13f4f060dc82594edcb738d9113Yorke Leeimport android.graphics.Bitmap; 22988d06b64b99a13f4f060dc82594edcb738d9113Yorke Leeimport android.graphics.drawable.BitmapDrawable; 23988d06b64b99a13f4f060dc82594edcb738d9113Yorke Leeimport android.graphics.drawable.Drawable; 24e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Chengimport android.os.Bundle; 257ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Leeimport android.text.TextUtils; 26a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordonimport android.view.Gravity; 27e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Chengimport android.view.LayoutInflater; 28e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Chengimport android.view.View; 299240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Leeimport android.view.View.OnClickListener; 30e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Chengimport android.view.ViewGroup; 31150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordonimport android.view.ViewStub; 32988d06b64b99a13f4f060dc82594edcb738d9113Yorke Leeimport android.widget.ImageView; 33a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordonimport android.widget.TextView; 34e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng 351fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Chengimport com.android.incalluibind.ServiceFactory; 36a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordonimport com.android.services.telephony.common.Call; 37a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 38e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng/** 39e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng * Fragment for call card. 40e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng */ 411fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Chengpublic class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPresenter.CallCardUi> 42a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon implements CallCardPresenter.CallCardUi { 43a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon 4488dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon // Primary caller info 45a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon private TextView mPhoneNumber; 467ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee private TextView mNumberLabel; 478b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng private TextView mPrimaryName; 48a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon private TextView mCallStateLabel; 4988dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon private ImageView mPhoto; 5088dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon private TextView mElapsedTime; 513d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon private View mProviderInfo; 523d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon private TextView mProviderLabel; 533d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon private TextView mProviderNumber; 54ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon private ViewGroup mSupplementaryInfoContainer; 5588dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon 5688dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon // Secondary caller info 57150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon private ViewStub mSecondaryCallInfo; 58150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon private TextView mSecondaryCallName; 594bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon private ImageView mSecondaryPhoto; 609240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee private View mSecondaryPhotoOverlay; 61150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon 62b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // Cached DisplayMetrics density. 63b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon private float mDensity; 64b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 65a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon @Override 661fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng CallCardPresenter.CallCardUi getUi() { 671fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng return this; 681fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng } 691fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 701fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng @Override 71a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon CallCardPresenter createPresenter() { 729de3d7c5188c02cabf03799f87d494ee7dc702cbSantos Cordon return new CallCardPresenter(); 73a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon } 74e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng 75e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng @Override 761fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng public void onCreate(Bundle savedInstanceState) { 771fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng super.onCreate(savedInstanceState); 781fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 798b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng final CallList calls = CallList.getInstance(); 808b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng final Call call = calls.getFirstCall(); 818b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng getPresenter().init(getActivity(), ServiceFactory.newPhoneNumberService(getActivity()), 828b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng call); 831fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng } 841fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 851fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng @Override 86e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng public View onCreateView(LayoutInflater inflater, ViewGroup container, 87e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng Bundle savedInstanceState) { 881fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng super.onCreateView(inflater, container, savedInstanceState); 891fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 90b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon mDensity = getResources().getDisplayMetrics().density; 91b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 92150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon return inflater.inflate(R.layout.call_card, container, false); 93e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng } 94a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon 95a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon @Override 96a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon public void onViewCreated(View view, Bundle savedInstanceState) { 971fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng super.onViewCreated(view, savedInstanceState); 981fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 99a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon mPhoneNumber = (TextView) view.findViewById(R.id.phoneNumber); 1008b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mPrimaryName = (TextView) view.findViewById(R.id.name); 1017ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee mNumberLabel = (TextView) view.findViewById(R.id.label); 102150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon mSecondaryCallInfo = (ViewStub) view.findViewById(R.id.secondary_call_info); 103988d06b64b99a13f4f060dc82594edcb738d9113Yorke Lee mPhoto = (ImageView) view.findViewById(R.id.photo); 104a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon mCallStateLabel = (TextView) view.findViewById(R.id.callStateLabel); 10588dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon mElapsedTime = (TextView) view.findViewById(R.id.elapsedTime); 1063d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderInfo = view.findViewById(R.id.providerInfo); 1073d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderLabel = (TextView) view.findViewById(R.id.providerLabel); 1083d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderNumber = (TextView) view.findViewById(R.id.providerAddress); 109ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon mSupplementaryInfoContainer = 110ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon (ViewGroup) view.findViewById(R.id.supplementary_info_container); 111a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon } 112a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon 113a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon @Override 1145b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen public void setVisible(boolean on) { 1155b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen if (on) { 1165b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen getView().setVisibility(View.VISIBLE); 1175b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen } else { 1185b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen getView().setVisibility(View.INVISIBLE); 1195b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen } 1205b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen } 1215b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen 1225b9034b5b1b48a4339dd2f893a851cc64d6279dfChristine Chen @Override 1238b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng public void setPrimaryName(String name, boolean nameIsNumber) { 1248b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng if (TextUtils.isEmpty(name)) { 1258b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mPrimaryName.setText(""); 1268b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } else { 1278b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mPrimaryName.setText(name); 1288b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 1298b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng // Set direction of the name field 1308b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng int nameDirection = View.TEXT_DIRECTION_INHERIT; 1318b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng if (nameIsNumber) { 1328b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng nameDirection = View.TEXT_DIRECTION_LTR; 1338b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1348b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mPrimaryName.setTextDirection(nameDirection); 1358b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1361fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng } 1371fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 1381fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng @Override 1398b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng public void setPrimaryImage(Bitmap image) { 1402f21162c5eb1dbb11f892601574d4de7170b4960Chiao Cheng if (image != null) { 1412f21162c5eb1dbb11f892601574d4de7170b4960Chiao Cheng setDrawableToImageView(mPhoto, new BitmapDrawable(getResources(), image)); 1422f21162c5eb1dbb11f892601574d4de7170b4960Chiao Cheng } 1431fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng } 1441fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng 1451fa0782281ef7774ddcdfdf8efb7d8f65cf589e7Chiao Cheng @Override 1468b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng public void setPrimaryPhoneNumber(String number) { 1474bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon // Set the number 1484bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon if (TextUtils.isEmpty(number)) { 1494bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon mPhoneNumber.setText(""); 1504bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon mPhoneNumber.setVisibility(View.GONE); 1514bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } else { 1527ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee mPhoneNumber.setText(number); 1537ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee mPhoneNumber.setVisibility(View.VISIBLE); 1547ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee mPhoneNumber.setTextDirection(View.TEXT_DIRECTION_LTR); 1557ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee } 1568b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1577ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee 1588b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng @Override 1598b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng public void setPrimaryLabel(String label) { 1608b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng if (!TextUtils.isEmpty(label)) { 1618b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mNumberLabel.setText(label); 1628b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mNumberLabel.setVisibility(View.VISIBLE); 1638b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } else { 1648b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng mNumberLabel.setVisibility(View.GONE); 1658b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1668b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 1678b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1688b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 1698b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng @Override 1708b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng public void setPrimaryGateway(String gatewayLabel, String gatewayNumber) { 1713d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon if (!TextUtils.isEmpty(gatewayLabel) && !TextUtils.isEmpty(gatewayNumber)) { 1723d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderLabel.setText(gatewayLabel); 1733d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderNumber.setText(gatewayNumber); 1743d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderInfo.setVisibility(View.VISIBLE); 1753d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon } else { 1763d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon mProviderInfo.setVisibility(View.GONE); 1773d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon } 1788b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng } 1793d9e39bef65a67b9b04a2584b12f8b655fcc2e7cSantos Cordon 1808b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng @Override 1818b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng public void setPrimary(String number, String name, boolean nameIsNumber, String label, 1828b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng Drawable photo, boolean isConference, String gatewayLabel, String gatewayNumber) { 1838b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng Log.d(this, "Setting primary call [" + gatewayLabel + "][" + gatewayNumber + "]"); 184a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon 1858b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng if (isConference) { 1868b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng name = getView().getResources().getString(R.string.card_title_conf_call); 1878b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng photo = getView().getResources().getDrawable(R.drawable.picture_conference); 1884bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } 1897ef707319c0e3563ff92a772ba53cb5dca0e3ae1Yorke Lee 1908b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng setPrimaryPhoneNumber(number); 1918b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 1928b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng // Set any gateway information 1938b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng setPrimaryGateway(gatewayLabel, gatewayNumber); 1948b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 1958b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng // set the name field. 1968b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng setPrimaryName(name, nameIsNumber); 1978b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng 1984bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon // Set the label (Mobile, Work, etc) 1998b6c8d0dbfba6eabe3d835f8cdcec8a13e253d0cChiao Cheng setPrimaryLabel(label); 2004bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon 2014bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon setDrawableToImageView(mPhoto, photo); 2024bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } 2034bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon 2044bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon @Override 2051df52df7a0248814fbd4575103059a8b427f5d9aSantos Cordon public void setSecondary(boolean show, String name, String label, Drawable photo) { 2064bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon 2074bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon if (show) { 2084bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon showAndInitializeSecondaryCallInfo(); 2094bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon 2104bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon mSecondaryCallName.setText(name); 2114bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon setDrawableToImageView(mSecondaryPhoto, photo); 2124bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } else { 2134bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon mSecondaryCallInfo.setVisibility(View.GONE); 2144bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } 215a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon } 216a012c22dfbfedffe2e751f9b1ab776baa325a26fSantos Cordon 217a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon @Override 218af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng public void setSecondaryImage(Bitmap bitmap) { 219af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng if (bitmap != null) { 220af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng setDrawableToImageView(mSecondaryPhoto, new BitmapDrawable(getResources(), bitmap)); 221af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng } 222af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng } 223af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng 224af2589a6aa68d9906fe46b31ffaf214010632c02Chiao Cheng @Override 225b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon public void setCallState(int state, Call.DisconnectCause cause, boolean bluetoothOn) { 226a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon String callStateLabel = null; 227a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 228a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // States other than disconnected not yet supported 229b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon callStateLabel = getCallStateLabelFromState(state, cause); 230a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 2311a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng Log.v(this, "setCallState ", callStateLabel); 2321a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng Log.v(this, "DisconnectCause ", cause); 2331a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng Log.v(this, "bluetooth on ", bluetoothOn); 234a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 235a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon if (!TextUtils.isEmpty(callStateLabel)) { 236ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon // There are cases where we totally skip the animation 237ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon final boolean skipAnimation = (state == Call.State.DIALING 238ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon || state == Call.State.DISCONNECTED); 239ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon 240ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon LayoutTransition transition = null; 241ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon if (skipAnimation) { 242ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon transition = mSupplementaryInfoContainer.getLayoutTransition(); 243ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon mSupplementaryInfoContainer.setLayoutTransition(null); 244ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon } 245ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon 246a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon mCallStateLabel.setVisibility(View.VISIBLE); 247a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon mCallStateLabel.setText(callStateLabel); 248b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 249ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon if (skipAnimation) { 250ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon mSupplementaryInfoContainer.setLayoutTransition(transition); 251ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon } 252ea83891eb10811d5020cc5fdaf34b711012dab32Santos Cordon 253b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon if (Call.State.INCOMING == state) { 254b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon setBluetoothOn(bluetoothOn); 255b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } 256a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon } else { 257a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon mCallStateLabel.setVisibility(View.GONE); 258a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // Gravity is aligned left when receiving an incoming call in landscape. 259a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // In that rare case, the gravity needs to be reset to the right. 260a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // Also, setText("") is used since there is a delay in making the view GONE, 261a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // so the user will otherwise see the text jump to the right side before disappearing. 262a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon if(mCallStateLabel.getGravity() != Gravity.END) { 263a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon mCallStateLabel.setText(""); 264a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon mCallStateLabel.setGravity(Gravity.END); 265a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon } 266a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon } 267a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon } 268a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 26988dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon @Override 27088dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon public void setPrimaryCallElapsedTime(boolean show, String callTimeElapsed) { 27188dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon if (show) { 27288dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon if (mElapsedTime.getVisibility() != View.VISIBLE) { 27388dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon AnimationUtils.Fade.show(mElapsedTime); 27488dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon } 27588dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon mElapsedTime.setText(callTimeElapsed); 27688dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon } else { 27788dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon // hide() animation has no effect if it is already hidden. 27888dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon AnimationUtils.Fade.hide(mElapsedTime, View.INVISIBLE); 27988dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon } 28088dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon } 28188dbc6b3dbf35b322fe09c1a289c7e884e8fba22Santos Cordon 2824bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon private void setDrawableToImageView(ImageView view, Drawable photo) { 2834bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon if (photo == null) { 2840e27ca6253114be60b85f912a1af62dbf35c1b9eSantos Cordon photo = view.getResources().getDrawable(R.drawable.picture_unknown); 2854bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } 2864bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon 2874bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon final Drawable current = view.getDrawable(); 2884bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon if (current == null) { 2894bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon view.setImageDrawable(photo); 2904bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon AnimationUtils.Fade.show(view); 2914bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } else { 2924bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon AnimationUtils.startCrossFade(view, current, photo); 2934bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon mPhoto.setVisibility(View.VISIBLE); 2944bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } 2954bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon } 2964bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon 297b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon private void setBluetoothOn(boolean onOff) { 298b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // Also, display a special icon (alongside the "Incoming call" 299b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // label) if there's an incoming call and audio will be routed 300b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // to bluetooth when you answer it. 301b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon final int bluetoothIconId = R.drawable.ic_incoming_call_bluetooth; 302b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 303b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon if (onOff) { 304b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon mCallStateLabel.setCompoundDrawablesWithIntrinsicBounds(bluetoothIconId, 0, 0, 0); 305b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon mCallStateLabel.setCompoundDrawablePadding((int) (mDensity * 5)); 306b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else { 307b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // Clear out any icons 308b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon mCallStateLabel.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 309b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } 310b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } 311b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 312b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon /** 313b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon * Gets the call state label based on the state of the call and 314b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon * cause of disconnect 315b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon */ 316b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon private String getCallStateLabelFromState(int state, Call.DisconnectCause cause) { 317b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon final Context context = getView().getContext(); 318b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon String callStateLabel = null; // Label to display as part of the call banner 319b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 320b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon if (Call.State.IDLE == state) { 321b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // "Call state" is meaningless in this state. 322b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 323b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else if (Call.State.ACTIVE == state) { 324b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // We normally don't show a "call state label" at all in 325b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // this state (but see below for some special cases). 326b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 327b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else if (Call.State.ONHOLD == state) { 328b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon callStateLabel = context.getString(R.string.card_title_on_hold); 329b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 330b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else if (Call.State.DIALING == state) { 331b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon callStateLabel = context.getString(R.string.card_title_dialing); 332b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 333b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else if (Call.State.INCOMING == state || Call.State.CALL_WAITING == state) { 334b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon callStateLabel = context.getString(R.string.card_title_incoming_call); 335b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 336b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // TODO(klp): Add a disconnecting state 337b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon //} else if (Call.State.DISCONNECTING) { 338b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // While in the DISCONNECTING state we display a "Hanging up" 339b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // message in order to make the UI feel more responsive. (In 340b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // GSM it's normal to see a delay of a couple of seconds while 341b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // negotiating the disconnect with the network, so the "Hanging 342b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // up" state at least lets the user know that we're doing 343b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon // something. This state is currently not used with CDMA.) 344b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon //callStateLabel = context.getString(R.string.card_title_hanging_up); 345b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 346b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else if (Call.State.DISCONNECTED == state) { 347b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon callStateLabel = getCallFailedString(cause); 348b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 349b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } else { 3501a7f2bcab2d2023f2ee4cfb0bc57bc265b5aab87Chiao Cheng Log.wtf(this, "updateCallStateWidgets: unexpected call: " + state); 351b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } 352b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 353b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon return callStateLabel; 354b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon } 355b70af18a174fa334d15b28a2cdaa617f9ba2a4b7Santos Cordon 356a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon /** 357a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon * Maps the disconnect cause to a resource string. 358a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon */ 359a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon private String getCallFailedString(Call.DisconnectCause cause) { 360a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon int resID = R.string.card_title_call_ended; 361a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 362a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // TODO: The card *title* should probably be "Call ended" in all 363a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // cases, but if the DisconnectCause was an error condition we should 364a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon // probably also display the specific failure reason somewhere... 365a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 366a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon switch (cause) { 367a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case BUSY: 368a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_userBusy; 369a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 370a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 371a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case CONGESTION: 372a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_congestion; 373a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 374a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 375a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case TIMED_OUT: 376a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_timedOut; 377a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 378a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 379a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case SERVER_UNREACHABLE: 380a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_server_unreachable; 381a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 382a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 383a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case NUMBER_UNREACHABLE: 384a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_number_unreachable; 385a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 386a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 387a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case INVALID_CREDENTIALS: 388a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_invalid_credentials; 389a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 390a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 391a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case SERVER_ERROR: 392a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_server_error; 393a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 394a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 395a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case OUT_OF_NETWORK: 396a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_out_of_network; 397a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 398a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 399a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case LOST_SIGNAL: 400a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case CDMA_DROP: 401a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_noSignal; 402a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 403a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 404a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case LIMIT_EXCEEDED: 405a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_limitExceeded; 406a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 407a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 408a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case POWER_OFF: 409a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_powerOff; 410a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 411a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 412a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case ICC_ERROR: 413a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_simError; 414a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 415a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 416a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case OUT_OF_SERVICE: 417a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_outOfService; 418a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 419a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 420a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case INVALID_NUMBER: 421a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon case UNOBTAINABLE_NUMBER: 422a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.callFailed_unobtainable_number; 423a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 424a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 425a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon default: 426a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon resID = R.string.card_title_call_ended; 427a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon break; 428a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon } 429a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon return this.getView().getContext().getString(resID); 430a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon } 431a12f2589f424e26c63c8ee5b6fad89e30b69d7fbSantos Cordon 432150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon private void showAndInitializeSecondaryCallInfo() { 433150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon mSecondaryCallInfo.setVisibility(View.VISIBLE); 434150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon 435150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon // mSecondaryCallName is initialized here (vs. onViewCreated) because it is inaccesible 436150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon // until mSecondaryCallInfo is inflated in the call above. 437150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon if (mSecondaryCallName == null) { 438150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon mSecondaryCallName = (TextView) getView().findViewById(R.id.secondaryCallName); 439150a5c58c67f230c8fd7293b180bbf50aa761480Santos Cordon } 4404bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon if (mSecondaryPhoto == null) { 4414bbe4c6900dfe3584f674161dbe15e248d5adbe7Santos Cordon mSecondaryPhoto = (ImageView) getView().findViewById(R.id.secondaryCallPhoto); 442988d06b64b99a13f4f060dc82594edcb738d9113Yorke Lee } 4439240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee 4449240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee if (mSecondaryPhotoOverlay == null) { 4459240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee mSecondaryPhotoOverlay = getView().findViewById(R.id.dim_effect_for_secondary_photo); 4469240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee mSecondaryPhotoOverlay.setOnClickListener(new OnClickListener() { 4479240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee @Override 4489240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee public void onClick(View v) { 4499240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee getPresenter().secondaryPhotoClicked(); 4509240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee } 4519240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee }); 4529240895e9df2fcae8f0baea707eb4d24c6e50997Yorke Lee } 453988d06b64b99a13f4f060dc82594edcb738d9113Yorke Lee } 454e331d604d5ab345b06976c0ff7a930930f6b9e41Chiao Cheng} 455