IMS RCS UCE API Improvement
Add onPublishUpdated and Publishing state
Bug: b/203406296
Test: atest PublishControllerImplTest PublishProcessorTest.
Change-Id: I8b28c71ada61af22ba4fee81c140b1c322a29409
diff --git a/src/com/android/phone/ImsRcsController.java b/src/com/android/phone/ImsRcsController.java
index 3618d58..bf55764 100644
--- a/src/com/android/phone/ImsRcsController.java
+++ b/src/com/android/phone/ImsRcsController.java
@@ -17,9 +17,13 @@
package com.android.phone;
import android.Manifest;
+import android.app.compat.CompatChanges;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.os.UserHandle;
@@ -73,6 +77,15 @@
private Boolean mSingleRegistrationOverride;
/**
+ * For apps targeting Android T and above, support the publishing state on APIs, such as
+ * {@code RcsUceAdapter#PUBLISH_STATE_PUBLISHING}
+ * @hide
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
+ public static final long SUPPORT_PUBLISHING_STATE = 202894742;
+
+ /**
* Initialize the singleton ImsRcsController instance.
* This is only done once, at startup, from PhoneApp.onCreate().
*/
@@ -316,7 +329,9 @@
@Override
public @PublishState int getUcePublishState(int subId) {
enforceReadPrivilegedPermission("getUcePublishState");
+ final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
+ boolean isSupportPublishingState = false;
try {
UceControllerManager uceCtrlManager = getRcsFeatureController(subId).getFeature(
UceControllerManager.class);
@@ -324,7 +339,10 @@
throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
"This subscription does not support UCE.");
}
- return uceCtrlManager.getUcePublishState();
+ if (CompatChanges.isChangeEnabled(SUPPORT_PUBLISHING_STATE, uid)) {
+ isSupportPublishingState = true;
+ }
+ return uceCtrlManager.getUcePublishState(isSupportPublishingState);
} catch (ImsException e) {
throw new ServiceSpecificException(e.getCode(), e.getMessage());
} finally {
@@ -466,7 +484,9 @@
@Override
public void registerUcePublishStateCallback(int subId, IRcsUcePublishStateCallback c) {
enforceReadPrivilegedPermission("registerUcePublishStateCallback");
+ final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
+ boolean isSupportPublishingState = false;
try {
UceControllerManager uceCtrlManager = getRcsFeatureController(subId).getFeature(
UceControllerManager.class);
@@ -474,7 +494,11 @@
throw new ServiceSpecificException(ImsException.CODE_ERROR_UNSUPPORTED_OPERATION,
"This subscription does not support UCE.");
}
- uceCtrlManager.registerPublishStateCallback(c);
+
+ if (CompatChanges.isChangeEnabled(SUPPORT_PUBLISHING_STATE, uid)) {
+ isSupportPublishingState = true;
+ }
+ uceCtrlManager.registerPublishStateCallback(c, isSupportPublishingState);
} catch (ImsException e) {
throw new ServiceSpecificException(e.getCode(), e.getMessage());
} finally {