UriHandlerActivity.java

 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}