From 8c95d8ec6ab0e8294ee85ee33ce2eef449e8ab7a Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 28 Jan 2021 16:36:13 +0100 Subject: [PATCH] Improve support for older android versions. Fixes #1443 --- Habitica/res/layout-v22/progress_bar.xml | 37 +++++++++++++++++++ Habitica/res/layout/progress_bar.xml | 13 ++++--- Habitica/res/values/styles.xml | 2 +- .../extensions/Drawable-Extendsions.kt | 14 ++++--- .../habitica/extensions/Window-Extensions.kt | 5 ++- .../android/habitica/helpers/SoundFile.kt | 15 +++----- .../receivers/NotificationPublisher.kt | 4 +- .../habitica/ui/MaxHeightLinearLayout.kt | 1 - .../habitica/ui/activities/IntroActivity.kt | 7 +--- .../habitica/ui/activities/LoginActivity.kt | 7 +--- .../habitica/ui/helpers/ToolbarColorHelper.kt | 5 ++- .../ui/viewHolders/tasks/HabitViewHolder.kt | 4 +- .../habitica/ui/views/HabiticaProgressBar.kt | 19 ++++++++-- .../ui/views/stats/StatsSliderView.kt | 6 +-- 14 files changed, 90 insertions(+), 49 deletions(-) create mode 100644 Habitica/res/layout-v22/progress_bar.xml diff --git a/Habitica/res/layout-v22/progress_bar.xml b/Habitica/res/layout-v22/progress_bar.xml new file mode 100644 index 000000000..5f2bdff98 --- /dev/null +++ b/Habitica/res/layout-v22/progress_bar.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + diff --git a/Habitica/res/layout/progress_bar.xml b/Habitica/res/layout/progress_bar.xml index 9e7e95a94..1caf7118a 100644 --- a/Habitica/res/layout/progress_bar.xml +++ b/Habitica/res/layout/progress_bar.xml @@ -1,5 +1,6 @@ - + android:layout_height="match_parent" + android:src="@drawable/layout_rounded_bg" /> - - + diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml index da0eec478..65ceb4ac7 100644 --- a/Habitica/res/values/styles.xml +++ b/Habitica/res/values/styles.xml @@ -546,7 +546,7 @@ @string/font_family_condensed 14sp - 0.035 + 0.035 2.0dp 16dp 16dp diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Drawable-Extendsions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Drawable-Extendsions.kt index 6bcbe351d..a4acf1bc3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Drawable-Extendsions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Drawable-Extendsions.kt @@ -4,14 +4,16 @@ import android.content.Context import android.graphics.PorterDuff import android.graphics.drawable.Drawable import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat -public fun Drawable.setTintWith(context: Context, colorResource: Int, tintMode: PorterDuff.Mode) { - this.setTintMode(tintMode) - this.setTint(ContextCompat.getColor(context, colorResource)) +public fun Drawable.setTintWith(context: Context, colorResource: Int, tintMode: PorterDuff.Mode = PorterDuff.Mode.MULTIPLY) { + DrawableCompat.setTintMode(this, tintMode) + DrawableCompat.setTint(this, ContextCompat.getColor(context, colorResource)) + } -public fun Drawable.setTintWith(color: Int, tintMode: PorterDuff.Mode) { - this.setTintMode(tintMode) - this.setTint(color) +public fun Drawable.setTintWith(color: Int, tintMode: PorterDuff.Mode = PorterDuff.Mode.MULTIPLY) { + DrawableCompat.setTint(this, color) + DrawableCompat.setTintMode(this, tintMode) } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Window-Extensions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Window-Extensions.kt index 11a278d76..5accd44e0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Window-Extensions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/Window-Extensions.kt @@ -3,11 +3,14 @@ package com.habitrpg.android.habitica.extensions import android.os.Build import android.view.View import android.view.Window +import com.habitrpg.android.habitica.R fun Window.updateStatusBarColor(color: Int, isLight: Boolean) { - statusBarColor = color if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + statusBarColor = color @Suppress("DEPRECATION") decorView.systemUiVisibility = if (isLight) View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR else View.SYSTEM_UI_FLAG_VISIBLE + } else { + statusBarColor = context.getThemeColor(R.attr.colorPrimaryDark) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.kt index 5796ec71a..ff608eb2f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFile.kt @@ -32,16 +32,11 @@ class SoundFile(val theme: String, private val fileName: String) : MediaPlayer.O try { m.setDataSource(file?.path) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - val attributes = AudioAttributes.Builder() - .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setLegacyStreamType(AudioManager.STREAM_NOTIFICATION) - .build() - m.setAudioAttributes(attributes) - } else { - @Suppress("Deprecation") - m.setAudioStreamType(AudioManager.STREAM_NOTIFICATION) - } + val attributes = AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setLegacyStreamType(AudioManager.STREAM_NOTIFICATION) + .build() + m.setAudioAttributes(attributes) m.prepare() playerPrepared = true diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt index ff03da730..ba2676439 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt @@ -129,9 +129,7 @@ class NotificationPublisher : BroadcastReceiver() { notificationIntent, 0) builder.setContentIntent(intent) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder.color = ContextCompat.getColor(thisContext, R.color.brand_300) - } + builder.color = ContextCompat.getColor(thisContext, R.color.brand_300) notification = builder.build() notification.defaults = notification.defaults or Notification.DEFAULT_LIGHTS diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.kt index 85911f935..fb777c35e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.kt @@ -31,7 +31,6 @@ class MaxHeightLinearLayout : LinearLayout { } } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) { if (!isInEditMode) { init(context, attrs) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt index af9ed30cc..e1fa54372 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt @@ -49,11 +49,8 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan compositeSubscription.add(contentRepository.retrieveContent(this).subscribe({ }, RxErrorHandler.handleEmptyError())) - val window = window - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - window.statusBarColor = ContextCompat.getColor(this, R.color.black_20_alpha) - } - getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + window.statusBarColor = ContextCompat.getColor(this, R.color.black_20_alpha) + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) } override fun injectActivity(component: UserComponent?) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt index 5ee2f9742..5e196d05c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt @@ -156,11 +156,8 @@ class LoginActivity : BaseActivity(), Consumer { binding.backgroundContainer.post { binding.backgroundContainer.scrollTo(0, binding.backgroundContainer.bottom) } binding.backgroundContainer.isScrollable = false - val window = window - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - window.statusBarColor = ContextCompat.getColor(this, R.color.black_20_alpha) - } - getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + window.statusBarColor = ContextCompat.getColor(this, R.color.black_20_alpha) + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) binding.newGameButton.setOnClickListener { newGameButtonClicked() } binding.showLoginButton.setOnClickListener { showLoginButtonClicked() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt index 91d625daf..106948dee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ToolbarColorHelper.kt @@ -46,13 +46,16 @@ object ToolbarColorHelper { fun colorizeToolbar(toolbar: Toolbar, activity: Activity?, overrideModernHeader: Boolean? = null) { if (activity == null) return val modernHeaderStyle = overrideModernHeader ?: PreferenceManager.getDefaultSharedPreferences(activity).getBoolean("modern_header_style", true) - val toolbarIconsColor = if (modernHeaderStyle && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val toolbarIconsColor = if (modernHeaderStyle) { toolbar.setBackgroundColor(activity.getThemeColor(R.attr.headerBackgroundColor)) activity.getThemeColor(R.attr.headerTextColor) } else { toolbar.setBackgroundColor(activity.getThemeColor(R.attr.colorPrimary)) activity.getThemeColor(R.attr.toolbarContentColor) } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + activity.window.statusBarColor = activity.getThemeColor(R.attr.colorPrimaryDark) + } val colorFilter = PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.MULTIPLY) for (i in 0 until toolbar.childCount) { val v = toolbar.getChildAt(i) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt index d470a436e..7ba00f7af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt @@ -7,6 +7,7 @@ import android.widget.FrameLayout import android.widget.ImageView import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.extensions.setTintWith import com.habitrpg.android.habitica.models.responses.TaskDirection import com.habitrpg.android.habitica.models.tasks.Task @@ -30,8 +31,7 @@ class HabitViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U this.task = data if (data.up == true) { val plusIcon = ContextCompat.getDrawable(context, R.drawable.habit_plus) - plusIcon?.setTint(ContextCompat.getColor(context, R.color.white)) - plusIcon?.setTintMode(PorterDuff.Mode.MULTIPLY) + plusIcon?.setTintWith(context, R.color.white) this.btnPlusIconView.setImageDrawable(plusIcon) val drawable = ContextCompat.getDrawable(context, R.drawable.habit_circle) this.btnPlusWrapper.setBackgroundResource(data.lightTaskColor) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt index aa568cd89..713706086 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt @@ -1,10 +1,16 @@ package com.habitrpg.android.habitica.ui.views import android.content.Context +import android.content.res.ColorStateList +import android.graphics.PorterDuff +import android.os.Build import android.util.AttributeSet import android.view.View import android.widget.FrameLayout +import android.widget.ImageView import android.widget.LinearLayout +import androidx.core.content.ContextCompat +import androidx.core.widget.ImageViewCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.ProgressBarBinding import com.habitrpg.android.habitica.extensions.layoutInflater @@ -18,7 +24,13 @@ class HabiticaProgressBar(context: Context, attrs: AttributeSet?) : FrameLayout( var barForegroundColor: Int = 0 set(value) { field = value - DataBindingUtils.setRoundedBackground(binding.bar, value) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + DataBindingUtils.setRoundedBackground(binding.bar, value) + } else { + val bar: ImageView = findViewById(R.id.bar) + ImageViewCompat.setImageTintList(bar, ColorStateList.valueOf(field)) + ImageViewCompat.setImageTintMode(bar, PorterDuff.Mode.SRC_IN) + } } var barPendingColor: Int = 0 @@ -105,9 +117,8 @@ class HabiticaProgressBar(context: Context, attrs: AttributeSet?) : FrameLayout( layout?.weight = weight.toFloat() view.layoutParams = layout } else if (layout?.weight?.toDouble() != weight) { - val anim = DataBindingUtils.LayoutWeightAnimation(view, weight.toFloat()) - anim.duration = 300 - view.startAnimation(anim) + layout?.weight = weight.toFloat() + view.layoutParams = layout } } } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt index 41d024e9e..cd12cd67a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt @@ -52,11 +52,7 @@ class StatsSliderView(context: Context, attrs: AttributeSet?) : LinearLayout(con binding.statTypeTitle.text = attributes.getString(R.styleable.StatsSliderView_statsTitle) val statColor = attributes.getColor(R.styleable.StatsSliderView_statsColor, 0) binding.statTypeTitle.setTextColor(attributes.getColor(R.styleable.StatsSliderView_statsTextColor, 0)) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - binding.statsSeekBar.progressTintList = ColorStateList.valueOf(statColor) - } else { - binding.statsSeekBar.progressDrawable.setTintWith(statColor, PorterDuff.Mode.SRC_IN) - } + binding.statsSeekBar.progressTintList = ColorStateList.valueOf(statColor) val thumbDrawable = ContextCompat.getDrawable(context, R.drawable.seekbar_thumb) thumbDrawable?.setTintWith(statColor, PorterDuff.Mode.MULTIPLY) binding.statsSeekBar.thumb = thumbDrawable