diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 38cc54fb5e..4c0f017ff4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -57,6 +57,7 @@ import android.view.View.OnKeyListener; import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.widget.Button; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; @@ -381,7 +382,7 @@ public class ConversationActivity extends PassphraseRequiredActivity private MenuItem searchViewItem; private MessageRequestsBottomView messageRequestBottomView; private ConversationReactionDelegate reactionDelegate; - private Stub voiceNotePlayerViewStub; + private Stub voiceNotePlayerViewStub; private AttachmentManager attachmentManager; private AudioRecorder audioRecorder; @@ -413,6 +414,7 @@ public class ConversationActivity extends PassphraseRequiredActivity private VoiceRecorderWakeLock voiceRecorderWakeLock; private DraftViewModel draftViewModel; private VoiceNoteMediaController voiceNoteMediaController; + private VoiceNotePlayerView voiceNotePlayerView; private LiveRecipient recipient; @@ -2076,19 +2078,25 @@ public class ConversationActivity extends PassphraseRequiredActivity voiceNoteMediaController.getVoiceNotePlayerViewState().observe(this, state -> { if (state.isPresent()) { - if (!voiceNotePlayerViewStub.resolved()) { - voiceNotePlayerViewStub.get().setListener(new VoiceNotePlayerViewListener()); - } - voiceNotePlayerViewStub.get().show(); - voiceNotePlayerViewStub.get().setState(state.get()); + requireVoiceNotePlayerView().show(); + requireVoiceNotePlayerView().setState(state.get()); } else if (voiceNotePlayerViewStub.resolved()) { - voiceNotePlayerViewStub.get().hide(); + requireVoiceNotePlayerView().hide(); } }); voiceNoteMediaController.getVoiceNotePlaybackState().observe(ConversationActivity.this, inputPanel.getPlaybackStateObserver()); } + private @NonNull VoiceNotePlayerView requireVoiceNotePlayerView() { + if (voiceNotePlayerView == null) { + voiceNotePlayerView = voiceNotePlayerViewStub.get().findViewById(R.id.voice_note_player_view); + voiceNotePlayerView.setListener(new VoiceNotePlayerViewListener()); + } + + return voiceNotePlayerView; + } + private void updateWallpaper(@Nullable ChatWallpaper chatWallpaper) { Log.d(TAG, "Setting wallpaper."); if (chatWallpaper != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 087d9ca7ae..3d2ecc6c29 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -38,6 +38,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -58,8 +59,6 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; import androidx.core.content.res.ResourcesCompat; import androidx.fragment.app.DialogFragment; -import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; @@ -92,7 +91,6 @@ import org.thoughtcrime.securesms.components.reminder.ReminderView; import org.thoughtcrime.securesms.components.reminder.ServiceOutageReminder; import org.thoughtcrime.securesms.components.reminder.UnauthorizedReminder; import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity; -import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController; import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner; import org.thoughtcrime.securesms.components.voice.VoiceNotePlayerView; import org.thoughtcrime.securesms.conversation.ConversationFragment; @@ -195,7 +193,9 @@ public class ConversationListFragment extends MainFragment implements ActionMode private Drawable archiveDrawable; private AppForegroundObserver.Listener appForegroundObserver; private VoiceNoteMediaControllerOwner mediaControllerOwner; - private Stub voiceNotePlayerViewStub; + private Stub voiceNotePlayerViewStub; + private VoiceNotePlayerView voiceNotePlayerView; + private Stopwatch startupStopwatch; @@ -531,18 +531,24 @@ public class ConversationListFragment extends MainFragment implements ActionMode private void initializeVoiceNotePlayer() { mediaControllerOwner.getVoiceNoteMediaController().getVoiceNotePlayerViewState().observe(getViewLifecycleOwner(), state -> { if (state.isPresent()) { - if (!voiceNotePlayerViewStub.resolved()) { - voiceNotePlayerViewStub.get().setListener(new VoiceNotePlayerViewListener()); - } - - voiceNotePlayerViewStub.get().setState(state.get()); - voiceNotePlayerViewStub.get().show(); + requireVoiceNotePlayerView().setState(state.get()); + requireVoiceNotePlayerView().show(); } else if (voiceNotePlayerViewStub.resolved()) { - voiceNotePlayerViewStub.get().hide(); + requireVoiceNotePlayerView().hide(); } }); } + private @NonNull VoiceNotePlayerView requireVoiceNotePlayerView() { + if (voiceNotePlayerView == null) { + voiceNotePlayerView = voiceNotePlayerViewStub.get().findViewById(R.id.voice_note_player_view); + voiceNotePlayerView.setListener(new VoiceNotePlayerViewListener()); + } + + return voiceNotePlayerView; + } + + private void initializeListAdapters() { defaultAdapter = new ConversationListAdapter(GlideApp.with(this), this); searchAdapter = new ConversationListSearchAdapter(GlideApp.with(this), this, Locale.getDefault()); diff --git a/app/src/main/res/layout/voice_note_player_stub.xml b/app/src/main/res/layout/voice_note_player_stub.xml index 796f79778d..e41f1d3a19 100644 --- a/app/src/main/res/layout/voice_note_player_stub.xml +++ b/app/src/main/res/layout/voice_note_player_stub.xml @@ -1,5 +1,12 @@ - \ No newline at end of file + android:background="@color/voice_note_player_view_background"> + + + diff --git a/app/src/main/res/layout/voice_note_player_view.xml b/app/src/main/res/layout/voice_note_player_view.xml index 8d3da16fa4..46c3d2f97a 100644 --- a/app/src/main/res/layout/voice_note_player_view.xml +++ b/app/src/main/res/layout/voice_note_player_view.xml @@ -2,7 +2,6 @@