From 8d76aa003bffd4087c3e9de5dc8c1bb69c390546 Mon Sep 17 00:00:00 2001 From: samfundev Date: Tue, 2 Jan 2024 20:11:55 -0500 Subject: [PATCH] Refactor chat manager to remove static variables These static variables have caused a lot of issues with VOD chat so I think it is better to ensure the chat created first. --- .../activities/stream/StreamActivity.java | 10 ++++---- .../com/perflyst/twire/chat/ChatManager.java | 23 +++++++++---------- .../twire/fragments/ChatFragment.java | 12 ++++++---- .../twire/fragments/StreamFragment.java | 6 ++--- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/perflyst/twire/activities/stream/StreamActivity.java b/app/src/main/java/com/perflyst/twire/activities/stream/StreamActivity.java index 6bd7af43..7d5d30a3 100644 --- a/app/src/main/java/com/perflyst/twire/activities/stream/StreamActivity.java +++ b/app/src/main/java/com/perflyst/twire/activities/stream/StreamActivity.java @@ -74,15 +74,15 @@ protected void onCreate(Bundle savedInstanceState) { // If the Fragment is non-null, then it is currently being // retained across a configuration change. - if (mStreamFragment == null) { - mStreamFragment = StreamFragment.newInstance(getStreamArguments()); - fm.beginTransaction().replace(getVideoContainerResource(), mStreamFragment, getString(R.string.stream_fragment_tag)).commit(); - } - if (mChatFragment == null) { mChatFragment = ChatFragment.getInstance(getStreamArguments()); fm.beginTransaction().replace(R.id.chat_fragment, mChatFragment).commit(); } + + if (mStreamFragment == null) { + mStreamFragment = StreamFragment.newInstance(getStreamArguments()); + fm.beginTransaction().replace(getVideoContainerResource(), mStreamFragment, getString(R.string.stream_fragment_tag)).commit(); + } } settings = new Settings(this); diff --git a/app/src/main/java/com/perflyst/twire/chat/ChatManager.java b/app/src/main/java/com/perflyst/twire/chat/ChatManager.java index 8ed0c302..feb0c5fb 100644 --- a/app/src/main/java/com/perflyst/twire/chat/ChatManager.java +++ b/app/src/main/java/com/perflyst/twire/chat/ChatManager.java @@ -45,10 +45,10 @@ public class ChatManager implements Runnable { public static ChatManager instance = null; public static ImmutableSetMultimap ffzBadgeMap; - private static double currentProgress = -1; - private static String cursor = ""; - private static boolean seek = false; - private static double previousProgress; + private double currentProgress = -1; + private String cursor = ""; + private boolean seek = false; + private double previousProgress; private final String LOG_TAG = getClass().getSimpleName(); private final String user; private final String password; @@ -118,27 +118,26 @@ public ChatManager(Context aContext, UserInfo aChannel, String aVodId, ChatCallb nextCommentOffset = 0; } - public static void updateVodProgress(long aCurrentProgress, boolean aSeek) { + public void updateVodProgress(long aCurrentProgress, boolean aSeek) { currentProgress = aCurrentProgress / 1000f; seek |= aSeek; - if (instance == null) return; - // Only notify the thread when there's work to do. - if (!aSeek && currentProgress < instance.nextCommentOffset) return; + if (!aSeek && currentProgress < nextCommentOffset) return; - synchronized (instance.vodLock) { - instance.vodLock.notify(); + synchronized (vodLock) { + vodLock.notify(); } } - public static void setPreviousProgress() { + public void setPreviousProgress() { previousProgress = currentProgress; cursor = ""; } @Override public void run() { + isStopping = false; Log.d(LOG_TAG, "Trying to start chat " + channel.getLogin() + " for user " + user); mEmoteManager.loadCustomEmotes(() -> onUpdate(UpdateType.ON_CUSTOM_EMOTES_FETCHED)); @@ -268,7 +267,7 @@ private VODComment(double contentOffset, JSONObject data) { } private void processVodChat() { - try { + try { onUpdate(UpdateType.ON_CONNECTED); // Make sure that current progress has been set. diff --git a/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java b/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java index 75ede567..e33634c3 100644 --- a/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java +++ b/app/src/main/java/com/perflyst/twire/fragments/ChatFragment.java @@ -192,12 +192,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, setupKeyboardShowListener(); setupTransition(); - return mRootView; - } - @Override - public void onStart() { - super.onStart(); chatManager = new ChatManager(getContext(), mUserInfo, vodID, new ChatManager.ChatCallback() { private boolean connected = false; @@ -301,6 +296,13 @@ private void roomStateIconChange(boolean isOn, ImageView icon) { } }); + return mRootView; + } + + @Override + public void onStart() { + super.onStart(); + TwireApplication.backgroundPoster.post(chatManager); if (supportedTextEmotes == null) { diff --git a/app/src/main/java/com/perflyst/twire/fragments/StreamFragment.java b/app/src/main/java/com/perflyst/twire/fragments/StreamFragment.java index a549acf7..29dec10c 100644 --- a/app/src/main/java/com/perflyst/twire/fragments/StreamFragment.java +++ b/app/src/main/java/com/perflyst/twire/fragments/StreamFragment.java @@ -195,7 +195,7 @@ public class StreamFragment extends Fragment implements Player.Listener { public void run() { if (player == null) return; - ChatManager.updateVodProgress(player.getCurrentPosition(), false); + ChatManager.instance.updateVodProgress(player.getCurrentPosition(), false); if (player.isPlaying()) vodHandler.postDelayed(this, 1000); } @@ -644,7 +644,7 @@ public void onPositionDiscontinuity(@NonNull Player.PositionInfo oldPosition, @N // A seek is when we've gone backwards or we go more than 10 seconds forward. boolean seek = oldMs > newMs || newMs - oldMs > 10000; if (seek) streamFragmentCallback.onSeek(); - ChatManager.updateVodProgress(newMs, seek); + ChatManager.instance.updateVodProgress(newMs, seek); } @Override @@ -750,7 +750,7 @@ public void onPause() { releasePlayer(); } - ChatManager.setPreviousProgress(); + ChatManager.instance.setPreviousProgress(); } @Override