diff --git a/app/src/main/java/com/elementary/tasks/ActivityObserver.kt b/app/src/main/java/com/elementary/tasks/ActivityObserver.kt new file mode 100644 index 000000000..1f64649f1 --- /dev/null +++ b/app/src/main/java/com/elementary/tasks/ActivityObserver.kt @@ -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) { + } +} diff --git a/app/src/main/java/com/elementary/tasks/ReminderApp.kt b/app/src/main/java/com/elementary/tasks/ReminderApp.kt index b8ae01099..7d878eda9 100644 --- a/app/src/main/java/com/elementary/tasks/ReminderApp.kt +++ b/app/src/main/java/com/elementary/tasks/ReminderApp.kt @@ -93,5 +93,7 @@ class ReminderApp : MultiDexApplication(), KoinComponent { get().createChannels() AdsProvider.init(this) get().preLoad() + + registerActivityLifecycleCallbacks(ActivityObserver(get())) } } diff --git a/app/src/main/java/com/elementary/tasks/calendar/data/DayLiveData.kt b/app/src/main/java/com/elementary/tasks/calendar/data/DayLiveData.kt index dbf8facf4..19943e165 100644 --- a/app/src/main/java/com/elementary/tasks/calendar/data/DayLiveData.kt +++ b/app/src/main/java/com/elementary/tasks/calendar/data/DayLiveData.kt @@ -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) } } diff --git a/app/src/main/java/com/elementary/tasks/calendar/data/MonthLiveData.kt b/app/src/main/java/com/elementary/tasks/calendar/data/MonthLiveData.kt index cc2c7e8da..19db465b4 100644 --- a/app/src/main/java/com/elementary/tasks/calendar/data/MonthLiveData.kt +++ b/app/src/main/java/com/elementary/tasks/calendar/data/MonthLiveData.kt @@ -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) } } diff --git a/app/src/main/java/com/elementary/tasks/core/appwidgets/singlenote/RecyclableUiNoteWidgetAdapter.kt b/app/src/main/java/com/elementary/tasks/core/appwidgets/singlenote/RecyclableUiNoteWidgetAdapter.kt index 036dffaa8..0cba0d4cb 100644 --- a/app/src/main/java/com/elementary/tasks/core/appwidgets/singlenote/RecyclableUiNoteWidgetAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/appwidgets/singlenote/RecyclableUiNoteWidgetAdapter.kt @@ -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 @@ -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 @@ -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(), @@ -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 @@ -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) @@ -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}") @@ -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() diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/KoinModule.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/KoinModule.kt index 561da220c..d63da8904 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/KoinModule.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/KoinModule.kt @@ -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()) } } diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/UiReminderCommonAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/UiReminderCommonAdapter.kt index 031622843..a19ee1217 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/UiReminderCommonAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/UiReminderCommonAdapter.kt @@ -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, diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskListAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskListAdapter.kt index bef16fc24..f7d416b6b 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskListAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskListAdapter.kt @@ -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) } } } diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskPreviewAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskPreviewAdapter.kt index 4362b7aa4..89f2777f4 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskPreviewAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/google/UiGoogleTaskPreviewAdapter.kt @@ -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) } } } diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/group/UiGroupListAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/group/UiGroupListAdapter.kt index 8705fb32f..757d8d6a0 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/group/UiGroupListAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/group/UiGroupListAdapter.kt @@ -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, @@ -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, @@ -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) } } } diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListAdapter.kt index ad68a4a2a..528ea35a3 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListAdapter.kt @@ -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) { @@ -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) diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListSelectableAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListSelectableAdapter.kt index 452eddd0a..7e6ed0917 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListSelectableAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteListSelectableAdapter.kt @@ -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) { @@ -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() diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteNotificationAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteNotificationAdapter.kt index 945803681..24aae325f 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteNotificationAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteNotificationAdapter.kt @@ -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 { diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNotePreviewAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNotePreviewAdapter.kt index 851a6114e..3820dae4c 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNotePreviewAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNotePreviewAdapter.kt @@ -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, diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteWidgetAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteWidgetAdapter.kt index ffb8ca541..8bfc6866a 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteWidgetAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/note/UiNoteWidgetAdapter.kt @@ -3,13 +3,13 @@ package com.elementary.tasks.core.data.adapter.note 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.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 @@ -22,7 +22,9 @@ import timber.log.Timber class UiNoteWidgetAdapter( private val themeProvider: ThemeProvider, private val contextProvider: ContextProvider, - private val uiNoteImagesAdapter: UiNoteImagesAdapter + private val uiNoteImagesAdapter: UiNoteImagesAdapter, + private val colorProvider: ColorProvider, + private val unitsConverter: UnitsConverter ) { fun convert( @@ -44,14 +46,17 @@ class UiNoteWidgetAdapter( 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 @@ -79,7 +84,7 @@ class UiNoteWidgetAdapter( Timber.d("convert: image time -> ${System.currentTimeMillis() - startMillis}") val params = NoteDrawableParams.roundedRectParams( - context = contextProvider.context, + context = contextProvider.themedContext, height = size, width = size, fontSize = fontSize, @@ -92,7 +97,7 @@ class UiNoteWidgetAdapter( backgroundImage = image, text = noteWithImages.getSummary(), color = backgroundColor, - radius = radius.toFloat() + radius = radius ) val bitmap = if (size != 0) { @@ -108,7 +113,7 @@ class UiNoteWidgetAdapter( uniqueId = noteWithImages.note?.uniqueId ?: 1111, bitmap = bitmap, settingsIcon = ViewUtils.tintIcon( - contextProvider.context, + contextProvider.themedContext, R.drawable.ic_fluent_settings, isDarkIcon )?.toBitmap() diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/place/UiPlaceListAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/place/UiPlaceListAdapter.kt index bbff15b26..42da6642b 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/place/UiPlaceListAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/place/UiPlaceListAdapter.kt @@ -16,7 +16,7 @@ class UiPlaceListAdapter( ) { fun convert(data: Place): UiPlaceList { - val marker = DrawableHelper.withContext(contextProvider.context) + val marker = DrawableHelper.withContext(contextProvider.themedContext) .withDrawable(R.drawable.ic_fluent_place) .withColor(themeProvider.getMarkerLightColor(data.marker)) .tint() diff --git a/app/src/main/java/com/elementary/tasks/core/data/adapter/reminder/UiReminderWidgetListAdapter.kt b/app/src/main/java/com/elementary/tasks/core/data/adapter/reminder/UiReminderWidgetListAdapter.kt index 4dafaf313..a265b6a9f 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/adapter/reminder/UiReminderWidgetListAdapter.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/adapter/reminder/UiReminderWidgetListAdapter.kt @@ -24,12 +24,12 @@ class UiReminderWidgetListAdapter( type.isSubTasks() -> { val due = uiReminderCommonAdapter.getDue(data, type) val checkedIcon = ViewUtils.createIcon( - contextProvider.context, + contextProvider.themedContext, R.drawable.ic_fluent_checkbox_checked, textColor ) val unCheckedIcon = ViewUtils.createIcon( - contextProvider.context, + contextProvider.themedContext, R.drawable.ic_fluent_checkbox_unchecked, textColor ) diff --git a/app/src/main/java/com/elementary/tasks/core/data/repository/KoinModule.kt b/app/src/main/java/com/elementary/tasks/core/data/repository/KoinModule.kt index 864883f1b..c583c9849 100644 --- a/app/src/main/java/com/elementary/tasks/core/data/repository/KoinModule.kt +++ b/app/src/main/java/com/elementary/tasks/core/data/repository/KoinModule.kt @@ -3,9 +3,9 @@ package com.elementary.tasks.core.data.repository import org.koin.dsl.module val repositoryModule = module { - single { ReminderRepository(get()) } - single { BirthdayRepository(get()) } - single { NoteRepository(get()) } - single { NoteImageRepository(get()) } - single { RecurPresetRepository(get()) } + factory { ReminderRepository(get()) } + factory { BirthdayRepository(get()) } + factory { NoteRepository(get()) } + factory { NoteImageRepository(get()) } + factory { RecurPresetRepository(get()) } } diff --git a/app/src/main/java/com/elementary/tasks/core/os/ColorProvider.kt b/app/src/main/java/com/elementary/tasks/core/os/ColorProvider.kt index 75cc17cf6..082112a3b 100644 --- a/app/src/main/java/com/elementary/tasks/core/os/ColorProvider.kt +++ b/app/src/main/java/com/elementary/tasks/core/os/ColorProvider.kt @@ -7,41 +7,43 @@ import androidx.core.content.ContextCompat import com.elementary.tasks.core.utils.ThemeProvider class ColorProvider( - private val context: Context + private val contextProvider: ContextProvider ) { @ColorInt fun getColor(@ColorRes color: Int): Int { - return ContextCompat.getColor(context, color) + return ContextCompat.getColor(getContext(), color) } @ColorInt fun getHintTextColor(): Int { - return ThemeProvider.getHintTextColor(context) + return ThemeProvider.getHintTextColor(getContext()) } @ColorInt fun getTitleTextColor(): Int { - return ThemeProvider.getTitleTextColor(context) + return ThemeProvider.getTitleTextColor(getContext()) } @ColorInt fun getColorOnSurface(): Int { - return ThemeProvider.getThemeOnSurfaceColor(context) + return ThemeProvider.getThemeOnSurfaceColor(getContext()) } @ColorInt fun getColorOnSecondary(): Int { - return ThemeProvider.getThemeOnSecondaryColor(context) + return ThemeProvider.getThemeOnSecondaryColor(getContext()) } @ColorInt fun getColorOnSecondaryContainer(): Int { - return ThemeProvider.getThemeOnSecondaryContainerColor(context) + return ThemeProvider.getThemeOnSecondaryContainerColor(getContext()) } @ColorInt fun getColorOnBackground(): Int { - return ThemeProvider.getThemeOnBackgroundColor(context) + return ThemeProvider.getThemeOnBackgroundColor(getContext()) } + + private fun getContext(): Context = contextProvider.themedContext } diff --git a/app/src/main/java/com/elementary/tasks/core/os/ContextProvider.kt b/app/src/main/java/com/elementary/tasks/core/os/ContextProvider.kt index 45836c75e..8a9f18075 100644 --- a/app/src/main/java/com/elementary/tasks/core/os/ContextProvider.kt +++ b/app/src/main/java/com/elementary/tasks/core/os/ContextProvider.kt @@ -6,8 +6,11 @@ class ContextProvider(context: Context) { var context: Context = context.applicationContext private set + var themedContext: Context = context + private set fun switchContext(context: Context) { this.context = context.applicationContext + this.themedContext = context } } diff --git a/app/src/main/java/com/elementary/tasks/core/os/ContextSwitcher.kt b/app/src/main/java/com/elementary/tasks/core/os/ContextSwitcher.kt index 6467601f5..c737b3d49 100644 --- a/app/src/main/java/com/elementary/tasks/core/os/ContextSwitcher.kt +++ b/app/src/main/java/com/elementary/tasks/core/os/ContextSwitcher.kt @@ -7,6 +7,6 @@ class ContextSwitcher( ) { fun switchContext(context: Context) { - contextProvider.switchContext(context.applicationContext) + contextProvider.switchContext(context) } } diff --git a/app/src/main/java/com/elementary/tasks/core/os/InputMethodManagerWrapper.kt b/app/src/main/java/com/elementary/tasks/core/os/InputMethodManagerWrapper.kt deleted file mode 100644 index 54d2c41dc..000000000 --- a/app/src/main/java/com/elementary/tasks/core/os/InputMethodManagerWrapper.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.elementary.tasks.core.os - -import android.view.View -import android.view.Window - -class InputMethodManagerWrapper(systemServiceProvider: SystemServiceProvider) { - - private val inputMethodManager = systemServiceProvider.provideInputMethodManager() - - fun hideKeyboard(view: View) { - inputMethodManager?.hideSoftInputFromWindow(view.windowToken, 0) - } - - fun hideKeyboard(window: Window?) { - val currentToken = window?.currentFocus?.windowToken ?: return - inputMethodManager?.hideSoftInputFromWindow(currentToken, 0) - } -} diff --git a/app/src/main/java/com/elementary/tasks/core/os/KoinModule.kt b/app/src/main/java/com/elementary/tasks/core/os/KoinModule.kt index 422c4c630..7f690dc12 100644 --- a/app/src/main/java/com/elementary/tasks/core/os/KoinModule.kt +++ b/app/src/main/java/com/elementary/tasks/core/os/KoinModule.kt @@ -4,17 +4,16 @@ import com.elementary.tasks.core.os.contacts.ContactsReader import org.koin.dsl.module val osModule = module { - single { ContactsReader(get()) } + factory { ContactsReader(get()) } single { ContextProvider(get()) } - single { SystemServiceProvider(get()) } - single { InputMethodManagerWrapper(get()) } - single { PackageManagerWrapper(get()) } + factory { SystemServiceProvider(get()) } + factory { PackageManagerWrapper(get()) } single { IntentDataHolder() } - single { UnitsConverter(get()) } + factory { UnitsConverter(get()) } - single { ColorProvider(get()) } + factory { ColorProvider(get()) } factory { ContextSwitcher(get()) } } diff --git a/app/src/main/java/com/elementary/tasks/core/os/UnitsConverter.kt b/app/src/main/java/com/elementary/tasks/core/os/UnitsConverter.kt index 75a267119..e99f6733d 100644 --- a/app/src/main/java/com/elementary/tasks/core/os/UnitsConverter.kt +++ b/app/src/main/java/com/elementary/tasks/core/os/UnitsConverter.kt @@ -1,24 +1,28 @@ package com.elementary.tasks.core.os -import android.content.Context import android.util.TypedValue import androidx.annotation.Px class UnitsConverter( - private val context: Context + private val contextProvider: ContextProvider ) { + @Px + fun dp2px(dp: Int): Float { + return dp2px(dp.toFloat()) + } + @Px fun dp2px(dp: Float): Float { return TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, dp, - context.resources.displayMetrics + contextProvider.themedContext.resources.displayMetrics ) } @Px fun spToPx(sp: Float): Float { - return context.spToPx(sp) + return contextProvider.themedContext.spToPx(sp) } } diff --git a/app/src/main/java/com/elementary/tasks/core/services/action/KoinModule.kt b/app/src/main/java/com/elementary/tasks/core/services/action/KoinModule.kt index 3597c1fe3..5d43a8aa0 100644 --- a/app/src/main/java/com/elementary/tasks/core/services/action/KoinModule.kt +++ b/app/src/main/java/com/elementary/tasks/core/services/action/KoinModule.kt @@ -10,13 +10,13 @@ import com.elementary.tasks.core.services.action.reminder.ReminderRepeatProcesso import org.koin.dsl.module val actionModule = module { - single { WearNotification(get(), get()) } + factory { WearNotification(get(), get()) } - single { ReminderDataProvider(get(), get()) } - single { BirthdayDataProvider(get(), get()) } + factory { ReminderDataProvider(get(), get()) } + factory { BirthdayDataProvider(get(), get()) } - single { ReminderHandlerFactory(get(), get(), get(), get(), get(), get(), get()) } - single { + factory { ReminderHandlerFactory(get(), get(), get(), get(), get(), get(), get()) } + factory { BirthdayHandlerFactory( get(), get(), @@ -31,8 +31,8 @@ val actionModule = module { ) } - single { ReminderActionProcessor(get(), get(), get(), get(), get(), get(), get(), get(), get()) } - single { BirthdayActionProcessor(get(), get(), get(), get(), get(), get(), get(), get(), get()) } + factory { ReminderActionProcessor(get(), get(), get(), get(), get(), get(), get(), get(), get()) } + factory { BirthdayActionProcessor(get(), get(), get(), get(), get(), get(), get(), get(), get()) } - single { ReminderRepeatProcessor(get(), get(), get(), get()) } + factory { ReminderRepeatProcessor(get(), get(), get(), get()) } } diff --git a/app/src/main/java/com/elementary/tasks/core/services/action/WearNotification.kt b/app/src/main/java/com/elementary/tasks/core/services/action/WearNotification.kt index 9047c360c..c23cf9d85 100644 --- a/app/src/main/java/com/elementary/tasks/core/services/action/WearNotification.kt +++ b/app/src/main/java/com/elementary/tasks/core/services/action/WearNotification.kt @@ -25,7 +25,7 @@ class WearNotification( wearableNotificationBuilder.setContentTitle(summary) wearableNotificationBuilder.setContentText(secondaryText) wearableNotificationBuilder.color = - ContextCompat.getColor(contextProvider.context, R.color.secondaryBlue) + ContextCompat.getColor(contextProvider.themedContext, R.color.secondaryBlue) wearableNotificationBuilder.setOngoing(false) wearableNotificationBuilder.setOnlyAlertOnce(true) wearableNotificationBuilder.setGroup(groupName) diff --git a/app/src/main/java/com/elementary/tasks/core/services/action/birthday/process/BirthdayHandlerQ.kt b/app/src/main/java/com/elementary/tasks/core/services/action/birthday/process/BirthdayHandlerQ.kt index 7a9aac863..36766d43d 100644 --- a/app/src/main/java/com/elementary/tasks/core/services/action/birthday/process/BirthdayHandlerQ.kt +++ b/app/src/main/java/com/elementary/tasks/core/services/action/birthday/process/BirthdayHandlerQ.kt @@ -52,7 +52,7 @@ class BirthdayHandlerQ( if (Module.isPro && birthdayDataProvider.isBirthdayLed()) { builder.setLights(birthdayDataProvider.getLedColor(), 500, 1000) } - builder.color = ThemeProvider.getPrimaryColor(contextProvider.context) + builder.color = ThemeProvider.getPrimaryColor(contextProvider.themedContext) builder.setCategory(NotificationCompat.CATEGORY_REMINDER) val notificationIntent = ShowBirthday29Activity.getLaunchIntent( diff --git a/app/src/main/java/com/elementary/tasks/core/utils/DI.kt b/app/src/main/java/com/elementary/tasks/core/utils/DI.kt index 702348920..f4e04097a 100644 --- a/app/src/main/java/com/elementary/tasks/core/utils/DI.kt +++ b/app/src/main/java/com/elementary/tasks/core/utils/DI.kt @@ -281,7 +281,7 @@ fun dbModule(context: Context): Module { single { appDb.recurPresetDao() } single { appDb.recentQueryDao() } - single { NoteToOldNoteConverter(get()) } + factory { NoteToOldNoteConverter(get()) } } } @@ -296,7 +296,7 @@ val utilModule = module { single { BackupTool(get(), get(), get(), get(), get(), get(), get()) } single { Dialogues(get()) } single { Language(get(), get(), get()) } - single { GoogleCalendarUtils(get(), get(), get(), get()) } + factory { GoogleCalendarUtils(get(), get(), get(), get()) } factory { providesRecognizer(get(), get()) } single { CacheUtil(get(), get()) } single { GlobalButtonObservable() } @@ -323,14 +323,14 @@ val utilModule = module { factory { RuleBuilder() } factory { TagParser() } - single { RecurrenceManager(get(), get(), get()) } - single { RecurEventManager(get()) } + factory { RecurrenceManager(get(), get(), get()) } + factory { RecurEventManager(get()) } single { RemotePrefs(get(), get(), get(), get()) } - single { Notifier(get(), get(), get(), get(), get()) } - single { JobScheduler(get(), get(), get(), get()) } - single { UpdatesHelper(get()) } + factory { Notifier(get(), get(), get(), get(), get()) } + factory { JobScheduler(get(), get(), get(), get()) } + factory { UpdatesHelper(get()) } factory { WidgetDataProvider(get(), get(), get(), get()) } @@ -341,23 +341,23 @@ val utilModule = module { factory { DispatcherProvider() } - single { WorkManagerProvider(get()) } - single { WorkerLauncher(get(), get()) } + factory { WorkManagerProvider(get()) } + factory { WorkerLauncher(get(), get()) } single { AnalyticsEventSender(FirebaseAnalytics.getInstance(get()), get()) } - single { ReminderAnalyticsTracker(get()) } - single { VoiceAnalyticsTracker(get()) } + factory { ReminderAnalyticsTracker(get()) } + factory { VoiceAnalyticsTracker(get()) } single { TextProvider(get()) } single { FeatureManager(get()) } - single { GroupsUtil(get(), get(), get(), get()) } - single { ImageDecoder(get(), get(), get()) } + factory { GroupsUtil(get(), get(), get(), get()) } + factory { ImageDecoder(get(), get(), get()) } - single { IdProvider() } + factory { IdProvider() } - single { DateTimeManager(get(), get(), get(), NowDateTimeProvider()) } - single { DateTimePickerProvider(get()) } - single { DoNotDisturbManager(get(), get()) } + factory { DateTimeManager(get(), get(), get(), NowDateTimeProvider()) } + factory { DateTimePickerProvider(get()) } + factory { DoNotDisturbManager(get(), get()) } factory { (fragment: BaseNavigationFragment<*>, callback: GoogleLogin.LoginCallback) -> GoogleLogin(fragment, get(), get(), get(), callback) diff --git a/app/src/main/java/com/elementary/tasks/core/utils/KoinModule.kt b/app/src/main/java/com/elementary/tasks/core/utils/KoinModule.kt index ba5134d40..ed4a05df1 100644 --- a/app/src/main/java/com/elementary/tasks/core/utils/KoinModule.kt +++ b/app/src/main/java/com/elementary/tasks/core/utils/KoinModule.kt @@ -5,7 +5,7 @@ import org.koin.dsl.module val newUtilsModule = module { single { ImageLoader(get()) } - single { UriHelper(get()) } + factory { UriHelper(get()) } factory { EventImportProcessor(get(), get(), get(), get()) } factory { GeocoderTask(get(), get()) } diff --git a/app/src/main/java/com/elementary/tasks/core/utils/ThemeProvider.kt b/app/src/main/java/com/elementary/tasks/core/utils/ThemeProvider.kt index 0b42351c0..8fb6cd58b 100644 --- a/app/src/main/java/com/elementary/tasks/core/utils/ThemeProvider.kt +++ b/app/src/main/java/com/elementary/tasks/core/utils/ThemeProvider.kt @@ -11,15 +11,19 @@ import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat import com.elementary.tasks.R +import com.elementary.tasks.core.os.ContextProvider import com.elementary.tasks.core.utils.params.Prefs import com.google.android.material.color.DynamicColors import com.google.android.material.color.MaterialColors class ThemeProvider( - private val context: Context, + private val contextProvider: ContextProvider, private val prefs: Prefs ) { + private val context: Context + get() = contextProvider.themedContext + val isDark: Boolean get() { return when (prefs.nightMode) { diff --git a/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactory.kt b/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactory.kt index 92e5598a9..bc45fd084 100644 --- a/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactory.kt +++ b/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactory.kt @@ -79,7 +79,7 @@ class BiFactory( private val biFactoryICal: BiFactoryICal ) { - private val context: Context = contextProvider.context + private val context: Context = contextProvider.themedContext fun > createWithValue(biType: BiType, value: V?, clazz: Class): T? { return createTyped(biType, clazz) diff --git a/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactoryICal.kt b/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactoryICal.kt index 9268c7857..6382ed04b 100644 --- a/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactoryICal.kt +++ b/app/src/main/java/com/elementary/tasks/reminder/build/bi/BiFactoryICal.kt @@ -39,7 +39,7 @@ class BiFactoryICal( private val paramToTextAdapter: ParamToTextAdapter ) { - private val context: Context = contextProvider.context + private val context: Context = contextProvider.themedContext fun create(biType: BiType): BuilderItem<*> { return when (biType) {