0.9.8b equalizer

This commit is contained in:
Karim Abou Zeid 2015-04-14 21:55:37 +02:00
commit 89e62a2390
37 changed files with 183 additions and 34 deletions

View file

@ -4,6 +4,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.audiofx.AudioEffect;
import android.net.Uri;
import android.os.IBinder;
import android.preference.PreferenceManager;
@ -283,6 +284,13 @@ public class MusicPlayerRemote {
App.bus.post(musicRemoteEvent);
}
public static int getAudioSessionId() {
if (musicService != null) {
return musicService.getAudioSessionId();
}
return AudioEffect.ERROR_BAD_VALUE;
}
@SuppressWarnings("unchecked")
public static void restorePreviousState() {
try {

View file

@ -14,6 +14,7 @@ import android.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.media.RemoteControlClient;
import android.media.audiofx.AudioEffect;
import android.net.Uri;
import android.os.Binder;
import android.os.IBinder;
@ -171,6 +172,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
@Override
public void onDestroy() {
closeAudioEffectSession();
unregisterEverything();
killEverythingAndReleaseResources();
}
@ -315,11 +317,27 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.TRACK_CHANGED);
}
private boolean requestFocus() {
int result = getAudioManager().requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
private void openAudioEffectSession() {
if (player != null) {
final Intent intent = new Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION);
intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, getAudioSessionId());
intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName());
intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC);
sendBroadcast(intent);
}
}
return (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
private void closeAudioEffectSession() {
if (player != null) {
final Intent audioEffectsIntent = new Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION);
audioEffectsIntent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, player.getAudioSessionId());
audioEffectsIntent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName());
sendBroadcast(audioEffectsIntent);
}
}
private boolean requestFocus() {
return (getAudioManager().requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
}
private void updateRemoteControlClient() {
@ -449,6 +467,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
public void onPrepared(MediaPlayer mp) {
player.start();
isPlayerPrepared = true;
openAudioEffectSession();
playingNotificationHelper.updatePlayState(isPlaying());
MusicPlayerWidget.updateWidgets(this);
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
@ -752,6 +771,10 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
}
}
public int getAudioSessionId() {
return player.getAudioSessionId();
}
public class MusicBinder extends Binder {
public MusicService getService() {
return MusicService.this;

View file

@ -259,6 +259,9 @@ public class AlbumDetailActivity extends AbsFabActivity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_equalizer:
NavigationUtil.openEqualizer(this);
return true;
case R.id.action_shuffle_all:
MusicPlayerRemote.shuffleAllSongs(this);
return true;

View file

@ -320,6 +320,9 @@ public class ArtistDetailActivity extends AbsFabActivity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_equalizer:
NavigationUtil.openEqualizer(this);
return true;
case R.id.action_shuffle_all:
MusicPlayerRemote.shuffleAllSongs(this);
return true;

View file

@ -260,6 +260,9 @@ public class MainActivity extends AbsFabActivity
int id = item.getItemId();
switch (id) {
case R.id.action_equalizer:
NavigationUtil.openEqualizer(this);
return true;
case R.id.action_shuffle_all:
MusicPlayerRemote.shuffleAllSongs(this);
return true;

View file

@ -417,6 +417,9 @@ public class MusicControllerActivity extends AbsFabActivity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_equalizer:
NavigationUtil.openEqualizer(this);
return true;
case R.id.action_shuffle_all:
MusicPlayerRemote.shuffleAllSongs(this);
return true;

View file

@ -89,6 +89,9 @@ public class PlaylistDetailActivity extends AbsFabActivity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_equalizer:
NavigationUtil.openEqualizer(this);
return true;
case android.R.id.home:
super.onBackPressed();
return true;

View file

@ -1,5 +1,9 @@
package com.kabouzeid.gramophone.ui.activities;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.media.audiofx.AudioEffect;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@ -12,6 +16,7 @@ import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
public class SettingsActivity extends AbsBaseActivity {
public static final String TAG = SettingsActivity.class.getSimpleName();
@ -27,11 +32,14 @@ public class SettingsActivity extends AbsBaseActivity {
}
public static class SettingsFragment extends PreferenceFragment {
private Preference equalizer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
addPreferencesFromResource(R.xml.pref_ui);
addPreferencesFromResource(R.xml.pref_audio);
final Preference defaultStartPage = findPreference("default_start_page");
setSummary(defaultStartPage);
@ -93,6 +101,16 @@ public class SettingsActivity extends AbsBaseActivity {
return true;
}
});
equalizer = findPreference("equalizer");
resolveEqualizer();
equalizer.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
NavigationUtil.openEqualizer(getActivity());
return true;
}
});
}
private static void setSummary(Preference preference) {
@ -115,6 +133,16 @@ public class SettingsActivity extends AbsBaseActivity {
preference.setSummary(stringValue);
}
}
private void resolveEqualizer() {
final Intent effects = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);
PackageManager pm = getActivity().getPackageManager();
ResolveInfo ri = pm.resolveActivity(effects, 0);
if (ri == null) {
equalizer.setEnabled(false);
equalizer.setSummary(getResources().getString(R.string.no_equalizer));
}
}
}
@Override

View file

@ -1,7 +1,9 @@
package com.kabouzeid.gramophone.util;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.media.audiofx.AudioEffect;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
@ -111,4 +113,20 @@ public class NavigationUtil {
Toast.makeText(activity, activity.getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
}
}
public static void openEqualizer(final Activity activity) {
final int sessionId = MusicPlayerRemote.getAudioSessionId();
if (sessionId == AudioEffect.ERROR_BAD_VALUE) {
Toast.makeText(activity, activity.getResources().getString(R.string.no_audio_id), Toast.LENGTH_LONG).show();
} else {
try {
final Intent effects = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);
effects.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId);
effects.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC);
activity.startActivityForResult(effects, 0);
} catch (final ActivityNotFoundException notFound) {
Toast.makeText(activity, activity.getResources().getString(R.string.no_equalizer), Toast.LENGTH_SHORT).show();
}
}
}
}

View file

@ -52,7 +52,7 @@ public final class PreferenceUtils {
case 1:
return R.style.Theme_MaterialMusic;
}
return R.style.Theme_MaterialMusic;
return R.style.Theme_MaterialMusic_Light;
}
public void setGeneralTheme(int appTheme) {
@ -144,7 +144,7 @@ public final class PreferenceUtils {
}
public final boolean playbackControllerBoxEnabled() {
return mPreferences.getBoolean(PLAYBACK_CONTROLLER_BOX, true);
return mPreferences.getBoolean(PLAYBACK_CONTROLLER_BOX, false);
}
public void setPlaybackControllerBoxEnabled(final boolean value) {
@ -154,7 +154,7 @@ public final class PreferenceUtils {
}
public final boolean transparentToolbar() {
return mPreferences.getBoolean(TRANSPARENT_TOOLBAR, true);
return mPreferences.getBoolean(TRANSPARENT_TOOLBAR, false);
}
public void setTransparentToolbar(final boolean value) {