diff options
| -rw-r--r-- | media/java/android/media/MediaActionSound.java | 27 | ||||
| -rw-r--r-- | media/java/android/media/MediaScanner.java | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 18 |
3 files changed, 36 insertions, 15 deletions
diff --git a/media/java/android/media/MediaActionSound.java b/media/java/android/media/MediaActionSound.java index 983ca754acd1..dcd4dce5f3eb 100644 --- a/media/java/android/media/MediaActionSound.java +++ b/media/java/android/media/MediaActionSound.java @@ -47,11 +47,16 @@ public class MediaActionSound { private SoundPool mSoundPool; private SoundState[] mSounds; + private static final String[] SOUND_DIRS = { + "/product/media/audio/ui/", + "/system/media/audio/ui/", + }; + private static final String[] SOUND_FILES = { - "/system/media/audio/ui/camera_click.ogg", - "/system/media/audio/ui/camera_focus.ogg", - "/system/media/audio/ui/VideoRecord.ogg", - "/system/media/audio/ui/VideoStop.ogg" + "camera_click.ogg", + "camera_focus.ogg", + "VideoRecord.ogg", + "VideoStop.ogg" }; private static final String TAG = "MediaActionSound"; @@ -132,12 +137,16 @@ public class MediaActionSound { } private int loadSound(SoundState sound) { - int id = mSoundPool.load(SOUND_FILES[sound.name], 1); - if (id > 0) { - sound.state = STATE_LOADING; - sound.id = id; + final String soundFileName = SOUND_FILES[sound.name]; + for (String soundDir : SOUND_DIRS) { + int id = mSoundPool.load(soundDir + soundFileName, 1); + if (id > 0) { + sound.state = STATE_LOADING; + sound.id = id; + return id; + } } - return id; + return 0; } /** diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index cb4e46fe945a..c3090389aa37 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -158,6 +158,7 @@ public class MediaScanner implements AutoCloseable { public static final String SCANNED_BUILD_PREFS_NAME = "MediaScanBuild"; public static final String LAST_INTERNAL_SCAN_FINGERPRINT = "lastScanFingerprint"; private static final String SYSTEM_SOUNDS_DIR = "/system/media/audio"; + private static final String PRODUCT_SOUNDS_DIR = "/product/media/audio"; private static String sLastInternalScanFingerprint; private static final String[] ID3_GENRES = { @@ -1153,7 +1154,10 @@ public class MediaScanner implements AutoCloseable { private static boolean isSystemSoundWithMetadata(String path) { if (path.startsWith(SYSTEM_SOUNDS_DIR + ALARMS_DIR) || path.startsWith(SYSTEM_SOUNDS_DIR + RINGTONES_DIR) - || path.startsWith(SYSTEM_SOUNDS_DIR + NOTIFICATIONS_DIR)) { + || path.startsWith(SYSTEM_SOUNDS_DIR + NOTIFICATIONS_DIR) + || path.startsWith(PRODUCT_SOUNDS_DIR + ALARMS_DIR) + || path.startsWith(PRODUCT_SOUNDS_DIR + RINGTONES_DIR) + || path.startsWith(PRODUCT_SOUNDS_DIR + NOTIFICATIONS_DIR)) { return true; } return false; diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index bedf043147de..edeee3e590ea 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -133,6 +133,7 @@ import com.android.server.pm.UserManagerService; import org.xmlpull.v1.XmlPullParserException; +import java.io.File; import java.io.FileDescriptor; import java.io.IOException; import java.io.PrintWriter; @@ -4767,6 +4768,16 @@ public class AudioService extends IAudioService.Stub Settings.Global.putInt(mContentResolver, Settings.Global.MODE_RINGER, ringerMode); } + private String getSoundEffectFilePath(int effectType) { + String filePath = Environment.getProductDirectory() + SOUND_EFFECTS_PATH + + SOUND_EFFECT_FILES.get(SOUND_EFFECT_FILES_MAP[effectType][0]); + if (!new File(filePath).isFile()) { + filePath = Environment.getRootDirectory() + SOUND_EFFECTS_PATH + + SOUND_EFFECT_FILES.get(SOUND_EFFECT_FILES_MAP[effectType][0]); + } + return filePath; + } + private boolean onLoadSoundEffects() { int status; @@ -4836,9 +4847,7 @@ public class AudioService extends IAudioService.Stub continue; } if (poolId[SOUND_EFFECT_FILES_MAP[effect][0]] == -1) { - String filePath = Environment.getRootDirectory() - + SOUND_EFFECTS_PATH - + SOUND_EFFECT_FILES.get(SOUND_EFFECT_FILES_MAP[effect][0]); + String filePath = getSoundEffectFilePath(effect); int sampleId = mSoundPool.load(filePath, 0); if (sampleId <= 0) { Log.w(TAG, "Soundpool could not load file: "+filePath); @@ -4944,8 +4953,7 @@ public class AudioService extends IAudioService.Stub } else { MediaPlayer mediaPlayer = new MediaPlayer(); try { - String filePath = Environment.getRootDirectory() + SOUND_EFFECTS_PATH + - SOUND_EFFECT_FILES.get(SOUND_EFFECT_FILES_MAP[effectType][0]); + String filePath = getSoundEffectFilePath(effectType); mediaPlayer.setDataSource(filePath); mediaPlayer.setAudioStreamType(AudioSystem.STREAM_SYSTEM); mediaPlayer.prepare(); |