Skip to content

Commit 0e9792b

Browse files
committed
Merge remote-tracking branch 'origin/develop' into public
# Conflicts: # wearapp/src/main/res/drawable/ic_check_24dp.xml
2 parents 56ddf09 + 107452d commit 0e9792b

File tree

121 files changed

+3424
-724
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+3424
-724
lines changed

Diff for: app/build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ android {
1515
minSdkVersion rootProject.minSdkVersion
1616
targetSdkVersion rootProject.targetSdkVersion
1717
// NOTE: Version Code Format (TargetSDK, Version Name, Build Number, Variant Code (Android: 0, WearOS: 1)
18-
versionCode 345100040
19-
versionName "5.10.0"
18+
versionCode 345100070
19+
versionName "5.10.1"
2020

2121
vectorDrawables {
2222
useSupportLibrary true
@@ -173,7 +173,7 @@ dependencies {
173173
fullgmsImplementation "com.google.android.gms:play-services-wearable:$gms_wearable_version"
174174
fullgmsImplementation 'com.google.android.play:app-update-ktx:2.1.0'
175175
fullgmsImplementation 'com.google.android.play:feature-delivery-ktx:2.1.0'
176-
fullgmsImplementation 'com.google.android.play:review-ktx:2.0.1'
176+
fullgmsImplementation 'com.google.android.play:review-ktx:2.0.2'
177177
fullgmsImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$kotlinx_version"
178178

179179
nongmsImplementation 'org.osmdroid:osmdroid-android:6.1.20'

Diff for: app/src/fullgms/java/com/thewizrd/simpleweather/updates/InAppUpdateManager.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ class InAppUpdateManager private constructor(context: Context) {
8383

8484
val json = mConfig.getString("android_updates")
8585

86-
val updateTypeToken = listType<UpdateInfo>()
87-
return@withContext JSONParser.deserializer(json, updateTypeToken)
86+
return@withContext JSONParser.deserializer(json, listType<UpdateInfo>())
8887
}
8988
}
9089

Diff for: app/src/main/java/com/thewizrd/simpleweather/controls/graphs/BaseGraphHorizontalScrollView.java

+4
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@ public void setBottomTextSize(@Px float textSize) {
172172
getGraph().setBottomTextSize(textSize);
173173
}
174174

175+
public void setBottomTextShadow(boolean enable) {
176+
getGraph().setBottomTextShadow(enable);
177+
}
178+
175179
public void setIconSize(@Px float iconSize) {
176180
getGraph().setIconSize(iconSize);
177181
}

Diff for: app/src/main/java/com/thewizrd/simpleweather/controls/graphs/BaseGraphView.java

+8
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ public void setBottomTextSize(@Px float textSize) {
9797
bottomTextPaint.setTextSize(textSize);
9898
}
9999

100+
public void setBottomTextShadow(boolean enable) {
101+
if (enable) {
102+
bottomTextPaint.setShadowLayer(1, 1, 1, Colors.BLACK);
103+
} else {
104+
bottomTextPaint.clearShadowLayer();
105+
}
106+
}
107+
100108
public void setIconSize(@Px float iconSize) {
101109
this.iconHeight = iconSize;
102110
}

Diff for: app/src/main/java/com/thewizrd/simpleweather/viewmodels/WeatherNowViewModel.kt

+5
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,11 @@ class WeatherNowViewModel(app: Application) : AndroidViewModel(app) {
237237
WeatherRequest.Builder()
238238
.forceRefresh(forceRefresh)
239239
.loadAlerts()
240+
.apply {
241+
if (forceRefresh) {
242+
loadForecasts()
243+
}
244+
}
240245
.build()
241246
)
242247
} else {

Diff for: app/src/main/java/com/thewizrd/simpleweather/widgets/WidgetUpdaterHelper.kt

+38-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.content.Intent
77
import android.os.Build
88
import android.os.Bundle
99
import android.os.SystemClock
10+
import android.text.style.TextAppearanceSpan
1011
import android.util.Log
1112
import android.util.TypedValue
1213
import android.view.View
@@ -27,6 +28,7 @@ import com.thewizrd.shared_resources.utils.ContextUtils.dpToPx
2728
import com.thewizrd.shared_resources.utils.ContextUtils.getThemeContextOverride
2829
import com.thewizrd.shared_resources.utils.JSONParser
2930
import com.thewizrd.shared_resources.utils.Logger
31+
import com.thewizrd.shared_resources.utils.TextUtils.applySpan
3032
import com.thewizrd.shared_resources.weatherdata.model.Forecast
3133
import com.thewizrd.shared_resources.weatherdata.model.HourlyForecast
3234
import com.thewizrd.shared_resources.weatherdata.model.Weather
@@ -39,6 +41,7 @@ import com.thewizrd.simpleweather.widgets.preferences.KEY_FORECASTOPTION
3941
import com.thewizrd.simpleweather.widgets.preferences.KEY_ICONSIZE
4042
import com.thewizrd.simpleweather.widgets.preferences.KEY_TEXTSIZE
4143
import com.thewizrd.simpleweather.widgets.preferences.KEY_TXTCOLORCODE
44+
import com.thewizrd.simpleweather.widgets.preferences.KEY_TXTSHADOW
4245
import com.thewizrd.simpleweather.widgets.remoteviews.CustomBackgroundWidgetRemoteViewCreator
4346
import com.thewizrd.simpleweather.widgets.remoteviews.WidgetRemoteViewCreator
4447
import com.thewizrd.weather_api.weatherModule
@@ -403,17 +406,50 @@ object WidgetUpdaterHelper {
403406
val dividerId = getResIdentifier(R.id::class.java, "${prefix}${forecastIdx + 1}_divider")
404407
?: return
405408

409+
val useTextShadow =
410+
newOptions.get(KEY_TXTSHADOW) as? Boolean ?: WidgetUtils.useTextShadow(appWidgetId)
411+
val textAppearanceSpan = if (useTextShadow) {
412+
TextAppearanceSpan(context, R.style.ShadowText)
413+
} else {
414+
null
415+
}
416+
406417
forecastPanel.setTextViewText(
407418
dateId,
408419
if (info.widgetType == WidgetType.Widget4x4MaterialYou && forecast is ForecastItemViewModel) {
409420
forecast.longDate
410421
} else {
411422
forecast.shortDate
423+
}?.run {
424+
if (WidgetUtils.isBackgroundOptionalWidget(info.widgetType)) {
425+
this.applySpan(textAppearanceSpan)
426+
} else {
427+
this
428+
}
412429
}
413430
)
414-
forecastPanel.setTextViewText(hiId, forecast.hiTemp)
431+
forecastPanel.setTextViewText(hiId, forecast.hiTemp?.run {
432+
if (WidgetUtils.isBackgroundOptionalWidget(info.widgetType)) {
433+
this.applySpan(textAppearanceSpan)
434+
} else {
435+
this
436+
}
437+
})
415438
if (forecast is ForecastItemViewModel) {
416-
forecastPanel.setTextViewText(loId, forecast.loTemp)
439+
forecastPanel.setTextViewText(dividerId, "|".run {
440+
if (WidgetUtils.isBackgroundOptionalWidget(info.widgetType)) {
441+
this.applySpan(textAppearanceSpan)
442+
} else {
443+
this
444+
}
445+
})
446+
forecastPanel.setTextViewText(loId, forecast.loTemp?.run {
447+
if (WidgetUtils.isBackgroundOptionalWidget(info.widgetType)) {
448+
this.applySpan(textAppearanceSpan)
449+
} else {
450+
this
451+
}
452+
})
417453
}
418454

419455
if (info.widgetType != WidgetType.Widget4x2MaterialYou && info.widgetType != WidgetType.Widget4x4MaterialYou && (background != WidgetUtils.WidgetBackground.CURRENT_CONDITIONS || style != WidgetUtils.WidgetBackgroundStyle.PANDA)) {

Diff for: app/src/main/java/com/thewizrd/simpleweather/widgets/WidgetUtils.kt

+31-9
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ object WidgetUtils {
4949
}
5050

5151
// Widget Prefs
52-
private const val CurrentPrefsVersion = 6
52+
private const val CurrentPrefsVersion = 7
5353

5454
// Keys
5555
// TODO: Move preference keys to another class
@@ -70,6 +70,7 @@ object WidgetUtils {
7070
private const val KEY_USETIMEZONE = "key_usetimezone"
7171
private const val KEY_BGCOLORCODE = "key_bgcolorcode"
7272
private const val KEY_TXTCOLORCODE = "key_txtcolorcode"
73+
private const val KEY_TXTSHADOW = "key_txtshadow"
7374
private const val KEY_MAXFORECAST_LENGTH = "key_forecastlengthset"
7475
private const val KEY_MAXHRFORECAST_LENGTH = "key_hrforecastlengthset"
7576
private const val KEY_CUSTOMTXTMULTIPLIER = "key_customtxtmultiplier"
@@ -94,7 +95,7 @@ object WidgetUtils {
9495
private val map = SparseArray<WidgetBackground>()
9596

9697
init {
97-
for (background in values()) {
98+
for (background in entries) {
9899
map.put(background.value, background)
99100
}
100101
}
@@ -114,7 +115,7 @@ object WidgetUtils {
114115
private val map = SparseArray<WidgetBackgroundStyle>()
115116

116117
init {
117-
for (style in values()) {
118+
for (style in entries) {
118119
map.put(style.value, style)
119120
}
120121
}
@@ -135,7 +136,7 @@ object WidgetUtils {
135136
private val map = SparseArray<ForecastOption>()
136137

137138
init {
138-
for (opt in values()) {
139+
for (opt in entries) {
139140
map.put(opt.value, opt)
140141
}
141142
}
@@ -205,6 +206,17 @@ object WidgetUtils {
205206
}
206207
}
207208
}
209+
6 -> {
210+
// Keep text shadow enabled for current users
211+
val widgetIds = getAllWidgetIds()
212+
for (appWidgetId in widgetIds) {
213+
val widgetType = getWidgetTypeFromID(appWidgetId)
214+
215+
if (isBackgroundCustomOnlyWidget(widgetType)) {
216+
setUseTextShadow(appWidgetId, true)
217+
}
218+
}
219+
}
208220
}
209221
}
210222

@@ -225,7 +237,7 @@ object WidgetUtils {
225237
private fun getAllWidgetIds(): IntArray {
226238
var widgetIds = IntArray(0)
227239

228-
for (widgetType in WidgetType.values()) {
240+
for (widgetType in WidgetType.entries) {
229241
val ids = getWidgetIds(widgetType)
230242
if (ids.isNotEmpty()) {
231243
widgetIds = widgetIds.plus(ids)
@@ -503,16 +515,15 @@ object WidgetUtils {
503515
val parentPath = context.filesDir.parent
504516
val sharedPrefsPath = String.format(Locale.ROOT, "%s/shared_prefs", parentPath)
505517
val sharedPrefsFolder = File(sharedPrefsPath)
506-
val appWidgetFiles = sharedPrefsFolder.listFiles { dir, name ->
507-
val lowerCaseName = name.toLowerCase(Locale.ROOT)
518+
val appWidgetFiles = sharedPrefsFolder.listFiles { _, name ->
519+
val lowerCaseName = name.lowercase(Locale.ROOT)
508520
lowerCaseName.startsWith("appwidget_") && lowerCaseName.endsWith(".xml")
509521
} ?: emptyArray()
510522

511523
for (file in appWidgetFiles) {
512524
val fileName = file.name
513-
var idString = ""
514525
if (!fileName.isNullOrBlank()) {
515-
idString = fileName.replace("appwidget_", "")
526+
val idString = fileName.replace("appwidget_", "")
516527
.replace(".xml", "")
517528

518529
try {
@@ -1142,4 +1153,15 @@ object WidgetUtils {
11421153
putString(KEY_BACKGROUNDURI, uri)
11431154
}
11441155
}
1156+
1157+
fun useTextShadow(widgetId: Int): Boolean {
1158+
val prefs = getPreferences(widgetId)
1159+
return prefs.getBoolean(KEY_TXTSHADOW, false)
1160+
}
1161+
1162+
fun setUseTextShadow(widgetId: Int, value: Boolean) {
1163+
getPreferences(widgetId).edit(true) {
1164+
putBoolean(KEY_TXTSHADOW, value)
1165+
}
1166+
}
11451167
}

Diff for: app/src/main/java/com/thewizrd/simpleweather/widgets/preferences/BaseWeatherWidgetPreferenceFragment.kt

+16-4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ abstract class BaseWeatherWidgetPreferenceFragment : AbstractWeatherWidgetPrefer
2828
protected lateinit var bgChoicePref: ListPreference
2929
protected lateinit var bgColorPref: ColorPreference
3030
protected lateinit var txtColorPref: ColorPreference
31+
protected lateinit var txtShadowPref: SwitchPreference
3132
protected lateinit var bgStylePref: ListPreference
3233

3334
protected lateinit var textSizePref: SliderPreference
@@ -154,6 +155,7 @@ abstract class BaseWeatherWidgetPreferenceFragment : AbstractWeatherWidgetPrefer
154155
bgStylePref = findPreference(KEY_BGSTYLE)!!
155156
bgColorPref = findPreference(KEY_BGCOLORCODE)!!
156157
txtColorPref = findPreference(KEY_TXTCOLORCODE)!!
158+
txtShadowPref = findPreference(KEY_TXTSHADOW)!!
157159

158160
bgChoicePref.onPreferenceChangeListener =
159161
Preference.OnPreferenceChangeListener { _, newValue ->
@@ -204,7 +206,14 @@ abstract class BaseWeatherWidgetPreferenceFragment : AbstractWeatherWidgetPrefer
204206
true
205207
}
206208

207-
val styles = WidgetUtils.WidgetBackgroundStyle.values()
209+
txtShadowPref.onPreferenceChangeListener =
210+
Preference.OnPreferenceChangeListener { _, newValue ->
211+
mWidgetOptions.putBoolean(KEY_TXTSHADOW, newValue as Boolean)
212+
updateWidgetView()
213+
true
214+
}
215+
216+
val styles = WidgetUtils.WidgetBackgroundStyle.entries
208217
val styleEntries = arrayOfNulls<CharSequence>(styles.size)
209218
val styleEntryValues = arrayOfNulls<CharSequence>(styles.size)
210219

@@ -232,15 +241,14 @@ abstract class BaseWeatherWidgetPreferenceFragment : AbstractWeatherWidgetPrefer
232241
val mWidgetBGStyle = WidgetUtils.getBackgroundStyle(mAppWidgetId)
233242
@ColorInt val mWidgetBackgroundColor = WidgetUtils.getBackgroundColor(mAppWidgetId)
234243
@ColorInt val mWidgetTextColor = WidgetUtils.getTextColor(mAppWidgetId)
244+
val mWidgetTextShadow = WidgetUtils.useTextShadow(mAppWidgetId)
235245

236246
if (WidgetUtils.isBackgroundOptionalWidget(mWidgetType)) {
237247
bgChoicePref.setValueIndex(mWidgetBackground.value)
238248
bgChoicePref.callChangeListener(bgChoicePref.value)
239249

240250
bgStylePref.setValueIndex(
241-
listOf(*WidgetUtils.WidgetBackgroundStyle.values()).indexOf(
242-
mWidgetBGStyle
243-
)
251+
WidgetUtils.WidgetBackgroundStyle.entries.indexOf(mWidgetBGStyle)
244252
)
245253
bgStylePref.callChangeListener(bgStylePref.value)
246254

@@ -249,6 +257,9 @@ abstract class BaseWeatherWidgetPreferenceFragment : AbstractWeatherWidgetPrefer
249257
txtColorPref.color = mWidgetTextColor
250258
txtColorPref.callChangeListener(txtColorPref.color)
251259

260+
txtShadowPref.isChecked = mWidgetTextShadow
261+
txtShadowPref.callChangeListener(mWidgetTextShadow)
262+
252263
findPreference<Preference>(KEY_BACKGROUND)!!.isVisible = true
253264
if (WidgetUtils.isBackgroundCustomOnlyWidget(mWidgetType)) {
254265
bgChoicePref.isVisible = false
@@ -328,6 +339,7 @@ abstract class BaseWeatherWidgetPreferenceFragment : AbstractWeatherWidgetPrefer
328339
WidgetUtils.setWidgetBackground(mAppWidgetId, bgChoicePref.value.toInt())
329340
WidgetUtils.setBackgroundColor(mAppWidgetId, bgColorPref.color)
330341
WidgetUtils.setTextColor(mAppWidgetId, txtColorPref.color)
342+
WidgetUtils.setUseTextShadow(mAppWidgetId, txtShadowPref.isChecked)
331343
WidgetUtils.setBackgroundStyle(mAppWidgetId, bgStylePref.value.toInt())
332344
WidgetUtils.setSettingsButtonHidden(mAppWidgetId, hideSettingsBtnPref.isChecked)
333345
WidgetUtils.setRefreshButtonHidden(mAppWidgetId, hideRefreshBtnPref.isChecked)

Diff for: app/src/main/java/com/thewizrd/simpleweather/widgets/preferences/WeatherWidgetPreferenceFragment.kt

+10-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.content.Intent
66
import android.location.LocationManager
77
import android.os.Build
88
import android.os.Bundle
9+
import android.text.style.TextAppearanceSpan
910
import android.view.Gravity
1011
import android.view.View
1112
import android.widget.FrameLayout
@@ -37,6 +38,7 @@ import com.thewizrd.shared_resources.locationdata.toLocationData
3738
import com.thewizrd.shared_resources.utils.CommonActions
3839
import com.thewizrd.shared_resources.utils.ContextUtils.dpToPx
3940
import com.thewizrd.shared_resources.utils.JSONParser
41+
import com.thewizrd.shared_resources.utils.TextUtils.applySpan
4042
import com.thewizrd.shared_resources.weatherdata.model.LocationType
4143
import com.thewizrd.simpleweather.R
4244
import com.thewizrd.simpleweather.preferences.ArrayListPreference
@@ -383,9 +385,15 @@ class WeatherWidgetPreferenceFragment : BaseWeatherWidgetPreferenceFragment() {
383385
private fun updateLocationView() {
384386
val locationView = binding.widgetContainer.findViewById<TextView>(R.id.location_name)
385387
if (locationView != null) {
386-
locationView.text = lastSelectedValue?.let {
388+
locationView.text = (lastSelectedValue?.let {
387389
locationPref.findEntryFromValue(it)?.toString()
388-
} ?: locationView.context.getString(R.string.pref_location)
390+
} ?: locationView.context.getString(R.string.pref_location)).run {
391+
if (WidgetUtils.isBackgroundOptionalWidget(mWidgetType) && txtShadowPref.isChecked) {
392+
applySpan(TextAppearanceSpan(locationView.context, R.style.ShadowText))
393+
} else {
394+
this
395+
}
396+
}
389397

390398
locationView.isVisible = !hideLocNamePref.isChecked
391399
}

Diff for: app/src/main/java/com/thewizrd/simpleweather/widgets/preferences/WidgetPreferenceKeys.kt

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ internal const val KEY_BGCOLOR = "key_bgcolor"
1616
internal const val KEY_BGCOLORCODE = "key_bgcolorcode"
1717
internal const val KEY_TXTCOLORCODE = "key_txtcolorcode"
1818
internal const val KEY_BGSTYLE = "key_bgstyle"
19+
internal const val KEY_TXTSHADOW = "key_txtshadow"
1920

2021
internal const val KEY_FORECAST = "key_forecast"
2122
internal const val KEY_FORECASTOPTION = "key_fcastoption"

0 commit comments

Comments
 (0)