Update the provider activity
This commit is contained in:
@ -40,6 +40,8 @@ object Preferences : KotprefModel() {
|
||||
var weatherAppPackage by stringPref(key = "PREF_WEATHER_APP_PACKAGE", default = "")
|
||||
var weatherProviderApi by stringPref(key = "PREF_WEATHER_PROVIDER_API_KEY", default = "")
|
||||
var weatherProvider by intPref(default = Constants.WeatherProvider.OPEN_WEATHER.value)
|
||||
var weatherProviderError by stringPref(default = "")
|
||||
var weatherProviderLocationError by stringPref(default = "")
|
||||
var eventAppName by stringPref(key = "PREF_EVENT_APP_NAME", default = "")
|
||||
var eventAppPackage by stringPref(key = "PREF_EVENT_APP_PACKAGE", default = "")
|
||||
var openEventDetails by booleanPref(default = true)
|
||||
|
@ -62,6 +62,56 @@ object WeatherHelper {
|
||||
})
|
||||
}
|
||||
|
||||
fun getProviderLinkName(context: Context): String {
|
||||
return context.getString(when(Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) {
|
||||
Constants.WeatherProvider.OPEN_WEATHER -> R.string.action_open_provider_open_weather
|
||||
Constants.WeatherProvider.WEATHER_BIT -> R.string.action_open_provider_weatherbit
|
||||
Constants.WeatherProvider.FORECA -> R.string.action_open_provider_foreca
|
||||
Constants.WeatherProvider.HERE -> R.string.action_open_provider_here
|
||||
Constants.WeatherProvider.ACCUWEATHER -> R.string.action_open_provider_accuweather
|
||||
Constants.WeatherProvider.WEATHER_GOV -> R.string.action_open_provider_weather_gov
|
||||
Constants.WeatherProvider.YR -> R.string.action_open_provider_yr
|
||||
Constants.WeatherProvider.SMHI -> R.string.action_open_provider_smhi
|
||||
Constants.WeatherProvider.WEATHER_CA -> R.string.action_open_provider_weather_ca
|
||||
Constants.WeatherProvider.BOM -> R.string.action_open_provider_bom
|
||||
Constants.WeatherProvider.METEOFRANCE -> R.string.action_open_provider_meteofrance
|
||||
else -> R.string.nothing
|
||||
})
|
||||
}
|
||||
|
||||
fun getProviderLink(): String {
|
||||
return when(Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) {
|
||||
Constants.WeatherProvider.OPEN_WEATHER -> "https://home.openweathermap.org/users/sign_up"
|
||||
Constants.WeatherProvider.WEATHER_BIT -> ""
|
||||
Constants.WeatherProvider.FORECA -> ""
|
||||
Constants.WeatherProvider.HERE -> ""
|
||||
Constants.WeatherProvider.ACCUWEATHER -> ""
|
||||
Constants.WeatherProvider.WEATHER_GOV -> ""
|
||||
Constants.WeatherProvider.YR -> ""
|
||||
Constants.WeatherProvider.SMHI -> ""
|
||||
Constants.WeatherProvider.WEATHER_CA -> ""
|
||||
Constants.WeatherProvider.BOM -> ""
|
||||
Constants.WeatherProvider.METEOFRANCE -> ""
|
||||
else -> ""
|
||||
}
|
||||
}
|
||||
|
||||
fun isKeyRequired(): Boolean = when (Constants.WeatherProvider.fromInt(Preferences.weatherProvider)) {
|
||||
Constants.WeatherProvider.OPEN_WEATHER,
|
||||
Constants.WeatherProvider.WEATHER_BIT,
|
||||
Constants.WeatherProvider.FORECA,
|
||||
Constants.WeatherProvider.HERE,
|
||||
Constants.WeatherProvider.ACCUWEATHER,
|
||||
Constants.WeatherProvider.YR,
|
||||
Constants.WeatherProvider.SMHI,
|
||||
Constants.WeatherProvider.WEATHER_CA,
|
||||
Constants.WeatherProvider.BOM,
|
||||
Constants.WeatherProvider.METEOFRANCE -> true
|
||||
|
||||
Constants.WeatherProvider.WEATHER_GOV -> false
|
||||
else -> true
|
||||
}
|
||||
|
||||
fun getWeatherIconResource(icon: String, style: Int = Preferences.weatherIconPack): Int {
|
||||
return when (icon) {
|
||||
"01d" -> {
|
||||
|
@ -1,37 +1,91 @@
|
||||
package com.tommasoberlose.anotherwidget.ui.activities
|
||||
|
||||
import android.animation.ValueAnimator
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.animation.addListener
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.widget.addTextChangedListener
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.tommasoberlose.anotherwidget.R
|
||||
import com.tommasoberlose.anotherwidget.components.BottomSheetMenu
|
||||
import com.tommasoberlose.anotherwidget.global.Constants
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.helpers.WeatherHelper
|
||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
|
||||
import com.tommasoberlose.anotherwidget.utils.collapse
|
||||
import com.tommasoberlose.anotherwidget.utils.expand
|
||||
import com.tommasoberlose.anotherwidget.utils.openURI
|
||||
import kotlinx.android.synthetic.main.activity_weather_provider.*
|
||||
import kotlinx.android.synthetic.main.the_widget_sans.*
|
||||
|
||||
class WeatherProviderActivity : AppCompatActivity() {
|
||||
private lateinit var viewModel: MainViewModel
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_weather_provider)
|
||||
|
||||
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
|
||||
api_key.editText?.setText(Preferences.weatherProviderApi)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
setListener()
|
||||
subscribeUi(viewModel)
|
||||
}
|
||||
|
||||
private fun subscribeUi(viewModel: MainViewModel) {
|
||||
viewModel.weatherProvider.observe(this, Observer {
|
||||
weather_provider.editText?.setText(WeatherHelper.getProviderName(this, Constants.WeatherProvider.fromInt(Preferences.weatherProvider)!!).split("\n").first())
|
||||
|
||||
info_container.isVisible = WeatherHelper.isKeyRequired()
|
||||
api_key_container.isVisible = WeatherHelper.isKeyRequired()
|
||||
|
||||
action_open_provider.text = WeatherHelper.getProviderLinkName(this)
|
||||
})
|
||||
}
|
||||
|
||||
private fun setListener() {
|
||||
action_back.setOnClickListener {
|
||||
onBackPressed()
|
||||
}
|
||||
|
||||
action_save.setOnClickListener {
|
||||
Preferences.weatherProviderApi = api_key.editText?.text.toString()
|
||||
setResult(Activity.RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
|
||||
action_open_provider.setOnClickListener {
|
||||
openURI("https://home.openweathermap.org/users/sign_up")
|
||||
openURI(WeatherHelper.getProviderLink())
|
||||
}
|
||||
|
||||
api_key.editText?.setText(Preferences.weatherProviderApi)
|
||||
weather_provider_inner.setOnClickListener {
|
||||
if (Preferences.showWeather) {
|
||||
val dialog = BottomSheetMenu<Int>(this, header = getString(R.string.settings_weather_provider_api)).setSelectedValue(Preferences.weatherProvider)
|
||||
(0 until 11).forEach {
|
||||
val item = Constants.WeatherProvider.fromInt(it)
|
||||
dialog.addItem(WeatherHelper.getProviderName(this, item!!), it)
|
||||
}
|
||||
|
||||
dialog.addOnSelectItemListener { value ->
|
||||
Preferences.weatherProvider = value
|
||||
}.show()
|
||||
}
|
||||
}
|
||||
|
||||
api_key.editText?.addTextChangedListener {
|
||||
Preferences.weatherProviderApi = it?.toString() ?: ""
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
setResult(Activity.RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.helpers.BitmapHelper
|
||||
import com.tommasoberlose.anotherwidget.helpers.ColorHelper
|
||||
import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark
|
||||
import com.tommasoberlose.anotherwidget.helpers.WeatherHelper
|
||||
import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
|
||||
import com.tommasoberlose.anotherwidget.ui.adapters.ViewPagerAdapter
|
||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
|
||||
@ -349,8 +350,15 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
|
||||
tabs?.getTabAt(2)?.orCreateBadge?.apply {
|
||||
backgroundColor = ContextCompat.getColor(requireContext(), R.color.errorColorText)
|
||||
badgeGravity = BadgeDrawable.TOP_END
|
||||
}?.isVisible = Preferences.showWeather && (Preferences.weatherProviderApi == "" || (Preferences.customLocationAdd == "" && activity?.checkGrantedPermission(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACCESS_BACKGROUND_LOCATION else Manifest.permission.ACCESS_FINE_LOCATION) != true))
|
||||
|
||||
}?.isVisible = if (Preferences.showWeather) {
|
||||
(WeatherHelper.isKeyRequired() && Preferences.weatherProviderApi == "")
|
||||
|| (Preferences.customLocationAdd == "" && activity?.checkGrantedPermission(
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACCESS_BACKGROUND_LOCATION else Manifest.permission.ACCESS_FINE_LOCATION
|
||||
) != true)
|
||||
|| (Preferences.weatherProviderError != "")
|
||||
} else {
|
||||
false
|
||||
}
|
||||
|
||||
// Music error indicator
|
||||
tabs?.getTabAt(4)?.orCreateBadge?.apply {
|
||||
|
@ -105,14 +105,16 @@ class WeatherTabFragment : Fragment() {
|
||||
viewModel.weatherProvider.observe(viewLifecycleOwner, Observer {
|
||||
maintainScrollPosition {
|
||||
label_weather_provider.text = WeatherHelper.getProviderName(requireContext(), Constants.WeatherProvider.fromInt(it)!!)
|
||||
checkWeatherProviderConfig()
|
||||
}
|
||||
})
|
||||
|
||||
viewModel.weatherProviderApi.observe(viewLifecycleOwner, Observer {
|
||||
maintainScrollPosition {
|
||||
checkWeatherProviderConfig()
|
||||
}
|
||||
checkLocationPermission()
|
||||
viewModel.weatherProviderError.observe(viewLifecycleOwner, Observer {
|
||||
checkWeatherProviderConfig()
|
||||
})
|
||||
|
||||
viewModel.weatherProviderLocationError.observe(viewLifecycleOwner, Observer {
|
||||
checkWeatherProviderConfig()
|
||||
})
|
||||
|
||||
viewModel.customLocationAdd.observe(viewLifecycleOwner, Observer {
|
||||
@ -184,11 +186,11 @@ class WeatherTabFragment : Fragment() {
|
||||
}
|
||||
|
||||
private fun checkWeatherProviderConfig() {
|
||||
label_weather_provider_api_key?.text =
|
||||
if (Preferences.weatherProviderApi == "") getString(R.string.settings_weather_provider_api_key_subtitle_not_set) else getString(
|
||||
R.string.settings_weather_provider_api_key_subtitle_all_set
|
||||
)
|
||||
label_weather_provider_api_key?.setTextColor(ContextCompat.getColor(requireContext(), if (Preferences.weatherProviderApi == "" && Preferences.showWeather) R.color.errorColorText else R.color.colorSecondaryText))
|
||||
weather_provider_error.isVisible = Preferences.weatherProviderError != ""
|
||||
weather_provider_error?.text = Preferences.weatherProviderError
|
||||
|
||||
weather_provider_location_error.isVisible = Preferences.weatherProviderLocationError != ""
|
||||
weather_provider_location_error?.text = Preferences.weatherProviderLocationError
|
||||
}
|
||||
|
||||
private fun setupListener() {
|
||||
@ -205,21 +207,6 @@ class WeatherTabFragment : Fragment() {
|
||||
}
|
||||
|
||||
action_weather_provider.setOnClickListener {
|
||||
if (Preferences.showWeather) {
|
||||
val dialog = BottomSheetMenu<Int>(requireContext(), header = getString(R.string.settings_weather_provider_api)).setSelectedValue(Preferences.weatherProvider)
|
||||
(0 until 11).forEach {
|
||||
val item = Constants.WeatherProvider.fromInt(it)
|
||||
dialog.addItem(WeatherHelper.getProviderName(requireContext(), item!!), it)
|
||||
}
|
||||
|
||||
dialog.addOnSelectItemListener { value ->
|
||||
Preferences.weatherProvider = value
|
||||
checkWeatherProviderConfig()
|
||||
}.show()
|
||||
}
|
||||
}
|
||||
|
||||
action_weather_provider_api_key.setOnClickListener {
|
||||
if (Preferences.showWeather) {
|
||||
startActivityForResult(
|
||||
Intent(requireContext(), WeatherProviderActivity::class.java),
|
||||
|
@ -68,6 +68,8 @@ class MainViewModel : ViewModel() {
|
||||
val showWeatherWarning = Preferences.asLiveData(Preferences::showWeatherWarning)
|
||||
val weatherIconPack = Preferences.asLiveData(Preferences::weatherIconPack)
|
||||
val weatherProvider = Preferences.asLiveData(Preferences::weatherProvider)
|
||||
val weatherProviderError = Preferences.asLiveData(Preferences::weatherProviderError)
|
||||
val weatherProviderLocationError = Preferences.asLiveData(Preferences::weatherProviderLocationError)
|
||||
|
||||
// Glance
|
||||
val showGlance = Preferences.asLiveData(Preferences::showGlance)
|
||||
|
Reference in New Issue
Block a user