1/*
2 * Copyright (C) 2013 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
17package com.android.incallui;
18
19import android.os.Bundle;
20import android.text.TextUtils;
21import android.view.LayoutInflater;
22import android.view.View;
23import android.view.ViewGroup;
24import android.widget.Chronometer;
25import android.widget.TextView;
26
27/**
28 * Fragment for call control buttons
29 */
30public class ConferenceManagerFragment
31        extends BaseFragment<ConferenceManagerPresenter,
32                ConferenceManagerPresenter.ConferenceManagerUi>
33        implements ConferenceManagerPresenter.ConferenceManagerUi {
34
35    private View mButtonManageConferenceDone;
36    private ViewGroup[] mConferenceCallList;
37    private Chronometer mConferenceTime;
38
39    @Override
40    ConferenceManagerPresenter createPresenter() {
41        // having a singleton instance.
42        return new ConferenceManagerPresenter();
43    }
44
45    @Override
46    ConferenceManagerPresenter.ConferenceManagerUi getUi() {
47        return this;
48    }
49
50    @Override
51    public void onCreate(Bundle savedInstanceState) {
52        super.onCreate(savedInstanceState);
53    }
54
55    @Override
56    public View onCreateView(LayoutInflater inflater, ViewGroup container,
57            Bundle savedInstanceState) {
58        final View parent = inflater.inflate(R.layout.conference_manager_fragment, container,
59                false);
60
61        // set up the Conference Call chronometer
62        mConferenceTime = (Chronometer) parent.findViewById(R.id.manageConferencePanelHeader);
63        mConferenceTime.setFormat(getActivity().getString(R.string.caller_manage_header));
64
65        // Create list of conference call widgets
66        mConferenceCallList = new ViewGroup[getPresenter().getMaxCallersInConference()];
67
68        final int[] viewGroupIdList = { R.id.caller0, R.id.caller1, R.id.caller2,
69                                        R.id.caller3, R.id.caller4 };
70        for (int i = 0; i < getPresenter().getMaxCallersInConference(); i++) {
71            mConferenceCallList[i] =
72                    (ViewGroup) parent.findViewById(viewGroupIdList[i]);
73        }
74
75        mButtonManageConferenceDone = parent.findViewById(R.id.manage_done);
76        mButtonManageConferenceDone.setOnClickListener(new View.OnClickListener() {
77            @Override
78            public void onClick(View v) {
79                getPresenter().manageConferenceDoneClicked();
80            }
81        });
82
83        return parent;
84    }
85
86    @Override
87    public void onActivityCreated(Bundle savedInstanceState) {
88        super.onActivityCreated(savedInstanceState);
89    }
90
91    @Override
92    public void setVisible(boolean on) {
93        if (on) {
94            final CallList calls = CallList.getInstance();
95            getPresenter().init(getActivity(), calls);
96            getView().setVisibility(View.VISIBLE);
97
98        } else {
99            getView().setVisibility(View.GONE);
100        }
101    }
102
103    @Override
104    public boolean isFragmentVisible() {
105        return isVisible();
106    }
107
108    @Override
109    public void setRowVisible(int rowId, boolean on) {
110        if (on) {
111            mConferenceCallList[rowId].setVisibility(View.VISIBLE);
112        } else {
113            mConferenceCallList[rowId].setVisibility(View.GONE);
114        }
115    }
116
117    /**
118     * Helper function to fill out the Conference Call(er) information
119     * for each item in the "Manage Conference Call" list.
120     */
121    @Override
122    public final void displayCallerInfoForConferenceRow(int rowId, String callerName,
123            String callerNumber, String callerNumberType) {
124
125        final TextView nameTextView = (TextView) mConferenceCallList[rowId].findViewById(
126                R.id.conferenceCallerName);
127        final TextView numberTextView = (TextView) mConferenceCallList[rowId].findViewById(
128                R.id.conferenceCallerNumber);
129        final TextView numberTypeTextView = (TextView) mConferenceCallList[rowId].findViewById(
130                R.id.conferenceCallerNumberType);
131
132        // set the caller name
133        nameTextView.setText(callerName);
134
135        // set the caller number in subscript, or make the field disappear.
136        if (TextUtils.isEmpty(callerNumber)) {
137            numberTextView.setVisibility(View.GONE);
138            numberTypeTextView.setVisibility(View.GONE);
139        } else {
140            numberTextView.setVisibility(View.VISIBLE);
141            numberTextView.setText(callerNumber);
142            numberTypeTextView.setVisibility(View.VISIBLE);
143            numberTypeTextView.setText(callerNumberType);
144        }
145    }
146
147    @Override
148    public final void setupEndButtonForRow(final int rowId) {
149        View endButton = mConferenceCallList[rowId].findViewById(R.id.conferenceCallerDisconnect);
150        endButton.setOnClickListener(new View.OnClickListener() {
151                @Override
152                public void onClick(View v) {
153                    getPresenter().endConferenceConnection(rowId);
154                }
155        });
156    }
157
158    @Override
159    public final void setCanSeparateButtonForRow(final int rowId, boolean canSeparate) {
160        final View separateButton = mConferenceCallList[rowId].findViewById(
161                R.id.conferenceCallerSeparate);
162
163        if (canSeparate) {
164            final View.OnClickListener separateThisConnection = new View.OnClickListener() {
165                    @Override
166                    public void onClick(View v) {
167                        getPresenter().separateConferenceConnection(rowId);
168                    }
169                };
170            separateButton.setOnClickListener(separateThisConnection);
171            separateButton.setVisibility(View.VISIBLE);
172        } else {
173            separateButton.setVisibility(View.INVISIBLE);
174        }
175    }
176
177    /**
178     * Starts the "conference time" chronometer.
179     */
180    @Override
181    public void startConferenceTime(long base) {
182        if (mConferenceTime != null) {
183            mConferenceTime.setBase(base);
184            mConferenceTime.start();
185        }
186    }
187
188    /**
189     * Stops the "conference time" chronometer.
190     */
191    @Override
192    public void stopConferenceTime() {
193        if (mConferenceTime != null) {
194            mConferenceTime.stop();
195        }
196    }
197}