diff --git a/app/build.gradle b/app/build.gradle
index 00799021..372998bd 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -50,7 +50,7 @@ dependencies {
compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') {
transitive = true;
}
- compile 'com.afollestad:material-dialogs:0.7.2.1'
+ compile 'com.afollestad:material-dialogs:0.7.2.2'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:recyclerview-v7:22.0.0'
compile 'com.android.support:gridlayout-v7:22.0.0'
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 56446cc5..eaf91897 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,6 +1,6 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
-# in /Applications/android_sdk/tools/proguard/proguard-android.txt
+# in /Users/aidanfollestad/Documents/android-sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
@@ -15,7 +15,7 @@
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
+
-keep class !android.support.v7.internal.view.menu.**,** {*;}
-dontwarn
--ignorewarnings
--dontshrink
\ No newline at end of file
+-ignorewarnings
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a2858ff7..b9117137 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.kabouzeid.gramophone">
@@ -12,10 +13,13 @@
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
- android:theme="@style/Theme.MaterialMusic" >
+ android:theme="@style/Theme.MaterialMusic"
+ android:supportsRtl="true"
+ tools:ignore="UnusedAttribute">
+
+ android:label="@string/app_name">
@@ -75,26 +79,24 @@
+
-
+
+
-
-
-
-
+
+
-
+ android:parentActivityName=".ui.activities.MainActivity" />
-
+ android:enabled="true" />
-
+
@@ -107,18 +109,15 @@
-
+ android:windowSoftInputMode="adjustResize" />
-
+ android:label="@string/title_activity_album_tag_editor" />
-
+ android:label="@string/title_activity_search" />
-
+
@@ -130,12 +129,11 @@
-
+ android:label="@string/title_activity_playlist_detail" />
-
+ android:label="@string/title_activity_settings" />
+
diff --git a/app/src/main/java/com/kabouzeid/gramophone/App.java b/app/src/main/java/com/kabouzeid/gramophone/App.java
index 688886d6..1d7eb3f4 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/App.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/App.java
@@ -1,25 +1,23 @@
package com.kabouzeid.gramophone;
import android.app.Application;
-import android.preference.PreferenceManager;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import com.crashlytics.android.Crashlytics;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
-import com.kabouzeid.gramophone.misc.AppKeys;
import com.squareup.otto.Bus;
import com.squareup.otto.ThreadEnforcer;
import io.fabric.sdk.android.Fabric;
/**
- * Created by karim on 25.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class App extends Application {
public static final String TAG = App.class.getSimpleName();
- public static Bus bus = new Bus(ThreadEnforcer.MAIN);
+ public static final Bus bus = new Bus(ThreadEnforcer.MAIN);
private RequestQueue requestQueue;
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 bcc5d74d..f93d0867 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java
@@ -12,17 +12,15 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import com.kabouzeid.gramophone.App;
+import com.afollestad.materialdialogs.util.DialogUtils;
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;
import com.squareup.picasso.Callback;
@@ -31,12 +29,13 @@ import com.squareup.picasso.Picasso;
import java.util.List;
/**
- * Created by karim on 24.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumAdapter extends RecyclerView.Adapter {
+
public static final String TAG = AlbumAdapter.class.getSimpleName();
- private Activity activity;
- private boolean usePalette;
+ private final Activity activity;
+ private final boolean usePalette;
private List dataSet;
@Override
@@ -83,10 +82,10 @@ public class AlbumAdapter extends RecyclerView.Adapter
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
- ImageView image;
- TextView title;
- TextView artist;
- View footer;
+ final ImageView image;
+ final TextView title;
+ final TextView artist;
+ final View footer;
public ViewHolder(View itemView) {
super(itemView);
@@ -105,7 +104,7 @@ public class AlbumAdapter extends RecyclerView.Adapter
)};
if (activity instanceof AbsFabActivity)
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
- NavigationUtil.goToAlbum(activity, dataSet.get(getPosition()).id, albumPairs);
+ NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).id, albumPairs);
}
}
@@ -127,7 +126,7 @@ public class AlbumAdapter extends RecyclerView.Adapter
if (vibrantSwatch != null) {
title.setTextColor(vibrantSwatch.getTitleTextColor());
artist.setTextColor(vibrantSwatch.getTitleTextColor());
- ViewUtil.animateViewColor(footer, Util.resolveColor(activity, R.attr.default_bar_color), vibrantSwatch.getRgb());
+ ViewUtil.animateViewColor(footer, DialogUtils.resolveColor(activity, R.attr.default_bar_color), vibrantSwatch.getRgb());
} else {
paletteBlackAndWhite(title, artist, footer);
}
@@ -136,31 +135,19 @@ 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 = Util.resolveColor(activity, R.attr.default_bar_color);
+ title.setTextColor(DialogUtils.resolveColor(activity, R.attr.title_text_color));
+ artist.setTextColor(DialogUtils.resolveColor(activity, R.attr.caption_text_color));
+ int defaultBarColor = DialogUtils.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 = Util.resolveColor(activity, R.attr.default_bar_color);
+ title.setTextColor(DialogUtils.resolveColor(activity, R.attr.title_text_color));
+ artist.setTextColor(DialogUtils.resolveColor(activity, R.attr.caption_text_color));
+ int defaultBarColor = DialogUtils.resolveColor(activity, R.attr.default_bar_color);
footer.setBackgroundColor(defaultBarColor);
}
- @Override
- public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
- super.onDetachedFromRecyclerView(recyclerView);
- App.bus.unregister(this);
- }
-
- @Override
- public void onAttachedToRecyclerView(RecyclerView recyclerView) {
- super.onAttachedToRecyclerView(recyclerView);
- App.bus.register(this);
- }
-
@Subscribe
public void onDataBaseEvent(DataBaseChangedEvent event) {
switch (event.getAction()) {
@@ -171,14 +158,4 @@ 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/ArtistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java
index 1e40bd59..76ccb6da 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java
@@ -23,10 +23,10 @@ import com.squareup.picasso.Picasso;
import java.util.List;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistAdapter extends RecyclerView.Adapter {
- protected Activity activity;
+ protected final Activity activity;
protected List dataSet;
public ArtistAdapter(Activity activity) {
@@ -70,9 +70,9 @@ public class ArtistAdapter extends RecyclerView.Adapter {
public static final String TAG = AlbumAdapter.class.getSimpleName();
@@ -28,9 +28,9 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter dataSet;
- private int listMargin;
+ private final Activity activity;
+ private final List dataSet;
+ private final int listMargin;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@@ -72,9 +72,9 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter {
- private int currentChecked = -1;
+public class NavigationDrawerItemAdapter extends RecyclerView.Adapter implements View.OnClickListener {
- public NavigationDrawerItemAdapter(Context context, int resource, List objects) {
- super(context, resource, objects);
+ // per the Material design guidelines
+ @SuppressWarnings("FieldCanBeLocal")
+ private final int ALPHA_ACTIVATED = 255;
+ @SuppressWarnings("FieldCanBeLocal")
+ private final int ALPHA_ICON = 138;
+ @SuppressWarnings("FieldCanBeLocal")
+ private final int ALPHA_TEXT = 222;
+
+ @Override
+ public void onClick(View v) {
+ int index = (Integer) v.getTag();
+ if (mCallback != null)
+ mCallback.onItemSelected(index);
+ }
+
+ public static class ShortcutViewHolder extends RecyclerView.ViewHolder {
+
+ public ShortcutViewHolder(View itemView) {
+ super(itemView);
+ divider = itemView.findViewById(R.id.divider);
+ container = itemView.findViewById(R.id.container);
+ title = (TextView) itemView.findViewById(R.id.title);
+ icon = (ImageView) itemView.findViewById(R.id.icon);
+ }
+
+ final TextView title;
+ final ImageView icon;
+ final View divider;
+ final View container;
+ }
+
+ private int currentChecked = -1;
+ private int navIconColor;
+ private final ArrayList mItems;
+ private final Callback mCallback;
+
+ public interface Callback {
+ void onItemSelected(int index);
+ }
+
+ public NavigationDrawerItemAdapter(Context context, ArrayList objects, Callback callback) {
+ navIconColor = DialogUtils.resolveColor(context, R.attr.nav_drawer_icon_color);
+ if (DialogUtils.isColorDark(navIconColor))
+ navIconColor = ColorChooserDialog.shiftColorUp(navIconColor);
+ mItems = objects;
+ mCallback = callback;
}
public void setChecked(int position) {
+ int oldPosition = currentChecked;
currentChecked = position;
- notifyDataSetChanged();
+ if (oldPosition != -1)
+ notifyItemChanged(oldPosition);
+ notifyItemChanged(position);
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
- NavigationDrawerItem item = getItem(position);
- if (convertView == null) {
- convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_navigation_drawer, parent, false);
- }
- TextView title = (TextView) convertView.findViewById(R.id.title);
- ImageView icon = (ImageView) convertView.findViewById(R.id.album_art);
- title.setText(item.title);
- if (position == currentChecked) {
- title.setTextColor(Util.resolveColor(getContext(), R.attr.colorAccent));
- icon.setImageDrawable(Util.getTintedDrawable(getContext().getResources(), item.imageRes, Util.resolveColor(getContext(), R.attr.colorAccent)));
- } else {
- title.setTextColor(Util.resolveColor(getContext(), R.attr.title_text_color));
- icon.setImageDrawable(Util.getTintedDrawable(getContext().getResources(), item.imageRes, Util.resolveColor(getContext(), R.attr.themed_drawable_color)));
- }
- View container = convertView.findViewById(R.id.container);
- container.setActivated(position == currentChecked);
- return convertView;
+ public ShortcutViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_navigation_drawer, parent, false);
+ return new ShortcutViewHolder(view);
}
-}
+
+ @Override
+ public void onBindViewHolder(ShortcutViewHolder holder, int position) {
+ NavigationDrawerItem item = mItems.get(position);
+
+ holder.title.setText(item.title);
+ holder.icon.setImageResource(item.imageRes);
+ holder.divider.setVisibility(position == NavigationDrawerFragment.ABOUT_INDEX ?
+ View.VISIBLE : View.GONE);
+
+ final boolean selected = position == currentChecked;
+ final int iconColor = selected ? ThemeSingleton.get().positiveColor : navIconColor;
+ final int textColor = selected ? ThemeSingleton.get().positiveColor : navIconColor;
+
+ holder.title.setTextColor(textColor);
+ holder.title.setAlpha(selected ? ALPHA_ACTIVATED : ALPHA_TEXT);
+ holder.icon.setColorFilter(iconColor, PorterDuff.Mode.SRC_ATOP);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ holder.icon.setImageAlpha(selected ? ALPHA_ACTIVATED : ALPHA_ICON);
+ } else {
+ // noinspection deprecation
+ holder.icon.setAlpha(selected ? ALPHA_ACTIVATED : ALPHA_ICON);
+ }
+
+ holder.container.setActivated(selected);
+ holder.container.setTag(position);
+ holder.container.setOnClickListener(this);
+ }
+
+ @Override
+ public int getItemCount() {
+ return mItems.size();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java
index 7b7541f9..367d4ef9 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PagerAdapter.java
@@ -29,7 +29,7 @@ public class PagerAdapter extends FragmentPagerAdapter {
private int mCurrentPage;
- private String[] titles;
+ private final String[] titles;
public PagerAdapter(final Context context, final FragmentManager fragmentManager) {
super(fragmentManager);
@@ -68,16 +68,15 @@ public class PagerAdapter extends FragmentPagerAdapter {
if (mWeakFragment != null) {
mWeakFragment.clear();
}
- mFragmentArray.put(position, new WeakReference(mFragment));
+ mFragmentArray.put(position, new WeakReference<>(mFragment));
return mFragment;
}
@Override
public Fragment getItem(final int position) {
final Holder mCurrentHolder = mHolderList.get(position);
- final Fragment mFragment = Fragment.instantiate(mContext,
+ return Fragment.instantiate(mContext,
mCurrentHolder.mClassName, mCurrentHolder.mParams);
- return mFragment;
}
@Override
@@ -114,7 +113,7 @@ public class PagerAdapter extends FragmentPagerAdapter {
ARTIST(ArtistViewFragment.class),
PLAYLIST(PlaylistViewFragment.class);
- private Class extends Fragment> mFragmentClass;
+ private final Class extends Fragment> mFragmentClass;
MusicFragments(final Class extends Fragment> fragmentClass) {
mFragmentClass = fragmentClass;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java
index 25db4d82..b0c06493 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java
@@ -1,7 +1,6 @@
package com.kabouzeid.gramophone.adapter;
-import android.app.Activity;
-import android.content.Intent;
+import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
@@ -10,31 +9,24 @@ import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
-import android.widget.Toast;
+import com.afollestad.materialdialogs.util.DialogUtils;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
-import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
-import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
-import com.kabouzeid.gramophone.loader.SongFilePathLoader;
-import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.Song;
-import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
-import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.Util;
-import java.io.File;
-import java.util.List;
+import java.util.ArrayList;
/**
- * Created by karim on 24.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class PlayingQueueAdapter extends ArrayAdapter {
- private Activity activity;
- public PlayingQueueAdapter(Activity activity, List playList) {
+ private final ActionBarActivity activity;
+
+ public PlayingQueueAdapter(ActionBarActivity activity, ArrayList playList) {
super(activity, R.layout.item_list_playlist_song, playList);
this.activity = activity;
}
@@ -52,7 +44,7 @@ public class PlayingQueueAdapter extends ArrayAdapter {
title.setText(song.title);
if (MusicPlayerRemote.getPosition() == position) {
playingIndicator.setVisibility(View.VISIBLE);
- playingIndicator.setImageDrawable(Util.getTintedDrawable(getContext().getResources(), R.drawable.ic_speaker_white_48dp, Util.resolveColor(getContext(), R.attr.themed_drawable_color)));
+ playingIndicator.setImageDrawable(Util.getTintedDrawable(getContext(), R.drawable.ic_speaker_white_48dp, DialogUtils.resolveColor(getContext(), R.attr.themed_drawable_color)));
} else {
playingIndicator.setVisibility(View.GONE);
}
@@ -65,7 +57,7 @@ public class PlayingQueueAdapter extends ArrayAdapter {
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
- if(item.getItemId() == R.id.action_remove_from_playing_queue) {
+ if (item.getItemId() == R.id.action_remove_from_playing_queue) {
MusicPlayerRemote.removeFromQueue(position);
notifyDataSetChanged();
return true;
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 6cdeb3ac..3e53c4fb 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.adapter;
-import android.app.Activity;
import android.support.v4.util.Pair;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -24,14 +24,15 @@ import com.squareup.otto.Subscribe;
import java.util.List;
/**
- * Created by karim on 16.03.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class PlaylistAdapter extends RecyclerView.Adapter {
+
public static final String TAG = PlaylistAdapter.class.getSimpleName();
- protected Activity activity;
+ protected final ActionBarActivity activity;
protected List dataSet;
- public PlaylistAdapter(Activity activity) {
+ public PlaylistAdapter(ActionBarActivity activity) {
this.activity = activity;
loadDataSet();
}
@@ -57,8 +58,8 @@ public class PlaylistAdapter extends RecyclerView.Adapter{
- private Activity activity;
+public class SearchAdapter extends ArrayAdapter {
- public SearchAdapter(Activity activity, List objects) {
+ private final ActionBarActivity activity;
+
+ public SearchAdapter(ActionBarActivity activity, List objects) {
super(activity, R.layout.item_list_search, objects);
this.activity = activity;
}
@@ -50,7 +51,7 @@ public class SearchAdapter extends ArrayAdapter{
subTitle.setVisibility(View.GONE);
imageView.setVisibility(View.GONE);
overflowButton.setVisibility(View.GONE);
- convertView.setBackgroundColor(Util.resolveColor(getContext(), R.attr.default_bar_color));
+ convertView.setBackgroundColor(DialogUtils.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 80c47131..44bfb681 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
@@ -1,8 +1,6 @@
package com.kabouzeid.gramophone.adapter.songadapter;
-import android.app.Activity;
-import android.content.Intent;
-import android.support.v4.util.Pair;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -13,32 +11,23 @@ import android.widget.PopupMenu;
import android.widget.TextView;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
-import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
-import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
-import com.kabouzeid.gramophone.loader.SongFilePathLoader;
-import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.Song;
-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 java.io.File;
-import java.util.List;
+import java.util.ArrayList;
/**
- * Created by karim on 27.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumSongAdapter extends RecyclerView.Adapter {
+
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
+ protected final ActionBarActivity activity;
+ protected final ArrayList dataSet;
- protected Activity activity;
- protected List dataSet;
-
- public AlbumSongAdapter(Activity activity, List objects) {
+ public AlbumSongAdapter(ActionBarActivity activity, ArrayList objects) {
this.activity = activity;
dataSet = objects;
}
@@ -66,10 +55,10 @@ public class AlbumSongAdapter extends RecyclerView.Adapter {
- private Activity activity;
- public ArtistSongAdapter(Activity activity, List songs) {
+ private final ActionBarActivity activity;
+
+ public ArtistSongAdapter(ActionBarActivity activity, List songs) {
super(activity, R.layout.item_list_song, songs);
this.activity = activity;
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java
index c1cadf60..943529d3 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.adapter.songadapter;
-import android.app.Activity;
import android.support.v4.util.Pair;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -22,17 +22,19 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.squareup.picasso.Picasso;
+import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 27.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class PlaylistSongAdapter extends RecyclerView.Adapter {
- public static final String TAG = AlbumSongAdapter.class.getSimpleName();
- protected Activity activity;
- protected List dataSet;
- public PlaylistSongAdapter(Activity activity, List objects) {
+ public static final String TAG = AlbumSongAdapter.class.getSimpleName();
+ protected final ActionBarActivity activity;
+ protected final ArrayList dataSet;
+
+ public PlaylistSongAdapter(ActionBarActivity activity, ArrayList objects) {
this.activity = activity;
dataSet = objects;
}
@@ -62,10 +64,10 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter) (List) dataSet, getAdapterPosition(), true);
+ //noinspection unchecked
+ MusicPlayerRemote.openQueue((ArrayList) (List) dataSet, getAdapterPosition(), true);
}
});
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java
index 2d300093..66e6c3f9 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java
@@ -1,9 +1,8 @@
package com.kabouzeid.gramophone.adapter.songadapter;
-import android.app.Activity;
-import android.content.Intent;
import android.graphics.Typeface;
import android.support.v4.util.Pair;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -13,41 +12,35 @@ import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
+import com.afollestad.materialdialogs.ThemeSingleton;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
-import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
-import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
-import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.loader.SongLoader;
-import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.Song;
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.Util;
import com.squareup.otto.Subscribe;
import com.squareup.picasso.Picasso;
-import java.io.File;
-import java.util.List;
+import java.util.ArrayList;
/**
- * Created by karim on 27.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SongAdapter extends RecyclerView.Adapter {
+
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
private static final int SHUFFLE_BUTTON = 0;
private static final int SONG = 1;
- protected Activity activity;
- protected List dataSet;
+ protected final ActionBarActivity activity;
+ protected ArrayList dataSet;
- public SongAdapter(Activity activity) {
+ public SongAdapter(ActionBarActivity activity) {
this.activity = activity;
loadDataSet();
}
@@ -80,15 +73,14 @@ public class SongAdapter extends RecyclerView.Adapter {
.placeholder(R.drawable.default_album_art)
.into(holder.albumArt);
} else {
- int accentColor = Util.resolveColor(activity, R.attr.colorAccent);
holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase());
- holder.songTitle.setTextColor(accentColor);
+ holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor);
holder.songTitle.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
holder.songInfo.setVisibility(View.GONE);
holder.overflowButton.setVisibility(View.GONE);
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.setColorFilter(ThemeSingleton.get().positiveColor);
holder.albumArt.setImageResource(R.drawable.ic_shuffle_white_48dp);
holder.separator.setVisibility(View.VISIBLE);
holder.short_separator.setVisibility(View.GONE);
@@ -101,12 +93,12 @@ public class SongAdapter extends RecyclerView.Adapter {
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
- TextView songTitle;
- TextView songInfo;
- ImageView overflowButton;
- ImageView albumArt;
- View separator;
- View short_separator;
+ final TextView songTitle;
+ final TextView songInfo;
+ final ImageView overflowButton;
+ final ImageView albumArt;
+ final View separator;
+ final View short_separator;
public ViewHolder(View itemView) {
super(itemView);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java b/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java
index 1c273797..ee5456e9 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java
@@ -6,7 +6,6 @@ import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.support.annotation.NonNull;
import android.widget.RemoteViews;
import com.kabouzeid.gramophone.R;
@@ -15,7 +14,6 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
-import com.kabouzeid.gramophone.util.Util;
import com.squareup.picasso.Picasso;
/**
diff --git a/app/src/main/java/com/kabouzeid/gramophone/comparator/AlbumAlphabeticComparator.java b/app/src/main/java/com/kabouzeid/gramophone/comparator/AlbumAlphabeticComparator.java
index 05fd6ac9..e5f4e6ef 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/comparator/AlbumAlphabeticComparator.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/comparator/AlbumAlphabeticComparator.java
@@ -5,11 +5,11 @@ import com.kabouzeid.gramophone.model.Album;
import java.util.Comparator;
/**
- * Created by karim on 25.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
-public class AlbumAlphabeticComparator implements Comparator {
+class AlbumAlphabeticComparator implements Comparator {
@Override
public int compare(Album lhs, Album rhs) {
return lhs.title.trim().compareToIgnoreCase(rhs.title.trim());
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/comparator/ArtistAlphabeticComparator.java b/app/src/main/java/com/kabouzeid/gramophone/comparator/ArtistAlphabeticComparator.java
index 55209fe9..9cd5d389 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/comparator/ArtistAlphabeticComparator.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/comparator/ArtistAlphabeticComparator.java
@@ -5,7 +5,7 @@ import com.kabouzeid.gramophone.model.Artist;
import java.util.Comparator;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistAlphabeticComparator implements Comparator {
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/comparator/SongAlphabeticComparator.java b/app/src/main/java/com/kabouzeid/gramophone/comparator/SongAlphabeticComparator.java
index c7ff301d..abf8aa3c 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/comparator/SongAlphabeticComparator.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/comparator/SongAlphabeticComparator.java
@@ -5,7 +5,7 @@ import com.kabouzeid.gramophone.model.Song;
import java.util.Comparator;
/**
- * Created by karim on 28.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SongAlphabeticComparator implements Comparator {
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/comparator/SongTrackNumberComparator.java b/app/src/main/java/com/kabouzeid/gramophone/comparator/SongTrackNumberComparator.java
index 220e2baa..65b4ede5 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/comparator/SongTrackNumberComparator.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/comparator/SongTrackNumberComparator.java
@@ -5,7 +5,7 @@ import com.kabouzeid.gramophone.model.Song;
import java.util.Comparator;
/**
- * Created by karim on 25.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SongTrackNumberComparator implements Comparator {
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AboutDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AboutDialog.java
new file mode 100644
index 00000000..0cb1c79b
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AboutDialog.java
@@ -0,0 +1,50 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.text.TextUtils;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.kabouzeid.gramophone.R;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
+ */
+public class AboutDialog extends DialogFragment {
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new MaterialDialog.Builder(getActivity())
+ .title(getActivity().getResources().getString(R.string.app_name) + " " + getCurrentVersionName(getActivity()))
+ .iconRes(R.drawable.ic_launcher)
+ .content(TextUtils.concat(getActivity().getResources().getText(R.string.credits_1),
+ getActivity().getResources().getText(R.string.credits_2),
+ getActivity().getResources().getText(R.string.credits_3),
+ getActivity().getResources().getText(R.string.credits_4))
+ )
+ .positiveText(getActivity().getResources().getString(android.R.string.ok))
+ .callback(new MaterialDialog.ButtonCallback() {
+ @Override
+ public void onPositive(MaterialDialog dialog) {
+ super.onPositive(dialog);
+ dialog.dismiss();
+ }
+ })
+ .build();
+ }
+
+ private static String getCurrentVersionName(final Context context) {
+ String versionName;
+ try {
+ versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
+ } catch (PackageManager.NameNotFoundException e) {
+ return "Unknown";
+ }
+ return versionName;
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java
new file mode 100644
index 00000000..3cbf8180
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java
@@ -0,0 +1,65 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.view.View;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.loader.PlaylistLoader;
+import com.kabouzeid.gramophone.model.Playlist;
+import com.kabouzeid.gramophone.model.Song;
+import com.kabouzeid.gramophone.util.PlaylistsUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
+ */
+public class AddToPlaylistDialog extends DialogFragment {
+
+ public static AddToPlaylistDialog create(Song song) {
+ ArrayList list = new ArrayList<>();
+ list.add(song);
+ return create(list);
+ }
+
+ public static AddToPlaylistDialog create(ArrayList songs) {
+ AddToPlaylistDialog dialog = new AddToPlaylistDialog();
+ Bundle args = new Bundle();
+ args.putSerializable("songs", songs);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final List playlists = PlaylistLoader.getAllPlaylists(getActivity());
+ CharSequence[] playlistNames = new CharSequence[playlists.size() + 1];
+ playlistNames[0] = getActivity().getResources().getString(R.string.action_new_playlist);
+ for (int i = 1; i < playlistNames.length; i++) {
+ playlistNames[i] = playlists.get(i - 1).name;
+ }
+ return new MaterialDialog.Builder(getActivity())
+ .items(playlistNames)
+ .itemsCallback(new MaterialDialog.ListCallback() {
+ @Override
+ public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
+ //noinspection unchecked
+ final ArrayList songs = (ArrayList) getArguments().getSerializable("songs");
+ if (i == 0) {
+ materialDialog.dismiss();
+ CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST");
+ } else {
+ materialDialog.dismiss();
+ PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id);
+ }
+ }
+ })
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java
new file mode 100644
index 00000000..9edd21df
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java
@@ -0,0 +1,203 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.RippleDrawable;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.StateListDrawable;
+import android.graphics.drawable.shapes.OvalShape;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.content.res.ResourcesCompat;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.GridView;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.afollestad.materialdialogs.ThemeSingleton;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.views.CircleView;
+
+/**
+ * @author Aidan Follestad (afollestad)
+ */
+public class ColorChooserDialog extends DialogFragment implements View.OnClickListener {
+
+ private ColorCallback mCallback;
+ private int[] mColors;
+ private GridView mGrid;
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mCallback = (ColorCallback) activity;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v.getTag() != null) {
+ final int index = (Integer) v.getTag();
+ getArguments().putInt("preselect", mColors[index]);
+ invalidateGrid();
+ }
+ }
+
+ public interface ColorCallback {
+ void onColorSelection(int title, int color);
+ }
+
+ public ColorChooserDialog() {
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ MaterialDialog dialog = new MaterialDialog.Builder(getActivity())
+ .title(getArguments().getInt("title", 0))
+ .autoDismiss(false)
+ .customView(R.layout.dialog_color_chooser, false)
+ .neutralText(R.string.default_str)
+ .positiveText(R.string.select)
+ .callback(new MaterialDialog.ButtonCallback() {
+ @Override
+ public void onPositive(MaterialDialog dialog) {
+ super.onPositive(dialog);
+ final int title = getArguments().getInt("title", 0);
+ final int preselect = getArguments().getInt("preselect", -1);
+ mCallback.onColorSelection(title, preselect);
+ dismiss();
+ }
+
+ @Override
+ public void onNeutral(MaterialDialog dialog) {
+ super.onNeutral(dialog);
+ if (getArguments().getInt("title", 0) == R.string.primary_color) {
+ getArguments().putInt("preselect", getResources().getColor(R.color.indigo_500));
+ } else if (getArguments().getInt("title", 0) == R.string.accent_color) {
+ getArguments().putInt("preselect", getResources().getColor(R.color.pink_500));
+ }
+ invalidateGrid();
+ }
+ })
+ .build();
+
+ final boolean primary = getArguments().getInt("title", 0) == R.string.primary_color;
+ final TypedArray ta = getActivity().getResources().obtainTypedArray(
+ primary ? R.array.colors_primary : R.array.colors_accent);
+ mColors = new int[ta.length()];
+ for (int i = 0; i < ta.length(); i++)
+ mColors[i] = ta.getColor(i, 0);
+ ta.recycle();
+ mGrid = (GridView) dialog.getCustomView();
+ invalidateGrid();
+ return dialog;
+ }
+
+ private void invalidateGrid() {
+ if (mGrid.getAdapter() == null) {
+ mGrid.setAdapter(new ColorGridAdapter());
+ mGrid.setSelector(ResourcesCompat.getDrawable(getResources(), R.drawable.md_transparent, null));
+ } else ((BaseAdapter) mGrid.getAdapter()).notifyDataSetChanged();
+ }
+
+ private class ColorGridAdapter extends BaseAdapter implements View.OnClickListener {
+
+ public ColorGridAdapter() {
+ }
+
+ @Override
+ public int getCount() {
+ return mColors.length;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mColors[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null)
+ convertView = LayoutInflater.from(getActivity()).inflate(R.layout.griditem_color_chooser, parent, false);
+ final boolean dark = ThemeSingleton.get().darkTheme;
+ CircleView child = (CircleView) convertView;
+ child.setActivated(getArguments().getInt("preselect") == mColors[position]);
+ child.setBackgroundColor(mColors[position]);
+ child.setBorderColor(dark ? Color.WHITE : Color.BLACK);
+ child.setTag(position);
+ child.setOnClickListener(this);
+
+ Drawable selector = createSelector(mColors[position]);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ int[][] states = new int[][]{
+ new int[]{android.R.attr.state_pressed}
+ };
+ int[] colors = new int[]{
+ shiftColorDown(mColors[position])
+ };
+ ColorStateList rippleColors = new ColorStateList(states, colors);
+ child.setForeground(new RippleDrawable(rippleColors, selector, null));
+ } else {
+ child.setForeground(selector);
+ }
+ return convertView;
+ }
+
+ @Override
+ public void onClick(View v) {
+ final int index = (Integer) v.getTag();
+ getArguments().putInt("preselect", mColors[index]);
+ invalidateGrid();
+ }
+ }
+
+ public static int shiftColorDown(int color) {
+ float[] hsv = new float[3];
+ Color.colorToHSV(color, hsv);
+ hsv[2] *= 0.9f; // value component
+ return Color.HSVToColor(hsv);
+ }
+
+ public static int shiftColorUp(int color) {
+ float[] hsv = new float[3];
+ Color.colorToHSV(color, hsv);
+ hsv[2] *= 1.1f; // value component
+ return Color.HSVToColor(hsv);
+ }
+
+ private static int translucentColor(int color) {
+ final float factor = 0.7f;
+ int alpha = Math.round(Color.alpha(color) * factor);
+ int red = Color.red(color);
+ int green = Color.green(color);
+ int blue = Color.blue(color);
+ return Color.argb(alpha, red, green, blue);
+ }
+
+ private static Drawable createSelector(int color) {
+ ShapeDrawable darkerCircle = new ShapeDrawable(new OvalShape());
+ darkerCircle.getPaint().setColor(translucentColor(shiftColorDown(color)));
+ StateListDrawable stateListDrawable = new StateListDrawable();
+ stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, darkerCircle);
+ return stateListDrawable;
+ }
+
+ public void show(Activity context, int title, int preselect) {
+ Bundle args = new Bundle();
+ args.putInt("preselect", preselect);
+ args.putInt("title", title);
+ setArguments(args);
+ show(context.getFragmentManager(), "COLOR_SELECTOR");
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java
new file mode 100644
index 00000000..aebac7bc
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java
@@ -0,0 +1,62 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.model.Song;
+import com.kabouzeid.gramophone.util.PlaylistsUtil;
+
+import java.util.ArrayList;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
+ */
+public class CreatePlaylistDialog extends DialogFragment {
+
+ public static CreatePlaylistDialog create() {
+ return create((Song) null);
+ }
+
+ public static CreatePlaylistDialog create(Song song) {
+ ArrayList list = new ArrayList<>();
+ if (song != null)
+ list.add(song);
+ return create(list);
+ }
+
+ public static CreatePlaylistDialog create(ArrayList songs) {
+ CreatePlaylistDialog dialog = new CreatePlaylistDialog();
+ Bundle args = new Bundle();
+ args.putSerializable("songs", songs);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new MaterialDialog.Builder(getActivity())
+ .title(R.string.action_new_playlist)
+ .positiveText(android.R.string.ok)
+ .negativeText(android.R.string.cancel)
+ .input(null, null, new MaterialDialog.InputCallback() {
+ @Override
+ public void onInput(MaterialDialog materialDialog, CharSequence charSequence) {
+ if (getActivity() == null)
+ return;
+ if (!charSequence.toString().trim().equals("")) {
+ final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), charSequence.toString());
+ if (playlistId != -1 && getActivity() != null) {
+ //noinspection unchecked
+ ArrayList songs = (ArrayList) getArguments().getSerializable("songs");
+ PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId);
+ }
+ }
+ }
+ }).build();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java
new file mode 100644
index 00000000..aef080b3
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java
@@ -0,0 +1,49 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.util.PlaylistsUtil;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
+ */
+public class DeletePlaylistDialog extends DialogFragment {
+
+ public static DeletePlaylistDialog create(long playlistId) {
+ DeletePlaylistDialog dialog = new DeletePlaylistDialog();
+ Bundle args = new Bundle();
+ args.putLong("playlist_id", playlistId);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ long playlistId = getArguments().getLong("playlist_id");
+ return new MaterialDialog.Builder(getActivity())
+ .title(getActivity().getResources().getString(R.string.delete_playlist) +
+ PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId))
+ .positiveText(getActivity().getResources().getString(android.R.string.ok))
+ .negativeText(getActivity().getResources().getString(android.R.string.cancel))
+ .callback(new MaterialDialog.ButtonCallback() {
+ @Override
+ public void onPositive(MaterialDialog dialog) {
+ super.onPositive(dialog);
+ if (getActivity() == null)
+ return;
+ long playlistId = getArguments().getLong("playlist_id");
+ PlaylistsUtil.deletePlaylist(getActivity(), playlistId);
+ }
+
+ @Override
+ public void onNegative(MaterialDialog dialog) {
+ super.onNegative(dialog);
+ dialog.dismiss();
+ }
+ }).build();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java
new file mode 100644
index 00000000..cc3364d0
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java
@@ -0,0 +1,78 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v7.app.ActionBarActivity;
+import android.view.View;
+import android.widget.AdapterView;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.adapter.PlayingQueueAdapter;
+import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
+import com.kabouzeid.gramophone.model.Song;
+import com.mobeta.android.dslv.DragSortListView;
+
+import java.util.ArrayList;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
+ */
+public class PlayingQueueDialog extends DialogFragment {
+
+ public static PlayingQueueDialog create() {
+ final ArrayList playingQueue = MusicPlayerRemote.getPlayingQueue();
+ if (playingQueue.isEmpty())
+ return null;
+ PlayingQueueDialog dialog = new PlayingQueueDialog();
+ Bundle args = new Bundle();
+ args.putSerializable("queue", playingQueue);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ MaterialDialog dialog = new MaterialDialog.Builder(getActivity())
+ .title(getActivity().getResources().getString(R.string.label_current_playing_queue))
+ .customView(R.layout.dialog_playlist, false)
+ .positiveText(getActivity().getResources().getString(R.string.save_as_playlist))
+ .callback(new MaterialDialog.ButtonCallback() {
+ @Override
+ public void onPositive(MaterialDialog dialog) {
+ super.onPositive(dialog);
+ if (getActivity() == null)
+ return;
+ //noinspection unchecked
+ ArrayList playingQueue = (ArrayList) getArguments().getSerializable("queue");
+ AddToPlaylistDialog.create(playingQueue).show(getActivity().getSupportFragmentManager(), "ADD_PLAYLIST");
+ }
+ })
+ .build();
+
+ //noinspection unchecked
+ final ArrayList playingQueue = (ArrayList) getArguments().getSerializable("queue");
+ final DragSortListView dragSortListView = (DragSortListView) dialog.getCustomView().findViewById(R.id.dragSortListView);
+ final PlayingQueueAdapter playingQueueAdapter =
+ new PlayingQueueAdapter((ActionBarActivity) getActivity(), playingQueue);
+ dragSortListView.setAdapter(playingQueueAdapter);
+ dragSortListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ MusicPlayerRemote.playSongAt(position);
+ playingQueueAdapter.notifyDataSetChanged();
+ }
+ });
+ dragSortListView.setDropListener(new DragSortListView.DropListener() {
+ @Override
+ public void drop(int from, int to) {
+ MusicPlayerRemote.moveSong(from, to);
+ playingQueueAdapter.notifyDataSetChanged();
+ }
+ });
+ return dialog;
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java
new file mode 100644
index 00000000..5f1b2c0f
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java
@@ -0,0 +1,44 @@
+package com.kabouzeid.gramophone.dialogs;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.util.PlaylistsUtil;
+
+/**
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
+ */
+public class RenamePlaylistDialog extends DialogFragment {
+
+ public static RenamePlaylistDialog create(long playlistId) {
+ RenamePlaylistDialog dialog = new RenamePlaylistDialog();
+ Bundle args = new Bundle();
+ args.putLong("playlist_id", playlistId);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ long playlistId = getArguments().getLong("playlist_id");
+ return new MaterialDialog.Builder(getActivity())
+ .title(R.string.rename_playlist)
+ .positiveText(android.R.string.ok)
+ .negativeText(android.R.string.cancel)
+ .input(null, PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), new MaterialDialog.InputCallback() {
+ @Override
+ public void onInput(MaterialDialog materialDialog, CharSequence charSequence) {
+ if (!charSequence.toString().trim().equals("")) {
+ long playlistId = getArguments().getLong("playlist_id");
+ PlaylistsUtil.renamePlaylist(getActivity(), playlistId, charSequence.toString());
+ }
+ }
+ })
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/SongDetailDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java
similarity index 81%
rename from app/src/main/java/com/kabouzeid/gramophone/helper/SongDetailDialogHelper.java
rename to app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java
index fcffb921..de7dd4e3 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/SongDetailDialogHelper.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java
@@ -1,6 +1,11 @@
-package com.kabouzeid.gramophone.helper;
+package com.kabouzeid.gramophone.dialogs;
+import android.app.Activity;
+import android.app.Dialog;
import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
import android.text.Html;
import android.text.Spanned;
import android.util.Log;
@@ -24,16 +29,30 @@ import java.io.File;
import java.io.IOException;
/**
- * Created by karim on 19.01.15.
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
-public class SongDetailDialogHelper {
- public static final String TAG = SongDetailDialogHelper.class.getSimpleName();
+public class SongDetailDialog extends DialogFragment {
+
+ public static final String TAG = SongDetailDialog.class.getSimpleName();
+
+ public static SongDetailDialog create(File songFile) {
+ SongDetailDialog dialog = new SongDetailDialog();
+ Bundle args = new Bundle();
+ args.putSerializable("song_file", songFile);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final Activity context = getActivity();
+ final File songFile = (File) getArguments().getSerializable("song_file");
- public static MaterialDialog getDialog(final Context context, final File songFile) {
MaterialDialog dialog = new MaterialDialog.Builder(context)
.customView(R.layout.dialog_file_details, true)
.title(context.getResources().getString(R.string.label_details))
- .positiveText(context.getResources().getString(R.string.ok))
+ .positiveText(android.R.string.ok)
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/AboutDeveloperDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/AboutDeveloperDialogHelper.java
deleted file mode 100644
index 7a5fcf65..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/AboutDeveloperDialogHelper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.kabouzeid.gramophone.helper;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.kabouzeid.gramophone.R;
-
-/**
- * Created by karim on 05.02.15.
- */
-public class AboutDeveloperDialogHelper {
- public static final String TAG = AboutDeveloperDialogHelper.class.getSimpleName();
-
- public static MaterialDialog getDialog(final Context context) {
- MaterialDialog dialog = new MaterialDialog.Builder(context)
- .title(context.getResources().getString(R.string.app_name) + " " + getCurrentVersionName(context))
- .iconRes(R.drawable.ic_launcher)
- .content(TextUtils.concat(context.getResources().getText(R.string.credits_1),
- context.getResources().getText(R.string.credits_2),
- context.getResources().getText(R.string.credits_3),
- context.getResources().getText(R.string.credits_4))
- )
- .positiveText(context.getResources().getString(R.string.ok))
- .callback(new MaterialDialog.ButtonCallback() {
- @Override
- public void onPositive(MaterialDialog dialog) {
- super.onPositive(dialog);
- dialog.dismiss();
- }
- })
- .build();
- return dialog;
- }
-
- private static String getCurrentVersionName(final Context context) {
- String versionName = "";
- try {
- versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Unable to get current app version number.", e);
- }
- return versionName;
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/AddToPlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/AddToPlaylistDialogHelper.java
deleted file mode 100644
index 4be6588b..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/AddToPlaylistDialogHelper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.kabouzeid.gramophone.helper;
-
-import android.content.Context;
-import android.view.View;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.loader.PlaylistLoader;
-import com.kabouzeid.gramophone.model.Playlist;
-import com.kabouzeid.gramophone.model.Song;
-import com.kabouzeid.gramophone.util.PlaylistsUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by karim on 17.03.15.
- */
-public class AddToPlaylistDialogHelper {
- public static MaterialDialog getDialog(final Context context, final Song song) {
- List tmpSong = new ArrayList<>();
- tmpSong.add(song);
- return getDialog(context, tmpSong);
- }
-
- public static MaterialDialog getDialog(final Context context, final List songs) {
- final List playlists = PlaylistLoader.getAllPlaylists(context);
- CharSequence[] playlistNames = new CharSequence[playlists.size() + 1];
- playlistNames[0] = context.getResources().getString(R.string.action_new_playlist);
- for (int i = 1; i < playlistNames.length; i++) {
- playlistNames[i] = playlists.get(i - 1).name;
- }
- return new MaterialDialog.Builder(context)
- .items(playlistNames)
- .itemsCallback(new MaterialDialog.ListCallback() {
- @Override
- public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
- if (i == 0) {
- materialDialog.dismiss();
- CreatePlaylistDialogHelper.getDialog(context, songs).show();
- } else {
- materialDialog.dismiss();
- PlaylistsUtil.addToPlaylist(context, songs, playlists.get(i - 1).id);
- }
- }
- })
- .build();
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java
deleted file mode 100644
index 9d5d6189..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/CreatePlaylistDialogHelper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.kabouzeid.gramophone.helper;
-
-import android.content.Context;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.model.Song;
-import com.kabouzeid.gramophone.util.PlaylistsUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by karim on 17.03.15.
- */
-public class CreatePlaylistDialogHelper {
- public static MaterialDialog getDialog(final Context context, final Song song) {
- List tmpSong = new ArrayList<>();
- tmpSong.add(song);
- return getDialog(context, tmpSong);
- }
-
- public static MaterialDialog getDialog(final Context context, final List songs) {
- return new MaterialDialog.Builder(context)
- .title(R.string.action_new_playlist)
- .positiveText(R.string.ok)
- .negativeText(R.string.cancel)
- .input("", "", new MaterialDialog.InputCallback() {
- @Override
- public void onInput(MaterialDialog materialDialog, CharSequence charSequence) {
- if (!charSequence.toString().trim().equals("")) {
- final int playlistId = PlaylistsUtil.createPlaylist(context, charSequence.toString());
- if (playlistId != -1 && songs != null) {
- PlaylistsUtil.addToPlaylist(context, songs, playlistId);
- }
- }
- }
- })
- .build();
- }
-
- public static MaterialDialog getDialog(final Context context) {
- return getDialog(context, (List) null);
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java
deleted file mode 100644
index d6f5bb44..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/DeletePlaylistDialogHelper.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.kabouzeid.gramophone.helper;
-
-import android.content.Context;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.util.PlaylistsUtil;
-
-/**
- * Created by karim on 19.03.15.
- */
-public class DeletePlaylistDialogHelper {
- public static MaterialDialog getDialog(final Context context, final int playlistId) {
- return new MaterialDialog.Builder(context)
- .title(context.getResources().getString(R.string.delete_playlist) + PlaylistsUtil.getNameForPlaylist(context, playlistId))
- .positiveText(context.getResources().getString(R.string.ok))
- .negativeText(context.getResources().getString(R.string.cancel))
- .callback(new MaterialDialog.ButtonCallback() {
- @Override
- public void onPositive(MaterialDialog dialog) {
- super.onPositive(dialog);
- dialog.dismiss();
- PlaylistsUtil.deletePlaylist(context, playlistId);
- }
-
- @Override
- public void onNegative(MaterialDialog dialog) {
- super.onNegative(dialog);
- dialog.dismiss();
- }
- }).build();
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/DeleteSongsDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/DeleteSongsDialogHelper.java
index 7a2bea98..753ce9af 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/DeleteSongsDialogHelper.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/DeleteSongsDialogHelper.java
@@ -11,9 +11,10 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 23.03.15.
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class DeleteSongsDialogHelper {
+
public static MaterialDialog getDialog(final Context context, final Song song) {
List tmpList = new ArrayList<>();
tmpList.add(song);
@@ -27,7 +28,7 @@ public class DeleteSongsDialogHelper {
.title(title)
.content(context.getResources().getString(R.string.delete_warning))
.positiveText(context.getResources().getString(R.string.delete))
- .negativeText(context.getResources().getString(R.string.cancel))
+ .negativeText(context.getResources().getString(android.R.string.cancel))
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java
index bc266a4f..0bb8b966 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java
@@ -1,11 +1,15 @@
package com.kabouzeid.gramophone.helper;
-import android.app.Activity;
import android.content.Intent;
import android.support.v4.util.Pair;
+import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
+import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
+import com.kabouzeid.gramophone.dialogs.RenamePlaylistDialog;
+import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.Playlist;
@@ -17,16 +21,17 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
import java.io.File;
/**
- * Created by karim on 11.04.15.
+ * @author Karim Abou Zeid (kabouzeid), Aidan Follestad (afollestad)
*/
public class MenuItemClickHelper {
- public static boolean handleSongMenuClick(Activity activity, Song song, MenuItem item){
+
+ public static boolean handleSongMenuClick(ActionBarActivity activity, Song song, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete_from_disk:
DeleteSongsDialogHelper.getDialog(activity, song).show();
return true;
case R.id.action_add_to_playlist:
- AddToPlaylistDialogHelper.getDialog(activity, song).show();
+ AddToPlaylistDialog.create(song).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST");
return true;
case R.id.action_play_next:
MusicPlayerRemote.playNext(song);
@@ -42,31 +47,31 @@ public class MenuItemClickHelper {
case R.id.action_details:
String songFilePath = SongFilePathLoader.getSongFilePath(activity, song.id);
File songFile = new File(songFilePath);
- SongDetailDialogHelper.getDialog(activity, songFile).show();
+ SongDetailDialog.create(songFile).show(activity.getSupportFragmentManager(), "SONG_DETAILS");
return true;
case R.id.action_go_to_album:
Pair[] albumPairs = null;
if (activity instanceof AbsFabActivity)
- albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
+ albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
NavigationUtil.goToAlbum(activity, song.albumId, albumPairs);
return true;
case R.id.action_go_to_artist:
Pair[] artistPairs = null;
if (activity instanceof AbsFabActivity)
- artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
+ artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(null);
NavigationUtil.goToArtist(activity, song.artistId, artistPairs);
return true;
}
return false;
}
- public static boolean handlePlaylistMenuClick(Activity activity, Playlist playlist, MenuItem item){
+ public static boolean handlePlaylistMenuClick(ActionBarActivity activity, Playlist playlist, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_rename_playlist:
- RenamePlaylistDialogHelper.getDialog(activity, playlist.id).show();
+ RenamePlaylistDialog.create(playlist.id).show(activity.getSupportFragmentManager(), "RENAME_PLAYLIST");
return true;
case R.id.action_delete_playlist:
- DeletePlaylistDialogHelper.getDialog(activity, playlist.id).show();
+ DeletePlaylistDialog.create(playlist.id).show(activity.getSupportFragmentManager(), "DELETE_PLAYLIST");
return true;
}
return false;
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 0285a113..ce057c49 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java
@@ -20,27 +20,26 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.service.MusicService;
import com.kabouzeid.gramophone.util.InternalStorageUtil;
-import java.io.IOException;
import java.util.ArrayList;
-import java.util.List;
import java.util.Random;
/**
- * Created by karim on 29.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class MusicPlayerRemote {
+
private static final String TAG = MusicPlayerRemote.class.getSimpleName();
private static int position = -1;
- private static List playingQueue;
- private static List restoredOriginalQueue;
+ private static ArrayList playingQueue;
+ private static ArrayList restoredOriginalQueue;
private static Context context;
private static MusicService musicService;
private static Intent musicServiceIntent;
- private static ServiceConnection musicConnection = new ServiceConnection() {
+ private static final ServiceConnection musicConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MusicService.MusicBinder binder = (MusicService.MusicBinder) service;
@@ -72,11 +71,10 @@ public class MusicPlayerRemote {
}
}
- public static boolean playSongAt(final int position) {
+ public static void playSongAt(final int position) {
if (musicService != null) {
musicService.playSongAt(position);
}
- return false;
}
public static void pauseSong() {
@@ -104,10 +102,7 @@ public class MusicPlayerRemote {
}
public static boolean isPlaying() {
- if (musicService != null) {
- return musicService.isPlaying();
- }
- return false;
+ return musicService != null && musicService.isPlaying();
}
public static void resumePlaying() {
@@ -127,7 +122,7 @@ public class MusicPlayerRemote {
}
}
- public static void openQueue(final List playingQueue, final int startPosition, final boolean startPlaying) {
+ public static void openQueue(final ArrayList playingQueue, final int startPosition, final boolean startPlaying) {
MusicPlayerRemote.playingQueue = playingQueue;
if (musicService != null) {
musicService.openQueue(MusicPlayerRemote.playingQueue, startPosition, startPlaying);
@@ -159,7 +154,7 @@ public class MusicPlayerRemote {
}
}
- public static List getPlayingQueue() {
+ public static ArrayList getPlayingQueue() {
if (musicService != null) {
playingQueue = musicService.getPlayingQueue();
}
@@ -174,10 +169,7 @@ public class MusicPlayerRemote {
}
public static boolean isPlayerPrepared() {
- if (musicService != null) {
- return musicService.isPlayerPrepared();
- }
- return false;
+ return musicService != null && musicService.isPlayerPrepared();
}
public static int getSongDurationMillis() {
@@ -207,20 +199,16 @@ public class MusicPlayerRemote {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(AppKeys.SP_SHUFFLE_MODE, 0);
}
- public static boolean cycleRepeatMode() {
+ public static void cycleRepeatMode() {
if (musicService != null) {
musicService.cycleRepeatMode();
- return true;
}
- return false;
}
- public static boolean toggleShuffleMode() {
+ public static void toggleShuffleMode() {
if (musicService != null) {
musicService.toggleShuffle();
- return true;
}
- return false;
}
public static boolean setShuffleMode(final int shuffleMode) {
@@ -242,7 +230,7 @@ public class MusicPlayerRemote {
}
public static void shuffleAllSongs(final Context context) {
- List songs = SongLoader.getAllSongs(context);
+ ArrayList songs = SongLoader.getAllSongs(context);
MusicPlayerRemote.openQueue(songs, new Random().nextInt(songs.size()), true);
forceSetShuffleMode(context, MusicService.SHUFFLE_MODE_SHUFFLE);
}
@@ -294,8 +282,8 @@ public class MusicPlayerRemote {
@SuppressWarnings("unchecked")
public static void restorePreviousState() {
try {
- List restoredQueue = (ArrayList) InternalStorageUtil.readObject(context, AppKeys.IS_PLAYING_QUEUE);
- List restoredOriginalQueue = (ArrayList) InternalStorageUtil.readObject(context, AppKeys.IS_ORIGINAL_PLAYING_QUEUE);
+ ArrayList restoredQueue = (ArrayList) InternalStorageUtil.readObject(context, AppKeys.IS_PLAYING_QUEUE);
+ ArrayList restoredOriginalQueue = (ArrayList) InternalStorageUtil.readObject(context, AppKeys.IS_ORIGINAL_PLAYING_QUEUE);
int restoredPosition = (int) InternalStorageUtil.readObject(context, AppKeys.IS_POSITION_IN_QUEUE);
if (musicService != null) {
@@ -307,7 +295,7 @@ public class MusicPlayerRemote {
position = restoredPosition;
postToBus(MusicRemoteEvent.STATE_RESTORED);
- } catch (IOException | ClassNotFoundException | ClassCastException e) {
+ } catch (Exception e) {
Log.e(TAG, "error while restoring music service state", e);
playingQueue = new ArrayList<>();
position = -1;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java
index ab2dc5d1..95c4d7f7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.helper;
/**
- * Created by karim on 27.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
import android.app.Notification;
@@ -22,6 +22,7 @@ import com.kabouzeid.gramophone.util.MusicUtil;
import com.squareup.picasso.Picasso;
public class PlayingNotificationHelper {
+
public static final String TAG = PlayingNotificationHelper.class.getSimpleName();
public static final int NOTIFICATION_ID = 1337;
@@ -163,8 +164,6 @@ public class PlayingNotificationHelper {
notificationManager.notify(NOTIFICATION_ID, notification);
}
- ;
-
public void killNotification() {
service.stopForeground(true);
notification = null;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingQueueDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingQueueDialogHelper.java
deleted file mode 100644
index 4110a133..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingQueueDialogHelper.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.kabouzeid.gramophone.helper;
-
-import android.app.Activity;
-import android.view.View;
-import android.widget.AdapterView;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.adapter.PlayingQueueAdapter;
-import com.kabouzeid.gramophone.model.Song;
-import com.mobeta.android.dslv.DragSortListView;
-
-import java.util.List;
-
-/**
- * Created by karim on 24.01.15.
- */
-public class PlayingQueueDialogHelper {
- public static MaterialDialog getDialog(final Activity activity) {
- final List playingQueue = MusicPlayerRemote.getPlayingQueue();
- if (playingQueue.isEmpty()) {
- return null;
- }
-
- MaterialDialog dialog = new MaterialDialog.Builder(activity)
- .title(activity.getResources().getString(R.string.label_current_playing_queue))
- .customView(R.layout.dialog_playlist, false)
- .positiveText(activity.getResources().getString(R.string.save_as_playlist))
- .callback(new MaterialDialog.ButtonCallback() {
- @Override
- public void onPositive(MaterialDialog dialog) {
- super.onPositive(dialog);
- dialog.dismiss();
- AddToPlaylistDialogHelper.getDialog(activity, playingQueue).show();
- }
- })
- .build();
- final DragSortListView dragSortListView = (DragSortListView) dialog.getCustomView().findViewById(R.id.dragSortListView);
- final PlayingQueueAdapter playingQueueAdapter = new PlayingQueueAdapter(activity, playingQueue);
- dragSortListView.setAdapter(playingQueueAdapter);
- dragSortListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- MusicPlayerRemote.playSongAt(position);
- playingQueueAdapter.notifyDataSetChanged();
- }
- });
- dragSortListView.setDropListener(new DragSortListView.DropListener() {
- @Override
- public void drop(int from, int to) {
- MusicPlayerRemote.moveSong(from, to);
- playingQueueAdapter.notifyDataSetChanged();
- }
- });
- return dialog;
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java
deleted file mode 100644
index 71a122f5..00000000
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/RenamePlaylistDialogHelper.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.kabouzeid.gramophone.helper;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.util.PlaylistsUtil;
-
-/**
- * Created by karim on 19.03.15.
- */
-public class RenamePlaylistDialogHelper {
- public static MaterialDialog getDialog(final Context context, final int playlistId) {
- return new MaterialDialog.Builder(context)
- .title(R.string.rename_playlist)
- .positiveText(R.string.ok)
- .negativeText(R.string.cancel)
- .input("", PlaylistsUtil.getNameForPlaylist(context, playlistId), new MaterialDialog.InputCallback() {
- @Override
- public void onInput(MaterialDialog materialDialog, CharSequence charSequence) {
- if (!charSequence.toString().trim().equals("")) {
- PlaylistsUtil.renamePlaylist(context, playlistId, charSequence.toString());
- }
- }
- })
- .build();
- }
-}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java
index 865aaf98..28c92180 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java
@@ -6,9 +6,10 @@ import java.util.Collections;
import java.util.List;
/**
- * Created by karim on 24.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ShuffleHelper {
+
public static void makeShuffleList(List listToShuffle, final int current) {
if (current >= 0) {
Song song = listToShuffle.remove(current);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java b/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java
index c8e795b4..ef585ac2 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/interfaces/KabViewsDisableAble.java
@@ -1,12 +1,13 @@
package com.kabouzeid.gramophone.interfaces;
/**
- * Created by karim on 23.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public interface KabViewsDisableAble {
- public void enableViews();
- public void disableViews();
+ void enableViews();
- public boolean areViewsEnabled();
+ void disableViews();
+
+ boolean areViewsEnabled();
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/LastFMUtil.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/LastFMUtil.java
index d829b4a3..ace2b1ac 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/LastFMUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/LastFMUtil.java
@@ -1,9 +1,9 @@
package com.kabouzeid.gramophone.lastfm;
/**
- * Created by karim on 15.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMUtil {
- public static String BASE_URL = "ws.audioscrobbler.com";
- public static String API_KEY = "bd9c6ea4d55ec9ed3af7d276e5ece304";
+ public static final String BASE_URL = "ws.audioscrobbler.com";
+ public static final String API_KEY = "bd9c6ea4d55ec9ed3af7d276e5ece304";
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumImageUrlLoader.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumImageUrlLoader.java
index 8c576a3f..a2c01428 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumImageUrlLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumImageUrlLoader.java
@@ -11,7 +11,7 @@ import org.json.JSONException;
import org.json.JSONObject;
/**
- * Created by karim on 01.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMAlbumImageUrlLoader {
public static final String TAG = LastFMAlbumImageUrlLoader.class.getSimpleName();
@@ -50,9 +50,9 @@ public class LastFMAlbumImageUrlLoader {
}
}
- public static interface AlbumImageUrlLoaderCallback {
- public void onAlbumImageUrlLoaded(String url);
+ public interface AlbumImageUrlLoaderCallback {
+ void onAlbumImageUrlLoaded(String url);
- public void onError();
+ void onError();
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumInfoUtil.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumInfoUtil.java
index a21b6ecd..32a05d33 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumInfoUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/album/LastFMAlbumInfoUtil.java
@@ -16,12 +16,12 @@ import org.json.JSONException;
import org.json.JSONObject;
/**
- * Created by karim on 24.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMAlbumInfoUtil {
public static final String TAG = LastFMAlbumInfoUtil.class.getSimpleName();
- private static String AUTO_CORRECT = "1";
+ private static final String AUTO_CORRECT = "1";
public static String getAlbumUrl(String album, String artist) {
if (album != null) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistBiographyLoader.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistBiographyLoader.java
index a77c0ecf..c8f60f3d 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistBiographyLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistBiographyLoader.java
@@ -13,7 +13,7 @@ import org.json.JSONException;
import org.json.JSONObject;
/**
- * Created by karim on 01.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMArtistBiographyLoader {
public static final String TAG = LastFMArtistBiographyLoader.class.getSimpleName();
@@ -55,7 +55,7 @@ public class LastFMArtistBiographyLoader {
app.addToVolleyRequestQueue(artistInfoJSONRequest);
}
- public static interface ArtistBioLoaderCallback {
- public void onArtistBioLoaded(String bio);
+ public interface ArtistBioLoaderCallback {
+ void onArtistBioLoaded(String bio);
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistImageUrlLoader.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistImageUrlLoader.java
index ff0ce65d..924f5115 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistImageUrlLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistImageUrlLoader.java
@@ -10,7 +10,7 @@ import org.json.JSONException;
import org.json.JSONObject;
/**
- * Created by karim on 01.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMArtistImageUrlLoader {
public static final String TAG = LastFMArtistImageUrlLoader.class.getSimpleName();
@@ -42,7 +42,7 @@ public class LastFMArtistImageUrlLoader {
}
}
- public static interface ArtistImageUrlLoaderCallback {
- public void onArtistImageUrlLoaded(String url);
+ public interface ArtistImageUrlLoaderCallback {
+ void onArtistImageUrlLoaded(String url);
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistInfoUtil.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistInfoUtil.java
index 70d57e40..0feee8f4 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistInfoUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistInfoUtil.java
@@ -16,12 +16,13 @@ import org.json.JSONException;
import org.json.JSONObject;
/**
- * Created by karim on 24.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMArtistInfoUtil {
- public static final String TAG = LastFMArtistInfoUtil.class.getSimpleName();
- private static String AUTO_CORRECT = "1";
+ public static final String TAG = LastFMArtistInfoUtil.class.getSimpleName();
+ @SuppressWarnings("FieldCanBeLocal")
+ private static final String AUTO_CORRECT = "1";
public static String getArtistUrl(String artist) {
if (artist != null) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistThumbnailUrlLoader.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistThumbnailUrlLoader.java
index bd08254c..94c201ec 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistThumbnailUrlLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/artist/LastFMArtistThumbnailUrlLoader.java
@@ -10,7 +10,7 @@ import org.json.JSONException;
import org.json.JSONObject;
/**
- * Created by karim on 01.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class LastFMArtistThumbnailUrlLoader {
public static final String TAG = LastFMArtistThumbnailUrlLoader.class.getSimpleName();
@@ -42,7 +42,7 @@ public class LastFMArtistThumbnailUrlLoader {
}
}
- public static interface ArtistThumbnailUrlLoaderCallback {
- public void onArtistThumbnailUrlLoaded(String url);
+ public interface ArtistThumbnailUrlLoaderCallback {
+ void onArtistThumbnailUrlLoaded(String url);
}
}
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 19106031..c187cce7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java
@@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumLoader {
@@ -39,11 +39,11 @@ public class AlbumLoader {
return albums;
}
- public static final Cursor makeAlbumCursor(final Context context) {
+ public static Cursor makeAlbumCursor(final Context context) {
return makeAlbumCursor(context, null, null);
}
- public static final Cursor makeAlbumCursor(final Context context, final String selection, final String[] values) {
+ public static Cursor makeAlbumCursor(final Context context, final String selection, final String[] values) {
return context.getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
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 2e97ce35..be50d7d8 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java
@@ -11,22 +11,21 @@ import com.kabouzeid.gramophone.util.PreferenceUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
-import java.util.List;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumSongLoader {
- public static List getAlbumSongList(final Context context, final int albumId, Comparator comparator) {
- List songs = getAlbumSongList(context, albumId);
+ public static ArrayList getAlbumSongList(final Context context, final int albumId, Comparator comparator) {
+ ArrayList songs = getAlbumSongList(context, albumId);
Collections.sort(songs, comparator);
return songs;
}
- public static List getAlbumSongList(final Context context, final int albumId) {
+ public static ArrayList getAlbumSongList(final Context context, final int albumId) {
Cursor cursor = makeAlbumSongCursor(context, albumId);
- List songs = new ArrayList<>();
+ ArrayList songs = new ArrayList<>();
if (cursor != null && cursor.moveToFirst()) {
do {
final int id = cursor.getInt(0);
@@ -48,11 +47,7 @@ public class AlbumSongLoader {
return songs;
}
- public static final Cursor makeAlbumSongCursor(final Context context, final int albumId) {
- final StringBuilder selection = new StringBuilder();
- selection.append(MediaStore.Audio.AudioColumns.IS_MUSIC + "=1");
- selection.append(" AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''");
- selection.append(" AND " + MediaStore.Audio.AudioColumns.ALBUM_ID + "=" + albumId);
+ public static Cursor makeAlbumSongCursor(final Context context, final int albumId) {
return context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
@@ -69,6 +64,9 @@ public class AlbumSongLoader {
MediaStore.Audio.AudioColumns.TRACK,
/* 6 */
MediaStore.Audio.AudioColumns.ARTIST_ID
- }, selection.toString(), null, PreferenceUtils.getInstance(context).getAlbumSongSortOrder());
+ }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " +
+ MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " +
+ MediaStore.Audio.AudioColumns.ALBUM_ID + "=" + albumId, 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 15251046..7c729321 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java
@@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 04.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistAlbumLoader {
public static List getArtistAlbumList(final Context context, final int artistId) {
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 d2354f4f..29a2eb9e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java
@@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistLoader {
@@ -37,11 +37,11 @@ public class ArtistLoader {
return artists;
}
- public static final Cursor makeArtistCursor(final Context context) {
+ public static Cursor makeArtistCursor(final Context context) {
return makeArtistCursor(context, null, null);
}
- public static final Cursor makeArtistCursor(final Context context, final String selection, final String[] values) {
+ public static Cursor makeArtistCursor(final Context context, final String selection, final String[] values) {
return context.getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
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 c35158a7..f410c5e5 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java
@@ -9,15 +9,15 @@ import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import java.util.ArrayList;
-import java.util.List;
/**
- * Created by karim on 01.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistSongLoader {
- public static List getArtistSongList(final Context context, final int artistId) {
+
+ public static ArrayList getArtistSongList(final Context context, final int artistId) {
Cursor cursor = makeArtistSongCursor(context, artistId);
- List songs = new ArrayList<>();
+ ArrayList songs = new ArrayList<>();
if (cursor != null && cursor.moveToFirst()) {
do {
final int id = cursor.getInt(0);
@@ -40,10 +40,6 @@ public class ArtistSongLoader {
}
public static Cursor makeArtistSongCursor(final Context context, final int artistId) {
- final StringBuilder selection = new StringBuilder();
- selection.append(MediaStore.Audio.AudioColumns.IS_MUSIC + "=1");
- selection.append(" AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''");
- selection.append(" AND " + MediaStore.Audio.AudioColumns.ARTIST_ID + "=" + artistId);
return context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
@@ -60,6 +56,9 @@ public class ArtistSongLoader {
MediaStore.Audio.AudioColumns.TRACK,
/* 6 */
MediaStore.Audio.AudioColumns.ALBUM_ID
- }, selection.toString(), null, PreferenceUtils.getInstance(context).getArtistSongSortOrder());
+ }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " +
+ MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " +
+ MediaStore.Audio.AudioColumns.ARTIST_ID + "=" + artistId, null,
+ PreferenceUtils.getInstance(context).getArtistSongSortOrder());
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java
index 33b13f79..5b201d99 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java
@@ -8,12 +8,11 @@ import android.provider.MediaStore.Audio.AudioColumns;
import com.kabouzeid.gramophone.model.PlaylistSong;
import java.util.ArrayList;
-import java.util.List;
public class PlaylistSongLoader {
- public static List getPlaylistSongList(final Context context, final int playlistID) {
- List songs = new ArrayList<>();
+ public static ArrayList getPlaylistSongList(final Context context, final int playlistID) {
+ ArrayList songs = new ArrayList<>();
Cursor cursor = makePlaylistSongCursor(context, playlistID);
if (cursor != null && cursor.moveToFirst()) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongFilePathLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongFilePathLoader.java
index 5952c654..6d15fc56 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongFilePathLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongFilePathLoader.java
@@ -9,7 +9,7 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 11.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SongFilePathLoader {
public static final String TAG = SongFilePathLoader.class.getSimpleName();
@@ -46,11 +46,11 @@ public class SongFilePathLoader {
}
}
- public static final Cursor makeSongFilePathCursor(final Context context) {
+ public static Cursor makeSongFilePathCursor(final Context context) {
return makeSongFilePathCursor(context, null);
}
- public static final Cursor makeSongFilePathCursor(final Context context, String selection) {
+ public static Cursor makeSongFilePathCursor(final Context context, String selection) {
return context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
/* 0 */
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 01f809ad..9d48599a 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java
@@ -12,14 +12,14 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
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) {
+ public static ArrayList getAllSongs(Context context) {
Cursor cursor = makeSongCursor(context);
- List songs = new ArrayList<>();
+ ArrayList songs = new ArrayList<>();
if (cursor != null && cursor.moveToFirst()) {
do {
final int id = cursor.getInt(0);
@@ -48,7 +48,7 @@ public class SongLoader {
public static Cursor makeSongCursor(final Context context, final String selection, final String[] values) {
String finalSelection = BASE_SELECTION;
- if(selection != null){
+ if (selection != null) {
finalSelection += " AND " + selection;
}
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 ec3a2053..31324b7e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/AppKeys.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/AppKeys.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.misc;
/**
- * Created by karim on 22.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public final class AppKeys {
public static final String CL_CURRENT_ACTIVITY = "Current activity";
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java b/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java
index 53897422..4c5bd829 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java
@@ -71,13 +71,13 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
public interface OnItemMovedListener {
- public void onItemMoved(int from, int to);
+ void onItemMoved(int from, int to);
}
public interface OnDragStateChangedListener {
- public void onDragStart();
+ void onDragStart();
- public void onDragStop();
+ void onDragStop();
}
private void debugLog(String log) {
@@ -135,15 +135,14 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
debugLog("View top = " + view.getTop());
if (selectedDragItemPos != -1) {
- int itemPos = rv.getChildPosition(view);
+ int itemPos = rv.getChildAdapterPosition(view);
debugLog("itemPos =" + itemPos);
if (!canDragOver(itemPos)) {
return;
}
- //Movement of finger
- float totalMovement = fingerY - fingerAnchorY;
+// float totalMovement = fingerY - fingerAnchorY;
if (itemPos == selectedDragItemPos) {
view.setVisibility(View.INVISIBLE);
@@ -211,7 +210,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
if (view.getVisibility() != View.VISIBLE)
continue;
- int itemPos = rv.getChildPosition(view);
+ int itemPos = rv.getChildAdapterPosition(view);
if (itemPos == selectedDragItemPos) //Don't check against itself!
continue;
@@ -306,7 +305,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
fingerOffsetInViewY = fingerAnchorY - itemView.getTop();
fingerY = fingerAnchorY;
- selectedDragItemPos = rv.getChildPosition(itemView);
+ selectedDragItemPos = rv.getChildAdapterPosition(itemView);
debugLog("selectedDragItemPos = " + selectedDragItemPos);
return true;
@@ -381,7 +380,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
}
- Paint bgColor = new Paint();
+ final Paint bgColor = new Paint();
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
@@ -393,12 +392,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
}
}
- RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- super.onScrollStateChanged(recyclerView, newState);
- }
-
+ final RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
@@ -407,15 +401,10 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec
}
};
- /**
- * @param position
- * @return True if we can drag the item over this position, False if not.
- */
protected boolean canDragOver(int position) {
return true;
}
-
private BitmapDrawable createFloatingBitmap(View v) {
floatingItemStatingBounds = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
floatingItemBounds = new Rect(floatingItemStatingBounds);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallAnimatorListener.java b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallAnimatorListener.java
index 62d510e3..d53b8fd3 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallAnimatorListener.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallAnimatorListener.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.misc;
/**
- * Created by karim on 20.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SmallAnimatorListener implements com.nineoldandroids.animation.Animator.AnimatorListener {
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallObservableScrollViewCallbacks.java b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallObservableScrollViewCallbacks.java
index 2639fa9d..c6c8a7bd 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallObservableScrollViewCallbacks.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallObservableScrollViewCallbacks.java
@@ -4,7 +4,7 @@ import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCal
import com.github.ksoichiro.android.observablescrollview.ScrollState;
/**
- * Created by karim on 20.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SmallObservableScrollViewCallbacks implements ObservableScrollViewCallbacks {
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallOnGestureListener.java b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallOnGestureListener.java
index 4be14809..56fecb08 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallOnGestureListener.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallOnGestureListener.java
@@ -4,7 +4,7 @@ import android.view.GestureDetector;
import android.view.MotionEvent;
/**
- * Created by karim on 20.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SmallOnGestureListener implements GestureDetector.OnGestureListener {
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallTransitionListener.java b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallTransitionListener.java
index 29676799..8bbf47ea 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/misc/SmallTransitionListener.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/misc/SmallTransitionListener.java
@@ -4,7 +4,7 @@ import android.annotation.TargetApi;
import android.transition.Transition;
/**
- * Created by karim on 20.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
@TargetApi(21)
public class SmallTransitionListener implements Transition.TransitionListener {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java
index f8cbeee4..e14cef61 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java
@@ -8,16 +8,16 @@ import com.kabouzeid.gramophone.util.MusicUtil;
import com.squareup.picasso.Picasso;
/**
- * Created by karim on 22.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class Album implements SearchEntry {
- public int id;
+ public final int id;
public int artistId;
- public String title;
- public String artistName;
- public int songCount;
- public int year;
+ public final String title;
+ public final String artistName;
+ public final int songCount;
+ public final int year;
public Album(final int id, final String title, final String artistName, final int artistId,
final int songNumber, final int albumYear) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java
index e8f79208..3b275b48 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java
@@ -8,13 +8,13 @@ import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader;
import com.squareup.picasso.Picasso;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class Artist implements SearchEntry {
- public int id;
- public String name;
- public int albumCount;
- public int songCount;
+ public final int id;
+ public final String name;
+ public final int albumCount;
+ public final int songCount;
public Artist(final int id, final String name, final int albumCount, final int songCount) {
this.id = id;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/DataBaseChangedEvent.java b/app/src/main/java/com/kabouzeid/gramophone/model/DataBaseChangedEvent.java
index cad9c41a..deb80b1f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/DataBaseChangedEvent.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/DataBaseChangedEvent.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.model;
/**
- * Created by karim on 17.03.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class DataBaseChangedEvent {
public static final int PLAYLISTS_CHANGED = 0;
@@ -10,7 +10,7 @@ public class DataBaseChangedEvent {
public static final int SONGS_CHANGED = 3;
public static final int DATABASE_CHANGED = 4;
- private int action;
+ private final int action;
public DataBaseChangedEvent(int action) {
this.action = action;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/MusicRemoteEvent.java b/app/src/main/java/com/kabouzeid/gramophone/model/MusicRemoteEvent.java
index 630bcac9..782998c7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/MusicRemoteEvent.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/MusicRemoteEvent.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.model;
/**
- * Created by karim on 19.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class MusicRemoteEvent {
public static final int PLAY = 0;
@@ -24,7 +24,7 @@ public class MusicRemoteEvent {
public static final int SHUFFLE_MODE_CHANGED = 13;
public static final int REPEAT_MODE_CHANGED = 14;
- private int action;
+ private final int action;
public MusicRemoteEvent(int action) {
this.action = action;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/NavigationDrawerItem.java b/app/src/main/java/com/kabouzeid/gramophone/model/NavigationDrawerItem.java
index 9568a595..2d90d8e3 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/NavigationDrawerItem.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/NavigationDrawerItem.java
@@ -1,11 +1,12 @@
package com.kabouzeid.gramophone.model;
/**
- * Created by karim on 23.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class NavigationDrawerItem {
- public String title;
- public int imageRes;
+
+ public final String title;
+ public final int imageRes;
public NavigationDrawerItem(String title, int imageRes) {
this.title = title;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java
index 26e13c01..8905c4cf 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java
@@ -1,8 +1,8 @@
package com.kabouzeid.gramophone.model;
public class Playlist {
- public int id;
- public String name;
+ public final int id;
+ public final String name;
public Playlist(final int id, final String name) {
this.id = id;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java
index dfdff80e..694d4e17 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.model;
public class PlaylistSong extends Song {
- public int playlistId;
+ public final int playlistId;
public int idInPlayList;
public PlaylistSong(final int id, final int albumId, final int artistId, final String title, final String artistName,
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/SearchEntry.java b/app/src/main/java/com/kabouzeid/gramophone/model/SearchEntry.java
index e67d0887..c5a7ea86 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/SearchEntry.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/SearchEntry.java
@@ -4,12 +4,12 @@ import android.content.Context;
import android.widget.ImageView;
/**
- * Created by karim on 27.02.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public interface SearchEntry {
- public String getTitle();
+ String getTitle();
- public String getSubTitle();
+ String getSubTitle();
- public void loadImage(Context context, ImageView imageView);
+ void loadImage(Context context, ImageView imageView);
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java
index 8700ad1c..b7787f1b 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java
@@ -6,18 +6,18 @@ import android.widget.ImageView;
import java.io.Serializable;
/**
- * Created by karim on 23.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class Song implements Serializable, SearchEntry {
public int id;
- public int albumId;
- public int artistId;
- public String title;
- public String artistName;
- public String albumName;
- public long duration;
- public int trackNumber;
+ public final int albumId;
+ public final int artistId;
+ public final String title;
+ public final String artistName;
+ public final String albumName;
+ public final long duration;
+ public final int trackNumber;
public Song(final int id, final int albumId, final int artistId, final String title, final String artistName,
final String albumName, final long duration, final int trackNumber) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java b/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java
index d589289e..61635751 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/model/UiPreferenceChangedEvent.java
@@ -1,7 +1,7 @@
package com.kabouzeid.gramophone.model;
/**
- * Created by karim on 28.03.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class UIPreferenceChangedEvent {
public static final int THEME_CHANGED = 0;
@@ -11,8 +11,8 @@ public class UIPreferenceChangedEvent {
public static final int PLAYBACK_CONTROLLER_CARD_CHANGED = 4;
public static final int TOOLBAR_TRANSPARENT_CHANGED = 5;
- private int action;
- private Object value;
+ private final int action;
+ private final Object value;
public UIPreferenceChangedEvent(int action, Object value) {
this.action = action;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java
new file mode 100644
index 00000000..60b1d7f2
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java
@@ -0,0 +1,56 @@
+package com.kabouzeid.gramophone.prefs;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.views.CircleView;
+
+public class ColorChooserPreference extends Preference {
+
+ private View mView;
+ private int color;
+ private int border;
+
+ public ColorChooserPreference(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ColorChooserPreference(Context context) {
+ this(context, null, 0);
+ }
+
+ public ColorChooserPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ setLayoutResource(R.layout.preference_custom);
+ }
+
+ @Override
+ protected void onBindView(@NonNull View view) {
+ super.onBindView(view);
+ mView = view;
+ invalidateColor();
+ }
+
+ public void setColor(int color, int border) {
+ this.color = color;
+ this.border = border;
+ invalidateColor();
+ }
+
+ private void invalidateColor() {
+ if (mView != null) {
+ CircleView circle = (CircleView) mView.findViewById(R.id.circle);
+ if (this.color != 0) {
+ circle.setVisibility(View.VISIBLE);
+ circle.setBackgroundColor(color);
+ circle.setBorderColor(border);
+ } else {
+ circle.setVisibility(View.GONE);
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java
new file mode 100644
index 00000000..40a2f976
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java
@@ -0,0 +1,39 @@
+package com.kabouzeid.gramophone.prefs;
+
+import android.content.Context;
+import android.preference.PreferenceCategory;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+import com.afollestad.materialdialogs.ThemeSingleton;
+import com.kabouzeid.gramophone.R;
+
+/**
+ * Uses the theme's primary color as the text color of the category.
+ *
+ * @author Aidan Follestad (afollestad)
+ */
+public class DynamicPreferenceCategory extends PreferenceCategory {
+
+ public DynamicPreferenceCategory(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public DynamicPreferenceCategory(Context context) {
+ this(context, null, 0);
+ }
+
+ public DynamicPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ setLayoutResource(R.layout.preference_category_custom);
+ setSelectable(false);
+ }
+
+ @Override
+ protected void onBindView(@NonNull View view) {
+ super.onBindView(view);
+ ((TextView) view.findViewById(android.R.id.title)).setTextColor(ThemeSingleton.get().positiveColor);
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java
index 67419db0..6b08c117 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java
@@ -81,9 +81,9 @@ public class AlbumJSONStore extends SQLiteOpenHelper {
}
public interface AlbumJSONColumns {
- public static final String NAME = "AlbumJSON";
- public static final String ALBUMANDARTIST_NAME = "AlbumAndArtistName";
- public static final String JSON = "JSON";
+ String NAME = "AlbumJSON";
+ String ALBUMANDARTIST_NAME = "AlbumAndArtistName";
+ String JSON = "JSON";
}
@Override
diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java
index c073a710..2d69c94d 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java
@@ -81,9 +81,9 @@ public class ArtistJSONStore extends SQLiteOpenHelper {
}
public interface ArtistJSONColumns {
- public static final String NAME = "ArtistJSON";
- public static final String ARTIST_NAME = "ArtistName";
- public static final String JSON = "JSON";
+ String NAME = "ArtistJSON";
+ String ARTIST_NAME = "ArtistName";
+ String JSON = "JSON";
}
@Override
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 939640a6..ca6ed1b7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java
@@ -38,7 +38,6 @@ import com.squareup.picasso.Target;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.List;
public class MusicService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener, AudioManager.OnAudioFocusChangeListener {
public static final String ACTION_TOGGLE_PLAYBACK = "com.kabouzeid.gramophone.action.TOGGLE_PLAYBACK";
@@ -66,8 +65,8 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
}
};
private MediaPlayer player;
- private List playingQueue;
- private List originalPlayingQueue;
+ private ArrayList playingQueue;
+ private ArrayList originalPlayingQueue;
private int currentSongId = -1;
private int position = -1;
private int shuffleMode;
@@ -355,7 +354,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
.into(remoteAlbumArt);
}
- private Target remoteAlbumArt = new Target() {
+ private final Target remoteAlbumArt = new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
updateRemoteControlClientBitmap(bitmap.copy(bitmap.getConfig(), true));
@@ -432,7 +431,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
return getPosition() == getPlayingQueue().size() - 1;
}
- public List getPlayingQueue() {
+ public ArrayList getPlayingQueue() {
return playingQueue;
}
@@ -475,7 +474,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
savePosition();
}
- public void openQueue(final List playingQueue, final int startPosition, final boolean startPlaying) {
+ public void openQueue(final ArrayList playingQueue, final int startPosition, final boolean startPlaying) {
if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue.size()) {
originalPlayingQueue = playingQueue;
this.playingQueue = new ArrayList<>(originalPlayingQueue);
@@ -514,7 +513,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
}
}
- public void restorePreviousState(final List originalPlayingQueue, final List playingQueue, int position) {
+ public void restorePreviousState(final ArrayList originalPlayingQueue, final ArrayList playingQueue, int position) {
this.originalPlayingQueue = originalPlayingQueue;
this.playingQueue = playingQueue;
this.position = position;
@@ -772,6 +771,8 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
}
public int getAudioSessionId() {
+ if (player == null)
+ return AudioEffect.ERROR_BAD_VALUE;
return player.getAudioSessionId();
}
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 e494d92c..488f4657 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
@@ -16,8 +16,8 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import android.widget.Toast;
+import com.afollestad.materialdialogs.util.DialogUtils;
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
@@ -43,7 +43,7 @@ import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
-import java.util.List;
+import java.util.ArrayList;
/*
*
@@ -54,10 +54,8 @@ import java.util.List;
* */
public class AlbumDetailActivity extends AbsFabActivity {
+
public static final String TAG = AlbumDetailActivity.class.getSimpleName();
-
- private App app;
-
private Album album;
private ObservableRecyclerView recyclerView;
@@ -66,12 +64,11 @@ public class AlbumDetailActivity extends AbsFabActivity {
private View songsBackgroundView;
private TextView albumTitleView;
private Toolbar toolbar;
- private int toolbarHeight;
private int headerOffset;
private int titleViewHeight;
private int albumArtViewHeight;
private int toolbarColor;
- private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
+ private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
scrollY += albumArtViewHeight + titleViewHeight;
@@ -112,7 +109,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
App.bus.register(this);
if (Util.hasLollipopSDK()) postponeEnterTransition();
- if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled())
+ getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
Bundle intentExtras = getIntent().getExtras();
int albumId = -1;
@@ -148,8 +146,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
- toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
- toolbarHeight = Util.getActionBarSize(this);
+ toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
+ int toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin);
@@ -199,8 +197,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
- private void setNavigationBarColored(boolean colored){
- if (colored){
+ private void setNavigationBarColored(boolean colored) {
+ if (colored) {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
} else {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
@@ -216,8 +214,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);
+ recyclerView.scrollBy(0, 1);
+ recyclerView.scrollBy(0, -1);
}
});
}
@@ -229,7 +227,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
}
private void setUpSongsAdapter() {
- final List songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator());
+ final ArrayList songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator());
final AlbumSongAdapter albumSongAdapter = new AlbumSongAdapter(this, songs);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(albumSongAdapter);
@@ -283,16 +281,16 @@ public class AlbumDetailActivity extends AbsFabActivity {
startActivity(intent);
return true;
case R.id.action_go_to_artist:
- Pair[] artistPairs = null;
- artistPairs = getSharedViewsWithFab(artistPairs);
+ Pair[] artistPairs = getSharedViewsWithFab(null);
NavigationUtil.goToArtist(this, album.artistId, artistPairs);
return true;
}
return super.onOptionsItemSelected(item);
}
- @Subscribe public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
- switch (event.getAction()){
+ @Subscribe
+ public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
+ switch (event.getAction()) {
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
setNavigationBarColored((boolean) event.getValue());
break;
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 f0ab157c..9e9409e2 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
@@ -23,6 +23,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.afollestad.materialdialogs.util.DialogUtils;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
@@ -50,6 +51,7 @@ import com.squareup.otto.Subscribe;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
+import java.util.ArrayList;
import java.util.List;
/*
@@ -74,7 +76,6 @@ public class ArtistDetailActivity extends AbsFabActivity {
private View songsBackgroundView;
private TextView artistNameTv;
private Toolbar toolbar;
- private int toolbarHeight;
private int headerOffset;
private int titleViewHeight;
private int artistImageViewHeight;
@@ -85,7 +86,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
private Spanned biography;
- private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
+ private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
scrollY += artistImageViewHeight + titleViewHeight;
@@ -127,7 +128,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
App.bus.register(this);
if (Util.hasLollipopSDK()) postponeEnterTransition();
- if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
+ getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
getIntentExtras();
initViews();
@@ -153,8 +155,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
private void setUpObservableListViewParams() {
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
- toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
- toolbarHeight = Util.getActionBarSize(this);
+ toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
+ int toolbarHeight = Util.getActionBarSize(this);
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
headerOffset = toolbarHeight;
headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin);
@@ -180,8 +182,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
- private void setNavigationBarColored(boolean colored){
- if (colored){
+ private void setNavigationBarColored(boolean colored) {
+ if (colored) {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(toolbarColor);
} else {
if (Util.hasLollipopSDK()) getWindow().setNavigationBarColor(Color.BLACK);
@@ -193,7 +195,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0);
songListView.addHeaderView(songListHeader);
- final List songs = ArtistSongLoader.getArtistSongList(this, artist.id);
+ final ArrayList songs = ArtistSongLoader.getArtistSongList(this, artist.id);
ArtistSongAdapter songAdapter = new ArtistSongAdapter(this, songs);
songListView.setAdapter(songAdapter);
@@ -242,6 +244,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
return new MaterialDialog.Builder(ArtistDetailActivity.this)
.title(artist.name)
.content(biography)
+ .positiveText(android.R.string.ok)
.build();
}
@@ -285,14 +288,15 @@ 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 = Util.resolveColor(this, R.attr.default_bar_color);
+ int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
+ int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
toolbarColor = defaultBarColor;
artistNameTv.setBackgroundColor(defaultBarColor);
artistNameTv.setTextColor(titleTextColor);
- if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
+ if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
+ getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
}
private void setUpToolBar() {
@@ -398,8 +402,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
}
@Subscribe
- public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
- switch (event.getAction()){
+ public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
+ switch (event.getAction()) {
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED:
setNavigationBarColored((boolean) event.getValue());
break;
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 6b0579dd..076a9713 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
@@ -4,6 +4,7 @@ import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.provider.MediaStore;
import android.support.v4.util.Pair;
import android.support.v4.view.ViewPager;
@@ -17,11 +18,12 @@ import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
+import com.afollestad.materialdialogs.ThemeSingleton;
import com.astuetz.PagerSlidingTabStrip;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PagerAdapter;
-import com.kabouzeid.gramophone.helper.AboutDeveloperDialogHelper;
-import com.kabouzeid.gramophone.helper.CreatePlaylistDialogHelper;
+import com.kabouzeid.gramophone.dialogs.AboutDialog;
+import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
@@ -44,6 +46,7 @@ import com.kabouzeid.gramophone.util.Util;
import com.kabouzeid.gramophone.util.ViewUtil;
import com.squareup.picasso.Picasso;
+import java.util.ArrayList;
import java.util.List;
@@ -95,8 +98,7 @@ public class MainActivity extends AbsFabActivity
navigationDrawerFragment.setItemChecked(startPosition);
- final int accentColor = Util.resolveColor(MainActivity.this, R.attr.colorAccent);
- slidingTabLayout.setIndicatorColor(accentColor);
+ slidingTabLayout.setIndicatorColor(ThemeSingleton.get().positiveColor);
slidingTabLayout.setViewPager(viewPager);
slidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@@ -137,7 +139,7 @@ public class MainActivity extends AbsFabActivity
private void setToolBarTransparent(boolean transparent) {
float alpha = transparent ? 0.97f : 1f;
- final int colorPrimary = Util.resolveColor(this, R.attr.colorPrimary);
+ final int colorPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
ViewUtil.setBackgroundAlpha(toolbar, alpha, colorPrimary);
ViewUtil.setBackgroundAlpha(statusBar, alpha, colorPrimary);
ViewUtil.setBackgroundAlpha(slidingTabLayout, alpha, colorPrimary);
@@ -222,6 +224,22 @@ public class MainActivity extends AbsFabActivity
getResources().getString(R.string.transition_album_cover)
)
}));
+ } else if (position == NavigationDrawerFragment.ABOUT_INDEX) {
+ drawerLayout.closeDrawers();
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ new AboutDialog().show(getSupportFragmentManager(), "ABOUT_DIALOG");
+ }
+ }, 200);
+ } else if (position == NavigationDrawerFragment.SETTINGS_INDEX) {
+ drawerLayout.closeDrawers();
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ startActivity(new Intent(MainActivity.this, SettingsActivity.class));
+ }
+ }, 200);
} else {
if (viewPager != null) {
viewPager.setCurrentItem(position, true);
@@ -267,17 +285,11 @@ public class MainActivity extends AbsFabActivity
MusicPlayerRemote.shuffleAllSongs(this);
return true;
case R.id.action_new_playlist:
- CreatePlaylistDialogHelper.getDialog(this).show();
+ CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST");
return true;
case R.id.action_search:
startActivity(new Intent(MainActivity.this, SearchActivity.class));
return true;
- case R.id.action_settings:
- startActivity(new Intent(MainActivity.this, SettingsActivity.class));
- return true;
- case R.id.action_about:
- AboutDeveloperDialogHelper.getDialog(this).show();
- return true;
case R.id.action_current_playing:
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
return true;
@@ -319,9 +331,9 @@ public class MainActivity extends AbsFabActivity
PreferenceUtils.getInstance(MainActivity.this).setLastStartPage(currentPage);
}
- private boolean handlePlaybackIntent(Intent intent) {
+ private void handlePlaybackIntent(Intent intent) {
if (intent == null) {
- return false;
+ return;
}
Uri uri = intent.getData();
@@ -335,7 +347,8 @@ public class MainActivity extends AbsFabActivity
final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist");
if (id >= 0) {
int position = intent.getIntExtra("position", 0);
- MusicPlayerRemote.openQueue((List) (List extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
+ //noinspection unchecked
+ MusicPlayerRemote.openQueue((ArrayList) (List extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
handled = true;
}
} else if (MediaStore.Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
@@ -356,7 +369,6 @@ public class MainActivity extends AbsFabActivity
if (handled) {
setIntent(new Intent());
}
- return handled;
}
private long parseIdFromIntent(Intent intent, String longKey,
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 2b74f663..ad4de18a 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
@@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.ui.activities;
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;
@@ -20,11 +19,14 @@ import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
+import com.afollestad.materialdialogs.ThemeSingleton;
+import com.afollestad.materialdialogs.internal.MDTintHelper;
+import com.afollestad.materialdialogs.util.DialogUtils;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
-import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
+import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
+import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
-import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistImageUrlLoader;
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
@@ -66,9 +68,7 @@ public class MusicControllerActivity extends AbsFabActivity {
private ImageButton repeatButton;
private ImageButton shuffleButton;
private View mediaControllerContainer;
-
private int lastFooterColor = -1;
-
private boolean killThreads = false;
@Override
@@ -128,11 +128,13 @@ public class MusicControllerActivity extends AbsFabActivity {
if (Util.hasLollipopSDK()) {
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
}
- mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
+ mediaControllerContainer.setBackgroundColor(
+ DialogUtils.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));
+ mediaControllerContainer.setBackgroundColor(
+ DialogUtils.resolveColor(this, R.attr.music_controller_container_color));
} else {
mediaControllerContainer.setBackground(null);
}
@@ -140,6 +142,7 @@ public class MusicControllerActivity extends AbsFabActivity {
}
private void setUpProgressSlider() {
+ MDTintHelper.setTint(progressSlider, ThemeSingleton.get().positiveColor);
progressSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -159,8 +162,10 @@ 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.setImageDrawable(Util.getTintedDrawable(this,
+ R.drawable.ic_skip_next_white_48dp, DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
+ prevButton.setImageDrawable(Util.getTintedDrawable(this,
+ R.drawable.ic_skip_previous_white_48dp, DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -188,10 +193,12 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateShuffleState() {
switch (MusicPlayerRemote.getShuffleMode()) {
case MusicService.SHUFFLE_MODE_SHUFFLE:
- shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
+ shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp,
+ ThemeSingleton.get().positiveColor));
break;
default:
- shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
+ shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp,
+ DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
break;
}
}
@@ -209,13 +216,16 @@ public class MusicControllerActivity extends AbsFabActivity {
private void updateRepeatState() {
switch (MusicPlayerRemote.getRepeatMode()) {
case MusicService.REPEAT_MODE_NONE:
- repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
+ repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp,
+ DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
break;
case MusicService.REPEAT_MODE_ALL:
- repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
+ repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp,
+ ThemeSingleton.get().positiveColor));
break;
default:
- repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_one_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
+ repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_one_white_48dp,
+ ThemeSingleton.get().positiveColor));
break;
}
}
@@ -294,9 +304,9 @@ 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 = Util.resolveColor(this, R.attr.default_bar_color);
+ int songTitleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
+ int artistNameTextColor = DialogUtils.resolveColor(this, R.attr.caption_text_color);
+ int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
animateColorChange(defaultBarColor);
@@ -353,7 +363,8 @@ public class MusicControllerActivity extends AbsFabActivity {
Thread.sleep(1);
} catch (InterruptedException e) {
return;
- } catch (Exception e) {
+ } catch (Exception e2) {
+ e2.printStackTrace();
}
final int finalTotal = total;
final int finalCurrentPosition = currentPosition;
@@ -427,7 +438,7 @@ public class MusicControllerActivity extends AbsFabActivity {
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_add_to_playlist:
- AddToPlaylistDialogHelper.getDialog(this, song).show();
+ AddToPlaylistDialog.create(song).show(getSupportFragmentManager(), "ADD_PLAYLIST");
return true;
case android.R.id.home:
super.onBackPressed();
@@ -443,7 +454,7 @@ public class MusicControllerActivity extends AbsFabActivity {
case R.id.action_details:
String songFilePath = SongFilePathLoader.getSongFilePath(this, song.id);
File songFile = new File(songFilePath);
- SongDetailDialogHelper.getDialog(this, songFile).show();
+ SongDetailDialog.create(songFile).show(getSupportFragmentManager(), "SONG_DETAIL");
return true;
case R.id.action_go_to_album:
NavigationUtil.goToAlbum(this, song.albumId, getSharedViewsWithFab(null));
@@ -480,4 +491,4 @@ public class MusicControllerActivity extends AbsFabActivity {
super.onDestroy();
App.bus.unregister(this);
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
index 8478585d..5bb0a0e8 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java
@@ -1,5 +1,7 @@
package com.kabouzeid.gramophone.ui.activities;
+import android.annotation.TargetApi;
+import android.os.Build;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -18,25 +20,34 @@ import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
+import com.kabouzeid.gramophone.util.Util;
-import java.util.List;
+import java.util.ArrayList;
public class PlaylistDetailActivity extends AbsFabActivity {
+
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
- private RecyclerView recyclerView;
private Playlist playlist;
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
setUpTranslucence(false, false);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playlist_detail);
- getIntentExtras();
- setUpToolBar();
+ final int primary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
+ final int primaryDark = PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker();
+ if (Util.hasLollipopSDK()) {
+ getWindow().setStatusBarColor(primaryDark);
+ getWindow().setNavigationBarColor(primaryDark);
+ }
- recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
- final List songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
+ getIntentExtras();
+
+ RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+ final ArrayList songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
final PlaylistSongAdapter adapter = new PlaylistSongAdapter(this, songs);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(adapter);
@@ -57,6 +68,12 @@ public class PlaylistDetailActivity extends AbsFabActivity {
recyclerView.addItemDecoration(dragSortRecycler);
recyclerView.addOnItemTouchListener(dragSortRecycler);
recyclerView.setOnScrollListener(dragSortRecycler.getScrollListener());
+
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ toolbar.setBackgroundColor(primary);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setTitle(playlist.name);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void getIntentExtras() {
@@ -68,12 +85,6 @@ public class PlaylistDetailActivity extends AbsFabActivity {
}
}
- private void setUpToolBar() {
- setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
- getSupportActionBar().setTitle(playlist.name);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- }
-
@Override
public String getTag() {
return TAG;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
index 722c4732..6b95cd99 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java
@@ -29,6 +29,7 @@ import com.kabouzeid.gramophone.model.SearchEntry;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import java.util.ArrayList;
@@ -48,9 +49,11 @@ public class SearchActivity extends AbsBaseActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
+ final int primary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
+ final int primaryDark = PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker();
if (Util.hasLollipopSDK()) {
- getWindow().setStatusBarColor(Util.resolveColor(this, R.attr.colorPrimaryDark));
- getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.colorPrimaryDark));
+ getWindow().setStatusBarColor(primaryDark);
+ getWindow().setNavigationBarColor(primaryDark);
}
listView = (ListView) findViewById(R.id.list);
@@ -60,7 +63,7 @@ public class SearchActivity extends AbsBaseActivity {
Object item = parent.getItemAtPosition(position);
if (item instanceof SearchEntry) {
if (item instanceof Song) {
- List playList = new ArrayList<>();
+ ArrayList playList = new ArrayList<>();
playList.add((Song) item);
MusicPlayerRemote.openQueue(playList, 0, true);
} else if (item instanceof Album) {
@@ -95,7 +98,9 @@ public class SearchActivity extends AbsBaseActivity {
}
});
- setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ toolbar.setBackgroundColor(primary);
+ setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@@ -164,10 +169,7 @@ public class SearchActivity extends AbsBaseActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
+ return id == R.id.action_settings || super.onOptionsItemSelected(item);
}
private void search(String query) {
@@ -201,7 +203,7 @@ public class SearchActivity extends AbsBaseActivity {
public static class LabelEntry implements SearchEntry {
- String title;
+ final String title;
String label;
public LabelEntry(String label) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
index 0453237a..ce0ca23f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java
@@ -4,6 +4,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.media.audiofx.AudioEffect;
+import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -12,23 +13,46 @@ import android.preference.PreferenceManager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
+import com.afollestad.materialdialogs.util.DialogUtils;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
+import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
import com.kabouzeid.gramophone.util.NavigationUtil;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
-public class SettingsActivity extends AbsBaseActivity {
+public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
public static final String TAG = SettingsActivity.class.getSimpleName();
+ private Toolbar mToolbar;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+ mToolbar = (Toolbar) findViewById(R.id.toolbar);
+ mToolbar.setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
+ getWindow().setStatusBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker());
+ setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
+
+ if (savedInstanceState == null)
+ getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
+ }
+
+ @Override
+ public void onColorSelection(int title, int color) {
+ if (title == R.string.primary_color) {
+ PreferenceUtils.getInstance(this).setThemeColorPrimary(color);
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, color));
+ } else if (title == R.string.accent_color) {
+ PreferenceUtils.getInstance(this).setThemeColorAccent(color);
+ App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, color));
+ }
+ recreate();
}
public static class SettingsFragment extends PreferenceFragment {
@@ -62,6 +86,30 @@ public class SettingsActivity extends AbsBaseActivity {
}
});
+ ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color");
+ primaryColor.setColor(PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary(),
+ DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary));
+ primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ new ColorChooserDialog().show(getActivity(), preference.getTitleRes(),
+ PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary());
+ return true;
+ }
+ });
+
+ ColorChooserPreference accentColor = (ColorChooserPreference) findPreference("accent_color");
+ accentColor.setColor(PreferenceUtils.getInstance(getActivity()).getThemeColorAccent(),
+ DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary));
+ accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ new ColorChooserDialog().show(getActivity(), preference.getTitleRes(),
+ PreferenceUtils.getInstance(getActivity()).getThemeColorAccent());
+ return true;
+ }
+ });
+
findPreference("transparent_toolbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
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 739659c2..293bb12d 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
@@ -3,24 +3,22 @@ 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;
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.
+ * @author Karim Abou Zeid (kabouzeid)
*/
-public abstract class AbsBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
+public abstract class AbsBaseActivity extends ThemeBaseActivity implements KabViewsDisableAble {
+
private App app;
private boolean areViewsEnabled;
- private Object uiPreferenceChangeListener = new Object() {
+ private final Object uiPreferenceChangeListener = new Object() {
@Subscribe
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
AbsBaseActivity.this.onUIPreferenceChangedEvent(event);
@@ -30,7 +28,6 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
@Override
protected void onCreate(Bundle savedInstanceState) {
Crashlytics.setString(AppKeys.CL_CURRENT_ACTIVITY, getTag());
- setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
super.onCreate(savedInstanceState);
try {
App.bus.register(uiPreferenceChangeListener);
@@ -45,7 +42,7 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
return app;
}
- public abstract String getTag();
+ protected abstract String getTag();
@Override
protected void onResume() {
@@ -53,15 +50,6 @@ 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;
@@ -77,14 +65,12 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
return areViewsEnabled;
}
- protected void setUpTranslucence(boolean statusBarTranslucent, boolean navigationBarTranslucent) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent);
- if (Util.isInPortraitMode(this) || Util.isTablet(this)) {
- Util.setNavBarTranslucent(getWindow(), navigationBarTranslucent);
- } else {
- Util.setNavBarTranslucent(getWindow(), false);
- }
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ protected void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
+ switch (event.getAction()) {
+ case UIPreferenceChangedEvent.THEME_CHANGED:
+ recreate();
+ break;
}
}
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 2c17478c..50937d46 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
@@ -1,5 +1,7 @@
package com.kabouzeid.gramophone.ui.activities.base;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.v4.util.Pair;
import android.util.Log;
@@ -8,8 +10,10 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
+import com.afollestad.materialdialogs.ThemeSingleton;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.misc.SmallOnGestureListener;
import com.kabouzeid.gramophone.model.MusicRemoteEvent;
@@ -19,14 +23,14 @@ import com.melnykov.fab.FloatingActionButton;
import com.squareup.otto.Subscribe;
/**
- * Created by karim on 22.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsFabActivity extends AbsBaseActivity {
public static final String TAG = AbsFabActivity.class.getSimpleName();
private FloatingActionButton fab;
private PlayPauseDrawable playPauseDrawable;
- private Object busEventListener = new Object() {
+ private final Object busEventListener = new Object() {
@Subscribe
public void onBusEvent(MusicRemoteEvent event) {
onMusicRemoteEvent(event);
@@ -49,6 +53,17 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
}
getFab().setImageDrawable(playPauseDrawable);
+ final int accentColor = ThemeSingleton.get().positiveColor;
+ if (accentColor == Color.WHITE) {
+ getFab().setColorNormal(accentColor);
+ getFab().setColorPressed(ColorChooserDialog.shiftColorDown(accentColor));
+ getFab().getDrawable().setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN);
+ } else {
+ getFab().setColorNormal(accentColor);
+ getFab().setColorPressed(ColorChooserDialog.shiftColorUp(accentColor));
+ getFab().getDrawable().clearColorFilter();
+ }
+
updateFabState();
final GestureDetector gestureDetector = new GestureDetector(this, new SmallOnGestureListener() {
@Override
@@ -111,9 +126,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
Pair[] sharedViewsWithFab;
if (sharedViews != null) {
sharedViewsWithFab = new Pair[sharedViews.length + 1];
- for (int i = 0; i < sharedViews.length; i++) {
- sharedViewsWithFab[i] = sharedViews[i];
- }
+ System.arraycopy(sharedViews, 0, sharedViewsWithFab, 0, sharedViews.length);
} else {
sharedViewsWithFab = new Pair[1];
}
@@ -134,7 +147,7 @@ public abstract class AbsFabActivity extends AbsBaseActivity {
}
}
- public void onMusicRemoteEvent(MusicRemoteEvent event) {
+ protected void onMusicRemoteEvent(MusicRemoteEvent event) {
switch (event.getAction()) {
case MusicRemoteEvent.PLAY:
setFabPause();
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java
new file mode 100644
index 00000000..ea3d0275
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java
@@ -0,0 +1,76 @@
+package com.kabouzeid.gramophone.ui.activities.base;
+
+import android.app.ActivityManager;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v7.app.ActionBarActivity;
+
+import com.afollestad.materialdialogs.ThemeSingleton;
+import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
+import com.kabouzeid.gramophone.util.PreferenceUtils;
+import com.kabouzeid.gramophone.util.Util;
+
+/**
+ * @author Aidan Follestad (afollestad)
+ */
+public abstract class ThemeBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
+
+ private boolean mLastDarkTheme;
+ private int mLastPrimary;
+ private int mLastAccent;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
+ super.onCreate(savedInstanceState);
+ setupTheme();
+ }
+
+ private void setupTheme() {
+ // Persist current values so the Activity knows if they change
+ mLastDarkTheme = PreferenceUtils.getInstance(this).getGeneralTheme() == 1;
+ mLastPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
+ mLastAccent = PreferenceUtils.getInstance(this).getThemeColorAccent();
+
+ // Accent colors in dialogs, and any dynamic views that pull from this singleton
+ ThemeSingleton.get().positiveColor = mLastAccent;
+ ThemeSingleton.get().negativeColor = ThemeSingleton.get().positiveColor;
+ ThemeSingleton.get().neutralColor = ThemeSingleton.get().positiveColor;
+ ThemeSingleton.get().widgetColor = ThemeSingleton.get().positiveColor;
+ // Dark theme
+ ThemeSingleton.get().darkTheme = mLastDarkTheme;
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ // Sets color of entry in the system recents page
+ ActivityManager.TaskDescription td = new ActivityManager.TaskDescription(
+ getString(R.string.app_name),
+ BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher),
+ mLastPrimary);
+ setTaskDescription(td);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (mLastDarkTheme != (PreferenceUtils.getInstance(this).getGeneralTheme() == 1) ||
+ mLastPrimary != PreferenceUtils.getInstance(this).getThemeColorPrimary() ||
+ mLastAccent != PreferenceUtils.getInstance(this).getThemeColorAccent()) {
+ // Theme colors changed, recreate the Activity
+ recreate();
+ }
+ }
+
+ protected void setUpTranslucence(boolean statusBarTranslucent, boolean navigationBarTranslucent) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent);
+ if (Util.isInPortraitMode(this) || Util.isTablet(this)) {
+ Util.setNavBarTranslucent(getWindow(), navigationBarTranslucent);
+ } else {
+ Util.setNavBarTranslucent(getWindow(), false);
+ }
+ }
+ }
+}
\ No newline at end of file
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 686cce05..88e2986a 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
@@ -17,6 +17,7 @@ import android.view.animation.OvershootInterpolator;
import android.widget.ImageView;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.afollestad.materialdialogs.util.DialogUtils;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
@@ -48,10 +49,11 @@ import java.util.List;
import java.util.Map;
/**
- * Created by karim on 18.01.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsTagEditorActivity extends AbsBaseActivity {
- public static final String TAG = AbsTagEditorActivity.class.getSimpleName();
+
+ private static final String TAG = AbsTagEditorActivity.class.getSimpleName();
private static final int REQUEST_CODE_SELECT_IMAGE = 1337;
private int id;
@@ -64,7 +66,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
private Toolbar toolBar;
private ImageView image;
private View header;
- private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
+ private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
float alpha;
@@ -168,7 +170,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
protected abstract void deleteImage();
- protected void setUpFab() {
+ private void setUpFab() {
ViewHelper.setScaleX(fab, 0);
ViewHelper.setScaleY(fab, 0);
fab.setEnabled(false);
@@ -183,7 +185,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
protected abstract void save();
private void restoreStandardColors() {
- final int vibrantColor = Util.resolveColor(this, R.attr.colorPrimary);
+ final int vibrantColor = DialogUtils.resolveColor(this, R.attr.colorPrimary);
paletteColorPrimary = vibrantColor;
observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -199,7 +201,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
}
}
- protected void setUpToolBar() {
+ private void setUpToolBar() {
setSupportActionBar(toolBar);
getSupportActionBar().setTitle(getResources().getString(R.string.tag_editor));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -270,7 +272,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
- final int vibrantColor = palette.getVibrantColor(Util.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color));
+ final int vibrantColor = palette.getVibrantColor(DialogUtils.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 537225e4..1b4203bf 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
@@ -34,7 +34,6 @@ import java.util.Map;
public class AlbumTagEditorActivity extends AbsTagEditorActivity implements TextWatcher {
public static final String TAG = AlbumTagEditorActivity.class.getSimpleName();
- private File albumArtFile;
private Bitmap albumArtBitmap;
private boolean deleteAlbumArt;
@@ -157,13 +156,9 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
fieldKeyValueMap.put(FieldKey.GENRE, genreName.getText().toString());
fieldKeyValueMap.put(FieldKey.YEAR, year.getText().toString());
- try {
- albumArtFile = MusicUtil.getAlbumArtFile(this, String.valueOf(getId()));
- } catch (IOException e) {
- Log.e(TAG, "error while creating albumArtFile", e);
- }
+ File albumArtFile = MusicUtil.getAlbumArtFile(String.valueOf(getId()));
- if (albumArtBitmap != null && albumArtFile != null) {
+ if (albumArtBitmap != null) {
try {
albumArtBitmap.compress(Bitmap.CompressFormat.PNG, 0, new FileOutputStream(albumArtFile));
artwork = ArtworkFactory.createArtworkFromFile(albumArtFile);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java
index ac5a0e0f..b2bb5568 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java
@@ -7,34 +7,34 @@ import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
-import android.widget.ListView;
import android.widget.TextView;
-import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.NavigationDrawerItemAdapter;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.model.NavigationDrawerItem;
-import com.nhaarman.listviewanimations.appearance.simple.AlphaInAnimationAdapter;
import java.util.ArrayList;
public class NavigationDrawerFragment extends Fragment {
+
public static final int NAVIGATION_DRAWER_HEADER = -1;
- private static final String TAG = NavigationDrawerFragment.class.getSimpleName();
+ public static final int ABOUT_INDEX = 4;
+ public static final int SETTINGS_INDEX = 5;
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
+
public View fragmentRootView;
- private App app;
private NavigationDrawerCallbacks callbacks;
private NavigationDrawerItemAdapter drawerAdapter;
private DrawerLayout drawerLayout;
- private ListView drawerListView;
+ private RecyclerView drawerRecyclerView;
private View fragmentContainerView;
private Button headerButton;
@@ -91,7 +91,6 @@ public class NavigationDrawerFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
- app = (App) getActivity().getApplicationContext();
userLearnedDrawer = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean(AppKeys.SP_USER_LEARNED_DRAWER, false);
if (savedInstanceState != null) {
setItemChecked(savedInstanceState.getInt(STATE_SELECTED_POSITION));
@@ -101,8 +100,7 @@ public class NavigationDrawerFragment extends Fragment {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
}
@@ -115,7 +113,7 @@ public class NavigationDrawerFragment extends Fragment {
}
private void initViews() {
- drawerListView = (ListView) fragmentRootView.findViewById(R.id.navigation_drawer_list);
+ drawerRecyclerView = (RecyclerView) fragmentRootView.findViewById(R.id.navigation_drawer_list);
final View drawerHeader = fragmentRootView.findViewById(R.id.header);
headerButton = (Button) drawerHeader.findViewById(R.id.header_clickable);
albumArt = (ImageView) drawerHeader.findViewById(R.id.album_art);
@@ -139,23 +137,22 @@ public class NavigationDrawerFragment extends Fragment {
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.albums), R.drawable.ic_album_white_24dp));
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.artists), R.drawable.ic_person_white_24dp));
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.playlists), R.drawable.ic_queue_music_white_24dp));
+ navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.action_about), R.drawable.ic_drawer_about));
+ navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.action_settings), R.drawable.ic_drawer_settings));
- drawerAdapter = new NavigationDrawerItemAdapter(getActivity(), R.id.navigation_drawer, navigationDrawerItems);
-
- final AlphaInAnimationAdapter animationAdapter = new AlphaInAnimationAdapter(drawerAdapter);
- animationAdapter.setAbsListView(drawerListView);
-
- drawerListView.setAdapter(animationAdapter);
- drawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ drawerAdapter = new NavigationDrawerItemAdapter(getActivity(), navigationDrawerItems, new NavigationDrawerItemAdapter.Callback() {
@Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- selectItem(position);
+ public void onItemSelected(int index) {
+ selectItem(index);
}
});
+ drawerRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ drawerRecyclerView.setAdapter(drawerAdapter);
}
private void selectItem(final int position) {
- if (position != NAVIGATION_DRAWER_HEADER) {
+ if (position != NAVIGATION_DRAWER_HEADER &&
+ position != ABOUT_INDEX && position != SETTINGS_INDEX) {
setItemChecked(position);
if (drawerLayout != null) {
new Handler().postDelayed(new Runnable() {
@@ -165,11 +162,9 @@ public class NavigationDrawerFragment extends Fragment {
}
}, 400);
}
-
}
- if (callbacks != null) {
+ if (callbacks != null)
callbacks.onNavigationDrawerItemSelected(position);
- }
}
@Override
@@ -191,7 +186,7 @@ public class NavigationDrawerFragment extends Fragment {
}
}
- public static interface NavigationDrawerCallbacks {
+ public interface NavigationDrawerCallbacks {
void onNavigationDrawerItemSelected(int position);
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java
index 73c97abf..020dba8c 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java
@@ -10,7 +10,7 @@ import com.kabouzeid.gramophone.ui.activities.MainActivity;
import com.kabouzeid.gramophone.util.Util;
/**
- * Created by karim on 27.02.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsMainActivityFragment extends Fragment implements KabViewsDisableAble {
private boolean areViewsEnabled;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
index dd130829..8360c03b 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java
@@ -9,7 +9,7 @@ import android.view.ViewGroup;
import com.kabouzeid.gramophone.R;
/**
- * Created by karim on 30.03.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment {
public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName();
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 0c033fea..69cdb518 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,7 +2,6 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
-import android.widget.Toast;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.AlbumAdapter;
@@ -10,7 +9,7 @@ import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
/**
- * Created by karim on 22.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment {
public static final String TAG = AlbumViewFragment.class.getSimpleName();
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java
index 328f9c07..3e575549 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java
@@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -8,6 +9,7 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PlaylistAdapter;
public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
+
public static final String TAG = PlaylistViewFragment.class.getSimpleName();
@Override
@@ -22,6 +24,6 @@ public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment {
@Override
protected RecyclerView.Adapter createAdapter() {
- return new PlaylistAdapter(getActivity());
+ return new PlaylistAdapter((ActionBarActivity) getActivity());
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java
index 3ba8981d..94f1fd7e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java
@@ -1,5 +1,6 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments;
+import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -7,9 +8,10 @@ import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.songadapter.SongAdapter;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
+
public static final String TAG = SongViewFragment.class.getSimpleName();
@Override
@@ -24,6 +26,6 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment {
@Override
protected RecyclerView.Adapter createAdapter() {
- return new SongAdapter(getActivity());
+ return new SongAdapter((ActionBarActivity) getActivity());
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/widget/PlayPauseDrawable.java b/app/src/main/java/com/kabouzeid/gramophone/ui/widget/PlayPauseDrawable.java
index dfb04926..1f478e4f 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/widget/PlayPauseDrawable.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/widget/PlayPauseDrawable.java
@@ -13,7 +13,6 @@ import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Rect;
-import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.Property;
import android.view.animation.DecelerateInterpolator;
@@ -45,8 +44,8 @@ public class PlayPauseDrawable extends Drawable {
private float width;
private float height;
- private float fallBackWidth;
- private float fallBackHeight;
+ private final float fallBackWidth;
+ private final float fallBackHeight;
private float progress;
private boolean isPlay;
diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/widget/SquareImageView.java b/app/src/main/java/com/kabouzeid/gramophone/ui/widget/SquareImageView.java
index 5726e3ac..88f2b896 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/ui/widget/SquareImageView.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/ui/widget/SquareImageView.java
@@ -5,7 +5,7 @@ import android.util.AttributeSet;
import android.widget.ImageView;
/**
- * Created by karim on 22.11.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class SquareImageView extends ImageView {
@@ -23,6 +23,7 @@ public class SquareImageView extends ImageView {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ //noinspection SuspiciousNameCombination
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java
index b2dbb15b..66439ea0 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java
@@ -1,7 +1,6 @@
package com.kabouzeid.gramophone.util;
import android.content.Context;
-import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
@@ -11,24 +10,19 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
- * Created by karim on 22.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public final class InternalStorageUtil {
- private static final String TAG = InternalStorageUtil.class.getSimpleName();
public static synchronized void writeObject(final Context context, final String key, final Object object) throws IOException {
- try {
- String tempFileName = "TEMP_" + key;
- FileOutputStream fos;
- fos = context.openFileOutput(tempFileName, Context.MODE_PRIVATE);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(object);
- oos.close();
- fos.close();
- renameAppFile(context, tempFileName, key);
- } catch (IOException e) {
- Log.e(TAG, "Writing Object to internal storage failed! Maybe the Object is not serializable?", e);
- }
+ String tempFileName = "TEMP_" + key;
+ FileOutputStream fos;
+ fos = context.openFileOutput(tempFileName, Context.MODE_PRIVATE);
+ ObjectOutputStream oos = new ObjectOutputStream(fos);
+ oos.writeObject(object);
+ oos.close();
+ fos.close();
+ renameAppFile(context, tempFileName, key);
}
public static synchronized void renameAppFile(final Context context, String originalFileName, String newFileName) {
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java
index 53b0e81d..628116a7 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java
@@ -24,7 +24,7 @@ import java.io.IOException;
import java.util.List;
/**
- * Created by karim on 29.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class MusicUtil {
public static final String TAG = MusicUtil.class.getSimpleName();
@@ -78,12 +78,11 @@ public class MusicUtil {
contentResolver.delete(ContentUris.withAppendedId(localUri, albumId), null, null);
}
- public static File getAlbumArtFile(Context context, String name)
- throws IOException {
- return new File(createAlbumArtDir(context), name + System.currentTimeMillis());
+ public static File getAlbumArtFile(String name) {
+ return new File(createAlbumArtDir(), name + System.currentTimeMillis());
}
- public static File createAlbumArtDir(Context paramContext) {
+ public static File createAlbumArtDir() {
File albumArtDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "/.albumart/");
if (!albumArtDir.exists()) {
albumArtDir.mkdirs();
@@ -141,7 +140,7 @@ public class MusicUtil {
cursor.moveToNext();
} catch (final SecurityException ex) {
cursor.moveToNext();
- } catch (NullPointerException e){
+ } catch (NullPointerException e) {
Log.e("MusicUtils", "Failed to find file " + name);
}
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java
index cc311647..a8fc6e88 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java
@@ -7,12 +7,12 @@ import android.media.audiofx.AudioEffect;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
+import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;
-import com.afollestad.materialdialogs.MaterialDialog;
import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.dialogs.PlayingQueueDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
-import com.kabouzeid.gramophone.helper.PlayingQueueDialogHelper;
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity;
@@ -21,7 +21,7 @@ import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity;
/**
- * Created by karim on 12.03.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class NavigationUtil {
public static void goToArtist(final Activity activity, final int artistId, final Pair[] sharedViews) {
@@ -34,7 +34,7 @@ public class NavigationUtil {
final Intent intent = new Intent(activity, ArtistDetailActivity.class);
intent.putExtra(AppKeys.E_ARTIST, artistId);
if (sharedViews != null) {
- ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
+ @SuppressWarnings("unchecked") ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
sharedViews
);
ActivityCompat.startActivity(activity, intent, optionsCompat.toBundle());
@@ -54,7 +54,7 @@ public class NavigationUtil {
final Intent intent = new Intent(activity, AlbumDetailActivity.class);
intent.putExtra(AppKeys.E_ALBUM, albumId);
if (sharedViews != null) {
- ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
+ @SuppressWarnings("unchecked") ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
sharedViews
);
ActivityCompat.startActivity(activity, intent, optionsCompat.toBundle());
@@ -71,7 +71,7 @@ public class NavigationUtil {
final Intent intent = new Intent(activity, PlaylistDetailActivity.class);
intent.putExtra(AppKeys.E_PLAYLIST, playlistId);
if (sharedViews != null) {
- ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
+ @SuppressWarnings("unchecked") ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
sharedViews
);
ActivityCompat.startActivity(activity, intent, optionsCompat.toBundle());
@@ -92,7 +92,7 @@ public class NavigationUtil {
((KabViewsDisableAble) activity).disableViews();
Intent intent = new Intent(activity, MusicControllerActivity.class);
if (sharedViews != null) {
- ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
+ @SuppressWarnings("unchecked") ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
sharedViews
);
ActivityCompat.startActivity(activity, intent, optionsCompat.toBundle());
@@ -105,10 +105,10 @@ public class NavigationUtil {
}
}
- public static void openPlayingQueueDialog(final Activity activity) {
- final MaterialDialog materialDialog = PlayingQueueDialogHelper.getDialog(activity);
- if (materialDialog != null) {
- materialDialog.show();
+ public static void openPlayingQueueDialog(final ActionBarActivity activity) {
+ PlayingQueueDialog dialog = PlayingQueueDialog.create();
+ if (dialog != null) {
+ dialog.show(activity.getSupportFragmentManager(), "PLAY_QUEUE");
} else {
Toast.makeText(activity, activity.getResources().getString(R.string.nothing_playing), Toast.LENGTH_SHORT).show();
}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java
index fc9ea5a7..b8d0e90d 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java
@@ -19,7 +19,7 @@ import java.util.ArrayList;
import java.util.List;
/**
- * Created by karim on 16.03.15.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class PlaylistsUtil {
public static final String MUSIC_ONLY_SELECTION = MediaStore.Audio.AudioColumns.IS_MUSIC + "=1"
@@ -57,7 +57,7 @@ public class PlaylistsUtil {
context.getContentResolver().delete(uri, null, null);
}
- public static void deletePlaylist(final Context context, final int playlistId) {
+ public static void deletePlaylist(final Context context, final long playlistId) {
final Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
String where = MediaStore.Audio.Playlists._ID + "=?";
String[] whereVal = {String.valueOf(playlistId)};
@@ -147,7 +147,6 @@ public class PlaylistsUtil {
Cursor c = context.getContentResolver().query(
MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId),
new String[]{BaseColumns._ID}, MUSIC_ONLY_SELECTION, null, null);
-
if (c != null) {
int count = 0;
if (c.moveToFirst()) {
@@ -156,7 +155,6 @@ public class PlaylistsUtil {
c.close();
return count;
}
-
return 0;
}
@@ -165,7 +163,7 @@ public class PlaylistsUtil {
playlistId, from, to);
}
- public static void renamePlaylist(final Context context, final int id, final String newName) {
+ public static void renamePlaylist(final Context context, final long id, final String newName) {
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Audio.PlaylistsColumns.NAME, newName);
context.getContentResolver().update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,
@@ -175,7 +173,7 @@ public class PlaylistsUtil {
App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED));
}
- public static String getNameForPlaylist(final Context context, final int id) {
+ public static String getNameForPlaylist(final Context context, final long id) {
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.PlaylistsColumns.NAME},
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 ef378a8a..1b13f77a 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java
@@ -1,10 +1,12 @@
package com.kabouzeid.gramophone.util;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import com.kabouzeid.gramophone.R;
+import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
public final class PreferenceUtils {
@@ -19,7 +21,7 @@ public final class PreferenceUtils {
public static final String ALBUM_SONG_SORT_ORDER = "album_song_sort_order";
public static final String SONG_SORT_ORDER = "song_sort_order";
public static final String ONLY_ON_WIFI = "auto_download_artist_images";
- public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "auto_download_artist_images";
+ // public static final String DOWNLOAD_MISSING_ARTIST_IMAGES = "auto_download_artist_images";
public static final String COLORED_ALBUM_FOOTERS = "colored_album_footers";
public static final String COLORED_NAVIGATION_BAR_ALBUM = "colored_navigation_bar_album";
public static final String COLORED_NAVIGATION_BAR_ARTIST = "colored_navigation_bar_artist";
@@ -31,13 +33,15 @@ public final class PreferenceUtils {
private static PreferenceUtils sInstance;
+ private final Context mContext;
private final SharedPreferences mPreferences;
public PreferenceUtils(final Context context) {
+ mContext = context;
mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
- public static final PreferenceUtils getInstance(final Context context) {
+ public static PreferenceUtils getInstance(final Context context) {
if (sInstance == null) {
sInstance = new PreferenceUtils(context.getApplicationContext());
}
@@ -55,30 +59,52 @@ public final class PreferenceUtils {
return R.style.Theme_MaterialMusic_Light;
}
- 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.putString(GENERAL_THEME, String.valueOf(value));
- editor.apply();
+ public int getThemeColorPrimary() {
+ return mPreferences.getInt("primary_color", mContext.getResources().getColor(R.color.indigo_500));
}
- public void setDefaultStartPage(final int value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(DEFAULT_START_PAGE, String.valueOf(value));
- editor.apply();
+ public int getThemeColorPrimaryDarker() {
+ return ColorChooserDialog.shiftColorDown(getThemeColorPrimary());
}
+ @SuppressLint("CommitPrefEdits")
+ public void setThemeColorPrimary(int color) {
+ mPreferences.edit().putInt("primary_color", color).commit();
+ }
+
+ public int getThemeColorAccent() {
+ return mPreferences.getInt("accent_color", mContext.getResources().getColor(R.color.pink_500));
+ }
+
+ @SuppressLint("CommitPrefEdits")
+ public void setThemeColorAccent(int color) {
+ mPreferences.edit().putInt("accent_color", color).commit();
+ }
+
+// 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.putString(GENERAL_THEME, String.valueOf(value));
+// editor.apply();
+// }
+//
+// public void setDefaultStartPage(final int value) {
+// final SharedPreferences.Editor editor = mPreferences.edit();
+// editor.putString(DEFAULT_START_PAGE, String.valueOf(value));
+// editor.apply();
+// }
+
public final int getDefaultStartPage() {
return Integer.parseInt(mPreferences.getString(DEFAULT_START_PAGE, "-1"));
}
@@ -97,81 +123,81 @@ public final class PreferenceUtils {
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 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 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) {
+ /*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 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 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, false);
}
- public void setPlaybackControllerBoxEnabled(final boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(PLAYBACK_CONTROLLER_BOX, value);
- editor.apply();
- }
+// public void setPlaybackControllerBoxEnabled(final boolean value) {
+// final SharedPreferences.Editor editor = mPreferences.edit();
+// editor.putBoolean(PLAYBACK_CONTROLLER_BOX, value);
+// editor.apply();
+// }
public final boolean transparentToolbar() {
return mPreferences.getBoolean(TRANSPARENT_TOOLBAR, false);
}
- public void setTransparentToolbar(final boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(TRANSPARENT_TOOLBAR, value);
- editor.apply();
- }
+// public void setTransparentToolbar(final boolean value) {
+// final SharedPreferences.Editor editor = mPreferences.edit();
+// editor.putBoolean(TRANSPARENT_TOOLBAR, value);
+// editor.apply();
+// }
- public final boolean downloadMissingArtistImages() {
- return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true);
- }
-
- public void setDownloadMissingArtistImages(final boolean value) {
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, value);
- editor.apply();
- }
+// public final boolean downloadMissingArtistImages() {
+// return mPreferences.getBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, true);
+// }
+//
+// public void setDownloadMissingArtistImages(final boolean value) {
+// final SharedPreferences.Editor editor = mPreferences.edit();
+// editor.putBoolean(DOWNLOAD_MISSING_ARTIST_IMAGES, value);
+// editor.apply();
+// }
private void setSortOrder(final String key, final String value) {
final SharedPreferences.Editor editor = mPreferences.edit();
@@ -179,52 +205,52 @@ public final class PreferenceUtils {
editor.apply();
}
- public void setArtistSortOrder(final String value) {
- setSortOrder(ARTIST_SORT_ORDER, value);
- }
-
+ // public void setArtistSortOrder(final String value) {
+// setSortOrder(ARTIST_SORT_ORDER, value);
+// }
+//
public final String getArtistSortOrder() {
return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z);
}
- public void setArtistSongSortOrder(final String value) {
- setSortOrder(ARTIST_SONG_SORT_ORDER, value);
- }
+// public void setArtistSongSortOrder(final String value) {
+// setSortOrder(ARTIST_SONG_SORT_ORDER, value);
+// }
public final String getArtistSongSortOrder() {
return mPreferences.getString(ARTIST_SONG_SORT_ORDER,
SortOrder.ArtistSongSortOrder.SONG_A_Z);
}
- public void setArtistAlbumSortOrder(final String value) {
- setSortOrder(ARTIST_ALBUM_SORT_ORDER, value);
- }
+// public void setArtistAlbumSortOrder(final String value) {
+// setSortOrder(ARTIST_ALBUM_SORT_ORDER, value);
+// }
public final String getArtistAlbumSortOrder() {
return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER,
SortOrder.ArtistAlbumSortOrder.ALBUM_A_Z);
}
- public void setAlbumSortOrder(final String value) {
- setSortOrder(ALBUM_SORT_ORDER, value);
- }
+// public void setAlbumSortOrder(final String value) {
+// setSortOrder(ALBUM_SORT_ORDER, value);
+// }
public final String getAlbumSortOrder() {
return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z);
}
- public void setAlbumSongSortOrder(final String value) {
- setSortOrder(ALBUM_SONG_SORT_ORDER, value);
- }
+// public void setAlbumSongSortOrder(final String value) {
+// setSortOrder(ALBUM_SONG_SORT_ORDER, value);
+// }
public final String getAlbumSongSortOrder() {
return mPreferences.getString(ALBUM_SONG_SORT_ORDER,
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST);
}
- public void setSongSortOrder(final String value) {
- setSortOrder(SONG_SORT_ORDER, value);
- }
+// public void setSongSortOrder(final String value) {
+// setSortOrder(SONG_SORT_ORDER, value);
+// }
public final String getSongSortOrder() {
return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java b/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java
index 160581ff..4ce904a6 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/SortOrder.java
@@ -29,127 +29,127 @@ public final class SortOrder {
/**
* Artist sort order entries.
*/
- public static interface ArtistSortOrder {
+ public interface ArtistSortOrder {
/* Artist sort order A-Z */
- public final static String ARTIST_A_Z = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER;
+ String ARTIST_A_Z = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER;
/* Artist sort order Z-A */
- public final static String ARTIST_Z_A = ARTIST_A_Z + " DESC";
+ String ARTIST_Z_A = ARTIST_A_Z + " DESC";
/* Artist sort order number of songs */
- public final static String ARTIST_NUMBER_OF_SONGS = MediaStore.Audio.Artists.NUMBER_OF_TRACKS
+ String ARTIST_NUMBER_OF_SONGS = MediaStore.Audio.Artists.NUMBER_OF_TRACKS
+ " DESC";
/* Artist sort order number of albums */
- public final static String ARTIST_NUMBER_OF_ALBUMS = MediaStore.Audio.Artists.NUMBER_OF_ALBUMS
+ String ARTIST_NUMBER_OF_ALBUMS = MediaStore.Audio.Artists.NUMBER_OF_ALBUMS
+ " DESC";
}
/**
* Album sort order entries.
*/
- public static interface AlbumSortOrder {
+ public interface AlbumSortOrder {
/* Album sort order A-Z */
- public final static String ALBUM_A_Z = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
+ String ALBUM_A_Z = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
/* Album sort order Z-A */
- public final static String ALBUM_Z_A = ALBUM_A_Z + " DESC";
+ String ALBUM_Z_A = ALBUM_A_Z + " DESC";
/* Album sort order songs */
- public final static String ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Albums.NUMBER_OF_SONGS
+ String ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Albums.NUMBER_OF_SONGS
+ " DESC";
/* Album sort order artist */
- public final static String ALBUM_ARTIST = MediaStore.Audio.Albums.ARTIST;
+ String ALBUM_ARTIST = MediaStore.Audio.Albums.ARTIST;
/* Album sort order year */
- public final static String ALBUM_YEAR = MediaStore.Audio.Albums.FIRST_YEAR + " DESC";
+ String ALBUM_YEAR = MediaStore.Audio.Albums.FIRST_YEAR + " DESC";
}
/**
* Song sort order entries.
*/
- public static interface SongSortOrder {
+ public interface SongSortOrder {
/* Song sort order A-Z */
- public final static String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
+ String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
/* Song sort order Z-A */
- public final static String SONG_Z_A = SONG_A_Z + " DESC";
+ String SONG_Z_A = SONG_A_Z + " DESC";
/* Song sort order artist */
- public final static String SONG_ARTIST = MediaStore.Audio.Media.ARTIST;
+ String SONG_ARTIST = MediaStore.Audio.Media.ARTIST;
/* Song sort order album */
- public final static String SONG_ALBUM = MediaStore.Audio.Media.ALBUM;
+ String SONG_ALBUM = MediaStore.Audio.Media.ALBUM;
/* Song sort order year */
- public final static String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC";
+ String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC";
/* Song sort order duration */
- public final static String SONG_DURATION = MediaStore.Audio.Media.DURATION + " DESC";
+ String SONG_DURATION = MediaStore.Audio.Media.DURATION + " DESC";
/* Song sort order date */
- public final static String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC";
+ String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC";
}
/**
* Album song sort order entries.
*/
- public static interface AlbumSongSortOrder {
+ public interface AlbumSongSortOrder {
/* Album song sort order A-Z */
- public final static String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
+ String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
/* Album song sort order Z-A */
- public final static String SONG_Z_A = SONG_A_Z + " DESC";
+ String SONG_Z_A = SONG_A_Z + " DESC";
/* Album song sort order track list */
- public final static String SONG_TRACK_LIST = MediaStore.Audio.Media.TRACK + ", "
+ String SONG_TRACK_LIST = MediaStore.Audio.Media.TRACK + ", "
+ MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
/* Album song sort order duration */
- public final static String SONG_DURATION = SongSortOrder.SONG_DURATION;
+ String SONG_DURATION = SongSortOrder.SONG_DURATION;
}
/**
* Artist song sort order entries.
*/
- public static interface ArtistSongSortOrder {
+ public interface ArtistSongSortOrder {
/* Artist song sort order A-Z */
- public final static String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
+ String SONG_A_Z = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
/* Artist song sort order Z-A */
- public final static String SONG_Z_A = SONG_A_Z + " DESC";
+ String SONG_Z_A = SONG_A_Z + " DESC";
/* Artist song sort order album */
- public final static String SONG_ALBUM = MediaStore.Audio.Media.ALBUM;
+ String SONG_ALBUM = MediaStore.Audio.Media.ALBUM;
/* Artist song sort order year */
- public final static String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC";
+ String SONG_YEAR = MediaStore.Audio.Media.YEAR + " DESC";
/* Artist song sort order duration */
- public final static String SONG_DURATION = MediaStore.Audio.Media.DURATION + " DESC";
+ String SONG_DURATION = MediaStore.Audio.Media.DURATION + " DESC";
/* Artist song sort order date */
- public final static String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC";
+ String SONG_DATE = MediaStore.Audio.Media.DATE_ADDED + " DESC";
}
/**
* Artist album sort order entries.
*/
- public static interface ArtistAlbumSortOrder {
+ public interface ArtistAlbumSortOrder {
/* Artist album sort order A-Z */
- public final static String ALBUM_A_Z = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
+ String ALBUM_A_Z = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
/* Artist album sort order Z-A */
- public final static String ALBUM_Z_A = ALBUM_A_Z + " DESC";
+ String ALBUM_Z_A = ALBUM_A_Z + " DESC";
/* Artist album sort order songs */
- public final static String ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Artists.Albums.NUMBER_OF_SONGS
+ String ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Artists.Albums.NUMBER_OF_SONGS
+ " DESC";
/* Artist album sort order year */
- public final static String ALBUM_YEAR = MediaStore.Audio.Artists.Albums.FIRST_YEAR
+ String ALBUM_YEAR = MediaStore.Audio.Artists.Albums.FIRST_YEAR
+ " DESC";
}
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 1160baff..7c71f69d 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java
@@ -4,18 +4,12 @@ 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.support.v4.content.ContextCompat;
import android.util.TypedValue;
import android.view.View;
import android.view.Window;
@@ -25,31 +19,30 @@ import android.view.inputmethod.InputMethodManager;
import com.kabouzeid.gramophone.R;
/**
- * Created by karim on 12.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class Util {
- private static int albumArtSize = 600;
- public static int resolveDrawable(Context context, int drawable) {
- TypedArray a = context.obtainStyledAttributes(new int[]{drawable});
- int resId = a.getResourceId(0, 0);
- a.recycle();
- return resId;
- }
+// public static int resolveDrawable(Context context, int drawable) {
+// TypedArray a = context.obtainStyledAttributes(new int[]{drawable});
+// int resId = a.getResourceId(0, 0);
+// a.recycle();
+// return resId;
+// }
- public static int resolveColor(Context context, int color) {
- TypedArray a = context.obtainStyledAttributes(new int[]{color});
- int resId = a.getColor(0, 0);
- a.recycle();
- return resId;
- }
+// public static int resolveColor(Context context, int color) {
+// TypedArray a = context.obtainStyledAttributes(new int[]{color});
+// int resId = a.getColor(0, 0);
+// a.recycle();
+// return resId;
+// }
- public static boolean isWindowTranslucent(Context context) {
- TypedArray a = context.obtainStyledAttributes(new int[]{android.R.attr.windowTranslucentStatus});
- boolean result = a.getBoolean(0, false);
- a.recycle();
- return result;
- }
+// public static boolean isWindowTranslucent(Context context) {
+// TypedArray a = context.obtainStyledAttributes(new int[]{android.R.attr.windowTranslucentStatus});
+// boolean result = a.getBoolean(0, false);
+// a.recycle();
+// return result;
+// }
public static int getActionBarSize(Context context) {
TypedValue typedValue = new TypedValue();
@@ -113,44 +106,43 @@ public class Util {
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
- public static final boolean isOnline(final Context context) {
- if (context == null) {
- return false;
- }
-
- boolean state = false;
- final boolean onlyOnWifi = PreferenceUtils.getInstance(context).autoDownloadOnlyOnWifi();
-
- /* Monitor network connections */
- final ConnectivityManager connectivityManager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
-
- /* Wi-Fi connection */
- final NetworkInfo wifiNetwork = connectivityManager
- .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- if (wifiNetwork != null) {
- state = wifiNetwork.isConnectedOrConnecting();
- }
-
- /* Mobile data connection */
- final NetworkInfo mbobileNetwork = connectivityManager
- .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
- if (mbobileNetwork != null) {
- if (!onlyOnWifi) {
- state = mbobileNetwork.isConnectedOrConnecting();
- }
- }
-
- /* Other networks */
- final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
- if (activeNetwork != null) {
- if (!onlyOnWifi) {
- state = activeNetwork.isConnectedOrConnecting();
- }
- }
-
- return state;
- }
+// public static boolean isOnline(final Context context) {
+// if (context == null)
+// return false;
+//
+// boolean state = false;
+// final boolean onlyOnWifi = PreferenceUtils.getInstance(context).autoDownloadOnlyOnWifi();
+//
+// /* Monitor network connections */
+// final ConnectivityManager connectivityManager = (ConnectivityManager) context
+// .getSystemService(Context.CONNECTIVITY_SERVICE);
+//
+// /* Wi-Fi connection */
+// final NetworkInfo wifiNetwork = connectivityManager
+// .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+// if (wifiNetwork != null) {
+// state = wifiNetwork.isConnectedOrConnecting();
+// }
+//
+// /* Mobile data connection */
+// final NetworkInfo mbobileNetwork = connectivityManager
+// .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
+// if (mbobileNetwork != null) {
+// if (!onlyOnWifi) {
+// state = mbobileNetwork.isConnectedOrConnecting();
+// }
+// }
+//
+// /* Other networks */
+// final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
+// if (activeNetwork != null) {
+// if (!onlyOnWifi) {
+// state = activeNetwork.isConnectedOrConnecting();
+// }
+// }
+//
+// return state;
+// }
public static String getFileSizeString(long sizeInBytes) {
long fileSizeInKB = sizeInBytes / 1024;
@@ -158,22 +150,23 @@ public class Util {
return fileSizeInMB + " MB";
}
- public static String getFilePathFromContentProviderUri(Context context, Uri uri) {
- String path = "";
- String[] projection = {MediaStore.MediaColumns.DATA};
- Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
- if (cursor == null) return null;
- int column_index = cursor.getColumnIndexOrThrow(projection[0]);
- if (cursor.moveToFirst()) {
- path = cursor.getString(column_index);
- }
- cursor.close();
- return path;
- }
-
- private static Bitmap getScaledBitmap(final Bitmap bitmap) {
- return Bitmap.createScaledBitmap(bitmap, albumArtSize, albumArtSize, false);
- }
+// public static String getFilePathFromContentProviderUri(Context context, Uri uri) {
+// String path = "";
+// String[] projection = {MediaStore.MediaColumns.DATA};
+// Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
+// if (cursor == null) return null;
+// int column_index = cursor.getColumnIndexOrThrow(projection[0]);
+// if (cursor.moveToFirst()) {
+// path = cursor.getString(column_index);
+// }
+// cursor.close();
+// return path;
+// }
+//
+// private static Bitmap getScaledBitmap(final Bitmap bitmap) {
+// int albumArtSize = 600;
+// return Bitmap.createScaledBitmap(bitmap, albumArtSize, albumArtSize, false);
+// }
public static void hideSoftKeyboard(Activity activity) {
if (activity != null) {
@@ -201,11 +194,11 @@ public class Util {
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
}
- public static Drawable getTintedDrawable(Resources res, @DrawableRes int drawableResId, int color) {
- Drawable drawable = res.getDrawable(drawableResId);
+ public static Drawable getTintedDrawable(Context context, @DrawableRes int drawableResId, int color) {
+ Drawable drawable = ContextCompat.getDrawable(context, drawableResId);
if (drawable != null) {
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
return drawable;
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
index 1385b306..de78166e 100644
--- a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
+++ b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java
@@ -13,7 +13,7 @@ import android.widget.ListView;
import android.widget.TextView;
/**
- * Created by karim on 06.12.14.
+ * @author Karim Abou Zeid (kabouzeid)
*/
public class ViewUtil {
public final static int DEFAULT_COLOR_ANIMATION_DURATION = 1000;
@@ -89,6 +89,7 @@ public class ViewUtil {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ //noinspection deprecation
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/CircleView.java b/app/src/main/java/com/kabouzeid/gramophone/views/CircleView.java
new file mode 100644
index 00000000..9e4064f7
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/views/CircleView.java
@@ -0,0 +1,105 @@
+package com.kabouzeid.gramophone.views;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+
+import com.kabouzeid.gramophone.R;
+
+public class CircleView extends FrameLayout {
+
+ private final Bitmap mCheck;
+ private final Paint paint;
+ private final Paint paintBorder;
+ private final int borderWidth;
+
+ public CircleView(Context context) {
+ this(context, null, 0);
+ }
+
+ public CircleView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ final int checkSize = (int) context.getResources().getDimension(R.dimen.circle_view_check);
+ mCheck = getResizedBitmap(BitmapFactory.decodeResource(context.getResources(),
+ R.drawable.ic_check), checkSize, checkSize);
+ borderWidth = (int) getResources().getDimension(R.dimen.circle_view_border);
+
+ paint = new Paint();
+ paint.setAntiAlias(true);
+
+ paintBorder = new Paint();
+ paintBorder.setAntiAlias(true);
+ paintBorder.setColor(Color.BLACK);
+
+ setWillNotDraw(false);
+ }
+
+ private static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
+ int width = bm.getWidth();
+ int height = bm.getHeight();
+ float scaleWidth = ((float) newWidth) / width;
+ float scaleHeight = ((float) newHeight) / height;
+ Matrix matrix = new Matrix();
+ matrix.postScale(scaleWidth, scaleHeight);
+ Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
+ bm.recycle();
+ return resizedBitmap;
+ }
+
+ @Override
+ public void setBackgroundColor(int color) {
+ paint.setColor(color);
+ requestLayout();
+ invalidate();
+ }
+
+ public void setBorderColor(int color) {
+ paintBorder.setColor(color);
+ requestLayout();
+ invalidate();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+ if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY) {
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = width;
+ if (heightMode == MeasureSpec.AT_MOST) {
+ height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec));
+ }
+ setMeasuredDimension(width, height);
+ } else {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ int canvasSize = canvas.getWidth();
+ if (canvas.getHeight() < canvasSize)
+ canvasSize = canvas.getHeight();
+
+ int circleCenter = (canvasSize - (borderWidth * 2)) / 2;
+ canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, ((canvasSize - (borderWidth * 2)) / 2) + borderWidth - 4.0f, paintBorder);
+ canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, ((canvasSize - (borderWidth * 2)) / 2) - 4.0f, paint);
+
+ if (isActivated()) {
+ final int offset = (canvasSize / 2) - (mCheck.getWidth() / 2);
+ canvas.drawBitmap(mCheck, offset, offset, null);
+ }
+ }
+}
diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicCheckBox.java b/app/src/main/java/com/kabouzeid/gramophone/views/DynamicCheckBox.java
new file mode 100644
index 00000000..3c9029cc
--- /dev/null
+++ b/app/src/main/java/com/kabouzeid/gramophone/views/DynamicCheckBox.java
@@ -0,0 +1,34 @@
+package com.kabouzeid.gramophone.views;
+
+import android.content.Context;
+import android.support.v7.internal.widget.TintCheckBox;
+import android.util.AttributeSet;
+
+import com.afollestad.materialdialogs.ThemeSingleton;
+import com.afollestad.materialdialogs.internal.MDTintHelper;
+
+/**
+ * @author Aidan Follestad (afollestad)
+ */
+public class DynamicCheckBox extends TintCheckBox {
+
+ public DynamicCheckBox(Context context) {
+ super(context);
+ init();
+ }
+
+ public DynamicCheckBox(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public DynamicCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ private void init() {
+ final int color = ThemeSingleton.get().positiveColor;
+ MDTintHelper.setTint(this, color);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/ic_check.png b/app/src/main/res/drawable-hdpi/ic_check.png
new file mode 100755
index 00000000..e8ff6cbc
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_check.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_drawer.png b/app/src/main/res/drawable-hdpi/ic_drawer.png
deleted file mode 100644
index c59f601c..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_drawer_about.png b/app/src/main/res/drawable-hdpi/ic_drawer_about.png
new file mode 100755
index 00000000..0a2cd5da
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_drawer_about.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_drawer_settings.png b/app/src/main/res/drawable-hdpi/ic_drawer_settings.png
new file mode 100755
index 00000000..77714742
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_drawer_settings.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
deleted file mode 100644
index f22e7139..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_more_vert_black_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_my_library_music_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_my_library_music_white_24dp.png
deleted file mode 100644
index 69091e54..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_my_library_music_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png
deleted file mode 100644
index b4bdbb55..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png
deleted file mode 100644
index 164385d0..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png and /dev/null 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
deleted file mode 100644
index 7f9e0a77..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_queue_music_black_24dp.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
deleted file mode 100644
index f9a8915f..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_check.png b/app/src/main/res/drawable-mdpi/ic_check.png
new file mode 100755
index 00000000..b609b9c7
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_check.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_drawer.png b/app/src/main/res/drawable-mdpi/ic_drawer.png
deleted file mode 100644
index 1ed2c56e..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_drawer_about.png b/app/src/main/res/drawable-mdpi/ic_drawer_about.png
new file mode 100755
index 00000000..f6782627
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_drawer_about.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_drawer_settings.png b/app/src/main/res/drawable-mdpi/ic_drawer_settings.png
new file mode 100755
index 00000000..b7526978
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_drawer_settings.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
deleted file mode 100644
index 991ad6c6..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_more_vert_black_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_my_library_music_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_my_library_music_white_24dp.png
deleted file mode 100644
index e40b417c..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_my_library_music_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png
deleted file mode 100644
index 026f3885..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png
deleted file mode 100644
index 8d1e433a..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png and /dev/null 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
deleted file mode 100644
index 8eb1f23a..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_queue_music_black_24dp.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
deleted file mode 100644
index fdcf657f..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v21/list_ripple_selector.xml b/app/src/main/res/drawable-v21/list_ripple_selector.xml
new file mode 100644
index 00000000..07078646
--- /dev/null
+++ b/app/src/main/res/drawable-v21/list_ripple_selector.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/list_ripple_selector_dark.xml b/app/src/main/res/drawable-v21/list_ripple_selector_dark.xml
new file mode 100644
index 00000000..538c3e83
--- /dev/null
+++ b/app/src/main/res/drawable-v21/list_ripple_selector_dark.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/notification_selector.xml b/app/src/main/res/drawable-v21/notification_selector.xml
index ada911a3..b8dfa68e 100644
--- a/app/src/main/res/drawable-v21/notification_selector.xml
+++ b/app/src/main/res/drawable-v21/notification_selector.xml
@@ -1,7 +1,7 @@
+ android:color="@color/grey_500">
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/rect_ripple_selector.xml b/app/src/main/res/drawable-v21/rect_ripple_selector.xml
index aab8a0b6..38c78380 100644
--- a/app/src/main/res/drawable-v21/rect_ripple_selector.xml
+++ b/app/src/main/res/drawable-v21/rect_ripple_selector.xml
@@ -1,9 +1,6 @@
+ android:color="?android:colorControlHighlight">
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/rect_ripple_selector_dark.xml b/app/src/main/res/drawable-v21/rect_ripple_selector_dark.xml
index 7d597b4c..8ad440dd 100644
--- a/app/src/main/res/drawable-v21/rect_ripple_selector_dark.xml
+++ b/app/src/main/res/drawable-v21/rect_ripple_selector_dark.xml
@@ -1,9 +1,6 @@
+ android:color="#333333">
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/rect_selector.xml b/app/src/main/res/drawable-v21/rect_selector.xml
deleted file mode 100644
index b60d1e48..00000000
--- a/app/src/main/res/drawable-v21/rect_selector.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/rect_selector_dark.xml b/app/src/main/res/drawable-v21/rect_selector_dark.xml
deleted file mode 100644
index 70f5f273..00000000
--- a/app/src/main/res/drawable-v21/rect_selector_dark.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/round_ripple_selector.xml b/app/src/main/res/drawable-v21/round_ripple_selector.xml
index 622a85b9..f5688ca1 100644
--- a/app/src/main/res/drawable-v21/round_ripple_selector.xml
+++ b/app/src/main/res/drawable-v21/round_ripple_selector.xml
@@ -1,9 +1,7 @@
-
-
+
-
-
+ android:drawable="@drawable/round_ripple_selector_mask" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/round_ripple_selector_dark.xml b/app/src/main/res/drawable-v21/round_ripple_selector_dark.xml
index 8e87f190..ec08d4ab 100644
--- a/app/src/main/res/drawable-v21/round_ripple_selector_dark.xml
+++ b/app/src/main/res/drawable-v21/round_ripple_selector_dark.xml
@@ -1,9 +1,6 @@
+ android:color="?android:colorControlHighlight">
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/round_ripple_selector_mask.xml b/app/src/main/res/drawable-v21/round_ripple_selector_mask.xml
new file mode 100644
index 00000000..696455fc
--- /dev/null
+++ b/app/src/main/res/drawable-v21/round_ripple_selector_mask.xml
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/round_selector.xml b/app/src/main/res/drawable-v21/round_selector.xml
deleted file mode 100644
index d1809684..00000000
--- a/app/src/main/res/drawable-v21/round_selector.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/round_selector_dark.xml b/app/src/main/res/drawable-v21/round_selector_dark.xml
deleted file mode 100644
index fc2932f9..00000000
--- a/app/src/main/res/drawable-v21/round_selector_dark.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xhdpi/ic_check.png b/app/src/main/res/drawable-xhdpi/ic_check.png
new file mode 100755
index 00000000..bd66325c
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_check.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png
deleted file mode 100644
index a5fa74de..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer_about.png b/app/src/main/res/drawable-xhdpi/ic_drawer_about.png
new file mode 100755
index 00000000..c21ab903
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_drawer_about.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer_settings.png b/app/src/main/res/drawable-xhdpi/ic_drawer_settings.png
new file mode 100755
index 00000000..7ffb6dde
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_drawer_settings.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
deleted file mode 100644
index 0db5dc3b..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_more_vert_black_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_my_library_music_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_my_library_music_white_24dp.png
deleted file mode 100644
index e8a980e6..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_my_library_music_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png
deleted file mode 100644
index 14b6d17d..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png
deleted file mode 100644
index a55d1992..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png and /dev/null 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
deleted file mode 100644
index ab461b38..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_queue_music_black_24dp.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
deleted file mode 100644
index 12e5d100..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_check.png b/app/src/main/res/drawable-xxhdpi/ic_check.png
new file mode 100755
index 00000000..b40210f1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_check.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/app/src/main/res/drawable-xxhdpi/ic_drawer.png
deleted file mode 100644
index 9c4685d6..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer_about.png b/app/src/main/res/drawable-xxhdpi/ic_drawer_about.png
new file mode 100755
index 00000000..5a87e481
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_drawer_about.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer_settings.png b/app/src/main/res/drawable-xxhdpi/ic_drawer_settings.png
new file mode 100755
index 00000000..7cfd7f4d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_drawer_settings.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
deleted file mode 100644
index d32453da..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_more_vert_black_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_my_library_music_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_my_library_music_white_24dp.png
deleted file mode 100644
index d11ac14e..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_my_library_music_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png
deleted file mode 100644
index 72dfa9fa..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png
deleted file mode 100644
index 043acd80..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.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
deleted file mode 100644
index 19f50ad1..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_queue_music_black_24dp.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
deleted file mode 100644
index 6bb8f6e0..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png and /dev/null 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
deleted file mode 100644
index 037b6f11..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_more_vert_black_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_my_library_music_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_my_library_music_white_24dp.png
deleted file mode 100644
index 7e68677d..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_my_library_music_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png
deleted file mode 100755
index dd4bfdba..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png
deleted file mode 100755
index 7cc00847..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png and /dev/null 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
deleted file mode 100644
index 5d41485c..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_queue_music_black_24dp.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
deleted file mode 100644
index 97e9ca94..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png and /dev/null differ
diff --git a/app/src/main/res/drawable/list_activated.xml b/app/src/main/res/drawable/list_activated.xml
new file mode 100644
index 00000000..1b9ebe6e
--- /dev/null
+++ b/app/src/main/res/drawable/list_activated.xml
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_activated_dark.xml b/app/src/main/res/drawable/list_activated_dark.xml
new file mode 100644
index 00000000..1c431df7
--- /dev/null
+++ b/app/src/main/res/drawable/list_activated_dark.xml
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_divider.xml b/app/src/main/res/drawable/list_divider.xml
deleted file mode 100644
index aad60423..00000000
--- a/app/src/main/res/drawable/list_divider.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_item_activated.xml b/app/src/main/res/drawable/list_item_activated.xml
deleted file mode 100755
index 1fd2fcde..00000000
--- a/app/src/main/res/drawable/list_item_activated.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/list_item_activated_dark.xml b/app/src/main/res/drawable/list_item_activated_dark.xml
deleted file mode 100755
index c4018240..00000000
--- a/app/src/main/res/drawable/list_item_activated_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 b488c3b3..45ab4502 100755
--- a/app/src/main/res/drawable/list_selector.xml
+++ b/app/src/main/res/drawable/list_selector.xml
@@ -1,7 +1,5 @@
-
-
-
-
-
-
+
+
+
+
\ 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 52b6c885..862b9ce8 100755
--- a/app/src/main/res/drawable/list_selector_dark.xml
+++ b/app/src/main/res/drawable/list_selector_dark.xml
@@ -1,7 +1,5 @@
-
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rect_selected.xml b/app/src/main/res/drawable/rect_selected.xml
index e874d43b..105413e5 100644
--- a/app/src/main/res/drawable/rect_selected.xml
+++ b/app/src/main/res/drawable/rect_selected.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rect_selected_dark.xml b/app/src/main/res/drawable/rect_selected_dark.xml
index 431ac349..ea26e583 100644
--- a/app/src/main/res/drawable/rect_selected_dark.xml
+++ b/app/src/main/res/drawable/rect_selected_dark.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_selected.xml b/app/src/main/res/drawable/round_selected.xml
index 190dd7df..1b25273c 100644
--- a/app/src/main/res/drawable/round_selected.xml
+++ b/app/src/main/res/drawable/round_selected.xml
@@ -1,5 +1,5 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_selected_dark.xml b/app/src/main/res/drawable/round_selected_dark.xml
index 33405edb..57f568c9 100644
--- a/app/src/main/res/drawable/round_selected_dark.xml
+++ b/app/src/main/res/drawable/round_selected_dark.xml
@@ -1,5 +1,5 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_selector.xml b/app/src/main/res/drawable/round_selector.xml
index b12bc490..a12a0b25 100644
--- a/app/src/main/res/drawable/round_selector.xml
+++ b/app/src/main/res/drawable/round_selector.xml
@@ -1,7 +1,4 @@
-
-
-
+
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_selector_dark.xml b/app/src/main/res/drawable/round_selector_dark.xml
index 8eaa1e81..149dc119 100644
--- a/app/src/main/res/drawable/round_selector_dark.xml
+++ b/app/src/main/res/drawable/round_selector_dark.xml
@@ -1,7 +1,4 @@
-
-
-
+
-
-
+
\ 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 e35c29ed..c714d219 100644
--- a/app/src/main/res/layout-land/activity_music_controller.xml
+++ b/app/src/main/res/layout-land/activity_music_controller.xml
@@ -1,14 +1,14 @@
-
+
+ android:orientation="horizontal">
+ android:transitionName="@string/transition_album_cover"
+ tools:ignore="ContentDescription,UnusedAttribute" />
+ android:scaleType="centerCrop"
+ tools:ignore="ContentDescription" />
+ android:background="@drawable/shadow_up" />
+ android:orientation="horizontal"
+ tools:ignore="RtlHardcoded">
+ android:textSize="16sp"
+ tools:ignore="RtlHardcoded" />
+ android:textSize="16sp"
+ tools:ignore="RtlHardcoded" />
@@ -78,15 +83,15 @@
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="?default_bar_color"
- android:orientation="vertical"
- >
+ android:orientation="vertical">
+ android:transitionName="@string/transition_album_text"
+ tools:ignore="UnusedAttribute">
+ android:textColor="?attr/title_text_color" />
+ android:textColor="?attr/caption_text_color" />
@@ -112,10 +117,11 @@
android:id="@+id/media_controller_placeholder"
android:layout_width="match_parent"
android:layout_height="88dp"
- android:layout_alignParentBottom="true"
+ android:layout_gravity="bottom"
android:layout_margin="16dp"
android:background="?attr/music_controller_container_color"
- android:elevation="1dp">
+ android:elevation="1dp"
+ tools:ignore="UnusedAttribute">
@@ -128,13 +134,13 @@
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_margin="16dp"
- android:background="?attr/music_controller_container_color">
+ android:background="?attr/music_controller_container_color"
+ tools:ignore="ContentDescription">
+ android:layout_centerInParent="true" />
+ android:src="@drawable/ic_skip_previous_white_48dp" />
+ android:src="@drawable/ic_skip_next_white_48dp" />
+ android:src="@drawable/ic_repeat_grey600_48dp" />
+ android:src="@drawable/ic_shuffle_grey600_48dp" />
@@ -194,8 +208,8 @@
android:elevation="1dp"
android:padding="0dp"
android:progressTint="@color/materialmusic_accent_color"
- android:thumbTint="@color/materialmusic_accent_color_darker"/>
-
+ android:thumbTint="@color/materialmusic_accent_color_darker"
+ tools:ignore="UnusedAttribute" />
@@ -204,20 +218,22 @@
+ android:background="@android:color/transparent"
+ tools:ignore="ContentDescription" />
+ android:background="@android:color/transparent" />
+
-
+
diff --git a/app/src/main/res/layout-v21/notification_playing.xml b/app/src/main/res/layout-v21/notification_playing.xml
index d2e06f2f..2baa5969 100644
--- a/app/src/main/res/layout-v21/notification_playing.xml
+++ b/app/src/main/res/layout-v21/notification_playing.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:layout_height="64dp">
+
+
+ android:layout_height="wrap_content"
+ android:layout_gravity="fill_vertical"
+ android:layout_weight="1"
+ android:gravity="center_vertical"
+ android:minHeight="@dimen/notification_big_icon_height"
+ android:orientation="vertical"
+ android:paddingBottom="@dimen/notification_info_container_padding_bottom"
+ android:paddingStart="@dimen/notification_info_container_padding_left">
-
-
-
+ android:singleLine="true"
+ android:textAppearance="@style/Theme.MaterialMusic.Notification.Title" />
-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-v21/notification_playing_expanded.xml b/app/src/main/res/layout-v21/notification_playing_expanded.xml
index dff05784..ba3172c2 100644
--- a/app/src/main/res/layout-v21/notification_playing_expanded.xml
+++ b/app/src/main/res/layout-v21/notification_playing_expanded.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:layout_height="128dp"
+ tools:ignore="ContentDescription">
+ android:scaleType="centerCrop" />
+ android:src="@drawable/ic_close_white_24dp" />
+ android:textAppearance="@style/Theme.MaterialMusic.Notification.Title" />
+ android:textAppearance="@style/Theme.MaterialMusic.Notification" />
+ android:textAppearance="@style/Theme.MaterialMusic.Notification" />
+ android:src="@drawable/ic_skip_previous_white_48dp" />
+ android:src="@drawable/ic_play_arrow_white_48dp" />
+ android:src="@drawable/ic_skip_next_white_48dp" />
+
+ android:layout_toEndOf="@+id/album_art"
+ android:background="@drawable/notification_template_divider_media" />
diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml
index 367a7b9d..4a21af2e 100644
--- a/app/src/main/res/layout/activity_album_detail.xml
+++ b/app/src/main/res/layout/activity_album_detail.xml
@@ -1,7 +1,7 @@
-
+
+ android:transitionName="@string/transition_album_cover"
+ tools:ignore="ContentDescription,UnusedAttribute" />
+ android:background="?android:attr/colorBackground" />
+ android:scrollbars="none" />
+ android:textColor="?attr/title_text_color"
+ tools:ignore="UnusedAttribute" />
+ android:background="@android:color/transparent" />
@@ -62,19 +64,20 @@
android:id="@+id/statusBar"
android:layout_width="match_parent"
android:layout_height="@dimen/statusMargin"
- android:background="@android:color/transparent"/>
+ android:background="@android:color/transparent" />
+ android:background="@android:color/transparent" />
-
+ tools:ignore="RtlHardcoded" />
+
+
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 928b37bb..cdaef626 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,5 @@
-
+ android:src="@drawable/default_album_art" />
+ android:textColor="@color/white" />
@@ -67,7 +67,7 @@
android:fontFamily="sans-serif"
android:singleLine="true"
android:text="@string/album_artist"
- android:textAppearance="@style/TextAppearance.AppCompat.Body2"/>
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
@@ -146,16 +146,17 @@
+ android:gravity="start|left|top"
+ android:background="#00000000"
+ tools:ignore="RtlHardcoded" />
+ android:src="@drawable/ic_done_white_24dp"
+ tools:ignore="RtlHardcoded" />
diff --git a/app/src/main/res/layout/activity_artist_detail.xml b/app/src/main/res/layout/activity_artist_detail.xml
index ee0f3e5c..b45f778c 100644
--- a/app/src/main/res/layout/activity_artist_detail.xml
+++ b/app/src/main/res/layout/activity_artist_detail.xml
@@ -1,7 +1,7 @@
-
+
+ android:transitionName="@string/transition_artist_image"
+ tools:ignore="ContentDescription,UnusedAttribute" />
+ android:background="?android:attr/colorBackground" />
+ android:scrollbars="none" />
+ android:textColor="?attr/title_text_color"
+ tools:ignore="UnusedAttribute" />
+ android:background="@android:color/transparent" />
@@ -62,19 +64,22 @@
android:id="@+id/statusBar"
android:layout_width="match_parent"
android:layout_height="@dimen/statusMargin"
- android:background="@android:color/transparent"/>
+ android:background="@android:color/transparent"
+ tools:ignore="ContentDescription" />
+ android:background="@android:color/transparent" />
+
-
+ tools:ignore="RtlHardcoded" />
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index cda0740c..c94c9c6c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,13 +1,11 @@
-
-
+ android:clipToPadding="false" />
+ android:background="?attr/colorPrimary"
+ tools:ignore="ContentDescription" />
+ android:textSize="20sp"
+ tools:ignore="RtlHardcoded" />
+
+ app:pstsTabPaddingLeftRight="8dp"
+ tools:ignore="NewApi,RtlSymmetry" />
+ android:background="@drawable/shadow_down" />
+ android:layout_gravity="end|right|bottom"
+ android:fitsSystemWindows="true"
+ tools:ignore="RtlHardcoded">
+ android:layout_margin="16dp" />
@@ -95,7 +97,8 @@
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
- tools:layout="@layout/fragment_navigation_drawer"/>
+ tools:layout="@layout/fragment_navigation_drawer" />
+
diff --git a/app/src/main/res/layout/activity_music_controller.xml b/app/src/main/res/layout/activity_music_controller.xml
index a27d13b8..d44efb9f 100644
--- a/app/src/main/res/layout/activity_music_controller.xml
+++ b/app/src/main/res/layout/activity_music_controller.xml
@@ -1,9 +1,9 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context="com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity$PlaceholderFragment">
+ android:transitionName="@string/transition_album_cover"
+ tools:ignore="UnusedAttribute" />
+
+ android:layout_height="@dimen/statusMargin" />
+
+ android:layout_height="?actionBarSize" />
+ android:layout_alignBottom="@+id/dummy_toolbar" />
+ android:layout_alignTop="@+id/progress_container" />
+ android:textStyle="bold"
+ tools:ignore="RtlHardcoded" />
+ android:textSize="16sp"
+ tools:ignore="RtlHardcoded" />
@@ -87,7 +92,8 @@
android:paddingLeft="72dp"
android:paddingRight="72dp"
android:paddingTop="16dp"
- android:transitionName="@string/transition_album_text">
+ android:transitionName="@string/transition_album_text"
+ tools:ignore="UnusedAttribute">
+ android:textColor="?attr/title_text_color" />
+ android:textColor="?attr/caption_text_color" />
@@ -116,7 +122,8 @@
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_margin="16dp"
- android:background="?music_controller_container_color">
+ android:background="?music_controller_container_color"
+ tools:ignore="ContentDescription">
+ android:src="@drawable/ic_skip_previous_white_48dp" />
+ android:src="@drawable/ic_skip_next_white_48dp" />
+ android:src="@drawable/ic_repeat_grey600_48dp" />
+ android:src="@drawable/ic_shuffle_grey600_48dp" />
+ android:layout_centerInParent="true" />
@@ -177,7 +192,8 @@
android:id="@+id/progress_slider"
style="@style/MusicProgressSlider"
android:layout_above="@+id/footer"
- android:elevation="2dp"/>
+ android:elevation="2dp"
+ tools:ignore="UnusedAttribute" />
+ android:background="@android:color/transparent"
+ tools:ignore="ContentDescription" />
+ android:background="@android:color/transparent" />
+
diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml
index eb3dc367..237e50b7 100644
--- a/app/src/main/res/layout/activity_playlist_detail.xml
+++ b/app/src/main/res/layout/activity_playlist_detail.xml
@@ -1,5 +1,5 @@
-
@@ -11,7 +11,7 @@
+ android:background="?colorPrimary" />
+ android:scrollbars="vertical" />
+ android:layout_gravity="right|bottom|end"
+ android:fitsSystemWindows="true"
+ tools:ignore="RtlHardcoded">
+ android:layout_margin="16dp" />
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_preferences.xml b/app/src/main/res/layout/activity_preferences.xml
index 3dc083f4..b2bdfe69 100644
--- a/app/src/main/res/layout/activity_preferences.xml
+++ b/app/src/main/res/layout/activity_preferences.xml
@@ -8,10 +8,11 @@
+ android:background="?colorPrimary" />
+ android:layout_height="match_parent" />
+
diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml
index ef6025f1..0a11a8b0 100644
--- a/app/src/main/res/layout/activity_search.xml
+++ b/app/src/main/res/layout/activity_search.xml
@@ -1,5 +1,4 @@
-
+ app:elevation="@dimen/toolbar_elevation" />
+ android:background="@drawable/shadow_down" />
+ 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 eca27e7f..700a8c9e 100644
--- a/app/src/main/res/layout/activity_song_tag_editor.xml
+++ b/app/src/main/res/layout/activity_song_tag_editor.xml
@@ -1,6 +1,5 @@
-
+ android:src="@drawable/default_album_art" />
+ android:textColor="@color/white" />
+ android:textColor="@color/white" />
@@ -81,7 +80,7 @@
android:fontFamily="sans-serif"
android:singleLine="true"
android:text="@string/artist"
- android:textAppearance="@style/TextAppearance.AppCompat.Body2"/>
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:textColor="?attr/title_text_color" />
@@ -187,16 +186,17 @@
+ android:layout_gravity="start|left|top"
+ android:background="#00000000"
+ tools:ignore="RtlHardcoded" />
+ android:src="@drawable/ic_done_white_24dp"
+ tools:ignore="RtlHardcoded" />
diff --git a/app/src/main/res/layout/artist_detail_header.xml b/app/src/main/res/layout/artist_detail_header.xml
index d65138d2..8182109c 100644
--- a/app/src/main/res/layout/artist_detail_header.xml
+++ b/app/src/main/res/layout/artist_detail_header.xml
@@ -1,7 +1,7 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ android:scrollbars="none" />
+ android:background="?separator_color" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_color_chooser.xml b/app/src/main/res/layout/dialog_color_chooser.xml
new file mode 100644
index 00000000..7cce4698
--- /dev/null
+++ b/app/src/main/res/layout/dialog_color_chooser.xml
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_empty_frame.xml b/app/src/main/res/layout/dialog_empty_frame.xml
deleted file mode 100644
index a938862c..00000000
--- a/app/src/main/res/layout/dialog_empty_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_file_details.xml b/app/src/main/res/layout/dialog_file_details.xml
index 348e6899..8ee31e93 100644
--- a/app/src/main/res/layout/dialog_file_details.xml
+++ b/app/src/main/res/layout/dialog_file_details.xml
@@ -1,9 +1,10 @@
-
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ tools:ignore="NewApi,RtlSymmetry">
-
+ android:textSize="16sp" />
-
+ android:textSize="16sp" />
-
+ android:textSize="16sp" />
-
+ android:textSize="16sp" />
-
+ android:textSize="16sp" />
-
+ android:textSize="16sp" />
+ android:textSize="16sp" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_playlist.xml b/app/src/main/res/layout/dialog_playlist.xml
index 45292f5e..c576f1d1 100644
--- a/app/src/main/res/layout/dialog_playlist.xml
+++ b/app/src/main/res/layout/dialog_playlist.xml
@@ -9,4 +9,4 @@
app:drag_start_mode="onLongPress"
app:float_alpha="0.5"
app:max_drag_scroll_speed="2"
- app:use_default_controller="true"/>
+ app:use_default_controller="true" />
diff --git a/app/src/main/res/layout/fragment_album_view.xml b/app/src/main/res/layout/fragment_album_view.xml
index 32c27895..47b18e91 100644
--- a/app/src/main/res/layout/fragment_album_view.xml
+++ b/app/src/main/res/layout/fragment_album_view.xml
@@ -10,7 +10,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
- android:scrollbars="vertical"/>
+ android:scrollbars="vertical" />
+
diff --git a/app/src/main/res/layout/fragment_artist_view.xml b/app/src/main/res/layout/fragment_artist_view.xml
index 2050d5b9..aafbad23 100644
--- a/app/src/main/res/layout/fragment_artist_view.xml
+++ b/app/src/main/res/layout/fragment_artist_view.xml
@@ -10,5 +10,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
- android:scrollbars="vertical"/>
+ android:scrollbars="vertical" />
+
diff --git a/app/src/main/res/layout/fragment_drawer.xml b/app/src/main/res/layout/fragment_drawer.xml
deleted file mode 100644
index ce354664..00000000
--- a/app/src/main/res/layout/fragment_drawer.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/layout/fragment_navigation_drawer.xml b/app/src/main/res/layout/fragment_navigation_drawer.xml
index 47ef5bab..dcbd1fb9 100644
--- a/app/src/main/res/layout/fragment_navigation_drawer.xml
+++ b/app/src/main/res/layout/fragment_navigation_drawer.xml
@@ -1,5 +1,4 @@
-
+ android:src="@drawable/default_album_art"
+ tools:ignore="ContentDescription,UnusedAttribute" />
+ android:background="@drawable/shadow_up" />
+ android:textSize="14sp" />
+ android:textSize="14sp" />
+
+ android:soundEffectsEnabled="true" />
-
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:clipToPadding="false" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_place_holder.xml b/app/src/main/res/layout/fragment_place_holder.xml
deleted file mode 100644
index 193fba73..00000000
--- a/app/src/main/res/layout/fragment_place_holder.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
diff --git a/app/src/main/res/layout/fragment_playlist_view.xml b/app/src/main/res/layout/fragment_playlist_view.xml
index 7af63040..7f7fe927 100644
--- a/app/src/main/res/layout/fragment_playlist_view.xml
+++ b/app/src/main/res/layout/fragment_playlist_view.xml
@@ -12,5 +12,6 @@
android:clipToPadding="false"
android:dividerHeight="0px"
android:divider="@null"
- android:scrollbars="vertical"/>
+ android:scrollbars="vertical" />
+
diff --git a/app/src/main/res/layout/fragment_recyclerview.xml b/app/src/main/res/layout/fragment_recyclerview.xml
deleted file mode 100644
index 6ad3c87c..00000000
--- a/app/src/main/res/layout/fragment_recyclerview.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/app/src/main/res/layout/fragment_songview.xml b/app/src/main/res/layout/fragment_songview.xml
index e0de623a..ab75f8ff 100644
--- a/app/src/main/res/layout/fragment_songview.xml
+++ b/app/src/main/res/layout/fragment_songview.xml
@@ -13,5 +13,6 @@
android:clipToPadding="false"
android:dividerHeight="0px"
android:divider="@null"
- android:scrollbars="vertical"/>
+ android:scrollbars="vertical" />
+
diff --git a/app/src/main/res/layout/griditem_color_chooser.xml b/app/src/main/res/layout/griditem_color_chooser.xml
new file mode 100644
index 00000000..5b37db05
--- /dev/null
+++ b/app/src/main/res/layout/griditem_color_chooser.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_grid_album.xml b/app/src/main/res/layout/item_grid_album.xml
index 9bfe85f5..706bd7e6 100644
--- a/app/src/main/res/layout/item_grid_album.xml
+++ b/app/src/main/res/layout/item_grid_album.xml
@@ -1,7 +1,7 @@
-
+ android:orientation="vertical"
+ tools:ignore="UnusedAttribute,UselessParent">
+ android:transitionName="@string/transition_album_cover" />
+ android:textColor="?title_text_color" />
+ 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 1a890b23..4cdda2e7 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 @@
-
@@ -18,7 +19,8 @@
android:layout_width="104dp"
android:layout_height="104dp"
android:scaleType="centerCrop"
- android:transitionName="@string/transition_album_cover"/>
+ android:transitionName="@string/transition_album_cover"
+ tools:ignore="UnusedAttribute" />
+ android:transitionName="@string/transition_album_text"
+ tools:ignore="UnusedAttribute">
+ android:textSize="14sp" />
-
-
+ android:textSize="12sp" />
+
+
+
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 730bb71a..c4783981 100644
--- a/app/src/main/res/layout/item_list_album_song.xml
+++ b/app/src/main/res/layout/item_list_album_song.xml
@@ -1,18 +1,18 @@
-
-
+ android:paddingStart="16dp"
+ tools:ignore="RtlSymmetry">
+ android:textColor="?title_text_color" />
+ android:textColor="?title_text_color" />
+ android:textColor="?caption_text_color" />
+ android:layout_marginRight="2dp" />
+ android:layout_marginStart="72dp"
+ android:background="?separator_color" />
\ 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 1d85a37d..2653c79c 100644
--- a/app/src/main/res/layout/item_list_artist.xml
+++ b/app/src/main/res/layout/item_list_artist.xml
@@ -1,11 +1,10 @@
+ android:layout_width="match_parent"
+ android:layout_height="72dp"
+ android:background="?rect_selector">
-
+ android:scaleType="centerCrop" />
+ android:textColor="?title_text_color" />
+ android:textColor="?caption_text_color" />
@@ -56,5 +55,7 @@
android:layout_height="1dp"
android:layout_gravity="bottom"
android:layout_marginLeft="72dp"
- android:background="?separator_color"/>
+ android:layout_marginStart="72dp"
+ android:background="?separator_color" />
+
\ 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 a832f83f..194757cc 100644
--- a/app/src/main/res/layout/item_list_artist_song.xml
+++ b/app/src/main/res/layout/item_list_artist_song.xml
@@ -1,15 +1,16 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="72dp">
-
+ android:paddingLeft="16dp"
+ android:paddingStart="16dp">
+ android:scaleType="centerCrop" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
+ android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
+ android:layout_marginRight="2dp"
+ android:layout_marginEnd="2dp"
+ tools:ignore="ContentDescription" />
@@ -61,5 +64,6 @@
android:layout_height="1dp"
android:layout_gravity="bottom"
android:layout_marginLeft="72dp"
- android:background="?separator_color"/>
+ android:layout_marginStart="72dp"
+ android:background="?separator_color" />
\ 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 6868eb24..a1183495 100644
--- a/app/src/main/res/layout/item_list_playlist.xml
+++ b/app/src/main/res/layout/item_list_playlist.xml
@@ -1,15 +1,16 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="64dp"
+ android:background="?rect_selector">
-
+ android:paddingLeft="16dp"
+ android:paddingStart="16dp">
+ tools:ignore="ContentDescription" />
+ android:textColor="?title_text_color" />
+ android:layout_marginRight="2dp"
+ android:layout_marginEnd="2dp"
+ tools:ignore="ContentDescription" />
@@ -49,5 +52,7 @@
android:layout_height="1dp"
android:layout_gravity="bottom"
android:layout_marginLeft="72dp"
- android:background="?separator_color"/>
+ android:layout_marginStart="72dp"
+ android:background="?separator_color" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list_playlist_song.xml b/app/src/main/res/layout/item_list_playlist_song.xml
index cc9eab18..ff4ee99d 100644
--- a/app/src/main/res/layout/item_list_playlist_song.xml
+++ b/app/src/main/res/layout/item_list_playlist_song.xml
@@ -1,11 +1,11 @@
-
+ tools:ignore="ContentDescription">
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:layout_marginEnd="-8dp" />
+ android:layout_gravity="center_vertical" />
+
\ 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 5bd2ed6a..c3517968 100644
--- a/app/src/main/res/layout/item_list_search.xml
+++ b/app/src/main/res/layout/item_list_search.xml
@@ -1,11 +1,12 @@
-
+ android:paddingLeft="16dp"
+ android:paddingStart="16dp">
+ android:scaleType="centerCrop" />
+ android:textColor="?title_text_color" />
+ android:textColor="?caption_text_color" />
+
+ android:layout_marginRight="2dp"
+ android:layout_marginEnd="2dp"
+ tools:ignore="ContentDescription" />
+
\ 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 8df3f9d5..41efa77c 100644
--- a/app/src/main/res/layout/item_list_song.xml
+++ b/app/src/main/res/layout/item_list_song.xml
@@ -1,6 +1,6 @@
-
@@ -10,7 +10,8 @@
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal"
- android:paddingLeft="16dp">
+ android:paddingLeft="16dp"
+ android:paddingStart="16dp">
+ android:scaleType="centerCrop" />
+ android:textColor="?title_text_color" />
+ android:textColor="?caption_text_color" />
+ android:layout_marginRight="2dp"
+ android:layout_marginEnd="2dp"
+ tools:ignore="ContentDescription" />
+
+ android:visibility="gone" />
+ android:layout_marginStart="72dp"
+ android:background="?separator_color" />
+
\ 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 d5690bbf..136ab689 100644
--- a/app/src/main/res/layout/item_navigation_drawer.xml
+++ b/app/src/main/res/layout/item_navigation_drawer.xml
@@ -1,28 +1,50 @@
-
+ android:orientation="vertical">
-
-
-
+ android:layout_height="1dp"
+ android:background="?inset_divider"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp" />
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/music_player_widget.xml b/app/src/main/res/layout/music_player_widget.xml
index 6d3b0ac2..5f59e318 100644
--- a/app/src/main/res/layout/music_player_widget.xml
+++ b/app/src/main/res/layout/music_player_widget.xml
@@ -1,15 +1,16 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/app_widget_small_artwork_height"
+ android:background="#FFFFFF"
+ tools:ignore="ContentDescription">
+ android:scaleType="centerCrop" />
+ android:text="@string/nothing_playing" />
+ android:orientation="horizontal">
+ android:src="@drawable/ic_skip_previous_black_36dp" />
+ android:src="@drawable/ic_play_arrow_black_36dp" />
+ android:src="@drawable/ic_skip_next_black_36dp" />
+
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/notification_playing.xml b/app/src/main/res/layout/notification_playing.xml
index 7028e52d..c7f21c1b 100644
--- a/app/src/main/res/layout/notification_playing.xml
+++ b/app/src/main/res/layout/notification_playing.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:orientation="horizontal"
+ tools:ignore="ContentDescription">
+
+
+ android:layout_height="wrap_content"
+ android:layout_gravity="fill_vertical"
+ android:layout_weight="1"
+ android:gravity="center_vertical"
+ android:minHeight="@dimen/notification_big_icon_height"
+ android:orientation="vertical"
+ android:paddingBottom="@dimen/notification_info_container_padding_bottom"
+ android:paddingLeft="@dimen/notification_info_container_padding_left"
+ android:paddingStart="@dimen/notification_info_container_padding_left">
-
-
-
+ android:singleLine="true"
+ android:textAppearance="@style/Theme.MaterialMusic.Notification.Title" />
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/notification_playing_expanded.xml b/app/src/main/res/layout/notification_playing_expanded.xml
index 87c1b0a4..e522c18d 100644
--- a/app/src/main/res/layout/notification_playing_expanded.xml
+++ b/app/src/main/res/layout/notification_playing_expanded.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:layout_height="128dp"
+ tools:ignore="ContentDescription">
+ android:scaleType="centerCrop" />
+ android:src="@drawable/ic_close_white_24dp" />
+ android:textAppearance="@style/Theme.MaterialMusic.Notification.Title" />
+ android:textAppearance="@style/Theme.MaterialMusic.Notification" />
+ android:textAppearance="@style/Theme.MaterialMusic.Notification" />
+
+ android:src="@drawable/ic_skip_previous_white_48dp" />
+ android:src="@drawable/ic_play_arrow_white_48dp" />
+ android:src="@drawable/ic_skip_next_white_48dp" />
+
+ android:layout_toEndOf="@+id/album_art"
+ android:background="@drawable/notification_template_divider_media" />
diff --git a/app/src/main/res/layout/preference_category_custom.xml b/app/src/main/res/layout/preference_category_custom.xml
new file mode 100644
index 00000000..5b6a2aaa
--- /dev/null
+++ b/app/src/main/res/layout/preference_category_custom.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_custom.xml b/app/src/main/res/layout/preference_custom.xml
new file mode 100644
index 00000000..1d25db71
--- /dev/null
+++ b/app/src/main/res/layout/preference_custom.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_dynamiccheckbox.xml b/app/src/main/res/layout/preference_dynamiccheckbox.xml
new file mode 100644
index 00000000..e6360855
--- /dev/null
+++ b/app/src/main/res/layout/preference_dynamiccheckbox.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/tab_indicator.xml b/app/src/main/res/layout/tab_indicator.xml
deleted file mode 100644
index a3f2d5b3..00000000
--- a/app/src/main/res/layout/tab_indicator.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_album_detail.xml b/app/src/main/res/menu/menu_album_detail.xml
index 5bef2eff..93f072cd 100644
--- a/app/src/main/res/menu/menu_album_detail.xml
+++ b/app/src/main/res/menu/menu_album_detail.xml
@@ -35,4 +35,5 @@
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
+
diff --git a/app/src/main/res/menu/menu_albums.xml b/app/src/main/res/menu/menu_albums.xml
index 098402dc..e80af180 100644
--- a/app/src/main/res/menu/menu_albums.xml
+++ b/app/src/main/res/menu/menu_albums.xml
@@ -1,27 +1,29 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_artist_detail.xml b/app/src/main/res/menu/menu_artist_detail.xml
index 3e679224..7e622505 100644
--- a/app/src/main/res/menu/menu_artist_detail.xml
+++ b/app/src/main/res/menu/menu_artist_detail.xml
@@ -35,4 +35,5 @@
android:orderInCategory="99"
android:title="@string/equalizer"
app:showAsAction="never"/>
+
diff --git a/app/src/main/res/menu/menu_item_playing_queue_song.xml b/app/src/main/res/menu/menu_item_playing_queue_song.xml
index 6c50ac42..76d2aeea 100644
--- a/app/src/main/res/menu/menu_item_playing_queue_song.xml
+++ b/app/src/main/res/menu/menu_item_playing_queue_song.xml
@@ -1,37 +1,37 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_item_playlist.xml b/app/src/main/res/menu/menu_item_playlist.xml
index dce20360..5a09e35d 100644
--- a/app/src/main/res/menu/menu_item_playlist.xml
+++ b/app/src/main/res/menu/menu_item_playlist.xml
@@ -3,7 +3,6 @@
-
diff --git a/app/src/main/res/menu/menu_item_playlist_song.xml b/app/src/main/res/menu/menu_item_playlist_song.xml
index 8056befd..72454353 100644
--- a/app/src/main/res/menu/menu_item_playlist_song.xml
+++ b/app/src/main/res/menu/menu_item_playlist_song.xml
@@ -1,40 +1,40 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_item_song.xml b/app/src/main/res/menu/menu_item_song.xml
index 97a5d024..f42108d9 100644
--- a/app/src/main/res/menu/menu_item_song.xml
+++ b/app/src/main/res/menu/menu_item_song.xml
@@ -1,36 +1,36 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 2baa23ad..d36d0752 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -32,15 +32,4 @@
android:title="@string/equalizer"
app:showAsAction="never"/>
-
-
-
diff --git a/app/src/main/res/menu/menu_music_playing.xml b/app/src/main/res/menu/menu_music_playing.xml
index 1507628c..7e86bcdd 100644
--- a/app/src/main/res/menu/menu_music_playing.xml
+++ b/app/src/main/res/menu/menu_music_playing.xml
@@ -2,6 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.kabouzeid.gramophone.ui.activities.MusicControllerActivity">
+
-
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity">
+
+ app:showAsAction="ifRoom" />
+
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+
diff --git a/app/src/main/res/menu/menu_playlists.xml b/app/src/main/res/menu/menu_playlists.xml
index ac115077..4f9115f5 100644
--- a/app/src/main/res/menu/menu_playlists.xml
+++ b/app/src/main/res/menu/menu_playlists.xml
@@ -1,48 +1,36 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ app:showAsAction="always" />
+ app:showAsAction="ifRoom" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
+ app:showAsAction="never" />
-
-
-
-
+ app:showAsAction="never" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_search.xml b/app/src/main/res/menu/menu_search.xml
index d456ed07..c5cddfef 100644
--- a/app/src/main/res/menu/menu_search.xml
+++ b/app/src/main/res/menu/menu_search.xml
@@ -1,11 +1,11 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="com.kabouzeid.gramophone.ui.activities.SearchActivity">
+ app:showAsAction="ifRoom|collapseActionView" />
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 40fcdb4f..271984ca 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -8,11 +8,11 @@
Als nächstes spielen
Zur Wiedergabe hinzufügen
Von aktueller Wiedergabe entfernen
- Zu Playlist hinzufügen...
+ Zu Playlist hinzufügen…
Tag Editor
Von Gerät löschen
Details
- Gehe zu...
+ Gehe zu…
Alben
Interpreten
Genres
@@ -37,7 +37,7 @@
Track (2 für Track 2 oder 3004 für CD 3 Track 4)
Das Feld \"Album Titel\" oder \"Album Interpret\" ist leer.
Schreibe Datei
- Speichere Änderungen...
+ Speichere Änderungen…
Details
Dateiname
Dateipfad
@@ -59,8 +59,8 @@
Keine Ergebnisse
Interpret Bild aktualisieren
Interpret Bild aktualisiert für
- Aktualisiere...
- Lade...
+ Aktualisiere…
+ Lade…
1 Titel wurde der Wiedergabeliste hinzugefügt.
"Es wurden "
" Titel der Wiedergabeliste hinzugef\u00fcgt."
diff --git a/app/src/main/res/values-es-r419/strings.xml b/app/src/main/res/values-es-r419/strings.xml
index 471601fc..45018559 100644
--- a/app/src/main/res/values-es-r419/strings.xml
+++ b/app/src/main/res/values-es-r419/strings.xml
@@ -37,7 +37,7 @@
"Pista () "
El campo título del álbum o el artista del álbum está vacío
Escribiendo archivo
- Guardando cambios...
+ Guardando cambios…
Detalles
Nombre del archivo
Directorio del archivo
@@ -57,8 +57,8 @@
Sin resultados
Actualizar imagen del artista
Imagen de artista actualizada para
- Actualizando...
- Cargando...
+ Actualizando…
+ Cargando…
1 título añadido a la cola de reproducción
Añadido
t\u00edtulos a la reproducci\u00f3n actual
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 0aacd0f3..d048acbb 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -8,11 +8,11 @@
Reproducir siguiente
Añadir a cola de reproducción
Quitar de la cola
- Añadir a la lista...
+ Añadir a la lista…
Editor de etiquetas
Borrar del disco
Detalles
- Ir a...
+ Ir a…
Álbumes
Artistas
Géneros
@@ -60,8 +60,8 @@
Sin resultados
Actualizar imagen del artista
Imagen del artista actualizada de
- Actualizando...
- Cargando...
+ Actualizando…
+ Cargando…
Añadida una canción a la cola de reproducción.
Añadido
canciones a la cola de reproducci\u00f3n.
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 4a92b6e4..89034124 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -8,11 +8,11 @@
Lire ensuite
Ajouter à la file de lecture
Retirer de la file de lecture
- Ajouter à une playlist...
+ Ajouter à une playlist…
Editeur d\'infos
Supprimer de la mémoire
Détails
- Aller à...
+ Aller à…
Albums
Artistes
Genres
@@ -37,7 +37,7 @@
Piste (2 pour piste 2 ou 3004 pour CD3 piste 4)
Veuillez indiquer le titre et l\'artiste de l\'album.
Fichier en cours d\'écriture
- Sauvegarde des changements...
+ Sauvegarde des changements…
Détails
Nom du fichier
Chemin du fichier
@@ -58,7 +58,7 @@
Actualiser l\'image de l\'artiste
Image de l\'artiste actualisée pour
Actualisation
- Chargement...
+ Chargement…
1 titre ajouté à la file de lecture.
Ajouté
" titres ajout\u00e9s \u00e0 la file de lecture"
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 63e36eda..92dbc4de 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -12,7 +12,7 @@
Modifica tag
Elimina
Dettagli
- Vai a...
+ Vai a…
Album
Artisti
Generi
@@ -57,7 +57,7 @@
Nessun risultato
Aggiorna immagine artista
Aggiorna immagine artista per
- Aggiornando...
+ Aggiornando…
Caricando..
Aggiunto un brano alla coda.
Aggiunto
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 9b372a0c..eb6248a8 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -8,11 +8,11 @@
Speel volgende af
Voeg toe aan afspeellijst\"
Verwijder van afspeellijst
- Voeg toe aan afspeellijst...\"
+ Voeg toe aan afspeellijst…\"
Label Bewerker\"
Verwijder van schijf\"
Details
- Ga naar...
+ Ga naar…
Albums
Artiesten
Genres
@@ -37,7 +37,7 @@
Nummer (2 voor nummer 2 of 3004 voor CD3 nummer 4)
Album titel of album artiest tekstveld is leeg.
Bestand wegschrijven
- Wijzigingen opslaan...
+ Wijzigingen opslaan…
Details
Bestandsnaam
Bestandspad
@@ -59,8 +59,8 @@
Geen resultaten
Vernieuw artiest afbeelding
Artiest afbeelding gewijzigd
- Wijzigen...
- Laden...
+ Wijzigen…
+ Laden…
1 titel toegevoegd aan de afspeellijst.
Toegevoegd
" titels naar de afspeellijst"
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index a80d254a..268c9176 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -8,11 +8,10 @@
Odtwarzaj następny
Dodaj do kolejki odtwarzania\'\'
Usuń z kolejki odtwarzania
- Dodaj do listy odtwarzania...\'\'
+ Dodaj do listy odtwarzania…\'\'
Edytor Tagów\'\'
Usuń z urządzenia\'\'
Szczegóły
- Przejdź do...
Albumy
Wykonawcy
Gatunki
@@ -38,7 +37,7 @@
Numer utworu (2 dla utworu 2 lub 3004 dla CD3 utworu 4)
Pole tekstowe nazwy albumu lub wykonawcy jest puste.
Zapisywanie pliku
- Zapisywanie zmian...
+ Zapisywanie zmian…
AlbumTagEditorActivity
Szczegóły
Nazwa pliku
@@ -59,11 +58,9 @@
Brak wyników
Zaktualizuj zdjęcie wykonawcy
Zaktualizowano zdjęcie wykonawcy
- Aktualizowanie...
- Ładowanie...
+ Aktualizowanie…
+ Ładowanie…
Dodano 1 tytuł do kolejki odtwarzania
- Dodane
- " tytu\u0142\u00f3w do kolejki odtwarzania."
Usuń z listy odtwarzania
"Inserted "
" tytu\u0142\u00f3w do listy odtwarzania "
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 91c99045..ca2c2c71 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -8,11 +8,11 @@
Reproduzir a seguir
Adicionar à fila
Remover da fila
- Adicionar à playlist...
+ Adicionar à playlist…
Editor de tags
Excluir da memória
Detalhes
- Ir para...
+ Ir para…
Álbuns
Artistas
Gêneros
@@ -37,7 +37,7 @@
Faixa (2 para faixa 2 ou 3004 para CD3 faixa 4)
O título do álbum ou o campo de texto do artista do álbum está vazio.
Escrevendo artista
- Salvando alterações...
+ Salvando alterações…
Detalhes
Nome do arquivo
Local do arquivo
@@ -57,8 +57,8 @@
Nenhum resultado
Atualizar imagem do artista
Imagem do artista atualizada para
- Atualizando...
- Carregando...
+ Atualizando…
+ Carregando…
Adicionada uma música para a fila atual de músicas.
Adicionado
" m\u00fasicas para a fila atual."
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 586ec97e..2d4d5154 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -12,7 +12,7 @@
Editor Info Melodie
Șterge
Detalii
- Du-te la...
+ Du-te la…
Albume
Artiști
Genuri
@@ -37,7 +37,7 @@
Număr (2 pentru melodia a doua sau 3004 pentru CD3 melodia 4)
Campul titlului albumului sau artistul albumului este gol.
Scriere fișier
- Salvare schimbări...
+ Salvare schimbări…
Detalii
Nume fișier
Locație fișier
@@ -57,8 +57,8 @@
Niciun rezultat
Actualizează imagine artist
Acatualizează imagine artist pentru
- Actualizare...
- Incărcare...
+ Actualizare…
+ Incărcare…
Adăugat 1 melodie la lista de redare.
Adăugat
melodii la lista de redare.
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index e0ac2de4..508156d3 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -8,11 +8,11 @@
Проиграть следующую
Добавить в очередь воспроизведения\"
Удалить из очереди воспроизведения
- Добавить в список воспроизведения...\"
+ Добавить в список воспроизведения…\"
Редактор тэгов
Удалить с диска\"
Подробнее
- Перейти к...
+ Перейти к…
Альбомы
Исполнители
Жанры
@@ -31,7 +31,7 @@
Год
Трек
Запись файла
- Сохранение изменений...
+ Сохранение изменений…
Подробнее
Имя файла
Путь к файлу
@@ -47,8 +47,8 @@
ещё
Нет результатов
Обновить изображение исполнителя
- Обновление...
- Загрузка...
+ Обновление…
+ Загрузка…
Добавлено
Удалить из списка воспроизведения
"\u0412\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e "
diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml
index 17dcd129..7eb140f2 100644
--- a/app/src/main/res/values-sw600dp/dimens.xml
+++ b/app/src/main/res/values-sw600dp/dimens.xml
@@ -1,4 +1,3 @@
- 64dp
600dp
diff --git a/app/src/main/res/values-v14/dimens.xml b/app/src/main/res/values-v14/dimens.xml
deleted file mode 100644
index 4db8c590..00000000
--- a/app/src/main/res/values-v14/dimens.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- 0dp
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/colors.xml b/app/src/main/res/values-v21/colors.xml
index 716b4247..d4cc48df 100644
--- a/app/src/main/res/values-v21/colors.xml
+++ b/app/src/main/res/values-v21/colors.xml
@@ -3,6 +3,6 @@
#de000000
- #FFFFFFFF
- #FFFFFFFF
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/fonts.xml b/app/src/main/res/values-v21/fonts.xml
new file mode 100644
index 00000000..3e707c94
--- /dev/null
+++ b/app/src/main/res/values-v21/fonts.xml
@@ -0,0 +1,7 @@
+
+
+
+
+ sans-serif-medium
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/integers.xml b/app/src/main/res/values-v21/integers.xml
new file mode 100644
index 00000000..a9efe86d
--- /dev/null
+++ b/app/src/main/res/values-v21/integers.xml
@@ -0,0 +1,6 @@
+
+
+
+ 0
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 4af2561d..1623fb32 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -3,16 +3,18 @@
-
+
-
+
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
deleted file mode 100644
index 63fc8164..00000000
--- a/app/src/main/res/values-w820dp/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 64dp
-
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 204ef3ac..07667b93 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -8,11 +8,11 @@
下一首
加入播放队列“
从播放队列移除
- 加入播放列表...\"
+ 加入播放列表…\"
音乐标签编辑器
从储存中删除
详情
- 打开...
+ 打开…
专辑
艺术家
流派
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
new file mode 100644
index 00000000..f27071fa
--- /dev/null
+++ b/app/src/main/res/values/arrays.xml
@@ -0,0 +1,52 @@
+
+
+
+ - #3F51B5
+ - #9E9E9E
+ - #424242
+ - #1C1C1C
+ - #000000
+ - #607D8B
+ - #37474F
+ - #795548
+ - #D32F2F
+ - #E91E63
+ - #9C27B0
+ - #5E35B1
+ - #1976D2
+ - #03A9F4
+ - #00BCD4
+ - #009688
+ - #43A047
+ - #7CB342
+ - #C0CA33
+ - #FBC02D
+ - #FFB300
+ - #FB8C00
+ - #F4511E
+
+
+
+ - #3F51B5
+ - #9E9E9E
+ - #607D8B
+ - #795548
+ - #D32F2F
+ - #E91E63
+ - #9C27B0
+ - #5E35B1
+ - #1976D2
+ - #03A9F4
+ - #00BCD4
+ - #009688
+ - #43A047
+ - #7CB342
+ - #C0CA33
+ - #FBC02D
+ - #FFB300
+ - #FB8C00
+ - #F4511E
+ - #FFFFFF
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index b9e09d4c..5be8d5b0 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -1,26 +1,27 @@
-
-
+
+
+
-
-
+
+
+
-
-
-
+
+
+
-
+
-
-
+
+
-
-
+
-
-
+
+
-
+
\ 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 5744de58..75b7c2ad 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,40 +1,36 @@
+ #4dffffff
+ #1f000000
+ #9affffff
+ #3e000000
@color/indigo_500
@color/indigo_600
@color/pink_500
@color/pink_600
- @color/pink_300
@color/grey_300
- @color/grey_300
+
+ #fff
#0C000000
@color/grey_300
#8A000000
- @color/materialmusic_accent_color
#D0D0D0
-
+
@color/indigo_500
@color/indigo_600
@color/pink_500
- @color/pink_600
- @color/pink_300
@color/grey_800
@color/grey_900
#0CFFFFFF
@color/grey_900
@color/white
- @color/materialmusic_dark_accent_color
#55000000
-
- #D0D0D0
- #30FFFFFF
-
#FFFFFF
#99FFFFFF
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index d0c48950..2cba4300 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,14 +1,9 @@
-
- 16dp
- 16dp
16dp
- 8dp
- 14sp
140dp
260dp
@@ -24,17 +19,6 @@
64.0dip
8.0dip
4.0dip
- 8.0dip
- 48.0dip
- 48.0dip
-
-
- 128.0dip
- 12.0dip
- 48.0dip
- 10.0dip
- 8.0dip
- 8.0dip
48dp
@@ -44,7 +28,6 @@
Refer to App Widget Documentation for margin information
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-->
- 8dp
64dp
5dp
@@ -53,4 +36,9 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
32dp
36dp
+
+
+ 1dp
+ 24dp
+
diff --git a/app/src/main/res/values/fonts.xml b/app/src/main/res/values/fonts.xml
new file mode 100644
index 00000000..0edbf832
--- /dev/null
+++ b/app/src/main/res/values/fonts.xml
@@ -0,0 +1,7 @@
+
+
+
+
+ sans-serif
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml
new file mode 100644
index 00000000..cf629fc2
--- /dev/null
+++ b/app/src/main/res/values/integers.xml
@@ -0,0 +1,6 @@
+
+
+
+ 1
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/materialcolors.xml b/app/src/main/res/values/materialcolors.xml
index 89e523f1..683b6469 100644
--- a/app/src/main/res/values/materialcolors.xml
+++ b/app/src/main/res/values/materialcolors.xml
@@ -1,290 +1,18 @@
-
-
+
- #ffebee
- #ffcdd2
- #ef9a9a
- #e57373
- #ef5350
- #f44336
- #e53935
- #d32f2f
- #c62828
- #b71c1c
- #ff8a80
- #ff5252
- #ff1744
- #d50000
-
- #fce4ec
- #f8bbd0
- #f48fb1
- #f06292
- #ec407a
#e91e63
#d81b60
- #c2185b
- #ad1457
- #880e4f
- #ff80ab
- #ff4081
- #f50057
- #c51162
- #f3e5f5
- #e1bee7
- #ce93d8
- #ba68c8
- #ab47bc
- #9c27b0
- #8e24aa
- #7b1fa2
- #6a1b9a
- #4a148c
- #ea80fc
- #e040fb
- #d500f9
- #aa00ff
-
- #ede7f6
- #d1c4e9
- #b39ddb
- #9575cd
- #7e57c2
- #673ab7
- #5e35b1
- #512da8
- #4527a0
- #311b92
- #b388ff
- #7c4dff
- #651fff
- #6200ea
-
- #e8eaf6
- #c5cae9
- #9fa8da
- #7986cb
- #5c6bc0
#3f51b5
#3949ab
- #303f9f
- #283593
- #1a237e
- #8c9eff
- #536dfe
- #3d5afe
- #304ffe
- #e3f2fd
- #bbdefb
- #90caf9
- #64b5f6
- #42a5f5
- #2196f3
- #1e88e5
- #1976d2
- #1565c0
- #0d47a1
- #82b1ff
- #448aff
- #2979ff
- #2962ff
+ #000000
+ #ffffff
- #e1f5fe
- #b3e5fc
- #81d4fa
- #4fc3f7
- #29b6f6
- #03a9f4
- #039be5
- #0288d1
- #0277bd
- #01579b
- #80d8ff
- #40c4ff
- #00b0ff
- #0091ea
-
- #e0f7fa
- #b2ebf2
- #80deea
- #4dd0e1
- #26c6da
- #00bcd4
- #00acc1
- #0097a7
- #00838f
- #006064
- #84ffff
- #18ffff
- #00e5ff
- #00b8d4
-
- #e0f2f1
- #b2dfdb
- #80cbc4
- #4db6ac
- #26a69a
- #009688
- #00897b
- #00796b
- #00695c
- #004d40
- #a7ffeb
- #64ffda
- #1de9b6
- #00bfa5
-
- #e8f5e9
- #c8e6c9
- #a5d6a7
- #81c784
- #66bb6a
- #4caf50
- #43a047
- #388e3c
- #2e7d32
- #1b5e20
- #b9f6ca
- #69f0ae
- #00e676
- #00c853
-
- #f1f8e9
- #dcedc8
- #c5e1a5
- #aed581
- #9ccc65
- #8bc34a
- #7cb342
- #689f38
- #558b2f
- #33691e
- #ccff90
- #b2ff59
- #76ff03
- #64dd17
-
- #f9fbe7
- #f0f4c3
- #e6ee9c
- #dce775
- #d4e157
- #cddc39
- #c0ca33
- #afb42b
- #9e9d24
- #827717
- #f4ff81
- #eeff41
- #c6ff00
- #aeea00
-
- #fffde7
- #fff9c4
- #fff59d
- #fff176
- #ffee58
- #ffeb3b
- #fdd835
- #fbc02d
- #f9a825
- #f57f17
- #ffff8d
- #ffff00
- #ffea00
- #ffd600
-
- #fff8e1
- #ffecb3
- #ffe082
- #ffd54f
- #ffca28
- #ffc107
- #ffb300
- #ffa000
- #ff8f00
- #ff6f00
- #ffe57f
- #ffd740
- #ffc400
- #ffab00
-
- #fff3e0
- #ffe0b2
- #ffcc80
- #ffb74d
- #ffa726
- #ff9800
- #fb8c00
- #f57c00
- #ef6c00
- #e65100
- #ffd180
- #ffab40
- #ff9100
- #ff6d00
-
- #fbe9e7
- #ffccbc
- #ffab91
- #ff8a65
- #ff7043
- #ff5722
- #f4511e
- #e64a19
- #d84315
- #bf360c
- #ff9e80
- #ff6e40
- #ff3d00
- #dd2c00
-
- #efebe9
- #d7ccc8
- #bcaaa4
- #a1887f
- #8d6e63
- #795548
- #6d4c41
- #5d4037
- #4e342e
- #3e2723
-
- #fafafa
- #f5f5f5
- #eeeeee
#e0e0e0
- #bdbdbd
#9e9e9e
- #757575
- #616161
#424242
#212121
- #eceff1
- #cfd8dc
- #b0bec5
- #90a4ae
- #78909c
- #607d8b
- #546e7a
- #455a64
- #37474f
- #263238
-
- #000000
- #1f000000
- #42000000
- #8a000000
- #de000000
-
- #ffffff
- #1fffffff
- #4dffffff
- #b3ffffff
- #ffffff
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 998e732e..f3ad5265 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,15 +13,10 @@
Tag Editor
Delete from disk
Details
- Go to…
Albums
Artists
- Genres
Songs
Playlists
- Unknown Artist
- Unknown Album
- Untitled Song
Nothing is playing
Sorry - an error occurred while attempting to play this song
Sorry, we were not able to find a matching biography for this artist.
@@ -29,7 +24,6 @@
We were not able to gain audio focus.
Tag editor
Tag editor
- Song
Album
Artist
Genre
@@ -49,24 +43,17 @@
Length
Bitrate
Sampling rate
- OK
Go to artist
Go to album
Playing queue
- Close
Save as playlist
Icon by
Gramophone is a completely free material designed music player by
Search
- more
No results
Update artist image
- Updated artist image for
Updating…
- Loading…
Added 1 title to the playing queue.
- Added\u0020
- \u0020titles to the playing queue.
Playlist Activity
Delete from playlist
Added\u0020
@@ -74,7 +61,6 @@
New playlist
Grid columns
Grid columns (Land)
- Cancel
Created playlist\u0020
Deleted playlist\u0020
Could not create playlist\u0020
@@ -85,7 +71,6 @@
"Warning: This operation can not be undone."
Shuffle all
Last opened
- Start page
Light
Dark
Equalizer
@@ -106,4 +91,11 @@
Close navigation drawer
delete
+ Select
+ Default
+ Primary Color
+ Accent Color
+ The primary theme color, defaults to indigo.
+ The accent theme color, defaults to pink.
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index fbc2f5b2..6cdcfb25 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,16 +1,12 @@
-
+
-
-
-
-
-
+
-
+