diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index 4791e596..ab9814fe 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -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)) diff --git a/app/src/main/java/net/vonforst/evmap/fragment/oauth/OAuthLoginFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/oauth/OAuthLoginFragment.kt index e4d9aefe..3d844c3f 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/oauth/OAuthLoginFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/oauth/OAuthLoginFragment.kt @@ -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(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 diff --git a/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt index 8b3d3ac9..b8e1b7b1 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/preference/DataSettingsFragment.kt @@ -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 -> diff --git a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt index c630ace1..03c44895 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt @@ -295,7 +295,7 @@ fun currency(currency: String): String { "GBP" -> "£" "HRK" -> "kn" "HUF" -> "Ft" - "ISK" -> "Kr" + "ISK" -> "kr" else -> currency } } diff --git a/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt b/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt index 3f1a65ec..63471453 100644 --- a/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt +++ b/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt @@ -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 = 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() { diff --git a/app/src/main/res/layout/fragment_oauth_login.xml b/app/src/main/res/layout/fragment_oauth_login.xml index 6465a73f..e5c376c9 100644 --- a/app/src/main/res/layout/fragment_oauth_login.xml +++ b/app/src/main/res/layout/fragment_oauth_login.xml @@ -17,6 +17,16 @@ android:layout_width="match_parent" android:layout_height="?android:actionBarSize" /> + + + tools:layout="@layout/fragment_preference"> + + + \ No newline at end of file