diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java index 337787ad4..406fba957 100644 --- a/src/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/org/thoughtcrime/securesms/ConversationItem.java @@ -16,13 +16,13 @@ */ package org.thoughtcrime.securesms; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.Rect; -import android.net.Uri; import android.os.Build; import android.text.Spannable; import android.text.TextUtils; @@ -57,6 +57,7 @@ import org.thoughtcrime.securesms.components.DocumentView; import org.thoughtcrime.securesms.components.QuoteView; import org.thoughtcrime.securesms.components.WebxdcView; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; +import org.thoughtcrime.securesms.connect.AccountManager; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.mms.AudioSlide; import org.thoughtcrime.securesms.mms.DocumentSlide; @@ -66,7 +67,6 @@ import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.mms.StickerSlide; -import org.thoughtcrime.securesms.providers.PersistentBlobProvider; import org.thoughtcrime.securesms.reactions.ReactionsConversationView; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.JsonUtils; @@ -642,21 +642,17 @@ public class ConversationItem extends BaseConversationItem private void joinCommunity(DcMsg dcMsg) { JSONObject info = dcMsg.getWebxdcInfo(); String name = JsonUtils.optString(info, "name"); - new AlertDialog.Builder(getContext()) + Context context = getContext(); + new AlertDialog.Builder(context) .setMessage(getContext().getString(R.string.ask_join_community, name)) .setPositiveButton(R.string.yes, (dialog, which) -> { String filename = "backup.tar"; byte[] blob = dcMsg.getWebxdcBlob(filename); if (blob == null) { - Toast.makeText(getContext(), "invalid community file", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, "invalid community file", Toast.LENGTH_SHORT).show(); return; } - Intent intent = new Intent(getContext(), WelcomeActivity.class); - String mimeType = "application/octet-stream"; - Uri uri = PersistentBlobProvider.getInstance().create(getContext(), blob, mimeType, filename); - intent.setType(mimeType); - intent.putExtra(WelcomeActivity.COMMUNITY_EXTRA, uri); - getContext().startActivity(intent); + AccountManager.getInstance().addAccountFromCommunity((Activity) getContext(), blob); }) .setNegativeButton(R.string.no, null) .show(); diff --git a/src/org/thoughtcrime/securesms/CreateProfileActivity.java b/src/org/thoughtcrime/securesms/CreateProfileActivity.java index 0c32d0c9e..f831a7ad2 100644 --- a/src/org/thoughtcrime/securesms/CreateProfileActivity.java +++ b/src/org/thoughtcrime/securesms/CreateProfileActivity.java @@ -294,7 +294,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj } private void updateProfile() { - boolean isCommunity = DcHelper.getContext(context).isCommunity(); + boolean isCommunity = DcHelper.getContext(this).isCommunity(); if (TextUtils.isEmpty(this.name.getText()) && !(isCommunity && fromWelcome)) { Toast.makeText(this, R.string.please_enter_name, Toast.LENGTH_LONG).show(); return; diff --git a/src/org/thoughtcrime/securesms/WelcomeActivity.java b/src/org/thoughtcrime/securesms/WelcomeActivity.java index 927897b5c..ec7d1ee27 100644 --- a/src/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/org/thoughtcrime/securesms/WelcomeActivity.java @@ -33,6 +33,7 @@ import org.thoughtcrime.securesms.connect.AccountManager; import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.mms.AttachmentManager; +import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.qr.BackupTransferActivity; import org.thoughtcrime.securesms.qr.RegistrationQrActivity; @@ -300,7 +301,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen } private File copyToCacheDir(Uri uri) throws IOException { - try (InputStream inputStream = getContentResolver().openInputStream(uri)) { + try (InputStream inputStream = PartAuthority.getAttachmentStream(this, uri)) { File file = File.createTempFile(TMP_BACKUP_FILE, ".tmp", getCacheDir()); try (OutputStream outputStream = new FileOutputStream(file)) { StreamUtil.copy(inputStream, outputStream); diff --git a/src/org/thoughtcrime/securesms/connect/AccountManager.java b/src/org/thoughtcrime/securesms/connect/AccountManager.java index 7014cc0c3..fbd57b166 100644 --- a/src/org/thoughtcrime/securesms/connect/AccountManager.java +++ b/src/org/thoughtcrime/securesms/connect/AccountManager.java @@ -5,6 +5,7 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_VERIFIED_ONE_ON import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.preference.PreferenceManager; import android.util.Log; @@ -21,6 +22,7 @@ import org.thoughtcrime.securesms.WelcomeActivity; import org.thoughtcrime.securesms.accounts.AccountSelectionListFragment; import org.thoughtcrime.securesms.crypto.DatabaseSecret; import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider; +import org.thoughtcrime.securesms.providers.PersistentBlobProvider; import java.io.File; @@ -117,10 +119,10 @@ public class AccountManager { } public void switchAccountAndStartActivity(Activity activity, int destAccountId) { - switchAccountAndStartActivity(activity, destAccountId, null); + switchAccountAndStartActivity(activity, destAccountId, null, null); } - private void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String backupQr) { + private void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String backupQr, @Nullable byte[] communityBlob) { if (destAccountId==0) { beginAccountCreation(activity); } else { @@ -133,6 +135,12 @@ public class AccountManager { if (backupQr != null) { intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr); } + if (communityBlob != null) { + String mimeType = "application/octet-stream"; + Uri uri = PersistentBlobProvider.getInstance().create(activity, communityBlob, mimeType, "backup.tar"); + intent.setType(mimeType); + intent.putExtra(WelcomeActivity.COMMUNITY_EXTRA, uri); + } activity.startActivity(intent); } else { activity.startActivity(new Intent(activity.getApplicationContext(), ConversationListActivity.class)); @@ -176,7 +184,11 @@ public class AccountManager { activity.startActivity(intent); } + public void addAccountFromCommunity(Activity activity, byte[] communityBlob) { + switchAccountAndStartActivity(activity, 0, null, communityBlob); + } + public void addAccountFromSecondDevice(Activity activity, String backupQr) { - switchAccountAndStartActivity(activity, 0, backupQr); + switchAccountAndStartActivity(activity, 0, backupQr, null); } }