1package eu.siacs.conversations.ui;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.net.Uri;
6
7import com.google.zxing.integration.android.IntentIntegrator;
8import com.google.zxing.integration.android.IntentResult;
9
10import java.util.Arrays;
11import java.util.List;
12
13import eu.siacs.conversations.persistance.DatabaseBackend;
14import eu.siacs.conversations.utils.XmppUri;
15import eu.siacs.conversations.xmpp.jid.Jid;
16
17public class UriHandlerActivity extends Activity {
18 public static final String ACTION_SCAN_QR_CODE = "scan_qr_code";
19
20 @Override
21 public void onStart() {
22 super.onStart();
23 handleIntent(getIntent());
24 }
25
26 @Override
27 public void onNewIntent(Intent intent) {
28 handleIntent(intent);
29 }
30
31 private void handleUri(Uri uri) {
32 final Intent intent;
33 final XmppUri xmppUri = new XmppUri(uri);
34 final List<Jid> accounts = DatabaseBackend.getInstance(this).getAccountJids();
35
36 if (accounts.size() == 0) {
37 intent = new Intent(getApplicationContext(), WelcomeActivity.class);
38 WelcomeActivity.addInvitee(intent, xmppUri);
39 startActivity(intent);
40 return;
41 }
42
43 if (xmppUri.isAction(XmppUri.ACTION_MESSAGE)) {
44 final Jid jid = xmppUri.getJid();
45 final String body = xmppUri.getBody();
46
47 if (jid != null) {
48 intent = new Intent(getApplicationContext(), ShareViaAccountActivity.class);
49 intent.putExtra(ShareViaAccountActivity.EXTRA_CONTACT, jid.toString());
50 intent.putExtra(ShareViaAccountActivity.EXTRA_BODY, body);
51 } else {
52 intent = new Intent(getApplicationContext(), ShareWithActivity.class);
53 intent.setAction(Intent.ACTION_SEND);
54 intent.setType("text/plain");
55 intent.putExtra(Intent.EXTRA_TEXT, body);
56 }
57 } else if (accounts.contains(xmppUri.getJid())) {
58 intent = new Intent(getApplicationContext(), EditAccountActivity.class);
59 intent.setAction(Intent.ACTION_VIEW);
60 intent.putExtra("jid", xmppUri.getJid().toBareJid().toString());
61 intent.setData(uri);
62 } else {
63 intent = new Intent(getApplicationContext(), StartConversationActivity.class);
64 intent.setAction(Intent.ACTION_VIEW);
65 intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
66 intent.setData(uri);
67 }
68
69 startActivity(intent);
70 }
71
72 private void handleIntent(Intent data) {
73 if (data == null || data.getAction() == null) {
74 finish();
75 return;
76 }
77
78 switch (data.getAction()) {
79 case Intent.ACTION_VIEW:
80 case Intent.ACTION_SENDTO:
81 handleUri(data.getData());
82 break;
83 case ACTION_SCAN_QR_CODE:
84 new IntentIntegrator(this).initiateScan(Arrays.asList("AZTEC", "QR_CODE"));
85 return;
86 }
87
88 finish();
89 }
90
91 @Override
92 public void onActivityResult(int requestCode, int resultCode, Intent intent) {
93 if ((requestCode & 0xFFFF) == IntentIntegrator.REQUEST_CODE) {
94 IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode,
95 intent);
96
97 if (scanResult != null && scanResult.getFormatName() != null) {
98 String data = scanResult.getContents();
99 handleUri(Uri.parse(data));
100 }
101 }
102
103 finish();
104 super.onActivityResult(requestCode, requestCode, intent);
105 }
106}