166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen/* 266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Copyright (C) 2010-2011 The Android Open Source Project 366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * you may not use this file except in compliance with the License. 666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * You may obtain a copy of the License at 766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * 1066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * Unless required by applicable law or agreed to in writing, software 1166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 1266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * See the License for the specific language governing permissions and 1466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen * limitations under the License. 1566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen */ 1666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 1766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenpackage com.android.musicfx; 1866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 1966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.content.BroadcastReceiver; 2066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.content.Context; 2166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.content.Intent; 2266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.media.audiofx.AudioEffect; 2366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.os.Bundle; 2466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport android.util.Log; 2566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 2666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenimport java.util.HashMap; 2766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 2866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissenpublic class ControlPanelReceiver extends BroadcastReceiver { 2966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen private final static String TAG = "MusicFXControlPanelReceiver"; 3166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen @Override 3366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen public void onReceive(final Context context, final Intent intent) { 3466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "onReceive"); 3666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 3766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if ((context == null) || (intent == null)) { 3866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.w(TAG, "Context or intent is null. Do nothing."); 3966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 4066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 4166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 4266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String action = intent.getAction(); 4366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String packageName = intent.getStringExtra(AudioEffect.EXTRA_PACKAGE_NAME); 4466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final int audioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, 4566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen AudioEffect.ERROR_BAD_VALUE); 4666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 4766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Action: " + action); 4866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Package name: " + packageName); 4966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.v(TAG, "Audio session: " + audioSession); 5066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 5166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // check package name 5266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (packageName == null) { 5366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.w(TAG, "Null package name"); 5466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 5566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 5666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 5766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // check audio session 5866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if ((audioSession == AudioEffect.ERROR_BAD_VALUE) || (audioSession < 0)) { 5966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Log.w(TAG, "Invalid or missing audio session " + audioSession); 6066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen return; 6166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 6266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 6366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // open audio session 6466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (action.equals(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION)) { 6566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 6666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // retrieve the effect enabled state 6766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final boolean isGlobalEnabled = context.getSharedPreferences(packageName, 6866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen Context.MODE_PRIVATE).getBoolean( 6966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen ControlPanelEffect.Key.global_enabled.toString(), 7066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen ControlPanelEffect.GLOBAL_ENABLED_DEFAULT); 7166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 7266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen ControlPanelEffect.openSession(context, packageName, audioSession); 7366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 7466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 7566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // close audio session 7666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (action.equals(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION)) { 7766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 7866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen ControlPanelEffect.closeSession(context, packageName, audioSession); 7966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 8066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 8166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // set params 8266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (action.equals("AudioEffect.ACTION_SET_PARAM")) { 8366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String param = intent.getStringExtra("AudioEffect.EXTRA_PARAM"); 8466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 8566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (param.equals("GLOBAL_ENABLED")) { 8666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Boolean value = intent.getBooleanExtra("AudioEffect.EXTRA_VALUE", false); 8766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen ControlPanelEffect.setParameterBoolean(context, packageName, audioSession, 8866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen ControlPanelEffect.Key.global_enabled, value); 8966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 9066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 9166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 9266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen // get params 9366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (action.equals("AudioEffect.ACTION_GET_PARAM")) { 9466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final String param = intent.getStringExtra("AudioEffect.EXTRA_PARAM"); 9566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen 9666f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen if (param.equals("GLOBAL_ENABLED")) { 9766f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Boolean value = ControlPanelEffect.getParameterBoolean(context, packageName, 9866f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen audioSession, ControlPanelEffect.Key.global_enabled); 9966f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen final Bundle extras = new Bundle(); 10066f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen extras.putBoolean("GLOBAL_ENABLED", value); 10166f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen setResultExtras(extras); 10266f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 10366f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 10466f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen } 10566f2cfede1affd65ebc0b2e6854d2aabcfd9bb90Marco Nelissen} 106