From e076cb2e615c0179742386b828d56bbf153d76e5 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 7 Oct 2022 09:23:42 -0700 Subject: [PATCH] Support event id payload --- .../java/org/traccar/manager/MainActivity.kt | 17 +++++++++- .../java/org/traccar/manager/MainFragment.kt | 31 +++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/traccar/manager/MainActivity.kt b/app/src/main/java/org/traccar/manager/MainActivity.kt index 1f97061..ae0a1c0 100644 --- a/app/src/main/java/org/traccar/manager/MainActivity.kt +++ b/app/src/main/java/org/traccar/manager/MainActivity.kt @@ -16,18 +16,27 @@ @file:Suppress("DEPRECATION") package org.traccar.manager +import android.content.Intent import android.os.Build import android.os.Bundle import android.webkit.WebViewFragment import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity +import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.preference.PreferenceManager class MainActivity : AppCompatActivity() { + var pendingEventId: Long? = null + + private fun updateEventId(intent: Intent?) { + intent?.getStringExtra("eventId")?.let { pendingEventId = it.toLongOrNull() } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + updateEventId(intent) if (savedInstanceState == null) { initContent() } @@ -41,6 +50,12 @@ class MainActivity : AppCompatActivity() { } } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + updateEventId(intent) + LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(MainFragment.EVENT_EVENT)) + } + @RequiresApi(api = Build.VERSION_CODES.M) override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { val fragment = fragmentManager.findFragmentById(android.R.id.content) @@ -51,7 +66,7 @@ class MainActivity : AppCompatActivity() { override fun onBackPressed() { val fragment = fragmentManager.findFragmentById(android.R.id.content) as? WebViewFragment if (fragment?.webView?.canGoBack() == true) { - fragment.webView.goBack(); + fragment.webView.goBack() } else { super.onBackPressed() } diff --git a/app/src/main/java/org/traccar/manager/MainFragment.kt b/app/src/main/java/org/traccar/manager/MainFragment.kt index eee7703..d1e6870 100644 --- a/app/src/main/java/org/traccar/manager/MainFragment.kt +++ b/app/src/main/java/org/traccar/manager/MainFragment.kt @@ -47,7 +47,7 @@ class MainFragment : WebViewFragment() { val url = message.substring(7) PreferenceManager.getDefaultSharedPreferences(activity) .edit().putString(MainActivity.PREFERENCE_URL, url).apply() - activity.runOnUiThread { webView.loadUrl(url) } + activity.runOnUiThread { loadPage() } } } } @@ -73,10 +73,21 @@ class MainFragment : WebViewFragment() { webSettings.databaseEnabled = true webSettings.mediaPlaybackRequiresUserGesture = false webSettings.setSupportMultipleWindows(true) + loadPage() + } + + private fun loadPage() { val url = PreferenceManager.getDefaultSharedPreferences(activity) .getString(MainActivity.PREFERENCE_URL, null) if (url != null) { - webView.loadUrl(url) + val mainActivity = activity as? MainActivity + val eventId = mainActivity?.pendingEventId + mainActivity?.pendingEventId = null + if (eventId != null) { + webView.loadUrl("$url?eventId=$eventId") + } else { + webView.loadUrl(url) + } } else { activity.fragmentManager .beginTransaction().replace(android.R.id.content, StartFragment()) @@ -84,7 +95,7 @@ class MainFragment : WebViewFragment() { } } - private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() { + private val tokenBroadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val token = intent.getStringExtra(KEY_TOKEN) val code = "updateNotificationToken && updateNotificationToken('$token')" @@ -92,15 +103,22 @@ class MainFragment : WebViewFragment() { } } + private val eventIdBroadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + loadPage() + } + } + override fun onStart() { super.onStart() - val intentFilter = IntentFilter(EVENT_TOKEN) - broadcastManager.registerReceiver(broadcastReceiver, intentFilter) + broadcastManager.registerReceiver(tokenBroadcastReceiver, IntentFilter(EVENT_TOKEN)) + broadcastManager.registerReceiver(eventIdBroadcastReceiver, IntentFilter(EVENT_EVENT)) } override fun onStop() { super.onStop() - broadcastManager.unregisterReceiver(broadcastReceiver) + broadcastManager.unregisterReceiver(tokenBroadcastReceiver) + broadcastManager.unregisterReceiver(eventIdBroadcastReceiver) } private var openFileCallback: ValueCallback? = null @@ -225,6 +243,7 @@ class MainFragment : WebViewFragment() { companion object { const val EVENT_LOGIN = "eventLogin" const val EVENT_TOKEN = "eventToken" + const val EVENT_EVENT = "eventEvent" const val KEY_TOKEN = "keyToken" private const val REQUEST_PERMISSIONS_LOCATION = 1 private const val REQUEST_FILE_CHOOSER = 1