From 89e62a23907a3b20cb276f4f9d3c4e79bed55d91 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Tue, 14 Apr 2015 21:55:37 +0200 Subject: [PATCH] 0.9.8b equalizer --- app/build.gradle | 6 ++-- .../gramophone/helper/MusicPlayerRemote.java | 8 +++++ .../gramophone/service/MusicService.java | 31 +++++++++++++++--- .../ui/activities/AlbumDetailActivity.java | 3 ++ .../ui/activities/ArtistDetailActivity.java | 3 ++ .../ui/activities/MainActivity.java | 3 ++ .../activities/MusicControllerActivity.java | 3 ++ .../ui/activities/PlaylistDetailActivity.java | 3 ++ .../ui/activities/SettingsActivity.java | 28 ++++++++++++++++ .../gramophone/util/NavigationUtil.java | 18 ++++++++++ .../gramophone/util/PreferenceUtils.java | 6 ++-- .../drawable-hdpi/ic_equalizer_black_24dp.png | Bin 195 -> 0 bytes .../drawable-hdpi/ic_equalizer_white_24dp.png | Bin 192 -> 0 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 609 bytes .../drawable-mdpi/ic_equalizer_black_24dp.png | Bin 167 -> 0 bytes .../drawable-mdpi/ic_equalizer_white_24dp.png | Bin 173 -> 0 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 414 bytes .../ic_equalizer_black_24dp.png | Bin 202 -> 0 bytes .../ic_equalizer_white_24dp.png | Bin 207 -> 0 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 835 bytes .../ic_equalizer_black_24dp.png | Bin 220 -> 0 bytes .../ic_equalizer_white_24dp.png | Bin 235 -> 0 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 1243 bytes .../ic_equalizer_black_24dp.png | Bin 245 -> 0 bytes .../ic_equalizer_white_24dp.png | Bin 265 -> 0 bytes .../ic_play_circle_outline_white_24dp.png | Bin 0 -> 1732 bytes app/src/main/res/menu/menu_album_detail.xml | 8 ++++- app/src/main/res/menu/menu_albums.xml | 8 ++++- app/src/main/res/menu/menu_artist_detail.xml | 8 ++++- app/src/main/res/menu/menu_main.xml | 8 ++++- app/src/main/res/menu/menu_music_playing.xml | 6 ++++ .../main/res/menu/menu_playlist_detail.xml | 9 ++++- app/src/main/res/menu/menu_playlists.xml | 8 ++++- app/src/main/res/values/strings.xml | 14 ++++++++ .../res/values/strings_activity_settings.xml | 17 ++-------- app/src/main/res/xml/pref_audio.xml | 13 ++++++++ app/src/main/res/xml/pref_ui.xml | 6 ++-- 37 files changed, 183 insertions(+), 34 deletions(-) delete mode 100644 app/src/main/res/drawable-hdpi/ic_equalizer_black_24dp.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_equalizer_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_equalizer_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_equalizer_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_equalizer_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_equalizer_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_equalizer_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_equalizer_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_equalizer_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_equalizer_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png create mode 100644 app/src/main/res/xml/pref_audio.xml diff --git a/app/build.gradle b/app/build.gradle index 197aa1b7..99396906 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { applicationId "com.kabouzeid.gramophone" minSdkVersion 16 targetSdkVersion 22 - versionCode 17 - versionName "0.9.7.1b" + versionCode 18 + versionName "0.9.8b" } compileOptions { @@ -46,7 +46,7 @@ dependencies { compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') { transitive = true; } - compile 'com.afollestad:material-dialogs:0.7.0.1' + compile 'com.afollestad:material-dialogs:0.7.1.3' compile 'com.android.support:appcompat-v7:22.0.0' compile 'com.android.support:recyclerview-v7:22.0.0' compile 'com.android.support:gridlayout-v7:22.0.0' diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java index 9dc59f7c..0285a113 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java @@ -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 { diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index c7f6e61f..939640a6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 6bc3de8f..e494d92c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 5216221e..f0ab157c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index de3747e5..6b0579dd 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index 6b5bfc85..2b74f663 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index 017d62db..8478585d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java index 1a2fd512..0453237a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java @@ -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 diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java index 51699525..cc311647 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java @@ -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(); + } + } + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java index dde89f0d..ef378a8a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java @@ -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) { diff --git a/app/src/main/res/drawable-hdpi/ic_equalizer_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_equalizer_black_24dp.png deleted file mode 100644 index 53fbe0f7abf2bda4ae663bef6bbecdbc89e1eea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4i*Lm25-&)VFm^Ug=CK)Uj~LMH3o);76yi2 z3=9knFBlj~4Hy_+B``2p&0t^ph?aa8MU?p|LX;UBDo19CR1^cF$ sCNcfC=iFIflG-n2l665t;vEBn%1KsZok;Oh3=9kmp00i_>zopr0AQFi4*&oF diff --git a/app/src/main/res/drawable-hdpi/ic_equalizer_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_equalizer_white_24dp.png deleted file mode 100644 index 1169363649e7537bc6540b8a71d55181cdf7cc7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4i*Lm25-&)VFm^Ug=CK)Uj~LMH3o);76yi2 z3=9knFBlj~4Hy_+B``2p&0t^J4mJh`hKCF@W-u@?X?VIghE&{o8*$c)DNw}h ztl%%{J6--4syPC$EIQiJa--SBqq~JCE2E`s>qM`YhDXFVltwD9%#FU1X2q;-A+yZ- z`MEnvhnVG06udLPf99ub@V@uU{|N;dJK8IpV9H^%agaA)tWi*_c+0ba^TfX;3v3=R ze0X&_mum%c&gCYpA72XJvObt0FokhW`<(}J1socTToP{F_3YQB8rmlm%M~3H5|P=H z+H%nMRKu1BnU{a0$xFJst9rSfxbGvqL1Hn-G=}h=)l0Qk9OCHXo$`hAamkXVPdbga z+p5mUJZMwhr7Ku+pvX;hS*&m1=?3*f`{h+nB-JjHDQrHV$H*F1alND7U$rAFTydF# zCr9^@@-;$V9A(zBG%a$PpZvI^HFiM?Wu5iAgX-qi7`IdTr zqqn&+y!+mqdhqL_>K^4e{}!>HP2{X@YVka>qo+8!y!ETZLEjs~oQJQZ#^l{m-G8`a zUcvm69IIEJDpK2!9s1SFBU5Hn!&&zUNC1@pbY~915=W>y9>kr_Wm>b85kHi3p^r=85p>Q zL70(Y)*O)8@}4e^Ar_~T6C~C>uovlz;C0Dd*2@;t5Hn!&&zUNC1@pbY~915=W>y9>kr_Wm>b85kHi3p^r=85p>Q zL70(Y)*O)8s-7;6Ar_~T|D1P_N|4c#N@(g)4rQK|R+V*NX+{Whttro48(xM~aoqFGkDNx|p zcD=HN-vic^bG#H~a`rTNku?2FqLA3GGp}9bU8k*xPChBO(7vj8R_pr%3F&3urYvN) z6G%Jv=ZUrP=0-!cAO5Vn*<6;$WxAd6%wF-sR<(5EXKjbsU(&v8R*C(=z~@=M=D-}0 z$yrMTR!tTPI`%2(PAKEHAM7uqHhy6E;LoPXx+U^saR2cfBM)yTmovrJ?d<~H(B`jii=Pg&+F^64zL3cviwBoIq@tK$1 zue|VR-lmfontOq5$87Iru>@_Yp4!XFp>rngEBGE0U8dQ5q$&2!G)8T^RlC*&e_J7` zwuMnzx#aYO%D6eVSG~Tqs`cp7xiy!?=KH6095p@oWBmfwsExr!Gk$-(_5Hn!&&zUNC1@pbY~915=W>y9>kr_Wm>b85kHi3p^r=85p>Q zL70(Y)*J~21_mcj7srr@!*8#g=44RdVYwLkW`C-#W1vk({yERK3I0qAblkt~JyW%t znTe@siEQ|cm>rTeJ6&hj-{;}r;NX}i#^AxWfS=jritX%63=9kmp00i_>zopr0HkI& AIsgCw diff --git a/app/src/main/res/drawable-xhdpi/ic_equalizer_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_equalizer_white_24dp.png deleted file mode 100644 index dbba844df5664d266cc01b834c7345c77f3e3e85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4i*LmhQHi~JPZsB3dtTpz6=aiY77hwEes65 z7#J8DUNA6}8Za=tN?>5Hn!&&zUNC1@pbY~915=W>y9>kr_Wm>b85kHi3p^r=85p>Q zL70(Y)*J~21_pOe7srr@!*8z}axp0IuxtqX^M872`J|==GtN1+edanVn7*8qp}_XS z_V{(Jo{|g<{AN3E6iC+m?Cz?LXJcSs_+T>OT?&JO8gmnCa+mP6Mg|5322WQ%mvv4F FO#lWeIx_$O diff --git a/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f59c45e9c84c837eeaee427b5a093fc4b77550e6 GIT binary patch literal 835 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F?I?0= zv9HKh^GO01!{iqz=(c*)OmHez6f=Cn8YT3Z;qT+zr7Ss_>qWFHf?M{v240$dEkvYx zu`l=4u*jq=#1(x~_HQUei(TtU^E*CQzCy3U3{c@YLf@@i|q5}7|%+kf%#8x!=Y-iDFct7v& zv)z#gmo|u0h#ED{Phi$*mhos-RB}Gwl^{H){l>@pZkM(-1b(nfIN+ba*^{AjOoQ{U zOhWPWf5*ETLJmBsZ*I3*Et;^KM~~S>C6}W@Q{sDg-nAr~{k&3)??gNgG$njtc2&IX znaT8q^YLAC(FgvY+BbZPY@b=`R3Us{Lm`7ZLcFGK8~4+LvIR$v)h*OcaPtW27g7J< zX4=#eAUNqRuPozgrxhW+W_7ChgSPH~XSqKD_ zzjRt>|LFQU`y@HHZn48JlFSdi;Cj6!)6wCs!Nk3(Wv8^5eq>u;*I`|>!$p61o-m#_J zWY#i2W->X%lVj@K$>F!!U#|%>IxyGD_?wuoj{npr1{0U2tFB7db9%F8<(ir)+4 z-*4tE|Nko?H_mYB%N^@e6CZ_(JU?Dtc(Q!5-72 t*ZTLD^HW!8u|Mj57vZ3zU{%k!XsgJD?V>M^GB7YOc)I$ztaD0e0sw-ZbMycJ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_equalizer_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_equalizer_black_24dp.png deleted file mode 100644 index adad5ded21d43cfabf1be2f3f1ea5b7e29965091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84i*LmhW}5h&oD4BC?tCX`7$t6sWC7#v@kII zVqjosc)`F>YQVtoDuIE)Y6b&?c)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?AUI@?39z=9I5jt<@M97#KWV{an^L HB{Ts5q>?{D diff --git a/app/src/main/res/drawable-xxhdpi/ic_equalizer_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_equalizer_white_24dp.png deleted file mode 100644 index 59332d8dcb5e6f2b0efc87bbe908c221992addf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84i*LmhW}5h&oD4BC?tCX`7$t6sWC7#v@kII zVqjosc)`F>YQVtoDuIE)Y6b&?c)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?8p?U#1|f%(m1$BkGg|Kw~w R&cMLH;OXk;vd$@?2>?F?KZO7Q diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..00de7883710d78232f43c3603da90b4966b26310 GIT binary patch literal 1243 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D5I7J0fjhE&{oJLkT4h@;4H zQSZ~C!Z&?ChSt2)^*JiPB4XDA?+N^NdH)+uYAyPq&LK7|JWDna?&$=_xNryP#%xeUAR-k46kytb0}OZPg6uT-#vfu)pKGE@Req z&H%m_sk8V$GMn(eIwZQ5Cxqpco9M%>2KS7at$d1mp5K_hyn)L>TaUMI@x`e^k3$>X z9NhJe$1pvuWYu8#_2kfr_d9ghMUDsAE?^da{C>e&H%8GN4UdmlH+LP3new@m=i#LD z%~SHZ0{XbO|Ki$}ZSZI~{Ih>utX*vJK^wT?! z&fFm#!gMP|=jo!=S7n(eyfZZ7%wEM{YIyI^f|if_9s7A5s*Y{gAIG|Y)vZNGm__Zj z_Su<-YVQ2L_{>k!;b@P)iB@Js*6&3(pH@kFZlA!jAn({Q;{^f&7vB_B_VB(FmUNKr z32|yma@ZByw~aYMlvN}_<%YH?)1{|Hrc*ZdIhwmNv`U^_$8)x!WJipehMVMSSC$J5 zOE+gaH+V)cAnqHFk!{%rv~T#tXEmkF})$DY~y*e z9W&NW{?ej5c}wrMzgAw(nZ!j!H>< zK04va!9*A38B5wEzg=HtRdp|6j&^87&6k+77T2Q#E6whosNmimp^*^%(Mj=z^wDR< z0drq{ny$&Vr1JEs_&H9i_~)!y^6A$Cp<_WWw-|aqNKs-qWFgA;lHtjUxx$S7g73XQ zs9BoX`7HMrRCcpqJ5z0wB_r>7YkVU{MhgQTVt2$q`#U>{6U{|_J>E#v)F(DU2|CqjfOLoyC*|`P z-@@&@;J^1fU2bVUD}GgC*Syl<+|M_2vo3|&u#4v&|FN~?l+IlYQVtoDuIE)Y6b&?c)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?zLQiuFRlOjT6x_a z$>XoB8IVE1Rh{^Q52bGjGC@Q+_HwKK|8DIB;h~e0R6Hk%Tw^;X$=tHWcquYQVtoDuIE)Y6b&?c)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?mdKI;Vst0P#RQPyhe` diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..81fc753c94efa5144b3359207ee26269492735ca GIT binary patch literal 1732 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^Tsx;~)oqInu?@ zMYUsZPhE3~%5dU2+VrQQ@k3hEM^|pgx@Cev%v0+f7HGCIIUUk=xhJ*Y!m5K2vwxj( z7Ohb1^{%x5oV!4GK@Q7@{JlE$D{B`lKU7o6^on)u)Y9`243+`fFWL&i z+Z=Tl+%)E7h&rHnVg8}{Mf_LzR{2;ryj@`5vOksO$`m&SZbxw!i>2~g6m%KNnvS_v zJYBdashM>GW9`ut?!A{5n>U6vWIg>J?veT=TibEABm0x|Jfkc9&X2;KnHz*x%oj4N z5Gs+}!X0v6;Iz^OxeE@G0(C4`TbL3G4=q&f>*_Ns{Z(Sn=UshK*TS&obUDLm$L*%l zW%0MV&u*;n<7<`AIA+Ba^-8H{0l%aL z^(Re=HMmuy9qWZ}Z#yj7(0W8tuk2qts^QtY34-^XL%=Z;+kSXllb=IU|j*sk$ zn)$_(zP5HxU8VU&?_pg*c%F^{+k&Ydv|l9TSxk#}IBnB#!87B3UND0e$IG_gY(>^b zcT3t8@+_D&!E^7r&9|MFe=249^_ER4HYz6ilAx2l$qa@I?kAp~-^OrYt7@p=x~BXc zj1PKUw`RVYv5@V5d|{^NeC=P448LkE4ZGnH;kITw&w-_?x{61(P82>M>6$v7*KAr) zOhize;AKxghE<*?^o}#cL`=%^_@^!2P}y?qdNsp=ZK}G;M}p2WI+*^EF}!m@<>)lk zyFo`bwlN>5b5-3d$Fw2UbJfD1aeNGS`PAZN7;+*mrFZSJwq%G23fXkBm_bd~)70jF zBlCe!S5<8$hJ;g-!UPXY=S}bl^vqRY@QJuo;~HCT!Qi8zb&`dx;qoLc&hXfq3~?G- zD>(!hrmKc(ysD66^x@a=NB<6X{54Ow+k`233TeVF6@hsls-{vZ{g-O4BF<#dTljFl_oHG=H7UcAf*#v(T)~~$3JosbOq15sdObp`Fg4Zl=srzw&h2c(-?V1%5=i_E1 zb2NCL)|8uMAM}MWFRA(@3quHZ<3CMihM1^6zbLlT%dPIud{X$Yx<&9})-ku;+vYUg zQ!e>8<3f#@o~Odw7KgT$!;2MoS9B%pUvh_^o#BsZpFq<~Pr(K|r|Nu_NLe4L0O7*6 zThp4(*?Z)?cK6)3f6jqloQ@CwCS)I&`+wsC+0X*JOxdR_+Z`^Pi#yD$Z^m-t=Z>eJ zBp23Ne5t$4$}rbhS>VvN19d;ocjRinUJ~1va9)V{sCQ+&!aRT54J+SR^1C0X$O(_T z;N8F6`HI$~jO7-r|GW4Z0!*FW%j@wN`d_n9i##m#k-unZjD>XL`Oe-flcXTMFCpC9 zch1c_tLksFYI&bFn=rTN;#s_hCSDQDWHbvt<<8l;b)}ht&cmLgE{{KW?U<>oVB5;Ol8lL*y-$t4(&JI zSbBN2^0U4g&F7~*^?z_Iu;{jWRCt_U{cKhn(}E528ZpYpvhEeiP?m+z?cKOQXGRzhRk` zU0Q3k>Gj%6nffGJSv_cm`Jv6?A9k*`E}DO#c%}L$(;9wxZYy2ey$1`|X;v_- m41d#tDEt+eI*Jz5GZgI%D^x4v^I%|LVDNPHb6Mw<&;$Tw`vGMD literal 0 HcmV?d00001 diff --git a/app/src/main/res/menu/menu_album_detail.xml b/app/src/main/res/menu/menu_album_detail.xml index 3be6396c..5bef2eff 100644 --- a/app/src/main/res/menu/menu_album_detail.xml +++ b/app/src/main/res/menu/menu_album_detail.xml @@ -5,7 +5,7 @@ @@ -29,4 +29,10 @@ android:id="@+id/action_tag_editor" android:title="@string/action_tag_editor" app:showAsAction="never"/> + + diff --git a/app/src/main/res/menu/menu_albums.xml b/app/src/main/res/menu/menu_albums.xml index 3791c90a..098402dc 100644 --- a/app/src/main/res/menu/menu_albums.xml +++ b/app/src/main/res/menu/menu_albums.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> @@ -52,6 +52,12 @@ + + @@ -29,4 +29,10 @@ android:id="@+id/action_re_download_artist_image" android:title="@string/action_re_download_artist_image" app:showAsAction="never"/> + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 118370a2..2baa23ad 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -5,7 +5,7 @@ @@ -26,6 +26,12 @@ android:title="@string/action_playing_queue" app:showAsAction="never"/> + + + + + + + @@ -28,6 +28,12 @@ android:title="@string/action_playing_queue" app:showAsAction="never"/> + + Start page Light Dark + Equalizer + UI + General theme + Audio + General + Set default start page + Settings + Semi-Transparent toolbar + Playback controller card + Colored navigation bar artist view + Colored navigation bar album view + Colored album footers + No equalizer found + No audio id, play something and try again. diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml index ea6d2d67..b85797d7 100644 --- a/app/src/main/res/values/strings_activity_settings.xml +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -1,11 +1,4 @@ - Settings - - - - - General - Set default start page @string/last_opened @string/songs @@ -13,6 +6,7 @@ @string/artists @string/playlists + -1 0 @@ -21,21 +15,14 @@ 3 - - UI - General theme @string/light_theme_name @string/dark_theme_name + 0 1 - Semi-Transparent toolbar - Playback controller card - Colored navigation bar artist view - Colored navigation bar album view - Colored album footers diff --git a/app/src/main/res/xml/pref_audio.xml b/app/src/main/res/xml/pref_audio.xml new file mode 100644 index 00000000..b717f588 --- /dev/null +++ b/app/src/main/res/xml/pref_audio.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index d624c0f1..cb84a02c 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -2,7 +2,7 @@