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

Commit 3c60361e authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Resolve cross account user ringtone validation." into udc-qpr-dev

parents 62ea0c36 cfc855ba
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3151,7 +3151,8 @@ public class Call implements CreateConnectionResponse, EventManager.Loggable,
        return Contacts.getLookupUri(mCallerInfo.getContactId(), mCallerInfo.lookupKey);
    }

    Uri getRingtone() {
    @VisibleForTesting
    public Uri getRingtone() {
        return mCallerInfo == null ? null : mCallerInfo.contactRingtoneUri;
    }

+27 −6
Original line number Diff line number Diff line
@@ -80,13 +80,19 @@ public class RingtoneFactory {
        Ringtone ringtone = null;

        if (ringtoneUri != null && userContext != null) {
            // Ringtone URI is explicitly specified. First, try to create a Ringtone with that.
            if (currentUserOwnsRingtone(ringtoneUri, incomingCall)) {
                // Ringtone URI is explicitly specified and owned by the current user - try to
                // create a Ringtone with that.
                try {
                    ringtone = RingtoneManager.getRingtone(
                            userContext, ringtoneUri, volumeShaperConfig, audioAttrs);
                } catch (Exception e) {
                    Log.e(this, e, "getRingtone: exception while getting ringtone.");
                }
            } else {
                Log.w(this, "getRingtone: Failed to verify that the custom ringtone URI"
                        + " is owned by the current user. Falling back to the default ringtone.");
            }
        }
        if (ringtone == null) {
            // Contact didn't specify ringtone or custom Ringtone creation failed. Get default
@@ -120,6 +126,21 @@ public class RingtoneFactory {
        return ringtone;
    }

    private static boolean currentUserOwnsRingtone(Uri ringtoneUri, Call incomingCall) {
        if (TextUtils.isEmpty(ringtoneUri.getUserInfo()) ||
                incomingCall.getAssociatedUser() == null) {
            return false;
        }

        UserHandle associatedUser = incomingCall.getAssociatedUser();
        if (associatedUser == null) {
            return false;
        }

        String currentUserId = String.valueOf(associatedUser.getIdentifier());
        return currentUserId.equals(ringtoneUri.getUserInfo());
    }

    private AudioAttributes getDefaultRingtoneAudioAttributes(boolean hapticChannelsMuted) {
        return new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)