UriHandlerActivity.java

 1package eu.siacs.conversations.ui;
 2
 3import android.app.Activity;
 4import android.content.Intent;
 5import android.net.Uri;
 6
 7import eu.siacs.conversations.persistance.DatabaseBackend;
 8import eu.siacs.conversations.utils.XmppUri;
 9import eu.siacs.conversations.xmpp.jid.Jid;
10
11public class UriHandlerActivity extends Activity {
12
13    @Override
14    public void onStart() {
15        super.onStart();
16        handleIntent(getIntent());
17    }
18
19    @Override
20    public void onNewIntent(Intent intent) {
21        handleIntent(intent);
22    }
23
24    private void handleUri(Uri uri) {
25        final Intent intent;
26        final XmppUri xmppUri = new XmppUri(uri);
27        final int numAccounts = DatabaseBackend.getInstance(this).getAccountJids().size();
28
29        if (numAccounts == 0) {
30            intent = new Intent(getApplicationContext(), WelcomeActivity.class);
31            startActivity(intent);
32            return;
33        }
34
35        if (xmppUri.isAction(XmppUri.ACTION_MESSAGE)) {
36            final Jid jid = xmppUri.getJid();
37            final String body = xmppUri.getBody();
38
39            if (jid != null) {
40                intent = new Intent(getApplicationContext(), ShareViaAccountActivity.class);
41                intent.putExtra(ShareViaAccountActivity.EXTRA_CONTACT, jid.toString());
42                intent.putExtra(ShareViaAccountActivity.EXTRA_BODY, body);
43            } else {
44                intent = new Intent(getApplicationContext(), ShareWithActivity.class);
45                intent.setAction(Intent.ACTION_SEND);
46                intent.setType("text/plain");
47                intent.putExtra(Intent.EXTRA_TEXT, body);
48            }
49        } else {
50            intent = new Intent(getApplicationContext(), StartConversationActivity.class);
51            intent.setAction(Intent.ACTION_VIEW);
52            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
53            intent.setData(uri);
54        }
55
56        startActivity(intent);
57    }
58
59    private void handleIntent(Intent data) {
60        if (data == null) {
61            finish();
62            return;
63        }
64
65        switch (data.getAction()) {
66            case Intent.ACTION_VIEW:
67            case Intent.ACTION_SENDTO:
68                handleUri(data.getData());
69        }
70
71        finish();
72    }
73}