diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml index 52d33534b8..0faa9da03c 100644 --- a/res/layout/conversation_activity.xml +++ b/res/layout/conversation_activity.xml @@ -23,10 +23,12 @@ android:clipToPadding="false" android:clipChildren="false"> - + + diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 68ea8ba8b9..89b03b222f 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -55,6 +55,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.View.OnKeyListener; +import android.view.ViewStub; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.ImageButton; @@ -143,6 +144,7 @@ import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; +import org.thoughtcrime.securesms.util.views.Stub; import org.whispersystems.libsignal.InvalidMessageException; import org.whispersystems.libsignal.util.guava.Optional; @@ -205,7 +207,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private Button makeDefaultSmsButton; private InputAwareLayout container; private View composePanel; - protected ReminderView reminderView; + protected Stub reminderView; private AttachmentTypeSelector attachmentTypeSelector; private AttachmentManager attachmentManager; @@ -782,6 +784,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private void handleAddAttachment() { if (this.isMmsEnabled || isSecureText) { + if (attachmentTypeSelector == null) { + attachmentTypeSelector = new AttachmentTypeSelector(this, getSupportLoaderManager(), new AttachmentTypeListener()); + } attachmentTypeSelector.show(this, attachButton); } else { handleManualMmsRequired(); @@ -947,12 +952,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity @Override public void onClick(View v) { handleInviteLink(); - reminderView.requestDismiss(); + reminderView.get().requestDismiss(); } }); - reminderView.showReminder(reminder); - } else { - reminderView.hide(); + reminderView.get().showReminder(reminder); + } else if (reminderView.resolved()) { + reminderView.get().hide(); } } @@ -987,7 +992,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity makeDefaultSmsButton = ViewUtil.findById(this, R.id.make_default_sms_button); composePanel = ViewUtil.findById(this, R.id.bottom_panel); container = ViewUtil.findById(this, R.id.layout_container); - reminderView = ViewUtil.findById(this, R.id.reminder); + reminderView = ViewUtil.findStubById(this, R.id.reminder_stub); quickAttachmentDrawer = ViewUtil.findById(this, R.id.quick_attachment_drawer); quickAttachmentToggle = ViewUtil.findById(this, R.id.quick_attachment_toggle); inputPanel = ViewUtil.findById(this, R.id.bottom_panel); @@ -1005,7 +1010,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity composeBubble.getBackground().setColorFilter(defaultColor, PorterDuff.Mode.MULTIPLY); colors.recycle(); - attachmentTypeSelector = new AttachmentTypeSelector(this, getSupportLoaderManager(), new AttachmentTypeListener()); + attachmentTypeSelector = null; attachmentManager = new AttachmentManager(this, this); audioRecorder = new AudioRecorder(this, masterSecret); diff --git a/src/org/thoughtcrime/securesms/ConversationPopupActivity.java b/src/org/thoughtcrime/securesms/ConversationPopupActivity.java index e0ba797db6..94eaf6e22f 100644 --- a/src/org/thoughtcrime/securesms/ConversationPopupActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationPopupActivity.java @@ -122,6 +122,8 @@ public class ConversationPopupActivity extends ConversationActivity { @Override protected void updateInviteReminder(boolean seenInvite) { - reminderView.setVisibility(View.GONE); + if (reminderView.resolved()) { + reminderView.get().setVisibility(View.GONE); + } } } diff --git a/src/org/thoughtcrime/securesms/util/ViewUtil.java b/src/org/thoughtcrime/securesms/util/ViewUtil.java index bc919b26aa..947a902660 100644 --- a/src/org/thoughtcrime/securesms/util/ViewUtil.java +++ b/src/org/thoughtcrime/securesms/util/ViewUtil.java @@ -42,6 +42,7 @@ import android.widget.TextView; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; +import org.thoughtcrime.securesms.util.views.Stub; public class ViewUtil { @SuppressWarnings("deprecation") @@ -121,6 +122,10 @@ public class ViewUtil { return (T) parent.findViewById(resId); } + public static Stub findStubById(@NonNull Activity parent, @IdRes int resId) { + return new Stub((ViewStub)parent.findViewById(resId)); + } + private static Animation getAlphaAnimation(float from, float to, int duration) { final Animation anim = new AlphaAnimation(from, to); anim.setInterpolator(new FastOutSlowInInterpolator());