diff --git a/app/build.gradle b/app/build.gradle
index f4e2544c..6bd14c18 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,6 +42,10 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile files('../libs/jaudiotagger-2.0.4-20111207.115108-15.jar')
+ compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') {
+ transitive = true;
+ }
compile 'com.afollestad:material-dialogs:0.6.4.1'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:recyclerview-v7:22.0.0'
@@ -59,10 +63,8 @@ dependencies {
compile 'com.squareup.picasso:picasso:2.5.0'
compile 'com.squareup:otto:1.3.6'
compile 'com.squareup.okhttp:okhttp:2.2.0'
- compile files('../libs/jaudiotagger-2.0.4-20111207.115108-15.jar')
compile 'asia.ivity.android:drag-sort-listview:1.0'
compile 'de.hdodenhof:circleimageview:1.2.2'
- compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') {
- transitive = true;
- }
+ compile 'com.jpardogo.materialtabstrip:library:1.0.9'
+ compile 'com.android.support:support-v4:22.0.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d42e7a3a..54e0153c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,10 @@
android:name=".ui.activities.PlaylistDetailActivity"
android:label="@string/title_activity_playlist_detail" >
+
+
diff --git a/app/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java b/app/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java
deleted file mode 100644
index 28e9be39..00000000
--- a/app/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.samples.apps.iosched.ui.widget;
-
-import android.content.Context;
-import android.graphics.Typeface;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.util.AttributeSet;
-import android.util.SparseArray;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.HorizontalScrollView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-/**
- * To be used with ViewPager to provide a tab indicator component which give constant feedback as to
- * the user's scroll progress.
- *
- * To use the component, simply add it to your view hierarchy. Then in your
- * {@link android.app.Activity} or {@link android.support.v4.app.Fragment} call
- * {@link #setViewPager(android.support.v4.view.ViewPager)} providing it the ViewPager this layout is being used for.
- *
- * The colors can be customized in two ways. The first and simplest is to provide an array of colors
- * via {@link #setSelectedIndicatorColors(int...)}. The
- * alternative is via the {@link com.google.samples.apps.iosched.ui.widget.SlidingTabLayout.TabColorizer} interface which provides you complete control over
- * which color is used for any individual position.
- *
- * The views used as tabs can be customized by calling {@link #setCustomTabView(int, int)},
- * providing the layout ID of your custom layout.
- */
-public class SlidingTabLayout extends HorizontalScrollView {
- private static final int TITLE_OFFSET_DIPS = 24;
- private static final int TAB_VIEW_PADDING_DIPS = 16;
- private static final int TAB_VIEW_TEXT_SIZE_SP = 12;
- private final SlidingTabStrip mTabStrip;
- private int mTitleOffset;
-
- private int mTabViewLayoutId;
- private int mTabViewTextViewId;
- private boolean mDistributeEvenly;
-
- private ViewPager mViewPager;
- private SparseArray mContentDescriptions = new SparseArray();
- private ViewPager.OnPageChangeListener mViewPagerPageChangeListener;
-
- public SlidingTabLayout(Context context) {
- this(context, null);
- }
-
- public SlidingTabLayout(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
- // Disable the Scroll Bar
- setHorizontalScrollBarEnabled(false);
- // Make sure that the Tab Strips fills this View
- setFillViewport(true);
-
- mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density);
-
- mTabStrip = new SlidingTabStrip(context);
- addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
- }
-
- /**
- * Set the custom {@link com.google.samples.apps.iosched.ui.widget.SlidingTabLayout.TabColorizer} to be used.
- *
- * If you only require simple custmisation then you can use
- * {@link #setSelectedIndicatorColors(int...)} to achieve
- * similar effects.
- */
- public void setCustomTabColorizer(TabColorizer tabColorizer) {
- mTabStrip.setCustomTabColorizer(tabColorizer);
- }
-
- public void setDistributeEvenly(boolean distributeEvenly) {
- mDistributeEvenly = distributeEvenly;
- }
-
- /**
- * Sets the colors to be used for indicating the selected tab. These colors are treated as a
- * circular array. Providing one color will mean that all tabs are indicated with the same color.
- */
- public void setSelectedIndicatorColors(int... colors) {
- mTabStrip.setSelectedIndicatorColors(colors);
- }
-
- /**
- * Set the {@link android.support.v4.view.ViewPager.OnPageChangeListener}. When using {@link com.google.samples.apps.iosched.ui.widget.SlidingTabLayout} you are
- * required to set any {@link android.support.v4.view.ViewPager.OnPageChangeListener} through this method. This is so
- * that the layout can update it's scroll position correctly.
- *
- * @see android.support.v4.view.ViewPager#setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener)
- */
- public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) {
- mViewPagerPageChangeListener = listener;
- }
-
- /**
- * Set the custom layout to be inflated for the tab views.
- *
- * @param layoutResId Layout id to be inflated
- * @param textViewId id of the {@link android.widget.TextView} in the inflated view
- */
- public void setCustomTabView(int layoutResId, int textViewId) {
- mTabViewLayoutId = layoutResId;
- mTabViewTextViewId = textViewId;
- }
-
- /**
- * Sets the associated view pager. Note that the assumption here is that the pager content
- * (number of tabs and tab titles) does not change after this call has been made.
- */
- public void setViewPager(ViewPager viewPager) {
- mTabStrip.removeAllViews();
-
- mViewPager = viewPager;
- if (viewPager != null) {
- viewPager.setOnPageChangeListener(new InternalViewPagerListener());
- populateTabStrip();
- }
- }
-
- private void populateTabStrip() {
- final PagerAdapter adapter = mViewPager.getAdapter();
- final OnClickListener tabClickListener = new TabClickListener();
-
- for (int i = 0; i < adapter.getCount(); i++) {
- View tabView = null;
- TextView tabTitleView = null;
-
- if (mTabViewLayoutId != 0) {
- // If there is a custom tab view layout id set, try and inflate it
- tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
- false);
- tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
- }
-
- if (tabView == null) {
- tabView = createDefaultTabView(getContext());
- }
-
- if (tabTitleView == null && TextView.class.isInstance(tabView)) {
- tabTitleView = (TextView) tabView;
- }
-
- if (mDistributeEvenly) {
- LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
- lp.width = 0;
- lp.weight = 1;
- }
-
- tabTitleView.setText(adapter.getPageTitle(i));
- tabView.setOnClickListener(tabClickListener);
- String desc = mContentDescriptions.get(i, null);
- if (desc != null) {
- tabView.setContentDescription(desc);
- }
-
- mTabStrip.addView(tabView);
- if (i == mViewPager.getCurrentItem()) {
- tabView.setSelected(true);
- }
- }
- }
-
- /**
- * Create a default view to be used for tabs. This is called if a custom tab view is not set via
- * {@link #setCustomTabView(int, int)}.
- */
- protected TextView createDefaultTabView(Context context) {
- TextView textView = new TextView(context);
- textView.setGravity(Gravity.CENTER);
- textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);
- textView.setTypeface(Typeface.DEFAULT_BOLD);
- textView.setLayoutParams(new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-
- TypedValue outValue = new TypedValue();
- getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
- outValue, true);
- textView.setBackgroundResource(outValue.resourceId);
- textView.setAllCaps(true);
-
- int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
- textView.setPadding(padding, padding, padding, padding);
-
- return textView;
- }
-
- public void setContentDescription(int i, String desc) {
- mContentDescriptions.put(i, desc);
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- if (mViewPager != null) {
- scrollToTab(mViewPager.getCurrentItem(), 0);
- }
- }
-
- private void scrollToTab(int tabIndex, int positionOffset) {
- final int tabStripChildCount = mTabStrip.getChildCount();
- if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
- return;
- }
-
- View selectedChild = mTabStrip.getChildAt(tabIndex);
- if (selectedChild != null) {
- int targetScrollX = selectedChild.getLeft() + positionOffset;
-
- if (tabIndex > 0 || positionOffset > 0) {
- // If we're not at the first child and are mid-scroll, make sure we obey the offset
- targetScrollX -= mTitleOffset;
- }
-
- scrollTo(targetScrollX, 0);
- }
- }
-
- /**
- * Allows complete control over the colors drawn in the tab layout. Set with
- * {@link #setCustomTabColorizer(com.google.samples.apps.iosched.ui.widget.SlidingTabLayout.TabColorizer)}.
- */
- public interface TabColorizer {
-
- /**
- * @return return the color of the indicator used when {@code position} is selected.
- */
- int getIndicatorColor(int position);
-
- }
-
- private class InternalViewPagerListener implements ViewPager.OnPageChangeListener {
- private int mScrollState;
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- int tabStripChildCount = mTabStrip.getChildCount();
- if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
- return;
- }
-
- mTabStrip.onViewPagerPageChanged(position, positionOffset);
-
- View selectedTitle = mTabStrip.getChildAt(position);
- int extraOffset = (selectedTitle != null)
- ? (int) (positionOffset * selectedTitle.getWidth())
- : 0;
- scrollToTab(position, extraOffset);
-
- if (mViewPagerPageChangeListener != null) {
- mViewPagerPageChangeListener.onPageScrolled(position, positionOffset,
- positionOffsetPixels);
- }
- }
-
- @Override
- public void onPageSelected(int position) {
- if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
- mTabStrip.onViewPagerPageChanged(position, 0f);
- scrollToTab(position, 0);
- }
- for (int i = 0; i < mTabStrip.getChildCount(); i++) {
- mTabStrip.getChildAt(i).setSelected(position == i);
- }
- if (mViewPagerPageChangeListener != null) {
- mViewPagerPageChangeListener.onPageSelected(position);
- }
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- mScrollState = state;
-
- if (mViewPagerPageChangeListener != null) {
- mViewPagerPageChangeListener.onPageScrollStateChanged(state);
- }
- }
-
- }
-
- private class TabClickListener implements OnClickListener {
- @Override
- public void onClick(View v) {
- for (int i = 0; i < mTabStrip.getChildCount(); i++) {
- if (v == mTabStrip.getChildAt(i)) {
- mViewPager.setCurrentItem(i);
- return;
- }
- }
- }
- }
-
-}
diff --git a/app/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabStrip.java b/app/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabStrip.java
deleted file mode 100644
index 36cc456d..00000000
--- a/app/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabStrip.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.samples.apps.iosched.ui.widget;
-
-import android.R;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.View;
-import android.widget.LinearLayout;
-
-class SlidingTabStrip extends LinearLayout {
-
- private static final int DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS = 0;
- private static final byte DEFAULT_BOTTOM_BORDER_COLOR_ALPHA = 0x26;
- private static final int SELECTED_INDICATOR_THICKNESS_DIPS = 3;
- private static final int DEFAULT_SELECTED_INDICATOR_COLOR = 0xFF33B5E5;
-
- private final int mBottomBorderThickness;
- private final Paint mBottomBorderPaint;
-
- private final int mSelectedIndicatorThickness;
- private final Paint mSelectedIndicatorPaint;
-
- private final int mDefaultBottomBorderColor;
- private final SimpleTabColorizer mDefaultTabColorizer;
- private int mSelectedPosition;
- private float mSelectionOffset;
- private SlidingTabLayout.TabColorizer mCustomTabColorizer;
-
- SlidingTabStrip(Context context) {
- this(context, null);
- }
-
- SlidingTabStrip(Context context, AttributeSet attrs) {
- super(context, attrs);
- setWillNotDraw(false);
-
- final float density = getResources().getDisplayMetrics().density;
-
- TypedValue outValue = new TypedValue();
- context.getTheme().resolveAttribute(R.attr.colorForeground, outValue, true);
- final int themeForegroundColor = outValue.data;
-
- mDefaultBottomBorderColor = setColorAlpha(themeForegroundColor,
- DEFAULT_BOTTOM_BORDER_COLOR_ALPHA);
-
- mDefaultTabColorizer = new SimpleTabColorizer();
- mDefaultTabColorizer.setIndicatorColors(DEFAULT_SELECTED_INDICATOR_COLOR);
-
- mBottomBorderThickness = (int) (DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS * density);
- mBottomBorderPaint = new Paint();
- mBottomBorderPaint.setColor(mDefaultBottomBorderColor);
-
- mSelectedIndicatorThickness = (int) (SELECTED_INDICATOR_THICKNESS_DIPS * density);
- mSelectedIndicatorPaint = new Paint();
- }
-
- /**
- * Set the alpha value of the {@code color} to be the given {@code alpha} value.
- */
- private static int setColorAlpha(int color, byte alpha) {
- return Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color));
- }
-
- void setCustomTabColorizer(SlidingTabLayout.TabColorizer customTabColorizer) {
- mCustomTabColorizer = customTabColorizer;
- invalidate();
- }
-
- void setSelectedIndicatorColors(int... colors) {
- // Make sure that the custom colorizer is removed
- mCustomTabColorizer = null;
- mDefaultTabColorizer.setIndicatorColors(colors);
- invalidate();
- }
-
- void onViewPagerPageChanged(int position, float positionOffset) {
- mSelectedPosition = position;
- mSelectionOffset = positionOffset;
- invalidate();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- final int height = getHeight();
- final int childCount = getChildCount();
- final SlidingTabLayout.TabColorizer tabColorizer = mCustomTabColorizer != null
- ? mCustomTabColorizer
- : mDefaultTabColorizer;
-
- // Thick colored underline below the current selection
- if (childCount > 0) {
- View selectedTitle = getChildAt(mSelectedPosition);
- int left = selectedTitle.getLeft();
- int right = selectedTitle.getRight();
- int color = tabColorizer.getIndicatorColor(mSelectedPosition);
-
- if (mSelectionOffset > 0f && mSelectedPosition < (getChildCount() - 1)) {
- int nextColor = tabColorizer.getIndicatorColor(mSelectedPosition + 1);
- if (color != nextColor) {
- color = blendColors(nextColor, color, mSelectionOffset);
- }
-
- // Draw the selection partway between the tabs
- View nextTitle = getChildAt(mSelectedPosition + 1);
- left = (int) (mSelectionOffset * nextTitle.getLeft() +
- (1.0f - mSelectionOffset) * left);
- right = (int) (mSelectionOffset * nextTitle.getRight() +
- (1.0f - mSelectionOffset) * right);
- }
-
- mSelectedIndicatorPaint.setColor(color);
-
- canvas.drawRect(left, height - mSelectedIndicatorThickness, right,
- height, mSelectedIndicatorPaint);
- }
-
- // Thin underline along the entire bottom edge
- canvas.drawRect(0, height - mBottomBorderThickness, getWidth(), height, mBottomBorderPaint);
- }
-
- /**
- * Blend {@code color1} and {@code color2} using the given ratio.
- *
- * @param ratio of which to blend. 1.0 will return {@code color1}, 0.5 will give an even blend,
- * 0.0 will return {@code color2}.
- */
- private static int blendColors(int color1, int color2, float ratio) {
- final float inverseRation = 1f - ratio;
- float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation);
- float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation);
- float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation);
- return Color.rgb((int) r, (int) g, (int) b);
- }
-
- private static class SimpleTabColorizer implements SlidingTabLayout.TabColorizer {
- private int[] mIndicatorColors;
-
- @Override
- public final int getIndicatorColor(int position) {
- return mIndicatorColors[position % mIndicatorColors.length];
- }
-
- void setIndicatorColors(int... colors) {
- mIndicatorColors = colors;
- }
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/App.java b/app/src/main/java/com/kabouzeid/gramophone/App.java
index 70fbef4f..688886d6 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/App.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/App.java
@@ -18,11 +18,9 @@ import io.fabric.sdk.android.Fabric;
* Created by karim on 25.11.14.
*/
public class App extends Application {
- private static final String TAG = App.class.getSimpleName();
-
+ public static final String TAG = App.class.getSimpleName();
public static Bus bus = new Bus(ThreadEnforcer.MAIN);
- private int appTheme;
private RequestQueue requestQueue;
@Override
@@ -33,18 +31,6 @@ public class App extends Application {
//Picasso.with(this).setIndicatorsEnabled(true);// debug only
}
- public int getAppTheme() {
- if (appTheme == 0) {
- appTheme = PreferenceManager.getDefaultSharedPreferences(this).getInt(AppKeys.SP_THEME, R.style.Theme_MaterialMusic);
- }
- return appTheme;
- }
-
- public void setAppTheme(int appTheme) {
- this.appTheme = appTheme;
- PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(AppKeys.SP_THEME, appTheme).apply();
- }
-
public void addToVolleyRequestQueue(Request request) {
request.setTag(TAG);
getVolleyRequestQueue().add(request);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java
index cb542bfe..bcc5d74d 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java
@@ -17,9 +17,11 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.loader.AlbumLoader;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.squareup.otto.Subscribe;
@@ -47,7 +49,7 @@ public class AlbumAdapter extends RecyclerView.Adapter
public void onBindViewHolder(final ViewHolder holder, int position) {
final Album album = dataSet.get(position);
- if (usePalette) resetColors(holder.title, holder.artist, holder.footer);
+ resetColors(holder.title, holder.artist, holder.footer);
Picasso.with(activity)
.load(MusicUtil.getAlbumArtUri(album.id))
.placeholder(R.drawable.default_album_art)
@@ -109,8 +111,7 @@ public class AlbumAdapter extends RecyclerView.Adapter
public AlbumAdapter(Activity activity) {
this.activity = activity;
- //TODO shared prefs
- usePalette = true;
+ usePalette = PreferenceUtils.getInstance(activity).coloredAlbumFootersEnabled();
loadDataSet();
}
@@ -126,7 +127,7 @@ public class AlbumAdapter extends RecyclerView.Adapter
if (vibrantSwatch != null) {
title.setTextColor(vibrantSwatch.getTitleTextColor());
artist.setTextColor(vibrantSwatch.getTitleTextColor());
- ViewUtil.animateViewColor(footer, activity.getResources().getColor(R.color.materialmusic_default_bar_color), vibrantSwatch.getRgb());
+ ViewUtil.animateViewColor(footer, Util.resolveColor(activity, R.attr.default_bar_color), vibrantSwatch.getRgb());
} else {
paletteBlackAndWhite(title, artist, footer);
}
@@ -137,14 +138,14 @@ public class AlbumAdapter extends RecyclerView.Adapter
private void paletteBlackAndWhite(final TextView title, final TextView artist, final View footer) {
title.setTextColor(Util.resolveColor(activity, R.attr.title_text_color));
artist.setTextColor(Util.resolveColor(activity, R.attr.caption_text_color));
- int defaultBarColor = activity.getResources().getColor(R.color.materialmusic_default_bar_color);
+ int defaultBarColor = Util.resolveColor(activity, R.attr.default_bar_color);
ViewUtil.animateViewColor(footer, defaultBarColor, defaultBarColor);
}
private void resetColors(final TextView title, final TextView artist, final View footer) {
title.setTextColor(Util.resolveColor(activity, R.attr.title_text_color));
artist.setTextColor(Util.resolveColor(activity, R.attr.caption_text_color));
- int defaultBarColor = activity.getResources().getColor(R.color.materialmusic_default_bar_color);
+ int defaultBarColor = Util.resolveColor(activity, R.attr.default_bar_color);
footer.setBackgroundColor(defaultBarColor);
}
@@ -170,4 +171,14 @@ public class AlbumAdapter extends RecyclerView.Adapter
break;
}
}
+
+ @Subscribe
+ public void onUIChangeEvent(UIPreferenceChangedEvent event) {
+ switch (event.getAction()) {
+ case UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED:
+ usePalette = (boolean) event.getValue();
+ notifyDataSetChanged();
+ break;
+ }
+ }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/NavigationDrawerItemAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/NavigationDrawerItemAdapter.java
index 043b13d9..8e62c9e6 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/NavigationDrawerItemAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/NavigationDrawerItemAdapter.java
@@ -38,11 +38,12 @@ public class NavigationDrawerItemAdapter extends ArrayAdapter {
title.setText(song.title);
if (MusicPlayerRemote.getPosition() == position) {
playingIndicator.setVisibility(View.VISIBLE);
- playingIndicator.setImageResource(R.drawable.ic_speaker_white_48dp);
+ playingIndicator.setImageDrawable(Util.getTintedDrawable(getContext().getResources(), R.drawable.ic_speaker_white_48dp, Util.resolveColor(getContext(), R.attr.themed_drawable_color)));
} else {
playingIndicator.setVisibility(View.GONE);
- playingIndicator.setImageBitmap(null);
}
overflowButton.setOnClickListener(new View.OnClickListener() {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
index 700f10a4..2fb1c2c7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
@@ -20,7 +20,9 @@ import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.Util;
import com.squareup.otto.Subscribe;
+import com.squareup.picasso.Picasso;
import java.util.List;
@@ -60,11 +62,14 @@ public class PlaylistAdapter extends RecyclerView.Adapter {
title.setTypeface(null, Typeface.BOLD);
subTitle.setVisibility(View.GONE);
imageView.setVisibility(View.GONE);
- convertView.setBackgroundColor(getContext().getResources().getColor(R.color.materialmusic_default_bar_color));
+ convertView.setBackgroundColor(Util.resolveColor(getContext(), R.attr.default_bar_color));
} else if (item instanceof Song) {
title.setTypeface(null, Typeface.NORMAL);
subTitle.setVisibility(View.VISIBLE);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java
index 52d53c45..f2f1f32f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/AlbumSongAdapter.java
@@ -54,7 +54,7 @@ public class AlbumSongAdapter extends RecyclerView.Adapter {
holder.songTitle.setTextColor(accentColor);
holder.songInfo.setVisibility(View.GONE);
holder.overflowButton.setVisibility(View.GONE);
- final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin);
+ final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2;
holder.albumArt.setPadding(padding, padding, padding, padding);
holder.albumArt.setColorFilter(accentColor);
holder.albumArt.setImageResource(R.drawable.ic_shuffle_white_48dp);
holder.separator.setVisibility(View.VISIBLE);
+ holder.short_separator.setVisibility(View.GONE);
}
}
@@ -102,6 +103,7 @@ public class SongAdapter extends RecyclerView.Adapter {
ImageView overflowButton;
ImageView albumArt;
View separator;
+ View short_separator;
public ViewHolder(View itemView) {
super(itemView);
@@ -110,6 +112,7 @@ public class SongAdapter extends RecyclerView.Adapter {
albumArt = (ImageView) itemView.findViewById(R.id.album_art);
overflowButton = (ImageView) itemView.findViewById(R.id.menu);
separator = itemView.findViewById(R.id.separator);
+ short_separator = itemView.findViewById(R.id.short_separator);
overflowButton.setOnClickListener(this);
itemView.setOnClickListener(new View.OnClickListener() {
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 5b74e7d0..c72d71c6 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java
@@ -135,7 +135,10 @@ public class MusicPlayerRemote {
public static Song getCurrentSong() {
final int position = getPosition();
if (position != -1) {
- return getPlayingQueue().get(position);
+ try {
+ return getPlayingQueue().get(position);
+ } catch (Exception ignored) {
+ }
}
return new Song();
}
@@ -222,10 +225,11 @@ public class MusicPlayerRemote {
if (musicService != null) {
musicService.setShuffleMode(shuffleMode);
return true;
- } return false;
+ }
+ return false;
}
- public static void forceSetShuffleMode(final Context context, final int shuffleMode){
+ public static void forceSetShuffleMode(final Context context, final int shuffleMode) {
if (musicService != null) {
musicService.setShuffleMode(shuffleMode);
} else {
@@ -235,7 +239,7 @@ public class MusicPlayerRemote {
}
}
- public static void shuffleAllSongs(final Context context){
+ public static void shuffleAllSongs(final Context context) {
List songs = SongLoader.getAllSongs(context);
MusicPlayerRemote.openQueue(songs, new Random().nextInt(songs.size()), true);
forceSetShuffleMode(context, MusicService.SHUFFLE_MODE_SHUFFLE);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java
index 0b1a20b1..19106031 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java
@@ -58,7 +58,7 @@ public class AlbumLoader {
MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS,
/* 5 */
MediaStore.Audio.AlbumColumns.FIRST_YEAR
- }, selection, values, PreferenceUtils.getInstace(context).getAlbumSortOrder());
+ }, selection, values, PreferenceUtils.getInstance(context).getAlbumSortOrder());
}
public static Album getAlbum(Context context, int albumId) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java
index b172a805..2e97ce35 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java
@@ -69,6 +69,6 @@ public class AlbumSongLoader {
MediaStore.Audio.AudioColumns.TRACK,
/* 6 */
MediaStore.Audio.AudioColumns.ARTIST_ID
- }, selection.toString(), null, PreferenceUtils.getInstace(context).getAlbumSongSortOrder());
+ }, selection.toString(), null, PreferenceUtils.getInstance(context).getAlbumSongSortOrder());
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java
index 8df0d022..15251046 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java
@@ -51,6 +51,6 @@ public class ArtistAlbumLoader {
MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS,
/* 4 */
MediaStore.Audio.AlbumColumns.FIRST_YEAR
- }, null, null, PreferenceUtils.getInstace(context).getArtistAlbumSortOrder());
+ }, null, null, PreferenceUtils.getInstance(context).getArtistAlbumSortOrder());
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java
index 5fbd635f..d2354f4f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java
@@ -52,7 +52,7 @@ public class ArtistLoader {
MediaStore.Audio.ArtistColumns.NUMBER_OF_ALBUMS,
/* 3 */
MediaStore.Audio.ArtistColumns.NUMBER_OF_TRACKS
- }, selection, values, PreferenceUtils.getInstace(context).getArtistSortOrder());
+ }, selection, values, PreferenceUtils.getInstance(context).getArtistSortOrder());
}
public static Artist getArtist(Context context, int artistId) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java
index 4cdaa5f7..c35158a7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java
@@ -60,6 +60,6 @@ public class ArtistSongLoader {
MediaStore.Audio.AudioColumns.TRACK,
/* 6 */
MediaStore.Audio.AudioColumns.ALBUM_ID
- }, selection.toString(), null, PreferenceUtils.getInstace(context).getArtistSongSortOrder());
+ }, selection.toString(), null, PreferenceUtils.getInstance(context).getArtistSongSortOrder());
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java
index 52519575..01f809ad 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java
@@ -15,6 +15,8 @@ import java.util.List;
* Created by karim on 29.12.14.
*/
public class SongLoader {
+ private static final String BASE_SELECTION = MediaStore.Audio.AudioColumns.IS_MUSIC + "=1" + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''";
+
public static List getAllSongs(Context context) {
Cursor cursor = makeSongCursor(context);
List songs = new ArrayList<>();
@@ -40,11 +42,16 @@ public class SongLoader {
return songs;
}
- public static final Cursor makeSongCursor(final Context context) {
+ public static Cursor makeSongCursor(final Context context) {
return makeSongCursor(context, MediaStore.Audio.AudioColumns.IS_MUSIC + "=?", new String[]{"1"});
}
- public static final Cursor makeSongCursor(final Context context, final String selection, final String[] values) {
+ public static Cursor makeSongCursor(final Context context, final String selection, final String[] values) {
+ String finalSelection = BASE_SELECTION;
+ if(selection != null){
+ finalSelection += " AND " + selection;
+ }
+
return context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
@@ -63,7 +70,7 @@ public class SongLoader {
MediaStore.Audio.AudioColumns.ARTIST_ID,
/* 7 */
MediaStore.Audio.AudioColumns.ALBUM_ID
- }, selection, values, PreferenceUtils.getInstace(context).getSongSortOrder());
+ }, finalSelection, values, PreferenceUtils.getInstance(context).getSongSortOrder());
}
public static List getSongs(final Context context, final String query) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/AppKeys.java b/app/src/main/java/com/kabouzeid/gramophone/misc/AppKeys.java
index d362c421..ec3a2053 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/AppKeys.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/AppKeys.java
@@ -6,10 +6,7 @@ package com.kabouzeid.gramophone.misc;
public final class AppKeys {
public static final String CL_CURRENT_ACTIVITY = "Current activity";
- public static final String SP_THEME = "com.kabouzeid.gramophone.THEME";
- public static final String SP_VIEWPAGER_ITEM_POSITION = "com.kabouzeid.gramophone.NAVIGATION_DRAWER_ITEM_POSITION";
public static final String SP_USER_LEARNED_DRAWER = "com.kabouzeid.gramophone.NAVIGATION_DRAWER_LEARNED";
- public static final String SP_ONLY_ON_WIFI = "com.kabouzeid.gramophone.ONLY_ON_WIFI";
public static final String SP_SHUFFLE_MODE = "com.kabouzeid.gramophone.SHUFFLE_MODE";
public static final String SP_REPEAT_MODE = "com.kabouzeid.gramophone.REPEAT_MODE";
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java b/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java
new file mode 100644
index 00000000..5a5f3538
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java
@@ -0,0 +1,28 @@
+package com.kabouzeid.gramophone.model;
+
+/**
+ * Created by karim on 28.03.15.
+ */
+public class UIPreferenceChangedEvent {
+ public static final int THEME_CHANGED = 0;
+ public static final int ALBUM_OVERVIEW_PALETTE_CHANGED = 1;
+ public static final int COLORED_NAVIGATION_BAR_ARTIST_CHANGED = 2;
+ public static final int COLORED_NAVIGATION_BAR_ALBUM_CHANGED = 3;
+ public static final int PLAYBACK_CONTROLLER_CARD_CHANGED = 4;
+
+ private int action;
+ private Object value;
+
+ public UIPreferenceChangedEvent(int action, Object value) {
+ this.action = action;
+ this.value = value;
+ }
+
+ public int getAction() {
+ return action;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+}
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 4d7d466f..14d29602 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java
@@ -296,8 +296,11 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.STOP);
playingNotificationHelper.updatePlayState(false);
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
- updateNotification();
- updateRemoteControlClient();
+ try {
+ updateNotification();
+ updateRemoteControlClient();
+ } catch (Exception ignored) {
+ }
}
}
notifyOnMusicRemoteEventListeners(MusicRemoteEvent.TRACK_CHANGED);
@@ -311,7 +314,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
}
private void updateRemoteControlClient() {
- final Song song = getPlayingQueue().get(getPosition());
+ final Song song = playingQueue.get(getPosition());
remoteControlClient
.editMetadata(false)
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, song.artistName)
@@ -598,7 +601,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
}
public void resumePlaying() {
- if(!isPlaying()) {
+ if (!isPlaying()) {
if (requestFocus()) {
if (isPlayerPrepared) {
player.start();
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 aa828642..6bc3de8f 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
@@ -1,9 +1,9 @@
package com.kabouzeid.gramophone.ui.activities;
-import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
+import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
@@ -30,13 +30,16 @@ import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nineoldandroids.view.ViewHelper;
+import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
@@ -102,15 +105,14 @@ public class AlbumDetailActivity extends AbsFabActivity {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
- app = (App) getApplicationContext();
- setTheme(app.getAppTheme());
setUpTranslucence(true, false);
-
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_album_detail);
+ App.bus.register(this);
+
if (Util.hasLollipopSDK()) postponeEnterTransition();
- if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(getResources().getColor(R.color.materialmusic_default_bar_color));
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
Bundle intentExtras = getIntent().getExtras();
int albumId = -1;
@@ -146,7 +148,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
- toolbarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
+ toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
@@ -187,14 +189,24 @@ public class AlbumDetailActivity extends AbsFabActivity {
Palette.Swatch swatch = palette.getVibrantSwatch();
if (swatch != null) {
toolbarColor = swatch.getRgb();
- albumTitleView.setBackgroundColor(swatch.getRgb());
+ albumTitleView.setBackgroundColor(toolbarColor);
albumTitleView.setTextColor(swatch.getTitleTextColor());
- if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(swatch.getRgb());
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(AlbumDetailActivity.this).coloredNavigationBarAlbumEnabled())
+ getWindow().setNavigationBarColor(toolbarColor);
}
}
});
}
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ private void setNavigationBarColored(boolean colored){
+ if (colored){
+ if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
+ } else {
+ if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
+ }
+ }
+
private void setUpListView() {
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, 0);
@@ -204,6 +216,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
public void run() {
songsBackgroundView.getLayoutParams().height = contentView.getHeight();
observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false);
+ recyclerView.scrollBy(0,1);
+ recyclerView.scrollBy(0,-1);
}
});
}
@@ -255,7 +269,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
NavigationUtil.openPlayingQueueDialog(this);
return true;
case R.id.action_settings:
- Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
+ startActivity(new Intent(this, SettingsActivity.class));
return true;
case R.id.action_current_playing:
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
@@ -273,4 +287,18 @@ public class AlbumDetailActivity extends AbsFabActivity {
}
return super.onOptionsItemSelected(item);
}
+
+ @Subscribe public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
+ switch (event.getAction()){
+ case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
+ setNavigationBarColored((boolean) event.getValue());
+ break;
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ App.bus.unregister(this);
+ }
}
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 d249ea63..5216221e 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
@@ -1,8 +1,8 @@
package com.kabouzeid.gramophone.ui.activities;
-import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
+import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
@@ -24,6 +24,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
+import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.ArtistAlbumAdapter;
import com.kabouzeid.gramophone.adapter.songadapter.ArtistSongAdapter;
@@ -38,11 +39,14 @@ import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nineoldandroids.view.ViewHelper;
+import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
@@ -120,8 +124,10 @@ public class ArtistDetailActivity extends AbsFabActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_artist_detail);
+ App.bus.register(this);
+
if (Util.hasLollipopSDK()) postponeEnterTransition();
- if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(getResources().getColor(R.color.materialmusic_default_bar_color));
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
getIntentExtras();
initViews();
@@ -147,7 +153,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
- toolbarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
+ toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
@@ -173,6 +179,15 @@ public class ArtistDetailActivity extends AbsFabActivity {
loadBiography();
}
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ private void setNavigationBarColored(boolean colored){
+ if (colored){
+ if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
+ } else {
+ if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
+ }
+ }
+
private void setUpSongListView() {
songListView.setScrollViewCallbacks(observableScrollViewCallbacks);
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0);
@@ -259,7 +274,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
toolbarColor = swatch.getRgb();
artistNameTv.setBackgroundColor(swatch.getRgb());
artistNameTv.setTextColor(swatch.getTitleTextColor());
- if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(swatch.getRgb());
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(ArtistDetailActivity.this).coloredNavigationBarArtistEnabled())
+ getWindow().setNavigationBarColor(swatch.getRgb());
} else {
setStandardColors();
}
@@ -270,13 +286,13 @@ public class ArtistDetailActivity extends AbsFabActivity {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setStandardColors() {
int titleTextColor = Util.resolveColor(this, R.attr.title_text_color);
- int defaultBarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
+ int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
toolbarColor = defaultBarColor;
artistNameTv.setBackgroundColor(defaultBarColor);
artistNameTv.setTextColor(titleTextColor);
- if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(getResources().getColor(R.color.materialmusic_default_bar_color));
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
}
private void setUpToolBar() {
@@ -323,6 +339,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
case R.id.action_re_download_artist_image:
Toast.makeText(ArtistDetailActivity.this, getResources().getString(R.string.updating), Toast.LENGTH_SHORT).show();
setUpArtistImageAndApplyPalette(true);
+ return true;
case R.id.action_settings:
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
return true;
@@ -376,4 +393,19 @@ public class ArtistDetailActivity extends AbsFabActivity {
}
});
}
+
+ @Subscribe
+ public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
+ switch (event.getAction()){
+ case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED:
+ setNavigationBarColored((boolean) event.getValue());
+ break;
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ App.bus.unregister(this);
+ }
}
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 6080b610..276c8e35 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
@@ -6,6 +6,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
+import android.preference.PreferenceActivity;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.util.Pair;
import android.support.v4.view.ViewPager;
@@ -17,9 +18,8 @@ import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.widget.Toast;
-import com.google.samples.apps.iosched.ui.widget.SlidingTabLayout;
+import com.astuetz.PagerSlidingTabStrip;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.AboutDeveloperDialogHelper;
import com.kabouzeid.gramophone.helper.CreatePlaylistDialogHelper;
@@ -53,7 +53,7 @@ public class MainActivity extends AbsFabActivity
private View statusBar;
private MainActivityViewPagerAdapter viewPagerAdapter;
private ViewPager viewPager;
- private SlidingTabLayout slidingTabLayout;
+ private PagerSlidingTabStrip slidingTabLayout;
private int currentPage = -1;
@Override
@@ -74,13 +74,16 @@ public class MainActivity extends AbsFabActivity
private void setUpViewPager() {
viewPagerAdapter = new MainActivityViewPagerAdapter(this);
viewPager.setAdapter(viewPagerAdapter);
- int startPosition = PreferenceUtils.getInstace(this).getStartPage();
+ int startPosition = PreferenceUtils.getInstance(this).getDefaultStartPage();
+ startPosition = startPosition == -1 ? PreferenceUtils.getInstance(this).getLastStartPage() : startPosition;
currentPage = startPosition;
viewPager.setCurrentItem(startPosition);
navigationDrawerFragment.setItemChecked(startPosition);
- slidingTabLayout.setSelectedIndicatorColors(Util.resolveColor(MainActivity.this, R.attr.colorAccent));
+ final int accentColor = Util.resolveColor(MainActivity.this, R.attr.colorAccent);
+ slidingTabLayout.setIndicatorColor(accentColor);
slidingTabLayout.setViewPager(viewPager);
+
slidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -89,7 +92,7 @@ public class MainActivity extends AbsFabActivity
@Override
public void onPageSelected(final int position) {
- PreferenceUtils.getInstace(MainActivity.this).setStartPage(position);
+ PreferenceUtils.getInstance(MainActivity.this).setLastStartPage(position);
navigationDrawerFragment.setItemChecked(position);
currentPage = position;
invalidateOptionsMenu();
@@ -104,7 +107,7 @@ public class MainActivity extends AbsFabActivity
private void initViews() {
viewPager = (ViewPager) findViewById(R.id.pager);
- slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
+ slidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
@@ -246,7 +249,7 @@ public class MainActivity extends AbsFabActivity
startActivity(new Intent(MainActivity.this, SearchActivity.class));
return true;
case R.id.action_settings:
- Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
+ startActivity(new Intent(MainActivity.this, SettingsActivity.class));
return true;
case R.id.action_about:
AboutDeveloperDialogHelper.getDialog(this).show();
@@ -291,12 +294,12 @@ public class MainActivity extends AbsFabActivity
context.getResources().getString(R.string.songs),
context.getResources().getString(R.string.albums),
context.getResources().getString(R.string.artists),
- context.getResources().getString(R.string.playlists) + " BETA"
+ context.getResources().getString(R.string.playlists)
};
}
@Override
- public Fragment getItem(final int position) {
+ public AbsMainActivityFragment getItem(final int position) {
switch (position) {
case 0:
return pages.get(position, new SongViewFragment());
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 1bc4a60d..2e931787 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
@@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.activities;
+import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
@@ -18,6 +19,7 @@ import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
+import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
@@ -27,14 +29,17 @@ import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
import com.kabouzeid.gramophone.model.Song;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.nineoldandroids.view.ViewPropertyAnimator;
+import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
@@ -59,6 +64,7 @@ public class MusicControllerActivity extends AbsFabActivity {
private ImageButton prevButton;
private ImageButton repeatButton;
private ImageButton shuffleButton;
+ private View mediaControllerContainer;
private int lastFooterColor = -1;
@@ -71,6 +77,8 @@ public class MusicControllerActivity extends AbsFabActivity {
setContentView(R.layout.activity_music_controller);
+ App.bus.register(this);
+
initViews();
moveSeekBarIntoPlace();
@@ -102,6 +110,7 @@ public class MusicControllerActivity extends AbsFabActivity {
totalSongDuration = (TextView) findViewById(R.id.song_total_time);
footer = findViewById(R.id.footer);
progressSlider = (SeekBar) findViewById(R.id.progress_slider);
+ mediaControllerContainer = findViewById(R.id.media_controller_container);
}
private void setUpMusicControllers() {
@@ -109,6 +118,24 @@ public class MusicControllerActivity extends AbsFabActivity {
setUpRepeatButton();
setUpShuffleButton();
setUpProgressSlider();
+ setUpBox(PreferenceUtils.getInstance(this).playbackControllerBoxEnabled());
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ private void setUpBox(boolean boxEnabled) {
+ if (boxEnabled) {
+ if (Util.hasLollipopSDK()) {
+ mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
+ }
+ mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
+ } else {
+ if (Util.hasLollipopSDK() && !Util.isInPortraitMode(this)) {
+ mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
+ mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
+ } else {
+ mediaControllerContainer.setBackground(null);
+ }
+ }
}
private void setUpProgressSlider() {
@@ -131,6 +158,8 @@ public class MusicControllerActivity extends AbsFabActivity {
}
private void setUpPrevNext() {
+ nextButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_next_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
+ prevButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_previous_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -158,10 +187,10 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateShuffleState() {
switch (MusicPlayerRemote.getShuffleMode()) {
case MusicService.SHUFFLE_MODE_SHUFFLE:
- shuffleButton.setImageResource(R.drawable.ic_shuffle_white_48dp);
+ shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
break;
default:
- shuffleButton.setImageResource(R.drawable.ic_shuffle_grey600_48dp);
+ shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
break;
}
}
@@ -179,13 +208,13 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateRepeatState() {
switch (MusicPlayerRemote.getRepeatMode()) {
case MusicService.REPEAT_MODE_NONE:
- repeatButton.setImageResource(R.drawable.ic_repeat_grey600_48dp);
+ repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
break;
case MusicService.REPEAT_MODE_ALL:
- repeatButton.setImageResource(R.drawable.ic_repeat_white_48dp);
+ repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
break;
default:
- repeatButton.setImageResource(R.drawable.ic_repeat_one_white_48dp);
+ repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_one_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
break;
}
}
@@ -266,7 +295,7 @@ public class MusicControllerActivity extends AbsFabActivity {
private void setStandardColors() {
int songTitleTextColor = Util.resolveColor(this, R.attr.title_text_color);
int artistNameTextColor = Util.resolveColor(this, R.attr.caption_text_color);
- int defaultBarColor = getResources().getColor(R.color.materialmusic_default_bar_color);
+ int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
animateColorChange(defaultBarColor);
@@ -274,15 +303,15 @@ public class MusicControllerActivity extends AbsFabActivity {
songArtist.setTextColor(artistNameTextColor);
}
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void animateColorChange(final int newColor) {
if (lastFooterColor != -1 && lastFooterColor != newColor) {
ViewUtil.animateViewColor(footer, lastFooterColor, newColor, 300);
} else {
footer.setBackgroundColor(newColor);
}
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarCurrentPlayingEnabled())
getWindow().setNavigationBarColor(newColor);
- }
lastFooterColor = newColor;
}
@@ -432,4 +461,19 @@ public class MusicControllerActivity extends AbsFabActivity {
.setStartDelay(startDelay)
.start();
}
+
+ @Subscribe
+ public void onUIPrefsChanged(UIPreferenceChangedEvent event) {
+ switch (event.getAction()) {
+ case UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED:
+ setUpBox((boolean) event.getValue());
+ break;
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ App.bus.unregister(this);
+ }
}
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
new file mode 100644
index 00000000..2adf7635
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
@@ -0,0 +1,125 @@
+package com.kabouzeid.gramophone.ui.activities;
+
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager;
+import android.support.v7.widget.Toolbar;
+import android.view.MenuItem;
+
+import com.kabouzeid.gramophone.App;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
+import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
+
+public class SettingsActivity extends AbsBaseActivity {
+ public static final String TAG = SettingsActivity.class.getSimpleName();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_preferences);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
+ }
+
+ public static class SettingsFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.pref_general);
+ addPreferencesFromResource(R.xml.pref_ui);
+
+ final Preference defaultStartPage = findPreference("default_start_page");
+ setSummary(defaultStartPage);
+ defaultStartPage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ setSummary(defaultStartPage, o);
+ return true;
+ }
+ });
+
+ final Preference generalTheme = findPreference("general_theme");
+ setSummary(generalTheme);
+ generalTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ setSummary(generalTheme, o);
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, o));
+ return true;
+ }
+ });
+
+ findPreference("colored_album_footers").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED, o));
+ return true;
+ }
+ });
+
+ findPreference("colored_navigation_bar_artist").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED, o));
+ return true;
+ }
+ });
+
+ findPreference("colored_navigation_bar_album").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED, o));
+ return true;
+ }
+ });
+
+ findPreference("playback_controller_card").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object o) {
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED, o));
+ return true;
+ }
+ });
+ }
+
+ private static void setSummary(Preference preference) {
+ setSummary(preference, PreferenceManager
+ .getDefaultSharedPreferences(preference.getContext())
+ .getString(preference.getKey(), ""));
+ }
+
+ private static void setSummary(Preference preference, Object value) {
+ String stringValue = value.toString();
+
+ if (preference instanceof ListPreference) {
+ ListPreference listPreference = (ListPreference) preference;
+ int index = listPreference.findIndexOfValue(stringValue);
+ preference.setSummary(
+ index >= 0
+ ? listPreference.getEntries()[index]
+ : null);
+ } else {
+ preference.setSummary(stringValue);
+ }
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ onBackPressed();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java
index 54a50f7a..739659c2 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java
@@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.activities.base;
+import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@@ -8,7 +9,10 @@ import com.crashlytics.android.Crashlytics;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.misc.AppKeys;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
+import com.squareup.otto.Subscribe;
/**
* Created by karim on 20.01.15.
@@ -16,12 +20,22 @@ import com.kabouzeid.gramophone.util.Util;
public abstract class AbsBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
private App app;
private boolean areViewsEnabled;
+ private Object uiPreferenceChangeListener = new Object() {
+ @Subscribe
+ public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
+ AbsBaseActivity.this.onUIPreferenceChangedEvent(event);
+ }
+ };
@Override
protected void onCreate(Bundle savedInstanceState) {
Crashlytics.setString(AppKeys.CL_CURRENT_ACTIVITY, getTag());
- setTheme(getApp().getAppTheme());
+ setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
super.onCreate(savedInstanceState);
+ try {
+ App.bus.register(uiPreferenceChangeListener);
+ } catch (Exception ignored) {
+ }
}
protected App getApp() {
@@ -39,6 +53,15 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
enableViews();
}
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
+ switch (event.getAction()) {
+ case UIPreferenceChangedEvent.THEME_CHANGED:
+ recreate();
+ break;
+ }
+ }
+
@Override
public void enableViews() {
areViewsEnabled = true;
@@ -64,4 +87,13 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
}
}
}
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ try {
+ App.bus.unregister(uiPreferenceChangeListener);
+ } catch (Exception ignored) {
+ }
+ }
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java
index a5b12bf9..2c21168f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java
@@ -35,8 +35,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
super.onPostCreate(savedInstanceState);
try {
App.bus.register(busEventListener);
- } catch (Exception ignored) {
- }
+ } catch (Exception ignored) {}
setUpFab();
}
@@ -142,8 +141,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
super.onDestroy();
try {
App.bus.unregister(busEventListener);
- } catch (Exception ignored) {
- }
+ } catch (Exception ignored) {}
}
public void onMusicRemoteEvent(MusicRemoteEvent event) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java
index e793e116..1108c70e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java
@@ -25,6 +25,7 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
+import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
@@ -51,7 +52,7 @@ import java.util.Map;
/**
* Created by karim on 18.01.15.
*/
-public abstract class AbsTagEditorActivity extends ActionBarActivity {
+public abstract class AbsTagEditorActivity extends AbsBaseActivity {
public static final String TAG = AbsTagEditorActivity.class.getSimpleName();
private static final int REQUEST_CODE_SELECT_IMAGE = 1337;
@@ -85,10 +86,7 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- app = (App) getApplicationContext();
- setTheme(app.getAppTheme());
- setUpTranslucence();
-
+ setUpTranslucence(false, false);
super.onCreate(savedInstanceState);
setContentView(getContentViewResId());
@@ -197,13 +195,6 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
}
}
- private void setUpTranslucence() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- Util.setStatusBarTranslucent(getWindow(), false);
- Util.setNavBarTranslucent(getWindow(), false);
- }
- }
-
private void getIntentExtras() {
Bundle intentExtras = getIntent().getExtras();
if (intentExtras != null) {
@@ -232,12 +223,6 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
startActivity(intent);
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_tag_editor, menu);
- return true;
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
@@ -245,8 +230,6 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
case android.R.id.home:
super.onBackPressed();
return true;
- case R.id.action_settings:
- return true;
}
return super.onOptionsItemSelected(item);
}
@@ -290,7 +273,7 @@ public abstract class AbsTagEditorActivity extends ActionBarActivity {
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
- final int vibrantColor = palette.getVibrantColor(getResources().getColor(R.color.materialmusic_default_bar_color));
+ final int vibrantColor = palette.getVibrantColor(Util.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color));
paletteColorPrimary = vibrantColor;
observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java
index c13d07e8..537225e4 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java
@@ -51,6 +51,11 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
setUpViews();
}
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
private void initViews() {
albumTitle = (EditText) findViewById(R.id.album_title);
albumArtistName = (EditText) findViewById(R.id.album_artist);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java
index a4a7f47f..f3a08765 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java
@@ -34,6 +34,11 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
setUpViews();
}
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
private void initViews() {
songTitle = (EditText) findViewById(R.id.title1);
albumTitle = (EditText) findViewById(R.id.title2);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java
index 09b2ea47..97b785da 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java
@@ -2,13 +2,16 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.support.v7.widget.RecyclerView;
+import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
+import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
+import com.squareup.otto.Subscribe;
/**
* Created by karim on 22.11.14.
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 c538db4c..31775234 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java
@@ -4,13 +4,20 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
+import com.kabouzeid.gramophone.R;
+
public final class PreferenceUtils {
- /* Default start page (Artist page) */
- public static final int DEFAULT_PAGE = 2;
+ /* Default start page (Album page) */
+ public static final int DEFAULT_PAGE = 1;
- /* Saves the last page the pager was on in {@link MusicBrowserPhoneFragment} */
- public static final String START_PAGE = "start_page";
+ public static final String GENERAL_THEME = "general_theme";
+
+ /* Saves the last page the pager was on in {@link MainActivity} */
+ public static final String DEFAULT_START_PAGE = "default_start_page";
+
+ /* Saves the last page the pager was on in {@link MainActivity} */
+ public static final String LAST_START_PAGE = "last_start_page";
// Sort order for the artist list
public static final String ARTIST_SORT_ORDER = "artist_sort_order";
@@ -31,10 +38,25 @@ public final class PreferenceUtils {
public static final String SONG_SORT_ORDER = "song_sort_order";
// Key used to download images only on Wi-Fi
- public static final String ONLY_ON_WIFI = "only_on_wifi";
+ public static final String ONLY_ON_WIFI = "auto_download_artist_images";
// Key that gives permissions to download missing artist images
- public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "download_missing_artist_images";
+ public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "auto_download_artist_images";
+
+ // Key used to en or disable palette
+ public static final String COLORED_ALBUM_FOOTERS = "colored_album_footers";
+
+ // Key used to en or disable the colored navigation bar
+ public static final String COLORED_NAVIGATION_BAR_ALBUM = "colored_navigation_bar_album";
+
+ // Key used to en or disable the colored navigation bar
+ public static final String COLORED_NAVIGATION_BAR_ARTIST = "colored_navigation_bar_artist";
+
+ // Key used to en or disable the colored navigation bar
+ public static final String COLORED_NAVIGATION_BAR_CURRENT_PLAYING = "colored_navigation_bar_current_playing_enabled";
+
+ // Key used to en or disable the colored navigation bar
+ public static final String PLAYBACK_CONTROLLER_BOX = "playback_controller_card";
private static PreferenceUtils sInstance;
@@ -44,33 +66,122 @@ public final class PreferenceUtils {
mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
- public static final PreferenceUtils getInstace(final Context context) {
+ public static final PreferenceUtils getInstance(final Context context) {
if (sInstance == null) {
sInstance = new PreferenceUtils(context.getApplicationContext());
}
return sInstance;
}
- public void setStartPage(final int value) {
+ public int getGeneralTheme() {
+ int value = Integer.parseInt(mPreferences.getString(GENERAL_THEME, "1"));
+ switch (value){
+ case 0:
+ return R.style.Theme_MaterialMusic_Light;
+ case 1:
+ return R.style.Theme_MaterialMusic;
+ }
+ return R.style.Theme_MaterialMusic;
+ }
+
+ public void setGeneralTheme(int appTheme) {
+ int value = -1;
+ switch (appTheme) {
+ case R.style.Theme_MaterialMusic_Light:
+ value = 0;
+ break;
+ case R.style.Theme_MaterialMusic:
+ value = 1;
+ break;
+ }
+ if (value != 0 && value != 1) {
+ return;
+ }
final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putInt(START_PAGE, value);
+ editor.putString(GENERAL_THEME, String.valueOf(value));
editor.apply();
}
- public final int getStartPage() {
- return mPreferences.getInt(START_PAGE, DEFAULT_PAGE);
+ public void setDefaultStartPage(final int value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putString(DEFAULT_START_PAGE, String.valueOf(value));
+ editor.apply();
}
- public final boolean onlyOnWifi() {
- return mPreferences.getBoolean(ONLY_ON_WIFI, true);
+ public final int getDefaultStartPage() {
+ return Integer.parseInt(mPreferences.getString(DEFAULT_START_PAGE, "-1"));
}
- public void setOnlyOnWifi(final boolean value) {
+ public void setLastStartPage(final int value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putInt(LAST_START_PAGE, value);
+ editor.apply();
+ }
+
+ public final int getLastStartPage() {
+ return mPreferences.getInt(LAST_START_PAGE, DEFAULT_PAGE);
+ }
+
+ public final boolean autoDownloadOnlyOnWifi() {
+ return mPreferences.getBoolean(ONLY_ON_WIFI, false);
+ }
+
+ public void setAutoDownloadOnlyOnWifi(final boolean value) {
final SharedPreferences.Editor editor = mPreferences.edit();
editor.putBoolean(ONLY_ON_WIFI, value);
editor.apply();
}
+ public final boolean coloredAlbumFootersEnabled() {
+ return mPreferences.getBoolean(COLORED_ALBUM_FOOTERS, true);
+ }
+
+ public void setColoredAlbumFootersEnabled(final boolean value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putBoolean(COLORED_ALBUM_FOOTERS, value);
+ editor.apply();
+ }
+
+ public final boolean coloredNavigationBarAlbumEnabled() {
+ return mPreferences.getBoolean(COLORED_NAVIGATION_BAR_ALBUM, true);
+ }
+
+ public void setColoredNavigationBarAlbumEnabled(final boolean value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putBoolean(COLORED_NAVIGATION_BAR_ALBUM, value);
+ editor.apply();
+ }
+
+ public final boolean coloredNavigationBarArtistEnabled() {
+ return mPreferences.getBoolean(COLORED_NAVIGATION_BAR_ARTIST, true);
+ }
+
+ public void setColoredNavigationBarArtistEnabled(final boolean value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putBoolean(COLORED_NAVIGATION_BAR_ARTIST, value);
+ editor.apply();
+ }
+
+ public final boolean coloredNavigationBarCurrentPlayingEnabled() {
+ return mPreferences.getBoolean(COLORED_NAVIGATION_BAR_CURRENT_PLAYING, true);
+ }
+
+ public void setColoredNavigationBarCurrentPlayingEnabled(final boolean value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putBoolean(COLORED_NAVIGATION_BAR_CURRENT_PLAYING, value);
+ editor.apply();
+ }
+
+ public final boolean playbackControllerBoxEnabled() {
+ return mPreferences.getBoolean(PLAYBACK_CONTROLLER_BOX, true);
+ }
+
+ public void setPlaybackControllerBoxEnabled(final boolean value) {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putBoolean(PLAYBACK_CONTROLLER_BOX, value);
+ editor.apply();
+ }
+
public final boolean downloadMissingArtistImages() {
return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true);
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
index da96de3f..1160baff 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
@@ -4,14 +4,18 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.graphics.Bitmap;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
+import android.support.annotation.DrawableRes;
import android.util.TypedValue;
import android.view.View;
import android.view.Window;
@@ -35,7 +39,7 @@ public class Util {
public static int resolveColor(Context context, int color) {
TypedArray a = context.obtainStyledAttributes(new int[]{color});
- int resId = a.getColor(0, context.getResources().getColor(R.color.materialmusic_color));
+ int resId = a.getColor(0, 0);
a.recycle();
return resId;
}
@@ -115,7 +119,7 @@ public class Util {
}
boolean state = false;
- final boolean onlyOnWifi = PreferenceUtils.getInstace(context).onlyOnWifi();
+ final boolean onlyOnWifi = PreferenceUtils.getInstance(context).autoDownloadOnlyOnWifi();
/* Monitor network connections */
final ConnectivityManager connectivityManager = (ConnectivityManager) context
@@ -196,4 +200,12 @@ public class Util {
public static boolean isInPortraitMode(final Context context) {
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
}
+
+ public static Drawable getTintedDrawable(Resources res, @DrawableRes int drawableResId, int color) {
+ Drawable drawable = res.getDrawable(drawableResId);
+ if (drawable != null) {
+ drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
+ }
+ return drawable;
+ }
}
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
new file mode 100644
index 00000000..53fbe0f7
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_equalizer_black_24dp.png differ
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
new file mode 100644
index 00000000..11693636
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_equalizer_white_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_more_vert_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_more_vert_black_24dp.png
new file mode 100644
index 00000000..f22e7139
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_more_vert_black_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png
new file mode 100644
index 00000000..fdc4a5ad
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_queue_music_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_queue_music_black_24dp.png
new file mode 100644
index 00000000..7f9e0a77
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_queue_music_black_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_queue_music_white_48dp.png b/app/src/main/res/drawable-hdpi/ic_queue_music_white_48dp.png
deleted file mode 100644
index 15d7528e..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_queue_music_white_48dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..f9a8915f
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_equalizer_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_equalizer_black_24dp.png
new file mode 100644
index 00000000..47541240
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_equalizer_black_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_equalizer_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_equalizer_white_24dp.png
new file mode 100644
index 00000000..d10dadad
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_equalizer_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_more_vert_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_more_vert_black_24dp.png
new file mode 100644
index 00000000..991ad6c6
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_more_vert_black_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png
new file mode 100644
index 00000000..1d8ad18a
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_queue_music_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_queue_music_black_24dp.png
new file mode 100644
index 00000000..8eb1f23a
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_queue_music_black_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_queue_music_white_48dp.png b/app/src/main/res/drawable-mdpi/ic_queue_music_white_48dp.png
deleted file mode 100644
index 44a35a7b..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_queue_music_white_48dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..fdcf657f
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_equalizer_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_equalizer_black_24dp.png
new file mode 100644
index 00000000..a44826ce
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_equalizer_black_24dp.png differ
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
new file mode 100644
index 00000000..dbba844d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_equalizer_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_more_vert_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_more_vert_black_24dp.png
new file mode 100644
index 00000000..0db5dc3b
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_more_vert_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png
new file mode 100644
index 00000000..1b04eda0
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_queue_music_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_queue_music_black_24dp.png
new file mode 100644
index 00000000..ab461b38
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_queue_music_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_queue_music_white_48dp.png b/app/src/main/res/drawable-xhdpi/ic_queue_music_white_48dp.png
deleted file mode 100644
index ae058bb4..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_queue_music_white_48dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..12e5d100
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png differ
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
new file mode 100644
index 00000000..adad5ded
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_equalizer_black_24dp.png differ
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
new file mode 100644
index 00000000..59332d8d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_equalizer_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_more_vert_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_more_vert_black_24dp.png
new file mode 100644
index 00000000..d32453da
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_more_vert_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png
new file mode 100644
index 00000000..2955c02e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_overflow.png b/app/src/main/res/drawable-xxhdpi/ic_overflow.png
deleted file mode 100755
index f7faf571..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_overflow.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_queue_music_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_queue_music_black_24dp.png
new file mode 100644
index 00000000..19f50ad1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_queue_music_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_queue_music_white_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_queue_music_white_48dp.png
deleted file mode 100644
index 1462ad09..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_queue_music_white_48dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..6bb8f6e0
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/music_box.png b/app/src/main/res/drawable-xxhdpi/music_box.png
deleted file mode 100644
index 7986dc30..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/music_box.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/music_box_outline.png b/app/src/main/res/drawable-xxhdpi/music_box_outline.png
deleted file mode 100644
index 89de4fb3..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/music_box_outline.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/play_box.png b/app/src/main/res/drawable-xxhdpi/play_box.png
deleted file mode 100644
index dfad3ced..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/play_box.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/settings.png b/app/src/main/res/drawable-xxhdpi/settings.png
deleted file mode 100644
index b8acd2d9..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/settings.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_equalizer_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_equalizer_black_24dp.png
new file mode 100644
index 00000000..fca74bdc
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_equalizer_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_equalizer_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_equalizer_white_24dp.png
new file mode 100644
index 00000000..b82a8d98
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_equalizer_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_more_vert_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_more_vert_black_24dp.png
new file mode 100644
index 00000000..037b6f11
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_more_vert_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png
new file mode 100644
index 00000000..25b6f9f1
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_queue_music_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_queue_music_black_24dp.png
new file mode 100644
index 00000000..5d41485c
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_queue_music_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_queue_music_white_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_queue_music_white_48dp.png
deleted file mode 100644
index 416195b4..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_queue_music_white_48dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png
new file mode 100644
index 00000000..97e9ca94
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png differ
diff --git a/app/src/main/res/drawable/list_item_selected.xml b/app/src/main/res/drawable/list_item_selected.xml
deleted file mode 100755
index eaa1bd2f..00000000
--- a/app/src/main/res/drawable/list_item_selected.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_item_selected_dark.xml b/app/src/main/res/drawable/list_item_selected_dark.xml
deleted file mode 100755
index a32bd4df..00000000
--- a/app/src/main/res/drawable/list_item_selected_dark.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_selector.xml b/app/src/main/res/drawable/list_selector.xml
index 33b10894..b488c3b3 100755
--- a/app/src/main/res/drawable/list_selector.xml
+++ b/app/src/main/res/drawable/list_selector.xml
@@ -2,7 +2,6 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_selector_dark.xml b/app/src/main/res/drawable/list_selector_dark.xml
index 06edb9fe..52b6c885 100755
--- a/app/src/main/res/drawable/list_selector_dark.xml
+++ b/app/src/main/res/drawable/list_selector_dark.xml
@@ -2,7 +2,6 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_music_controller.xml b/app/src/main/res/layout-land/activity_music_controller.xml
index 1c41d032..a934c207 100644
--- a/app/src/main/res/layout-land/activity_music_controller.xml
+++ b/app/src/main/res/layout-land/activity_music_controller.xml
@@ -32,6 +32,12 @@
android:layout_alignParentTop="true"
android:scaleType="centerCrop"/>
+
+
+ android:textColor="@color/white"/>
+ android:textAppearance="@style/TextAppearance.AppCompat.Title"
+ android:textColor="@color/white"/>
@@ -125,8 +126,7 @@
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_margin="16dp"
- android:background="?attr/music_controller_container_color"
- android:elevation="2dp">
+ android:background="?attr/music_controller_container_color">
-
+ android:layout_alignParentTop="true"
+ android:orientation="vertical">
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml
index 421a9844..367a7b9d 100644
--- a/app/src/main/res/layout/activity_album_detail.xml
+++ b/app/src/main/res/layout/activity_album_detail.xml
@@ -21,8 +21,8 @@
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:divider="@null"
android:clipToPadding="false"
+ android:divider="@null"
android:dividerHeight="0dp"
android:scrollbars="none"/>
@@ -36,7 +36,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/title_view_height"
android:height="@dimen/title_view_height"
- android:background="@color/materialmusic_default_bar_color"
+ android:background="?default_bar_color"
android:elevation="@dimen/toolbar_elevation"
android:fontFamily="sans-serif-medium"
android:gravity="center_vertical"
@@ -66,8 +66,7 @@
diff --git a/app/src/main/res/layout/activity_album_tag_editor.xml b/app/src/main/res/layout/activity_album_tag_editor.xml
index 1467acbe..cc6f16dd 100644
--- a/app/src/main/res/layout/activity_album_tag_editor.xml
+++ b/app/src/main/res/layout/activity_album_tag_editor.xml
@@ -1,5 +1,6 @@
+ android:textColor="@color/white"/>
@@ -53,7 +54,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header"
- android:background="@color/background_material_dark"
android:orientation="vertical"
android:padding="16dp">
@@ -146,15 +146,10 @@
+ android:background="#00000000"/>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 76d59203..2ef9cbc7 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -38,23 +38,37 @@
+ style="@style/Toolbar"
+ android:background="?colorPrimary">
-
+
+
+
+ app:elevation="@dimen/toolbar_elevation"
+ android:paddingLeft="64dp"
+ android:textColor="@color/grey_400"
+ android:textColorPrimary="@color/white"
+ app:pstsTabPaddingLeftRight="8dp"/>
+ android:background="@drawable/shadow_down"/>
+ android:textColor="@color/white"
+ android:textStyle="bold"/>
+ android:textColor="@color/white"/>
@@ -60,7 +61,6 @@
android:layout_height="wrap_content"
android:layout_above="@+id/media_controller_container"
android:background="@color/materialmusic_default_bar_color"
- android:elevation="2dp"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="72dp"
@@ -89,14 +89,13 @@
+ android:background="?music_controller_container_color">
+ android:layout_centerInParent="true"/>
+ android:layout_above="@+id/footer"
+ android:elevation="2dp"/>
-
+ android:orientation="vertical">
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml
index 6dd63109..6fbdc692 100644
--- a/app/src/main/res/layout/activity_playlist_detail.xml
+++ b/app/src/main/res/layout/activity_playlist_detail.xml
@@ -14,7 +14,7 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?colorPrimary"
- android:elevation="@dimen/toolbar_elevation"
+ app:elevation="@dimen/toolbar_elevation"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml
index af503489..ef6025f1 100644
--- a/app/src/main/res/layout/activity_search.xml
+++ b/app/src/main/res/layout/activity_search.xml
@@ -7,26 +7,25 @@
+ app:elevation="@dimen/toolbar_elevation"/>
+
+ android:background="@drawable/shadow_down"/>
-
+ android:divider="@null"
+ android:dividerHeight="0px"/>
+
diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml
index 1645d3ac..550d6617 100644
--- a/app/src/main/res/layout/activity_song_tag_editor.xml
+++ b/app/src/main/res/layout/activity_song_tag_editor.xml
@@ -1,5 +1,6 @@
+ android:textColor="@color/white"/>
+ android:textColor="@color/white"/>
@@ -66,7 +67,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header"
- android:background="@color/background_material_dark"
android:orientation="vertical"
android:padding="16dp">
@@ -186,15 +186,10 @@
+ android:background="#00000000"/>
+ android:background="?separator_color"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_album_view.xml b/app/src/main/res/layout/fragment_album_view.xml
index 0789e62b..32c27895 100644
--- a/app/src/main/res/layout/fragment_album_view.xml
+++ b/app/src/main/res/layout/fragment_album_view.xml
@@ -3,15 +3,13 @@
android:id="@+id/fragment_album_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:padding="2dp">
+ android:layout_height="match_parent">
diff --git a/app/src/main/res/layout/fragment_navigation_drawer.xml b/app/src/main/res/layout/fragment_navigation_drawer.xml
index 90febfa3..47ef5bab 100644
--- a/app/src/main/res/layout/fragment_navigation_drawer.xml
+++ b/app/src/main/res/layout/fragment_navigation_drawer.xml
@@ -46,7 +46,7 @@
android:fontFamily="sans-serif-medium"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
- android:textColor="@android:color/white"
+ android:textColor="@color/white"
android:textSize="14sp"/>
+ android:layout_margin="2dp"
+ android:foreground="?rect_selector"
+ app:elevation="3dp">
+ android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
+ android:textColor="?title_text_color"/>
+ android:textAppearance="@style/TextAppearance.AppCompat.Body1"
+ android:textColor="?caption_text_color"/>
diff --git a/app/src/main/res/layout/item_grid_artist_album.xml b/app/src/main/res/layout/item_grid_artist_album.xml
index fb832e29..9d252055 100644
--- a/app/src/main/res/layout/item_grid_artist_album.xml
+++ b/app/src/main/res/layout/item_grid_artist_album.xml
@@ -1,9 +1,10 @@
diff --git a/app/src/main/res/layout/item_list_album_song.xml b/app/src/main/res/layout/item_list_album_song.xml
index 475cab81..730bb71a 100644
--- a/app/src/main/res/layout/item_list_album_song.xml
+++ b/app/src/main/res/layout/item_list_album_song.xml
@@ -1,50 +1,71 @@
-
+ android:layout_height="72dp"
+ android:background="?rect_selector">
-
+
-
+
-
+
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list_artist.xml b/app/src/main/res/layout/item_list_artist.xml
index d0cc7643..1d85a37d 100644
--- a/app/src/main/res/layout/item_list_artist.xml
+++ b/app/src/main/res/layout/item_list_artist.xml
@@ -1,45 +1,60 @@
-
-
-
+
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp">
-
+
-
+ android:layout_gravity="center"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+
+
+
+
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list_artist_song.xml b/app/src/main/res/layout/item_list_artist_song.xml
index 087c39c0..47b10204 100644
--- a/app/src/main/res/layout/item_list_artist_song.xml
+++ b/app/src/main/res/layout/item_list_artist_song.xml
@@ -1,49 +1,65 @@
-
-
-
+
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:descendantFocusability="blocksDescendants"
+ android:orientation="horizontal"
+ android:paddingLeft="16dp">
-
+
-
+ android:layout_gravity="center"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list_playlist.xml b/app/src/main/res/layout/item_list_playlist.xml
index dcca1f98..4b9f89eb 100644
--- a/app/src/main/res/layout/item_list_playlist.xml
+++ b/app/src/main/res/layout/item_list_playlist.xml
@@ -1,36 +1,53 @@
-
+
-
+
+ android:orientation="horizontal"
+ android:paddingLeft="16dp">
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list_search.xml b/app/src/main/res/layout/item_list_search.xml
index 05a374cb..e1b3bdd8 100644
--- a/app/src/main/res/layout/item_list_search.xml
+++ b/app/src/main/res/layout/item_list_search.xml
@@ -9,8 +9,8 @@
+ android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
+ android:textColor="?title_text_color"/>
+ android:textAppearance="@style/TextAppearance.AppCompat.Body1"
+ android:textColor="?caption_text_color"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list_song.xml b/app/src/main/res/layout/item_list_song.xml
index 6ee972b6..b79e1626 100644
--- a/app/src/main/res/layout/item_list_song.xml
+++ b/app/src/main/res/layout/item_list_song.xml
@@ -1,21 +1,21 @@
+ android:layout_width="match_parent"
+ android:layout_height="72dp"
+ android:background="?rect_selector">
@@ -30,20 +30,22 @@
android:orientation="vertical">
+ android:textAppearance="@style/TextAppearance.AppCompat.Subhead"/>
+ android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_navigation_drawer.xml b/app/src/main/res/layout/item_navigation_drawer.xml
index c32a41b8..d5690bbf 100644
--- a/app/src/main/res/layout/item_navigation_drawer.xml
+++ b/app/src/main/res/layout/item_navigation_drawer.xml
@@ -4,7 +4,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="?attr/list_selector"
+ android:background="?list_selector"
android:minHeight="48dp"
android:orientation="horizontal"
android:padding="16dp">
diff --git a/app/src/main/res/menu/menu_album_detail.xml b/app/src/main/res/menu/menu_album_detail.xml
index 730e12b5..3be6396c 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 @@
@@ -17,7 +17,6 @@
@@ -30,10 +29,4 @@
android:id="@+id/action_tag_editor"
android:title="@string/action_tag_editor"
app:showAsAction="never"/>
-
-
diff --git a/app/src/main/res/menu/menu_artist_detail.xml b/app/src/main/res/menu/menu_artist_detail.xml
index 8f0bb545..efc8c949 100644
--- a/app/src/main/res/menu/menu_artist_detail.xml
+++ b/app/src/main/res/menu/menu_artist_detail.xml
@@ -5,7 +5,7 @@
@@ -17,7 +17,6 @@
@@ -30,10 +29,4 @@
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 f4e19c26..118370a2 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -5,7 +5,7 @@
@@ -17,7 +17,6 @@
@@ -29,7 +28,6 @@
diff --git a/app/src/main/res/menu/menu_music_playing.xml b/app/src/main/res/menu/menu_music_playing.xml
index c978479f..7011d272 100644
--- a/app/src/main/res/menu/menu_music_playing.xml
+++ b/app/src/main/res/menu/menu_music_playing.xml
@@ -10,7 +10,6 @@
@@ -34,9 +33,4 @@
android:id="@+id/action_details"
android:title="@string/action_details"
app:showAsAction="never"/>
-
diff --git a/app/src/main/res/menu/menu_playlist_detail.xml b/app/src/main/res/menu/menu_playlist_detail.xml
index f7caa816..ef6a7b57 100644
--- a/app/src/main/res/menu/menu_playlist_detail.xml
+++ b/app/src/main/res/menu/menu_playlist_detail.xml
@@ -4,12 +4,11 @@
tools:context="com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity">
-
@@ -20,19 +20,16 @@
diff --git a/app/src/main/res/menu/menu_tag_editor.xml b/app/src/main/res/menu/menu_tag_editor.xml
deleted file mode 100644
index 74d36b36..00000000
--- a/app/src/main/res/menu/menu_tag_editor.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 1ad1a20d..4af2561d 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -27,7 +27,7 @@
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 51983d74..998dad2e 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -2,9 +2,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 4c9fc6b5..8b654267 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,18 +1,21 @@
- @color/grey_900
+
- @color/blue_500
- @color/blue_600
+ @color/indigo_500
+ @color/indigo_600
@color/pink_500
@color/pink_600
@color/pink_300
- ?android:attr/textColorPrimaryInverse
- ?android:attr/textColorSecondaryInverse
- @color/grey_400
+ @color/grey_300
@color/grey_300
+ #0C000000
+ @color/white
+ @color/grey_800
+ @color/materialmusic_accent_color
+ #D0D0D0
@color/indigo_500
@@ -20,16 +23,13 @@
@color/pink_500
@color/pink_600
@color/pink_300
- ?android:attr/textColorPrimary
- ?android:attr/textColorSecondary
@color/grey_800
@color/grey_900
-
-
- #55000000
+ #0CFFFFFF
+ @color/grey_900
+ @color/white
+ @color/materialmusic_dark_accent_color
#55000000
- #D0D0D0
- #77404040
#D0D0D0
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d1bcace3..5526cbe4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -89,5 +89,9 @@
\u0020songs?
"Warning: This operation can not be undone."
Shuffle all
+ Last opened
+ Start page
+ Light
+ Dark
diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml
new file mode 100644
index 00000000..c69b50a7
--- /dev/null
+++ b/app/src/main/res/values/strings_activity_settings.xml
@@ -0,0 +1,40 @@
+
+ Settings
+
+
+
+
+ General
+ Set default start page
+
+ - @string/last_opened
+ - @string/songs
+ - @string/albums
+ - @string/artists
+ - @string/playlists
+
+
+ - -1
+ - 0
+ - 1
+ - 2
+ - 3
+
+
+
+ UI
+ General theme
+
+ - @string/light_theme_name
+ - @string/dark_theme_name
+
+
+ - 0
+ - 1
+
+ Playback controller card
+ Colored navigation bar artist view
+ Colored navigation bar album view
+ Colored album footers
+
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index a919185b..4ba94700 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -16,7 +16,7 @@
- 12dp
- 48dp
- 48dp
- - @drawable/ic_overflow
+ - ?icon_overflow
- fitXY
- ?round_selector
- true
@@ -43,4 +43,13 @@
- @drawable/slider_thumb
+
+
diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml
index a6c1651b..ee82fa03 100644
--- a/app/src/main/res/values/styles_parents.xml
+++ b/app/src/main/res/values/styles_parents.xml
@@ -21,6 +21,16 @@
- @drawable/list_selector_dark
- @drawable/round_selector_dark
- @drawable/rect_selector_dark
+ - @color/materialmusic_dark_separator_color
+
+ - @drawable/ic_more_vert_white_24dp
+
+ - @color/materialmusic_dark_themed_drawable_color
+ - @color/materialmusic_dark_themed_drawable_activated_color
+
+ - @color/materialmusic_dark_default_bar_color
+
+ - @style/ThemeOverlay.AppCompat
- true
@@ -37,8 +47,8 @@
- @color/materialmusic_accent_color
- @color/materialmusic_accent_color
- - ?android:attr/textColorPrimaryInverse
- - ?android:attr/textColorSecondaryInverse
+ - ?android:attr/textColorPrimary
+ - ?android:attr/textColorSecondary
- @color/materialmusic_music_controller_container_color
- @color/materialmusic_navigation_drawer_background_color
@@ -46,6 +56,16 @@
- @drawable/list_selector
- @drawable/round_selector
- @drawable/rect_selector
+ - @color/materialmusic_separator_color
+
+ - @drawable/ic_more_vert_black_24dp
+
+ - @color/materialmusic_themed_drawable_color
+ - @color/materialmusic_themed_drawable_activated_color
+
+ - @color/materialmusic_default_bar_color
+
+ - @style/ThemeOverlay.AppCompat.Light
- false
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
new file mode 100644
index 00000000..e4b1ec68
--- /dev/null
+++ b/app/src/main/res/xml/pref_general.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml
new file mode 100644
index 00000000..c79b574f
--- /dev/null
+++ b/app/src/main/res/xml/pref_ui.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+