From 2667f612229a1efb33c5e2a3ef36c04cd0b31d09 Mon Sep 17 00:00:00 2001 From: Anton-V-K <20116984+Anton-V-K@users.noreply.github.com> Date: Sun, 23 Jan 2022 14:51:10 +0300 Subject: [PATCH 1/8] Status Widget #429 --- app/src/main/AndroidManifest.xml | 12 +++ .../java/org/traccar/client/StatusWidget.kt | 83 ++++++++++++++++++ .../drawable-hdpi/status_widget_preview.png | Bin 0 -> 4287 bytes .../drawable-mdpi/status_widget_preview.png | Bin 0 -> 2606 bytes .../drawable-v21/app_widget_background.xml | 10 +++ .../app_widget_inner_view_background.xml | 10 +++ .../drawable-xhdpi/status_widget_preview.png | Bin 0 -> 6002 bytes .../drawable-xxhdpi/status_widget_preview.png | Bin 0 -> 9615 bytes .../status_widget_preview.png | Bin 0 -> 13368 bytes app/src/main/res/layout/status_widget.xml | 16 ++++ app/src/main/res/values-night-v31/themes.xml | 11 +++ app/src/main/res/values-v21/styles.xml | 13 +++ app/src/main/res/values-v31/styles.xml | 7 ++ app/src/main/res/values-v31/themes.xml | 12 +++ app/src/main/res/values/attrs.xml | 7 ++ app/src/main/res/values/dimens.xml | 6 ++ app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 12 +++ app/src/main/res/values/themes.xml | 8 ++ app/src/main/res/xml/status_widget_info.xml | 13 +++ 20 files changed, 222 insertions(+) create mode 100644 app/src/main/java/org/traccar/client/StatusWidget.kt create mode 100644 app/src/main/res/drawable-hdpi/status_widget_preview.png create mode 100644 app/src/main/res/drawable-mdpi/status_widget_preview.png create mode 100644 app/src/main/res/drawable-v21/app_widget_background.xml create mode 100644 app/src/main/res/drawable-v21/app_widget_inner_view_background.xml create mode 100644 app/src/main/res/drawable-xhdpi/status_widget_preview.png create mode 100644 app/src/main/res/drawable-xxhdpi/status_widget_preview.png create mode 100644 app/src/main/res/drawable-xxxhdpi/status_widget_preview.png create mode 100644 app/src/main/res/layout/status_widget.xml create mode 100644 app/src/main/res/values-night-v31/themes.xml create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-v31/styles.xml create mode 100644 app/src/main/res/values-v31/themes.xml create mode 100644 app/src/main/res/values/attrs.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/status_widget_info.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0b39d810..3931d8ef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -85,6 +85,18 @@ + + + + + + + diff --git a/app/src/main/java/org/traccar/client/StatusWidget.kt b/app/src/main/java/org/traccar/client/StatusWidget.kt new file mode 100644 index 00000000..14d75f17 --- /dev/null +++ b/app/src/main/java/org/traccar/client/StatusWidget.kt @@ -0,0 +1,83 @@ +/* + * Copyright 2016 - 2022 Anton Tananaev (anton@traccar.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.client + +import android.appwidget.AppWidgetManager +import android.appwidget.AppWidgetProvider +import android.content.* +import android.widget.RemoteViews + +import androidx.preference.PreferenceManager + +/** + * Implementation of Status Widget functionality, which can display the status of the service - + * whether it is enabled or not. + */ +class StatusWidget : AppWidgetProvider() { + + override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { + update(context, appWidgetManager, appWidgetIds) + } + + override fun onEnabled(context: Context) { + // Enter relevant functionality for when the first widget is created + val filter = IntentFilter() + filter.addAction(TrackingService.ACTION_STARTED) + filter.addAction(TrackingService.ACTION_STOPPED) + // Note: we must register through the app context as a workaround + // for 'BroadcastReceiver components are not allowed to register to receive intents' + context.applicationContext.registerReceiver(Companion, filter) + } + + override fun onDisabled(context: Context) { + // Enter relevant functionality for when the last widget is disabled + context.applicationContext.unregisterReceiver(Companion) + } + + companion object: BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + if (TrackingService.ACTION_STARTED == intent.action + || TrackingService.ACTION_STOPPED == intent.action) { + updateWidgets(context) + } + } + + // Performs update for all widgets of this class. + fun updateWidgets(context: Context) { + val manager = AppWidgetManager.getInstance(context) + val appWidgetIds = manager.getAppWidgetIds(ComponentName(context, StatusWidget::class.java.name)) + update(context, manager, appWidgetIds) + } + + } + +} + +// Performs update for the widgets with given identifiers. +internal fun update(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + val enabled = prefs.getBoolean(MainFragment.KEY_STATUS, false) + // There may be multiple widgets active, so update all of them + for (appWidgetId in appWidgetIds) { + // Construct the RemoteViews object + val views = RemoteViews(context.packageName, R.layout.status_widget) + views.setImageViewResource(R.id.ivEnabled, if (enabled) R.mipmap.ic_start else R.mipmap.ic_stop) + + // Instruct the widget manager to update the widget + appWidgetManager.updateAppWidget(appWidgetId, views) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/status_widget_preview.png b/app/src/main/res/drawable-hdpi/status_widget_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..0193bcb30ff6b981090fb92544d599e182e12d6f GIT binary patch literal 4287 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 + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/app_widget_inner_view_background.xml b/app/src/main/res/drawable-v21/app_widget_inner_view_background.xml new file mode 100644 index 00000000..007e2872 --- /dev/null +++ b/app/src/main/res/drawable-v21/app_widget_inner_view_background.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/status_widget_preview.png b/app/src/main/res/drawable-xhdpi/status_widget_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..567c9c0ab6544069cc93da6ecfc41bade894275c GIT binary patch literal 6002 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 + + + \ No newline at end of file diff --git a/app/src/main/res/values-night-v31/themes.xml b/app/src/main/res/values-night-v31/themes.xml new file mode 100644 index 00000000..85ce7f65 --- /dev/null +++ b/app/src/main/res/values-night-v31/themes.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 00000000..7151caeb --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml new file mode 100644 index 00000000..95ec732a --- /dev/null +++ b/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v31/themes.xml b/app/src/main/res/values-v31/themes.xml new file mode 100644 index 00000000..447f2866 --- /dev/null +++ b/app/src/main/res/values-v31/themes.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 00000000..7781ac86 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 76beac89..ad54b384 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,4 +1,10 @@ 16dp + + + 0dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 567041c6..b864e3fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,6 +44,8 @@ Location update Network online Network offline + The widget shows the service status + Status widget Device Settings The app has been hidden. To open it again please dial 8722227 (TRACCAR). Please enter a valid http:// or https:// URL diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..c401ade6 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 46ea1a42..29c89f0b 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -7,4 +7,12 @@ @color/accent + + + - \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml deleted file mode 100644 index 7151caeb..00000000 --- a/app/src/main/res/values-v21/styles.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml deleted file mode 100644 index 95ec732a..00000000 --- a/app/src/main/res/values-v31/styles.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-v31/themes.xml b/app/src/main/res/values-v31/themes.xml deleted file mode 100644 index 447f2866..00000000 --- a/app/src/main/res/values-v31/themes.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml deleted file mode 100644 index c401ade6..00000000 --- a/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 29c89f0b..46ea1a42 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -7,12 +7,4 @@ @color/accent - - -