diff options
author | Clark Scheff <clark@cyngn.com> | 2014-07-09 15:49:03 -0700 |
---|---|---|
committer | d34d <clark@cyngn.com> | 2014-07-10 08:35:10 -0700 |
commit | e7a0b1076f5e2ccf4c2a84dc58e97a296e83b4d0 (patch) | |
tree | a3c8f89aa60fc77dd90694c69dbb56070b99c116 /src/org/cyanogenmod/theme/util/AudioUtils.java | |
parent | 95daf276638aae28ab567fce1bfb0088818e2d85 (diff) | |
download | packages_apps_ThemeChooser-e7a0b1076f5e2ccf4c2a84dc58e97a296e83b4d0.zip packages_apps_ThemeChooser-e7a0b1076f5e2ccf4c2a84dc58e97a296e83b4d0.tar.gz packages_apps_ThemeChooser-e7a0b1076f5e2ccf4c2a84dc58e97a296e83b4d0.tar.bz2 |
Add component selection for sounds.
Change-Id: Ib72c4c3a97bde11a6a5547c1c8f15b3e5059bb1a
Diffstat (limited to 'src/org/cyanogenmod/theme/util/AudioUtils.java')
-rw-r--r-- | src/org/cyanogenmod/theme/util/AudioUtils.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/theme/util/AudioUtils.java b/src/org/cyanogenmod/theme/util/AudioUtils.java new file mode 100644 index 0000000..214f02e --- /dev/null +++ b/src/org/cyanogenmod/theme/util/AudioUtils.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2014 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.cyanogenmod.theme.util; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ThemeUtils; +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; +import android.content.res.ThemeConfig; +import android.media.MediaPlayer; +import android.media.RingtoneManager; +import android.util.Log; + +import java.io.File; +import java.io.IOException; + +public class AudioUtils { + private static final String TAG = AudioUtils.class.getSimpleName(); + + public static void loadThemeAudible(Context context, int type, String pkgName, MediaPlayer mp) + throws PackageManager.NameNotFoundException { + if (ThemeConfig.HOLO_DEFAULT.equals(pkgName)) { + loadSystemAudible(type, mp); + return; + } + PackageInfo pi = context.getPackageManager().getPackageInfo(pkgName, 0); + Context themeCtx = context.createPackageContext(pkgName, 0); + if (pi.isLegacyThemeApk) { + loadLegacyThemeAudible(themeCtx, type, pi, mp); + return; + } + AssetManager assetManager = themeCtx.getAssets(); + String assetPath; + switch (type) { + case RingtoneManager.TYPE_ALARM: + assetPath = "alarms"; + break; + case RingtoneManager.TYPE_NOTIFICATION: + assetPath = "notifications"; + break; + case RingtoneManager.TYPE_RINGTONE: + assetPath = "ringtones"; + break; + default: + assetPath = null; + break; + } + if (assetPath != null) { + try { + String[] assetList = assetManager.list(assetPath); + if (assetList != null && assetList.length > 0) { + AssetFileDescriptor afd = assetManager.openFd(assetPath + + File.separator + assetList[0]); + if (mp != null) { + mp.reset(); + mp.setDataSource(afd.getFileDescriptor(), + afd.getStartOffset(), afd.getLength()); + mp.prepare(); + } + } + } catch (IOException e) { + Log.e(TAG, "Unable to load sound for " + pkgName, e); + } + } + } + + public static void loadLegacyThemeAudible(Context themeCtx, int type, PackageInfo pi, + MediaPlayer mp) { + if (pi.legacyThemeInfos == null || pi.legacyThemeInfos.length == 0) + return; + AssetManager assetManager = themeCtx.getAssets(); + String assetPath; + switch (type) { + case RingtoneManager.TYPE_NOTIFICATION: + assetPath = pi.legacyThemeInfos[0].notificationFileName; + break; + case RingtoneManager.TYPE_RINGTONE: + assetPath = pi.legacyThemeInfos[0].ringtoneFileName; + break; + default: + assetPath = null; + break; + } + if (assetPath != null) { + try { + AssetFileDescriptor afd = assetManager.openFd(assetPath); + if (mp != null) { + mp.reset(); + mp.setDataSource(afd.getFileDescriptor(), + afd.getStartOffset(), afd.getLength()); + mp.prepare(); + } + } catch (IOException e) { + Log.e(TAG, "Unable to load legacy sound for " + pi.packageName, e); + } + } + } + + public static void loadSystemAudible(int type, MediaPlayer mp) { + final String audiblePath = ThemeUtils.getDefaultAudiblePath(type); + if (audiblePath != null && (new File(audiblePath)).exists()) { + try { + mp.reset(); + mp.setDataSource(audiblePath); + mp.prepare(); + } catch (IOException e) { + Log.e(TAG, "Unable to load system sound " + audiblePath, e); + } + } + } + +} |