Этот коммит содержится в:
Anton Tananaev
2022-10-07 09:23:42 -07:00
родитель 49e8f0e271
Коммит e076cb2e61
2 изменённых файлов: 41 добавлений и 7 удалений
+16 -1
Просмотреть файл
@@ -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<String>, 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()
}
+24 -5
Просмотреть файл
@@ -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) {
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<Uri?>? = 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