diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 41a05f7..95c24f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -139,6 +139,12 @@
+
+
+
+
+
\ No newline at end of file
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 12a4dd3..48ddf16 100755
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt
@@ -9,6 +9,7 @@ object Preferences : KotprefModel() {
var darkThemePreference by intPref(default = MODE_NIGHT_FOLLOW_SYSTEM)
+ // Calendar and weather
var showEvents by booleanPref(key = "PREF_SHOW_EVENTS", default = false)
var showWeather by booleanPref(key = "PREF_SHOW_WEATHER", default = false)
var weatherIcon by stringPref(key = "PREF_WEATHER_ICON", default = "")
@@ -48,6 +49,7 @@ object Preferences : KotprefModel() {
var clockTextColor by stringPref(default = "#FFFFFF")
var clockTextAlpha by stringPref(default = "FF")
+ // Global
var textMainSize by floatPref(key = "PREF_TEXT_MAIN_SIZE", default = 26f)
var textSecondSize by floatPref(key = "PREF_TEXT_SECOND_SIZE", default = 18f)
var clockTextSize by floatPref(key = "PREF_TEXT_CLOCK_SIZE", default = 90f)
@@ -64,9 +66,18 @@ object Preferences : KotprefModel() {
var customFontFile by stringPref(key = "PREF_CUSTOM_FONT_FILE")
var showNextEvent by booleanPref(key = "PREF_SHOW_NEXT_EVENT", default = true)
+ // Settings
var showWallpaper by booleanPref(default = true)
var showBigClockWarning by booleanPref(default = true)
var showWeatherWarning by booleanPref(default = true)
var showPreview by booleanPref(default = true)
var showXiaomiWarning by booleanPref(default = true)
+
+ // Music
+ var showMusic by booleanPref(default = false)
+ var mediaInfoFormat by stringPref(default = "")
+ var mediaPlayerTitle by stringPref(default = "")
+ var mediaPlayerAlbum by stringPref(default = "")
+ var mediaPlayerArtist by stringPref(default = "")
+ var mediaPlayerPackage by stringPref(default = "")
}
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt
index c12d429..0822ea1 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt
@@ -160,4 +160,22 @@ object IntentHelper {
}
}
}
+
+ fun getMusicIntent(context: Context): Intent {
+ return when (Preferences.mediaPlayerPackage) {
+ "" -> {
+ Intent()
+ }
+ else -> {
+ val pm: PackageManager = context.packageManager
+ try {
+ pm.getLaunchIntentForPackage(Preferences.mediaPlayerPackage)!!.apply {
+ addCategory(Intent.CATEGORY_LAUNCHER)
+ }
+ } catch (e: Exception) {
+ Intent()
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt
new file mode 100644
index 0000000..baf5fc3
--- /dev/null
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/MediaPlayerHelper.kt
@@ -0,0 +1,88 @@
+package com.tommasoberlose.anotherwidget.helpers
+
+import android.app.Notification
+import android.content.ComponentName
+import android.content.Context
+import android.media.MediaMetadata
+import android.media.session.MediaController
+import android.media.session.MediaSession
+import android.media.session.MediaSessionManager
+import android.media.session.PlaybackState
+import android.util.Log
+import androidx.core.app.NotificationManagerCompat
+import com.chibatching.kotpref.bulk
+import com.tommasoberlose.anotherwidget.global.Preferences
+import com.tommasoberlose.anotherwidget.receivers.MusicNotificationListener
+import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
+import java.lang.Exception
+
+object MediaPlayerHelper {
+ fun isSomeonePlaying(context: Context) = Preferences.showMusic && NotificationManagerCompat.getEnabledListenerPackages(context).contains(context.packageName) && Preferences.mediaPlayerTitle != ""
+
+ fun getMediaInfo(): String {
+ return if (Preferences.mediaPlayerArtist == "") {
+ Preferences.mediaPlayerTitle
+ } else {
+ "%s, %s".format(Preferences.mediaPlayerTitle, Preferences.mediaPlayerArtist)
+ }
+ }
+
+ fun updatePlayingMediaInfo(context: Context) {
+ if (NotificationManagerCompat.getEnabledListenerPackages(context).contains(context.packageName)) {
+ val list = try {
+ (context.getSystemService(Context.MEDIA_SESSION_SERVICE) as MediaSessionManager).getActiveSessions(
+ ComponentName(context.packageName, MusicNotificationListener::class.java.name)
+ )
+ } catch (ex: Exception) {
+ emptyList()
+ }
+
+ if (list.isNotEmpty()) {
+ var isSomeonePlaying = false
+ list.forEach { mc ->
+ val metadata = mc.metadata
+ val isPlaying =
+ mc.playbackState?.state == PlaybackState.STATE_PLAYING || mc.playbackState?.state == PlaybackState.STATE_CONNECTING
+
+ if (isPlaying) {
+ isSomeonePlaying = true
+ if (metadata != null) {
+ Preferences.bulk {
+ mediaPlayerTitle =
+ metadata.getText(MediaMetadata.METADATA_KEY_TITLE)?.toString()
+ ?: ""
+ mediaPlayerArtist =
+ metadata.getText(MediaMetadata.METADATA_KEY_ARTIST)?.toString()
+ ?: ""
+ mediaPlayerAlbum =
+ metadata.getText(MediaMetadata.METADATA_KEY_ALBUM)?.toString()
+ ?: ""
+ }
+ }
+
+ Preferences.mediaPlayerPackage = mc.packageName
+ }
+ }
+
+ if (!isSomeonePlaying) {
+ removeMediaInfo()
+ }
+
+ } else {
+ removeMediaInfo()
+ }
+ } else {
+ removeMediaInfo()
+ }
+ MainWidget.updateWidget(context)
+ }
+
+ private fun removeMediaInfo() {
+ Preferences.bulk {
+ remove(Preferences::mediaPlayerTitle)
+ remove(Preferences::mediaPlayerArtist)
+ remove(Preferences::mediaPlayerAlbum)
+ remove(Preferences::mediaPlayerPackage)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt
index 4d0ddcb..7e82590 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WeatherHelper.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.os.Build
import com.google.android.gms.location.LocationServices
import com.tommasoberlose.anotherwidget.R
+import com.tommasoberlose.anotherwidget.db.EventRepository
import com.tommasoberlose.anotherwidget.global.Preferences
import com.tommasoberlose.anotherwidget.network.WeatherNetworkApi
import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WidgetHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WidgetHelper.kt
index 7e3c854..b4f3f18 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WidgetHelper.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/WidgetHelper.kt
@@ -4,6 +4,8 @@ import android.appwidget.AppWidgetManager
import android.content.Context
import android.content.res.Configuration.ORIENTATION_PORTRAIT
import com.google.firebase.crashlytics.FirebaseCrashlytics
+import com.tommasoberlose.anotherwidget.db.EventRepository
+import com.tommasoberlose.anotherwidget.global.Preferences
object WidgetHelper {
class WidgetSizeProvider(
@@ -51,4 +53,11 @@ object WidgetHelper {
width to second * factor
}
}
+
+ fun showSpecialWeather(context: Context): Boolean {
+ return EventRepository(context).getEventsCount() == 0 && (
+ (Preferences.showNextAlarm && AlarmHelper.getNextAlarm(context) != "") ||
+ (MediaPlayerHelper.isSomeonePlaying(context))
+ )
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/MusicNotificationListener.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/MusicNotificationListener.kt
new file mode 100644
index 0000000..8780339
--- /dev/null
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/MusicNotificationListener.kt
@@ -0,0 +1,37 @@
+package com.tommasoberlose.anotherwidget.receivers
+
+import android.app.Notification
+import android.media.MediaMetadata
+import android.media.session.MediaController
+import android.media.session.MediaSession
+import android.media.session.PlaybackState
+import android.service.notification.NotificationListenerService
+import android.service.notification.StatusBarNotification
+import android.util.Log
+import com.chibatching.kotpref.bulk
+import com.tommasoberlose.anotherwidget.global.Preferences
+import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
+import com.tommasoberlose.anotherwidget.helpers.WidgetHelper
+import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
+
+
+class MusicNotificationListener : NotificationListenerService() {
+ override fun onListenerConnected() {
+ MediaPlayerHelper.updatePlayingMediaInfo(this)
+ super.onListenerConnected()
+ }
+
+ override fun onNotificationPosted(sbn: StatusBarNotification?) {
+ sbn?.notification?.extras?.let { bundle ->
+ bundle.getParcelable(Notification.EXTRA_MEDIA_SESSION)?.let {
+ MediaPlayerHelper.updatePlayingMediaInfo(this)
+ }
+ }
+ super.onNotificationPosted(sbn)
+ }
+
+ override fun onNotificationRemoved(sbn: StatusBarNotification?) {
+ MediaPlayerHelper.updatePlayingMediaInfo(this)
+ super.onNotificationRemoved(sbn)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/adapters/ViewPagerAdapter.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/adapters/ViewPagerAdapter.kt
index c91c660..2d58cae 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/adapters/ViewPagerAdapter.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/adapters/ViewPagerAdapter.kt
@@ -8,13 +8,14 @@ import com.tommasoberlose.anotherwidget.ui.fragments.*
class ViewPagerAdapter(fragmentActivity: FragmentActivity) :
FragmentStateAdapter(fragmentActivity) {
- override fun getItemCount(): Int = 4
+ override fun getItemCount(): Int = 5
override fun createFragment(position: Int): Fragment {
return when (position) {
1 -> CalendarTabFragment.newInstance()
2 -> WeatherTabFragment.newInstance()
3 -> ClockTabFragment.newInstance()
+ 4 -> MusicTabFragment.newInstance()
else -> GeneralTabFragment.newInstance()
}
}
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt
index 4ca4aac..bf1daf9 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MainFragment.kt
@@ -15,6 +15,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.RelativeLayout
import androidx.core.animation.addListener
+import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
@@ -84,6 +85,7 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
1 -> getString(R.string.settings_calendar_title)
2 -> getString(R.string.settings_weather_title)
3 -> getString(R.string.settings_clock_title)
+ 4 -> getString(R.string.settings_music_title)
else -> ""
}
}.attach()
@@ -261,18 +263,7 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
}.start()
}
-
- // Calendar error indicator
- tabs?.getTabAt(1)?.orCreateBadge?.apply {
- backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText)
- badgeGravity = BadgeDrawable.TOP_END
- }?.isVisible = Preferences.showEvents && activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) != true
-
- // Weather error indicator
- tabs?.getTabAt(2)?.orCreateBadge?.apply {
- backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText)
- badgeGravity = BadgeDrawable.TOP_END
- }?.isVisible = Preferences.showWeather && (Preferences.weatherProviderApi == "" || (Preferences.customLocationAdd == "" && activity?.checkGrantedPermission(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACCESS_BACKGROUND_LOCATION else Manifest.permission.ACCESS_FINE_LOCATION) != true))
+ showErrorBadge()
}
@@ -301,8 +292,25 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
}
}
- override fun onDestroy() {
- super.onDestroy()
+ private fun showErrorBadge() {
+ // Calendar error indicator
+ tabs?.getTabAt(1)?.orCreateBadge?.apply {
+ backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText)
+ badgeGravity = BadgeDrawable.TOP_END
+ }?.isVisible = Preferences.showEvents && activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) != true
+
+ // Weather error indicator
+ tabs?.getTabAt(2)?.orCreateBadge?.apply {
+ backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText)
+ badgeGravity = BadgeDrawable.TOP_END
+ }?.isVisible = Preferences.showWeather && (Preferences.weatherProviderApi == "" || (Preferences.customLocationAdd == "" && activity?.checkGrantedPermission(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACCESS_BACKGROUND_LOCATION else Manifest.permission.ACCESS_FINE_LOCATION) != true))
+
+
+ // Music error indicator
+ tabs?.getTabAt(4)?.orCreateBadge?.apply {
+ backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText)
+ badgeGravity = BadgeDrawable.TOP_END
+ }?.isVisible = Preferences.showMusic && !NotificationManagerCompat.getEnabledListenerPackages(requireContext()).contains(requireContext().packageName)
}
override fun onSharedPreferenceChanged(preferences: SharedPreferences, p1: String) {
@@ -314,6 +322,7 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
super.onResume()
Preferences.preferences.registerOnSharedPreferenceChangeListener(this)
EventBus.getDefault().register(this)
+ showErrorBadge()
}
override fun onPause() {
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MusicTabFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MusicTabFragment.kt
new file mode 100644
index 0000000..ec92480
--- /dev/null
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/MusicTabFragment.kt
@@ -0,0 +1,144 @@
+package com.tommasoberlose.anotherwidget.ui.fragments
+
+import android.Manifest
+import android.app.Activity
+import android.content.Intent
+import android.os.Build
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.app.NotificationManagerCompat
+import androidx.core.content.ContextCompat
+import androidx.core.view.isVisible
+import androidx.databinding.DataBindingUtil
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
+import com.chibatching.kotpref.bulk
+import com.karumi.dexter.Dexter
+import com.karumi.dexter.MultiplePermissionsReport
+import com.karumi.dexter.PermissionToken
+import com.karumi.dexter.listener.PermissionRequest
+import com.karumi.dexter.listener.multi.MultiplePermissionsListener
+import com.tommasoberlose.anotherwidget.R
+import com.tommasoberlose.anotherwidget.components.BottomSheetMenu
+import com.tommasoberlose.anotherwidget.databinding.FragmentMusicSettingsBinding
+import com.tommasoberlose.anotherwidget.databinding.FragmentWeatherSettingsBinding
+import com.tommasoberlose.anotherwidget.global.Constants
+import com.tommasoberlose.anotherwidget.global.Preferences
+import com.tommasoberlose.anotherwidget.global.RequestCode
+import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
+import com.tommasoberlose.anotherwidget.helpers.SettingsStringHelper
+import com.tommasoberlose.anotherwidget.receivers.WeatherReceiver
+import com.tommasoberlose.anotherwidget.ui.activities.ChooseApplicationActivity
+import com.tommasoberlose.anotherwidget.ui.activities.CustomLocationActivity
+import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
+import com.tommasoberlose.anotherwidget.ui.activities.WeatherProviderActivity
+import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
+import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
+import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
+import kotlinx.android.synthetic.main.fragment_music_settings.*
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+class MusicTabFragment : Fragment() {
+
+ companion object {
+ fun newInstance() = MusicTabFragment()
+ }
+
+ private lateinit var viewModel: MainViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+
+ viewModel = ViewModelProvider(activity as MainActivity).get(MainViewModel::class.java)
+ val binding = DataBindingUtil.inflate(inflater, R.layout.fragment_music_settings, container, false)
+
+ subscribeUi(binding, viewModel)
+
+ binding.lifecycleOwner = this
+ binding.viewModel = viewModel
+
+ return binding.root
+ }
+
+ override fun onActivityCreated(savedInstanceState: Bundle?) {
+ super.onActivityCreated(savedInstanceState)
+
+ setupListener()
+ }
+
+ private fun subscribeUi(
+ binding: FragmentMusicSettingsBinding,
+ viewModel: MainViewModel
+ ) {
+
+ viewModel.showMusic.observe(viewLifecycleOwner, Observer {
+ binding.isMusicVisible = Preferences.showMusic
+ checkNotificationPermission()
+ })
+
+ viewModel.mediaInfoFormat.observe(viewLifecycleOwner, Observer {
+ maintainScrollPosition {
+ label_music_info_format?.text =
+ if (it != "") it else getString(R.string.default_weather_app)
+ }
+ })
+ }
+
+ private fun setupListener() {
+ action_show_music.setOnClickListener {
+ Preferences.showMusic = !Preferences.showMusic
+ }
+
+ action_music_info_format.setOnClickListener {
+ if (Preferences.showMusic) {
+// startActivityForResult(
+// Intent(requireContext(), WeatherProviderActivity::class.java),
+// RequestCode.WEATHER_PROVIDER_REQUEST_CODE.code
+// )
+ }
+ }
+
+ }
+
+ private fun checkNotificationPermission() {
+ if (NotificationManagerCompat.getEnabledListenerPackages(requireContext()).contains(requireContext().packageName)) {
+ notification_permission_alert?.isVisible = false
+ MediaPlayerHelper.updatePlayingMediaInfo(requireContext())
+ show_music_label?.text = if (Preferences.showMusic) getString(R.string.settings_show_music_enabled_subtitle) else getString(R.string.settings_show_music_disabled_subtitle)
+ } else if (Preferences.showMusic) {
+ notification_permission_alert?.isVisible = true
+ show_music_label?.text = getString(R.string.settings_request_notification_access)
+ notification_permission_alert?.setOnClickListener {
+ activity?.startActivity(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))
+ }
+ } else {
+ show_music_label?.text = getString(R.string.settings_show_music_disabled_subtitle)
+ notification_permission_alert?.isVisible = false
+ }
+ }
+
+ private fun maintainScrollPosition(callback: () -> Unit) {
+ val scrollPosition = scrollView.scrollY
+ callback.invoke()
+ lifecycleScope.launch {
+ delay(200)
+ scrollView.smoothScrollTo(0, scrollPosition)
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ checkNotificationPermission()
+ }
+}
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt
index 3909452..2123691 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/fragments/SettingsFragment.kt
@@ -30,6 +30,7 @@ import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
import com.tommasoberlose.anotherwidget.ui.activities.SupportDevActivity
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
import com.tommasoberlose.anotherwidget.helpers.CalendarHelper
+import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
import com.tommasoberlose.anotherwidget.helpers.WeatherHelper
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
import com.tommasoberlose.anotherwidget.utils.openURI
@@ -195,6 +196,7 @@ class SettingsFragment : Fragment() {
action_refresh_widget.setOnClickListener {
WeatherHelper.updateWeather(requireContext())
CalendarHelper.updateEventList(requireContext())
+ MediaPlayerHelper.updatePlayingMediaInfo(requireContext())
}
}
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 6a96136..8137797 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
@@ -52,6 +52,10 @@ class MainViewModel : ViewModel() {
val showWeatherWarning = Preferences.asLiveData(Preferences::showWeatherWarning)
+ // Music
+ val showMusic = Preferences.asLiveData(Preferences::showMusic)
+ val mediaInfoFormat = Preferences.asLiveData(Preferences::mediaInfoFormat)
+
// Advanced Settings
val darkThemePreference = Preferences.asLiveData(Preferences::darkThemePreference)
val showWallpaper = Preferences.asLiveData(Preferences::showWallpaper)
diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt
index eb27f53..8efb69e 100644
--- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt
+++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widgets/MainWidget.kt
@@ -12,6 +12,7 @@ import android.graphics.Color
import android.graphics.Typeface
import android.os.Bundle
import android.text.format.DateUtils
+import android.util.Log
import android.util.TypedValue
import android.view.View
import android.widget.ImageView
@@ -54,6 +55,7 @@ class MainWidget : AppWidgetProvider() {
override fun onEnabled(context: Context) {
CalendarHelper.updateEventList(context)
WeatherReceiver.setUpdates(context)
+ MediaPlayerHelper.updatePlayingMediaInfo(context)
if (Preferences.showEvents) {
CalendarHelper.setEventUpdatesAndroidN(context)
@@ -149,6 +151,7 @@ class MainWidget : AppWidgetProvider() {
views.setViewVisibility(R.id.empty_layout_rect, View.VISIBLE)
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
views.setViewVisibility(R.id.second_row_rect, View.GONE)
+ views.setViewVisibility(R.id.next_event_difference_time_rect, View.GONE)
val calPIntent = PendingIntent.getActivity(
context,
@@ -280,6 +283,28 @@ class MainWidget : AppWidgetProvider() {
)
views.setViewVisibility(R.id.second_row_rect, View.VISIBLE)
+ views.setViewVisibility(R.id.empty_layout_rect, View.GONE)
+ views.setViewVisibility(R.id.calendar_layout_rect, View.VISIBLE)
+ } else if (MediaPlayerHelper.isSomeonePlaying(context)) {
+ val musicIntent = PendingIntent.getActivity(
+ context,
+ widgetID,
+ IntentHelper.getMusicIntent(context),
+ 0
+ )
+ views.setOnClickPendingIntent(R.id.second_row_rect, musicIntent)
+
+ views.setImageViewBitmap(
+ R.id.next_event_rect,
+ BitmapHelper.getBitmapFromView(v.next_event, draw = false)
+ )
+
+ views.setImageViewBitmap(
+ R.id.second_row_rect,
+ BitmapHelper.getBitmapFromView(v.second_row, draw = false)
+ )
+ views.setViewVisibility(R.id.second_row_rect, View.VISIBLE)
+
views.setViewVisibility(R.id.empty_layout_rect, View.GONE)
views.setViewVisibility(R.id.calendar_layout_rect, View.VISIBLE)
}
@@ -296,6 +321,7 @@ class MainWidget : AppWidgetProvider() {
if (Preferences.showWeather && Preferences.weatherIcon != "") {
views.setViewVisibility(R.id.weather_rect, View.VISIBLE)
views.setViewVisibility(R.id.calendar_weather_rect, View.VISIBLE)
+ views.setViewVisibility(R.id.special_weather_rect, View.VISIBLE)
val i = Intent(context, WidgetClickListenerReceiver::class.java)
i.action = Actions.ACTION_OPEN_WEATHER_INTENT
@@ -303,6 +329,7 @@ class MainWidget : AppWidgetProvider() {
views.setOnClickPendingIntent(R.id.weather_rect, weatherPIntent)
views.setOnClickPendingIntent(R.id.calendar_weather_rect, weatherPIntent)
+ views.setOnClickPendingIntent(R.id.special_weather_rect, weatherPIntent)
views.setImageViewBitmap(
R.id.weather_rect,
@@ -313,9 +340,21 @@ class MainWidget : AppWidgetProvider() {
R.id.calendar_weather_rect,
BitmapHelper.getBitmapFromView(v.calendar_weather, draw = false)
)
+
+ views.setImageViewBitmap(
+ R.id.special_weather_rect,
+ BitmapHelper.getBitmapFromView(v.calendar_weather, draw = false)
+ )
+
+ if (WidgetHelper.showSpecialWeather(context)) {
+ views.setViewVisibility(R.id.calendar_weather_rect, View.GONE)
+ } else {
+ views.setViewVisibility(R.id.special_weather_rect, View.GONE)
+ }
} else {
views.setViewVisibility(R.id.weather_rect, View.GONE)
views.setViewVisibility(R.id.calendar_weather_rect, View.GONE)
+ views.setViewVisibility(R.id.special_weather_rect, View.GONE)
}
} catch (ex: Exception) {
ex.printStackTrace()
@@ -392,6 +431,7 @@ class MainWidget : AppWidgetProvider() {
v.empty_layout.visibility = View.VISIBLE
v.calendar_layout.visibility = View.GONE
+ v.next_event_difference_time.visibility = View.GONE
v.action_next.isVisible = false
v.action_previous.isVisible = false
@@ -470,11 +510,22 @@ class MainWidget : AppWidgetProvider() {
v.next_event_date.text = AlarmHelper.getNextAlarm(context)
v.empty_layout.visibility = View.GONE
v.calendar_layout.visibility = View.VISIBLE
+ } else if (MediaPlayerHelper.isSomeonePlaying(context)) {
+ v.second_row_icon.setImageDrawable(
+ ContextCompat.getDrawable(
+ context,
+ R.drawable.round_music_note
+ )
+ )
+ v.next_event.text = DateHelper.getDateText(context, now)
+ v.next_event_date.text = MediaPlayerHelper.getMediaInfo()
+ v.empty_layout.visibility = View.GONE
+ v.calendar_layout.visibility = View.VISIBLE
}
// Color
- listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp).forEach {
+ listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp, v.divider3, v.special_temp).forEach {
it.setTextColor(ColorHelper.getFontColor())
}
@@ -485,13 +536,15 @@ class MainWidget : AppWidgetProvider() {
// Text Size
listOf>(
v.empty_date to Preferences.textMainSize,
- v.divider1 to Preferences.textMainSize,
+ v.divider1 to (Preferences.textMainSize - 2),
v.temp to Preferences.textMainSize,
v.next_event to Preferences.textMainSize,
v.next_event_difference_time to Preferences.textMainSize,
v.next_event_date to Preferences.textSecondSize,
- v.divider2 to Preferences.textSecondSize,
- v.calendar_temp to Preferences.textSecondSize
+ v.divider2 to (Preferences.textSecondSize - 2),
+ v.calendar_temp to Preferences.textSecondSize,
+ v.divider3 to (Preferences.textMainSize - 2),
+ v.special_temp to Preferences.textMainSize
).forEach {
it.first.setTextSize(TypedValue.COMPLEX_UNIT_SP, it.second)
}
@@ -512,6 +565,9 @@ class MainWidget : AppWidgetProvider() {
v.action_previous.scaleX = Preferences.textMainSize / 28f
v.action_previous.scaleY = Preferences.textMainSize / 28f
+ v.special_weather_icon.scaleX = Preferences.textMainSize / 20f
+ v.special_weather_icon.scaleY = Preferences.textMainSize / 20f
+
// Shadows
val shadowRadius = when (Preferences.textShadow) {
@@ -533,14 +589,14 @@ class MainWidget : AppWidgetProvider() {
else -> 0f
}
- listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp).forEach {
+ listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp, v.divider3, v.special_temp).forEach {
it.setShadowLayer(shadowRadius, 0f, shadowDy, shadowColor)
}
// Custom Font
if (Preferences.customFont == Constants.CUSTOM_FONT_PRODUCT_SANS) {
val productSans: Typeface = Typeface.createFromAsset(context.assets, "fonts/product_sans_regular.ttf")
- listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp).forEach {
+ listOf(v.empty_date, v.divider1, v.temp, v.next_event, v.next_event_difference_time, v.next_event_date, v.divider2, v.calendar_temp, v.divider3, v.special_temp).forEach {
it.typeface = productSans
}
}
@@ -549,24 +605,36 @@ class MainWidget : AppWidgetProvider() {
if (Preferences.showWeather && Preferences.weatherIcon != "") {
v.weather.visibility = View.VISIBLE
v.calendar_weather.visibility = View.VISIBLE
+ v.special_weather.visibility = View.VISIBLE
val currentTemp = String.format(Locale.getDefault(), "%.0f °%s", Preferences.weatherTemp, Preferences.weatherRealTempUnit)
val icon: String = Preferences.weatherIcon
if (icon == "") {
v.weather_icon.visibility = View.GONE
v.empty_weather_icon.visibility = View.GONE
+ v.special_weather_icon.visibility = View.GONE
} else {
v.weather_icon.setImageResource(WeatherHelper.getWeatherIconResource(icon))
v.empty_weather_icon.setImageResource(WeatherHelper.getWeatherIconResource(icon))
+ v.special_weather_icon.setImageResource(WeatherHelper.getWeatherIconResource(icon))
v.weather_icon.visibility = View.VISIBLE
v.empty_weather_icon.visibility = View.VISIBLE
+ v.special_weather_icon.visibility = View.VISIBLE
}
v.temp.text = currentTemp
v.calendar_temp.text = currentTemp
+ v.special_temp.text = currentTemp
+
+ if (WidgetHelper.showSpecialWeather(context)) {
+ v.calendar_weather.visibility = View.GONE
+ } else {
+ v.special_weather.visibility = View.GONE
+ }
} else {
v.weather.visibility = View.GONE
v.calendar_weather.visibility = View.GONE
+ v.special_weather.visibility = View.GONE
}
return v
diff --git a/app/src/main/res/drawable-hdpi/round_music_note.png b/app/src/main/res/drawable-hdpi/round_music_note.png
new file mode 100644
index 0000000..1d614c9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_music_note.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_music_note_black_18.png b/app/src/main/res/drawable-hdpi/round_music_note_black_18.png
new file mode 100644
index 0000000..9fde6c7
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_music_note_black_18.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_music_note_black_24.png b/app/src/main/res/drawable-hdpi/round_music_note_black_24.png
new file mode 100644
index 0000000..cd6bdd1
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_music_note_black_24.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_music_note_black_36.png b/app/src/main/res/drawable-hdpi/round_music_note_black_36.png
new file mode 100644
index 0000000..6f1dffb
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_music_note_black_36.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_queue_music.png b/app/src/main/res/drawable-hdpi/round_queue_music.png
new file mode 100644
index 0000000..15b2615
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_queue_music.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_queue_music_black_18.png b/app/src/main/res/drawable-hdpi/round_queue_music_black_18.png
new file mode 100644
index 0000000..61bba81
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_queue_music_black_18.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_queue_music_black_24.png b/app/src/main/res/drawable-hdpi/round_queue_music_black_24.png
new file mode 100644
index 0000000..50d882d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_queue_music_black_24.png differ
diff --git a/app/src/main/res/drawable-hdpi/round_queue_music_black_48.png b/app/src/main/res/drawable-hdpi/round_queue_music_black_48.png
new file mode 100644
index 0000000..09521a9
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/round_queue_music_black_48.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_music_note.png b/app/src/main/res/drawable-mdpi/round_music_note.png
new file mode 100644
index 0000000..f58eb50
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_music_note.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_music_note_black_18.png b/app/src/main/res/drawable-mdpi/round_music_note_black_18.png
new file mode 100644
index 0000000..b1f65f0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_music_note_black_18.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_music_note_black_24.png b/app/src/main/res/drawable-mdpi/round_music_note_black_24.png
new file mode 100644
index 0000000..890661d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_music_note_black_24.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_music_note_black_36.png b/app/src/main/res/drawable-mdpi/round_music_note_black_36.png
new file mode 100644
index 0000000..cd6bdd1
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_music_note_black_36.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_queue_music.png b/app/src/main/res/drawable-mdpi/round_queue_music.png
new file mode 100644
index 0000000..50d882d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_queue_music.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_queue_music_black_18.png b/app/src/main/res/drawable-mdpi/round_queue_music_black_18.png
new file mode 100644
index 0000000..1f3322f
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_queue_music_black_18.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_queue_music_black_24.png b/app/src/main/res/drawable-mdpi/round_queue_music_black_24.png
new file mode 100644
index 0000000..9cee94b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_queue_music_black_24.png differ
diff --git a/app/src/main/res/drawable-mdpi/round_queue_music_black_48.png b/app/src/main/res/drawable-mdpi/round_queue_music_black_48.png
new file mode 100644
index 0000000..2747e2e
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/round_queue_music_black_48.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_music_note.png b/app/src/main/res/drawable-xhdpi/round_music_note.png
new file mode 100644
index 0000000..42c93ba
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_music_note.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_music_note_black_18.png b/app/src/main/res/drawable-xhdpi/round_music_note_black_18.png
new file mode 100644
index 0000000..cd6bdd1
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_music_note_black_18.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_music_note_black_24.png b/app/src/main/res/drawable-xhdpi/round_music_note_black_24.png
new file mode 100644
index 0000000..f58eb50
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_music_note_black_24.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_music_note_black_36.png b/app/src/main/res/drawable-xhdpi/round_music_note_black_36.png
new file mode 100644
index 0000000..1d614c9
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_music_note_black_36.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_queue_music.png b/app/src/main/res/drawable-xhdpi/round_queue_music.png
new file mode 100644
index 0000000..09521a9
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_queue_music.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_queue_music_black_18.png b/app/src/main/res/drawable-xhdpi/round_queue_music_black_18.png
new file mode 100644
index 0000000..50d882d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_queue_music_black_18.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_queue_music_black_24.png b/app/src/main/res/drawable-xhdpi/round_queue_music_black_24.png
new file mode 100644
index 0000000..2747e2e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_queue_music_black_24.png differ
diff --git a/app/src/main/res/drawable-xhdpi/round_queue_music_black_48.png b/app/src/main/res/drawable-xhdpi/round_queue_music_black_48.png
new file mode 100644
index 0000000..90da09d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/round_queue_music_black_48.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_music_note.png b/app/src/main/res/drawable-xxhdpi/round_music_note.png
new file mode 100644
index 0000000..d7b8d7d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_music_note.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_music_note_black_18.png b/app/src/main/res/drawable-xxhdpi/round_music_note_black_18.png
new file mode 100644
index 0000000..6f1dffb
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_music_note_black_18.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_music_note_black_24.png b/app/src/main/res/drawable-xxhdpi/round_music_note_black_24.png
new file mode 100644
index 0000000..1d614c9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_music_note_black_24.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_music_note_black_36.png b/app/src/main/res/drawable-xxhdpi/round_music_note_black_36.png
new file mode 100644
index 0000000..5f5b818
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_music_note_black_36.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_queue_music.png b/app/src/main/res/drawable-xxhdpi/round_queue_music.png
new file mode 100644
index 0000000..6de1e89
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_queue_music.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_queue_music_black_18.png b/app/src/main/res/drawable-xxhdpi/round_queue_music_black_18.png
new file mode 100644
index 0000000..15b2615
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_queue_music_black_18.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_queue_music_black_24.png b/app/src/main/res/drawable-xxhdpi/round_queue_music_black_24.png
new file mode 100644
index 0000000..09521a9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_queue_music_black_24.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/round_queue_music_black_48.png b/app/src/main/res/drawable-xxhdpi/round_queue_music_black_48.png
new file mode 100644
index 0000000..8a1ad29
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/round_queue_music_black_48.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_music_note.png b/app/src/main/res/drawable-xxxhdpi/round_music_note.png
new file mode 100644
index 0000000..527c220
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_music_note.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_music_note_black_18.png b/app/src/main/res/drawable-xxxhdpi/round_music_note_black_18.png
new file mode 100644
index 0000000..1d614c9
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_music_note_black_18.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_music_note_black_24.png b/app/src/main/res/drawable-xxxhdpi/round_music_note_black_24.png
new file mode 100644
index 0000000..42c93ba
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_music_note_black_24.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_music_note_black_36.png b/app/src/main/res/drawable-xxxhdpi/round_music_note_black_36.png
new file mode 100644
index 0000000..d7b8d7d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_music_note_black_36.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_queue_music.png b/app/src/main/res/drawable-xxxhdpi/round_queue_music.png
new file mode 100644
index 0000000..8a1ad29
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_queue_music.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_18.png b/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_18.png
new file mode 100644
index 0000000..09521a9
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_18.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_24.png b/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_24.png
new file mode 100644
index 0000000..90da09d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_24.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_48.png b/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_48.png
new file mode 100644
index 0000000..f55476c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/round_queue_music_black_48.png differ
diff --git a/app/src/main/res/drawable/round_music_note_24.xml b/app/src/main/res/drawable/round_music_note_24.xml
new file mode 100644
index 0000000..20ed3cc
--- /dev/null
+++ b/app/src/main/res/drawable/round_music_note_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/round_queue_music_24.xml b/app/src/main/res/drawable/round_queue_music_24.xml
new file mode 100644
index 0000000..23dd5f2
--- /dev/null
+++ b/app/src/main/res/drawable/round_queue_music_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_music_settings.xml b/app/src/main/res/layout/fragment_music_settings.xml
new file mode 100644
index 0000000..7f04ce9
--- /dev/null
+++ b/app/src/main/res/layout/fragment_music_settings.xml
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/the_widget.xml b/app/src/main/res/layout/the_widget.xml
index 3bfaa8d..4304d14 100644
--- a/app/src/main/res/layout/the_widget.xml
+++ b/app/src/main/res/layout/the_widget.xml
@@ -102,6 +102,36 @@
android:layout_gravity="center_vertical"
android:id="@+id/action_next"
android:src="@drawable/round_chevron_right" />
+
+
+
+
+
+
The next alarm clock seems to be wrong.\nIt has been set by %s.
Settings
Clock text color
+ Music
+ Show current playing song
+ Playing song info visible
+ Playing song info hidden
+ Song info format
+ We need the notification access permission to check the current playing song.
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index a3d1c2d..f2fe738 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -188,4 +188,10 @@
The next alarm clock seems to be wrong.\nIt has been set by %s.
Settings
Clock text color
+ Music
+ Show current playing song
+ Playing song info visible
+ Playing song info hidden
+ Song info format
+ We need the notification access permission to check the current playing song.
\ No newline at end of file
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 64a4f7e..56a1e42 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -187,4 +187,10 @@
La sveglia sembra impostata male.\nÈ stata impostata dall\'app %s.
Impostazioni
Colore orologio
+ Musica
+ Mostra brano in riproduzione
+ Visibile
+ Non visibile
+ Formato informazioni brano
+ Concedi all\'app il permesso di monitorare le notifiche, è necessario per poter mostrare il brano in riproduzione.
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 95441e6..fbf8579 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -199,4 +199,10 @@
The next alarm clock seems to be wrong.\nIt has been set by %s.
Settings
Clock text color
+ Music
+ Show current playing song
+ Playing song info visible
+ Playing song info hidden
+ Song info format
+ We need the notification access permission to check the current playing song.
diff --git a/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
index 77c641a..7d6a280 100644
--- a/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
+++ b/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
@@ -1,4 +1,4 @@
-#Fri May 08 11:53:34 CEST 2020
+#Fri May 08 15:03:49 CEST 2020
base.0=/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/intermediates/dex/debug/mergeProjectDexDebug/out/classes.dex
path.0=classes.dex
renamed.0=classes.dex
diff --git a/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources b/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources
index a7ddbbe..c1e60cb 100644
Binary files a/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources and b/tasksintegration/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources differ