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