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