From bab92f9169f4179b9d05117f4264b70520479ab1 Mon Sep 17 00:00:00 2001 From: Tommaso Berlose Date: Mon, 5 Oct 2020 11:09:11 +0200 Subject: [PATCH] Add music players filter, fix #188 --- app/src/main/AndroidManifest.xml | 1 + .../anotherwidget/global/Preferences.kt | 1 + .../helpers/MediaPlayerHelper.kt | 12 ++ .../services/UpdateCalendarJob.kt | 2 +- .../activities/MusicPlayersFilterActivity.kt | 141 ++++++++++++++++++ .../ui/fragments/GlanceTabFragment.kt | 8 + .../ui/viewmodels/MainViewModel.kt | 1 + .../viewmodels/MusicPlayersFilterViewModel.kt | 38 +++++ .../main/res/drawable-hdpi/round_radio.png | Bin 0 -> 345 bytes .../drawable-hdpi/round_radio_white_18.png | Bin 0 -> 319 bytes .../drawable-hdpi/round_radio_white_36.png | Bin 0 -> 493 bytes .../drawable-hdpi/round_radio_white_48.png | Bin 0 -> 595 bytes .../main/res/drawable-mdpi/round_radio.png | Bin 0 -> 255 bytes .../drawable-mdpi/round_radio_white_18.png | Bin 0 -> 229 bytes .../drawable-mdpi/round_radio_white_36.png | Bin 0 -> 345 bytes .../drawable-mdpi/round_radio_white_48.png | Bin 0 -> 424 bytes .../main/res/drawable-xhdpi/round_radio.png | Bin 0 -> 424 bytes .../drawable-xhdpi/round_radio_white_18.png | Bin 0 -> 345 bytes .../drawable-xhdpi/round_radio_white_36.png | Bin 0 -> 595 bytes .../drawable-xhdpi/round_radio_white_48.png | Bin 0 -> 772 bytes .../main/res/drawable-xxhdpi/round_radio.png | Bin 0 -> 595 bytes .../drawable-xxhdpi/round_radio_white_18.png | Bin 0 -> 493 bytes .../drawable-xxhdpi/round_radio_white_36.png | Bin 0 -> 869 bytes .../drawable-xxhdpi/round_radio_white_48.png | Bin 0 -> 1077 bytes .../main/res/drawable-xxxhdpi/round_radio.png | Bin 0 -> 772 bytes .../drawable-xxxhdpi/round_radio_white_18.png | Bin 0 -> 595 bytes .../drawable-xxxhdpi/round_radio_white_36.png | Bin 0 -> 1077 bytes .../drawable-xxxhdpi/round_radio_white_48.png | Bin 0 -> 1348 bytes app/src/main/res/drawable/round_radio_24.xml | 10 ++ .../layout/activity_music_players_filter.xml | 113 ++++++++++++++ .../res/layout/application_info_layout.xml | 9 +- .../res/layout/fragment_glance_settings.xml | 39 ++++- app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 34 files changed, 376 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/tommasoberlose/anotherwidget/ui/activities/MusicPlayersFilterActivity.kt create mode 100644 app/src/main/java/com/tommasoberlose/anotherwidget/ui/viewmodels/MusicPlayersFilterViewModel.kt create mode 100644 app/src/main/res/drawable-hdpi/round_radio.png create mode 100644 app/src/main/res/drawable-hdpi/round_radio_white_18.png create mode 100644 app/src/main/res/drawable-hdpi/round_radio_white_36.png create mode 100644 app/src/main/res/drawable-hdpi/round_radio_white_48.png create mode 100644 app/src/main/res/drawable-mdpi/round_radio.png create mode 100644 app/src/main/res/drawable-mdpi/round_radio_white_18.png create mode 100644 app/src/main/res/drawable-mdpi/round_radio_white_36.png create mode 100644 app/src/main/res/drawable-mdpi/round_radio_white_48.png create mode 100644 app/src/main/res/drawable-xhdpi/round_radio.png create mode 100644 app/src/main/res/drawable-xhdpi/round_radio_white_18.png create mode 100644 app/src/main/res/drawable-xhdpi/round_radio_white_36.png create mode 100644 app/src/main/res/drawable-xhdpi/round_radio_white_48.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_radio.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_radio_white_18.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_radio_white_36.png create mode 100644 app/src/main/res/drawable-xxhdpi/round_radio_white_48.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_radio.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_radio_white_18.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_radio_white_36.png create mode 100644 app/src/main/res/drawable-xxxhdpi/round_radio_white_48.png create mode 100644 app/src/main/res/drawable/round_radio_24.xml create mode 100644 app/src/main/res/layout/activity_music_players_filter.xml 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 0000000000000000000000000000000000000000..84a680c2d68a77777a9ffc7ad4795072add90649 GIT binary patch literal 345 zcmV-f0jB41CFbqQoA%rl%5MT^201P3(5QZ?o5C#|^gaJZ;0RTb>LkKX00K>&_@dN@l z$AUWrF^irnEEb8OUm#}Lijh$ebnqm;h|`e_VP@!h3BU*cP)Kmahq zX{Out3;^4L8krC3ZlEG_djnyF4-5_kv;lk{3JAdNpulp0j-U!N^l*Vb=KBIw=oWv3 z8{$EeA`#}%pmrLh9}3!X?!`u#q%F+l|ppi+FV r>Dv literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..65505e8051a9d32bfff12ae3dad3f8fea345ac36 GIT binary patch literal 319 zcmV-F0l@x=P)2MC7{egi0; z)7pF3{(N{o-VYux`%__zK}w*DM{EFlv|}S9ykZZ4E$(9h9nA0rfCJt!K`RDwgD30( zP$9>444{n%d^&B16~-8yIsGQ6kBzt$=!UQtX_|+y0#IX^{UQue1BxbWkwplLbFlov z%lo)JI_D{|3I_~+f)&Uw7=UNwD4MY}osCtfQ)4B1N4qI@DXN z*cdl^@6OEo=l%EqlCP`l>MFRoxfPNmDPn*PBCJr798|{yha|n8#G~V3gWq;7C8&x3 zd+0WYvN=YfixqU+BS6jOpbC8KpxYWAiZ%zeu|%wiIbedi%`s;fBZ6)l^lU#mmw3QY z6Z4LH+mB8eLxj-n1p}094!Xb$N9Yz~3I88-P{|Wi!U8rgMgWy1Yy~L`Oru(mv=|kW zurZ{qV-n^k>Ak{3(SolyQIejYH>_>ZnR@VNVYYq!ksGF&*f5^5hBlOdFyp9Od@Y1J zm9U-WR4z0uJ>P|C!vyTa!(5mPi?PN0Qz$*`h!KiEJg$MY#IQHi41NKgN(zfn&v5k} zN(sBm_#xYp64uOd1#yrNrgDTmood)rLRce5*rSB7e#R&zVy9|1z*7UuW5(=W>r je9PRRS#WccKe77&LnkBx=>tY?00000NkvXXu0mjf*Cx_D literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..70a68145da78543c97643923abeb58e9d754a03b GIT binary patch literal 595 zcmV-Z0<8UsP)M2S`MXNEw!}c zf6B(VL_z95-4+r^*aQzaa}lS6F{JJhg?$cp6G-3CHc$t??7}8c0$&!{1p0z6o7)81 zwj~BQ$_&I|<7KpIHgG>`_;KpIE`X`mP#R8d*0;Tnn0fo3?};deE#@GZ~?MZ>2* zroIH4qG0)m%)*C2)jhr%G^7WL+~1;*6{zVT(6!`1We0(3VgosQ`ZaYLs4O-RD>(>M zl^m$~CrlXa-;QWE1EXzN~5c4*OgmB2SMLVgjj4P;&8z+Z9Im6cnb5 he4x|mbUK~beFNLn&;gboQA7X$002ovPDHLkV1k%h14IA- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..30261c237654a1ba9cce29427e7801d0ffd4d9cf GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj$2?seLn;{WUJzX4lqhlhA+w`E z%#M8@4m7^rUGVo%E4QOW%kk;@9DGk?TG$UMoB%SL40z_%{NA>0-}bA&Ue;I7f2$j3 z^u^#9$J`T#MW0zP^W9|FC6UD4puFtGa~VCu!<-D+JQwzU&tU%_!T6v>@|2Q#%_D{V zVxe3SU8{W=8GMh4OEs7@C~YoaFn#6D^uSEuPH-c)*pGwavoaR=<>ab-n0TX3xv?%u zTe&eaX|@YfI?qMtR!cp>19364MLvkPy!jBj$2XjFpS9)FRdPl^A2E2k`njxgN@xNA DdNyMO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..98dccb9c74701e4c7b646b2ef8a3fcb9a0e2947c GIT binary patch literal 229 zcmV^P)&eaq!@_(E!k94JPW<63 zgFV>9U+2BoIH89uy*$GfcZA)rDG4YXFye_LbV*>1E8crx51XOV$Px}UQ*p>5%oM!9 zAk2P*z6>lN1)CZgvCD?amk$lNz)cBt(b*iXHq<2lajp&NBsA29dT2E0YW}E2?N)I} fqJ=GF#IN@P%mA(9x%aKA00000NkvXXu0mjfiXdIU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..84a680c2d68a77777a9ffc7ad4795072add90649 GIT binary patch literal 345 zcmV-f0jB41CFbqQoA%rl%5MT^201P3(5QZ?o5C#|^gaJZ;0RTb>LkKX00K>&_@dN@l z$AUWrF^irnEEb8OUm#}Lijh$ebnqm;h|`e_VP@!h3BU*cP)Kmahq zX{Out3;^4L8krC3ZlEG_djnyF4-5_kv;lk{3JAdNpulp0j-U!N^l*Vb=KBIw=oWv3 z8{$EeA`#}%pmrLh9}3!X?!`u#q%F+l|ppi+FV r>Dv literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4fa8c35f2aa5c5d9e13a3637d3045a4293425aab GIT binary patch literal 424 zcmV;Z0ayNsP)HJxVHjWtLl}m`;VA&i z&7EZLbPoXd|IX*Wb4let!Zvo+argnAks?J0_2{FwaETEXrPz)-d>@aP%l8s(^d`>n zZn+VzP>V8r4-c5hm*NEnQATgz6a&kRaUJHYqk(%&sj-<3GhSDHMUOxY|VmQgIE71T1=6#p@6)j4UW0Kr>kpw0<3s zte7g`kKqsl^w3<#fDr(C>ld(~3J_Qo5I`01j59RRzzJT7A23BL$$?|cqXwi!KIm{B zHQ*sB2;GPQdnE!c!UdH79~vwGTO|VO5d#iO1RO;SxGNFx6fq#fe!=sfMGSy3>dTLg zDMSr`8E(-?zM+O=v;m?7%*8b>63`ddQ_;&P6VD9wGB;`;^B}{!Xe5HJxVHjWtLl}m`;VA&i z&7EZLbPoXd|IX*Wb4let!Zvo+argnAks?J0_2{FwaETEXrPz)-d>@aP%l8s(^d`>n zZn+VzP>V8r4-c5hm*NEnQATgz6a&kRaUJHYqk(%&sj-<3GhSDHMUOxY|VmQgIE71T1=6#p@6)j4UW0Kr>kpw0<3s zte7g`kKqsl^w3<#fDr(C>ld(~3J_Qo5I`01j59RRzzJT7A23BL$$?|cqXwi!KIm{B zHQ*sB2;GPQdnE!c!UdH79~vwGTO|VO5d#iO1RO;SxGNFx6fq#fe!=sfMGSy3>dTLg zDMSr`8E(-?zM+O=v;m?7%*8b>63`ddQ_;&P6VD9wGB;`;^B}{!Xe541CFbqQoA%rl%5MT^201P3(5QZ?o5C#|^gaJZ;0RTb>LkKX00K>&_@dN@l z$AUWrF^irnEEb8OUm#}Lijh$ebnqm;h|`e_VP@!h3BU*cP)Kmahq zX{Out3;^4L8krC3ZlEG_djnyF4-5_kv;lk{3JAdNpulp0j-U!N^l*Vb=KBIw=oWv3 z8{$EeA`#}%pmrLh9}3!X?!`u#q%F+l|ppi+FV r>Dv literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..70a68145da78543c97643923abeb58e9d754a03b GIT binary patch literal 595 zcmV-Z0<8UsP)M2S`MXNEw!}c zf6B(VL_z95-4+r^*aQzaa}lS6F{JJhg?$cp6G-3CHc$t??7}8c0$&!{1p0z6o7)81 zwj~BQ$_&I|<7KpIHgG>`_;KpIE`X`mP#R8d*0;Tnn0fo3?};deE#@GZ~?MZ>2* zroIH4qG0)m%)*C2)jhr%G^7WL+~1;*6{zVT(6!`1We0(3VgosQ`ZaYLs4O-RD>(>M zl^m$~CrlXa-;QWE1EXzN~5c4*OgmB2SMLVgjj4P;&8z+Z9Im6cnb5 he4x|mbUK~beFNLn&;gboQA7X$002ovPDHLkV1k%h14IA- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8f3db1c2abd5772a7801c2181129f956958bedd7 GIT binary patch literal 772 zcmV+f1N;1mP)d?cgGbFAm#7b`ILAnH=c=Edz&!rOz2-(Z#cKIj z;44lr)Z8O>uu$TCn8TmA)7%K>s=xIE%lHRxntQ@-{b|p7;9t#+aEXl)wbui$ntQ?? zzLbvzHgSWoX2!U}X8Bm4k9`a@H^4snrBhiCWZE092c9(dfbJhUWs3} z9(cu(>S+%w;{-zi1Ki>O{jMke#7AO;y{>+--iW#`N}F(IQnA5qfb z6dp}0Zc9@bnN|!+Q|fuaU-(*nb6CMHhN|g400S(PPX8egjy<86NR~V=N@VY`^CRSV(}5;oAF-6QE-ldf!6=bWDW=NPq-L zfCQ*55+DI00TLh*AORu)65tJI*v1-`u!MDd!v%h5T>`vf2fb1Ob2!9MD-z%a^JPNl z<4z+9aExBVLmgM9k^t8&UQ4+%kpy_gd}#^#7^*D+zL%EaP%R1Y+~MJ-9|=(HsB{Du z2~cglbOhfLpxR>T2-XvzLg^5e%v1s_CP1}*=?K;mpxSEb2(}ZT+Ck|E&Jv*7Lx(p- z-x8pnto~%*jwC?5l&0`%T5&hqf2HE6G=&Y*h%uH+8*n8ib<+0T=qGi> zEqYxX@4gaM&d@7e!3Hky3LpkJ!%B&Wh=_=YsPG?!r8|)u$Vbuu0000M2S`MXNEw!}c zf6B(VL_z95-4+r^*aQzaa}lS6F{JJhg?$cp6G-3CHc$t??7}8c0$&!{1p0z6o7)81 zwj~BQ$_&I|<7KpIHgG>`_;KpIE`X`mP#R8d*0;Tnn0fo3?};deE#@GZ~?MZ>2* zroIH4qG0)m%)*C2)jhr%G^7WL+~1;*6{zVT(6!`1We0(3VgosQ`ZaYLs4O-RD>(>M zl^m$~CrlXa-;QWE1EXzN~5c4*OgmB2SMLVgjj4P;&8z+Z9Im6cnb5 he4x|mbUK~beFNLn&;gboQA7X$002ovPDHLkV1k%h14IA- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cec12ec47ed050bcabf243611f4590300cc2ff35 GIT binary patch literal 493 zcmVN z*cdl^@6OEo=l%EqlCP`l>MFRoxfPNmDPn*PBCJr798|{yha|n8#G~V3gWq;7C8&x3 zd+0WYvN=YfixqU+BS6jOpbC8KpxYWAiZ%zeu|%wiIbedi%`s;fBZ6)l^lU#mmw3QY z6Z4LH+mB8eLxj-n1p}094!Xb$N9Yz~3I88-P{|Wi!U8rgMgWy1Yy~L`Oru(mv=|kW zurZ{qV-n^k>Ak{3(SolyQIejYH>_>ZnR@VNVYYq!ksGF&*f5^5hBlOdFyp9Od@Y1J zm9U-WR4z0uJ>P|C!vyTa!(5mPi?PN0Qz$*`h!KiEJg$MY#IQHi41NKgN(zfn&v5k} zN(sBm_#xYp64uOd1#yrNrgDTmood)rLRce5*rSB7e#R&zVy9|1z*7UuW5(=W>r je9PRRS#WccKe77&LnkBx=>tY?00000NkvXXu0mjf*Cx_D literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5eb5aeed5fb92e0ab6c3e2025bda86ec4f7a097b GIT binary patch literal 869 zcmV-r1DgDaP)!NS!T;o@4v|?Eo)jGp&rm4resLmwQwD{{H zILC7=w}q8;(FE_X)yia=daR2sGfj)XE}G&!My*ERDL!H@ZexrKyv1nf)84teiesz| zu{QdqN{q49bF!{gi*c7p!?|AKxH{Ih=xtOP>_qhTwldgP(c493u$ky>+^V>}IS%m* ztN-)s4Ldk;dxj1+$9DUhz>7r=V}8 z55Oia3?{)2itbbVrn>}t(+c&CmS88HZZ2IYmtYgDwhpj~nNkV%vUP+*WfE+HrOv_D zFjpeMj@kflu0(?E4ixN_5(&0BP_So8B-qM8!A9;b!3KU$xIiXsd7xlhN+j6EK*6?^ zNU)uOg6%7jU>^nwcBVvvUA4}zf|(Kt278@@9VnGx<6fsltYfNFg27>@V4rl6V6c}@ z;lm0xuZo5@x=S#CLoDCn$+{DRN-!8>?+2a-Vi!mEA1c9O z=*0uBMQ@k+4fL=aRt9@6dV5lR^Y*Lg<#Vfs$C!y~6Ku8~u$yS5rg++V!sC1%OI%`W v$aip`;}fpkR$Sp2J1rt2A|fIpBI^AKn0eBqPuOV100000NkvXXu0mjfmot-r literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8cb97fac4492367e17ba6cfeff5260d3fcddb10e GIT binary patch literal 1077 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=4hQ&zxB}__LmV7z(VY+UhGR*P zUoeA;jeyDY_x}%TaKs<~Zqa|8hb4S}utNLuZtu;LC8{4MyRZH&QoK0(^6B)?^OtY0 zcer1ETgLx&esi>r!S3_3o!9@0e3r<-!1Tb=#WAFU@$HTFqFVt1tq+}JXK^gL9`K}V zh1uP&f8(`m->v30P79xW=RM<$`BgKHKHsQwy2~Y*qrXDQ(`BWJlj7vF7xVq(eqD;6 z^kvBdr|^v-%fhuTgsi>#vX||O$ZXxJ^}MQc*T??y;Me-a+;2DKjl;c@nT-~r9jE78 z9(ie|c*b_W!nLOtMDMfDx2RKEw~4=}d*SMh{5 zzrt$cw?fCI&zpQ}G~WNJL$Ok(`~VC$@-0&ktmcM05Y_fGPi z=6b?w`{W}ludkXgmGf4+=TeD9wGpP55^uE^X)fN!?{45fcWTU=#a5p@I_ygmr+oDc zFz0JFJ^4wSV~T2KoeZNAU+3#x4|qKeimc(t{197Uwqy~D-^`FXjgKdHiC8R2-j{!& zV)tReklD;tx%(GX3AhFsvZ~5|Sh#kv@D{IT!BUf^ zJ(3a8y$ckXt~_bZ6I>D@z`x6J!P1fok~~3&94jTJq%`j`D3rapfTc%mk)yA~+-|m` zi6Mf#Q3o`%q*yj*-Dnb9m~KHak3Gr^wwpy&Ht7x%wp=&mrn_*cGfUTnduB}(k)R98wg7^{j# z7UX#}mor^c*34+0{>>w1Q!|6@q-UmrE8GrUGk8&{aw7ha#$S&lx6n6_)2brHC3>!e ivP?^joc8toPrgDg>E>MiS)Ra*!{F)a=d#Wzp$P!0=|=|u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8f3db1c2abd5772a7801c2181129f956958bedd7 GIT binary patch literal 772 zcmV+f1N;1mP)d?cgGbFAm#7b`ILAnH=c=Edz&!rOz2-(Z#cKIj z;44lr)Z8O>uu$TCn8TmA)7%K>s=xIE%lHRxntQ@-{b|p7;9t#+aEXl)wbui$ntQ?? zzLbvzHgSWoX2!U}X8Bm4k9`a@H^4snrBhiCWZE092c9(dfbJhUWs3} z9(cu(>S+%w;{-zi1Ki>O{jMke#7AO;y{>+--iW#`N}F(IQnA5qfb z6dp}0Zc9@bnN|!+Q|fuaU-(*nb6CMHhN|g400S(PPX8egjy<86NR~V=N@VY`^CRSV(}5;oAF-6QE-ldf!6=bWDW=NPq-L zfCQ*55+DI00TLh*AORu)65tJI*v1-`u!MDd!v%h5T>`vf2fb1Ob2!9MD-z%a^JPNl z<4z+9aExBVLmgM9k^t8&UQ4+%kpy_gd}#^#7^*D+zL%EaP%R1Y+~MJ-9|=(HsB{Du z2~cglbOhfLpxR>T2-XvzLg^5e%v1s_CP1}*=?K;mpxSEb2(}ZT+Ck|E&Jv*7Lx(p- z-x8pnto~%*jwC?5l&0`%T5&hqf2HE6G=&Y*h%uH+8*n8ib<+0T=qGi> zEqYxX@4gaM&d@7e!3Hky3LpkJ!%B&Wh=_=YsPG?!r8|)u$Vbuu0000M2S`MXNEw!}c zf6B(VL_z95-4+r^*aQzaa}lS6F{JJhg?$cp6G-3CHc$t??7}8c0$&!{1p0z6o7)81 zwj~BQ$_&I|<7KpIHgG>`_;KpIE`X`mP#R8d*0;Tnn0fo3?};deE#@GZ~?MZ>2* zroIH4qG0)m%)*C2)jhr%G^7WL+~1;*6{zVT(6!`1We0(3VgosQ`ZaYLs4O-RD>(>M zl^m$~CrlXa-;QWE1EXzN~5c4*OgmB2SMLVgjj4P;&8z+Z9Im6cnb5 he4x|mbUK~beFNLn&;gboQA7X$002ovPDHLkV1k%h14IA- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8cb97fac4492367e17ba6cfeff5260d3fcddb10e GIT binary patch literal 1077 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=4hQ&zxB}__LmV7z(VY+UhGR*P zUoeA;jeyDY_x}%TaKs<~Zqa|8hb4S}utNLuZtu;LC8{4MyRZH&QoK0(^6B)?^OtY0 zcer1ETgLx&esi>r!S3_3o!9@0e3r<-!1Tb=#WAFU@$HTFqFVt1tq+}JXK^gL9`K}V zh1uP&f8(`m->v30P79xW=RM<$`BgKHKHsQwy2~Y*qrXDQ(`BWJlj7vF7xVq(eqD;6 z^kvBdr|^v-%fhuTgsi>#vX||O$ZXxJ^}MQc*T??y;Me-a+;2DKjl;c@nT-~r9jE78 z9(ie|c*b_W!nLOtMDMfDx2RKEw~4=}d*SMh{5 zzrt$cw?fCI&zpQ}G~WNJL$Ok(`~VC$@-0&ktmcM05Y_fGPi z=6b?w`{W}ludkXgmGf4+=TeD9wGpP55^uE^X)fN!?{45fcWTU=#a5p@I_ygmr+oDc zFz0JFJ^4wSV~T2KoeZNAU+3#x4|qKeimc(t{197Uwqy~D-^`FXjgKdHiC8R2-j{!& zV)tReklD;tx%(GX3AhFsvZ~5|Sh#kv@D{IT!BUf^ zJ(3a8y$ckXt~_bZ6I>D@z`x6J!P1fok~~3&94jTJq%`j`D3rapfTc%mk)yA~+-|m` zi6Mf#Q3o`%q*yj*-Dnb9m~KHak3Gr^wwpy&Ht7x%wp=&mrn_*cGfUTnduB}(k)R98wg7^{j# z7UX#}mor^c*34+0{>>w1Q!|6@q-UmrE8GrUGk8&{aw7ha#$S&lx6n6_)2brHC3>!e ivP?^joc8toPrgDg>E>MiS)Ra*!{F)a=d#Wzp$P!0=|=|u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..14879bb2dc34c181103246630263b15252f768fc GIT binary patch literal 1348 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1hXZ^@t>zh zYZQyDc0b>~|FA)S^5Waovu%tIwgoaUFu(V7aSW+oe0wJ}>9LJO>%-tJ$KwxV&Y5E4 zxV&_RW$WMkSLqtwQl~EV%#+=-%gW87@3BSSXKgDB8!J1@uL2OIM_x<2q99SoTnT9kbC-2Tbdtrz%9;`#p`V;{Ux<{Kv!CD!hN5KX8-ki@0|*PBh-tpwn~Z1(TG)Cl7H34G_Z)-JRQ!zC8shHYevT&u!9L7M=s7;!g4bSFx{@JyG%|kk?(6xej3Fp#D2J9N# zd)OcHO(>I;{}6siPT{lGy{&vL_702Eddx-57OJk7Qh6>H*ZE$#JMJ5YSbxPSYYWeu z>bq){FV0@GyKv%OPWi;@hbIGMwK@YCcBmfY*E3yU8fcBq`dHMJnHZRTsUK&ObT v12L5|=BsZi|Joh9mgjh(3>eJ`uVbHk_0Ej1b + + 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