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 @@ + + + + + + + + + + + + + +