diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt index ed9b6b4fad..998c9bebda 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogFragment.kt @@ -88,6 +88,7 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal override fun onMenuItemSelected(menuItem: MenuItem): Boolean { when (menuItem.itemId) { + R.id.action_clear_call_history -> clearCallHistory() R.id.action_settings -> startActivity(AppSettingsActivity.home(requireContext())) R.id.action_notification_profile -> NotificationProfileSelectionFragment.show(parentFragmentManager) R.id.action_filter_missed_calls -> filterMissedCalls() @@ -386,6 +387,29 @@ class CallLogFragment : Fragment(R.layout.call_log_fragment), CallLogAdapter.Cal binding.recyclerCoordinatorAppBar.setExpanded(false, true) } + private fun clearCallHistory() { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.CallLogFragment__clear_call_history_question) + .setMessage(R.string.CallLogFragment__this_will_permanently_delete_all_call_history) + .setPositiveButton(android.R.string.ok) { _, _ -> + callLogActionMode.end() + viewModel.stageDeleteAll() + Snackbar + .make( + binding.root, + R.string.CallLogFragment__cleared_call_history, + Snackbar.LENGTH_SHORT + ) + .addCallback(SnackbarDeletionCallback()) + .setAction(R.string.CallLogFragment__undo) { + viewModel.cancelStagedDeletion() + } + .show() + } + .setNegativeButton(android.R.string.cancel, null) + .show() + } + private fun isSearchOpen(): Boolean { return isSearchVisible() || viewModel.hasSearchQuery } diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogViewModel.kt index c09437749d..dc2f396219 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogViewModel.kt @@ -123,6 +123,20 @@ class CallLogViewModel( } } + fun stageDeleteAll() { + callLogStore.state.stagedDeletion?.cancel() + callLogStore.update { + it.copy( + selectionState = CallLogSelectionState.empty(), + stagedDeletion = CallLogStagedDeletion( + it.filter, + CallLogSelectionState.selectAll(), + callLogRepository + ) + ) + } + } + fun commitStagedDeletion() { callLogStore.state.stagedDeletion?.commit() callLogStore.update { diff --git a/app/src/main/res/menu/calls_tab_menu.xml b/app/src/main/res/menu/calls_tab_menu.xml index d0679d8975..7a7e3cd9aa 100644 --- a/app/src/main/res/menu/calls_tab_menu.xml +++ b/app/src/main/res/menu/calls_tab_menu.xml @@ -1,5 +1,6 @@