Merge pull request #1674 from tomaThomas/local-broadcast-manager

Use LocalBroadcastManager for application internal communication
This commit is contained in:
Hemanth Savarala 2024-10-19 23:01:53 +05:30 committed by GitHub
commit 0489cd8190
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 32 additions and 17 deletions

View file

@ -19,6 +19,7 @@ import android.graphics.Color
import android.graphics.PorterDuff import android.graphics.PorterDuff
import android.os.Bundle import android.os.Bundle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity
import code.name.monkey.retromusic.databinding.ActivityDriveModeBinding import code.name.monkey.retromusic.databinding.ActivityDriveModeBinding
@ -95,7 +96,8 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
} else { } else {
repository.insertSongs(listOf(song.toSongEntity(playlist.playListId))) repository.insertSongs(listOf(song.toSongEntity(playlist.playListId)))
} }
sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) LocalBroadcastManager.getInstance(this@DriveModeActivity)
.sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED))
} }
} }

View file

@ -20,6 +20,7 @@ import android.os.Bundle
import android.os.IBinder import android.os.IBinder
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.db.toPlayCount import code.name.monkey.retromusic.db.toPlayCount
@ -66,8 +67,8 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
MusicPlayerRemote.unbindFromService(serviceToken) MusicPlayerRemote.unbindFromService(serviceToken)
if (receiverRegistered) { if (receiverRegistered && musicStateReceiver != null) {
unregisterReceiver(musicStateReceiver) LocalBroadcastManager.getInstance(this).unregisterReceiver(musicStateReceiver!!)
receiverRegistered = false receiverRegistered = false
} }
} }
@ -97,7 +98,7 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
filter.addAction(MEDIA_STORE_CHANGED) filter.addAction(MEDIA_STORE_CHANGED)
filter.addAction(FAVORITE_STATE_CHANGED) filter.addAction(FAVORITE_STATE_CHANGED)
ContextCompat.registerReceiver(this, musicStateReceiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED) LocalBroadcastManager.getInstance(this).registerReceiver(musicStateReceiver!!, filter)
receiverRegistered = true receiverRegistered = true
} }
@ -107,8 +108,8 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
} }
override fun onServiceDisconnected() { override fun onServiceDisconnected() {
if (receiverRegistered) { if (receiverRegistered && musicStateReceiver != null) {
unregisterReceiver(musicStateReceiver) LocalBroadcastManager.getInstance(this).unregisterReceiver(musicStateReceiver!!)
receiverRegistered = false receiverRegistered = false
} }
@ -176,7 +177,7 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
"from_permissions_changed", "from_permissions_changed",
true true
) // just in case we need to know this at some point ) // just in case we need to know this at some point
sendBroadcast(intent) LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
logD("sendBroadcast $hasPermissions") logD("sendBroadcast $hasPermissions")
} }

View file

