Этот коммит содержится в:
Anton Tananaev
2022-10-07 09:23:42 -07:00
родитель 49e8f0e271
Коммит e076cb2e61
2 изменённых файлов: 41 добавлений и 7 удалений
+16 -1
Просмотреть файл
@@ -16,18 +16,27 @@
@file:Suppress("DEPRECATION") @file:Suppress("DEPRECATION")
package org.traccar.manager package org.traccar.manager
import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.webkit.WebViewFragment import android.webkit.WebViewFragment
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
var pendingEventId: Long? = null
private fun updateEventId(intent: Intent?) {
intent?.getStringExtra("eventId")?.let { pendingEventId = it.toLongOrNull() }
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
updateEventId(intent)
if (savedInstanceState == null) { if (savedInstanceState == null) {
initContent() 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) @RequiresApi(api = Build.VERSION_CODES.M)
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
val fragment = fragmentManager.findFragmentById(android.R.id.content) val fragment = fragmentManager.findFragmentById(android.R.id.content)
@@ -51,7 +66,7 @@ class MainActivity : AppCompatActivity() {
override fun onBackPressed() { override fun onBackPressed() {
val fragment = fragmentManager.findFragmentById(android.R.id.content) as? WebViewFragment val fragment = fragmentManager.findFragmentById(android.R.id.content) as? WebViewFragment
if (fragment?.webView?.canGoBack() == true) { if (fragment?.webView?.canGoBack() == true) {
fragment.webView.goBack(); fragment.webView.goBack()
} else { } else {
super.onBackPressed() super.onBackPressed()
} }
+25 -6
Просмотреть файл
@@ -47,7 +47,7 @@ class MainFragment : WebViewFragment() {
val url = message.substring(7) val url = message.substring(7)
PreferenceManager.getDefaultSharedPreferences(activity) PreferenceManager.getDefaultSharedPreferences(activity)
.edit().putString(MainActivity.PREFERENCE_URL, url).apply() .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.databaseEnabled = true
webSettings.mediaPlaybackRequiresUserGesture = false webSettings.mediaPlaybackRequiresUserGesture = false
webSettings.setSupportMultipleWindows(true) webSettings.setSupportMultipleWindows(true)
loadPage()
}
private fun loadPage() {
val url = PreferenceManager.getDefaultSharedPreferences(activity) val url = PreferenceManager.getDefaultSharedPreferences(activity)
.getString(MainActivity.PREFERENCE_URL, null) .getString(MainActivity.PREFERENCE_URL, null)
if (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 { } else {
activity.fragmentManager activity.fragmentManager
.beginTransaction().replace(android.R.id.content, StartFragment()) .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) { override fun onReceive(context: Context, intent: Intent) {
val token = intent.getStringExtra(KEY_TOKEN) val token = intent.getStringExtra(KEY_TOKEN)
val code = "updateNotificationToken && updateNotificationToken('$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() { override fun onStart() {
super.onStart() super.onStart()
val intentFilter = IntentFilter(EVENT_TOKEN) broadcastManager.registerReceiver(tokenBroadcastReceiver, IntentFilter(EVENT_TOKEN))
broadcastManager.registerReceiver(broadcastReceiver, intentFilter) broadcastManager.registerReceiver(eventIdBroadcastReceiver, IntentFilter(EVENT_EVENT))
} }
override fun onStop() { override fun onStop() {
super.onStop() super.onStop()
broadcastManager.unregisterReceiver(broadcastReceiver) broadcastManager.unregisterReceiver(tokenBroadcastReceiver)
broadcastManager.unregisterReceiver(eventIdBroadcastReceiver)
} }
private var openFileCallback: ValueCallback<Uri?>? = null private var openFileCallback: ValueCallback<Uri?>? = null
@@ -225,6 +243,7 @@ class MainFragment : WebViewFragment() {
companion object { companion object {
const val EVENT_LOGIN = "eventLogin" const val EVENT_LOGIN = "eventLogin"
const val EVENT_TOKEN = "eventToken" const val EVENT_TOKEN = "eventToken"
const val EVENT_EVENT = "eventEvent"
const val KEY_TOKEN = "keyToken" const val KEY_TOKEN = "keyToken"
private const val REQUEST_PERMISSIONS_LOCATION = 1 private const val REQUEST_PERMISSIONS_LOCATION = 1
private const val REQUEST_FILE_CHOOSER = 1 private const val REQUEST_FILE_CHOOSER = 1