Skip to content

Commit

Permalink
REM-855 - Fix Dark/Light mode mixed UI
Browse files Browse the repository at this point in the history
  • Loading branch information
naz013 committed Apr 6, 2024
1 parent 3d26792 commit 0b8e9bb
Show file tree
Hide file tree
Showing 32 changed files with 201 additions and 154 deletions.
33 changes: 33 additions & 0 deletions app/src/main/java/com/elementary/tasks/ActivityObserver.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.elementary.tasks

import android.app.Activity
import android.app.Application.ActivityLifecycleCallbacks
import android.os.Bundle
import com.elementary.tasks.core.os.ContextSwitcher

class ActivityObserver(
private val contextSwitcher: ContextSwitcher
) : ActivityLifecycleCallbacks {

override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
contextSwitcher.switchContext(activity)
}

override fun onActivityStarted(activity: Activity) {
}

override fun onActivityResumed(activity: Activity) {
}

override fun onActivityPaused(activity: Activity) {
}

override fun onActivityStopped(activity: Activity) {
}

override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
}

override fun onActivityDestroyed(activity: Activity) {
}
}
2 changes: 2 additions & 0 deletions app/src/main/java/com/elementary/tasks/ReminderApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -93,5 +93,7 @@ class ReminderApp : MultiDexApplication(), KoinComponent {
get<Notifier>().createChannels()
AdsProvider.init(this)
get<RemotePrefs>().preLoad()

registerActivityLifecycleCallbacks(ActivityObserver(get()))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,10 @@ class DayLiveData(
}

private fun birthdayColor(): Int {
return ThemeProvider.colorBirthdayCalendar(context.context, prefs)
return ThemeProvider.colorBirthdayCalendar(context.themedContext, prefs)
}

private fun reminderColor(): Int {
return ThemeProvider.colorReminderCalendar(context.context, prefs)
return ThemeProvider.colorReminderCalendar(context.themedContext, prefs)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,10 @@ class MonthLiveData(
}

private fun birthdayColor(): Int {
return ThemeProvider.colorBirthdayCalendar(context.context, prefs)
return ThemeProvider.colorBirthdayCalendar(context.themedContext, prefs)
}

private fun reminderColor(): Int {
return ThemeProvider.colorReminderCalendar(context.context, prefs)
return ThemeProvider.colorReminderCalendar(context.themedContext, prefs)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ package com.elementary.tasks.core.appwidgets.singlenote
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import com.elementary.tasks.R
import com.elementary.tasks.core.data.adapter.note.UiNoteImagesAdapter
import com.elementary.tasks.core.data.models.NoteWithImages
import com.elementary.tasks.core.data.ui.note.UiNoteWidget
import com.elementary.tasks.core.os.ColorProvider
import com.elementary.tasks.core.os.ContextProvider
import com.elementary.tasks.core.os.dp2px
import com.elementary.tasks.core.os.UnitsConverter
import com.elementary.tasks.core.utils.ThemeProvider
import com.elementary.tasks.core.utils.io.AssetsUtil
import com.elementary.tasks.core.utils.isAlmostTransparent
Expand All @@ -23,7 +23,9 @@ import timber.log.Timber
class RecyclableUiNoteWidgetAdapter(
private val themeProvider: ThemeProvider,
private val contextProvider: ContextProvider,
private val uiNoteImagesAdapter: UiNoteImagesAdapter
private val uiNoteImagesAdapter: UiNoteImagesAdapter,
private val unitsConverter: UnitsConverter,
private val colorProvider: ColorProvider
) {

private var cachedImage: Bitmap? = null
Expand All @@ -44,7 +46,7 @@ class RecyclableUiNoteWidgetAdapter(
NoteDrawableParams.VerticalAlignment.CENTER,
marginDp: Int
): UiNoteWidget {
val maxSize = contextProvider.context.dp2px(sizeDp)
val maxSize = unitsConverter.dp2px(sizeDp)

val backgroundColor = themeProvider.getNoteLightColor(
noteWithImages.getColor(),
Expand All @@ -55,14 +57,17 @@ class RecyclableUiNoteWidgetAdapter(
val isDarkBg = (noteWithImages.getOpacity().isAlmostTransparent() && themeProvider.isDark) ||
backgroundColor.isColorDark()
val textColor = if (isDarkBg) {
ContextCompat.getColor(contextProvider.context, R.color.pureWhite)
colorProvider.getColor(R.color.pureWhite)
} else {
ContextCompat.getColor(contextProvider.context, R.color.pureBlack)
colorProvider.getColor(R.color.pureBlack)
}

val typeface = AssetsUtil.getTypeface(contextProvider.context, noteWithImages.getStyle())!!
val typeface = AssetsUtil.getTypeface(
contextProvider.themedContext,
noteWithImages.getStyle()
)!!

val radius = contextProvider.context.dp2px(28)
val radius = unitsConverter.dp2px(28)

val isDarkIcon = if (noteWithImages.getOpacity().isAlmostTransparent()) {
themeProvider.isDark
Expand All @@ -80,7 +85,7 @@ class RecyclableUiNoteWidgetAdapter(
}?.firstOrNull()?.let {
BitmapFactory.decodeFile(it.filePath)
}?.let { bitmap ->
val scale = maxSize.toFloat() / minOf(bitmap.width, bitmap.height)
val scale = maxSize / minOf(bitmap.width, bitmap.height)

val matrix = Matrix()
matrix.postScale(scale, scale)
Expand All @@ -97,23 +102,26 @@ class RecyclableUiNoteWidgetAdapter(
Timber.d("convert: image time -> ${System.currentTimeMillis() - startMillis}")

val params = NoteDrawableParams.roundedRectParams(
context = contextProvider.context,
height = maxSize,
width = maxSize,
context = contextProvider.themedContext,
height = maxSize.toInt(),
width = maxSize.toInt(),
fontSize = fontSize,
textColor = textColor,
font = typeface,
textAutoScale = false,
horizontalAlignment = horizontalAlignment,
verticalAlignment = verticalAlignment,
margin = contextProvider.context.dp2px(marginDp).toFloat(),
margin = unitsConverter.dp2px(marginDp),
backgroundImage = image,
text = noteWithImages.getSummary(),
color = backgroundColor,
radius = radius.toFloat()
radius = radius
)

val bitmap = NoteTextDrawable(params).toBitmap(width = maxSize, height = maxSize)
val bitmap = NoteTextDrawable(params).toBitmap(
width = maxSize.toInt(),
height = maxSize.toInt()
)

Timber.d("convert: full drawable -> ${System.currentTimeMillis() - startMillis}")

Expand All @@ -122,7 +130,7 @@ class RecyclableUiNoteWidgetAdapter(
uniqueId = noteWithImages.note?.uniqueId ?: 1111,
bitmap = bitmap,
settingsIcon = ViewUtils.tintIcon(
contextProvider.context,
contextProvider.themedContext,
R.drawable.ic_fluent_settings,
isDarkIcon
)?.toBitmap()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,38 +24,38 @@ import com.elementary.tasks.core.data.adapter.reminder.UiReminderWidgetListAdapt
import org.koin.dsl.module

val adapterModule = module {
single { UiReminderPlaceAdapter() }
single { UiReminderCommonAdapter(get(), get(), get(), get(), get(), get()) }
single { UiReminderListAdapter(get(), get(), get(), get(), get()) }
single { UiReminderListsAdapter(get(), get(), get()) }
single { UiReminderWidgetListAdapter(get(), get()) }
factory { UiReminderPlaceAdapter() }
factory { UiReminderCommonAdapter(get(), get(), get(), get(), get()) }
factory { UiReminderListAdapter(get(), get(), get(), get(), get()) }
factory { UiReminderListsAdapter(get(), get(), get()) }
factory { UiReminderWidgetListAdapter(get(), get()) }

single { UiBirthdayListAdapter(get(), get()) }
single { UiBirthdayShowAdapter(get(), get()) }
single { UiBirthdayEditAdapter() }
single { UiBirthdayPreviewAdapter(get(), get()) }
single { UiBirthdayWidgetListAdapter(get()) }
factory { UiBirthdayListAdapter(get(), get()) }
factory { UiBirthdayShowAdapter(get(), get()) }
factory { UiBirthdayEditAdapter() }
factory { UiBirthdayPreviewAdapter(get(), get()) }
factory { UiBirthdayWidgetListAdapter(get()) }

single { UiGoogleTaskListAdapter(get()) }
single { UiGoogleTaskPreviewAdapter(get(), get()) }
factory { UiGoogleTaskListAdapter(get()) }
factory { UiGoogleTaskPreviewAdapter(get(), get()) }

single { UiGroupListAdapter(get()) }
single { UiGroupEditAdapter() }
factory { UiGroupListAdapter(get()) }
factory { UiGroupEditAdapter() }

single { UiUsedTimeListAdapter() }
factory { UiUsedTimeListAdapter() }

single { UiNoteImagesAdapter() }
single { UiNoteEditAdapter(get()) }
single { UiNoteListAdapter(get(), get(), get(), get()) }
single { UiNotePreviewAdapter(get(), get(), get()) }
single { UiNoteNotificationAdapter(get(), get()) }
factory { UiNoteImagesAdapter() }
factory { UiNoteEditAdapter(get()) }
factory { UiNoteListAdapter(get(), get(), get(), get()) }
factory { UiNotePreviewAdapter(get(), get(), get()) }
factory { UiNoteNotificationAdapter(get(), get()) }

single { UiNoteListSelectableAdapter(get(), get(), get()) }
single { UiNoteWidgetAdapter(get(), get(), get()) }
single { RecyclableUiNoteWidgetAdapter(get(), get(), get()) }
factory { UiNoteListSelectableAdapter(get(), get(), get()) }
factory { UiNoteWidgetAdapter(get(), get(), get(), get(), get()) }
factory { RecyclableUiNoteWidgetAdapter(get(), get(), get(), get(), get()) }

single { UiPlaceListAdapter(get(), get(), get()) }
single { UiPlaceEditAdapter() }
factory { UiPlaceListAdapter(get(), get(), get()) }
factory { UiPlaceEditAdapter() }

single { UiPresetListAdapter(get()) }
factory { UiPresetListAdapter(get()) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@ import com.elementary.tasks.core.utils.datetime.DateTimeManager
import com.elementary.tasks.core.utils.datetime.IntervalUtil
import com.elementary.tasks.core.utils.datetime.recurrence.RecurrenceManager
import com.elementary.tasks.core.utils.datetime.recurrence.TagType
import com.elementary.tasks.core.utils.params.Prefs

class UiReminderCommonAdapter(
private val textProvider: TextProvider,
private val prefs: Prefs,
private val dateTimeManager: DateTimeManager,
private val contactsReader: ContactsReader,
private val packageManagerWrapper: PackageManagerWrapper,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,21 @@ class UiGoogleTaskListAdapter(
@ColorInt
private fun getColor(googleTaskList: GoogleTaskList?): Int {
return if (googleTaskList != null) {
ThemeProvider.themedColor(contextProvider.context, googleTaskList.color)
ThemeProvider.themedColor(contextProvider.themedContext, googleTaskList.color)
} else {
ThemeProvider.themedColor(contextProvider.context, 0)
ThemeProvider.themedColor(contextProvider.themedContext, 0)
}
}

private fun createIcon(isChecked: Boolean, color: Int): Bitmap? {
return if (isChecked) {
ViewUtils.createIcon(contextProvider.context, R.drawable.ic_builder_google_task_list, color)
ViewUtils.createIcon(
context = contextProvider.themedContext,
res = R.drawable.ic_builder_google_task_list,
color = color
)
} else {
ViewUtils.createIcon(contextProvider.context, R.drawable.ic_fluent_radio_button, color)
ViewUtils.createIcon(contextProvider.themedContext, R.drawable.ic_fluent_radio_button, color)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class UiGoogleTaskPreviewAdapter(
@ColorInt
private fun getColor(googleTaskList: GoogleTaskList?): Int {
return if (googleTaskList != null) {
ThemeProvider.themedColor(contextProvider.context, googleTaskList.color)
ThemeProvider.themedColor(contextProvider.themedContext, googleTaskList.color)
} else {
ThemeProvider.themedColor(contextProvider.context, 0)
ThemeProvider.themedColor(contextProvider.themedContext, 0)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ class UiGroupListAdapter(
) {

fun convert(reminderGroup: ReminderGroup): UiGroupList {
val groupColor = ThemeProvider.themedColor(contextProvider.context, reminderGroup.groupColor)
val groupColor = ThemeProvider.themedColor(
contextProvider.themedContext,
reminderGroup.groupColor
)
return UiGroupList(
id = reminderGroup.groupUuId,
color = groupColor,
Expand All @@ -25,7 +28,7 @@ class UiGroupListAdapter(
}

fun convert(id: String, colorPosition: Int, title: String?): UiGroupList {
val groupColor = ThemeProvider.themedColor(contextProvider.context, colorPosition)
val groupColor = ThemeProvider.themedColor(contextProvider.themedContext, colorPosition)
return UiGroupList(
id = id,
color = groupColor,
Expand All @@ -38,9 +41,9 @@ class UiGroupListAdapter(
@ColorInt
private fun getContrastColor(@ColorInt color: Int): Int {
return if (color.isColorDark()) {
ContextCompat.getColor(contextProvider.context, R.color.whitePrimary)
ContextCompat.getColor(contextProvider.themedContext, R.color.whitePrimary)
} else {
ContextCompat.getColor(contextProvider.context, R.color.pureBlack)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureBlack)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ class UiNoteListAdapter(
val isDarkBg = (noteWithImages.getOpacity().isAlmostTransparent() && themeProvider.isDark) ||
backgroundColor.isColorDark()
val textColor = if (isDarkBg) {
ContextCompat.getColor(contextProvider.context, R.color.pureWhite)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureWhite)
} else {
ContextCompat.getColor(contextProvider.context, R.color.pureBlack)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureBlack)
}

val textSize = if (noteWithImages.getFontSize() == -1) {
Expand All @@ -51,12 +51,12 @@ class UiNoteListAdapter(
id = noteWithImages.getKey(),
backgroundColor = backgroundColor,
moreIcon = ViewUtils.tintIcon(
contextProvider.context,
contextProvider.themedContext,
R.drawable.ic_fluent_more_vertical,
isDarkIcon
),
textColor = textColor,
typeface = AssetsUtil.getTypeface(contextProvider.context, noteWithImages.getStyle()),
typeface = AssetsUtil.getTypeface(contextProvider.themedContext, noteWithImages.getStyle()),
fontSize = textSize.toFloat(),
formattedDateTime = dateTimeManager.fromGmtToLocal(noteWithImages.getGmtTime())?.let {
dateTimeManager.getFullDateTime(it)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class UiNoteListSelectableAdapter(
val isDarkBg = (noteWithImages.getOpacity().isAlmostTransparent() && themeProvider.isDark) ||
backgroundColor.isColorDark()
val textColor = if (isDarkBg) {
ContextCompat.getColor(contextProvider.context, R.color.pureWhite)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureWhite)
} else {
ContextCompat.getColor(contextProvider.context, R.color.pureBlack)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureBlack)
}

val textSize = if (noteWithImages.getFontSize() == -1) {
Expand All @@ -49,7 +49,7 @@ class UiNoteListSelectableAdapter(
backgroundColor = backgroundColor,
dartIcon = isDarkIcon,
textColor = textColor,
typeface = AssetsUtil.getTypeface(contextProvider.context, noteWithImages.getStyle()),
typeface = AssetsUtil.getTypeface(contextProvider.themedContext, noteWithImages.getStyle()),
fontSize = textSize.toFloat(),
images = uiNoteImagesAdapter.convert(noteWithImages.images),
text = noteWithImages.getSummary()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ class UiNoteNotificationAdapter(
val isDarkBg = (noteWithImages.getOpacity().isAlmostTransparent() && themeProvider.isDark) ||
backgroundColor.isColorDark()
val textColor = if (isDarkBg) {
ContextCompat.getColor(contextProvider.context, R.color.pureWhite)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureWhite)
} else {
ContextCompat.getColor(contextProvider.context, R.color.pureBlack)
ContextCompat.getColor(contextProvider.themedContext, R.color.pureBlack)
}

val image = noteWithImages.images.firstOrNull()?.let {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class UiNotePreviewAdapter(
return UiNotePreview(
id = noteWithImages.getKey(),
backgroundColor = backgroundColor,
typeface = AssetsUtil.getTypeface(contextProvider.context, noteWithImages.getStyle()),
typeface = AssetsUtil.getTypeface(contextProvider.themedContext, noteWithImages.getStyle()),
images = uiNoteImagesAdapter.convert(noteWithImages.images),
text = noteWithImages.getSummary(),
uniqueId = noteWithImages.note?.uniqueId ?: 1133,
Expand Down
Loading

0 comments on commit 0b8e9bb

Please sign in to comment.