diff options
Diffstat (limited to 'app/src/main/java/org/traccar/manager/MainFragment.kt')
-rw-r--r-- | app/src/main/java/org/traccar/manager/MainFragment.kt | 47 |
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() } } |