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 startActivity(intent);
39 return;
40 }
41
42 if (xmppUri.isAction(XmppUri.ACTION_MESSAGE)) {
43 final Jid jid = xmppUri.getJid();
44 final String body = xmppUri.getBody();
45
46 if (jid != null) {
47 intent = new Intent(getApplicationContext(), ShareViaAccountActivity.class);
48 intent.putExtra(ShareViaAccountActivity.EXTRA_CONTACT, jid.toString());
49 intent.putExtra(ShareViaAccountActivity.EXTRA_BODY, body);
50 } else {
51 intent = new Intent(getApplicationContext(), ShareWithActivity.class);
52 intent.setAction(Intent.ACTION_SEND);
53 intent.setType("text/plain");
54 intent.putExtra(Intent.EXTRA_TEXT, body);
55 }
56 } else if (accounts.contains(xmppUri.getJid())) {
57 intent = new Intent(getApplicationContext(), EditAccountActivity.class);
58 intent.setAction(Intent.ACTION_VIEW);
59 intent.putExtra("jid", xmppUri.getJid().toBareJid().toString());
60 intent.setData(uri);
61 } else {
62 intent = new Intent(getApplicationContext(), StartConversationActivity.class);
63 intent.setAction(Intent.ACTION_VIEW);
64 intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
65 intent.setData(uri);
66 }
67
68 startActivity(intent);
69 }
70
71 private void handleIntent(Intent data) {
72 if (data == null || data.getAction() == null) {
73 finish();
74 return;
75 }
76
77 switch (data.getAction()) {
78 case Intent.ACTION_VIEW:
79 case Intent.ACTION_SENDTO:
80 handleUri(data.getData());
81 break;
82 case ACTION_SCAN_QR_CODE:
83 new IntentIntegrator(this).initiateScan(Arrays.asList("AZTEC", "QR_CODE"));
84 return;
85 }
86
87 finish();
88 }
89
90 @Override
91 public void onActivityResult(int requestCode, int resultCode, Intent intent) {
92 if ((requestCode & 0xFFFF) == IntentIntegrator.REQUEST_CODE) {
93 IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode,
94 intent);
95
96 if (scanResult != null && scanResult.getFormatName() != null) {
97 String data = scanResult.getContents();
98 handleUri(Uri.parse(data));
99 }
100 }
101
102 finish();
103 super.onActivityResult(requestCode, requestCode, intent);
104 }
105}