diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 12c4db4..9b15933 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
index a9ba5a3..bf574f4 100755
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
@@ -121,6 +121,7 @@ object Preferences : KotprefModel() {
var mediaPlayerAlbum by stringPref(default = "")
var mediaPlayerArtist by stringPref(default = "")
var mediaPlayerPackage by stringPref(default = "")
+ var musicPlayersFilter by stringPref(default = "")
// Integrations
var installedIntegrations by intPref(default = 0)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt
index e8d25af..d749e9f 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt
@@ -38,6 +38,8 @@ object MediaPlayerHelper {
)
} catch (ex: Exception) {
emptyList()
+ }.filter {
+ Preferences.musicPlayersFilter == "" || isMusicPlayerAccepted(it.packageName)
}
if (list.isNotEmpty()) {
@@ -89,4 +91,14 @@ object MediaPlayerHelper {
remove(Preferences::mediaPlayerPackage)
}
}
+
+ fun isMusicPlayerAccepted(appPkg: String): Boolean = Preferences.musicPlayersFilter.contains(appPkg)
+
+ fun toggleMusicPlayerFilter(appPkg: String) {
+ if (Preferences.musicPlayersFilter == "" || !Preferences.musicPlayersFilter.contains(appPkg)) {
+ Preferences.musicPlayersFilter = Preferences.musicPlayersFilter.split(",").union(listOf(appPkg)).joinToString(separator = ",")
+ } else {
+ Preferences.musicPlayersFilter = Preferences.musicPlayersFilter.split(",").filter { it != appPkg }.joinToString(separator = ",")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt
index d69f6b7..18b7b21 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarJob.kt
@@ -120,7 +120,7 @@ class UpdateCalendarJob : JobIntentService() {
event.startDate.compareTo(event1.startDate)
}
})
-
+
eventRepository.saveEvents(
eventList
)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/MusicPlayersFilterActivity.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/MusicPlayersFilterActivity.kt
new file mode 100644
index 0000000..4b6fab2
--- /dev/null
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/MusicPlayersFilterActivity.kt
@@ -0,0 +1,141 @@
+package com.tommasoberlose.anotherwidget.ui.activities
+
+import android.app.Activity
+import android.os.Bundle
+import com.tommasoberlose.anotherwidget.R
+import android.content.Intent
+import android.content.pm.ApplicationInfo
+import android.content.pm.ResolveInfo
+import android.util.Log
+import android.view.View
+import android.widget.ImageView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.databinding.DataBindingUtil
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.bumptech.glide.Glide
+import com.tommasoberlose.anotherwidget.databinding.ActivityChooseApplicationBinding
+import com.tommasoberlose.anotherwidget.databinding.ActivityMusicPlayersFilterBinding
+import com.tommasoberlose.anotherwidget.global.Constants
+import com.tommasoberlose.anotherwidget.global.Preferences
+import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
+import com.tommasoberlose.anotherwidget.ui.viewmodels.ChooseApplicationViewModel
+import com.tommasoberlose.anotherwidget.ui.viewmodels.MusicPlayersFilterViewModel
+import kotlinx.android.synthetic.main.activity_choose_application.*
+import kotlinx.android.synthetic.main.activity_choose_application.list_view
+import kotlinx.coroutines.*
+import net.idik.lib.slimadapter.SlimAdapter
+import kotlin.Comparator as Comparator1
+
+
+class MusicPlayersFilterActivity : AppCompatActivity() {
+
+ private lateinit var adapter: SlimAdapter
+ private lateinit var viewModel: MusicPlayersFilterViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ viewModel = ViewModelProvider(this).get(MusicPlayersFilterViewModel::class.java)
+ val binding = DataBindingUtil.setContentView(this, R.layout.activity_music_players_filter)
+
+ list_view.setHasFixedSize(true)
+ val mLayoutManager = LinearLayoutManager(this)
+ list_view.layoutManager = mLayoutManager
+
+ adapter = SlimAdapter.create()
+ adapter
+ .register(R.layout.application_info_layout) { item, injector ->
+ injector
+ .text(R.id.text, item.loadLabel(viewModel.pm))
+ .with(R.id.icon) {
+ Glide
+ .with(this)
+ .load(item.loadIcon(viewModel.pm))
+ .centerCrop()
+ .into(it)
+ }
+ .visible(R.id.checkBox)
+ .clicked(R.id.item) {
+ toggleApp(item)
+ adapter.notifyItemRangeChanged(0, adapter.data.size)
+ }
+ .clicked(R.id.checkBox) {
+ toggleApp(item)
+ adapter.notifyItemRangeChanged(0, adapter.data.size)
+ }
+ .checked(R.id.checkBox, MediaPlayerHelper.isMusicPlayerAccepted(item.activityInfo.packageName))
+ }
+ .attachTo(list_view)
+
+ setupListener()
+ subscribeUi(binding, viewModel)
+
+ search.requestFocus()
+ }
+
+ private var filterJob: Job? = null
+
+ private fun subscribeUi(binding: ActivityMusicPlayersFilterBinding, viewModel: MusicPlayersFilterViewModel) {
+ binding.viewModel = viewModel
+
+ viewModel.appList.observe(this, Observer {
+ updateList(list = it)
+ loader.visibility = View.INVISIBLE
+ })
+
+ viewModel.searchInput.observe(this, Observer { search ->
+ updateList(search = search)
+ })
+
+ viewModel.musicPlayersFilter.observe(this, {
+ updateList()
+ })
+ }
+
+ private fun updateList(list: List? = viewModel.appList.value, search: String? = viewModel.searchInput.value) {
+ loader.visibility = View.VISIBLE
+ filterJob?.cancel()
+ filterJob = lifecycleScope.launch(Dispatchers.IO) {
+ if (list != null && list.isNotEmpty()) {
+ delay(200)
+ val filteredList: List = if (search == null || search == "") {
+ list
+ } else {
+ list.filter {
+ it.loadLabel(viewModel.pm).contains(search, true)
+ }
+ }.sortedWith { app1, app2 ->
+ if (MediaPlayerHelper.isMusicPlayerAccepted(app1.activityInfo.packageName) && MediaPlayerHelper.isMusicPlayerAccepted(app2.activityInfo.packageName)) {
+ app1.loadLabel(viewModel.pm).toString().compareTo(app2.loadLabel(viewModel.pm).toString(), ignoreCase = true)
+ } else if (MediaPlayerHelper.isMusicPlayerAccepted(app1.activityInfo.packageName)) {
+ -1
+ } else if (MediaPlayerHelper.isMusicPlayerAccepted(app2.activityInfo.packageName)) {
+ 1
+ } else {
+ app1.loadLabel(viewModel.pm).toString().compareTo(app2.loadLabel(viewModel.pm).toString(), ignoreCase = true)
+ }
+ }
+
+
+ withContext(Dispatchers.Main) {
+ adapter.updateData(filteredList)
+ loader.visibility = View.INVISIBLE
+ }
+ }
+ }
+ }
+
+ private fun setupListener() {
+ action_back.setOnClickListener {
+ onBackPressed()
+ }
+ }
+
+ private fun toggleApp(app: ResolveInfo) {
+ MediaPlayerHelper.toggleMusicPlayerFilter(app.activityInfo.packageName)
+ }
+}
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt
index c8902e1..df8053a 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/GlanceTabFragment.kt
@@ -44,6 +44,7 @@ import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
import com.tommasoberlose.anotherwidget.receivers.ActivityDetectionReceiver
import com.tommasoberlose.anotherwidget.receivers.ActivityDetectionReceiver.Companion.FITNESS_OPTIONS
import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
+import com.tommasoberlose.anotherwidget.ui.activities.MusicPlayersFilterActivity
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
import com.tommasoberlose.anotherwidget.utils.checkIfFitInstalled
@@ -136,6 +137,9 @@ class GlanceTabFragment : Fragment() {
}
})
+ viewModel.musicPlayersFilter.observe(viewLifecycleOwner, Observer {
+
+ })
}
private fun setupListener() {
@@ -242,6 +246,10 @@ class GlanceTabFragment : Fragment() {
CustomNotesDialog(requireContext()).show()
}
}
+
+ action_filter_music_players.setOnClickListener {
+ startActivity(Intent(requireContext(), MusicPlayersFilterActivity::class.java))
+ }
}
private fun updateNextAlarmWarningUi() {
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt
index c6b7354..b9c18ff 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MainViewModel.kt
@@ -75,6 +75,7 @@ class MainViewModel : ViewModel() {
val showBatteryCharging = Preferences.asLiveData(Preferences::showBatteryCharging)
val showDailySteps = Preferences.asLiveData(Preferences::showDailySteps)
val customInfo = Preferences.asLiveData(Preferences::customNotes)
+ val musicPlayersFilter = Preferences.asLiveData(Preferences::musicPlayersFilter)
// Advanced Settings
val darkThemePreference = Preferences.asLiveData(Preferences::darkThemePreference)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MusicPlayersFilterViewModel.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MusicPlayersFilterViewModel.kt
new file mode 100644
index 0000000..0719c39
--- /dev/null
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MusicPlayersFilterViewModel.kt
@@ -0,0 +1,38 @@
+package com.tommasoberlose.anotherwidget.ui.viewmodels
+
+import android.app.Application
+import android.content.Intent
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
+import android.util.Log
+import androidx.lifecycle.*
+import com.chibatching.kotpref.livedata.asLiveData
+import com.tommasoberlose.anotherwidget.global.Preferences
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+class MusicPlayersFilterViewModel(application: Application) : AndroidViewModel(application) {
+
+ val pm: PackageManager by lazy { application.packageManager }
+ val appList: MutableLiveData> = MutableLiveData()
+ val searchInput: MutableLiveData = MutableLiveData("")
+ var musicPlayersFilter = Preferences.asLiveData(Preferences::musicPlayersFilter)
+
+ init {
+ viewModelScope.launch(Dispatchers.IO) {
+ val mainIntent = Intent(Intent.ACTION_MAIN, null).apply {
+ addCategory(Intent.CATEGORY_LAUNCHER)
+ }
+
+ val app = application.packageManager.queryIntentActivities(mainIntent, 0)
+ val sortedApp = app.sortedWith(Comparator { app1: ResolveInfo, app2: ResolveInfo ->
+ app1.loadLabel(pm).toString().compareTo(app2.loadLabel(pm).toString())
+ })
+ withContext(Dispatchers.Main) {
+ appList.postValue(sortedApp)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/round_radio.png b/app/src/main/res/drawable-hdpi/round_radio.png
new file mode 100644
index 0000000..84a680c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_radio.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_radio_white_18.png b/app/src/main/res/drawable-hdpi/round_radio_white_18.png
new file mode 100644
index 0000000..65505e8
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_radio_white_18.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_radio_white_36.png b/app/src/main/res/drawable-hdpi/round_radio_white_36.png
new file mode 100644
index 0000000..cec12ec
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_radio_white_36.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_radio_white_48.png b/app/src/main/res/drawable-hdpi/round_radio_white_48.png
new file mode 100644
index 0000000..70a6814
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_radio_white_48.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_radio.png b/app/src/main/res/drawable-mdpi/round_radio.png
new file mode 100644
index 0000000..30261c2
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_radio.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_radio_white_18.png b/app/src/main/res/drawable-mdpi/round_radio_white_18.png
new file mode 100644
index 0000000..98dccb9
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_radio_white_18.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_radio_white_36.png b/app/src/main/res/drawable-mdpi/round_radio_white_36.png
new file mode 100644
index 0000000..84a680c
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_radio_white_36.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_radio_white_48.png b/app/src/main/res/drawable-mdpi/round_radio_white_48.png
new file mode 100644
index 0000000..4fa8c35
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_radio_white_48.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_radio.png b/app/src/main/res/drawable-xhdpi/round_radio.png
new file mode 100644
index 0000000..4fa8c35
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_radio.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_radio_white_18.png b/app/src/main/res/drawable-xhdpi/round_radio_white_18.png
new file mode 100644
index 0000000..84a680c
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_radio_white_18.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_radio_white_36.png b/app/src/main/res/drawable-xhdpi/round_radio_white_36.png
new file mode 100644
index 0000000..70a6814
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_radio_white_36.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_radio_white_48.png b/app/src/main/res/drawable-xhdpi/round_radio_white_48.png
new file mode 100644
index 0000000..8f3db1c
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_radio_white_48.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_radio.png b/app/src/main/res/drawable-xxhdpi/round_radio.png
new file mode 100644
index 0000000..70a6814
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_radio.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_radio_white_18.png b/app/src/main/res/drawable-xxhdpi/round_radio_white_18.png
new file mode 100644
index 0000000..cec12ec
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_radio_white_18.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_radio_white_36.png b/app/src/main/res/drawable-xxhdpi/round_radio_white_36.png
new file mode 100644
index 0000000..5eb5aee
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_radio_white_36.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_radio_white_48.png b/app/src/main/res/drawable-xxhdpi/round_radio_white_48.png
new file mode 100644
index 0000000..8cb97fa
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_radio_white_48.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_radio.png b/app/src/main/res/drawable-xxxhdpi/round_radio.png
new file mode 100644
index 0000000..8f3db1c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_radio.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_radio_white_18.png b/app/src/main/res/drawable-xxxhdpi/round_radio_white_18.png
new file mode 100644
index 0000000..70a6814
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_radio_white_18.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_radio_white_36.png b/app/src/main/res/drawable-xxxhdpi/round_radio_white_36.png
new file mode 100644
index 0000000..8cb97fa
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_radio_white_36.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_radio_white_48.png b/app/src/main/res/drawable-xxxhdpi/round_radio_white_48.png
new file mode 100644
index 0000000..14879bb
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_radio_white_48.png differ
diff --git a/app/src/main/res/drawable/round_radio_24.xml b/app/src/main/res/drawable/round_radio_24.xml
new file mode 100644
index 0000000..fa61e45
--- /dev/null
+++ b/app/src/main/res/drawable/round_radio_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_music_players_filter.xml b/app/src/main/res/layout/activity_music_players_filter.xml
new file mode 100644
index 0000000..a2efa61
--- /dev/null
+++ b/app/src/main/res/layout/activity_music_players_filter.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/application_info_layout.xml b/app/src/main/res/layout/application_info_layout.xml
index d3a49d6..4f40ae8 100644
--- a/app/src/main/res/layout/application_info_layout.xml
+++ b/app/src/main/res/layout/application_info_layout.xml
@@ -26,7 +26,8 @@
tools:ignore="HardcodedText" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_glance_settings.xml b/app/src/main/res/layout/fragment_glance_settings.xml
index ac90ac8..b06f702 100644
--- a/app/src/main/res/layout/fragment_glance_settings.xml
+++ b/app/src/main/res/layout/fragment_glance_settings.xml
@@ -338,7 +338,7 @@
+
+
+
+
+
+
+
Carica
Providers
Glance info will show up only when there are no events displayed and only when a few conditions are verified.
+ Player Musica
+ Scegli i player musical che ti interessano
Condividi
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1a51a4f..518efcd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -157,6 +157,8 @@
Charged
Providers
Glance info will show up only when there are no events displayed and only when a few conditions are verified.
+ Music Players
+ Choose your relevant music players
Share