aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/traccar/manager/StartFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/traccar/manager/StartFragment.kt')
-rw-r--r--app/src/main/java/org/traccar/manager/StartFragment.kt123
1 files changed, 123 insertions, 0 deletions
diff --git a/app/src/main/java/org/traccar/manager/StartFragment.kt b/app/src/main/java/org/traccar/manager/StartFragment.kt
new file mode 100644
index 0000000..ee379a2
--- /dev/null
+++ b/app/src/main/java/org/traccar/manager/StartFragment.kt
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016 - 2021 Anton Tananaev (anton@traccar.org)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@file:Suppress("DEPRECATION")
+package org.traccar.manager
+
+import android.annotation.SuppressLint
+import android.app.AlertDialog
+import android.app.Fragment
+import android.net.Uri
+import android.os.AsyncTask
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.EditText
+import androidx.preference.PreferenceManager
+import org.json.JSONException
+import org.json.JSONObject
+import org.traccar.manager.StartFragment
+import java.io.BufferedReader
+import java.io.IOException
+import java.io.InputStreamReader
+import java.net.HttpURLConnection
+import java.net.URL
+
+class StartFragment : Fragment(), View.OnClickListener {
+
+ private lateinit var serverField: EditText
+ private lateinit var startButton: Button
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ val view = inflater.inflate(R.layout.fragment_start, container, false)
+ serverField = view.findViewById(R.id.field_server)
+ startButton = view.findViewById(R.id.button_start)
+ startButton.setOnClickListener(this)
+ return view
+ }
+
+ @SuppressLint("StaticFieldLeak")
+ override fun onClick(view: View) {
+ startButton.isEnabled = false
+ object : AsyncTask<String, Unit, Boolean>() {
+ override fun doInBackground(vararg urls: String): Boolean {
+ try {
+ val uri = Uri.parse(urls[0]).buildUpon().appendEncodedPath("api/server").build()
+ var url = uri.toString()
+ var urlConnection: HttpURLConnection? = null
+ for (i in 0 until MAX_REDIRECTS) {
+ val resourceUrl = URL(url)
+ urlConnection = resourceUrl.openConnection() as HttpURLConnection
+ urlConnection.instanceFollowRedirects = false
+ when (urlConnection.responseCode) {
+ HttpURLConnection.HTTP_MOVED_PERM, HttpURLConnection.HTTP_MOVED_TEMP -> {
+ url = urlConnection.getHeaderField("Location")
+ continue
+ }
+ }
+ break
+ }
+ val reader = BufferedReader(InputStreamReader(urlConnection?.inputStream))
+ var line: String?
+ val responseBuilder = StringBuilder()
+ while (reader.readLine().also { line = it } != null) {
+ responseBuilder.append(line)
+ }
+ JSONObject(responseBuilder.toString())
+ return true
+ } catch (e: IOException) {
+ Log.w(TAG, e)
+ } catch (e: JSONException) {
+ Log.w(TAG, e)
+ }
+ return false
+ }
+
+ override fun onPostExecute(result: Boolean) {
+ if (activity != null) {
+ if (result) {
+ onSuccess()
+ } else {
+ onError()
+ }
+ }
+ }
+ }.execute(serverField.text.toString())
+ }
+
+ private fun onSuccess() {
+ PreferenceManager.getDefaultSharedPreferences(activity)
+ .edit().putString(MainActivity.PREFERENCE_URL, serverField.text.toString()).apply()
+ activity.fragmentManager
+ .beginTransaction().replace(android.R.id.content, MainFragment())
+ .commitAllowingStateLoss()
+ }
+
+ private fun onError() {
+ startButton.isEnabled = true
+ val alertDialog = AlertDialog.Builder(activity).create()
+ alertDialog.setMessage(getString(R.string.error_connection))
+ alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, getString(android.R.string.ok)) { dialog, _ -> dialog.dismiss() }
+ alertDialog.show()
+ }
+
+ companion object {
+ private val TAG = StartFragment::class.java.simpleName
+ private const val MAX_REDIRECTS = 5
+ }
+}