aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/traccar/manager/MainFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/traccar/manager/MainFragment.kt')
-rw-r--r--app/src/main/java/org/traccar/manager/MainFragment.kt47
1 files changed, 37 insertions, 10 deletions
diff --git a/app/src/main/java/org/traccar/manager/MainFragment.kt b/app/src/main/java/org/traccar/manager/MainFragment.kt
index bb8ade8..ecb93e3 100644
--- a/app/src/main/java/org/traccar/manager/MainFragment.kt
+++ b/app/src/main/java/org/traccar/manager/MainFragment.kt
@@ -30,14 +30,10 @@ import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
+import android.util.Log
import android.view.View
-import android.webkit.GeolocationPermissions
-import android.webkit.JavascriptInterface
-import android.webkit.ValueCallback
-import android.webkit.WebChromeClient
-import android.webkit.WebView
-import android.webkit.WebViewClient
-import android.webkit.WebViewFragment
+import android.webkit.*
+import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
@@ -47,6 +43,34 @@ import androidx.preference.PreferenceManager
class MainFragment : WebViewFragment() {
private lateinit var broadcastManager: LocalBroadcastManager
+ private var tokenSet = false
+
+ private val webViewClient = object: WebViewClient() {
+ override fun onPageFinished(view: WebView?, url: String?) {
+ super.onPageFinished(view, url)
+ CookieManager.getInstance().setAcceptCookie(true)
+ CookieManager.getInstance().acceptCookie()
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ CookieManager.getInstance().flush()
+ }
+
+ val cookies = CookieManager.getInstance().getCookie(url)
+ if (cookies.contains("JSESSIONID") && !tokenSet) {
+ // Register token on server
+ if (PreferenceManager.getDefaultSharedPreferences(activity)
+ .contains(MainActivity.PREFERENCE_TOKEN)
+ ) {
+ val token = PreferenceManager.getDefaultSharedPreferences(activity)
+ .getString(MainActivity.PREFERENCE_TOKEN, "")
+ val code = "updateNotificationToken && updateNotificationToken('$token')"
+ Log.d("MainFragment", code)
+ Toast.makeText(activity, code, Toast.LENGTH_LONG).show()
+ webView.evaluateJavascript(code, null)
+ tokenSet = true
+ }
+ }
+ }
+ }
inner class AppInterface {
@JavascriptInterface
@@ -77,6 +101,7 @@ class MainFragment : WebViewFragment() {
webView.webViewClient = WebViewClient() // handle redirects in the app
webView.webChromeClient = webChromeClient
webView.addJavascriptInterface(AppInterface(), "appInterface")
+ webView.webViewClient = webViewClient
val webSettings = webView.settings
webSettings.javaScriptEnabled = true
webSettings.domStorageEnabled = true
@@ -85,7 +110,7 @@ class MainFragment : WebViewFragment() {
val url = PreferenceManager.getDefaultSharedPreferences(activity)
.getString(MainActivity.PREFERENCE_URL, null)
if (url != null) {
- webView.loadUrl(url)
+ webView.loadUrl(Uri.parse(url).buildUpon().appendEncodedPath("gps").build().toString())
} else {
activity.fragmentManager
.beginTransaction().replace(android.R.id.content, StartFragment())
@@ -96,8 +121,10 @@ class MainFragment : WebViewFragment() {
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val token = intent.getStringExtra(KEY_TOKEN)
- val code = "updateNotificationToken && updateNotificationToken('$token')"
- webView.evaluateJavascript(code, null)
+ PreferenceManager.getDefaultSharedPreferences(activity)
+ .edit()
+ .putString(MainActivity.PREFERENCE_TOKEN, token)
+ .apply()
}
}