diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 406a64d24a..a17ce35470 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -308,6 +308,7 @@ + diff --git a/res/values/strings.xml b/res/values/strings.xml index 547f862f7f..2f8b7d1dfc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1245,6 +1245,7 @@ Save Forward + All images Save all diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java index db4e4e147c..93666e65fb 100644 --- a/src/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/org/thoughtcrime/securesms/ConversationItem.java @@ -542,6 +542,7 @@ public class ConversationItem extends LinearLayout if (!messageRecord.isOutgoing()) intent.putExtra(MediaPreviewActivity.RECIPIENT_EXTRA, recipient.getRecipientId()); intent.putExtra(MediaPreviewActivity.DATE_EXTRA, messageRecord.getTimestamp()); intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, slide.asAttachment().getSize()); + intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, messageRecord.getThreadId()); context.startActivity(intent); } else { diff --git a/src/org/thoughtcrime/securesms/ImageMediaAdapter.java b/src/org/thoughtcrime/securesms/ImageMediaAdapter.java index 3d51d6bf51..0c150b1001 100644 --- a/src/org/thoughtcrime/securesms/ImageMediaAdapter.java +++ b/src/org/thoughtcrime/securesms/ImageMediaAdapter.java @@ -41,6 +41,7 @@ public class ImageMediaAdapter extends CursorRecyclerViewAdapter { private static final String TAG = ImageMediaAdapter.class.getSimpleName(); private final MasterSecret masterSecret; + private final long threadId; public static class ViewHolder extends RecyclerView.ViewHolder { public ThumbnailView imageView; @@ -51,9 +52,10 @@ public class ImageMediaAdapter extends CursorRecyclerViewAdapter { } } - public ImageMediaAdapter(Context context, MasterSecret masterSecret, Cursor c) { + public ImageMediaAdapter(Context context, MasterSecret masterSecret, Cursor c, long threadId) { super(context, c); this.masterSecret = masterSecret; + this.threadId = threadId; } @Override @@ -87,6 +89,7 @@ public class ImageMediaAdapter extends CursorRecyclerViewAdapter { public void onClick(View v) { Intent intent = new Intent(getContext(), MediaPreviewActivity.class); intent.putExtra(MediaPreviewActivity.DATE_EXTRA, imageRecord.getDate()); + intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, threadId); if (!TextUtils.isEmpty(imageRecord.getAddress())) { Recipients recipients = RecipientFactory.getRecipientsFromString(getContext(), diff --git a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java index 35c0f874fc..a831ca683c 100644 --- a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java @@ -135,14 +135,19 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity i final long recipientId = getIntent().getLongExtra(RECIPIENT_EXTRA, -1); if (recipientId > -1) { recipient = RecipientFactory.getRecipientForId(this, recipientId, true); + } else if (threadId > -1){ + recipient = DatabaseFactory.getThreadDatabase(this).getRecipientsForThreadId(threadId).getPrimaryRecipient(); + } else { + recipient = null; + } + + if (recipient != null) { recipient.addListener(new RecipientModifiedListener() { @Override public void onModified(Recipient recipient) { initializeActionBar(); } }); - } else { - recipient = null; } } @@ -215,7 +220,7 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity i @Override public void onLoadFinished(Loader cursorLoader, Cursor cursor) { Log.w(TAG, "onLoadFinished()"); - gridView.setAdapter(new ImageMediaAdapter(this, masterSecret, cursor)); + gridView.setAdapter(new ImageMediaAdapter(this, masterSecret, cursor, threadId)); noImages.setVisibility(gridView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE); invalidateOptionsMenu(); } diff --git a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java index 933fd395af..935b11718a 100644 --- a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -53,6 +53,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im private final static String TAG = MediaPreviewActivity.class.getSimpleName(); public static final String RECIPIENT_EXTRA = "recipient"; + public static final String THREAD_ID_EXTRA = "thread_id"; public static final String DATE_EXTRA = "date"; public static final String SIZE_EXTRA = "size"; @@ -65,6 +66,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im private Uri mediaUri; private String mediaType; private Recipient recipient; + private long threadId; private long date; private long size; @@ -148,6 +150,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im mediaType = getIntent().getType(); date = getIntent().getLongExtra(DATE_EXTRA, System.currentTimeMillis()); size = getIntent().getLongExtra(SIZE_EXTRA, 0); + threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1); if (recipientId > -1) { recipient = RecipientFactory.getRecipientForId(this, recipientId, true); @@ -188,6 +191,12 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im video.cleanup(); } + private void showOverview() { + Intent intent = new Intent(this, MediaOverviewActivity.class); + intent.putExtra(MediaOverviewActivity.THREAD_ID_EXTRA, threadId); + startActivity(intent); + } + private void forward() { Intent composeIntent = new Intent(this, ShareActivity.class); composeIntent.putExtra(Intent.EXTRA_STREAM, mediaUri); @@ -212,6 +221,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im menu.clear(); MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.media_preview, menu); + if (threadId == -1) menu.findItem(R.id.media_overview).setVisible(false); return true; } @@ -221,9 +231,10 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im super.onOptionsItemSelected(item); switch (item.getItemId()) { - case R.id.media_preview__forward: forward(); return true; - case R.id.save: saveToDisk(); return true; - case android.R.id.home: finish(); return true; + case R.id.media_preview__overview: showOverview(); return true; + case R.id.media_preview__forward: forward(); return true; + case R.id.save: saveToDisk(); return true; + case android.R.id.home: finish(); return true; } return false;