Skip to content

Commit

Permalink
Allow notifications from history to be deleted one at a time or all a…
Browse files Browse the repository at this point in the history
…t once (#1058)
  • Loading branch information
dshokouhi committed Oct 16, 2020
1 parent 40c8596 commit c620bba
Show file tree
Hide file tree
Showing 7 changed files with 151 additions and 12 deletions.
Expand Up @@ -4,6 +4,7 @@ import android.os.Bundle
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.database.AppDatabase
import io.homeassistant.companion.android.database.notification.NotificationItem
import java.util.Calendar
import java.util.GregorianCalendar
Expand All @@ -24,6 +25,7 @@ class NotificationDetailFragment(
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

addPreferencesFromResource(R.xml.notification_detail)

findPreference<Preference>("received_at")?.let {
val cal: Calendar = GregorianCalendar()
cal.timeInMillis = notification.received
Expand All @@ -37,5 +39,40 @@ class NotificationDetailFragment(
findPreference<Preference>("data")?.let {
it.summary = notification.data
}

findPreference<Preference>("delete_notification")?.let {
it.setOnPreferenceClickListener {

deleteConfirmation()

return@setOnPreferenceClickListener true
}
}
}

private fun deleteConfirmation() {
val notificationDao = AppDatabase.getInstance(requireContext()).notificationDao()

val builder: android.app.AlertDialog.Builder = android.app.AlertDialog.Builder(requireContext())

builder.setTitle(R.string.confirm_delete_this_notification_title)
builder.setMessage(R.string.confirm_delete_this_notification_message)

builder.setPositiveButton(
R.string.confirm_positive
) { dialog, _ ->
notificationDao.delete(notification.id)
dialog.dismiss()
parentFragmentManager.popBackStack()
}

builder.setNegativeButton(
R.string.confirm_negative
) { dialog, _ -> // Do nothing
dialog.dismiss()
}

val alert: android.app.AlertDialog? = builder.create()
alert?.show()
}
}
@@ -1,11 +1,13 @@
package io.homeassistant.companion.android.settings.notification

import android.app.AlertDialog
import android.os.Bundle
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.database.AppDatabase
import io.homeassistant.companion.android.database.notification.NotificationDao
import java.util.Calendar
import java.util.GregorianCalendar

Expand All @@ -18,16 +20,19 @@ class NotificationHistoryFragment : PreferenceFragmentCompat() {
}

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

setPreferencesFromResource(R.xml.notifications, rootKey)
}

override fun onResume() {
super.onResume()

val notificationDao = AppDatabase.getInstance(requireContext()).notificationDao()
val notificationList = notificationDao.getLast25()

val prefCategory = PreferenceCategory(preferenceScreen.context)
val prefCategory = findPreference<PreferenceCategory>("list_notifications")
if (!notificationList.isNullOrEmpty()) {
prefCategory.title = requireContext().getString(R.string.last_25_notifications)
prefCategory.isIconSpaceReserved = false
preferenceScreen.addPreference(prefCategory)
prefCategory?.isVisible = true
prefCategory?.removeAll()
for (item in notificationList) {
val pref = Preference(preferenceScreen.context)
val cal: Calendar = GregorianCalendar()
Expand All @@ -51,12 +56,54 @@ class NotificationHistoryFragment : PreferenceFragmentCompat() {
return@setOnPreferenceClickListener true
}

prefCategory.addPreference(pref)
prefCategory?.addPreference(pref)
}

findPreference<PreferenceCategory>("manage_notifications")?.let {
it.isVisible = true
}

findPreference<Preference>("delete_all")?.let {
it.isVisible = true
it.setOnPreferenceClickListener { _ ->
deleteAllConfirmation(notificationDao)
return@setOnPreferenceClickListener true
}
}
} else {
findPreference<PreferenceCategory>("manage_notifications")?.let {
it.isVisible = false
}
findPreference<PreferenceCategory>("list_notifications")?.let {
it.isVisible = false
}
findPreference<Preference>("no_notifications")?.let {
it.isVisible = true
}
}
}

private fun deleteAllConfirmation(notificationDao: NotificationDao) {
val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext())

builder.setTitle(R.string.confirm_delete_all_notification_title)
builder.setMessage(R.string.confirm_delete_all_notification_message)

builder.setPositiveButton(
R.string.confirm_positive
) { dialog, _ ->
notificationDao.deleteAll()
dialog.dismiss()
parentFragmentManager.popBackStack()
}

builder.setNegativeButton(
R.string.confirm_negative
) { dialog, _ -> // Do nothing
dialog.dismiss()
}

val alert: AlertDialog? = builder.create()
alert?.show()
}
}
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorAccent"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_ringer_mute.xml
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="28dp"
android:height="28dp"
android:viewportWidth="48.0"
android:viewportHeight="48.0">
<path
android:fillColor="@color/colorAccent"
android:pathData="M23.000000,44.000000c2.200000,0.000000 4.000000,-1.800000 4.000000,-4.000000l-8.000000,0.000000C19.000000,42.200001 20.799999,44.000000 23.000000,44.000000zM36.000000,21.000000c0.000000,-6.100000 -4.300000,-11.300000 -10.000000,-12.600000L26.000000,7.000000c0.000000,-1.700000 -1.300000,-3.000000 -3.000000,-3.000000c-1.700000,0.000000 -3.000000,1.300000 -3.000000,3.000000l0.000000,1.400000c-1.000000,0.200000 -2.000000,0.600000 -2.900000,1.100000L36.000000,28.400000L36.000000,21.000000zM35.500000,38.000000l4.000000,4.000000l2.500000,-2.500000L8.500000,6.000000L6.000000,8.500000l5.800000,5.800000C10.700000,16.299999 10.000000,18.600000 10.000000,21.000000l0.000000,11.000000l-4.000000,4.000000l0.000000,2.000000L35.500000,38.000000z"/>
</vector>
10 changes: 10 additions & 0 deletions app/src/main/res/values/strings.xml
Expand Up @@ -167,6 +167,16 @@ Home Assistant instance</string>
<string name="notification_dismiss_failure">Failed to send event on notification dismissed</string>
<string name="notification_data">Full Notification Data</string>
<string name="notification_history">Notification History</string>
<string name="manage_all_notifications">Manage All Notifications</string>
<string name="manage_this_notification">Manage This Notification</string>
<string name="delete_all_notifications">Delete all notifications from history</string>
<string name="delete_this_notification">Delete this notification from history</string>
<string name="confirm_delete_this_notification_title">Confirm deleting this notification</string>
<string name="confirm_delete_this_notification_message">Are you sure? This cannot be undone</string>
<string name="confirm_delete_all_notification_title">Confirm deleting all notifications</string>
<string name="confirm_delete_all_notification_message">Are you sure? This cannot be undone</string>
<string name="confirm_positive">YES</string>
<string name="confirm_negative">NO</string>
<string name="notification_history_summary">History of Notifications (currently displays the last 25 notifications received)</string>
<string name="notification_message">Message</string>
<string name="notification_received_at">Notification Received At</string>
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/xml/notification_detail.xml
Expand Up @@ -20,4 +20,13 @@
app:title="@string/notification_data"
app:iconSpaceReserved="false"
app:enableCopying="true" />
<PreferenceCategory
app:key="manage_this_notification"
app:iconSpaceReserved="false"
app:title="@string/manage_this_notification">
<Preference
app:key="delete_notification"
app:icon="@drawable/ic_delete"
app:title="@string/delete_this_notification"/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>
30 changes: 24 additions & 6 deletions app/src/main/res/xml/notifications.xml
Expand Up @@ -2,10 +2,28 @@
<androidx.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
android:key="no_notifications"
android:title="@string/no_notifications"
android:summary="@string/no_notifications_summary"
android:selectable="false"
app:isPreferenceVisible="false" />
<Preference
android:key="no_notifications"
android:title="@string/no_notifications"
android:summary="@string/no_notifications_summary"
android:selectable="false"
app:icon="@drawable/ic_ringer_mute"
app:isPreferenceVisible="false" />

<PreferenceCategory
android:key="manage_notifications"
android:title="@string/manage_all_notifications"
app:isPreferenceVisible="false"
app:iconSpaceReserved="false">
<Preference
android:key="delete_all"
android:title="@string/delete_all_notifications"
app:icon="@drawable/ic_delete"
app:isPreferenceVisible="false" />
</PreferenceCategory>
<PreferenceCategory
android:key="list_notifications"
android:title="@string/last_25_notifications"
app:iconSpaceReserved="false"
app:isPreferenceVisible="false" />
</androidx.preference.PreferenceScreen>

0 comments on commit c620bba

Please sign in to comment.