diff --git a/app/build.gradle b/app/build.gradle
index b09fc16e..972f9ffe 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -106,18 +106,18 @@ dependencies {
transitive = true
}
- compile('com.github.afollestad.material-dialogs:core:0.8.5.6@aar') {
+ compile('com.github.afollestad.material-dialogs:core:0.8.5.8@aar') {
transitive = true
}
- compile('com.github.afollestad.material-dialogs:commons:0.8.5.6@aar') {
+ compile('com.github.afollestad.material-dialogs:commons:0.8.5.8@aar') {
transitive = true
}
- compile('com.afollestad:material-cab:0.1.9@aar') {
+ compile('com.afollestad:material-cab:0.1.11@aar') {
transitive = true
}
- compile('com.github.kabouzeid:app-theme-helper:1.0.1@aar') {
+ compile('com.github.kabouzeid:app-theme-helper:454b062475@aar') {
transitive = true
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java
new file mode 100644
index 00000000..83fb3805
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreference.java
@@ -0,0 +1,27 @@
+package com.kabouzeid.gramophone.preferences;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEDialogPreference;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid)
+ */
+public class NowPlayingScreenPreference extends ATEDialogPreference {
+ public NowPlayingScreenPreference(Context context) {
+ super(context);
+ }
+
+ public NowPlayingScreenPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NowPlayingScreenPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public NowPlayingScreenPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java
new file mode 100644
index 00000000..0a62204e
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/preferences/NowPlayingScreenPreferenceDialog.java
@@ -0,0 +1,135 @@
+package com.kabouzeid.gramophone.preferences;
+
+import android.annotation.SuppressLint;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.afollestad.materialdialogs.DialogAction;
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.heinrichreimersoftware.materialintro.view.InkPageIndicator;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.ui.fragments.player.NowPlayingScreen;
+import com.kabouzeid.gramophone.util.PreferenceUtil;
+import com.kabouzeid.gramophone.util.ViewUtil;
+
+import butterknife.ButterKnife;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid)
+ */
+public class NowPlayingScreenPreferenceDialog extends DialogFragment implements MaterialDialog.SingleButtonCallback, ViewPager.OnPageChangeListener {
+ public static final String TAG = NowPlayingScreenPreferenceDialog.class.getSimpleName();
+
+ private DialogAction whichButtonClicked;
+ private int viewPagerPosition;
+
+ public static NowPlayingScreenPreferenceDialog newInstance() {
+ return new NowPlayingScreenPreferenceDialog();
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ @SuppressLint("InflateParams") View view = LayoutInflater.from(getContext()).inflate(R.layout.preference_dialog_now_playing_screen, null);
+ ViewPager viewPager = ButterKnife.findById(view, R.id.now_playing_screen_view_pager);
+ viewPager.setAdapter(new NowPlayingScreenAdapter(getContext()));
+ viewPager.addOnPageChangeListener(this);
+ viewPager.setPageMargin((int) ViewUtil.convertDpToPixel(32, getResources()));
+ viewPager.setCurrentItem(PreferenceUtil.getInstance(getContext()).getNowPlayingScreen().ordinal());
+
+ InkPageIndicator pageIndicator = ButterKnife.findById(view, R.id.page_indicator);
+ pageIndicator.setViewPager(viewPager);
+
+ return new MaterialDialog.Builder(getContext())
+ .title(R.string.pref_title_now_playing_screen_appearance)
+ .positiveText(android.R.string.ok)
+ .negativeText(android.R.string.cancel)
+ .onAny(this)
+ .customView(view, false)
+ .build();
+ }
+
+ @Override
+ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
+ whichButtonClicked = which;
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ super.onDismiss(dialog);
+ if (whichButtonClicked == DialogAction.POSITIVE) {
+ PreferenceUtil.getInstance(getContext()).setNowPlayingScreen(NowPlayingScreen.values()[viewPagerPosition]);
+ }
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ this.viewPagerPosition = position;
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+
+ private static class NowPlayingScreenAdapter extends PagerAdapter {
+
+ private Context context;
+
+ public NowPlayingScreenAdapter(Context context) {
+ this.context = context;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup collection, int position) {
+ NowPlayingScreen nowPlayingScreen = NowPlayingScreen.values()[position];
+
+ LayoutInflater inflater = LayoutInflater.from(context);
+ ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.preference_now_playing_screen_item, collection, false);
+ collection.addView(layout);
+
+ ImageView image = ButterKnife.findById(layout, R.id.image);
+ TextView title = ButterKnife.findById(layout, R.id.title);
+ image.setImageResource(nowPlayingScreen.drawableResId);
+ title.setText(nowPlayingScreen.titleRes);
+
+ return layout;
+ }
+
+ @Override
+ public void destroyItem(ViewGroup collection, int position, Object view) {
+ collection.removeView((View) view);
+ }
+
+ @Override
+ public int getCount() {
+ return NowPlayingScreen.values().length;
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object object) {
+ return view == object;
+ }
+
+ @Override
+ public CharSequence getPageTitle(int position) {
+ return context.getString(NowPlayingScreen.values()[position].titleRes);
+ }
+ }
+}
\ No newline at end of file
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 968be106..0237f0a7 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,6 +1,7 @@
package com.kabouzeid.gramophone.ui.activities;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.media.audiofx.AudioEffect;
@@ -9,6 +10,7 @@ import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v4.app.DialogFragment;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceManager;
@@ -23,6 +25,8 @@ import com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEColorPreference;
import com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat;
import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.preferences.NowPlayingScreenPreference;
+import com.kabouzeid.gramophone.preferences.NowPlayingScreenPreferenceDialog;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
@@ -86,7 +90,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
return super.onOptionsItemSelected(item);
}
- public static class SettingsFragment extends ATEPreferenceFragmentCompat {
+ public static class SettingsFragment extends ATEPreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
private static void setSummary(@NonNull Preference preference) {
setSummary(preference, PreferenceManager
@@ -119,11 +123,27 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
addPreferencesFromResource(R.xml.pref_audio);
}
+ @Nullable
+ @Override
+ public DialogFragment onCreatePreferenceDialog(Preference preference) {
+ if (preference instanceof NowPlayingScreenPreference) {
+ return NowPlayingScreenPreferenceDialog.newInstance();
+ }
+ return super.onCreatePreferenceDialog(preference);
+ }
+
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getListView().setPadding(0, 0, 0, 0);
invalidateSettings();
+ PreferenceUtil.getInstance(getActivity()).registerOnSharedPreferenceChangedListener(this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ PreferenceUtil.getInstance(getActivity()).unregisterOnSharedPreferenceChangedListener(this);
}
private void invalidateSettings() {
@@ -223,6 +243,8 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
return true;
}
});
+
+ updateNowPlayingScreenSummary();
}
private boolean hasEqualizer() {
@@ -231,5 +253,18 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
ResolveInfo ri = pm.resolveActivity(effects, 0);
return ri != null;
}
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ switch (key) {
+ case PreferenceUtil.NOW_PLAYING_SCREEN_ID:
+ updateNowPlayingScreenSummary();
+ break;
+ }
+ }
+
+ private void updateNowPlayingScreenSummary() {
+ findPreference("now_playing_screen_id").setSummary(PreferenceUtil.getInstance(getActivity()).getNowPlayingScreen().titleRes);
+ }
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
index 8771c824..e317fb72 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java
@@ -9,6 +9,7 @@ import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.FloatRange;
import android.support.annotation.LayoutRes;
+import android.support.v4.app.Fragment;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
@@ -18,7 +19,10 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.ui.fragments.player.AbsPlayerFragment;
import com.kabouzeid.gramophone.ui.fragments.player.MiniPlayerFragment;
+import com.kabouzeid.gramophone.ui.fragments.player.NowPlayingScreen;
import com.kabouzeid.gramophone.ui.fragments.player.card.CardPlayerFragment;
+import com.kabouzeid.gramophone.ui.fragments.player.flat.FlatPlayerFragment;
+import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
@@ -41,6 +45,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
private int taskColor;
private boolean lightStatusbar;
+ private NowPlayingScreen currentNowPlayingScreen;
private AbsPlayerFragment playerFragment;
private MiniPlayerFragment miniPlayerFragment;
@@ -53,7 +58,21 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
setContentView(createContentView());
ButterKnife.bind(this);
- playerFragment = (AbsPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.player_fragment);
+ currentNowPlayingScreen = PreferenceUtil.getInstance(this).getNowPlayingScreen();
+ Fragment fragment; // must implement AbsPlayerFragment
+ switch (currentNowPlayingScreen) {
+ case FLAT:
+ fragment = new FlatPlayerFragment();
+ break;
+ case CARD:
+ default:
+ fragment = new CardPlayerFragment();
+ break;
+ }
+ getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment).commit();
+ getSupportFragmentManager().executePendingTransactions();
+
+ playerFragment = (AbsPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.player_fragment_container);
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment);
//noinspection ConstantConditions
@@ -74,12 +93,20 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
onPanelExpanded(slidingUpPanelLayout);
} else if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
onPanelCollapsed(slidingUpPanelLayout);
+ } else {
+ playerFragment.onHide();
}
}
});
slidingUpPanelLayout.addPanelSlideListener(this);
+ }
- playerFragment.onHide();
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (currentNowPlayingScreen != PreferenceUtil.getInstance(this).getNowPlayingScreen()) {
+ postRecreate();
+ }
}
public void setAntiDragView(View antiDragView) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/player/NowPlayingScreen.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/player/NowPlayingScreen.java
new file mode 100644
index 00000000..32f00247
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/player/NowPlayingScreen.java
@@ -0,0 +1,23 @@
+package com.kabouzeid.gramophone.ui.fragments.player;
+
+import android.support.annotation.DrawableRes;
+import android.support.annotation.StringRes;
+
+import com.kabouzeid.gramophone.R;
+
+public enum NowPlayingScreen {
+ CARD(R.string.card, R.drawable.np_card, 0),
+ FLAT(R.string.flat, R.drawable.np_flat, 1);
+
+ @StringRes
+ public final int titleRes;
+ @DrawableRes
+ public final int drawableResId;
+ public final int id;
+
+ NowPlayingScreen(@StringRes int titleRes, @DrawableRes int drawableResId, int id) {
+ this.titleRes = titleRes;
+ this.drawableResId = drawableResId;
+ this.id = id;
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java
index 51ef9a91..8ce9ec7e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java
@@ -10,6 +10,7 @@ import android.support.annotation.StyleRes;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.SortOrder;
import com.kabouzeid.gramophone.ui.fragments.mainactivity.folders.FoldersFragment;
+import com.kabouzeid.gramophone.ui.fragments.player.NowPlayingScreen;
import java.io.File;
@@ -18,6 +19,7 @@ public final class PreferenceUtil {
public static final String DEFAULT_START_PAGE = "default_start_page";
public static final String LAST_PAGE = "last_start_page";
public static final String LAST_MUSIC_CHOOSER = "last_music_chooser";
+ public static final String NOW_PLAYING_SCREEN_ID = "now_playing_screen_id";
public static final String ARTIST_SORT_ORDER = "artist_sort_order";
public static final String ARTIST_SONG_SORT_ORDER = "artist_song_sort_order";
@@ -127,6 +129,21 @@ public final class PreferenceUtil {
return mPreferences.getInt(LAST_MUSIC_CHOOSER, 0);
}
+ public final NowPlayingScreen getNowPlayingScreen() {
+ int id = mPreferences.getInt(NOW_PLAYING_SCREEN_ID, 0);
+ for (NowPlayingScreen nowPlayingScreen : NowPlayingScreen.values()) {
+ if (nowPlayingScreen.id == id) return nowPlayingScreen;
+ }
+ return NowPlayingScreen.CARD;
+ }
+
+ @SuppressLint("CommitPrefEdits")
+ public void setNowPlayingScreen(NowPlayingScreen nowPlayingScreen) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putInt(NOW_PLAYING_SCREEN_ID, nowPlayingScreen.id);
+ editor.commit();
+ }
+
public final boolean coloredNotification() {
return mPreferences.getBoolean(COLORED_NOTIFICATION, true);
}
diff --git a/app/src/main/res/drawable-xxxhdpi/np_card.png b/app/src/main/res/drawable-xxxhdpi/np_card.png
new file mode 100644
index 00000000..291bd388
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_card.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/np_flat.png b/app/src/main/res/drawable-xxxhdpi/np_flat.png
new file mode 100644
index 00000000..f83ad9cf
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/np_flat.png differ
diff --git a/app/src/main/res/layout/preference_dialog_now_playing_screen.xml b/app/src/main/res/layout/preference_dialog_now_playing_screen.xml
new file mode 100644
index 00000000..fe602a11
--- /dev/null
+++ b/app/src/main/res/layout/preference_dialog_now_playing_screen.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_now_playing_screen_item.xml b/app/src/main/res/layout/preference_now_playing_screen_item.xml
new file mode 100644
index 00000000..4d1a08f8
--- /dev/null
+++ b/app/src/main/res/layout/preference_now_playing_screen_item.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml
index 0f310e04..bf2980e0 100644
--- a/app/src/main/res/layout/sliding_music_panel_layout.xml
+++ b/app/src/main/res/layout/sliding_music_panel_layout.xml
@@ -19,9 +19,8 @@
android:layout_height="match_parent"
android:background="?android:colorBackground">
-
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 827b0f55..417cd4f1 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -14,6 +14,9 @@
Twitter
GitHub
+ Card
+ Flat
+
- donation_1
- donation_2
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 11cf9640..b98dd9a8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -229,7 +229,7 @@
Website
Loading products…
Up next
- Now playing layout
+ Appearance
Introduction
Press back again to skip the intro.
"Welcome to Phonograph, a beautiful and lightweight music player for Android. "
diff --git a/app/src/main/res/xml/pref_now_playing_screen.xml b/app/src/main/res/xml/pref_now_playing_screen.xml
index 904268ed..33a1f66c 100644
--- a/app/src/main/res/xml/pref_now_playing_screen.xml
+++ b/app/src/main/res/xml/pref_now_playing_screen.xml
@@ -3,13 +3,9 @@
-
+