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) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -5,7 +5,7 @@
<item
android:id="@+id/action_current_playing"
android:icon="@drawable/ic_equalizer_white_24dp"
android:icon="@drawable/ic_play_circle_outline_white_24dp"
android:title="@string/action_current_playing"
app:showAsAction="ifRoom"/>
@ -29,4 +29,10 @@
android:id="@+id/action_tag_editor"
android:title="@string/action_tag_editor"
app:showAsAction="never"/>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
</menu>

View file

@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_current_playing"
android:icon="@drawable/ic_equalizer_white_24dp"
android:icon="@drawable/ic_play_circle_outline_white_24dp"
android:title="@string/action_current_playing"
app:showAsAction="always"/>
@ -52,6 +52,12 @@
</menu>
</item>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"

View file

@ -5,7 +5,7 @@
<item
android:id="@+id/action_current_playing"
android:icon="@drawable/ic_equalizer_white_24dp"
android:icon="@drawable/ic_play_circle_outline_white_24dp"
android:title="@string/action_current_playing"
app:showAsAction="ifRoom"/>
@ -29,4 +29,10 @@
android:id="@+id/action_re_download_artist_image"
android:title="@string/action_re_download_artist_image"
app:showAsAction="never"/>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
</menu>

View file

@ -5,7 +5,7 @@
<item
android:id="@+id/action_current_playing"
android:icon="@drawable/ic_equalizer_white_24dp"
android:icon="@drawable/ic_play_circle_outline_white_24dp"
android:title="@string/action_current_playing"
app:showAsAction="always"/>
@ -26,6 +26,12 @@
android:title="@string/action_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"

View file

@ -29,6 +29,12 @@
android:id="@+id/action_tag_editor"
android:title="@string/action_tag_editor"
app:showAsAction="never"/>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
<item
android:id="@+id/action_details"
android:title="@string/action_details"

View file

@ -4,13 +4,20 @@
tools:context="com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity">
<item
android:id="@+id/action_current_playing"
android:icon="@drawable/ic_equalizer_white_24dp"
android:icon="@drawable/ic_play_circle_outline_white_24dp"
android:title="@string/action_current_playing"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_playing_queue"
android:title="@string/action_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"

View file

@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_current_playing"
android:icon="@drawable/ic_equalizer_white_24dp"
android:icon="@drawable/ic_play_circle_outline_white_24dp"
android:title="@string/action_current_playing"
app:showAsAction="always"/>
@ -28,6 +28,12 @@
android:title="@string/action_playing_queue"
app:showAsAction="never"/>
<item
android:id="@+id/action_equalizer"
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"

View file

@ -95,5 +95,19 @@
<string name="title_setting_start_page">Start page</string>
<string name="light_theme_name">Light</string>
<string name="dark_theme_name">Dark</string>
<string name="equalizer">Equalizer</string>
<string name="pref_header_ui">UI</string>
<string name="pref_title_general_theme">General theme</string>
<string name="pref_header_audio">Audio</string>
<string name="pref_header_general">General</string>
<string name="pref_title_set_default_start_page">Set default start page</string>
<string name="title_activity_settings">Settings</string>
<string name="pref_title_transparent_toolbar">Semi-Transparent toolbar</string>
<string name="pref_title_show_playback_controller_card">Playback controller card</string>
<string name="pref_title_colored_navigation_bar_artists">Colored navigation bar artist view</string>
<string name="pref_title_colored_navigation_bar_albums">Colored navigation bar album view</string>
<string name="pref_title_colored_album_footers">Colored album footers</string>
<string name="no_equalizer">No equalizer found</string>
<string name="no_audio_id">No audio id, play something and try again.</string>
</resources>

View file

@ -1,11 +1,4 @@
<resources>
<string name="title_activity_settings">Settings</string>
<!-- Strings related to Settings -->
<!-- General settings -->
<string name="pref_header_general">General</string>
<string name="pref_title_set_default_start_page">Set default start page</string>
<string-array name="pref_start_page_list_titles">
<item>@string/last_opened</item>
<item>@string/songs</item>
@ -13,6 +6,7 @@
<item>@string/artists</item>
<item>@string/playlists</item>
</string-array>
<string-array name="pref_start_page_list_values">
<item>-1</item>
<item>0</item>
@ -21,21 +15,14 @@
<item>3</item>
</string-array>
<!-- UI settings -->
<string name="pref_header_ui">UI</string>
<string name="pref_title_general_theme">General theme</string>
<string-array name="pref_general_theme_list_titles">
<item>@string/light_theme_name</item>
<item>@string/dark_theme_name</item>
</string-array>
<string-array name="pref_general_theme_list_values">
<item>0</item>
<item>1</item>
</string-array>
<string name="pref_title_transparent_toolbar">Semi-Transparent toolbar</string>
<string name="pref_title_show_playback_controller_card">Playback controller card</string>
<string name="pref_title_colored_navigation_bar_artists">Colored navigation bar artist view</string>
<string name="pref_title_colored_navigation_bar_albums">Colored navigation bar album view</string>
<string name="pref_title_colored_album_footers">Colored album footers</string>
</resources>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/pref_header_audio">
<Preference
android:key="equalizer"
android:title="@string/equalizer"/>
</PreferenceCategory>
</PreferenceScreen>

View file

@ -2,7 +2,7 @@
<PreferenceCategory
android:title="@string/pref_header_ui">
<com.afollestad.materialdialogs.prefs.MaterialListPreference
android:defaultValue="1"
android:defaultValue="0"
android:entries="@array/pref_general_theme_list_titles"
android:entryValues="@array/pref_general_theme_list_values"
android:key="general_theme"
@ -11,12 +11,12 @@
android:title="@string/pref_title_general_theme"/>
<CheckBoxPreference
android:defaultValue="true"
android:defaultValue="false"
android:key="transparent_toolbar"
android:title="@string/pref_title_transparent_toolbar"/>
<CheckBoxPreference
android:defaultValue="true"
android:defaultValue="false"
android:key="playback_controller_card"
android:title="@string/pref_title_show_playback_controller_card"/>