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

Commit 557b2acd authored by kaiyiz's avatar kaiyiz
Browse files

RP: Notification and ringtone can't be overlaid by carrier

There are some logic error for ringtone and notification
overlay when sound customized. Reconstruct these code to
make it overlay the right ringtone and notification.

Change-Id: I0fd0abfe833c7920bf3ce6829998b92644eae48c
CRs-Fixed: 761741
parent bf84da05
Loading
Loading
Loading
Loading
+74 −40
Original line number Diff line number Diff line
@@ -336,6 +336,13 @@ public class MediaScanner
    private boolean mDefaultNotificationSet;
    /** Whether the scanner has set a default sound for the alarm ringtone. */
    private boolean mDefaultAlarmSet;
    /** Whether the scanner has set a default sound for the ringer ringtone 2. */
    private boolean mDefaultRingtone2Set;
    /** Whether the scanner has set a default sound for the ringer ringtone 3. */
    private boolean mDefaultRingtone3Set;
    /** Whether the scanner has set a default sound for the mms notification ringtone. */
    private boolean mDefaultMmsNotificationSet;

    /** The filename for the default sound for the ringer ringtone. */
    private String mDefaultRingtoneFilename;
    /** The filename for the default sound for the ringer ringtone 2. */
@@ -437,15 +444,19 @@ public class MediaScanner
                    + Settings.System.RINGTONE);
        }

        if (!TextUtils
                .isEmpty(mContext.getResources().getString(R.string.def_custom_sys_ringtone2))) {
            mDefaultRingtone2Filename = mContext.getResources().getString(
                    R.string.def_custom_sys_ringtone2);
        if (mDefaultRingtone2Filename == null || TextUtils.isEmpty(mDefaultRingtone2Filename)) {
        } else {
            mDefaultRingtone2Filename = mDefaultRingtoneFilename;
        }

        if (!TextUtils
                .isEmpty(mContext.getResources().getString(R.string.def_custom_sys_ringtone3))) {
            mDefaultRingtone3Filename = mContext.getResources().getString(
                    R.string.def_custom_sys_ringtone3);
        if (mDefaultRingtone3Filename == null || TextUtils.isEmpty(mDefaultRingtone3Filename)) {
        } else {
            mDefaultRingtone3Filename = mDefaultRingtoneFilename;
        }

@@ -458,10 +469,10 @@ public class MediaScanner
                    + Settings.System.NOTIFICATION_SOUND);
        }

        if (!TextUtils.isEmpty(mContext.getResources().getString(R.string.def_custom_sys_mms))) {
            mDefaultMmsNotificationFilename = mContext.getResources().getString(
                    R.string.def_custom_sys_mms);
        if (mDefaultMmsNotificationFilename == null
                || TextUtils.isEmpty(mDefaultMmsNotificationFilename.trim())) {
        } else {
            mDefaultMmsNotificationFilename = mDefaultNotificationFilename;
        }

@@ -988,6 +999,9 @@ public class MediaScanner
            }
            Uri result = null;
            boolean needToSetSettings = false;
            boolean needToCustomizeMmsNotification = false;
            boolean needToCustomizeRingtone2 = false;
            boolean needToCustomizeRingtone3 = false;
            if (rowId == 0) {
                if (mMtpObjectHandle != 0) {
                    values.put(MediaStore.MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, mMtpObjectHandle);
@@ -1004,11 +1018,26 @@ public class MediaScanner
                // needed.
                if (mWasEmptyPriorToScan) {
                    if (notifications && !mDefaultNotificationSet) {
                        needToSetSettings = needToSetSettingsForNotification(entry);
                        needToSetSettings = toSetSettings(entry.mPath, mDefaultNotificationFilename);
                    } else if (ringtones && !mDefaultRingtoneSet) {
                        needToSetSettings = needToSetSettingsForRingtone(entry);
                        needToSetSettings = toSetSettings(entry.mPath, mDefaultRingtoneFilename);
                    } else if (alarms && !mDefaultAlarmSet) {
                        needToSetSettings = needToSetSettingsForAlarm(entry);
                        needToSetSettings = toSetSettings(entry.mPath, mDefaultAlarmAlertFilename);
                    }
                    if (isSoundCustomized()) {
                        if (notifications && !mDefaultMmsNotificationSet) {
                            needToCustomizeMmsNotification = toSetSettings(entry.mPath,
                                    mDefaultMmsNotificationFilename);
                        } else if (ringtones) {
                            if (!mDefaultRingtone2Set) {
                                needToCustomizeRingtone2 = toSetSettings(entry.mPath,
                                        mDefaultRingtone2Filename);
                            }
                            if (!mDefaultRingtone3Set) {
                                needToCustomizeRingtone3 = toSetSettings(entry.mPath,
                                        mDefaultRingtone3Filename);
                            }
                        }
                    }
                }

@@ -1017,7 +1046,10 @@ public class MediaScanner
                // get priority when bulk inserting.
                // If the rowId of the inserted file is needed, it gets inserted immediately,
                // bypassing the bulk inserter.
                if (inserter == null || needToSetSettings) {
                if (inserter == null || needToSetSettings
                        || needToCustomizeMmsNotification
                        || needToCustomizeRingtone2
                        || needToCustomizeRingtone3) {
                    if (inserter != null) {
                        inserter.flushAll();
                    }
@@ -1059,10 +1091,6 @@ public class MediaScanner
            if(needToSetSettings) {
                if (notifications) {
                    setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId);
                    if (isSoundCustomized()) {
                        setSettingIfNotSet(Settings.System.MMS_NOTIFICATION_SOUND, tableUri, rowId);
                    }

                    mDefaultNotificationSet = true;
                } else if (ringtones) {
                    // memorize default system ringtone persistently
@@ -1088,34 +1116,35 @@ public class MediaScanner
                }
            }

            return result;
        }

        private boolean needToSetSettingsForNotification(FileEntry entry) {
            boolean result = TextUtils.isEmpty(mDefaultNotificationFilename)
                    || doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename);
            if (isSoundCustomized()) {
                result = result || TextUtils.isEmpty(mDefaultMmsNotificationFilename)
                        || doesPathHaveFilename(entry.mPath, mDefaultMmsNotificationFilename);
                if (notifications && needToCustomizeMmsNotification) {
                    overrideSetting(Settings.System.MMS_NOTIFICATION_SOUND, tableUri, rowId);
                    mDefaultMmsNotificationSet = true;
                } else if (ringtones) {
                    int phoneCount = TelephonyManager.getDefault().getPhoneCount();
                    if (phoneCount == 2 && needToCustomizeRingtone2) {
                        overrideSetting(Settings.System.RINGTONE_2, tableUri, rowId);
                        mDefaultRingtone2Set = true;
                    }
            return result;
                    if (phoneCount == 3) {
                        if (needToCustomizeRingtone2) {
                            overrideSetting(Settings.System.RINGTONE_2, tableUri, rowId);
                            mDefaultRingtone2Set = true;
                        }
                        if (needToCustomizeRingtone3) {
                            overrideSetting(Settings.System.RINGTONE_3, tableUri, rowId);
                            mDefaultRingtone3Set = true;
                        }

        private boolean needToSetSettingsForRingtone(FileEntry entry) {
            boolean result = TextUtils.isEmpty(mDefaultRingtoneFilename)
                    || doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename);
            if (isSoundCustomized()) {
                result = result || TextUtils.isEmpty(mDefaultRingtone2Filename)
                        || doesPathHaveFilename(entry.mPath, mDefaultRingtone2Filename)
                        || TextUtils.isEmpty(mDefaultRingtone3Filename)
                        || doesPathHaveFilename(entry.mPath, mDefaultRingtone3Filename);
                    }
                }
            }

            return result;
        }

        private boolean needToSetSettingsForAlarm(FileEntry entry) {
            return TextUtils.isEmpty(mDefaultAlarmAlertFilename)
                    || doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename);
        private boolean toSetSettings(String path, String filename) {
            return TextUtils.isEmpty(filename) ||
                    doesPathHaveFilename(path, filename);
        }

        private boolean doesPathHaveFilename(String path, String filename) {
@@ -1137,6 +1166,11 @@ public class MediaScanner
            }
        }

        private void overrideSetting(String settingName, Uri uri, long rowId) {
            Settings.System.putString(mContext.getContentResolver(), settingName,
                    ContentUris.withAppendedId(uri, rowId).toString());
        }

        private int getFileTypeFromDrm(String path) {
            if (!isDrmEnabled()) {
                return 0;
+11 −0
Original line number Diff line number Diff line
@@ -73,6 +73,13 @@ public class RingtoneManager {
     */
    public static final int TYPE_ALARM = 4;

    /**
     * Type that refers to sounds that are used for mms notifications.
     * Note: This constant value is only for internal usage and
     * can't be added to TYPE_ALL.
     */
    private static final int TYPE_MMS_NOTIFICATION = 0x00800000;
    
    /**
     * All types of sounds.
     */
@@ -698,6 +705,8 @@ public class RingtoneManager {
            return Settings.System.NOTIFICATION_SOUND;
        } else if ((type & TYPE_ALARM) != 0) {
            return Settings.System.ALARM_ALERT;
        } else if ((type & TYPE_MMS_NOTIFICATION) != 0) {
            return Settings.System.MMS_NOTIFICATION_SOUND;
        } else {
            return null;
        }
@@ -733,6 +742,8 @@ public class RingtoneManager {
            return TYPE_NOTIFICATION;
        } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_ALARM_ALERT_URI)) {
            return TYPE_ALARM;
        } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_MMS_NOTIFICATION_URI)) {
            return TYPE_MMS_NOTIFICATION;
        } else {
            return -1;
        }