From 674766afb2abbe00a26a3265cbcb5d9d3a298263 Mon Sep 17 00:00:00 2001 From: Brad Ebinger Date: Mon, 16 Dec 2019 19:13:35 -0800 Subject: Clean up hidden dependencies 1) Remove imports that are not used 2) Remove hidden dependencies from RcsService. ucepresencelib is next. Bug: 111305845 Test: build; manual test of capability query. Change-Id: I8377325709ca64ee0e0b9e881c54e69b4855200e --- rcs/rcsservice/Android.bp | 3 - .../src/com/android/service/ims/LauncherUtils.java | 3 +- .../src/com/android/service/ims/RcsService.java | 244 ++++++++++++--------- .../src/com/android/service/ims/RcsServiceApp.java | 3 +- .../com/android/service/ims/RcsSettingUtils.java | 12 +- .../com/android/service/ims/RcsStackAdaptor.java | 41 +--- .../src/com/android/service/ims/RcsUtils.java | 8 +- .../src/com/android/service/ims/Task.java | 8 +- .../src/com/android/service/ims/TaskManager.java | 25 +-- .../ims/presence/AlarmBroadcastReceiver.java | 1 - .../ims/presence/PresenceAvailabilityTask.java | 20 +- .../android/service/ims/presence/PresenceBase.java | 12 +- .../ims/presence/PresenceCapabilityTask.java | 16 +- .../service/ims/presence/PresenceInfoParser.java | 7 +- .../service/ims/presence/PresencePublication.java | 174 ++++++--------- .../service/ims/presence/PresencePublishTask.java | 18 -- .../service/ims/presence/PresenceSubscriber.java | 50 ++--- .../android/service/ims/presence/PresenceTask.java | 15 +- .../service/ims/presence/StackListener.java | 26 +-- 19 files changed, 262 insertions(+), 424 deletions(-) diff --git a/rcs/rcsservice/Android.bp b/rcs/rcsservice/Android.bp index 24153a5..ba191e8 100644 --- a/rcs/rcsservice/Android.bp +++ b/rcs/rcsservice/Android.bp @@ -59,9 +59,6 @@ android_app { "src/com/android/service/ims/RcsService.java", "src/com/android/service/ims/RcsServiceApp.java" ], - libs: [ - "ims-common", - ], static_libs: [ "ucepresencelib" ], diff --git a/rcs/rcsservice/src/com/android/service/ims/LauncherUtils.java b/rcs/rcsservice/src/com/android/service/ims/LauncherUtils.java index 407a5a7..00252bf 100644 --- a/rcs/rcsservice/src/com/android/service/ims/LauncherUtils.java +++ b/rcs/rcsservice/src/com/android/service/ims/LauncherUtils.java @@ -28,12 +28,11 @@ package com.android.service.ims; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.ComponentName; import com.android.ims.internal.Logger; -import com.android.service.ims.RcsService; /** * Launcher utility functions diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsService.java b/rcs/rcsservice/src/com/android/service/ims/RcsService.java index 953db2f..78708da 100644 --- a/rcs/rcsservice/src/com/android/service/ims/RcsService.java +++ b/rcs/rcsservice/src/com/android/service/ims/RcsService.java @@ -28,51 +28,60 @@ package com.android.service.ims; -import java.util.List; - +import android.app.Service; import android.content.Intent; -import android.content.IntentFilter; +import android.database.ContentObserver; +import android.net.ConnectivityManager; +import android.os.Handler; import android.os.IBinder; +import android.os.Looper; import android.os.RemoteException; -import android.content.Context; -import android.app.Service; import android.os.ServiceManager; -import android.os.Handler; -import android.database.ContentObserver; -import android.content.BroadcastReceiver; import android.provider.Settings; -import android.net.ConnectivityManager; -import com.android.ims.ImsManager; -import com.android.ims.ImsConnectionStateListener; -import com.android.ims.ImsException; +import android.telephony.AccessNetworkConstants; +import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; +import android.telephony.ims.ImsException; +import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ImsReasonInfo; +import android.telephony.ims.RegistrationManager; +import android.telephony.ims.feature.MmTelFeature; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.internal.IRcsService; import com.android.ims.IRcsPresenceListener; +import com.android.ims.RcsManager.ResultCode; import com.android.ims.internal.IRcsPresence; - +import com.android.ims.internal.IRcsService; import com.android.ims.internal.Logger; import com.android.internal.telephony.IccCardConstants; -import com.android.internal.telephony.TelephonyIntents; - +import com.android.service.ims.R; import com.android.service.ims.presence.PresencePublication; import com.android.service.ims.presence.PresenceSubscriber; -import com.android.service.ims.R; +import java.util.List; + +public class RcsService extends Service { + + private static final int IMS_SERVICE_RETRY_TIMEOUT_MS = 5000; -public class RcsService extends Service{ - /** - * The logger - */ private Logger logger = Logger.getLogger(this.getClass().getName()); private RcsStackAdaptor mRcsStackAdaptor = null; private PresencePublication mPublication = null; private PresenceSubscriber mSubscriber = null; - private BroadcastReceiver mReceiver = null; + private Handler mRetryHandler; + private Runnable mRegisterCallbacks = this::registerImsCallbacksAndSetAssociatedSubscription; + private int mNetworkRegistrationType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID; + + private int mAssociatedSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; + + private SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangedListener + = new SubscriptionManager.OnSubscriptionsChangedListener() { + @Override + public void onSubscriptionsChanged() { + registerImsCallbacksAndSetAssociatedSubscription(); + } + }; @Override public void onCreate() { @@ -118,54 +127,94 @@ public class RcsService extends Service{ getContentResolver().registerContentObserver( SubscriptionManager.CONTENT_URI, false, mSiminfoSettingObserver); - mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - logger.print("onReceive intent=" + intent); - if(ImsManager.ACTION_IMS_SERVICE_UP.equalsIgnoreCase( - intent.getAction())){ - handleImsServiceUp(); - } else if(ImsManager.ACTION_IMS_SERVICE_DOWN.equalsIgnoreCase( - intent.getAction())){ - handleImsServiceDown(); - } else if(TelephonyIntents.ACTION_SIM_STATE_CHANGED.equalsIgnoreCase( - intent.getAction())) { - String stateExtra = intent.getStringExtra( - IccCardConstants.INTENT_KEY_ICC_STATE); - handleSimStateChanged(stateExtra); + mRetryHandler = new Handler(Looper.getMainLooper()); + registerSubscriptionChangedListener(); + } + + private void registerSubscriptionChangedListener() { + SubscriptionManager subscriptionManager = getSystemService(SubscriptionManager.class); + if (subscriptionManager != null) { + // This will call back after the listener is added automatically. + subscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener); + } else { + logger.error("SubscriptionManager not available! Retrying..."); + // Retry this again after some time. + mRetryHandler.postDelayed(this::registerSubscriptionChangedListener, + IMS_SERVICE_RETRY_TIMEOUT_MS); + } + } + + private void registerImsCallbacksAndSetAssociatedSubscription() { + SubscriptionManager sm = getSystemService(SubscriptionManager.class); + if (sm == null) { + logger.warn("handleSubscriptionsChanged: SubscriptionManager is null!"); + return; + } + List infos = sm.getActiveSubscriptionInfoList(); + if (infos == null || infos.isEmpty()) { + // There are no active subscriptions right now. + handleImsServiceDown(); + } else { + int defaultVoiceSub = SubscriptionManager.getDefaultVoiceSubscriptionId(); + // Get default voice id and then try to register for IMS callbacks + if (defaultVoiceSub == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + for (SubscriptionInfo info : infos) { + if (!info.isOpportunistic()) { + defaultVoiceSub = info.getSubscriptionId(); + break; + } } } - }; + if (defaultVoiceSub == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + handleImsServiceDown(); + return; + } - IntentFilter statusFilter = new IntentFilter(); - statusFilter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); - statusFilter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); - statusFilter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); - registerReceiver(mReceiver, statusFilter); + ImsMmTelManager mIms = ImsMmTelManager.createForSubscriptionId(defaultVoiceSub); + try { + if (defaultVoiceSub == mAssociatedSubscription) { + // Don't register duplicate callbacks for the same subscription. + return; + } + if (mAssociatedSubscription != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + // Get rid of any existing registrations. + ImsMmTelManager mOldIms = ImsMmTelManager.createForSubscriptionId( + mAssociatedSubscription); + mOldIms.unregisterImsRegistrationCallback(mImsRegistrationCallback); + mOldIms.unregisterMmTelCapabilityCallback(mCapabilityCallback); + logger.print("callbacks unregistered for sub " + mAssociatedSubscription); + } + // move over registrations. + mIms.registerImsRegistrationCallback(getMainExecutor(), mImsRegistrationCallback); + mIms.registerMmTelCapabilityCallback(getMainExecutor(), mCapabilityCallback); + mAssociatedSubscription = defaultVoiceSub; + logger.print("callbacks registered for sub " + mAssociatedSubscription); + handleImsServiceUp(); + } catch (ImsException e) { + logger.info("Couldn't register callbacks for " + defaultVoiceSub + ": " + + e.getMessage()); + if (e.getCode() == ImsException.CODE_ERROR_SERVICE_UNAVAILABLE) { + // IMS temporarily unavailable. Retry after a few seconds. + mRetryHandler.removeCallbacks(mRegisterCallbacks); + mRetryHandler.postDelayed(mRegisterCallbacks, IMS_SERVICE_RETRY_TIMEOUT_MS); + } + } + } } public void handleImsServiceUp() { if(mPublication != null) { mPublication.handleImsServiceUp(); } - - registerImsConnectionStateListener(); } public void handleImsServiceDown() { + mAssociatedSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; if(mPublication != null) { mPublication.handleImsServiceDown(); } } - public void handleSimStateChanged(String state) { - - if(IccCardConstants.INTENT_VALUE_ICC_LOADED.equalsIgnoreCase(state)) { - // ImsManager depends on a loaded SIM to get the default Voice Registration. - registerImsConnectionStateListener(); - } - } - @Override public int onStartCommand(Intent intent, int flags, int startId) { @@ -181,10 +230,8 @@ public class RcsService extends Service{ public void onDestroy() { getContentResolver().unregisterContentObserver(mObserver); getContentResolver().unregisterContentObserver(mSiminfoSettingObserver); - if (mReceiver != null) { - unregisterReceiver(mReceiver); - mReceiver = null; - } + getSystemService(SubscriptionManager.class) + .removeOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener); mRcsStackAdaptor.finish(); mPublication.finish(); @@ -199,11 +246,7 @@ public class RcsService extends Service{ return mPublication; } - public PresenceSubscriber getPresenceSubscriber(){ - return mSubscriber; - } - - IRcsPresence.Stub mIRcsPresenceImpl = new IRcsPresence.Stub(){ + IRcsPresence.Stub mIRcsPresenceImpl = new IRcsPresence.Stub() { /** * Asyncrhonously request the latest capability for a given contact list. * The result will be saved to DB directly if the contactNumber can be found in DB. @@ -331,15 +374,18 @@ public class RcsService extends Service{ @Override public void onChange(final boolean selfChange) { - ImsManager imsManager = ImsManager.getInstance(RcsService.this, - SubscriptionManager.getDefaultVoicePhoneId()); - if (imsManager == null) { + if (mAssociatedSubscription == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { return; } - boolean enabled = imsManager.isVtEnabledByUser(); - logger.debug("vt enabled status: " + (enabled ? "ON" : "OFF")); - - onVtEnabled(enabled); + ImsMmTelManager ims = ImsMmTelManager.createForSubscriptionId(mAssociatedSubscription); + try { + boolean enabled = ims.isVtSettingEnabled(); + logger.debug("vt enabled status: " + (enabled ? "ON" : "OFF")); + onVtEnabled(enabled); + } catch (Exception e) { + logger.info("Exception getting VT status for sub:" + mAssociatedSubscription + + ", Exception = " + e.getMessage()); + } } } @@ -372,45 +418,35 @@ public class RcsService extends Service{ } }; - void registerImsConnectionStateListener() { - try { - ImsManager imsManager = ImsManager.getInstance(this, - SubscriptionManager.getDefaultVoicePhoneId()); - if (imsManager != null) { - imsManager.addRegistrationListener(mImsConnectionStateListener); + private RegistrationManager.RegistrationCallback mImsRegistrationCallback + = new RegistrationManager.RegistrationCallback() { + + @Override + public void onRegistered(int imsTransportType) { + logger.debug("onImsConnected imsTransportType=" + imsTransportType); + mNetworkRegistrationType = imsTransportType; + if(mPublication != null) { + mPublication.onImsConnected(); } - } catch (ImsException e) { - logger.error("addRegistrationListener exception=", e); } - } - private ImsConnectionStateListener mImsConnectionStateListener = - new ImsConnectionStateListener() { - @Override - public void onImsConnected(int imsRadioTech) { - logger.debug("onImsConnected imsRadioTech=" + imsRadioTech); - - if(mPublication != null) { - mPublication.onImsConnected(); - } + @Override + public void onUnregistered(ImsReasonInfo info) { + logger.debug("onImsDisconnected"); + mNetworkRegistrationType = AccessNetworkConstants.TRANSPORT_TYPE_INVALID; + if(mPublication != null) { + mPublication.onImsDisconnected(); } + } + }; - @Override - public void onImsDisconnected(ImsReasonInfo imsReasonInfo) { - logger.debug("onImsDisconnected"); - if(mPublication != null) { - mPublication.onImsDisconnected(); - } - } + private ImsMmTelManager.CapabilityCallback mCapabilityCallback + = new ImsMmTelManager.CapabilityCallback() { - @Override - public void onFeatureCapabilityChanged(final int serviceClass, - final int[] enabledFeatures, final int[] disabledFeatures) { - logger.debug("onFeatureCapabilityChanged"); - if(mPublication != null) { - mPublication.onFeatureCapabilityChanged(serviceClass, enabledFeatures, disabledFeatures); - } - } - }; + @Override + public void onCapabilitiesStatusChanged(MmTelFeature.MmTelCapabilities capabilities) { + mPublication.onFeatureCapabilityChanged(mNetworkRegistrationType, capabilities); + } + }; } diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsServiceApp.java b/rcs/rcsservice/src/com/android/service/ims/RcsServiceApp.java index c1f683d..c54668d 100644 --- a/rcs/rcsservice/src/com/android/service/ims/RcsServiceApp.java +++ b/rcs/rcsservice/src/com/android/service/ims/RcsServiceApp.java @@ -29,9 +29,8 @@ package com.android.service.ims; import android.app.Application; -import android.content.Context; + import com.android.ims.internal.Logger; -import android.os.SystemProperties; public class RcsServiceApp extends Application { private Logger logger = Logger.getLogger(this.getClass().getName()); diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsSettingUtils.java b/rcs/rcsservice/src/com/android/service/ims/RcsSettingUtils.java index 40de8f7..40fb709 100644 --- a/rcs/rcsservice/src/com/android/service/ims/RcsSettingUtils.java +++ b/rcs/rcsservice/src/com/android/service/ims/RcsSettingUtils.java @@ -28,19 +28,13 @@ package com.android.service.ims; -import java.lang.String; - +import android.content.Context; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; -import android.telephony.TelephonyManager; -import android.content.Context; + import com.android.ims.ImsConfig; -import com.android.ims.ImsManager; import com.android.ims.ImsException; -import android.os.SystemProperties; - -import com.android.ims.RcsManager.ResultCode; - +import com.android.ims.ImsManager; import com.android.ims.internal.Logger; public class RcsSettingUtils{ diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java index 902f6c7..eb2edd7 100644 --- a/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java +++ b/rcs/rcsservice/src/com/android/service/ims/RcsStackAdaptor.java @@ -28,58 +28,41 @@ package com.android.service.ims; -import java.util.List; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; - +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.ComponentName; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.pm.ServiceInfo; import android.content.Context; import android.content.Intent; -import android.app.PendingIntent; import android.content.IntentFilter; -import android.content.ServiceConnection; import android.os.Handler; import android.os.HandlerThread; -import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; -import android.telephony.TelephonyManager; -import android.app.AlarmManager; import android.os.SystemClock; import android.os.SystemProperties; -import com.android.ims.ImsConfig; -import com.android.ims.ImsManager; -import com.android.ims.ImsException; import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; import com.android.ims.IRcsPresenceListener; -import com.android.ims.RcsPresence; import com.android.ims.RcsManager.ResultCode; +import com.android.ims.RcsPresence; import com.android.ims.RcsPresence.PublishState; - -import com.android.ims.internal.Logger; +import com.android.ims.RcsPresenceInfo; import com.android.ims.internal.ContactNumberUtils; -import com.android.service.ims.presence.PresencePublication; - +import com.android.ims.internal.Logger; +import com.android.ims.internal.uce.common.CapInfo; +import com.android.ims.internal.uce.common.StatusCode; +import com.android.ims.internal.uce.common.UceLong; import com.android.ims.internal.uce.presence.IPresenceService; import com.android.ims.internal.uce.presence.PresCapInfo; -import com.android.ims.internal.uce.common.CapInfo; import com.android.ims.internal.uce.uceservice.IUceService; import com.android.ims.internal.uce.uceservice.ImsUceManager; -import com.android.ims.internal.uce.common.UceLong; -import com.android.ims.internal.uce.common.StatusCode; - -import com.android.ims.IRcsPresenceListener; -import com.android.ims.RcsPresenceInfo; - -import com.android.service.ims.presence.StackListener; -import com.android.service.ims.presence.PresenceInfoParser; import com.android.service.ims.presence.AlarmBroadcastReceiver; +import com.android.service.ims.presence.PresenceInfoParser; +import com.android.service.ims.presence.PresencePublication; +import com.android.service.ims.presence.StackListener; public class RcsStackAdaptor{ private static final boolean DEBUG = true; diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsUtils.java b/rcs/rcsservice/src/com/android/service/ims/RcsUtils.java index bbfacd2..22e156e 100644 --- a/rcs/rcsservice/src/com/android/service/ims/RcsUtils.java +++ b/rcs/rcsservice/src/com/android/service/ims/RcsUtils.java @@ -28,15 +28,9 @@ package com.android.service.ims; -import java.lang.String; -import android.telephony.TelephonyManager; -import android.content.Context; - -import com.android.ims.internal.uce.common.StatusCode; - import com.android.ims.RcsManager.ResultCode; - import com.android.ims.internal.Logger; +import com.android.ims.internal.uce.common.StatusCode; public class RcsUtils{ /* diff --git a/rcs/rcsservice/src/com/android/service/ims/Task.java b/rcs/rcsservice/src/com/android/service/ims/Task.java index a58aebf..eb36a5f 100644 --- a/rcs/rcsservice/src/com/android/service/ims/Task.java +++ b/rcs/rcsservice/src/com/android/service/ims/Task.java @@ -28,14 +28,8 @@ package com.android.service.ims; -import java.util.Set; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import android.os.RemoteException; - -import com.android.ims.internal.Logger; import com.android.ims.IRcsPresenceListener; +import com.android.ims.internal.Logger; /** * Task diff --git a/rcs/rcsservice/src/com/android/service/ims/TaskManager.java b/rcs/rcsservice/src/com/android/service/ims/TaskManager.java index 74e11a6..a643861 100644 --- a/rcs/rcsservice/src/com/android/service/ims/TaskManager.java +++ b/rcs/rcsservice/src/com/android/service/ims/TaskManager.java @@ -28,30 +28,23 @@ package com.android.service.ims; -import java.util.Set; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.List; -import java.util.ArrayList; -import android.os.RemoteException; import android.content.Context; import android.os.Handler; -import android.os.Message; import android.os.HandlerThread; import android.os.Looper; +import android.os.Message; import android.telephony.PhoneNumberUtils; -import com.android.ims.internal.uce.presence.PresCmdStatus; - -import com.android.ims.internal.Logger; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresenceInfo; import com.android.ims.IRcsPresenceListener; - -import com.android.service.ims.presence.PresenceTask; -import com.android.service.ims.presence.PresenceCapabilityTask; +import com.android.ims.internal.Logger; import com.android.service.ims.presence.PresenceAvailabilityTask; +import com.android.service.ims.presence.PresenceCapabilityTask; +import com.android.service.ims.presence.PresenceTask; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; /** * TaskManager diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java b/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java index cd213a9..f191186 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/AlarmBroadcastReceiver.java @@ -33,7 +33,6 @@ import android.content.Context; import android.content.Intent; import com.android.ims.internal.Logger; - import com.android.service.ims.RcsStackAdaptor; import com.android.service.ims.TaskManager; diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceAvailabilityTask.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceAvailabilityTask.java index 99c698f..a008589 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceAvailabilityTask.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceAvailabilityTask.java @@ -28,26 +28,8 @@ package com.android.service.ims.presence; -import java.util.Set; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import android.content.Context; -import android.content.Intent; -import android.app.PendingIntent; -import android.content.IntentFilter; -import android.os.RemoteException; -import android.app.AlarmManager; -import android.os.SystemClock; - -import com.android.ims.internal.uce.presence.PresCmdStatus; - -import com.android.ims.internal.Logger; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresenceInfo; import com.android.ims.IRcsPresenceListener; - -import com.android.service.ims.TaskManager; +import com.android.ims.internal.Logger; /** * PresenceAvailabilityTask diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java index 290e650..abe6fd7 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceBase.java @@ -28,26 +28,16 @@ package com.android.service.ims.presence; -import java.lang.String; -import android.content.ContentResolver; -import android.content.ContentValues; import android.content.Context; import android.os.RemoteException; import android.content.Intent; -import com.android.internal.telephony.TelephonyIntents; -import android.content.ComponentName; -import com.android.ims.internal.uce.common.StatusCode; -import com.android.ims.internal.uce.common.StatusCode; import com.android.ims.internal.uce.presence.PresCmdStatus; -import com.android.ims.internal.uce.presence.PresResInfo; import com.android.ims.internal.uce.presence.PresSipResponse; - import com.android.ims.RcsManager.ResultCode; import com.android.ims.RcsPresence.PublishState; -import com.android.ims.RcsPresenceInfo; - import com.android.ims.internal.Logger; +import com.android.internal.telephony.TelephonyIntents; import com.android.service.ims.Task; import com.android.service.ims.RcsUtils; import com.android.service.ims.TaskManager; diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceCapabilityTask.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceCapabilityTask.java index 8dbc120..ff69915 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceCapabilityTask.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceCapabilityTask.java @@ -28,25 +28,15 @@ package com.android.service.ims.presence; -import java.util.Set; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.app.PendingIntent; -import android.content.IntentFilter; import android.os.RemoteException; -import android.app.AlarmManager; import android.os.SystemClock; -import com.android.ims.internal.uce.presence.PresCmdStatus; - -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresenceInfo; -import com.android.ims.IRcsPresenceListener; - import com.android.ims.internal.Logger; +import com.android.ims.IRcsPresenceListener; import com.android.service.ims.TaskManager; /** diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceInfoParser.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceInfoParser.java index 6dabb28..1b3d795 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceInfoParser.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceInfoParser.java @@ -30,21 +30,16 @@ package com.android.service.ims.presence; import java.lang.String; import java.util.ArrayList; -import java.util.List; -import android.text.TextUtils; +import com.android.ims.internal.Logger; import com.android.ims.internal.uce.presence.PresTupleInfo; import com.android.ims.internal.uce.presence.PresRlmiInfo; import com.android.ims.internal.uce.presence.PresResInfo; import com.android.ims.internal.uce.presence.PresResInstanceInfo; - -import com.android.ims.RcsManager.ResultCode; import com.android.ims.RcsPresenceInfo; import com.android.ims.RcsPresenceInfo.ServiceType; import com.android.ims.RcsPresenceInfo.ServiceState; -import com.android.ims.internal.Logger; - public class PresenceInfoParser{ /* * The logger diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java index e7607ee..f827622 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublication.java @@ -28,7 +28,6 @@ package com.android.service.ims.presence; -import java.util.List; import java.util.Arrays; import android.content.Context; @@ -37,10 +36,10 @@ import com.android.internal.telephony.Phone; import android.provider.Settings; import android.os.SystemProperties; import android.content.BroadcastReceiver; -import android.content.ComponentName; +import android.telephony.AccessNetworkConstants; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import com.android.internal.telephony.IccCardConstants; -import com.android.internal.telephony.TelephonyIntents; + import android.telecom.TelecomManager; import android.content.IntentFilter; import android.app.PendingIntent; @@ -48,33 +47,26 @@ import android.app.AlarmManager; import android.os.SystemClock; import android.os.Message; import android.os.Handler; +import android.telephony.ims.feature.MmTelFeature; import com.android.ims.ImsManager; -import com.android.ims.ImsConnectionStateListener; import com.android.ims.ImsServiceClass; -import com.android.ims.ImsException; -import android.telephony.SubscriptionManager; import com.android.ims.ImsConfig; -import com.android.ims.ImsConfig.FeatureConstants; -import com.android.ims.ImsConfig.FeatureValueConstants; - -import com.android.service.ims.RcsSettingUtils; -import com.android.ims.RcsPresenceInfo; -import com.android.ims.IRcsPresenceListener; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresence.PublishState; - import com.android.ims.internal.Logger; -import com.android.service.ims.TaskManager; -import com.android.service.ims.Task; - import com.android.ims.internal.uce.presence.PresPublishTriggerType; import com.android.ims.internal.uce.presence.PresSipResponse; -import com.android.ims.internal.uce.common.StatusCode; import com.android.ims.internal.uce.presence.PresCmdStatus; - +import com.android.ims.RcsPresenceInfo; +import com.android.ims.IRcsPresenceListener; +import com.android.ims.RcsManager.ResultCode; +import com.android.ims.RcsPresence.PublishState; +import com.android.internal.telephony.IccCardConstants; +import com.android.internal.telephony.TelephonyIntents; +import com.android.service.ims.RcsSettingUtils; import com.android.service.ims.RcsStackAdaptor; +import com.android.service.ims.Task; +import com.android.service.ims.TaskManager; public class PresencePublication extends PresenceBase { private Logger logger = Logger.getLogger(this.getClass().getName()); @@ -1108,101 +1100,65 @@ public class PresencePublication extends PresenceBase { finish(); } - public void onFeatureCapabilityChanged(final int serviceClass, - final int[] enabledFeatures, final int[] disabledFeatures) { - logger.debug("onFeatureCapabilityChanged serviceClass="+serviceClass - +", enabledFeatures="+Arrays.toString(enabledFeatures) - +", disabledFeatures="+Arrays.toString(disabledFeatures)); + public void onFeatureCapabilityChanged(int networkType, + MmTelFeature.MmTelCapabilities capabilities) { + logger.debug("onFeatureCapabilityChanged networkType=" + networkType + +", capabilities=" + capabilities); - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - onFeatureCapabilityChangedInternal(serviceClass, - enabledFeatures, disabledFeatures); - } - }, "onFeatureCapabilityChangedInternal thread"); + Thread thread = new Thread(() -> onFeatureCapabilityChangedInternal(networkType, + capabilities), "onFeatureCapabilityChangedInternal thread"); thread.start(); } - synchronized private void onFeatureCapabilityChangedInternal(int serviceClass, - int[] enabledFeatures, int[] disabledFeatures) { - if (serviceClass == ImsServiceClass.MMTEL) { - boolean oldIsVolteAvailable = mIsVolteAvailable; - boolean oldIsVtAvailable = mIsVtAvailable; - boolean oldIsVoWifiAvailable = mIsVoWifiAvailable; - boolean oldIsViWifiAvailable = mIsViWifiAvailable; - - if(enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE] == - ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE) { - mIsVolteAvailable = true; - } else if(enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE] == - ImsConfig.FeatureConstants.FEATURE_TYPE_UNKNOWN) { - mIsVolteAvailable = false; - } else { - logger.print("invalid value for FEATURE_TYPE_VOICE_OVER_LTE"); - } - - if(enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_WIFI] == - ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_WIFI) { - mIsVoWifiAvailable = true; - } else if(enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_WIFI] == - ImsConfig.FeatureConstants.FEATURE_TYPE_UNKNOWN) { - mIsVoWifiAvailable = false; - } else { - logger.print("invalid value for FEATURE_TYPE_VOICE_OVER_WIFI"); - } - - if (enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE] == - ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE) { - mIsVtAvailable = true; - } else if (enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE] == - ImsConfig.FeatureConstants.FEATURE_TYPE_UNKNOWN) { - mIsVtAvailable = false; - } else { - logger.print("invalid value for FEATURE_TYPE_VIDEO_OVER_LTE"); - } - - if(enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_WIFI] == - ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_WIFI) { - mIsViWifiAvailable = true; - } else if(enabledFeatures[ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_WIFI] == - ImsConfig.FeatureConstants.FEATURE_TYPE_UNKNOWN) { - mIsViWifiAvailable = false; - } else { - logger.print("invalid value for FEATURE_TYPE_VIDEO_OVER_WIFI"); - } - - logger.print("mIsVolteAvailable=" + mIsVolteAvailable + - " mIsVoWifiAvailable=" + mIsVoWifiAvailable + - " mIsVtAvailable=" + mIsVtAvailable + - " mIsViWifiAvailable=" + mIsViWifiAvailable + - " oldIsVolteAvailable=" + oldIsVolteAvailable + - " oldIsVoWifiAvailable=" + oldIsVoWifiAvailable + - " oldIsVtAvailable=" + oldIsVtAvailable + - " oldIsViWifiAvailable=" + oldIsViWifiAvailable); - - if(oldIsVolteAvailable != mIsVolteAvailable || - oldIsVtAvailable != mIsVtAvailable || - oldIsVoWifiAvailable != mIsVoWifiAvailable || - oldIsViWifiAvailable != mIsViWifiAvailable) { - if(mGotTriggerFromStack) { - if((Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.AIRPLANE_MODE_ON, 0) != 0) && !mIsVoWifiAvailable && - !mIsViWifiAvailable) { - logger.print("Airplane mode was on and no vowifi and viwifi." + - " Don't need publish. Stack will unpublish"); - return; - } + synchronized private void onFeatureCapabilityChangedInternal(int networkType, + MmTelFeature.MmTelCapabilities capabilities) { + boolean oldIsVolteAvailable = mIsVolteAvailable; + boolean oldIsVtAvailable = mIsVtAvailable; + boolean oldIsVoWifiAvailable = mIsVoWifiAvailable; + boolean oldIsViWifiAvailable = mIsViWifiAvailable; + + mIsVolteAvailable = (networkType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) && + capabilities.isCapable(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE); + + mIsVoWifiAvailable = (networkType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) && + capabilities.isCapable(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE); + + mIsVtAvailable = (networkType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) && + capabilities.isCapable(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO); + + mIsViWifiAvailable = (networkType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) && + capabilities.isCapable(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO); + + logger.print("mIsVolteAvailable=" + mIsVolteAvailable + + " mIsVoWifiAvailable=" + mIsVoWifiAvailable + + " mIsVtAvailable=" + mIsVtAvailable + + " mIsViWifiAvailable=" + mIsViWifiAvailable + + " oldIsVolteAvailable=" + oldIsVolteAvailable + + " oldIsVoWifiAvailable=" + oldIsVoWifiAvailable + + " oldIsVtAvailable=" + oldIsVtAvailable + + " oldIsViWifiAvailable=" + oldIsViWifiAvailable); + + if(oldIsVolteAvailable != mIsVolteAvailable || + oldIsVtAvailable != mIsVtAvailable || + oldIsVoWifiAvailable != mIsVoWifiAvailable || + oldIsViWifiAvailable != mIsViWifiAvailable) { + if(mGotTriggerFromStack) { + if((Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.AIRPLANE_MODE_ON, 0) != 0) && !mIsVoWifiAvailable && + !mIsViWifiAvailable) { + logger.print("Airplane mode was on and no vowifi and viwifi." + + " Don't need publish. Stack will unpublish"); + return; + } - if(isOnIWLAN()) { - // will check duplicated PUBLISH in requestPublication by invokePublish - invokePublish(PresencePublication.PublishType. - PRES_PUBLISH_TRIGGER_FEATURE_AVAILABILITY_CHANGED); - } - } else { - mHasCachedTrigger = true; + if(isOnIWLAN()) { + // will check duplicated PUBLISH in requestPublication by invokePublish + invokePublish(PresencePublication.PublishType. + PRES_PUBLISH_TRIGGER_FEATURE_AVAILABILITY_CHANGED); } + } else { + mHasCachedTrigger = true; } } } diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublishTask.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublishTask.java index 361488e..73ae4ca 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublishTask.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresencePublishTask.java @@ -28,27 +28,9 @@ package com.android.service.ims.presence; -import java.util.Set; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import android.content.Context; -import android.content.Intent; -import android.app.PendingIntent; -import android.content.IntentFilter; -import android.os.RemoteException; -import android.app.AlarmManager; -import android.os.SystemClock; - -import com.android.ims.internal.uce.presence.PresCmdStatus; - import com.android.ims.internal.Logger; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresenceInfo; import com.android.ims.IRcsPresenceListener; -import com.android.service.ims.TaskManager; - /** * PresencePublishTask */ diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java index daa2636..ccd4cae 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceSubscriber.java @@ -28,51 +28,33 @@ package com.android.service.ims.presence; -import java.util.List; -import java.util.ArrayList; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.Semaphore; -import android.content.ContentValues; -import android.text.TextUtils; - -import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; -import com.android.internal.telephony.TelephonyIntents; -import android.os.HandlerThread; -import android.os.RemoteException; import android.telephony.TelephonyManager; -import android.database.Cursor; - -import java.lang.String; -import android.content.Context; -import android.util.Log; - -import com.android.ims.internal.uce.presence.PresSipResponse; -import com.android.ims.internal.uce.common.StatusCode; -import com.android.ims.internal.uce.common.StatusCode; -import com.android.ims.internal.uce.presence.PresSubscriptionState; -import com.android.ims.internal.uce.presence.PresCmdStatus; -import com.android.ims.internal.uce.presence.PresResInfo; -import com.android.ims.internal.uce.presence.PresRlmiInfo; -import com.android.ims.internal.uce.presence.PresTupleInfo; +import android.text.TextUtils; -import com.android.ims.RcsPresenceInfo; -import com.android.ims.RcsPresence; import com.android.ims.IRcsPresenceListener; import com.android.ims.RcsManager.ResultCode; +import com.android.ims.RcsPresence; import com.android.ims.RcsPresence.PublishState; - -import com.android.ims.internal.Logger; +import com.android.ims.RcsPresenceInfo; import com.android.ims.internal.ContactNumberUtils; -import com.android.service.ims.TaskManager; -import com.android.service.ims.Task; +import com.android.ims.internal.Logger; +import com.android.ims.internal.uce.presence.PresCmdStatus; +import com.android.ims.internal.uce.presence.PresResInfo; +import com.android.ims.internal.uce.presence.PresRlmiInfo; +import com.android.ims.internal.uce.presence.PresSipResponse; +import com.android.ims.internal.uce.presence.PresSubscriptionState; +import com.android.ims.internal.uce.presence.PresTupleInfo; +import com.android.service.ims.RcsSettingUtils; import com.android.service.ims.RcsStackAdaptor; import com.android.service.ims.RcsUtils; -import com.android.service.ims.RcsSettingUtils; +import com.android.service.ims.Task; +import com.android.service.ims.TaskManager; + +import java.util.ArrayList; +import java.util.List; public class PresenceSubscriber extends PresenceBase{ /* diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceTask.java b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceTask.java index 8ff74cd..ed8afdf 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/PresenceTask.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/PresenceTask.java @@ -28,21 +28,10 @@ package com.android.service.ims.presence; -import java.util.Set; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; -import android.os.RemoteException; - -import com.android.ims.internal.uce.presence.PresCmdStatus; - -import com.android.ims.internal.Logger; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresenceInfo; import com.android.ims.IRcsPresenceListener; - -import com.android.service.ims.Task; +import com.android.ims.internal.Logger; import com.android.service.ims.RcsUtils; +import com.android.service.ims.Task; /** * PresenceTask diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java index 9ca82fc..ae1d415 100644 --- a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java +++ b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java @@ -28,22 +28,18 @@ package com.android.service.ims.presence; -import java.util.ArrayList; -import java.util.List; - -import android.content.ServiceConnection; -import android.annotation.SuppressLint; -import android.content.Intent; import android.content.Context; -import android.content.SharedPreferences; +import android.content.Intent; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.Parcel; import android.os.RemoteException; -import android.text.TextUtils; import android.util.Log; -import android.os.Parcel; +import com.android.ims.RcsManager; +import com.android.ims.internal.Logger; +import com.android.ims.internal.uce.common.StatusCode; import com.android.ims.internal.uce.presence.IPresenceListener; import com.android.ims.internal.uce.presence.PresCmdId; import com.android.ims.internal.uce.presence.PresCmdStatus; @@ -52,18 +48,6 @@ import com.android.ims.internal.uce.presence.PresResInfo; import com.android.ims.internal.uce.presence.PresRlmiInfo; import com.android.ims.internal.uce.presence.PresSipResponse; import com.android.ims.internal.uce.presence.PresTupleInfo; -import com.android.ims.internal.uce.common.StatusCode; -import com.android.ims.internal.uce.common.StatusCode; - -import com.android.ims.RcsManager; -import com.android.ims.RcsManager.ResultCode; -import com.android.ims.RcsPresence; -import com.android.ims.RcsPresenceInfo; -import com.android.ims.IRcsPresenceListener; - -import com.android.ims.internal.Logger; -import com.android.service.ims.TaskManager; -import com.android.service.ims.Task; import com.android.service.ims.RcsStackAdaptor; public class StackListener extends Handler{ -- cgit v1.2.3