0.9.8b equalizer
This commit is contained in:
parent
c1a4185549
commit
89e62a2390
37 changed files with 183 additions and 34 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue