From 53dcbec2a441db541fbb3932730ca16855a8410e Mon Sep 17 00:00:00 2001 From: Uchenna Okoye Date: Tue, 12 Oct 2021 13:08:43 -0700 Subject: Message list should update if a message is sent while the main activity is paused. Bug: 202322468, 197674787, 202427652 PiperOrigin-RevId: 402636807 Change-Id: I05e66762e9f9ed95be5e5d2dbf15aa5a5cbf4b6f --- .../car/messenger/core/interfaces/DataModel.java | 6 +-- .../core/ui/launcher/MessageLauncherActivity.java | 2 +- .../impl/datamodels/ConversationListLiveData.java | 2 + .../messenger/impl/datamodels/RefreshLiveData.java | 46 ++++++++++++++++++++++ .../impl/datamodels/TelephonyDataModel.java | 4 +- 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 src/com/android/car/messenger/impl/datamodels/RefreshLiveData.java diff --git a/src/com/android/car/messenger/core/interfaces/DataModel.java b/src/com/android/car/messenger/core/interfaces/DataModel.java index 2822ecf..b634d4c 100644 --- a/src/com/android/car/messenger/core/interfaces/DataModel.java +++ b/src/com/android/car/messenger/core/interfaces/DataModel.java @@ -41,10 +41,10 @@ public interface DataModel { LiveData> getAccounts(); /** - * Call this to reload user account live data. This is useful when resuming an activity, to - * ensure no account changes was missed. + * Call this to reload data. This is useful when resuming an activity, to ensure no account + * changes was missed or other changes were missed. */ - void refreshUserAccounts(); + void refresh(); /** * Get collection of conversations for the given account. diff --git a/src/com/android/car/messenger/core/ui/launcher/MessageLauncherActivity.java b/src/com/android/car/messenger/core/ui/launcher/MessageLauncherActivity.java index 0c114cc..beed82c 100644 --- a/src/com/android/car/messenger/core/ui/launcher/MessageLauncherActivity.java +++ b/src/com/android/car/messenger/core/ui/launcher/MessageLauncherActivity.java @@ -75,7 +75,7 @@ public class MessageLauncherActivity extends FragmentActivity implements InsetsC @Override protected void onResume() { L.d("On Resume of Message Activity."); - AppFactory.get().getDataModel().refreshUserAccounts(); + AppFactory.get().getDataModel().refresh(); super.onResume(); } diff --git a/src/com/android/car/messenger/impl/datamodels/ConversationListLiveData.java b/src/com/android/car/messenger/impl/datamodels/ConversationListLiveData.java index 5e71513..fa91f65 100644 --- a/src/com/android/car/messenger/impl/datamodels/ConversationListLiveData.java +++ b/src/com/android/car/messenger/impl/datamodels/ConversationListLiveData.java @@ -59,6 +59,8 @@ class ConversationListLiveData extends ContentProviderLiveData onDataChange()); } @Override diff --git a/src/com/android/car/messenger/impl/datamodels/RefreshLiveData.java b/src/com/android/car/messenger/impl/datamodels/RefreshLiveData.java new file mode 100644 index 0000000..0ca75bd --- /dev/null +++ b/src/com/android/car/messenger/impl/datamodels/RefreshLiveData.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2021 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.car.messenger.impl.datamodels; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; + +/** + * Refresh live data for other live data to force refresh. When a live data listens for updates, it + * can refresh its data and repost as needed. This typically occurs when the user revisits the + * activity from the background. The background has a number of states that leads to live datas not + * being updated. The content observer from the telephony database does not always update when in + * the background if something changes. Same thing occurs with shared preferences. By checking the + * data again for any stale data when we resume, we can ensure the latest data is provided. + */ +public class RefreshLiveData extends LiveData { + + @Nullable private static RefreshLiveData sInstance; + + /** Gets the instance of {@link RefreshLiveData} */ + @NonNull + public static RefreshLiveData getInstance() { + if (sInstance == null) { + sInstance = new RefreshLiveData(); + } + return sInstance; + } + + public void refresh() { + postValue(true); + } +} diff --git a/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java b/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java index 82a3d0a..4de3433 100644 --- a/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java +++ b/src/com/android/car/messenger/impl/datamodels/TelephonyDataModel.java @@ -43,7 +43,6 @@ import java.util.Set; /** Queries the telephony data model to retrieve the SMS/MMS messages */ public class TelephonyDataModel implements DataModel { - @NonNull @Override public LiveData> getAccounts() { @@ -52,8 +51,9 @@ public class TelephonyDataModel implements DataModel { } @Override - public void refreshUserAccounts() { + public void refresh() { UserAccountLiveData.getInstance().refresh(); + RefreshLiveData.getInstance().refresh(); } @NonNull -- cgit v1.2.3