minor improvements for Tesla login

This commit is contained in:
johan12345
2023-05-28 00:11:43 +02:00
parent 3b9efa0302
commit 21d4060ac9
7 changed files with 70 additions and 4 deletions

View File

@@ -73,6 +73,7 @@ import net.vonforst.evmap.autocomplete.ApiUnavailableException
import net.vonforst.evmap.autocomplete.PlaceWithBounds
import net.vonforst.evmap.bold
import net.vonforst.evmap.databinding.FragmentMapBinding
import net.vonforst.evmap.fragment.preference.DataSettingsFragmentArgs
import net.vonforst.evmap.location.FusionEngine
import net.vonforst.evmap.location.LocationEngine
import net.vonforst.evmap.location.Priority
@@ -379,7 +380,10 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac
charger.chargerUrl?.let { (activity as? MapsActivity)?.openUrl(it) }
}
binding.detailView.btnLogin.setOnClickListener {
findNavController().navigate(R.id.settings_data)
findNavController().navigate(
R.id.settings_data,
DataSettingsFragmentArgs(true).toBundle()
)
}
binding.detailView.imgPredictionSource.setOnClickListener {
(activity as? MapsActivity)?.openUrl(getString(R.string.fronyx_url))

View File

@@ -2,8 +2,10 @@ package net.vonforst.evmap.fragment.oauth
import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.util.Base64
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -16,12 +18,20 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.setFragmentResult
import androidx.navigation.fragment.findNavController
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.progressindicator.LinearProgressIndicator
import com.google.android.material.transition.MaterialSharedAxis
import net.vonforst.evmap.MapsActivity
import net.vonforst.evmap.R
class OAuthLoginFragment : Fragment() {
private lateinit var webView: WebView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -42,6 +52,10 @@ class OAuthLoginFragment : Fragment() {
val uri = Uri.parse(args.url)
webView = view.findViewById(R.id.webView)
args.color?.let { webView.setBackgroundColor(Color.parseColor(it)) }
val progress = view.findViewById<LinearProgressIndicator>(R.id.progress_indicator)
CookieManager.getInstance().removeAllCookies(null)
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
@@ -62,6 +76,13 @@ class OAuthLoginFragment : Fragment() {
override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
progress.show()
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
progress.hide()
webView.background = null
}
}
webView.settings.javaScriptEnabled = true

View File

@@ -3,6 +3,7 @@ package net.vonforst.evmap.fragment.preference
import android.content.SharedPreferences
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.fragment.app.setFragmentResultListener
import androidx.fragment.app.viewModels
@@ -44,6 +45,18 @@ class DataSettingsFragment : BaseSettingsFragment() {
refreshTeslaAccountStatus()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
arguments?.let {
val args = DataSettingsFragmentArgs.fromBundle(it)
if (args.startTeslaLogin) {
teslaLogin()
arguments = null
}
}
}
override fun onResume() {
super.onResume()
refreshTeslaAccountStatus()
@@ -119,7 +132,8 @@ class DataSettingsFragment : BaseSettingsFragment() {
val args = OAuthLoginFragmentArgs(
uri.toString(),
"https://auth.tesla.com/void/callback"
"https://auth.tesla.com/void/callback",
"#000000"
).toBundle()
setFragmentResultListener(uri.toString()) { _, result ->

View File

@@ -295,7 +295,7 @@ fun currency(currency: String): String {
"GBP" -> "£"
"HRK" -> "kn"
"HUF" -> "Ft"
"ISK" -> "Kr"
"ISK" -> "kr"
else -> currency
}
}

View File

@@ -31,6 +31,7 @@ import net.vonforst.evmap.autocomplete.PlaceWithBounds
import net.vonforst.evmap.model.*
import net.vonforst.evmap.storage.AppDatabase
import net.vonforst.evmap.storage.ChargeLocationsRepository
import net.vonforst.evmap.storage.EncryptedPreferenceDataStore
import net.vonforst.evmap.storage.FilterProfile
import net.vonforst.evmap.storage.PreferenceDataSource
import net.vonforst.evmap.ui.cluster
@@ -57,6 +58,7 @@ class MapViewModel(application: Application, private val state: SavedStateHandle
AndroidViewModel(application) {
private val db = AppDatabase.getInstance(application)
private val prefs = PreferenceDataSource(application)
private val encryptedPrefs = EncryptedPreferenceDataStore(application)
private val repo = ChargeLocationsRepository(
createApi(prefs.dataSource, application),
viewModelScope,
@@ -426,11 +428,17 @@ class MapViewModel(application: Application, private val state: SavedStateHandle
}
}
private var hasTeslaLogin: MutableLiveData<Boolean> = state.getLiveData("hasTeslaLogin")
fun reloadPrefs() {
filterStatus.value = prefs.filterStatus
if (prefs.dataSource != apiId.value) {
repo.api.value = createApi(prefs.dataSource, getApplication())
}
if (hasTeslaLogin.value != (encryptedPrefs.teslaAccessToken != null)) {
hasTeslaLogin.value = encryptedPrefs.teslaAccessToken != null
reloadAvailability()
}
}
fun toggleFilters() {

View File

@@ -17,6 +17,16 @@
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:indeterminate="true"
app:hideAnimationBehavior="inward"
app:indicatorColor="@color/colorSecondary"
app:showAnimationBehavior="outward" />
</com.google.android.material.appbar.AppBarLayout>
<WebView

View File

@@ -78,7 +78,12 @@
android:id="@+id/settings_data"
android:name="net.vonforst.evmap.fragment.preference.DataSettingsFragment"
android:label="@string/settings_data_sources"
tools:layout="@layout/fragment_preference" />
tools:layout="@layout/fragment_preference">
<argument
android:name="startTeslaLogin"
app:argType="boolean"
android:defaultValue="false" />
</fragment>
<fragment
android:id="@+id/settings_chargeprice"
android:name="net.vonforst.evmap.fragment.preference.ChargepriceSettingsFragment"
@@ -179,5 +184,9 @@
<argument
android:name="resultUrlPrefix"
app:argType="string" />
<argument
android:name="color"
app:argType="string"
app:nullable="true" />
</fragment>
</navigation>