Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0398868 authored by Hyunho's avatar Hyunho Committed by Automerger Merge Worker
Browse files

Add entity uri field to Eab provider am: 4c329e11

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/1977696

Change-Id: I1c1632ddfaf0ba7418499fa5eb19a676e1faeb01
parents cbb96fc7 4c329e11
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -411,6 +411,11 @@ public class EabControllerImpl implements EabController {
            PresenceBuilder builder = new PresenceBuilder(
                    contactUri, SOURCE_TYPE_CACHED, result);
            builder.addCapabilityTuple(createPresenceTuple(contactUri, cursor));

            String entityUri = getStringValue(cursor, EabProvider.EabCommonColumns.ENTITY_URI);
            if (!TextUtils.isEmpty(entityUri)) {
                builder.setEntityUri(Uri.parse(entityUri));
            }
            builderWrapper.setPresenceBuilder(builder);
        } else {
            OptionsBuilder builder = new OptionsBuilder(contactUri, SOURCE_TYPE_CACHED);
@@ -644,6 +649,10 @@ public class EabControllerImpl implements EabController {
        contentValues.put(EabProvider.EabCommonColumns.SUBSCRIPTION_ID, mSubId);
        contentValues.put(EabProvider.EabCommonColumns.REQUEST_RESULT,
                capability.getRequestResult());
        if (capability.getEntityUri() != null) {
            contentValues.put(EabProvider.EabCommonColumns.ENTITY_URI,
                    capability.getEntityUri().toString());
        }
        Uri result = mContext.getContentResolver().insert(EabProvider.COMMON_URI, contentValues);
        int commonId = Integer.parseInt(result.getLastPathSegment());
        Log.d(TAG, "Insert into common table. Id: " + commonId);
+16 −2
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ public class EabProvider extends ContentProvider {
    public static final String AUTHORITY = "eab";

    private static final String TAG = "EabProvider";
    private static final int DATABASE_VERSION = 3;
    private static final int DATABASE_VERSION = 4;

    public static final String EAB_CONTACT_TABLE_NAME = "eab_contact";
    public static final String EAB_COMMON_TABLE_NAME = "eab_common";
@@ -205,6 +205,13 @@ public class EabProvider extends ContentProvider {
         * <P>Type:  INTEGER</P>
         */
        public static final String SUBSCRIPTION_ID = "subscription_id";

        /**
         * The value of the 'entity' attribute is the 'pres' URL of the PRESENTITY publishing
         * presence document
         * <P>Type:  TEXT</P>
         */
        public static final String ENTITY_URI = "entity_uri";
    }

    /**
@@ -354,7 +361,8 @@ public class EabProvider extends ContentProvider {
                + EabCommonColumns.EAB_CONTACT_ID + " INTEGER DEFAULT -1, "
                + EabCommonColumns.MECHANISM + " INTEGER DEFAULT NULL, "
                + EabCommonColumns.REQUEST_RESULT + " INTEGER DEFAULT -1, "
                + EabCommonColumns.SUBSCRIPTION_ID + " INTEGER DEFAULT -1 "
                + EabCommonColumns.SUBSCRIPTION_ID + " INTEGER DEFAULT -1, "
                + EabCommonColumns.ENTITY_URI + " TEXT DEFAULT NULL "
                + ");";

        @VisibleForTesting
@@ -447,6 +455,12 @@ public class EabProvider extends ContentProvider {
                sqLiteDatabase.execSQL("ALTER TABLE temp RENAME TO " + EAB_COMMON_TABLE_NAME + ";");
                oldVersion = 3;
            }

            if (oldVersion < 4) {
                sqLiteDatabase.execSQL("ALTER TABLE " + EAB_COMMON_TABLE_NAME + " ADD COLUMN "
                        + EabCommonColumns.ENTITY_URI + " Text DEFAULT NULL;");
                oldVersion = 4;
            }
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -206,7 +206,7 @@ public class PidfParser {
                presenceBuilder.addCapabilityTuple(capabilityTuple);
            }
        });

        presenceBuilder.setEntityUri(Uri.parse(presence.getEntity()));
        return presenceBuilder.build();
    }

+50 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.telephony.TelephonyManager;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsContactUceCapability.CapabilityMechanism;
import android.telephony.ims.RcsUceAdapter;
@@ -30,6 +31,9 @@ import android.telephony.ims.aidl.IRcsUceControllerCallback;
import android.text.TextUtils;
import android.util.Log;

import com.android.i18n.phonenumbers.NumberParseException;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.i18n.phonenumbers.Phonenumber;
import com.android.ims.rcs.uce.UceController;
import com.android.ims.rcs.uce.UceController.UceControllerCallback;
import com.android.ims.rcs.uce.UceDeviceState;
@@ -605,6 +609,25 @@ public class UceRequestManager {
            List<UceRequest> requestList = new ArrayList<>();
            uriList.forEach(uri -> {
                List<Uri> individualUri = Collections.singletonList(uri);
                // Entity-uri, which is used as a request-uri, uses only a single subscription case
                List<RcsContactUceCapability> capabilities =
                        getCapabilitiesFromCache(type, individualUri);
                if (!capabilities.isEmpty()) {
                    RcsContactUceCapability capability = capabilities.get(0);
                    Uri entityUri = capability.getEntityUri();
                    if (entityUri != null) {
                        // The query uri has been replaced by the stored entity uri.
                        individualUri = Collections.singletonList(entityUri);
                    } else {
                        if (UceUtils.isSipUriForPresenceSubscribeEnabled(mContext, mSubId)) {
                            individualUri = Collections.singletonList(getSipUriFromUri(uri));
                        }
                    }
                } else {
                    if (UceUtils.isSipUriForPresenceSubscribeEnabled(mContext, mSubId)) {
                        individualUri = Collections.singletonList(getSipUriFromUri(uri));
                    }
                }
                UceRequest request = createSubscribeRequest(type, individualUri, skipFromCache);
                requestList.add(request);
            });
@@ -923,6 +946,33 @@ public class UceRequestManager {
        mRequestRepository.notifyRequestFinished(taskId);
    }

    private Uri getSipUriFromUri(Uri uri) {
        Uri convertedUri = uri;
        String number = convertedUri.getSchemeSpecificPart();
        String[] numberParts = number.split("[@;:]");
        number = numberParts[0];

        TelephonyManager manager = mContext.getSystemService(TelephonyManager.class);
        if (manager.getIsimDomain() == null) {
            return convertedUri;
        }
        String simCountryIso = manager.getSimCountryIso();
        if (TextUtils.isEmpty(simCountryIso)) {
            return convertedUri;
        }
        simCountryIso = simCountryIso.toUpperCase();
        PhoneNumberUtil util = PhoneNumberUtil.getInstance();
        try {
            Phonenumber.PhoneNumber phoneNumber = util.parse(number, simCountryIso);
            number = util.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164);
            String sipUri = "sip:" + number + "@" + manager.getIsimDomain();
            convertedUri = Uri.parse(sipUri);
        } catch (NumberParseException e) {
            Log.w(LOG_TAG, "formatNumber: could not format " + number + ", error: " + e);
        }
        return convertedUri;
    }

    @VisibleForTesting
    public UceRequestHandler getUceRequestHandler() {
        return mHandler;
+16 −0
Original line number Diff line number Diff line
@@ -191,6 +191,22 @@ public class UceUtils {
        return blockStatus != BlockedNumberContract.STATUS_NOT_BLOCKED;
    }

    /**
     * Check whether sip uri should be used for presence subscribe
     */
    public static boolean isSipUriForPresenceSubscribeEnabled(Context context, int subId) {
        CarrierConfigManager configManager = context.getSystemService(CarrierConfigManager.class);
        if (configManager == null) {
            return false;
        }
        PersistableBundle config = configManager.getConfigForSubId(subId);
        if (config == null) {
            return false;
        }
        return config.getBoolean(
                CarrierConfigManager.Ims.KEY_USE_SIP_URI_FOR_PRESENCE_SUBSCRIBE_BOOL);
    }

    /**
     * Get the minimum time that allow two PUBLISH requests can be executed continuously.
     *
Loading