@ -25,6 +25,7 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
@ -50,7 +51,7 @@ abstract class BaseAppWidget : AppWidgetProvider() {
updateIntent.putExtra(EXTRA_APP_WIDGET_NAME, NAME) updateIntent.putExtra(EXTRA_APP_WIDGET_NAME, NAME)
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds) updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds)
updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY) updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)
context.sendBroadcast(updateIntent) LocalBroadcastManager.getInstance(context).sendBroadcast(updateIntent)
} }
/** /**

View file

@ -33,6 +33,7 @@ import androidx.appcompat.widget.Toolbar
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.navOptions import androidx.navigation.navOptions
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
@ -273,7 +274,8 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId))) libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId)))
} }
libraryViewModel.forceReload(ReloadType.Playlists) libraryViewModel.forceReload(ReloadType.Playlists)
requireContext().sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) LocalBroadcastManager.getInstance(requireContext())
.sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED))
} }
} }

View file

@ -26,6 +26,7 @@ import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
@ -256,7 +257,8 @@ class FullPlaybackControlsFragment :
libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId))) libraryViewModel.insertSongs(listOf(song.toSongEntity(playlist.playListId)))
} }
libraryViewModel.forceReload(ReloadType.Playlists) libraryViewModel.forceReload(ReloadType.Playlists)
requireContext().sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) LocalBroadcastManager.getInstance(requireContext())
.sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED))
} }
} }

View file

@ -26,6 +26,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment; import android.os.Environment;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
@ -155,7 +156,7 @@ public class BlacklistStore extends SQLiteOpenHelper {
} }
private void notifyMediaStoreChanged() { private void notifyMediaStoreChanged() {
context.sendBroadcast(new Intent(MEDIA_STORE_CHANGED)); LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(MEDIA_STORE_CHANGED));
} }
@NonNull @NonNull

View file

@ -42,6 +42,7 @@ import androidx.core.content.ContextCompat
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.os.BundleCompat import androidx.core.os.BundleCompat
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.media.MediaBrowserServiceCompat import androidx.media.MediaBrowserServiceCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
@ -287,8 +288,12 @@ class MusicService : MediaBrowserServiceCompat(),
setupMediaSession() setupMediaSession()
uiThreadHandler = Handler(Looper.getMainLooper()) uiThreadHandler = Handler(Looper.getMainLooper())
ContextCompat.registerReceiver(this, widgetIntentReceiver, IntentFilter(APP_WIDGET_UPDATE), ContextCompat.RECEIVER_NOT_EXPORTED) LocalBroadcastManager.getInstance(this).registerReceiver(
ContextCompat.registerReceiver(this, updateFavoriteReceiver, IntentFilter(FAVORITE_STATE_CHANGED), ContextCompat.RECEIVER_NOT_EXPORTED) widgetIntentReceiver, IntentFilter(APP_WIDGET_UPDATE)
)
LocalBroadcastManager.getInstance(this).registerReceiver(
updateFavoriteReceiver, IntentFilter(FAVORITE_STATE_CHANGED)
)
registerReceiver(lockScreenReceiver, IntentFilter(Intent.ACTION_SCREEN_ON)) registerReceiver(lockScreenReceiver, IntentFilter(Intent.ACTION_SCREEN_ON))
sessionToken = mediaSession?.sessionToken sessionToken = mediaSession?.sessionToken
notificationManager = getSystemService() notificationManager = getSystemService()
@ -318,8 +323,8 @@ class MusicService : MediaBrowserServiceCompat(),
} }
override fun onDestroy() { override fun onDestroy() {
unregisterReceiver(widgetIntentReceiver) LocalBroadcastManager.getInstance(this).unregisterReceiver(widgetIntentReceiver)
unregisterReceiver(updateFavoriteReceiver) LocalBroadcastManager.getInstance(this).unregisterReceiver(updateFavoriteReceiver)
unregisterReceiver(lockScreenReceiver) unregisterReceiver(lockScreenReceiver)
if (headsetReceiverRegistered) { if (headsetReceiverRegistered) {
unregisterReceiver(headsetReceiver) unregisterReceiver(headsetReceiver)
@ -837,7 +842,8 @@ class MusicService : MediaBrowserServiceCompat(),
fun toggleFavorite() { fun toggleFavorite() {
serviceScope.launch { serviceScope.launch {
toggleFavorite(currentSong) toggleFavorite(currentSong)
sendBroadcast(Intent(FAVORITE_STATE_CHANGED)) LocalBroadcastManager.getInstance(this@MusicService)
.sendBroadcast(Intent(FAVORITE_STATE_CHANGED))
} }
} }
@ -1311,7 +1317,7 @@ class MusicService : MediaBrowserServiceCompat(),
} }
private fun sendChangeInternal(what: String) { private fun sendChangeInternal(what: String) {
sendBroadcast(Intent(what)) LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(what))
appWidgetBig.notifyChange(this, what) appWidgetBig.notifyChange(this, what)
appWidgetClassic.notifyChange(this, what) appWidgetClassic.notifyChange(this, what)
appWidgetSmall.notifyChange(this, what) appWidgetSmall.notifyChange(this, what)