From 39009b4ad73d5017295b30fb18a77224195f06af Mon Sep 17 00:00:00 2001 From: zachh Date: Mon, 12 Feb 2018 16:49:00 -0800 Subject: Mark calls as read in new call log. Playing with the existing app, the missed call becomes unbolded when: 1) Expanding the row. The closest analog of this is in the new UI is opening the bottom sheet, I've done that. 2) Swiping away from the call history tab. This can't be done in NewCallLogFragment because it doesn't know if the user is selected a new tab or pressed Home. So, I implemented this in NewMainActivityPeer. 3) After viewing the call log for 3(ish) seconds and leaving the activity pressing Home/Back. This is best done in NewCallLogFragment#onResume since MainActivity doesn't always know when the fragment is being displayed (it could be done after the user comes back to the app after pressing Home for example). Note that the notification is also removed in all of these cases. Also note that dismissing the notification makes the call unbolded (but this case already appears to be handled via the system call log content observer). Also, as part of writing tests for this, I made TestCallLogProvider more realistic. Bug: 70989622 Test: manual PiperOrigin-RevId: 185457438 Change-Id: Ib360d3bc73083bd1a018ed98e2b7d9a69fb7fafb --- .../missedcalls/MissedCallConstants.java | 36 ++++++++++++++++ .../MissedCallNotificationCanceller.java | 48 ++++++++++++++++++++++ .../missedcalls/MissedCallNotificationTags.java | 29 +++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 java/com/android/dialer/notification/missedcalls/MissedCallConstants.java create mode 100644 java/com/android/dialer/notification/missedcalls/MissedCallNotificationCanceller.java create mode 100644 java/com/android/dialer/notification/missedcalls/MissedCallNotificationTags.java (limited to 'java/com/android/dialer/notification') diff --git a/java/com/android/dialer/notification/missedcalls/MissedCallConstants.java b/java/com/android/dialer/notification/missedcalls/MissedCallConstants.java new file mode 100644 index 000000000..8553ea58e --- /dev/null +++ b/java/com/android/dialer/notification/missedcalls/MissedCallConstants.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dialer.notification.missedcalls; + +/** Constants related to missed call notifications. */ +public final class MissedCallConstants { + + /** Prefix used to generate a unique tag for each missed call notification. */ + public static final String NOTIFICATION_TAG_PREFIX = "MissedCall_"; + + /** Common ID for all missed call notifications. */ + public static final int NOTIFICATION_ID = 1; + + /** Tag for the group summary notification. */ + public static final String GROUP_SUMMARY_NOTIFICATION_TAG = "GroupSummary_MissedCall"; + + /** + * Key used to associate all missed call notifications and the summary as belonging to a single + * group. + */ + public static final String GROUP_KEY = "MissedCallGroup"; +} diff --git a/java/com/android/dialer/notification/missedcalls/MissedCallNotificationCanceller.java b/java/com/android/dialer/notification/missedcalls/MissedCallNotificationCanceller.java new file mode 100644 index 000000000..8798c2127 --- /dev/null +++ b/java/com/android/dialer/notification/missedcalls/MissedCallNotificationCanceller.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.dialer.notification.missedcalls; + +import android.content.Context; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import com.android.dialer.common.LogUtil; +import com.android.dialer.notification.DialerNotificationManager; +import com.android.dialer.notification.NotificationManagerUtils; + +/** Cancels missed calls notifications. */ +public final class MissedCallNotificationCanceller { + + /** Cancels all missed call notifications. */ + public static void cancelAll(@NonNull Context context) { + NotificationManagerUtils.cancelAllInGroup(context, MissedCallConstants.GROUP_KEY); + } + + /** Cancels a missed call notification for a single call. */ + public static void cancelSingle(@NonNull Context context, @Nullable Uri callUri) { + if (callUri == null) { + LogUtil.e( + "MissedCallNotificationCanceller.cancelSingle", + "unable to cancel notification, uri is null"); + return; + } + // This will also dismiss the group summary if there are no more missed call notifications. + DialerNotificationManager.cancel( + context, + MissedCallNotificationTags.getNotificationTagForCallUri(callUri), + MissedCallConstants.NOTIFICATION_ID); + } +} diff --git a/java/com/android/dialer/notification/missedcalls/MissedCallNotificationTags.java b/java/com/android/dialer/notification/missedcalls/MissedCallNotificationTags.java new file mode 100644 index 000000000..64f28eeec --- /dev/null +++ b/java/com/android/dialer/notification/missedcalls/MissedCallNotificationTags.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dialer.notification.missedcalls; + +import android.net.Uri; +import android.support.annotation.NonNull; + +/** Static methods related to missed call notification tags. */ +public final class MissedCallNotificationTags { + + /** Gets the notification tag for a single call. */ + public static String getNotificationTagForCallUri(@NonNull Uri callUri) { + return MissedCallConstants.NOTIFICATION_TAG_PREFIX + callUri; + } +} -- cgit v1.2.3