Messaging: Remove compatibility for old android versions

Change-Id: Id9065d60525a509271a0e64c0e349e857cb998e2
This commit is contained in:
Michael W
2024-12-26 14:55:12 +01:00
parent 9bbc7a8f99
commit 7c55a6d56a
104 changed files with 580 additions and 2306 deletions
@@ -45,7 +45,6 @@ import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
import com.android.messaging.util.AvatarUriUtil;
import com.android.messaging.util.ContentType;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PhoneUtils;
import com.android.messaging.util.UriUtil;
import com.android.messaging.widget.WidgetConversationProvider;
@@ -567,7 +566,7 @@ public class BugleDatabaseOperations {
// reading and if necessary creating the conversation.
updateConversationRow(dbWrapper, conversationId, values);
if (shouldAutoSwitchSelfId && OsUtil.isAtLeastL_MR1()) {
if (shouldAutoSwitchSelfId) {
// Normally, the draft message compose UI trusts its UI state for providing up-to-date
// conversation self id. Therefore, notify UI through local broadcast receiver about
// this external change so the change can be properly reflected.
@@ -624,7 +623,7 @@ public class BugleDatabaseOperations {
static boolean addSelfIdAutoSwitchInfoToContentValues(final DatabaseWrapper dbWrapper,
final MessageData message, final String conversationId, final ContentValues values) {
// Only auto switch conversation self for incoming messages.
if (!OsUtil.isAtLeastL_MR1() || !message.getIsIncoming()) {
if (!message.getIsIncoming()) {
return false;
}
@@ -77,7 +77,6 @@ import com.android.messaging.util.ImageUtils;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.NotificationPlayer;
import com.android.messaging.util.NotificationsUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PendingIntentConstants;
import com.android.messaging.util.PhoneUtils;
import com.android.messaging.util.ThreadUtil;
@@ -429,7 +428,7 @@ public class BugleNotifications {
if (state.mParticipantAvatarsUris != null) {
final Uri avatarUri = state.mParticipantAvatarsUris.get(0);
final AvatarRequestDescriptor descriptor = new AvatarRequestDescriptor(avatarUri,
sIconWidth, sIconHeight, OsUtil.isAtLeastL());
sIconWidth, sIconHeight, true);
final MediaRequest<ImageResource> imageRequest = descriptor.buildSyncMediaRequest(
context);
@@ -676,7 +675,6 @@ public class BugleNotifications {
MediaRequest<ImageResource> imageRequest;
if (isVideo) {
Assert.isTrue(VideoThumbnailRequest.shouldShowIncomingVideoThumbnails());
final MessagePartVideoThumbnailRequestDescriptor videoDescriptor =
new MessagePartVideoThumbnailRequestDescriptor(attachmentUri);
imageRequest = videoDescriptor.buildSyncMediaRequest(context);
@@ -54,7 +54,6 @@ import com.android.messaging.util.Assert;
import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
import com.android.messaging.util.ConnectivityUtil;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PhoneUtils;
import java.util.concurrent.ConcurrentHashMap;
@@ -66,8 +65,6 @@ public class DataModelImpl extends DataModel {
private final DatabaseHelper mDatabaseHelper;
private final SyncManager mSyncManager;
// Cached ConnectivityUtil instance for Pre-N.
private static ConnectivityUtil sConnectivityUtilInstanceCachePreN = null;
// Cached ConnectivityUtil subId->instance for N and beyond
private static final ConcurrentHashMap<Integer, ConnectivityUtil>
sConnectivityUtilInstanceCacheN = new ConcurrentHashMap<>();
@@ -214,35 +211,27 @@ public class DataModelImpl extends DataModel {
@Override
public void onApplicationCreated() {
if (OsUtil.isAtLeastN()) {
createConnectivityUtilForEachActiveSubscription();
} else {
sConnectivityUtilInstanceCachePreN = new ConnectivityUtil(mContext);
}
createConnectivityUtilForEachActiveSubscription();
FixupMessageStatusOnStartupAction.fixupMessageStatus();
ProcessPendingMessagesAction.processFirstPendingMessage();
SyncManager.immediateSync();
if (OsUtil.isAtLeastL_MR1()) {
// Start listening for subscription change events for refreshing any data associated
// with subscriptions.
PhoneUtils.getDefault().toLMr1().registerOnSubscriptionsChangedListener(
new SubscriptionManager.OnSubscriptionsChangedListener() {
@Override
public void onSubscriptionsChanged() {
// TODO: This dynamically changes the mms config that app is
// currently using. It may cause inconsistency in some cases. We need
// to check the usage of mms config and handle the dynamic change
// gracefully
MmsConfig.loadAsync();
ParticipantRefresh.refreshSelfParticipants();
if (OsUtil.isAtLeastN()) {
createConnectivityUtilForEachActiveSubscription();
}
}
});
}
// Start listening for subscription change events for refreshing any data associated
// with subscriptions.
PhoneUtils.getDefault().registerOnSubscriptionsChangedListener(
new SubscriptionManager.OnSubscriptionsChangedListener() {
@Override
public void onSubscriptionsChanged() {
// TODO: This dynamically changes the mms config that app is
// currently using. It may cause inconsistency in some cases. We need
// to check the usage of mms config and handle the dynamic change
// gracefully
MmsConfig.loadAsync();
ParticipantRefresh.refreshSelfParticipants();
createConnectivityUtilForEachActiveSubscription();
}
});
}
private void createConnectivityUtilForEachActiveSubscription() {
@@ -262,10 +251,6 @@ public class DataModelImpl extends DataModel {
}
public static ConnectivityUtil getConnectivityUtil(final int subId) {
if (OsUtil.isAtLeastN()) {
return sConnectivityUtilInstanceCacheN.get(subId);
} else {
return sConnectivityUtilInstanceCachePreN;
}
return sConnectivityUtilInstanceCacheN.get(subId);
}
}
@@ -25,7 +25,6 @@ import android.provider.ContactsContract.Contacts;
import com.android.messaging.util.FallbackStrategies;
import com.android.messaging.util.FallbackStrategies.Strategy;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
/**
* Helper for querying frequent (and/or starred) contacts.
@@ -90,9 +89,7 @@ public class FrequentContactsCursorQueryData extends CursorQueryData {
// queries. Using strequent_phone_only query as a fallback to display only phone
// contacts. This is the last-ditch effort; if this fails, we will display an
// empty frequent list (b/18354836).
final String strequentQueryParam = OsUtil.isAtLeastL() ?
ContactsContract.STREQUENT_PHONE_ONLY : "strequent_phone_only";
// TODO: Handle enterprise contacts post M once contacts provider supports it
final String strequentQueryParam = ContactsContract.STREQUENT_PHONE_ONLY;
return Contacts.CONTENT_STREQUENT_URI.buildUpon()
.appendQueryParameter(strequentQueryParam, "true").build();
}
@@ -519,8 +519,7 @@ public abstract class MessageNotificationState extends NotificationState {
if (messageCount == 1) {
final boolean shouldShowImage = ContentType.isImageType(mAttachmentType)
|| (ContentType.isVideoType(mAttachmentType)
&& VideoThumbnailRequest.shouldShowIncomingVideoThumbnails());
|| (ContentType.isVideoType(mAttachmentType));
if (mAttachmentUri != null && shouldShowImage) {
// Show "Picture" as the content
final MessageLineInfo messageLineInfo = (MessageLineInfo) lineInfos.get(0);
@@ -36,7 +36,6 @@ import com.android.messaging.datamodel.data.ConversationMessageData;
import com.android.messaging.datamodel.data.MessageData;
import com.android.messaging.datamodel.data.ParticipantData;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PhoneUtils;
import com.android.messaging.widget.BugleWidgetProvider;
import com.android.messaging.widget.WidgetConversationProvider;
@@ -448,11 +447,7 @@ public class MessagingContentProvider extends ContentProvider {
// First dump out the default SMS app package name
String defaultSmsApp = PhoneUtils.getDefault().getDefaultSmsApp();
if (TextUtils.isEmpty(defaultSmsApp)) {
if (OsUtil.isAtLeastKLP()) {
defaultSmsApp = "None";
} else {
defaultSmsApp = "None (pre-Kitkat)";
}
defaultSmsApp = "None";
}
writer.println("Default SMS app: " + defaultSmsApp);
// Now dump logs
@@ -353,14 +353,10 @@ public class ParticipantRefresh {
* that any other older SIM self participants are marked as inactive.
*/
private static void refreshSelfParticipantList() {
if (!OsUtil.isAtLeastL_MR1()) {
return;
}
final DatabaseWrapper db = DataModel.get().getDatabase();
final List<SubscriptionInfo> subInfoRecords =
PhoneUtils.getDefault().toLMr1().getActiveSubscriptionInfoList();
PhoneUtils.getDefault().getActiveSubscriptionInfoList();
final ArrayMap<Integer, SubscriptionInfo> activeSubscriptionIdToRecordMap =
new ArrayMap<Integer, SubscriptionInfo>();
db.beginTransaction();
@@ -445,13 +441,11 @@ public class ParticipantRefresh {
changed = SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED;
}
if (OsUtil.isAtLeastL_MR1()) {
// Refresh the subscription info based on information from SubscriptionManager.
final SubscriptionInfo subscriptionInfo =
PhoneUtils.get(participantData.getSubId()).toLMr1().getActiveSubscriptionInfo();
if (participantData.updateSubscriptionInfoForSelfIfChanged(subscriptionInfo)) {
changed = SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED;
}
// Refresh the subscription info based on information from SubscriptionManager.
final SubscriptionInfo subscriptionInfo =
PhoneUtils.get(participantData.getSubId()).getActiveSubscriptionInfo();
if (participantData.updateSubscriptionInfoForSelfIfChanged(subscriptionInfo)) {
changed = SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED;
}
// For self participant, try getting name/avatar from self profile in CP2 first.
@@ -36,7 +36,6 @@ import com.android.messaging.datamodel.data.ParticipantData;
import com.android.messaging.sms.MmsUtils;
import com.android.messaging.util.Assert;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PhoneUtils;
import java.util.ArrayList;
@@ -225,8 +224,7 @@ public class InsertNewMessageAction extends Action implements Parcelable {
// to bind the message to the system default subscription if it's unbound.
final ParticipantData unboundSelf = BugleDatabaseOperations.getExistingParticipant(
db, selfId);
if (unboundSelf.getSubId() == ParticipantData.DEFAULT_SELF_SUB_ID
&& OsUtil.isAtLeastL_MR1()) {
if (unboundSelf.getSubId() == ParticipantData.DEFAULT_SELF_SUB_ID) {
final int defaultSubId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
self = BugleDatabaseOperations.getOrCreateSelf(db, defaultSubId);
} else {
@@ -39,7 +39,6 @@ import com.android.messaging.util.BuglePrefsKeys;
import com.android.messaging.util.ConnectivityUtil;
import com.android.messaging.util.ConnectivityUtil.ConnectivityListener;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PhoneUtils;
import java.util.HashSet;
@@ -356,12 +355,10 @@ public class ProcessPendingMessagesAction extends Action implements Parcelable {
// Prior to L_MR1, isActiveSubscription is true always
boolean isActiveSubscription = true;
if (OsUtil.isAtLeastL_MR1()) {
final ParticipantData messageSelf =
BugleDatabaseOperations.getExistingParticipant(db, selfId);
if (messageSelf == null || !messageSelf.isActiveSubscription()) {
isActiveSubscription = false;
}
final ParticipantData messageSelf =
BugleDatabaseOperations.getExistingParticipant(db, selfId);
if (messageSelf == null || !messageSelf.isActiveSubscription()) {
isActiveSubscription = false;
}
while (cursor.moveToNext()) {
final MessageData message = new MessageData();
@@ -51,7 +51,6 @@ import com.android.messaging.util.Assert;
import com.android.messaging.util.Assert.RunsOnMainThread;
import com.android.messaging.util.ContactUtil;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import com.android.messaging.util.PhoneUtils;
import com.android.messaging.util.SafeAsyncTask;
import com.android.messaging.widget.WidgetConversationProvider;
@@ -595,7 +594,7 @@ public class ConversationData extends BindableData {
Assert.isTrue(TextUtils.equals(mConversationId, message.getConversationId()));
Assert.isTrue(binding.getData() == this);
if (!OsUtil.isAtLeastL_MR1() || message.getSelfId() == null) {
if (message.getSelfId() == null) {
InsertNewMessageAction.insertNewMessage(message);
} else {
final int systemDefaultSubId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
@@ -767,8 +766,7 @@ public class ConversationData extends BindableData {
// 1. Framework has MSIM support AND
// 2. The device has had multiple *active* subscriptions. AND
// 3. The message's subscription is active.
if (OsUtil.isAtLeastL_MR1() &&
selfParticipantsData.getSelfParticipantsCountExcludingDefault(true) > 1) {
if (selfParticipantsData.getSelfParticipantsCountExcludingDefault(true) > 1) {
return subscriptionListData.getActiveSubscriptionEntryBySelfId(selfParticipantId,
excludeDefault);
}
@@ -24,8 +24,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.android.messaging.util.OsUtil;
/**
* A class that contains the list of all self participants potentially involved in a conversation.
* This class contains both active/inactive self entries when there is multi-SIM support.
@@ -86,9 +84,6 @@ public class SelfParticipantsData {
* Returns if a given self id represents the default self.
*/
boolean isDefaultSelf(final String selfId) {
if (!OsUtil.isAtLeastL_MR1()) {
return true;
}
final ParticipantData self = getSelfParticipantById(selfId);
return self == null ? false : self.getSubId() == ParticipantData.DEFAULT_SELF_SUB_ID;
}
@@ -31,7 +31,6 @@ import com.android.messaging.datamodel.binding.BindableData;
import com.android.messaging.datamodel.binding.BindingBase;
import com.android.messaging.util.Assert;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import java.util.ArrayList;
import java.util.List;
@@ -200,7 +199,7 @@ public class SettingsData extends BindableData implements
// platorm is at least L-MR1 and there are multiple active SIMs.
final int activeSubCountExcludingDefault =
mSelfParticipantsData.getSelfParticipantsCountExcludingDefault(true);
if (OsUtil.isAtLeastL_MR1() && activeSubCountExcludingDefault > 0) {
if (activeSubCountExcludingDefault > 0) {
for (ParticipantData self : selfs) {
if (!self.isDefaultSelf()) {
if (activeSubCountExcludingDefault > 1) {
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2015 The Android Open Source Project
* Copyright (C) 2024 The LineageOS Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,7 +25,6 @@ import com.android.messaging.util.Assert;
import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
import com.android.messaging.util.ImageUtils;
import com.android.messaging.util.LogUtil;
import com.android.messaging.util.OsUtil;
import java.util.List;
@@ -109,11 +109,7 @@ public class DecodedImageResource extends ImageResource {
acquireLock();
try {
Assert.notNull(mBitmap);
if (OsUtil.isAtLeastKLP()) {
return mBitmap.getAllocationByteCount();
} else {
return mBitmap.getRowBytes() * mBitmap.getHeight();
}
return mBitmap.getAllocationByteCount();
} finally {
releaseLock();
}
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2015 The Android Open Source Project
* Copyright (C) 2024 The LineageOS Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,7 +21,6 @@ import android.content.Context;
import android.graphics.Bitmap;
import com.android.messaging.util.MediaMetadataRetrieverWrapper;
import com.android.messaging.util.MediaUtil;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -28,7 +28,6 @@ import java.io.InputStream;
/**
* Class to request a video thumbnail.
* Users of this class as responsible for checking {@link #shouldShowIncomingVideoThumbnails}
*/
public class VideoThumbnailRequest extends ImageRequest<UriImageRequestDescriptor> {
@@ -37,10 +36,6 @@ public class VideoThumbnailRequest extends ImageRequest<UriImageRequestDescripto
super(context, descriptor);
}
public static boolean shouldShowIncomingVideoThumbnails() {
return MediaUtil.canAutoAccessIncomingMedia();
}
@Override
protected InputStream getInputStreamForResource() throws FileNotFoundException {
return null;