WelcomeActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.content.Intent;
  4import android.content.pm.ActivityInfo;
  5import android.databinding.DataBindingUtil;
  6import android.os.Bundle;
  7import android.support.annotation.NonNull;
  8import android.support.v7.app.AppCompatActivity;
  9import android.support.v7.widget.Toolbar;
 10import android.util.Log;
 11import android.view.Menu;
 12import android.view.MenuItem;
 13import android.widget.Toast;
 14
 15import java.util.List;
 16
 17import eu.siacs.conversations.Config;
 18import eu.siacs.conversations.R;
 19import eu.siacs.conversations.databinding.ActivityWelcomeBinding;
 20import eu.siacs.conversations.entities.Account;
 21import eu.siacs.conversations.utils.InstallReferrerUtils;
 22import eu.siacs.conversations.utils.SignupUtils;
 23import eu.siacs.conversations.utils.XmppUri;
 24import rocks.xmpp.addr.Jid;
 25
 26import static eu.siacs.conversations.utils.PermissionUtils.allGranted;
 27import static eu.siacs.conversations.utils.PermissionUtils.writeGranted;
 28
 29public class WelcomeActivity extends XmppActivity {
 30
 31    private static final int REQUEST_IMPORT_BACKUP = 0x63fb;
 32
 33    private XmppUri inviteUri;
 34
 35    public void onInstallReferrerDiscovered(final String referrer) {
 36        Log.d(Config.LOGTAG,"welcome activity: on install referrer discovered "+referrer);
 37        if (referrer != null) {
 38            final XmppUri xmppUri = new XmppUri(referrer);
 39            runOnUiThread(() -> processXmppUri(xmppUri));
 40        }
 41    }
 42
 43    private boolean processXmppUri(final XmppUri xmppUri) {
 44        if (xmppUri.isValidJid()) {
 45            final String preauth = xmppUri.getParamater("preauth");
 46            final Jid jid = xmppUri.getJid();
 47            final Intent intent;
 48            if (xmppUri.isAction(XmppUri.ACTION_REGISTER)) {
 49                intent = SignupUtils.getTokenRegistrationIntent(this, jid, preauth);
 50            } else if (xmppUri.isAction(XmppUri.ACTION_ROSTER) && "y".equals(xmppUri.getParamater("ibr"))) {
 51                intent = SignupUtils.getTokenRegistrationIntent(this, Jid.ofDomain(jid.getDomain()), preauth);
 52                intent.putExtra(StartConversationActivity.EXTRA_INVITE_URI, xmppUri.toString());
 53            } else {
 54                intent = null;
 55            }
 56            if (intent != null) {
 57                startActivity(intent);
 58                finish();
 59                return true;
 60            }
 61            this.inviteUri = xmppUri;
 62        }
 63        return false;
 64    }
 65
 66    @Override
 67    protected void refreshUiReal() {
 68
 69    }
 70
 71    @Override
 72    void onBackendConnected() {
 73
 74    }
 75
 76    @Override
 77    public void onStart() {
 78        super.onStart();
 79        final int theme = findTheme();
 80        if (this.mTheme != theme) {
 81            recreate();
 82        }
 83        new InstallReferrerUtils(this);
 84    }
 85
 86    @Override
 87    public void onStop() {
 88        super.onStop();
 89    }
 90
 91    @Override
 92    public void onNewIntent(Intent intent) {
 93        if (intent != null) {
 94            setIntent(intent);
 95        }
 96    }
 97
 98    @Override
 99    protected void onCreate(final Bundle savedInstanceState) {
100        if (getResources().getBoolean(R.bool.portrait_only)) {
101            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
102        }
103        super.onCreate(savedInstanceState);
104        ActivityWelcomeBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_welcome);
105        setSupportActionBar((Toolbar) binding.toolbar);
106        configureActionBar(getSupportActionBar(), false);
107        binding.registerNewAccount.setOnClickListener(v -> {
108            final Intent intent = new Intent(this, PickServerActivity.class);
109            addInviteUri(intent);
110            startActivity(intent);
111        });
112        binding.useExisting.setOnClickListener(v -> {
113            List<Account> accounts = xmppConnectionService.getAccounts();
114            Intent intent = new Intent(WelcomeActivity.this, EditAccountActivity.class);
115            intent.putExtra(EditAccountActivity.EXTRA_FORCE_REGISTER, false);
116            if (accounts.size() == 1) {
117                intent.putExtra("jid", accounts.get(0).getJid().asBareJid().toString());
118                intent.putExtra("init", true);
119            } else if (accounts.size() >= 1) {
120                intent = new Intent(WelcomeActivity.this, ManageAccountActivity.class);
121            }
122            addInviteUri(intent);
123            startActivity(intent);
124        });
125
126    }
127
128    @Override
129    public boolean onCreateOptionsMenu(Menu menu) {
130        getMenuInflater().inflate(R.menu.welcome_menu, menu);
131        return super.onCreateOptionsMenu(menu);
132    }
133
134    @Override
135    public boolean onOptionsItemSelected(MenuItem item) {
136        if (item.getItemId() == R.id.action_import_backup) {
137            if (hasStoragePermission(REQUEST_IMPORT_BACKUP)) {
138                startActivity(new Intent(this, ImportBackupActivity.class));
139            }
140            return true;
141        }
142        return super.onOptionsItemSelected(item);
143    }
144
145    @Override
146    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
147        if (grantResults.length > 0) {
148            if (allGranted(grantResults)) {
149                switch (requestCode) {
150                    case REQUEST_IMPORT_BACKUP:
151                        startActivity(new Intent(this, ImportBackupActivity.class));
152                        break;
153                }
154            } else {
155                Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
156            }
157        }
158        if (writeGranted(grantResults, permissions)) {
159            if (xmppConnectionService != null) {
160                xmppConnectionService.restartFileObserver();
161            }
162        }
163    }
164
165    public void addInviteUri(Intent to) {
166        final Intent from = getIntent();
167        if (from != null && from.hasExtra(StartConversationActivity.EXTRA_INVITE_URI)) {
168            final String invite = from.getStringExtra(StartConversationActivity.EXTRA_INVITE_URI);
169            to.putExtra(StartConversationActivity.EXTRA_INVITE_URI, invite);
170        } else if (this.inviteUri != null) {
171            Log.d(Config.LOGTAG,"injecting referrer uri into on-boarding flow");
172            to.putExtra(StartConversationActivity.EXTRA_INVITE_URI, this.inviteUri.toString());
173        }
174    }
175
176    public static void launch(AppCompatActivity activity) {
177        Intent intent = new Intent(activity, WelcomeActivity.class);
178        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
179        activity.startActivity(intent);
180        activity.overridePendingTransition(0, 0);
181    }
182
183}