EasyOnboardingInviteActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.app.Activity;
  4import android.content.Intent;
  5import android.graphics.Bitmap;
  6import android.graphics.Point;
  7import android.os.Bundle;
  8import android.util.Log;
  9import android.view.Menu;
 10import android.view.MenuItem;
 11import android.view.View;
 12import android.widget.Toast;
 13
 14import androidx.databinding.DataBindingUtil;
 15
 16import com.google.common.base.Strings;
 17
 18import eu.siacs.conversations.Config;
 19import eu.siacs.conversations.R;
 20import eu.siacs.conversations.databinding.ActivityEasyInviteBinding;
 21import eu.siacs.conversations.entities.Account;
 22import eu.siacs.conversations.services.BarcodeProvider;
 23import eu.siacs.conversations.utils.EasyOnboardingInvite;
 24import eu.siacs.conversations.xmpp.Jid;
 25
 26public class EasyOnboardingInviteActivity extends XmppActivity implements EasyOnboardingInvite.OnInviteRequested {
 27
 28    private ActivityEasyInviteBinding binding;
 29
 30    private EasyOnboardingInvite easyOnboardingInvite;
 31
 32
 33    @Override
 34    public void onCreate(final Bundle bundle) {
 35        super.onCreate(bundle);
 36        this.binding = DataBindingUtil.setContentView(this, R.layout.activity_easy_invite);
 37        setSupportActionBar(binding.toolbar);
 38        configureActionBar(getSupportActionBar(), true);
 39        this.binding.shareButton.setOnClickListener(v -> share());
 40        if (bundle != null && bundle.containsKey("invite")) {
 41            this.easyOnboardingInvite = bundle.getParcelable("invite");
 42            if (this.easyOnboardingInvite != null) {
 43                showInvite(this.easyOnboardingInvite);
 44                return;
 45            }
 46        }
 47        this.showLoading();
 48    }
 49
 50    @Override
 51    public boolean onCreateOptionsMenu(Menu menu) {
 52        getMenuInflater().inflate(R.menu.easy_onboarding_invite, menu);
 53        final MenuItem share = menu.findItem(R.id.action_share);
 54        share.setVisible(easyOnboardingInvite != null);
 55        return super.onCreateOptionsMenu(menu);
 56    }
 57
 58    public boolean onOptionsItemSelected(MenuItem menuItem) {
 59        if (menuItem.getItemId() == R.id.action_share) {
 60            share();
 61            return true;
 62        } else {
 63            return super.onOptionsItemSelected(menuItem);
 64        }
 65    }
 66
 67    private void share() {
 68        final String shareText = getString(
 69                R.string.easy_invite_share_text,
 70                easyOnboardingInvite.getDomain(),
 71                easyOnboardingInvite.getShareableLink()
 72        );
 73        final Intent sendIntent = new Intent();
 74        sendIntent.setAction(Intent.ACTION_SEND);
 75        sendIntent.putExtra(Intent.EXTRA_TEXT, shareText);
 76        sendIntent.setType("text/plain");
 77        startActivity(Intent.createChooser(sendIntent, getString(R.string.share_invite_with)));
 78    }
 79
 80    @Override
 81    protected void refreshUiReal() {
 82        invalidateOptionsMenu();
 83        if (easyOnboardingInvite != null) {
 84            showInvite(easyOnboardingInvite);
 85        } else {
 86            showLoading();
 87        }
 88    }
 89
 90    private void showLoading() {
 91        this.binding.inProgress.setVisibility(View.VISIBLE);
 92        this.binding.invite.setVisibility(View.GONE);
 93    }
 94
 95    private void showInvite(final EasyOnboardingInvite invite) {
 96        this.binding.inProgress.setVisibility(View.GONE);
 97        this.binding.invite.setVisibility(View.VISIBLE);
 98        this.binding.tapToShare.setText(getString(R.string.tap_share_button_send_invite, invite.getDomain()));
 99        final Point size = new Point();
100        getWindowManager().getDefaultDisplay().getSize(size);
101        final int width = Math.min(size.x, size.y);
102        final Bitmap bitmap = BarcodeProvider.create2dBarcodeBitmap(invite.getShareableLink(), width);
103        binding.qrCode.setImageBitmap(bitmap);
104    }
105
106    @Override
107    public void onSaveInstanceState(Bundle bundle) {
108        super.onSaveInstanceState(bundle);
109        if (easyOnboardingInvite != null) {
110            bundle.putParcelable("invite", easyOnboardingInvite);
111        }
112    }
113
114    @Override
115    void onBackendConnected() {
116        if (easyOnboardingInvite != null) {
117            return;
118        }
119        final Intent launchIntent = getIntent();
120        final String accountExtra = launchIntent.getStringExtra(EXTRA_ACCOUNT);
121        final Jid jid = accountExtra == null ? null : Jid.ofEscaped(accountExtra);
122        if (jid == null) {
123            return;
124        }
125        final Account account = xmppConnectionService.findAccountByJid(jid);
126        xmppConnectionService.requestEasyOnboardingInvite(account, this);
127    }
128
129    public static void launch(final Account account, final Activity context) {
130        final Intent intent = new Intent(context, EasyOnboardingInviteActivity.class);
131        intent.putExtra(EXTRA_ACCOUNT, account.getJid().asBareJid().toEscapedString());
132        context.startActivity(intent);
133    }
134
135    @Override
136    public void inviteRequested(EasyOnboardingInvite invite) {
137        this.easyOnboardingInvite = invite;
138        Log.d(Config.LOGTAG, "invite requested");
139        refreshUi();
140    }
141
142    @Override
143    public void inviteRequestFailed(final String message) {
144        runOnUiThread(() -> {
145            if (!Strings.isNullOrEmpty(message)) {
146                Toast.makeText(this, message, Toast.LENGTH_LONG).show();
147            }
148            finish();
149        });
150    }
151}