package rabbitescape.ui.android; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import rabbitescape.engine.config.Config; import rabbitescape.engine.config.ConfigTools; import rabbitescape.render.androidutil.Lifecycle2SoundEvents; import rabbitescape.ui.android.sound.AndroidSound; public abstract class RabbitEscapeActivity extends ActionBarActivity { protected static final AndroidSound sound = Globals.sound; private static final Lifecycle2SoundEvents<Activity> soundEvents = Globals.soundEvents; private Config config; private boolean muted; private NoisyReceiver noisyReceiver; @Override protected void onRestart() { super.onRestart(); soundEvents.onRestart( this ); } @Override protected void onStart() { super.onStart(); soundEvents.onStart( this ); } @Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); soundEvents.onCreate( this ); config = AndroidConfigSetup.createConfig( getSharedPreferences( "rabbitescape", MODE_PRIVATE ) ); } @Override protected void onResume() { super.onResume(); soundEvents.onResume( this ); muted = ConfigTools.getBool( config, AndroidConfigSetup.CFG_MUTED ); sound.mute( muted ); updateMuteButton( muted ); listenForAudioBecomingNoisy(); } @Override protected void onSaveInstanceState( Bundle outState ) { super.onSaveInstanceState( outState ); soundEvents.onSaveInstanceState( this ); } @Override protected void onPause() { super.onPause(); soundEvents.onPause( this ); stopListeningForAudioBecomingNoisy(); } @Override protected void onStop() { super.onStop(); soundEvents.onStop( this ); } @Override protected void onDestroy() { super.onDestroy(); soundEvents.onDestroy( this ); } public Config getConfig() { return config; } public void onMuteClicked( View view ) { setMuted( !getMuted() ); } public void setMuted( boolean newMuted ) { muted = newMuted; sound.mute( muted ); ConfigTools.setBool( config, AndroidConfigSetup.CFG_MUTED, muted ); updateMuteButton( muted ); } public boolean getMuted() { return muted; } public abstract void updateMuteButton( boolean muted ); private class NoisyReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { setMuted( true ); } } private void listenForAudioBecomingNoisy() { noisyReceiver = new NoisyReceiver(); registerReceiver( noisyReceiver, new IntentFilter( "android.media.AUDIO_BECOMING_NOISY" ) ); } private void stopListeningForAudioBecomingNoisy() { unregisterReceiver( noisyReceiver ); } }