blob: ca25ebae77a78c9728fe8f9c4f728462b0626c45 [file] [log] [blame]
Aline Bonnet9c6defe2016-12-21 13:21:02 -05001package cx.ring.fragments;
2
Aline Bonnete8e87f62016-12-26 10:54:37 -05003import android.app.Activity;
Aline Bonnete8e87f62016-12-26 10:54:37 -05004import android.content.Context;
Aline Bonnet87970532017-03-17 11:01:01 -04005import android.content.DialogInterface;
Aline Bonnet9c6defe2016-12-21 13:21:02 -05006import android.content.Intent;
Aline Bonnet830c4c62016-12-27 14:02:02 -05007import android.content.res.Configuration;
Aline Bonnet9c6defe2016-12-21 13:21:02 -05008import android.graphics.Bitmap;
9import android.os.Bundle;
10import android.support.design.widget.Snackbar;
11import android.support.v7.app.ActionBar;
12import android.support.v7.app.AlertDialog;
Aline Bonnete8e87f62016-12-26 10:54:37 -050013import android.support.v7.app.AppCompatActivity;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050014import android.support.v7.widget.DefaultItemAnimator;
15import android.support.v7.widget.LinearLayoutManager;
16import android.support.v7.widget.RecyclerView;
17import android.util.Log;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050018import android.view.LayoutInflater;
19import android.view.Menu;
20import android.view.MenuInflater;
21import android.view.MenuItem;
22import android.view.View;
23import android.view.ViewGroup;
24import android.view.inputmethod.EditorInfo;
25import android.widget.EditText;
26import android.widget.Spinner;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050027
Aline Bonnet87970532017-03-17 11:01:01 -040028import java.io.ByteArrayOutputStream;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050029
30import javax.inject.Inject;
31
32import butterknife.BindView;
33import butterknife.ButterKnife;
34import butterknife.OnClick;
35import butterknife.OnEditorAction;
36import cx.ring.R;
37import cx.ring.adapters.ContactDetailsTask;
38import cx.ring.adapters.ConversationAdapter;
39import cx.ring.adapters.NumberAdapter;
40import cx.ring.application.RingApplication;
41import cx.ring.client.CallActivity;
Aline Bonnet830c4c62016-12-27 14:02:02 -050042import cx.ring.client.ConversationActivity;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050043import cx.ring.client.HomeActivity;
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -040044import cx.ring.conversation.ConversationPresenter;
45import cx.ring.conversation.ConversationView;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050046import cx.ring.model.Account;
47import cx.ring.model.CallContact;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050048import cx.ring.model.Conversation;
49import cx.ring.model.Phone;
50import cx.ring.model.Uri;
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -040051import cx.ring.mvp.BaseFragment;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050052import cx.ring.service.LocalService;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050053import cx.ring.utils.ActionHelper;
Aline Bonnet87970532017-03-17 11:01:01 -040054import cx.ring.utils.BitmapUtils;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050055import cx.ring.utils.ClipboardHelper;
56import cx.ring.utils.ContentUriHandler;
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -040057import cx.ring.utils.Tuple;
Aline Bonnet87970532017-03-17 11:01:01 -040058import cx.ring.utils.VCardUtils;
59import ezvcard.VCard;
60import ezvcard.parameter.ImageType;
61import ezvcard.property.Photo;
62import ezvcard.property.RawProperty;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050063
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -040064public class ConversationFragment extends BaseFragment<ConversationPresenter> implements
Aline Bonnet9c6defe2016-12-21 13:21:02 -050065 Conversation.ConversationActionCallback,
66 ClipboardHelper.ClipboardHelperCallback,
Aline Bonneteb5f7ff2017-01-17 11:09:17 -050067 ContactDetailsTask.DetailsLoadedCallback,
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -040068 ConversationView {
Aline Bonnet9c6defe2016-12-21 13:21:02 -050069
70 private static final String TAG = ConversationFragment.class.getSimpleName();
71 private static final String CONVERSATION_DELETE = "CONVERSATION_DELETE";
Aline Bonnet830c4c62016-12-27 14:02:02 -050072 private static final int MIN_SIZE_TABLET = 960;
Aline Bonnet9c6defe2016-12-21 13:21:02 -050073
74 public static final int REQ_ADD_CONTACT = 42;
75
Aline Bonnete8e87f62016-12-26 10:54:37 -050076 private LocalService.Callbacks mCallbacks = LocalService.DUMMY_CALLBACKS;
77
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -040078 @Inject
79 protected ConversationPresenter conversationPresenter;
80
81 @BindView(R.id.msg_input_txt)
82 protected EditText mMsgEditTxt;
83
84 @BindView(R.id.ongoingcall_pane)
85 protected ViewGroup mBottomPane;
86
87 @BindView(R.id.hist_list)
88 protected RecyclerView mHistList;
89
90 @BindView(R.id.number_selector)
91 protected Spinner mNumberSpinner;
92
Aline Bonnet9c6defe2016-12-21 13:21:02 -050093 private AlertDialog mDeleteDialog;
94 private boolean mDeleteConversation = false;
95
Aline Bonnet9c6defe2016-12-21 13:21:02 -050096 private MenuItem mAddContactBtn = null;
97
98 private ConversationAdapter mAdapter = null;
99 private NumberAdapter mNumberAdapter = null;
100
Aline Bonnet830c4c62016-12-27 14:02:02 -0500101 public static Boolean isTabletMode(Context context) {
102 return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
103 && context.getResources().getConfiguration().screenWidthDp >= MIN_SIZE_TABLET;
104 }
105
Thibault Wittemberge05a8e12016-12-12 15:39:36 -0500106 static private int getIndex(Spinner spinner, Uri myString) {
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500107 for (int i = 0, n = spinner.getCount(); i < n; i++)
108 if (((Phone) spinner.getItemAtPosition(i)).getNumber().equals(myString)) {
109 return i;
110 }
111 return 0;
112 }
113
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400114 @Override
115 public void refreshView(final Conversation conversation, Uri number) {
116 getActivity().runOnUiThread(new Runnable() {
117 @Override
118 public void run() {
119 final CallContact contact = conversation.getContact();
120 if (contact != null) {
121 new ContactDetailsTask(getActivity(), contact, ConversationFragment.this).run();
Aline Bonneteb5f7ff2017-01-17 11:09:17 -0500122 }
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400123
124 if (mAdapter != null) {
125 mAdapter.updateDataset(conversation.getAggregateHistory(), 0);
126
127 if (mAdapter.getItemCount() > 0) {
128 mHistList.smoothScrollToPosition(mAdapter.getItemCount() - 1);
129 }
130 }
131
132 getActivity().invalidateOptionsMenu();
Aline Bonneteb5f7ff2017-01-17 11:09:17 -0500133 }
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400134 });
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500135 }
136
Aline Bonnete8e87f62016-12-26 10:54:37 -0500137 @Override
138 public void onAttach(Activity activity) {
139 Log.d(TAG, "onAttach");
140 super.onAttach(activity);
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500141
Aline Bonnete8e87f62016-12-26 10:54:37 -0500142 if (!(activity instanceof LocalService.Callbacks)) {
143 throw new IllegalStateException("Activity must implement fragment's callbacks.");
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500144 }
145
Aline Bonnete8e87f62016-12-26 10:54:37 -0500146 mCallbacks = (LocalService.Callbacks) activity;
147 }
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500148
Aline Bonnete8e87f62016-12-26 10:54:37 -0500149 @Override
150 public void onDetach() {
151 super.onDetach();
152 Log.d(TAG, "onDetach");
153 mCallbacks = LocalService.DUMMY_CALLBACKS;
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500154 }
155
156 @Override
157 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
158 super.onCreateView(inflater, container, savedInstanceState);
159
160 View inflatedView = inflater.inflate(R.layout.frag_conversation, container, false);
161
162 ButterKnife.bind(this, inflatedView);
163
164 // Dependency injection
165 ((RingApplication) getActivity().getApplication()).getRingInjectionComponent().inject(this);
166
167 if (mBottomPane != null) {
168 mBottomPane.setVisibility(View.GONE);
169 }
170
171 LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
172 mLayoutManager.setStackFromEnd(true);
173
174 if (mHistList != null) {
175 mHistList.setLayoutManager(mLayoutManager);
176 mHistList.setAdapter(mAdapter);
177 mHistList.setItemAnimator(new DefaultItemAnimator());
178 }
179
180 // reload delete conversation state (before rotation)
181 mDeleteConversation = savedInstanceState != null && savedInstanceState.getBoolean(CONVERSATION_DELETE);
182
183 setHasOptionsMenu(true);
Aline Bonnete8e87f62016-12-26 10:54:37 -0500184
185 LocalService service = mCallbacks.getService();
186 if (service != null) {
Alexandre Lision66a9f9a2017-02-26 20:28:27 -0500187 bindService(service);
Aline Bonnete8e87f62016-12-26 10:54:37 -0500188 }
189
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500190 return inflatedView;
191 }
192
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400193 @Override
194 public void displaySendTrustRequest(final String accountId, final String contactId) {
Aline Bonnet87970532017-03-17 11:01:01 -0400195 android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity());
196 builder.setTitle(R.string.send_request_title);
197 builder.setMessage(R.string.send_request_msg);
198
199 builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
200 @Override
201 public void onClick(DialogInterface dialogInterface, int i) {
202 dialogInterface.cancel();
203 }
204 });
205
206 builder.setPositiveButton(R.string.send_request_button, new DialogInterface.OnClickListener() {
207 @Override
208 public void onClick(DialogInterface dialogInterface, int i) {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400209 VCard vcard = VCardUtils.loadLocalProfileFromDisk(getActivity().getFilesDir(), accountId);
Alexandre Lision45112682017-03-31 13:49:49 -0400210 if (vcard != null && !vcard.getPhotos().isEmpty()) {
211 // Reduce photo size to fit in one DHT packet
212 Bitmap photo = BitmapUtils.bytesToBitmap(vcard.getPhotos().get(0).getData());
213 photo = BitmapUtils.reduceBitmap(photo, 30000);
214 ByteArrayOutputStream stream = new ByteArrayOutputStream();
215 photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
216 vcard.removeProperties(Photo.class);
217 vcard.addPhoto(new Photo(stream.toByteArray(), ImageType.PNG));
218 vcard.removeProperties(RawProperty.class);
219 }
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400220 presenter.sendTrustRequest(accountId, contactId, vcard);
Aline Bonnet87970532017-03-17 11:01:01 -0400221 }
222 });
223
224 builder.show();
225 }
226
Alexandre Lision66a9f9a2017-02-26 20:28:27 -0500227 public void bindService(final LocalService service) {
Aline Bonnete8e87f62016-12-26 10:54:37 -0500228 mAdapter = new ConversationAdapter(getActivity(),
229 service.get40dpContactCache(),
230 service.getThreadPool());
231
232 if (mHistList != null) {
233 mHistList.setAdapter(mAdapter);
234 }
235
Aline Bonnete8e87f62016-12-26 10:54:37 -0500236 if (mDeleteConversation) {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400237 presenter.deleteAction();
Aline Bonnete8e87f62016-12-26 10:54:37 -0500238 }
239 }
240
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500241 @OnClick(R.id.msg_send)
Alexandre Lision66a9f9a2017-02-26 20:28:27 -0500242 public void sendMessageText() {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400243 Uri number = mNumberAdapter == null ?
244 null : ((Phone) mNumberSpinner.getSelectedItem()).getNumber();
245 presenter.sendTextMessage(mMsgEditTxt.getText().toString(), number);
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500246 }
247
248 @OnEditorAction(R.id.msg_input_txt)
Alexandre Lision66a9f9a2017-02-26 20:28:27 -0500249 public boolean actionSendMsgText(int actionId) {
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500250 switch (actionId) {
251 case EditorInfo.IME_ACTION_SEND:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400252 Uri number = mNumberAdapter == null ?
253 null : ((Phone) mNumberSpinner.getSelectedItem()).getNumber();
254 presenter.sendTextMessage(mMsgEditTxt.getText().toString(), number);
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500255 return true;
256 }
257 return false;
258 }
259
260 @OnClick(R.id.ongoingcall_pane)
Alexandre Lision66a9f9a2017-02-26 20:28:27 -0500261 public void onClick() {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400262 presenter.clickOnGoingPane();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500263 }
264
265 @Override
266 public void onPause() {
267 super.onPause();
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400268 presenter.pause();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500269 }
270
271 @Override
272 public void onResume() {
273 super.onResume();
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400274 presenter.resume();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500275 }
276
277 @Override
278 public void onDestroy() {
279 if (mDeleteConversation) {
280 mDeleteDialog.dismiss();
281 }
282
283 super.onDestroy();
284 }
285
286 @Override
287 public void onSaveInstanceState(Bundle outState) {
288 super.onSaveInstanceState(outState);
289
290 // persist the delete popup state in case of Activity rotation
291 mDeleteConversation = mDeleteDialog != null && mDeleteDialog.isShowing();
292 outState.putBoolean(CONVERSATION_DELETE, mDeleteConversation);
293 }
294
295 @Override
296 public void onPrepareOptionsMenu(Menu menu) {
297 super.onPrepareOptionsMenu(menu);
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400298 conversationPresenter.prepareMenu();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500299 }
300
301 @Override
302 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400303 inflater.inflate(R.menu.conversation_actions, menu);
304 mAddContactBtn = menu.findItem(R.id.menuitem_addcontact);
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500305 }
306
307 @Override
308 public boolean onOptionsItemSelected(MenuItem item) {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400309 Uri number;
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500310 switch (item.getItemId()) {
311 case android.R.id.home:
312 startActivity(new Intent(getActivity(), HomeActivity.class));
313 return true;
314 case R.id.conv_action_audiocall:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400315 number = mNumberAdapter == null ?
316 null : ((Phone) mNumberSpinner.getSelectedItem()).getNumber();
317 conversationPresenter.callWithVideo(false, number);
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500318 return true;
319 case R.id.conv_action_videocall:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400320 number = mNumberAdapter == null ?
321 null : ((Phone) mNumberSpinner.getSelectedItem()).getNumber();
322 conversationPresenter.callWithVideo(true, number);
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500323 return true;
324 case R.id.menuitem_addcontact:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400325 presenter.addContact();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500326 return true;
327 case R.id.menuitem_delete:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400328 presenter.deleteAction();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500329 return true;
330 case R.id.menuitem_copy_content:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400331 presenter.copyToClipboard();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500332 return true;
Aline Bonnet54cf69b2017-03-28 12:03:45 -0400333 case R.id.menuitem_block:
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400334 presenter.blockContact();
Aline Bonnet54cf69b2017-03-28 12:03:45 -0400335 return true;
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500336 default:
337 return super.onOptionsItemSelected(item);
338 }
339 }
340
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500341 @Override
342 public void deleteConversation(Conversation conversation) {
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400343 presenter.deleteConversation();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500344 }
345
346 @Override
347 public void copyContactNumberToClipboard(String contactNumber) {
348 ClipboardHelper.copyNumberToClipboard(getActivity(), contactNumber, this);
349 }
350
351 @Override
352 public void clipBoardDidCopyNumber(String copiedNumber) {
353 View view = getActivity().findViewById(android.R.id.content);
354 if (view != null) {
355 String snackbarText = getString(R.string.conversation_action_copied_peer_number_clipboard,
Alexandre Lision6fd56c82017-01-30 09:05:54 -0500356 ActionHelper.getShortenedNumber(copiedNumber));
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500357 Snackbar.make(view, snackbarText, Snackbar.LENGTH_LONG).show();
358 }
359 }
360
361 @Override
362 public void onDetailsLoaded(Bitmap bmp, String formattedName) {
Aline Bonnete8e87f62016-12-26 10:54:37 -0500363 ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500364 if (actionBar != null && formattedName != null) {
365 actionBar.setTitle(formattedName);
366 }
367 }
Aline Bonneteb5f7ff2017-01-17 11:09:17 -0500368
369 @Override
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400370 protected ConversationPresenter createPresenter() {
371 return conversationPresenter;
372 }
Aline Bonneteb5f7ff2017-01-17 11:09:17 -0500373
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400374 @Override
375 protected void initPresenter(ConversationPresenter presenter) {
376 super.initPresenter(presenter);
377 String conversationId = getArguments().getString("conversationID");
378 Uri number = new Uri(getArguments().getString("number"));
379 conversationPresenter.init(conversationId, number);
380 }
381
382 @Override
383 public void updateView(final String address, final String name, final int state) {
384 getActivity().runOnUiThread(new Runnable() {
385 @Override
386 public void run() {
Aline Bonneteb5f7ff2017-01-17 11:09:17 -0500387 if (state != 0 || mNumberAdapter == null || mNumberAdapter.isEmpty()) {
388 return;
389 }
390
391 for (int i = 0; i < mNumberAdapter.getCount(); i++) {
392 Phone phone = (Phone) mNumberAdapter.getItem(i);
393 if (phone.getNumber() != null) {
394 String ringID = phone.getNumber().getRawUriString();
395 if (address.equals(ringID)) {
396 phone.getNumber().setUsername(name);
397 mNumberAdapter.notifyDataSetChanged();
398 }
399 }
400 }
401 }
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400402 });
403 }
404
405 @Override
406 public void displayContactName(final String contactName) {
407 getActivity().runOnUiThread(new Runnable() {
408 @Override
409 public void run() {
410 if (((AppCompatActivity) getActivity()).getSupportActionBar() != null) {
411 ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(contactName);
412 }
Alexandre Lision66a9f9a2017-02-26 20:28:27 -0500413 }
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400414 });
415 }
416
417 @Override
418 public void displayOnGoingCallPane(final boolean display) {
419 getActivity().runOnUiThread(new Runnable() {
420 @Override
421 public void run() {
422 mBottomPane.setVisibility(display ? View.GONE : View.VISIBLE);
423 }
424 });
425 }
426
427 @Override
428 public void displayNumberSpinner(final Conversation conversation, final Uri number) {
429 getActivity().runOnUiThread(new Runnable() {
430 @Override
431 public void run() {
432 mNumberSpinner.setVisibility(View.VISIBLE);
433 mNumberAdapter = new NumberAdapter(getActivity(),
434 conversation.getContact(),
435 false);
436 mNumberSpinner.setAdapter(mNumberAdapter);
437 mNumberSpinner.setSelection(getIndex(mNumberSpinner, number));
438 }
439 });
440 }
441
442 @Override
443 public void displayAddContact(final boolean display) {
444 getActivity().runOnUiThread(new Runnable() {
445 @Override
446 public void run() {
447 if (mAddContactBtn != null) {
448 mAddContactBtn.setVisible(display);
449 }
450 }
451 });
452 }
453
454 @Override
455 public void displayDeleteDialog(final Conversation conversation) {
456 getActivity().runOnUiThread(new Runnable() {
457 @Override
458 public void run() {
459 mDeleteDialog = ActionHelper.launchDeleteAction(getActivity(),
460 conversation,
461 ConversationFragment.this);
462 }
463 });
464 }
465
466 @Override
467 public void displayCopyToClipboard(CallContact callContact) {
468 ActionHelper.launchCopyNumberToClipboardFromContact(getActivity(),
469 callContact,
470 this);
471 }
472
473 @Override
474 public void hideNumberSpinner() {
475 getActivity().runOnUiThread(new Runnable() {
476 @Override
477 public void run() {
478 mNumberSpinner.setVisibility(View.GONE);
479 }
480 });
481 }
482
483 @Override
484 public void clearMsgEdit() {
485 mMsgEditTxt.setText("");
486 }
487
488 @Override
489 public void goToHome() {
490 if (getActivity() instanceof ConversationActivity) {
491 getActivity().finish();
Aline Bonneteb5f7ff2017-01-17 11:09:17 -0500492 }
493 }
Hadrien De Sousaec95e5e2017-03-21 15:28:23 -0400494
495 @Override
496 public void goToAddContact(CallContact callContact) {
497 startActivityForResult(ActionHelper.getAddNumberIntentForContact(callContact), REQ_ADD_CONTACT);
498 }
499
500 @Override
501 public void goToCallActivity(String conferenceId) {
502 startActivity(new Intent(Intent.ACTION_VIEW)
503 .setClass(getActivity().getApplicationContext(), CallActivity.class)
504 .setData(android.net.Uri.withAppendedPath(ContentUriHandler.CONFERENCE_CONTENT_URI, conferenceId)));
505 }
506
507 @Override
508 public void goToCallActivityWithResult(Tuple<Account, Uri> guess, boolean hasVideo) {
509 Intent intent = new Intent(CallActivity.ACTION_CALL)
510 .setClass(getActivity().getApplicationContext(), CallActivity.class)
511 .putExtra("account", guess.first.getAccountID())
512 .putExtra("video", hasVideo)
513 .setData(android.net.Uri.parse(guess.second.getRawUriString()));
514 startActivityForResult(intent, HomeActivity.REQUEST_CODE_CALL);
515 }
Aline Bonnet9c6defe2016-12-21 13:21:02 -0500516}