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 e86f7391..03ab7a0c 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.Light" > + android:theme="@style/Theme.MaterialMusic.Light" + 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 87627884..632c1427 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -11,17 +11,16 @@ 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.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.koushikdutta.async.future.Future; import com.koushikdutta.async.future.FutureCallback; @@ -33,12 +32,13 @@ import com.squareup.otto.Subscribe; 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 @@ -100,10 +100,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); @@ -122,7 +122,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); } } @@ -144,7 +144,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); } @@ -153,31 +153,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()) { @@ -188,14 +176,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 4763c717..c707b6b7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/ArtistAdapter.java @@ -25,10 +25,10 @@ import com.squareup.otto.Subscribe; 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) { @@ -80,9 +80,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) { @@ -75,9 +75,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 mFragmentClass; + private final Class mFragmentClass; MusicFragments(final Class 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 05a62cad..851b193a 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.koushikdutta.ion.Ion; +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; } @@ -72,10 +74,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 30b60fe1..7b01e992 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,8 +1,8 @@ package com.kabouzeid.gramophone.adapter.songadapter; -import android.app.Activity; 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; @@ -12,6 +12,7 @@ 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.MenuItemClickHelper; @@ -22,24 +23,24 @@ import com.kabouzeid.gramophone.model.Song; 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.Util; import com.koushikdutta.ion.Ion; import com.squareup.otto.Subscribe; -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(); } @@ -75,15 +76,14 @@ public class SongAdapter extends RecyclerView.Adapter { .error(R.drawable.default_album_art) .intoImageView(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); @@ -96,12 +96,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/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 d1ed3061..354c8f83 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; @@ -25,6 +25,7 @@ import com.koushikdutta.async.future.FutureCallback; import com.koushikdutta.ion.Ion; public class PlayingNotificationHelper { + public static final String TAG = PlayingNotificationHelper.class.getSimpleName(); public static final int NOTIFICATION_ID = 1337; 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 73930474..a8d12426 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.koushikdutta.ion.Ion; /** - * 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 dc2a9580..958e0993 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.koushikdutta.ion.Ion; /** - * 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 0a6d576b..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,9 +1,9 @@ package com.kabouzeid.gramophone.model; /** - * Created by karim on 28.03.15. + * @author Karim Abou Zeid (kabouzeid) */ -public class UiPreferenceChangedEvent { +public class UIPreferenceChangedEvent { public static final int THEME_CHANGED = 0; public static final int ALBUM_OVERVIEW_PALETTE_CHANGED = 1; public static final int COLORED_NAVIGATION_BAR_ARTIST_CHANGED = 2; @@ -11,10 +11,10 @@ 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) { + public UIPreferenceChangedEvent(int action, Object value) { this.action = action; this.value = value; } 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 c98186b9..7464beaa 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.koushikdutta.ion.Ion; 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; @@ -384,7 +383,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe playingNotificationHelper.buildNotification(playingQueue.get(position), isPlaying()); } - private void updateWidgets(){ + private void updateWidgets() { MusicPlayerWidget.updateWidgets(this, playingQueue.get(position), isPlaying()); } @@ -425,7 +424,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe return getPosition() == getPlayingQueue().size() - 1; } - public List getPlayingQueue() { + public ArrayList getPlayingQueue() { return playingQueue; } @@ -468,7 +467,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); @@ -507,7 +506,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; @@ -765,6 +764,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 a695c8f8..be7a4981 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,6 +16,7 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import com.afollestad.materialdialogs.util.DialogUtils; import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -28,7 +29,7 @@ import com.kabouzeid.gramophone.misc.AppKeys; import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks; import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent; +import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity; import com.kabouzeid.gramophone.util.MusicUtil; @@ -41,7 +42,7 @@ import com.koushikdutta.ion.Ion; import com.nineoldandroids.view.ViewHelper; import com.squareup.otto.Subscribe; -import java.util.List; +import java.util.ArrayList; /* * @@ -52,10 +53,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; @@ -64,12 +63,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; @@ -111,7 +109,7 @@ public class AlbumDetailActivity extends AbsFabActivity { if (Util.hasLollipopSDK()) postponeEnterTransition(); if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) - getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color)); + getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); Bundle intentExtras = getIntent().getExtras(); int albumId = -1; @@ -145,8 +143,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); @@ -235,7 +233,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); @@ -289,8 +287,7 @@ 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; } @@ -298,9 +295,9 @@ public class AlbumDetailActivity extends AbsFabActivity { } @Subscribe - public void onUIPreferenceChanged(UiPreferenceChangedEvent event) { + public void onUIPreferenceChanged(UIPreferenceChangedEvent event) { switch (event.getAction()) { - case UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED: + 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 ae3fba41..0850832f 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 @@ -22,6 +22,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; @@ -38,7 +39,7 @@ import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks; import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Artist; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent; +import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -49,6 +50,7 @@ import com.koushikdutta.ion.Ion; import com.nineoldandroids.view.ViewHelper; import com.squareup.otto.Subscribe; +import java.util.ArrayList; import java.util.List; /* @@ -73,7 +75,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; @@ -84,7 +85,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,7 @@ public class ArtistDetailActivity extends AbsFabActivity { if (Util.hasLollipopSDK()) postponeEnterTransition(); if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) - getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color)); + getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); getIntentExtras(); initViews(); @@ -153,8 +154,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); @@ -193,7 +194,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 +243,7 @@ public class ArtistDetailActivity extends AbsFabActivity { return new MaterialDialog.Builder(ArtistDetailActivity.this) .title(artist.name) .content(biography) + .positiveText(android.R.string.ok) .build(); } @@ -297,15 +299,15 @@ public class ArtistDetailActivity extends AbsFabActivity { @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void resetColors() { - 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)); + getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); } private void setUpToolBar() { @@ -411,9 +413,9 @@ public class ArtistDetailActivity extends AbsFabActivity { } @Subscribe - public void onUIPreferenceChanged(UiPreferenceChangedEvent event) { + public void onUIPreferenceChanged(UIPreferenceChangedEvent event) { switch (event.getAction()) { - case UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED: + 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 26ef114e..fc4e763a 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; @@ -29,7 +31,7 @@ import com.kabouzeid.gramophone.loader.ArtistSongLoader; import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.model.MusicRemoteEvent; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent; +import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.ui.fragments.NavigationDrawerFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment; @@ -44,6 +46,7 @@ import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; import com.koushikdutta.ion.Ion; +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); @@ -223,6 +225,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); @@ -268,17 +286,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; @@ -296,10 +308,10 @@ public class MainActivity extends AbsFabActivity } @Override - public void onUIPreferenceChangedEvent(UiPreferenceChangedEvent event) { + public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { super.onUIPreferenceChangedEvent(event); switch (event.getAction()) { - case UiPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED: + case UIPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED: setToolBarTransparent((boolean) event.getValue()); break; } @@ -320,9 +332,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(); @@ -336,7 +348,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) PlaylistSongLoader.getPlaylistSongList(this, id), position, true); + //noinspection unchecked + MusicPlayerRemote.openQueue((ArrayList) (List) PlaylistSongLoader.getPlaylistSongList(this, id), position, true); handled = true; } } else if (MediaStore.Audio.Albums.CONTENT_TYPE.equals(mimeType)) { @@ -357,7 +370,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 9ff2afb0..a577992c 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 @@ -7,7 +7,6 @@ import android.os.Build; import android.os.Bundle; import android.support.v7.graphics.Palette; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -19,17 +18,20 @@ 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; import com.kabouzeid.gramophone.model.MusicRemoteEvent; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.model.UiPreferenceChangedEvent; +import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent; import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity; @@ -65,9 +67,7 @@ public class MusicControllerActivity extends AbsFabActivity { private ImageButton repeatButton; private ImageButton shuffleButton; private View mediaControllerContainer; - private int lastFooterColor = -1; - private boolean killThreads = false; @TargetApi(Build.VERSION_CODES.LOLLIPOP) @@ -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; } } @@ -301,9 +311,9 @@ public class MusicControllerActivity extends AbsFabActivity { } private void resetColors() { - 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); @@ -358,7 +368,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; @@ -432,7 +443,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(); @@ -448,7 +459,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)); @@ -472,9 +483,9 @@ public class MusicControllerActivity extends AbsFabActivity { } @Subscribe - public void onUIPrefsChanged(UiPreferenceChangedEvent event) { + public void onUIPrefsChanged(UIPreferenceChangedEvent event) { switch (event.getAction()) { - case UiPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED: + case UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED: setUpBox((boolean) event.getValue()); break; } @@ -485,4 +496,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 2c4f2e9d..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.model.UiPreferenceChangedEvent; +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 { @@ -57,7 +81,31 @@ public class SettingsActivity extends AbsBaseActivity { @Override public boolean onPreferenceChange(Preference preference, Object o) { setSummary(generalTheme, o); - App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.THEME_CHANGED, o)); + App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, o)); + return true; + } + }); + + 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; } }); @@ -65,7 +113,7 @@ public class SettingsActivity extends AbsBaseActivity { findPreference("transparent_toolbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { - App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED, o)); + App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.TOOLBAR_TRANSPARENT_CHANGED, o)); return true; } }); @@ -73,7 +121,7 @@ public class SettingsActivity extends AbsBaseActivity { findPreference("colored_album_footers").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { - App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED, o)); + App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED, o)); return true; } }); @@ -81,7 +129,7 @@ public class SettingsActivity extends AbsBaseActivity { findPreference("colored_navigation_bar_artist").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { - App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED, o)); + App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED, o)); return true; } }); @@ -89,7 +137,7 @@ public class SettingsActivity extends AbsBaseActivity { findPreference("colored_navigation_bar_album").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { - App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED, o)); + App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED, o)); return true; } }); @@ -97,7 +145,7 @@ public class SettingsActivity extends AbsBaseActivity { findPreference("playback_controller_card").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { - App.bus.post(new UiPreferenceChangedEvent(UiPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED, o)); + App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.PLAYBACK_CONTROLLER_CARD_CHANGED, o)); return true; } }); 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 a8354e2a..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,26 +3,24 @@ 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.kabouzeid.gramophone.model.UIPreferenceChangedEvent; 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) { + 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 fdf4b8d3..8c70b17f 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; @@ -49,10 +50,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; @@ -65,7 +67,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; @@ -169,7 +171,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); @@ -184,7 +186,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) { @@ -200,7 +202,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); @@ -271,7 +273,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 746f4354..46c077fc 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 @@ -33,7 +33,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; @@ -150,13 +149,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 4869c42d..a12d55b9 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 c2d4980c..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:paddingTop="8dp"> + android:textColor="@color/white" /> @@ -52,7 +53,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/header" - android:background="?android:attr/colorBackground" android:orientation="vertical" android:padding="16dp"> @@ -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 d282cc95..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,5 +1,5 @@ - + android:src="@drawable/default_album_art" /> + android:paddingTop="8dp"> + android:textColor="@color/white" /> + android:textColor="@color/white" /> @@ -65,7 +66,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/header" - android:background="?android:attr/colorBackground" android:orientation="vertical" android:padding="16dp"> @@ -80,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" /> @@ -186,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" /> +