Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix bugs and some code cleanup #3023

Merged
merged 5 commits into from
May 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/org/thoughtcrime/securesms/InstantOnboardingActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
Expand All @@ -36,6 +37,7 @@
import com.soundcloud.android.crop.Crop;

import org.thoughtcrime.securesms.components.AvatarSelector;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
Expand Down Expand Up @@ -63,6 +65,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
private static final String DEFAULT_CHATMAIL_HOST = "nine.testrun.org";

public static final String QR_ACCOUNT_EXTRA = "qr_account_extra";
public static final String FROM_WELCOME = "from_welcome";
private static final int REQUEST_CODE_AVATAR = 1;

private ImageView avatar;
Expand Down Expand Up @@ -90,6 +93,19 @@ public void onCreate(Bundle bundle) {
Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.instant_onboarding_title);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false);
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(!fromWelcome) {
@Override
public void handleOnBackPressed() {
AccountManager accountManager = AccountManager.getInstance();
if (accountManager.canRollbackAccountCreation(InstantOnboardingActivity.this)) {
accountManager.rollbackAccountCreation(InstantOnboardingActivity.this);
} else {
finish();
}
}
});

isDcLogin = false;
providerHost = DEFAULT_CHATMAIL_HOST;
providerQrData = DCACCOUNT + ":https://" + providerHost + "/new";
Expand Down
51 changes: 20 additions & 31 deletions src/org/thoughtcrime/securesms/WelcomeActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@
import java.io.OutputStream;

public class WelcomeActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate {
public static final String BACKUP_QR_EXTRA = "backup_qr_extra";
public static final int PICK_BACKUP = 20574;
private final static String TAG = WelcomeActivity.class.getSimpleName();
public static final String TMP_BACKUP_FILE = "tmp-backup-file";
public static final String DC_REQUEST_ACCOUNT_DATA = "chat.delta.DC_REQUEST_ACCOUNT_DATA";

private boolean manualConfigure = true; // false: configure by QR account creation
private ProgressDialog progressDialog = null;
private boolean imexUserAborted;
DcContext dcContext;
Expand Down Expand Up @@ -138,6 +138,16 @@ protected void onNewIntent(Intent intent) {
setIntent(intent);
}

@Override
public void onStart() {
super.onStart();
String backupQr = getIntent().getStringExtra(BACKUP_QR_EXTRA);
if (backupQr != null) {
getIntent().removeExtra(BACKUP_QR_EXTRA);
startBackupTransfer(backupQr);
}
}

@Override
public void onDestroy() {
super.onDestroy();
Expand All @@ -150,17 +160,17 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String permissi
}

private void startRegistrationActivity() {
manualConfigure = true;
Intent intent = new Intent(this, RegistrationActivity.class);
startActivity(intent);
}

private void startInstantOnboardingActivity() {
startActivity(new Intent(this, InstantOnboardingActivity.class));
Intent intent = new Intent(this, InstantOnboardingActivity.class);
intent.putExtra(InstantOnboardingActivity.FROM_WELCOME, true);
startActivity(intent);
}

private void startAddAsSecondDeviceActivity() {
manualConfigure = false;
new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class)
.addExtra(RegistrationQrActivity.ADD_AS_SECOND_DEVICE_EXTRA, true)
.initiateScan();
Expand Down Expand Up @@ -293,38 +303,17 @@ private File copyToCacheDir(Uri uri) throws IOException {
}
}

private void startQrAccountCreation(String qrCode)
private void startBackupTransfer(String qrCode)
{
if (progressDialog!=null) {
progressDialog.dismiss();
progressDialog = null;
}

if (dcContext.checkQr(qrCode).getState() == DcContext.DC_QR_BACKUP) {
Intent intent = new Intent(this, BackupTransferActivity.class);
intent.putExtra(BackupTransferActivity.TRANSFER_MODE, BackupTransferActivity.TransferMode.RECEIVER_SCAN_QR.getInt());
intent.putExtra(BackupTransferActivity.QR_CODE, qrCode);
startActivity(intent);
return;
}

progressDialog = new ProgressDialog(this);
progressDialog.setMessage(getResources().getString(R.string.one_moment));
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setCancelable(false);
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(android.R.string.cancel), (dialog, which) -> {
dcContext.stopOngoingProcess();
});
progressDialog.show();

DcHelper.getEventCenter(this).captureNextError();

if (!dcContext.setConfigFromQr(qrCode)) {
progressError(dcContext.getLastError());
return;
}
DcHelper.getAccounts(this).stopIo();
dcContext.configure();
Intent intent = new Intent(this, BackupTransferActivity.class);
intent.putExtra(BackupTransferActivity.TRANSFER_MODE, BackupTransferActivity.TransferMode.RECEIVER_SCAN_QR.getInt());
intent.putExtra(BackupTransferActivity.QR_CODE, qrCode);
startActivity(intent);
}

private void progressError(String data2) {
Expand Down Expand Up @@ -410,7 +399,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
new AlertDialog.Builder(this)
.setTitle(R.string.multidevice_receiver_title)
.setMessage(R.string.multidevice_receiver_scanning_ask)
.setPositiveButton(R.string.perm_continue, (dialog, which) -> startQrAccountCreation(qrRaw))
.setPositiveButton(R.string.perm_continue, (dialog, which) -> startBackupTransfer(qrRaw))
.setNegativeButton(R.string.cancel, null)
.setCancelable(false)
.show();
Expand Down
12 changes: 12 additions & 0 deletions src/org/thoughtcrime/securesms/connect/AccountManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.preference.PreferenceManager;
import android.util.Log;

import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;

import com.b44t.messenger.DcAccounts;
Expand Down Expand Up @@ -116,6 +117,10 @@ public void rollbackAccountCreation(Activity activity) {
}

public void switchAccountAndStartActivity(Activity activity, int destAccountId) {
switchAccountAndStartActivity(activity, destAccountId, null);
}

private void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String backupQr) {
if (destAccountId==0) {
beginAccountCreation(activity);
} else {
Expand All @@ -125,6 +130,9 @@ public void switchAccountAndStartActivity(Activity activity, int destAccountId)
activity.finishAffinity();
if (destAccountId==0) {
Intent intent = new Intent(activity, WelcomeActivity.class);
if (backupQr != null) {
intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr);
}
activity.startActivity(intent);
} else {
activity.startActivity(new Intent(activity.getApplicationContext(), ConversationListActivity.class));
Expand Down Expand Up @@ -167,4 +175,8 @@ public void addAccountFromQr(Activity activity, String qr) {
intent.putExtra(InstantOnboardingActivity.QR_ACCOUNT_EXTRA, qr);
activity.startActivity(intent);
}

public void addAccountFromSecondDevice(Activity activity, String backupQr) {
switchAccountAndStartActivity(activity, 0, backupQr);
}
}
2 changes: 1 addition & 1 deletion src/org/thoughtcrime/securesms/qr/QrCodeHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void handleQrData(String rawString) {
builder.setTitle(R.string.multidevice_receiver_title);
builder.setMessage(activity.getString(R.string.multidevice_receiver_scanning_ask) + "\n\n" + activity.getString(R.string.multidevice_same_network_hint));
builder.setPositiveButton(R.string.perm_continue, (dialog, which) -> {
AccountManager.getInstance().addAccountFromQr(activity, rawString);
AccountManager.getInstance().addAccountFromSecondDevice(activity, rawString);
});
builder.setNegativeButton(R.string.cancel, null);
builder.setCancelable(false);
Expand Down
Loading