diff options
Diffstat (limited to 'src/org/cyanogenmod/audiofx/ControlPanelReceiver.java')
-rw-r--r-- | src/org/cyanogenmod/audiofx/ControlPanelReceiver.java | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/audiofx/ControlPanelReceiver.java b/src/org/cyanogenmod/audiofx/ControlPanelReceiver.java new file mode 100644 index 0000000..4c693ec --- /dev/null +++ b/src/org/cyanogenmod/audiofx/ControlPanelReceiver.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2010-2011 The Android Open Source 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.audiofx; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.media.audiofx.AudioEffect; +import android.os.Bundle; +import android.util.Log; + +import java.util.HashMap; + +public class ControlPanelReceiver extends BroadcastReceiver { + + private final static String TAG = "AudioFXControlPanelReceiver"; + + @Override + public void onReceive(final Context context, final Intent intent) { + + Log.v(TAG, "onReceive"); + + if ((context == null) || (intent == null)) { + Log.w(TAG, "Context or intent is null. Do nothing."); + return; + } + + final String action = intent.getAction(); + final String packageName = intent.getStringExtra(AudioEffect.EXTRA_PACKAGE_NAME); + final int audioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, + AudioEffect.ERROR_BAD_VALUE); + + Log.v(TAG, "Action: " + action); + Log.v(TAG, "Package name: " + packageName); + Log.v(TAG, "Audio session: " + audioSession); + + // check package name + if (packageName == null) { + Log.w(TAG, "Null package name"); + return; + } + + // check audio session + if ((audioSession == AudioEffect.ERROR_BAD_VALUE) || (audioSession < 0)) { + Log.w(TAG, "Invalid or missing audio session " + audioSession); + return; + } + + // open audio session + if (action.equals(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION)) { + + // retrieve the effect enabled state + final boolean isGlobalEnabled = context.getSharedPreferences(packageName, + Context.MODE_PRIVATE).getBoolean( + ControlPanelEffect.Key.global_enabled.toString(), + ControlPanelEffect.GLOBAL_ENABLED_DEFAULT); + + ControlPanelEffect.openSession(context, packageName, audioSession); + } + + // close audio session + if (action.equals(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION)) { + + ControlPanelEffect.closeSession(context, packageName, audioSession); + } + + // set params + if (action.equals("AudioEffect.ACTION_SET_PARAM")) { + final String param = intent.getStringExtra("AudioEffect.EXTRA_PARAM"); + + if (param.equals("GLOBAL_ENABLED")) { + final Boolean value = intent.getBooleanExtra("AudioEffect.EXTRA_VALUE", false); + ControlPanelEffect.setParameterBoolean(context, packageName, audioSession, + ControlPanelEffect.Key.global_enabled, value); + } + } + + // get params + if (action.equals("AudioEffect.ACTION_GET_PARAM")) { + final String param = intent.getStringExtra("AudioEffect.EXTRA_PARAM"); + + if (param.equals("GLOBAL_ENABLED")) { + final Boolean value = ControlPanelEffect.getParameterBoolean(context, packageName, + audioSession, ControlPanelEffect.Key.global_enabled); + final Bundle extras = new Bundle(); + extras.putBoolean("GLOBAL_ENABLED", value); + setResultExtras(extras); + } + } + } +} |