diff --git a/CHANGELOG-upstream.md b/CHANGELOG-upstream.md index e4513f399..24bda9601 100644 --- a/CHANGELOG-upstream.md +++ b/CHANGELOG-upstream.md @@ -1,5 +1,9 @@ # Delta Chat Android Changelog +## Unreleased + +* Allow to add relay from clipboard or image if camera permission is not granted + ## v2.33.1 2025-12 diff --git a/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 235333c6f..5bd1cc7a8 100644 --- a/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -111,7 +111,9 @@ public class ApplicationContext extends MultiDexApplication { System.loadLibrary("native-utils"); dcAccounts = new DcAccounts(new File(getFilesDir(), "accounts").getAbsolutePath()); + Log.i(TAG, "DcAccounts created"); rpc = new Rpc(new FFITransport(dcAccounts.getJsonrpcInstance())); + Log.i(TAG, "Rpc created"); AccountManager.getInstance().migrateToDcAccounts(this); // October-2025 migration: delete deprecated "permanent channel" id @@ -120,6 +122,7 @@ public class ApplicationContext extends MultiDexApplication { // end October-2025 migration int[] allAccounts = dcAccounts.getAll(); + Log.i(TAG, "Number of profiles: " + allAccounts.length); for (int accountId : allAccounts) { DcContext ac = dcAccounts.getAccount(accountId); if (!ac.isOpen()) { @@ -150,7 +153,9 @@ public class ApplicationContext extends MultiDexApplication { notificationCenter = new NotificationCenter(this); eventCenter = new DcEventCenter(this); new Thread(() -> { + Log.i(TAG, "Starting event loop"); DcEventEmitter emitter = dcAccounts.getEventEmitter(); + Log.i(TAG, "DcEventEmitter obtained"); while (true) { DcEvent event = emitter.getNextEvent(); if (event==null) { diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java index adfdbdcc8..4df962c37 100644 --- a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java @@ -76,7 +76,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private static final String INSTANCES_URL = "https://chatmail.at/relays"; private static final String DEFAULT_CHATMAIL_HOST = "arcanechat.me"; - 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; @@ -113,12 +112,16 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements if (DcHelper.getContext(this).isConfigured() == 1) { // if account is configured it means we didn't come from Welcome screen nor from QR scanner, // instead, user clicked a dcaccount:// URI directly, so we need to just offer to add a new relay - Intent intent = new Intent(this, RelayListActivity.class); - String qrData = getIntent().getData().toString(); - intent.putExtra(RelayListActivity.EXTRA_QR_DATA, qrData); - startActivity(intent); - finish(); - return; + Uri uri = getIntent().getData(); + if (uri != null) { + Intent intent = new Intent(this, RelayListActivity.class); + intent.putExtra(RelayListActivity.EXTRA_QR_DATA, uri.toString()); + startActivity(intent); + finish(); + return; + } + // if URI is unexpectedly null, then fallback to new profile creation + AccountManager.getInstance().beginAccountCreation(this); } getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(!fromWelcome) { @@ -241,16 +244,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); } - @Override - public void onStart() { - super.onStart(); - String accountQr = getIntent().getStringExtra(QR_ACCOUNT_EXTRA); - if (accountQr != null) { - getIntent().removeExtra(QR_ACCOUNT_EXTRA); - setProviderFromQr(accountQr); - } - } - @Override protected void onPause() { super.onPause(); diff --git a/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java index 4997bdf37..12d98b51c 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java @@ -152,14 +152,6 @@ public class AccountManager { dialog.show(((FragmentActivity) activity).getSupportFragmentManager(), null); } - public void addAccountFromQr(Activity activity, String qr) { - beginAccountCreation(activity); - activity.finishAffinity(); - Intent intent = new Intent(activity, InstantOnboardingActivity.class); - intent.putExtra(InstantOnboardingActivity.QR_ACCOUNT_EXTRA, qr); - activity.startActivity(intent); - } - public void addAccountFromSecondDevice(Activity activity, String backupQr) { switchAccountAndStartActivity(activity, 0, backupQr); } diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java index 4676930e8..44bd08cae 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java @@ -110,7 +110,7 @@ public class QrActivity extends BaseActionBarActivity implements View.OnClickLis .onAllGranted(() -> ((QrScanFragment) adapter.getItem(TAB_SCAN)).handleQrScanWithPermissions(QrActivity.this)) .onAnyDenied(() -> { if (scanRelay) { - finish(); + Toast.makeText(this, getString(R.string.chat_camera_unavailable), Toast.LENGTH_LONG).show(); } else { viewPager.setCurrentItem(TAB_SHOW); } @@ -162,7 +162,7 @@ public class QrActivity extends BaseActionBarActivity implements View.OnClickLis && Manifest.permission.CAMERA.equals(permissions[0]) && grantResults[0] == PackageManager.PERMISSION_DENIED) { if (scanRelay) { - finish(); + Toast.makeText(this, getString(R.string.chat_camera_unavailable), Toast.LENGTH_LONG).show(); } else { viewPager.setCurrentItem(TAB_SHOW); } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index f9358b878..c5ee6bfef 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -611,7 +611,7 @@ Create New Profile I Already Have a Profile - + Use Classic Email as Relay Your Profile @@ -636,7 +636,7 @@ Secure Decentralized Chat Scan Invitation Code Log In - This login is for advanced users:\n\n• Do not use an account you\'re using in another app.\n\n• Classic email server allow chats without end-to-end encryption marked by a mail icon. + This login is for advanced users:\n\n• Do not use an address you\'re using in another app.\n\n• Classic email server allow chats without end-to-end encryption marked by a mail icon. Inbox IMAP Login Name IMAP Server