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