aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-08 19:06:28 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-08 19:06:28 +0000
commite12106877fa349b57165fa928418cc95ac562839 (patch)
tree2c4d53b792882bef5743a8ed8d82bc310609bd0d
parentd550d9cf0ae493ba03e3c2410aaa44bc209b8895 (diff)
parent7a010fc1d2d1afc0f9d621d90aeea27499a2bbef (diff)
downloadims-e12106877fa349b57165fa928418cc95ac562839.tar.gz
Snap for 7532648 from 7a010fc1d2d1afc0f9d621d90aeea27499a2bbef to mainline-mediaprovider-release
Change-Id: Id131196b305d6b4235c392e881ffea5a9a0af777
-rw-r--r--src/java/com/android/ims/ImsManager.java4
-rw-r--r--src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java6
-rw-r--r--src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java34
-rw-r--r--src/java/com/android/ims/rcs/uce/eab/EabUtil.java40
-rw-r--r--tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java43
5 files changed, 84 insertions, 43 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 76c98b09..345cbc51 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -2618,8 +2618,10 @@ public class ImsManager implements FeatureUpdates {
CapabilityChangeRequest request = new CapabilityChangeRequest();
updateVoiceCellFeatureValue(request, isNonTtyOrTtyOnVolteEnabled);
updateVideoCallFeatureValue(request, isNonTtyOrTtyOnVolteEnabled);
+ // update MMTEL caps for the new configuration.
+ changeMmTelCapability(request);
if (isImsNeeded(request)) {
- changeMmTelCapability(request);
+ // Only turn on IMS if voice/video is enabled now in the new configuration.
turnOnIms();
}
}
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java b/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java
index 5f2a5653..6d3eabf3 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabBulkCapabilityUpdater.java
@@ -19,8 +19,6 @@ package com.android.ims.rcs.uce.eab;
import static android.telephony.ims.RcsContactUceCapability.CAPABILITY_MECHANISM_OPTIONS;
import static android.telephony.ims.RcsContactUceCapability.CAPABILITY_MECHANISM_PRESENCE;
-import static com.android.ims.rcs.uce.eab.EabControllerImpl.getCapabilityCacheExpiration;
-
import android.app.AlarmManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -290,7 +288,7 @@ public final class EabBulkCapabilityUpdater {
Log.d(TAG, "Can't find min timestamp in eab provider");
return;
}
- expiredTimestamp += getCapabilityCacheExpiration(mSubId);
+ expiredTimestamp += mEabControllerImpl.getCapabilityCacheExpiration(mSubId);
Log.d(TAG, "set time alert at " + expiredTimestamp);
cancelTimeAlert(mContext);
setTimeAlert(mContext, expiredTimestamp);
@@ -397,7 +395,7 @@ public final class EabBulkCapabilityUpdater {
private List<Uri> getExpiredContactList() {
List<Uri> refreshList = new ArrayList<>();
long expiredTime = (System.currentTimeMillis() / 1000)
- + getCapabilityCacheExpiration(mSubId);
+ + mEabControllerImpl.getCapabilityCacheExpiration(mSubId);
String selection = "("
+ EabProvider.EabCommonColumns.MECHANISM + "=" + CAPABILITY_MECHANISM_PRESENCE
+ " AND " + EabProvider.PresenceTupleColumns.REQUEST_TIMESTAMP + "<"
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
index f59171f3..cc1011fc 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
@@ -41,9 +41,7 @@ import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsContactUceCapability.OptionsBuilder;
import android.telephony.ims.RcsContactUceCapability.PresenceBuilder;
import android.text.TextUtils;
-import android.text.format.Time;
import android.util.Log;
-import android.util.TimeFormatException;
import com.android.i18n.phonenumbers.NumberParseException;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
@@ -56,10 +54,8 @@ import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
-import java.util.GregorianCalendar;
import java.util.List;
import java.util.Objects;
-import java.util.TimeZone;
import java.util.function.Predicate;
/**
@@ -84,12 +80,19 @@ public class EabControllerImpl implements EabController {
private UceControllerCallback mUceControllerCallback;
private volatile boolean mIsSetDestroyedFlag = false;
+ private ExpirationTimeFactory mExpirationTimeFactory = () -> Instant.now().getEpochSecond();
+
@VisibleForTesting
public final Runnable mCapabilityCleanupRunnable = () -> {
Log.d(TAG, "Cleanup Capabilities");
cleanupExpiredCapabilities();
};
+ @VisibleForTesting
+ public interface ExpirationTimeFactory {
+ long getExpirationTime();
+ }
+
public EabControllerImpl(Context context, int subId, UceControllerCallback c, Looper looper) {
mContext = context;
mSubId = subId;
@@ -481,7 +484,7 @@ public class EabControllerImpl implements EabController {
return value;
}
- protected static int getCapabilityCacheExpiration(int subId) {
+ protected int getCapabilityCacheExpiration(int subId) {
int value = -1;
try {
ProvisioningManager pm = ProvisioningManager.createForSubscriptionId(subId);
@@ -498,7 +501,7 @@ public class EabControllerImpl implements EabController {
return value;
}
- protected static long getAvailabilityCacheExpiration(int subId) {
+ protected long getAvailabilityCacheExpiration(int subId) {
long value = -1;
try {
ProvisioningManager pm = ProvisioningManager.createForSubscriptionId(subId);
@@ -577,14 +580,6 @@ public class EabControllerImpl implements EabController {
}
}
- // Using the current timestamp if the timestamp doesn't populate
- Long timestamp;
- if (tuple.getTime() != null) {
- timestamp = tuple.getTime().getEpochSecond();
- } else {
- timestamp = Instant.now().getEpochSecond();
- }
-
contentValues = new ContentValues();
contentValues.put(EabProvider.PresenceTupleColumns.EAB_COMMON_ID, commonId);
contentValues.put(EabProvider.PresenceTupleColumns.BASIC_STATUS, tuple.getStatus());
@@ -593,7 +588,11 @@ public class EabControllerImpl implements EabController {
tuple.getServiceVersion());
contentValues.put(EabProvider.PresenceTupleColumns.DESCRIPTION,
tuple.getServiceDescription());
- contentValues.put(EabProvider.PresenceTupleColumns.REQUEST_TIMESTAMP, timestamp);
+
+ // Using current timestamp instead of network timestamp since there is not use cases for
+ // network timestamp and the network timestamp may cause capability expire immediately.
+ contentValues.put(EabProvider.PresenceTupleColumns.REQUEST_TIMESTAMP,
+ mExpirationTimeFactory.getExpirationTime());
contentValues.put(EabProvider.PresenceTupleColumns.CONTACT_URI,
tuple.getContactUri().toString());
if (serviceCapabilities != null) {
@@ -790,4 +789,9 @@ public class EabControllerImpl implements EabController {
}
return number;
}
+
+ @VisibleForTesting
+ public void setExpirationTimeFactory(ExpirationTimeFactory factory) {
+ mExpirationTimeFactory = factory;
+ }
}
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabUtil.java b/src/java/com/android/ims/rcs/uce/eab/EabUtil.java
index de738067..e2c21cdb 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabUtil.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabUtil.java
@@ -75,6 +75,46 @@ public class EabUtil {
}
/**
+ * Get the given EAB capability from the EAB database.
+ *
+ * Output format:
+ * [PHONE_NUMBER], [RAW_PRESENCE_ID], [PRESENCE_TIMESTAMP], [RAW_OPTION_ID], [OPTION_TIMESTAMP]
+ */
+ public static String getCapabilityFromEab(Context context, String contact) {
+ StringBuilder result = new StringBuilder();
+ try (Cursor cursor = context.getContentResolver().query(
+ EabProvider.ALL_DATA_URI,
+ new String[]{ContactColumns.PHONE_NUMBER,
+ PresenceTupleColumns._ID,
+ PresenceTupleColumns.REQUEST_TIMESTAMP,
+ OptionsColumns._ID,
+ OptionsColumns.REQUEST_TIMESTAMP},
+ ContactColumns.PHONE_NUMBER + "=?",
+ new String[]{contact}, null)) {
+ if (cursor != null && cursor.moveToFirst()) {
+ result.append(cursor.getString(cursor.getColumnIndex(
+ ContactColumns.PHONE_NUMBER)));
+ result.append(",");
+ result.append(cursor.getString(cursor.getColumnIndex(
+ PresenceTupleColumns._ID)));
+ result.append(",");
+ result.append(cursor.getString(cursor.getColumnIndex(
+ PresenceTupleColumns.REQUEST_TIMESTAMP)));
+ result.append(",");
+ result.append(cursor.getString(cursor.getColumnIndex(
+ OptionsColumns._ID)));
+ result.append(",");
+ result.append(cursor.getString(cursor.getColumnIndex(
+ OptionsColumns.REQUEST_TIMESTAMP)));
+ }
+ } catch (Exception e) {
+ Log.w(LOG_TAG, "getCapability exception " + e);
+ }
+ Log.d(LOG_TAG, "getCapabilityFromEab() result: " + result);
+ return result.toString();
+ }
+
+ /**
* Remove the given EAB contacts from the EAB database.
*/
public static int removeContactFromEab(int subId, String contacts, Context context) {
diff --git a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
index af52217d..5138445f 100644
--- a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
+++ b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
@@ -28,12 +28,14 @@ import static com.android.ims.rcs.uce.eab.EabProvider.OPTIONS_URI;
import static com.android.ims.rcs.uce.eab.EabProvider.PRESENCE_URI;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.doReturn;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Looper;
import android.os.PersistableBundle;
+import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.RcsContactPresenceTuple;
import android.telephony.ims.RcsContactUceCapability;
import android.test.mock.MockContentResolver;
@@ -48,9 +50,10 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
-import java.time.temporal.ChronoUnit;
import java.time.Instant;
+import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
@@ -67,6 +70,9 @@ public class EabControllerTest extends ImsTestBase {
PersistableBundle mBundle;
ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+ @Mock
+ EabControllerImpl.ExpirationTimeFactory mExpirationTimeFactory;
+
private static final int TEST_SUB_ID = 1;
private static final String TEST_PHONE_NUMBER = "16661234567";
private static final String TEST_SERVICE_STATUS = "status";
@@ -90,6 +96,8 @@ public class EabControllerTest extends ImsTestBase {
insertContactInfoToDB();
mEabController = new EabControllerImpl(
mContext, TEST_SUB_ID, null, Looper.getMainLooper());
+ mEabController.setExpirationTimeFactory(mExpirationTimeFactory);
+ doReturn(Instant.now().getEpochSecond()).when(mExpirationTimeFactory).getExpirationTime();
mBundle = mContextFixture.getTestCarrierConfigBundle();
}
@@ -103,7 +111,7 @@ public class EabControllerTest extends ImsTestBase {
@SmallTest
public void testGetAvailability() {
List<RcsContactUceCapability> contactList = new ArrayList<>();
- contactList.add(createPresenceCapability(false));
+ contactList.add(createPresenceCapability());
mEabController.saveCapabilities(contactList);
@@ -117,7 +125,7 @@ public class EabControllerTest extends ImsTestBase {
@SmallTest
public void testGetCapability() {
List<RcsContactUceCapability> contactList = new ArrayList<>();
- contactList.add(createPresenceCapability(false));
+ contactList.add(createPresenceCapability());
mEabController.saveCapabilities(contactList);
@@ -133,7 +141,9 @@ public class EabControllerTest extends ImsTestBase {
@SmallTest
public void testGetExpiredCapability() {
List<RcsContactUceCapability> contactList = new ArrayList<>();
- contactList.add(createPresenceCapability(true));
+ doReturn(0L).when(mExpirationTimeFactory).getExpirationTime();
+
+ contactList.add(createPresenceCapability());
mEabController.saveCapabilities(contactList);
@@ -150,13 +160,9 @@ public class EabControllerTest extends ImsTestBase {
public void testNonRcsCapability() {
// Set non-rcs capabilities expiration to 121 days
mBundle.putInt(KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT, 121 * 24 * 60 * 60);
- // Set timestamp to 120 days age
- GregorianCalendar date = new GregorianCalendar();
- date.setTimeZone(TimeZone.getTimeZone("UTC"));
- date.add(Calendar.DATE, -120);
List<RcsContactUceCapability> contactList = new ArrayList<>();
- contactList.add(createPresenceNonRcsCapability(Instant.now()));
+ contactList.add(createPresenceNonRcsCapability());
mEabController.saveCapabilities(contactList);
@@ -176,10 +182,11 @@ public class EabControllerTest extends ImsTestBase {
// Set non-rcs capabilities expiration to 119 days
mBundle.putInt(KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT, 119 * 24 * 60 * 60);
// Set timestamp to 120 days age
- Instant timestamp = Instant.now().minus(120, ChronoUnit.DAYS);
+ long timestamp = Instant.now().minus(120, ChronoUnit.DAYS).getEpochSecond();
+ doReturn(timestamp).when(mExpirationTimeFactory).getExpirationTime();
List<RcsContactUceCapability> contactList = new ArrayList<>();
- contactList.add(createPresenceNonRcsCapability(timestamp));
+ contactList.add(createPresenceNonRcsCapability());
mEabController.saveCapabilities(contactList);
// Verify result is expired
@@ -282,14 +289,7 @@ public class EabControllerTest extends ImsTestBase {
}
}
- private RcsContactUceCapability createPresenceCapability(boolean isExpired) {
- Instant timestamp;
- if (isExpired) {
- timestamp = Instant.now().minus(120, ChronoUnit.DAYS);
- } else {
- timestamp = Instant.now().plus(120, ChronoUnit.DAYS);
- }
-
+ private RcsContactUceCapability createPresenceCapability() {
RcsContactPresenceTuple.ServiceCapabilities.Builder serviceCapabilitiesBuilder =
new RcsContactPresenceTuple.ServiceCapabilities.Builder(TEST_AUDIO_CAPABLE,
TEST_VIDEO_CAPABLE);
@@ -299,7 +299,6 @@ public class EabControllerTest extends ImsTestBase {
.setServiceDescription(TEST_SERVICE_DESCRIPTION)
.setContactUri(TEST_CONTACT_URI)
.setServiceCapabilities(serviceCapabilitiesBuilder.build())
- .setTime(timestamp)
.build();
RcsContactPresenceTuple tupleWithEmptyServiceCapabilities =
@@ -307,7 +306,6 @@ public class EabControllerTest extends ImsTestBase {
TEST_SERVICE_VERSION)
.setServiceDescription(TEST_SERVICE_DESCRIPTION)
.setContactUri(TEST_CONTACT_URI)
- .setTime(timestamp)
.build();
RcsContactUceCapability.PresenceBuilder builder =
@@ -318,7 +316,7 @@ public class EabControllerTest extends ImsTestBase {
return builder.build();
}
- private RcsContactUceCapability createPresenceNonRcsCapability(Instant timestamp) {
+ private RcsContactUceCapability createPresenceNonRcsCapability() {
RcsContactPresenceTuple.ServiceCapabilities.Builder serviceCapabilitiesBuilder =
new RcsContactPresenceTuple.ServiceCapabilities.Builder(false, false);
RcsContactPresenceTuple tupleWithServiceCapabilities =
@@ -327,7 +325,6 @@ public class EabControllerTest extends ImsTestBase {
.setServiceDescription(TEST_SERVICE_DESCRIPTION)
.setContactUri(TEST_CONTACT_URI)
.setServiceCapabilities(serviceCapabilitiesBuilder.build())
- .setTime(timestamp)
.build();
RcsContactUceCapability.PresenceBuilder builder =