Fix #242
This commit is contained in:
@ -30,6 +30,7 @@ import com.tommasoberlose.anotherwidget.helpers.GreetingsHelper
|
||||
import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
|
||||
import com.tommasoberlose.anotherwidget.receivers.ActivityDetectionReceiver
|
||||
import com.tommasoberlose.anotherwidget.ui.activities.tabs.AppNotificationsFilterActivity
|
||||
import com.tommasoberlose.anotherwidget.ui.activities.tabs.MediaInfoFormatActivity
|
||||
import com.tommasoberlose.anotherwidget.ui.activities.tabs.MusicPlayersFilterActivity
|
||||
import com.tommasoberlose.anotherwidget.ui.fragments.MainFragment
|
||||
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
||||
@ -68,11 +69,16 @@ class GlanceSettingsDialog(val context: Activity, val provider: Constants.Glance
|
||||
|
||||
/* SONG */
|
||||
binding.actionFilterMusicPlayers.isVisible = provider == Constants.GlanceProviderId.PLAYING_SONG
|
||||
binding.actionChangeMediaInfoFormat.isVisible = provider == Constants.GlanceProviderId.PLAYING_SONG
|
||||
if (provider == Constants.GlanceProviderId.PLAYING_SONG) {
|
||||
binding.actionFilterMusicPlayers.setOnClickListener {
|
||||
dismiss()
|
||||
context.startActivityForResult(Intent(context, MusicPlayersFilterActivity::class.java), 0)
|
||||
}
|
||||
binding.actionChangeMediaInfoFormat.setOnClickListener {
|
||||
dismiss()
|
||||
context.startActivityForResult(Intent(context, MediaInfoFormatActivity::class.java), 0)
|
||||
}
|
||||
checkNotificationPermission()
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,8 @@ import android.os.Build
|
||||
import androidx.appcompat.app.AppCompatDelegate.*
|
||||
import androidx.core.os.ConfigurationCompat
|
||||
import com.chibatching.kotpref.KotprefModel
|
||||
import com.tommasoberlose.anotherwidget.helpers.IntentHelper
|
||||
import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
|
||||
import com.tommasoberlose.anotherwidget.utils.isMetric
|
||||
import java.util.*
|
||||
|
||||
@ -133,11 +135,11 @@ object Preferences : KotprefModel() {
|
||||
var lastNotificationPackage by stringPref(default = "")
|
||||
|
||||
var showMusic by booleanPref(default = false)
|
||||
var mediaInfoFormat by stringPref(default = "")
|
||||
var mediaInfoFormat by stringPref(default = MediaPlayerHelper.DEFAULT_MEDIA_INFO_FORMAT)
|
||||
var mediaPlayerTitle by stringPref(default = "")
|
||||
var mediaPlayerAlbum by stringPref(default = "")
|
||||
var mediaPlayerArtist by stringPref(default = "")
|
||||
var mediaPlayerPackage by stringPref(default = "")
|
||||
var mediaPlayerPackage by stringPref(default = IntentHelper.DO_NOTHING_OPTION)
|
||||
var musicPlayersFilter by stringPref(default = "")
|
||||
var appNotificationsFilter by stringPref(default = "")
|
||||
|
||||
|
@ -21,6 +21,10 @@ import java.util.*
|
||||
|
||||
object IntentHelper {
|
||||
|
||||
const val DEFAULT_OPTION = ""
|
||||
const val DO_NOTHING_OPTION = "DO_NOTHING"
|
||||
const val REFRESH_WIDGET_OPTION = "REFRESH_WIDGET"
|
||||
|
||||
fun getWidgetUpdateIntent(context: Context): Intent {
|
||||
val widgetManager = AppWidgetManager.getInstance(context)
|
||||
val widgetComponent = ComponentName(context, MainWidget::class.java)
|
||||
@ -47,7 +51,7 @@ object IntentHelper {
|
||||
|
||||
fun getWeatherIntent(context: Context): Intent {
|
||||
return when (Preferences.weatherAppPackage) {
|
||||
"" -> {
|
||||
DEFAULT_OPTION -> {
|
||||
Intent(Intent.ACTION_VIEW).apply {
|
||||
addCategory(Intent.CATEGORY_DEFAULT)
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
@ -55,9 +59,12 @@ object IntentHelper {
|
||||
component = ComponentName("com.google.android.googlequicksearchbox", "com.google.android.apps.gsa.velour.DynamicActivityTrampoline")
|
||||
}
|
||||
}
|
||||
"_" -> {
|
||||
DO_NOTHING_OPTION -> {
|
||||
Intent()
|
||||
}
|
||||
REFRESH_WIDGET_OPTION -> {
|
||||
getWidgetUpdateIntent(context)
|
||||
}
|
||||
else -> {
|
||||
val pm: PackageManager = context.packageManager
|
||||
try {
|
||||
@ -79,14 +86,17 @@ object IntentHelper {
|
||||
.appendPath(Calendar.getInstance().timeInMillis.toString())
|
||||
.build()
|
||||
return when (Preferences.calendarAppPackage) {
|
||||
"" -> {
|
||||
DEFAULT_OPTION -> {
|
||||
Intent(Intent.ACTION_VIEW).apply {
|
||||
data = calendarUri
|
||||
}
|
||||
}
|
||||
"_" -> {
|
||||
DO_NOTHING_OPTION -> {
|
||||
Intent()
|
||||
}
|
||||
REFRESH_WIDGET_OPTION -> {
|
||||
getWidgetUpdateIntent(context)
|
||||
}
|
||||
else -> {
|
||||
val pm: PackageManager = context.packageManager
|
||||
try {
|
||||
@ -164,14 +174,17 @@ object IntentHelper {
|
||||
|
||||
fun getClockIntent(context: Context): Intent {
|
||||
return when (Preferences.clockAppPackage) {
|
||||
"" -> {
|
||||
DEFAULT_OPTION -> {
|
||||
Intent(AlarmClock.ACTION_SHOW_ALARMS).apply {
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
}
|
||||
}
|
||||
"_" -> {
|
||||
DO_NOTHING_OPTION -> {
|
||||
Intent()
|
||||
}
|
||||
REFRESH_WIDGET_OPTION -> {
|
||||
getWidgetUpdateIntent(context)
|
||||
}
|
||||
else -> {
|
||||
val pm: PackageManager = context.packageManager
|
||||
try {
|
||||
@ -191,7 +204,7 @@ object IntentHelper {
|
||||
|
||||
fun getMusicIntent(context: Context): Intent {
|
||||
return when (Preferences.mediaPlayerPackage) {
|
||||
"" -> {
|
||||
DO_NOTHING_OPTION -> {
|
||||
Intent()
|
||||
}
|
||||
else -> {
|
||||
|
@ -15,14 +15,32 @@ import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
|
||||
import java.lang.Exception
|
||||
|
||||
object MediaPlayerHelper {
|
||||
const val MEDIA_INFO_TITLE = "%TITLE"
|
||||
const val MEDIA_INFO_ARTIST = "%ARTIST"
|
||||
const val MEDIA_INFO_ALBUM = "%ALBUM"
|
||||
|
||||
const val DEFAULT_MEDIA_INFO_FORMAT = "%TITLE, %ARTIST"
|
||||
|
||||
fun isSomeonePlaying(context: Context) = Preferences.showMusic && ActiveNotificationsHelper.checkNotificationAccess(context) && Preferences.mediaPlayerTitle != ""
|
||||
|
||||
fun getMediaInfo(): String {
|
||||
return if (Preferences.mediaPlayerArtist == "") {
|
||||
Preferences.mediaPlayerTitle
|
||||
} else {
|
||||
"%s, %s".format(Preferences.mediaPlayerTitle, Preferences.mediaPlayerArtist)
|
||||
}
|
||||
fun getMediaInfo(format: String = Preferences.mediaInfoFormat, title: String = Preferences.mediaPlayerTitle, artist: String = Preferences.mediaPlayerArtist, album: String = Preferences.mediaPlayerAlbum): String {
|
||||
return when (format) {
|
||||
"",
|
||||
DEFAULT_MEDIA_INFO_FORMAT -> {
|
||||
if (Preferences.mediaPlayerArtist == "") {
|
||||
Preferences.mediaPlayerTitle
|
||||
} else {
|
||||
DEFAULT_MEDIA_INFO_FORMAT.replace(MEDIA_INFO_TITLE, title)
|
||||
.replace(MEDIA_INFO_ARTIST, artist)
|
||||
.replace(MEDIA_INFO_ALBUM, album)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
format.replace(MEDIA_INFO_TITLE, title)
|
||||
.replace(MEDIA_INFO_ARTIST, artist)
|
||||
.replace(MEDIA_INFO_ALBUM, album)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun updatePlayingMediaInfo(context: Context) {
|
||||
|
@ -17,6 +17,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.bumptech.glide.Glide
|
||||
import com.tommasoberlose.anotherwidget.databinding.ActivityChooseApplicationBinding
|
||||
import com.tommasoberlose.anotherwidget.global.Constants
|
||||
import com.tommasoberlose.anotherwidget.helpers.IntentHelper
|
||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.tabs.ChooseApplicationViewModel
|
||||
import kotlinx.coroutines.*
|
||||
import net.idik.lib.slimadapter.SlimAdapter
|
||||
@ -41,21 +42,59 @@ class ChooseApplicationActivity : AppCompatActivity() {
|
||||
|
||||
adapter = SlimAdapterEx.create()
|
||||
adapter
|
||||
.register<String>(R.layout.application_info_layout) { _, injector ->
|
||||
injector
|
||||
.text(R.id.text, getString(R.string.default_name))
|
||||
.image(R.id.icon, R.drawable.round_add_to_home_screen_24)
|
||||
.with<ImageView>(R.id.icon) {
|
||||
it.scaleX = 0.8f
|
||||
it.scaleY = 0.8f
|
||||
it.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimaryText), android.graphics.PorterDuff.Mode.MULTIPLY)
|
||||
.register<String>(R.layout.application_info_layout) { item, injector ->
|
||||
when (item) {
|
||||
IntentHelper.DO_NOTHING_OPTION -> {
|
||||
injector
|
||||
.text(R.id.text, getString(R.string.gestures_do_nothing))
|
||||
.image(R.id.icon, R.drawable.round_no_cell_24)
|
||||
.with<ImageView>(R.id.icon) {
|
||||
it.scaleX = 0.8f
|
||||
it.scaleY = 0.8f
|
||||
it.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimaryText), android.graphics.PorterDuff.Mode.MULTIPLY)
|
||||
}
|
||||
.clicked(R.id.item) {
|
||||
val resultIntent = Intent()
|
||||
resultIntent.putExtra(Constants.RESULT_APP_NAME, IntentHelper.DO_NOTHING_OPTION)
|
||||
resultIntent.putExtra(Constants.RESULT_APP_PACKAGE, IntentHelper.DO_NOTHING_OPTION)
|
||||
setResult(Activity.RESULT_OK, resultIntent)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
IntentHelper.REFRESH_WIDGET_OPTION -> {
|
||||
injector
|
||||
.text(R.id.text, getString(R.string.action_refresh_widget))
|
||||
.image(R.id.icon, R.drawable.round_refresh)
|
||||
.with<ImageView>(R.id.icon) {
|
||||
it.scaleX = 0.8f
|
||||
it.scaleY = 0.8f
|
||||
it.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimaryText), android.graphics.PorterDuff.Mode.MULTIPLY)
|
||||
}
|
||||
.clicked(R.id.item) {
|
||||
val resultIntent = Intent()
|
||||
resultIntent.putExtra(Constants.RESULT_APP_NAME, IntentHelper.REFRESH_WIDGET_OPTION)
|
||||
resultIntent.putExtra(Constants.RESULT_APP_PACKAGE, IntentHelper.REFRESH_WIDGET_OPTION)
|
||||
setResult(Activity.RESULT_OK, resultIntent)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
injector
|
||||
.text(R.id.text, getString(R.string.default_name))
|
||||
.image(R.id.icon, R.drawable.round_add_to_home_screen_24)
|
||||
.with<ImageView>(R.id.icon) {
|
||||
it.scaleX = 0.8f
|
||||
it.scaleY = 0.8f
|
||||
it.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimaryText), android.graphics.PorterDuff.Mode.MULTIPLY)
|
||||
}
|
||||
.clicked(R.id.item) {
|
||||
val resultIntent = Intent()
|
||||
resultIntent.putExtra(Constants.RESULT_APP_NAME, IntentHelper.DEFAULT_OPTION)
|
||||
resultIntent.putExtra(Constants.RESULT_APP_PACKAGE, IntentHelper.DEFAULT_OPTION)
|
||||
setResult(Activity.RESULT_OK, resultIntent)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
.clicked(R.id.item) {
|
||||
val resultIntent = Intent()
|
||||
resultIntent.putExtra(Constants.RESULT_APP_NAME, "")
|
||||
resultIntent.putExtra(Constants.RESULT_APP_PACKAGE, "")
|
||||
setResult(Activity.RESULT_OK, resultIntent)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
.register<ResolveInfo>(R.layout.application_info_layout) { item, injector ->
|
||||
@ -114,7 +153,7 @@ class ChooseApplicationActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
adapter.updateData(listOf("Default") + filteredList)
|
||||
adapter.updateData(listOf(IntentHelper.DO_NOTHING_OPTION, IntentHelper.DEFAULT_OPTION, IntentHelper.REFRESH_WIDGET_OPTION) + filteredList)
|
||||
binding.loader.visibility = View.INVISIBLE
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import java.lang.Exception
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class CustomDateActivity : AppCompatActivity() {
|
||||
class CustomDateActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var adapter: SlimAdapter
|
||||
private lateinit var viewModel: CustomDateViewModel
|
||||
|
@ -0,0 +1,109 @@
|
||||
package com.tommasoberlose.anotherwidget.ui.activities.tabs
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.chibatching.kotpref.blockingBulk
|
||||
import com.tommasoberlose.anotherwidget.R
|
||||
import com.tommasoberlose.anotherwidget.databinding.ActivityMediaInfoFormatBinding
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
|
||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.tabs.MediaInfoFormatViewModel
|
||||
import com.tommasoberlose.anotherwidget.utils.getCapWordString
|
||||
import com.tommasoberlose.anotherwidget.utils.openURI
|
||||
import com.tommasoberlose.anotherwidget.utils.toast
|
||||
import kotlinx.coroutines.*
|
||||
import net.idik.lib.slimadapter.SlimAdapter
|
||||
import java.lang.Exception
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class MediaInfoFormatActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var adapter: SlimAdapter
|
||||
private lateinit var viewModel: MediaInfoFormatViewModel
|
||||
private lateinit var binding: ActivityMediaInfoFormatBinding
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
viewModel = ViewModelProvider(this).get(MediaInfoFormatViewModel::class.java)
|
||||
binding = ActivityMediaInfoFormatBinding.inflate(layoutInflater)
|
||||
|
||||
|
||||
binding.listView.setHasFixedSize(true)
|
||||
val mLayoutManager = LinearLayoutManager(this)
|
||||
binding.listView.layoutManager = mLayoutManager
|
||||
|
||||
adapter = SlimAdapter.create()
|
||||
adapter
|
||||
.register<String>(R.layout.custom_date_example_item) { item, injector ->
|
||||
injector
|
||||
.text(R.id.custom_date_example_format, item)
|
||||
.text(
|
||||
R.id.custom_date_example_value, MediaPlayerHelper.getMediaInfo(item, EXAMPLE_TITLE, EXAMPLE_ARTIST, EXAMPLE_ALBUM))
|
||||
}
|
||||
.attachTo(binding.listView)
|
||||
|
||||
adapter.updateData(
|
||||
listOf(
|
||||
MediaPlayerHelper.MEDIA_INFO_TITLE, MediaPlayerHelper.MEDIA_INFO_ARTIST, MediaPlayerHelper.MEDIA_INFO_ALBUM
|
||||
)
|
||||
)
|
||||
|
||||
setupListener()
|
||||
subscribeUi(binding, viewModel)
|
||||
|
||||
binding.mediaInfoFormatInput.requestFocus()
|
||||
|
||||
setContentView(binding.root)
|
||||
}
|
||||
|
||||
private var formatJob: Job? = null
|
||||
|
||||
private fun subscribeUi(binding: ActivityMediaInfoFormatBinding, viewModel: MediaInfoFormatViewModel) {
|
||||
binding.viewModel = viewModel
|
||||
binding.lifecycleOwner = this
|
||||
|
||||
viewModel.mediaInfoFormatInput.observe(this) { mediaInfoFormatInput ->
|
||||
formatJob?.cancel()
|
||||
formatJob = lifecycleScope.launch(Dispatchers.IO) {
|
||||
withContext(Dispatchers.Main) {
|
||||
binding.loader.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
delay(200)
|
||||
val text = MediaPlayerHelper.getMediaInfo(mediaInfoFormatInput, EXAMPLE_TITLE, EXAMPLE_ARTIST, EXAMPLE_ALBUM)
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
binding.loader.visibility = View.INVISIBLE
|
||||
binding.mediaInfoFormatInputValue.text = text
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupListener() {
|
||||
binding.actionBack.setOnClickListener {
|
||||
onBackPressed()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
Preferences.blockingBulk {
|
||||
mediaInfoFormat = viewModel.mediaInfoFormatInput.value ?: ""
|
||||
}
|
||||
super.onBackPressed()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val EXAMPLE_TITLE = "Thunderstruck"
|
||||
const val EXAMPLE_ARTIST = "AC/DC"
|
||||
const val EXAMPLE_ALBUM = "The Razors Edge"
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.tommasoberlose.anotherwidget.ui.viewmodels.tabs
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
|
||||
|
||||
class MediaInfoFormatViewModel(application: Application) : AndroidViewModel(application) {
|
||||
val mediaInfoFormatInput: MutableLiveData<String> = MutableLiveData(if (Preferences.mediaInfoFormat == "") MediaPlayerHelper.DEFAULT_MEDIA_INFO_FORMAT else Preferences.mediaInfoFormat)
|
||||
}
|
Reference in New Issue
Block a user