diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 335e8f6..89c42be 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -116,6 +116,8 @@ + + @@ -131,6 +133,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 e2a8182..033ad2d 100755 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/global/Preferences.kt @@ -91,6 +91,7 @@ object Preferences : KotprefModel() { var showNextAlarm by booleanPref(default = true) var showBatteryCharging by booleanPref(default = false) var isBatteryLevelLow by booleanPref(default = false) + var isCharging by booleanPref(default = false) var googleFitSteps by longPref(default = -1) var showDailySteps by booleanPref(default = false) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/BatteryHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/BatteryHelper.kt new file mode 100644 index 0000000..e75ad7c --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/BatteryHelper.kt @@ -0,0 +1,23 @@ +package com.tommasoberlose.anotherwidget.helpers + +import android.content.Context +import android.content.Context.BATTERY_SERVICE +import android.os.BatteryManager +import androidx.core.content.ContextCompat.getSystemService +import com.tommasoberlose.anotherwidget.global.Preferences + + +object BatteryHelper { + fun updateBatteryInfo(context: Context) { + with(context.getSystemService(BATTERY_SERVICE) as BatteryManager) { + Preferences.isBatteryLevelLow = getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) <= 15 + Preferences.isCharging = isCharging + } + } + + fun getBatteryLevel(context: Context): Int { + with(context.getSystemService(BATTERY_SERVICE) as BatteryManager) { + return getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt index 5accf9d..a179cc0 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/GlanceProviderHelper.kt @@ -14,7 +14,6 @@ object GlanceProviderHelper { val enabledProviders = Preferences.enabledGlanceProviderOrder.split(",").filter { it != "" } val providers = Constants.GlanceProviderId.values() - .filter { it != Constants.GlanceProviderId.BATTERY_LEVEL_LOW } .filter { context.checkIfFitInstalled() || it != Constants.GlanceProviderId.GOOGLE_FIT_STEPS }.toTypedArray() @@ -80,10 +79,11 @@ object GlanceProviderHelper { fun showGlanceProviders(context: Context): Boolean { val eventRepository = EventRepository(context) + BatteryHelper.updateBatteryInfo(context) val showGlance = Preferences.showGlance && eventRepository.getEventsCount() == 0 && ( (Preferences.showNextAlarm && AlarmHelper.getNextAlarm(context) != "") || (MediaPlayerHelper.isSomeonePlaying(context)) || - (Preferences.isBatteryLevelLow) || + (Preferences.showBatteryCharging && Preferences.isCharging || Preferences.isBatteryLevelLow) || (Preferences.customNotes.isNotEmpty()) || (Preferences.showDailySteps && Preferences.googleFitSteps > 0) ) 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 d122242..8b00585 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/IntentHelper.kt @@ -182,6 +182,10 @@ object IntentHelper { } } + fun getBatteryIntent(context: Context): Intent { + return Intent(Intent.ACTION_POWER_USAGE_SUMMARY) + } + fun getMusicIntent(context: Context): Intent { return when (Preferences.mediaPlayerPackage) { "" -> { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt index 9acba62..51802d9 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/BatteryLevelReceiver.kt @@ -7,12 +7,15 @@ import android.os.BatteryManager import android.util.Log import com.tommasoberlose.anotherwidget.global.Preferences import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget +import com.tommasoberlose.anotherwidget.utils.toast class BatteryLevelReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when(intent.action) { Intent.ACTION_BATTERY_LOW -> Preferences.isBatteryLevelLow = true Intent.ACTION_BATTERY_OKAY -> Preferences.isBatteryLevelLow = false + Intent.ACTION_POWER_CONNECTED -> Preferences.isCharging = true + Intent.ACTION_POWER_DISCONNECTED -> Preferences.isCharging = false } MainWidget.updateWidget(context) } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt index d91ce02..f9c4e85 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receivers/UpdatesReceiver.kt @@ -12,6 +12,7 @@ import com.tommasoberlose.anotherwidget.db.EventRepository import com.tommasoberlose.anotherwidget.global.Actions import com.tommasoberlose.anotherwidget.global.Constants import com.tommasoberlose.anotherwidget.global.Preferences +import com.tommasoberlose.anotherwidget.helpers.BatteryHelper import com.tommasoberlose.anotherwidget.helpers.CalendarHelper import com.tommasoberlose.anotherwidget.models.Event import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget @@ -28,7 +29,9 @@ class UpdatesReceiver : BroadcastReceiver() { Intent.ACTION_TIME_CHANGED, Intent.ACTION_TIMEZONE_CHANGED, Intent.ACTION_LOCALE_CHANGED, - Actions.ACTION_CALENDAR_UPDATE -> CalendarHelper.updateEventList(context) + Actions.ACTION_CALENDAR_UPDATE -> { + CalendarHelper.updateEventList(context) + } "com.sec.android.widgetapp.APPWIDGET_RESIZE", Intent.ACTION_DATE_CHANGED, diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/services/BatteryListenerJob.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/services/BatteryListenerJob.kt new file mode 100644 index 0000000..a726a99 --- /dev/null +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/services/BatteryListenerJob.kt @@ -0,0 +1,61 @@ +package com.tommasoberlose.anotherwidget.services + +import android.app.job.JobInfo +import android.app.job.JobParameters +import android.app.job.JobScheduler +import android.app.job.JobService +import android.content.ComponentName +import android.content.Context +import android.os.Build +import android.provider.CalendarContract +import com.tommasoberlose.anotherwidget.helpers.CalendarHelper +import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget + +class BatteryListenerJob : JobService() { + override fun onStartJob(params: JobParameters): Boolean { + MainWidget.updateWidget(this) + schedule( + this + ) + return false + } + + @Synchronized + override fun onStopJob(params: JobParameters): Boolean { + return false + } + + companion object { + private const val chargingJobId = 1006 + private const val notChargingJobId = 1007 + fun schedule(context: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + remove(context) + val componentName = ComponentName( + context, + EventListenerJob::class.java + ) + with(context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler) { + schedule( + JobInfo.Builder(chargingJobId, componentName) + .setRequiresCharging(true) + .setPersisted(true) + .build() + ) + schedule( + JobInfo.Builder(notChargingJobId, componentName) + .setRequiresCharging(false) + .setPersisted(true) + .build() + ) + } + } + } + + fun remove(context: Context) { + val js = context.getSystemService(JobScheduler::class.java) + js?.cancel(chargingJobId) + js?.cancel(notChargingJobId) + } + } +} \ No newline at end of file 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 b9922b2..8566a62 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 @@ -36,6 +36,7 @@ import com.tommasoberlose.anotherwidget.helpers.BitmapHelper import com.tommasoberlose.anotherwidget.helpers.ColorHelper import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark import com.tommasoberlose.anotherwidget.ui.activities.MainActivity +import com.tommasoberlose.anotherwidget.ui.activities.SupportDevActivity import com.tommasoberlose.anotherwidget.ui.adapters.ViewPagerAdapter import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget @@ -268,8 +269,8 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList widget_loader?.animate()?.scaleX(0f)?.scaleY(0f)?.alpha(0f)?.setDuration(200L)?.start() bitmap_container?.apply { setImageBitmap(bitmap) -// scaleX = 0.9f -// scaleY = 0.9f + scaleX = 0.9f + scaleY = 0.9f } widget?.animate()?.alpha(1f)?.start() } 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 d503fdf..68f8038 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 @@ -291,15 +291,18 @@ class MainWidget : AppWidgetProvider() { } } Constants.GlanceProviderId.BATTERY_LEVEL_LOW -> { - if (Preferences.isBatteryLevelLow) { - val alarmIntent = PendingIntent.getActivity( - context, - widgetID, - IntentHelper.getClockIntent(context), - 0 - ) - views.setOnClickPendingIntent(R.id.second_row_rect, alarmIntent) - break@loop + if (Preferences.showBatteryCharging) { + BatteryHelper.updateBatteryInfo(context) + if (Preferences.isCharging || Preferences.isBatteryLevelLow) { + val batteryIntent = PendingIntent.getActivity( + context, + widgetID, + IntentHelper.getBatteryIntent(context), + 0 + ) + views.setOnClickPendingIntent(R.id.second_row_rect, batteryIntent) + break@loop + } } } Constants.GlanceProviderId.CUSTOM_INFO -> { @@ -562,15 +565,24 @@ class MainWidget : AppWidgetProvider() { } } Constants.GlanceProviderId.BATTERY_LEVEL_LOW -> { - if (Preferences.isBatteryLevelLow) { - v.second_row_icon.setImageDrawable( - ContextCompat.getDrawable( - context, - R.drawable.round_battery_charging_full - ) - ) - v.next_event_date.text = context.getString(R.string.battery_low_warning) - break@loop + Log.d("ciao", "isChargin: ${Preferences.isCharging} ") + if (Preferences.showBatteryCharging) { + BatteryHelper.updateBatteryInfo(context) + if (Preferences.isCharging) { + v.second_row_icon.isVisible = false + val batteryLevel = BatteryHelper.getBatteryLevel(context) + if (batteryLevel == 100) { + v.next_event_date.text = "%s - %d%%".format(context.getString(R.string.charging), batteryLevel) + } else { + v.next_event_date.text = context.getString(R.string.charging) + } + break@loop + } else if (Preferences.isBatteryLevelLow) { + v.second_row_icon.isVisible = false + v.next_event_date.text = + context.getString(R.string.battery_low_warning) + break@loop + } } } Constants.GlanceProviderId.CUSTOM_INFO -> { diff --git a/app/src/main/res/layout/fragment_clock_settings.xml b/app/src/main/res/layout/fragment_clock_settings.xml index 1ed40a2..a89db9b 100644 --- a/app/src/main/res/layout/fragment_clock_settings.xml +++ b/app/src/main/res/layout/fragment_clock_settings.xml @@ -298,27 +298,27 @@ style="@style/AnotherWidget.Settings.Subtitle"/> - - - + android:id="@+id/small_clock_warning" + android:orientation="vertical"> + + diff --git a/app/src/main/res/layout/fragment_glance_settings.xml b/app/src/main/res/layout/fragment_glance_settings.xml index 4b6474b..b39883b 100644 --- a/app/src/main/res/layout/fragment_glance_settings.xml +++ b/app/src/main/res/layout/fragment_glance_settings.xml @@ -74,6 +74,56 @@ android:id="@+id/calendar_settings" android:alpha="@{isGlanceVisible ? 1f : 0.2f, default=1}" android:orientation="vertical"> + + + + + + + + - - - - - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cd9f5fd..1f47bc7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -118,7 +118,7 @@ Clock visibility Clock is hidden Clock text size - Next clock Alarm + Next clock alarm Show the next clock alarm Text shadow None @@ -213,14 +213,15 @@ Integrations %d installed integrations Show at a glance info - Show multiple provider data when there are no events displayed. + Show some useful info Show text dividers Data source priority Change the data provider importance Custom notes - Battery level + Battery Daily steps Low battery level + Charging Show AM/PM Indicator %d steps so far soon