diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 896f8034d..24a4c9651 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -271,9 +271,6 @@ - () - val error = _error.toLiveData() + val error = _error.toSingleEvent() protected fun postInProgress(isInProgress: Boolean) { _isInProgress.postValue(isInProgress) @@ -35,17 +35,6 @@ open class BaseProgressViewModel( _error.postValue(error) } - protected fun withResult(doWork: ((error: String) -> Unit) -> Commands) { - viewModelScope.launch(dispatcherProvider.default()) { - postInProgress(true) - val commands = runBlocking { - doWork.invoke { postError(it) } - } - postInProgress(false) - postCommand(commands) - } - } - protected fun withProgressSuspend(doWork: suspend ((error: String) -> Unit) -> Unit) { viewModelScope.launch(dispatcherProvider.default()) { postInProgress(true) diff --git a/app/src/main/java/com/elementary/tasks/globalsearch/GlobalSearchViewModel.kt b/app/src/main/java/com/elementary/tasks/globalsearch/GlobalSearchViewModel.kt index 83e288d3b..1d94985c0 100644 --- a/app/src/main/java/com/elementary/tasks/globalsearch/GlobalSearchViewModel.kt +++ b/app/src/main/java/com/elementary/tasks/globalsearch/GlobalSearchViewModel.kt @@ -6,7 +6,7 @@ import com.elementary.tasks.birthdays.preview.PreviewBirthdayFragment import com.elementary.tasks.core.arch.BaseProgressViewModel import com.elementary.tasks.googletasks.preview.PreviewGoogleTaskFragment import com.elementary.tasks.groups.create.EditGroupFragment -import com.elementary.tasks.notes.preview.NotePreviewActivity +import com.elementary.tasks.notes.preview.PreviewNoteFragment import com.elementary.tasks.places.create.EditPlaceFragment import com.elementary.tasks.reminder.preview.PreviewReminderFragment import com.github.naz013.common.datetime.DateTimeManager @@ -102,7 +102,8 @@ class GlobalSearchViewModel( this == EditGroupFragment::class.java || this == EditPlaceFragment::class.java || this == PreviewGoogleTaskFragment::class.java || - this == PreviewReminderFragment::class.java + this == PreviewReminderFragment::class.java || + this == PreviewNoteFragment::class.java } private fun Class<*>.destinationId(): Int? { @@ -127,6 +128,10 @@ class GlobalSearchViewModel( R.id.previewReminderFragment } + this == PreviewNoteFragment::class.java -> { + R.id.previewNoteFragment + } + else -> null } } @@ -193,7 +198,7 @@ class GlobalSearchViewModel( ObjectType.GROUP -> EditGroupFragment::class.java ObjectType.PLACE -> EditPlaceFragment::class.java ObjectType.GOOGLE_TASK -> PreviewGoogleTaskFragment::class.java - ObjectType.NOTE -> NotePreviewActivity::class.java + ObjectType.NOTE -> PreviewNoteFragment::class.java ObjectType.BIRTHDAY -> PreviewBirthdayFragment::class.java ObjectType.REMINDER -> PreviewReminderFragment::class.java } diff --git a/app/src/main/java/com/elementary/tasks/home/HomeFragment.kt b/app/src/main/java/com/elementary/tasks/home/HomeFragment.kt index d0381d207..8037c9cf2 100644 --- a/app/src/main/java/com/elementary/tasks/home/HomeFragment.kt +++ b/app/src/main/java/com/elementary/tasks/home/HomeFragment.kt @@ -23,7 +23,6 @@ import com.elementary.tasks.home.scheduleview.ScheduleAdapter import com.elementary.tasks.home.scheduleview.ScheduleHomeViewModel import com.elementary.tasks.home.scheduleview.ScheduleModel import com.elementary.tasks.navigation.topfragment.BaseSearchableFragment -import com.elementary.tasks.notes.preview.NotePreviewActivity import com.elementary.tasks.other.PrivacyPolicyActivity import com.elementary.tasks.whatsnew.WhatsNewManager import com.github.naz013.analytics.Screen @@ -32,7 +31,6 @@ import com.github.naz013.common.intent.IntentKeys import com.github.naz013.domain.Reminder import com.github.naz013.feature.common.livedata.nonNullObserve import com.github.naz013.ui.common.fragment.startActivity -import com.github.naz013.ui.common.login.LoginApi import com.github.naz013.ui.common.view.applyTopInsets import com.github.naz013.ui.common.view.gone import com.github.naz013.ui.common.view.visible @@ -68,8 +66,13 @@ class HomeFragment : showEventTypeSelectionDialog(time) }, onNoteClickListener = { _, id -> - LoginApi.openLogged(requireContext(), NotePreviewActivity::class.java) { - putExtra(IntentKeys.INTENT_ID, id) + navigate { + navigate( + R.id.previewNoteFragment, + Bundle().apply { + putString(IntentKeys.INTENT_ID, id) + } + ) } }, onGoogleTaskClickListener = { _, id -> diff --git a/app/src/main/java/com/elementary/tasks/home/ScreenDestinationIdResolver.kt b/app/src/main/java/com/elementary/tasks/home/ScreenDestinationIdResolver.kt index eb27057b6..7635f6d98 100644 --- a/app/src/main/java/com/elementary/tasks/home/ScreenDestinationIdResolver.kt +++ b/app/src/main/java/com/elementary/tasks/home/ScreenDestinationIdResolver.kt @@ -12,6 +12,7 @@ import com.github.naz013.navigation.EditReminderScreen import com.github.naz013.navigation.SettingsScreen import com.github.naz013.navigation.ViewBirthdayScreen import com.github.naz013.navigation.ViewGoogleTaskScreen +import com.github.naz013.navigation.ViewNoteScreen import com.github.naz013.navigation.ViewReminderScreen class ScreenDestinationIdResolver { @@ -29,6 +30,7 @@ class ScreenDestinationIdResolver { is EditGoogleTaskScreen -> R.id.editGoogleTaskFragment is ViewReminderScreen -> R.id.previewReminderFragment is EditReminderScreen -> R.id.buildReminderFragment + is ViewNoteScreen -> R.id.previewNoteFragment } } } diff --git a/app/src/main/java/com/elementary/tasks/navigation/ActivityNavigationDispatcher.kt b/app/src/main/java/com/elementary/tasks/navigation/ActivityNavigationDispatcher.kt index b2492cd6e..1da5c7ca2 100644 --- a/app/src/main/java/com/elementary/tasks/navigation/ActivityNavigationDispatcher.kt +++ b/app/src/main/java/com/elementary/tasks/navigation/ActivityNavigationDispatcher.kt @@ -4,7 +4,6 @@ import android.content.Context import android.os.Bundle import com.elementary.tasks.home.BottomNavActivity import com.elementary.tasks.notes.create.CreateNoteActivity -import com.elementary.tasks.notes.preview.NotePreviewActivity import com.github.naz013.logging.Logger import com.github.naz013.navigation.ActivityDestination import com.github.naz013.navigation.DeepLinkDestination @@ -14,6 +13,7 @@ import com.github.naz013.navigation.EditGoogleTaskScreen import com.github.naz013.navigation.EditReminderScreen import com.github.naz013.navigation.ViewBirthdayScreen import com.github.naz013.navigation.ViewGoogleTaskScreen +import com.github.naz013.navigation.ViewNoteScreen import com.github.naz013.navigation.ViewReminderScreen import com.github.naz013.ui.common.context.buildIntent import com.github.naz013.ui.common.login.LoginApi @@ -91,6 +91,13 @@ class ActivityNavigationDispatcher( } } + DestinationScreen.NotePreview -> { + val deepLinkDestination = ViewNoteScreen(bundle) + Bundle(bundle).apply { + putParcelable(DeepLinkDestination.KEY, deepLinkDestination) + } + } + else -> bundle } } @@ -99,7 +106,7 @@ class ActivityNavigationDispatcher( return when (destinationScreen) { DestinationScreen.ReminderPreview -> BottomNavActivity::class.java DestinationScreen.ReminderCreate -> BottomNavActivity::class.java - DestinationScreen.NotePreview -> NotePreviewActivity::class.java + DestinationScreen.NotePreview -> BottomNavActivity::class.java DestinationScreen.NoteCreate -> CreateNoteActivity::class.java DestinationScreen.BirthdayPreview -> BottomNavActivity::class.java DestinationScreen.BirthdayCreate -> BottomNavActivity::class.java diff --git a/app/src/main/java/com/elementary/tasks/notes/KoinModule.kt b/app/src/main/java/com/elementary/tasks/notes/KoinModule.kt index cb92b65e5..d18e7496f 100644 --- a/app/src/main/java/com/elementary/tasks/notes/KoinModule.kt +++ b/app/src/main/java/com/elementary/tasks/notes/KoinModule.kt @@ -6,7 +6,7 @@ import com.elementary.tasks.notes.create.CreateNoteViewModel import com.elementary.tasks.notes.list.NotesViewModel import com.elementary.tasks.notes.list.archived.ArchivedNotesViewModel import com.elementary.tasks.notes.preview.ImagesSingleton -import com.elementary.tasks.notes.preview.NotePreviewViewModel +import com.elementary.tasks.notes.preview.PreviewNoteViewModel import com.elementary.tasks.notes.preview.reminders.ReminderToUiNoteAttachedReminder import com.elementary.tasks.notes.work.DeleteNoteBackupWorker import com.elementary.tasks.notes.work.NoteSingleBackupWorker @@ -75,7 +75,7 @@ val noteModule = module { ) } viewModel { (id: String) -> - NotePreviewViewModel( + PreviewNoteViewModel( id, get(), get(), diff --git a/app/src/main/java/com/elementary/tasks/notes/list/NotesFragment.kt b/app/src/main/java/com/elementary/tasks/notes/list/NotesFragment.kt index eba7622e9..21ae03d08 100644 --- a/app/src/main/java/com/elementary/tasks/notes/list/NotesFragment.kt +++ b/app/src/main/java/com/elementary/tasks/notes/list/NotesFragment.kt @@ -16,9 +16,7 @@ import com.elementary.tasks.core.data.ui.note.UiNoteList import com.elementary.tasks.core.interfaces.ActionsListener import com.elementary.tasks.core.utils.ListActions import com.elementary.tasks.core.utils.TelephonyUtil -import com.github.naz013.ui.common.Dialogues import com.elementary.tasks.core.utils.ui.SearchMenuHandler -import com.github.naz013.ui.common.view.ViewUtils import com.elementary.tasks.core.views.recyclerview.SpaceBetweenItemDecoration import com.elementary.tasks.core.views.recyclerview.StaggeredSpaceItemDecoration import com.elementary.tasks.databinding.FragmentNotesBinding @@ -26,7 +24,6 @@ import com.elementary.tasks.navigation.topfragment.BaseTopToolbarFragment import com.elementary.tasks.notes.create.CreateNoteActivity import com.elementary.tasks.notes.preview.ImagePreviewActivity import com.elementary.tasks.notes.preview.ImagesSingleton -import com.elementary.tasks.notes.preview.NotePreviewActivity import com.github.naz013.analytics.Screen import com.github.naz013.analytics.ScreenUsedEvent import com.github.naz013.common.Permissions @@ -35,11 +32,12 @@ import com.github.naz013.domain.note.NoteWithImages import com.github.naz013.feature.common.android.SystemServiceProvider import com.github.naz013.feature.common.livedata.nonNullObserve import com.github.naz013.logging.Logger +import com.github.naz013.ui.common.Dialogues import com.github.naz013.ui.common.context.startActivity import com.github.naz013.ui.common.fragment.dp2px -import com.github.naz013.ui.common.fragment.startActivity import com.github.naz013.ui.common.fragment.toast import com.github.naz013.ui.common.login.LoginApi +import com.github.naz013.ui.common.view.ViewUtils import com.github.naz013.ui.common.view.applyBottomInsets import com.github.naz013.ui.common.view.gone import com.github.naz013.ui.common.view.visible @@ -321,8 +319,13 @@ class NotesFragment : BaseTopToolbarFragment() { override fun getTitle(): String = getString(R.string.notes) private fun previewNote(id: String?) { - startActivity(NotePreviewActivity::class.java) { - putExtra(IntentKeys.INTENT_ID, id) + navigate { + navigate( + R.id.previewNoteFragment, + Bundle().apply { + putString(IntentKeys.INTENT_ID, id) + } + ) } } diff --git a/app/src/main/java/com/elementary/tasks/notes/list/archived/ArchivedNotesFragment.kt b/app/src/main/java/com/elementary/tasks/notes/list/archived/ArchivedNotesFragment.kt index fc0d6d586..6a8e19b05 100644 --- a/app/src/main/java/com/elementary/tasks/notes/list/archived/ArchivedNotesFragment.kt +++ b/app/src/main/java/com/elementary/tasks/notes/list/archived/ArchivedNotesFragment.kt @@ -16,9 +16,7 @@ import com.elementary.tasks.core.data.ui.note.UiNoteList import com.elementary.tasks.core.interfaces.ActionsListener import com.elementary.tasks.core.utils.ListActions import com.elementary.tasks.core.utils.TelephonyUtil -import com.github.naz013.ui.common.Dialogues import com.elementary.tasks.core.utils.ui.SearchMenuHandler -import com.github.naz013.ui.common.view.ViewUtils import com.elementary.tasks.core.views.recyclerview.SpaceBetweenItemDecoration import com.elementary.tasks.core.views.recyclerview.StaggeredSpaceItemDecoration import com.elementary.tasks.databinding.FragmentNotesBinding @@ -28,7 +26,6 @@ import com.elementary.tasks.notes.list.NoteSortProcessor import com.elementary.tasks.notes.list.NotesRecyclerAdapter import com.elementary.tasks.notes.preview.ImagePreviewActivity import com.elementary.tasks.notes.preview.ImagesSingleton -import com.elementary.tasks.notes.preview.NotePreviewActivity import com.github.naz013.analytics.Screen import com.github.naz013.analytics.ScreenUsedEvent import com.github.naz013.common.intent.IntentKeys @@ -36,10 +33,12 @@ import com.github.naz013.domain.note.NoteWithImages import com.github.naz013.feature.common.android.SystemServiceProvider import com.github.naz013.feature.common.livedata.nonNullObserve import com.github.naz013.logging.Logger +import com.github.naz013.ui.common.Dialogues import com.github.naz013.ui.common.fragment.dp2px import com.github.naz013.ui.common.fragment.startActivity import com.github.naz013.ui.common.fragment.toast import com.github.naz013.ui.common.login.LoginApi +import com.github.naz013.ui.common.view.ViewUtils import com.github.naz013.ui.common.view.gone import com.github.naz013.ui.common.view.visible import com.github.naz013.ui.common.view.visibleGone @@ -314,8 +313,11 @@ class ArchivedNotesFragment : BaseToolbarFragment() { override fun getTitle(): String = getString(R.string.notes_archive) private fun previewNote(id: String?) { - startActivity(NotePreviewActivity::class.java) { - putExtra(IntentKeys.INTENT_ID, id) + navigate { + navigate( + R.id.previewNoteFragment, + Bundle().apply { putString(IntentKeys.INTENT_ID, id) } + ) } } } diff --git a/app/src/main/java/com/elementary/tasks/notes/preview/NotePreviewActivity.kt b/app/src/main/java/com/elementary/tasks/notes/preview/PreviewNoteFragment.kt similarity index 70% rename from app/src/main/java/com/elementary/tasks/notes/preview/NotePreviewActivity.kt rename to app/src/main/java/com/elementary/tasks/notes/preview/PreviewNoteFragment.kt index e08bf0ba9..f8e9867fb 100644 --- a/app/src/main/java/com/elementary/tasks/notes/preview/NotePreviewActivity.kt +++ b/app/src/main/java/com/elementary/tasks/notes/preview/PreviewNoteFragment.kt @@ -1,11 +1,10 @@ package com.elementary.tasks.notes.preview import android.os.Bundle -import android.os.Handler -import android.os.Looper import android.util.TypedValue +import android.view.LayoutInflater import android.view.View -import androidx.activity.enableEdgeToEdge +import android.view.ViewGroup import androidx.core.view.get import androidx.recyclerview.widget.LinearLayoutManager import com.elementary.tasks.AdsProvider @@ -14,12 +13,12 @@ import com.elementary.tasks.core.data.Commands import com.elementary.tasks.core.data.ui.note.UiNoteImage import com.elementary.tasks.core.data.ui.note.UiNotePreview import com.elementary.tasks.core.interfaces.ActionsListener -import com.elementary.tasks.core.os.PermissionFlowDelegateImpl import com.elementary.tasks.core.utils.BuildParams import com.elementary.tasks.core.utils.ListActions import com.elementary.tasks.core.utils.TelephonyUtil import com.elementary.tasks.core.utils.ui.tintOverflowButton -import com.elementary.tasks.databinding.ActivityNotePreviewBinding +import com.elementary.tasks.databinding.FragmentNotePreviewBinding +import com.elementary.tasks.navigation.toolbarfragment.BaseNonToolbarFragment import com.elementary.tasks.notes.create.CreateNoteActivity import com.elementary.tasks.notes.preview.carousel.ImagesCarouselAdapter import com.elementary.tasks.notes.preview.reminders.AttachedRemindersAdapter @@ -28,16 +27,14 @@ import com.github.naz013.common.Permissions import com.github.naz013.common.intent.IntentKeys import com.github.naz013.domain.note.NoteWithImages import com.github.naz013.feature.common.livedata.nonNullObserve -import com.github.naz013.ui.common.Dialogues -import com.github.naz013.ui.common.activity.BindingActivity -import com.github.naz013.ui.common.activity.toast -import com.github.naz013.ui.common.context.colorOf -import com.github.naz013.ui.common.context.startActivity +import com.github.naz013.logging.Logger +import com.github.naz013.ui.common.fragment.colorOf +import com.github.naz013.ui.common.fragment.startActivity +import com.github.naz013.ui.common.fragment.toast import com.github.naz013.ui.common.isAlmostTransparent import com.github.naz013.ui.common.isColorDark import com.github.naz013.ui.common.login.LoginApi import com.github.naz013.ui.common.view.ViewUtils -import com.github.naz013.ui.common.view.applyBottomInsets import com.github.naz013.ui.common.view.applyTopInsets import com.github.naz013.ui.common.view.gone import com.github.naz013.ui.common.view.visible @@ -47,39 +44,42 @@ import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.core.parameter.parametersOf import java.io.File -class NotePreviewActivity : BindingActivity() { - - private var isBgDark = false +class PreviewNoteFragment : BaseNonToolbarFragment() { + private val imagesSingleton by inject() + private val viewModel by viewModel { parametersOf(idFromIntent()) } + private val adsProvider = AdsProvider() private val adapter = ImagesCarouselAdapter() private val attachedRemindersAdapter = AttachedRemindersAdapter( onEdit = { editReminder(it.id) }, onDetach = { viewModel.detachReminder(it.id) } ) - private val viewModel by viewModel { parametersOf(getId()) } - private val dialogues by inject() + private fun idFromIntent(): String = arguments?.getString(IntentKeys.INTENT_ID) ?: "" - private val uiHandler = Handler(Looper.getMainLooper()) - - private val imagesSingleton by inject() - private val adsProvider = AdsProvider() - private val permissionFlowDelegate = PermissionFlowDelegateImpl(this) - - override fun inflateBinding() = ActivityNotePreviewBinding.inflate(layoutInflater) + override fun inflate( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): FragmentNotePreviewBinding { + return FragmentNotePreviewBinding.inflate(inflater, container, false) + } override fun onCreate(savedInstanceState: Bundle?) { - enableEdgeToEdge() super.onCreate(savedInstanceState) + viewModel.isBgDark = isDark + Logger.i(TAG, "Opening the note preview screen for id: ${Logger.data(idFromIntent())}") + } - binding.scrollView.applyBottomInsets() - isBgDark = isDarkMode + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) initActionBar() updateTextColors() initImagesList() initReminderCard() initViewModel() loadAds() + initViewModel() } private fun loadAds() { @@ -97,7 +97,27 @@ class NotePreviewActivity : BindingActivity() { } } - private fun getId() = intent.getStringExtra(IntentKeys.INTENT_ID) ?: "" + override fun onDestroy() { + super.onDestroy() + adsProvider.destroy() + adapter.actionsListener = null + } + + override fun onPause() { + super.onPause() + viewModel.getStatusBarColor()?.also { + activity?.window?.statusBarColor = it + activity?.window?.navigationBarColor = it + } + } + + override fun onResume() { + super.onResume() + viewModel.note.value?.backgroundColor?.also { + activity?.window?.statusBarColor = it + activity?.window?.navigationBarColor = it + } + } private fun initViewModel() { lifecycle.addObserver(viewModel) @@ -105,7 +125,7 @@ class NotePreviewActivity : BindingActivity() { viewModel.reminders.nonNullObserve(this) { showReminders(it) } viewModel.result.nonNullObserve(this) { commands -> when (commands) { - Commands.DELETED -> closeWindow() + Commands.DELETED -> moveBack() else -> { } } @@ -116,7 +136,7 @@ class NotePreviewActivity : BindingActivity() { private fun initReminderCard() { binding.attachedRemindersList.layoutManager = LinearLayoutManager( - this, + context, LinearLayoutManager.HORIZONTAL, false ) @@ -124,16 +144,14 @@ class NotePreviewActivity : BindingActivity() { } private fun editReminder(id: String) { - // TODO Add navigation to fragment -// LoginApi.openLogged(this, BuildReminderActivity::class.java) { -// putExtra(IntentKeys.INTENT_ID, id) -// } - } - - override fun onDestroy() { - super.onDestroy() - adsProvider.destroy() - adapter.actionsListener = null + navigate { + navigate( + R.id.buildReminderFragment, + Bundle().apply { + putString(IntentKeys.INTENT_ID, id) + } + ) + } } private fun initImagesList() { @@ -163,7 +181,7 @@ class NotePreviewActivity : BindingActivity() { private fun initActionBar() { binding.appBar.applyTopInsets() binding.toolbar.title = "" - binding.toolbar.setNavigationOnClickListener { closeWindow() } + binding.toolbar.setNavigationOnClickListener { moveBack() } binding.toolbar.setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.action_share -> { @@ -199,8 +217,8 @@ class NotePreviewActivity : BindingActivity() { } private fun updateIcons() { - binding.toolbar.navigationIcon = ViewUtils.backIcon(this, isBgDark) - binding.toolbar.tintOverflowButton(isBgDark) + binding.toolbar.navigationIcon = ViewUtils.backIcon(requireContext(), viewModel.isBgDark) + binding.toolbar.tintOverflowButton(viewModel.isBgDark) } private fun updateMenu(isArchived: Boolean = false) { @@ -210,8 +228,20 @@ class NotePreviewActivity : BindingActivity() { getString(R.string.notes_move_to_archive) } binding.toolbar.menu.also { menu -> - ViewUtils.tintMenuIcon(this, menu, 0, R.drawable.ic_fluent_edit, isBgDark) - ViewUtils.tintMenuIcon(this, menu, 1, R.drawable.ic_fluent_heart, isBgDark) + ViewUtils.tintMenuIcon( + requireContext(), + menu, + 0, + R.drawable.ic_fluent_edit, + viewModel.isBgDark + ) + ViewUtils.tintMenuIcon( + requireContext(), + menu, + 1, + R.drawable.ic_fluent_heart, + viewModel.isBgDark + ) menu[3].setTitle(archiveActionTitle) menu[1].isVisible = !isArchived menu[2].isVisible = !isArchived @@ -219,35 +249,29 @@ class NotePreviewActivity : BindingActivity() { } private fun editNote() { - LoginApi.openLogged(this, CreateNoteActivity::class.java) { + LoginApi.openLogged(requireContext(), CreateNoteActivity::class.java) { putExtra(IntentKeys.INTENT_ID, viewModel.key) } } private fun moveToStatus() { val uiNotePreview = viewModel.note.value ?: return - permissionFlowDelegate.with { - askPermission(Permissions.POST_NOTIFICATION) { - viewModel.showNoteInNotification(uiNotePreview.id) - } + permissionFlow.askPermission(Permissions.POST_NOTIFICATION) { + viewModel.showNoteInNotification(uiNotePreview.id) } } - override fun handleBackPress(): Boolean { - closeWindow() - return true - } - private fun showNote(uiNotePreview: UiNotePreview) { + viewModel.saveStatusBarColor(activity?.window?.statusBarColor ?: -1) showImages(uiNotePreview.images) binding.noteText.text = uiNotePreview.text binding.noteText.typeface = uiNotePreview.typeface binding.noteText.setTextSize(TypedValue.COMPLEX_UNIT_SP, uiNotePreview.textSize) - window.statusBarColor = uiNotePreview.backgroundColor - window.navigationBarColor = uiNotePreview.backgroundColor + activity?.window?.statusBarColor = uiNotePreview.backgroundColor + activity?.window?.navigationBarColor = uiNotePreview.backgroundColor binding.windowBackground.setBackgroundColor(uiNotePreview.backgroundColor) - isBgDark = if (uiNotePreview.opacity.isAlmostTransparent()) { - isDarkMode + viewModel.isBgDark = if (uiNotePreview.opacity.isAlmostTransparent()) { + isDark } else { uiNotePreview.backgroundColor.isColorDark() } @@ -257,7 +281,7 @@ class NotePreviewActivity : BindingActivity() { } private fun updateTextColors() { - val textColor = if (isBgDark) { + val textColor = if (viewModel.isBgDark) { colorOf(R.color.pureWhite) } else { colorOf(R.color.pureBlack) @@ -283,24 +307,20 @@ class NotePreviewActivity : BindingActivity() { } private fun sendNote(note: NoteWithImages, file: File) { - if (isFinishing) return + if (isDetached) return if (!file.exists() || !file.canRead()) { showErrorSending() return } - TelephonyUtil.sendNote(file, this, note.note?.summary) + TelephonyUtil.sendNote(file, requireContext(), note.note?.summary) } private fun showErrorSending() { toast(R.string.error_sending) } - private fun closeWindow() { - uiHandler.post { finishAfterTransition() } - } - private fun showDeleteDialog() { - val builder = dialogues.getMaterialDialog(this) + val builder = dialogues.getMaterialDialog(requireContext()) builder.setMessage(getString(R.string.delete_this_note)) builder.setPositiveButton(getString(R.string.yes)) { dialog, _ -> dialog.dismiss() @@ -309,4 +329,8 @@ class NotePreviewActivity : BindingActivity() { builder.setNegativeButton(getString(R.string.no)) { dialog, _ -> dialog.dismiss() } builder.create().show() } + + companion object { + private const val TAG = "PreviewNoteFragment" + } } diff --git a/app/src/main/java/com/elementary/tasks/notes/preview/NotePreviewViewModel.kt b/app/src/main/java/com/elementary/tasks/notes/preview/PreviewNoteViewModel.kt similarity index 91% rename from app/src/main/java/com/elementary/tasks/notes/preview/NotePreviewViewModel.kt rename to app/src/main/java/com/elementary/tasks/notes/preview/PreviewNoteViewModel.kt index 490c04c25..2a91d5124 100644 --- a/app/src/main/java/com/elementary/tasks/notes/preview/NotePreviewViewModel.kt +++ b/app/src/main/java/com/elementary/tasks/notes/preview/PreviewNoteViewModel.kt @@ -1,5 +1,6 @@ package com.elementary.tasks.notes.preview +import androidx.annotation.ColorInt import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.viewModelScope import com.elementary.tasks.R @@ -9,13 +10,8 @@ import com.elementary.tasks.core.data.adapter.note.UiNoteNotificationAdapter import com.elementary.tasks.core.data.adapter.note.UiNotePreviewAdapter import com.elementary.tasks.core.data.repository.NoteImageRepository import com.elementary.tasks.core.data.ui.note.UiNotePreview -import com.github.naz013.common.intent.IntentKeys -import com.github.naz013.feature.common.coroutine.DispatcherProvider import com.elementary.tasks.core.utils.Notifier -import com.github.naz013.common.TextProvider import com.elementary.tasks.core.utils.io.BackupTool -import com.github.naz013.feature.common.viewmodel.mutableLiveDataOf -import com.github.naz013.feature.common.livedata.toLiveData import com.elementary.tasks.core.utils.withUIContext import com.elementary.tasks.core.utils.work.WorkerLauncher import com.elementary.tasks.notes.preview.reminders.ReminderToUiNoteAttachedReminder @@ -25,14 +21,20 @@ import com.elementary.tasks.reminder.work.ReminderSingleBackupWorker import com.github.naz013.analytics.AnalyticsEventSender import com.github.naz013.analytics.Screen import com.github.naz013.analytics.ScreenUsedEvent +import com.github.naz013.common.TextProvider +import com.github.naz013.common.intent.IntentKeys import com.github.naz013.domain.note.NoteWithImages +import com.github.naz013.feature.common.coroutine.DispatcherProvider +import com.github.naz013.feature.common.livedata.toLiveData +import com.github.naz013.feature.common.livedata.toSingleEvent +import com.github.naz013.feature.common.viewmodel.mutableLiveDataOf import com.github.naz013.repository.NoteRepository import com.github.naz013.repository.ReminderRepository import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.io.File -class NotePreviewViewModel( +class PreviewNoteViewModel( val key: String, dispatcherProvider: DispatcherProvider, private val workerLauncher: WorkerLauncher, @@ -49,7 +51,7 @@ class NotePreviewViewModel( ) : BaseProgressViewModel(dispatcherProvider) { private val _sharedFile = mutableLiveDataOf>() - val sharedFile = _sharedFile.toLiveData() + val sharedFile = _sharedFile.toSingleEvent() private val _note = mutableLiveDataOf() val note = _note.toLiveData() @@ -58,6 +60,24 @@ class NotePreviewViewModel( val reminders = _reminders.toLiveData() var hasSameInDb: Boolean = false + var isBgDark: Boolean = false + private var initStatusBarColor: Int = -1 + private var statusBarColorSaved: Boolean = false + + @ColorInt + fun getStatusBarColor(): Int? { + return if (statusBarColorSaved) { + initStatusBarColor.takeIf { it != -1 } + } else { + null + } + } + + fun saveStatusBarColor(@ColorInt color: Int) { + if (statusBarColorSaved) return + initStatusBarColor = color + statusBarColorSaved = true + } override fun onCreate(owner: LifecycleOwner) { super.onCreate(owner) diff --git a/app/src/main/java/com/elementary/tasks/reminder/preview/PreviewReminderFragment.kt b/app/src/main/java/com/elementary/tasks/reminder/preview/PreviewReminderFragment.kt index 85a2596bb..81abc9913 100644 --- a/app/src/main/java/com/elementary/tasks/reminder/preview/PreviewReminderFragment.kt +++ b/app/src/main/java/com/elementary/tasks/reminder/preview/PreviewReminderFragment.kt @@ -16,7 +16,6 @@ import com.elementary.tasks.databinding.FragmentReminderPreviewBinding import com.elementary.tasks.navigation.toolbarfragment.BaseToolbarFragment import com.elementary.tasks.notes.preview.ImagePreviewActivity import com.elementary.tasks.notes.preview.ImagesSingleton -import com.elementary.tasks.notes.preview.NotePreviewActivity import com.elementary.tasks.reminder.preview.adapter.ReminderPreviewDataAdapter import com.github.naz013.common.datetime.DateTimeManager import com.github.naz013.common.intent.IntentKeys @@ -158,8 +157,11 @@ class PreviewReminderFragment : BaseToolbarFragment diff --git a/app/src/main/res/menu/activity_preview_note.xml b/app/src/main/res/menu/fragment_note_preview.xml similarity index 100% rename from app/src/main/res/menu/activity_preview_note.xml rename to app/src/main/res/menu/fragment_note_preview.xml diff --git a/app/src/main/res/navigation/home_nav.xml b/app/src/main/res/navigation/home_nav.xml index e3f48f4e6..52cdd6671 100644 --- a/app/src/main/res/navigation/home_nav.xml +++ b/app/src/main/res/navigation/home_nav.xml @@ -46,6 +46,9 @@ + + + tools:layout="@layout/fragment_notes" > + + + + + diff --git a/appwidgets/src/main/kotlin/com/github/naz013/appwidgets/AppWidgetActionActivity.kt b/appwidgets/src/main/kotlin/com/github/naz013/appwidgets/AppWidgetActionActivity.kt index d00cd145d..5d85a3224 100644 --- a/appwidgets/src/main/kotlin/com/github/naz013/appwidgets/AppWidgetActionActivity.kt +++ b/appwidgets/src/main/kotlin/com/github/naz013/appwidgets/AppWidgetActionActivity.kt @@ -116,7 +116,8 @@ internal class AppWidgetActionActivity : LightThemedActivity() { screen = DestinationScreen.NotePreview, extras = bundle, flags = Intent.FLAG_ACTIVITY_NEW_TASK, - isLoggedIn = true + isLoggedIn = true, + action = Intent.ACTION_VIEW ) ) } diff --git a/navigation-api/src/main/kotlin/com/github/naz013/navigation/DeepLinkDestination.kt b/navigation-api/src/main/kotlin/com/github/naz013/navigation/DeepLinkDestination.kt index cbc2b113e..2073cc3ee 100644 --- a/navigation-api/src/main/kotlin/com/github/naz013/navigation/DeepLinkDestination.kt +++ b/navigation-api/src/main/kotlin/com/github/naz013/navigation/DeepLinkDestination.kt @@ -64,3 +64,8 @@ data class ViewReminderScreen( data class EditReminderScreen( override val extras: Bundle ) : DeepLinkDestination() + +@Parcelize +data class ViewNoteScreen( + override val extras: Bundle +) : DeepLinkDestination()