From 9a5817273049c9d30c3341b7952b0900b991f3e5 Mon Sep 17 00:00:00 2001 From: razeeman Date: Sun, 9 Jul 2023 07:24:42 +0300 Subject: [PATCH] add refresh button to statistics widget --- .../src/main/res/drawable/refresh.xml | 9 +++++ .../src/main/res/values/dimens.xml | 2 ++ .../WidgetStatisticsChartProvider.kt | 33 +++++++++++++++++++ .../src/main/res/layout/widget_layout.xml | 23 +++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 features/feature_views/src/main/res/drawable/refresh.xml diff --git a/features/feature_views/src/main/res/drawable/refresh.xml b/features/feature_views/src/main/res/drawable/refresh.xml new file mode 100644 index 00000000..aaefaea8 --- /dev/null +++ b/features/feature_views/src/main/res/drawable/refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/features/feature_views/src/main/res/values/dimens.xml b/features/feature_views/src/main/res/values/dimens.xml index 141fc487..0b1016af 100644 --- a/features/feature_views/src/main/res/values/dimens.xml +++ b/features/feature_views/src/main/res/values/dimens.xml @@ -22,4 +22,6 @@ 8dp 16dp + + 20dp \ No newline at end of file diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/WidgetStatisticsChartProvider.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/WidgetStatisticsChartProvider.kt index f34c0ed9..0ba4c358 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/WidgetStatisticsChartProvider.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/WidgetStatisticsChartProvider.kt @@ -3,7 +3,9 @@ package com.example.util.simpletimetracker.feature_widget.statistics import android.app.PendingIntent import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider +import android.content.ComponentName import android.content.Context +import android.content.Intent import android.os.Bundle import android.view.ContextThemeWrapper import android.view.LayoutInflater @@ -19,10 +21,12 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.model.ChartFilterType import com.example.util.simpletimetracker.domain.model.RecordType +import com.example.util.simpletimetracker.feature_views.IconView import com.example.util.simpletimetracker.feature_views.extension.dpToPx import com.example.util.simpletimetracker.feature_views.extension.getBitmapFromView import com.example.util.simpletimetracker.feature_views.extension.measureExactly import com.example.util.simpletimetracker.feature_views.extension.pxToDp +import com.example.util.simpletimetracker.feature_views.viewData.RecordTypeIcon import com.example.util.simpletimetracker.feature_widget.R import com.example.util.simpletimetracker.feature_widget.statistics.customView.WidgetStatisticsChartView import com.example.util.simpletimetracker.navigation.Router @@ -91,11 +95,17 @@ class WidgetStatisticsChartProvider : AppWidgetProvider() { val options = appWidgetManager.getAppWidgetOptions(appWidgetId) measureView(context, options, view) val bitmap = view.getBitmapFromView() + val refreshButtonBitmap = prepareRefreshButtonView(context).getBitmapFromView() val views = RemoteViews(context.packageName, R.layout.widget_layout) views.setImageViewBitmap(R.id.ivWidgetBackground, bitmap) views.setOnClickPendingIntent(R.id.btnWidget, getPendingSelfIntent(context)) + views.setImageViewBitmap(R.id.ivRefresh, refreshButtonBitmap) + views.setOnClickPendingIntent(R.id.btnRefresh, getRefreshIntent(context, appWidgetId)) + views.setViewVisibility(R.id.ivRefresh, View.VISIBLE) + views.setViewVisibility(R.id.btnRefresh, View.VISIBLE) + appWidgetManager.updateAppWidget(appWidgetId, views) } @@ -150,6 +160,16 @@ class WidgetStatisticsChartProvider : AppWidgetProvider() { } } + private fun prepareRefreshButtonView( + context: Context, + ): View { + return IconView(ContextThemeWrapper(context, R.style.AppTheme)).apply { + itemIcon = RecordTypeIcon.Image(R.drawable.refresh) + itemIconColor = resourceRepo.getColor(R.color.white) + measureExactly(resourceRepo.getDimenInDp(R.dimen.widget_statistics_refresh_button_size)) + } + } + private fun measureView( context: Context, options: Bundle, @@ -181,4 +201,17 @@ class WidgetStatisticsChartProvider : AppWidgetProvider() { } return PendingIntent.getActivity(context, 0, intent, PendingIntents.getFlags()) } + + private fun getRefreshIntent( + context: Context, + widgetId: Int, + ): PendingIntent { + val intent = Intent(context, javaClass) + intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE + val ids = AppWidgetManager.getInstance(context) + ?.getAppWidgetIds(ComponentName(context, javaClass)) + ?: intArrayOf() + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) + return PendingIntent.getBroadcast(context, widgetId, intent, PendingIntents.getFlags()) + } } \ No newline at end of file diff --git a/features/feature_widget/src/main/res/layout/widget_layout.xml b/features/feature_widget/src/main/res/layout/widget_layout.xml index e7c3fb9b..0a5324d3 100644 --- a/features/feature_widget/src/main/res/layout/widget_layout.xml +++ b/features/feature_widget/src/main/res/layout/widget_layout.xml @@ -46,4 +46,27 @@ android:layout_height="match_parent" android:background="@drawable/bg_widget_button" /> + + +