Lots of progress with dynamic theming, the nav drawer now uses a RecyclerView, AboutDeveloperDialogHelper is now a DialogFragment, RTL support (to suppress Lint warnings), other various small fixes, cleaned up and formatted lot of code (and removed un-used resources), R.string.ok > android.R.string.ok, R.string.cancel > android.R.string.cancel, switched dialog helpers to DialogFragments.
This commit is contained in:
parent
c1b258dadd
commit
7ce86afd74
265 changed files with 2853 additions and 2292 deletions
|
|
@ -50,7 +50,7 @@ dependencies {
|
|||
compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') {
|
||||
transitive = true;
|
||||
}
|
||||
compile 'com.afollestad:material-dialogs:0.7.2.1'
|
||||
compile 'com.afollestad:material-dialogs:0.7.2.2'
|
||||
compile 'com.android.support:appcompat-v7:22.0.0'
|
||||
compile 'com.android.support:recyclerview-v7:22.0.0'
|
||||
compile 'com.android.support:gridlayout-v7:22.0.0'
|
||||
|
|
|
|||
4
app/proguard-rules.pro
vendored
4
app/proguard-rules.pro
vendored
|
|
@ -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
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.kabouzeid.gramophone">
|
||||
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
|
@ -12,7 +13,10 @@
|
|||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.MaterialMusic" >
|
||||
android:theme="@style/Theme.MaterialMusic"
|
||||
android:supportsRtl="true"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<activity
|
||||
android:name=".ui.activities.MainActivity"
|
||||
android:label="@string/app_name">
|
||||
|
|
@ -75,24 +79,22 @@
|
|||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.PICK" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.OPENABLE" />
|
||||
|
||||
<data android:mimeType="vnd.android.cursor.dir/audio" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".ui.activities.AlbumDetailActivity" >
|
||||
</activity>
|
||||
<activity android:name=".ui.activities.ArtistDetailActivity" >
|
||||
</activity>
|
||||
<activity android:name=".ui.activities.AlbumDetailActivity" />
|
||||
<activity android:name=".ui.activities.ArtistDetailActivity" />
|
||||
<activity
|
||||
android:name=".ui.activities.MusicControllerActivity"
|
||||
android:parentActivityName=".ui.activities.MainActivity" >
|
||||
</activity>
|
||||
android:parentActivityName=".ui.activities.MainActivity" />
|
||||
|
||||
<service
|
||||
android:name=".service.MusicService"
|
||||
android:enabled="true" >
|
||||
</service>
|
||||
android:enabled="true" />
|
||||
|
||||
<receiver android:name=".service.MediaButtonIntentReceiver">
|
||||
<intent-filter>
|
||||
|
|
@ -107,16 +109,13 @@
|
|||
<activity
|
||||
android:name=".ui.activities.tageditor.SongTagEditorActivity"
|
||||
android:label="@string/title_activity_tag_editor"
|
||||
android:windowSoftInputMode="adjustResize" >
|
||||
</activity>
|
||||
android:windowSoftInputMode="adjustResize" />
|
||||
<activity
|
||||
android:name=".ui.activities.tageditor.AlbumTagEditorActivity"
|
||||
android:label="@string/title_activity_album_tag_editor" >
|
||||
</activity>
|
||||
android:label="@string/title_activity_album_tag_editor" />
|
||||
<activity
|
||||
android:name=".ui.activities.SearchActivity"
|
||||
android:label="@string/title_activity_search" >
|
||||
</activity>
|
||||
android:label="@string/title_activity_search" />
|
||||
|
||||
<receiver android:name=".appwidget.MusicPlayerWidget">
|
||||
<intent-filter>
|
||||
|
|
@ -130,12 +129,11 @@
|
|||
|
||||
<activity
|
||||
android:name=".ui.activities.PlaylistDetailActivity"
|
||||
android:label="@string/title_activity_playlist_detail" >
|
||||
</activity>
|
||||
android:label="@string/title_activity_playlist_detail" />
|
||||
<activity
|
||||
android:name=".ui.activities.SettingsActivity"
|
||||
android:label="@string/title_activity_settings" >
|
||||
</activity>
|
||||
android:label="@string/title_activity_settings" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,17 +12,15 @@ import android.view.ViewGroup;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
||||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Callback;
|
||||
|
|
@ -31,12 +29,13 @@ import com.squareup.picasso.Picasso;
|
|||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by karim on 24.11.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder> {
|
||||
|
||||
public static final String TAG = AlbumAdapter.class.getSimpleName();
|
||||
private Activity activity;
|
||||
private boolean usePalette;
|
||||
private final Activity activity;
|
||||
private final boolean usePalette;
|
||||
private List<Album> dataSet;
|
||||
|
||||
@Override
|
||||
|
|
@ -83,10 +82,10 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
ImageView image;
|
||||
TextView title;
|
||||
TextView artist;
|
||||
View footer;
|
||||
final ImageView image;
|
||||
final TextView title;
|
||||
final TextView artist;
|
||||
final View footer;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
@ -105,7 +104,7 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getPosition()).id, albumPairs);
|
||||
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).id, albumPairs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +126,7 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
if (vibrantSwatch != null) {
|
||||
title.setTextColor(vibrantSwatch.getTitleTextColor());
|
||||
artist.setTextColor(vibrantSwatch.getTitleTextColor());
|
||||
ViewUtil.animateViewColor(footer, Util.resolveColor(activity, R.attr.default_bar_color), vibrantSwatch.getRgb());
|
||||
ViewUtil.animateViewColor(footer, DialogUtils.resolveColor(activity, R.attr.default_bar_color), vibrantSwatch.getRgb());
|
||||
} else {
|
||||
paletteBlackAndWhite(title, artist, footer);
|
||||
}
|
||||
|
|
@ -136,31 +135,19 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
}
|
||||
|
||||
private void paletteBlackAndWhite(final TextView title, final TextView artist, final View footer) {
|
||||
title.setTextColor(Util.resolveColor(activity, R.attr.title_text_color));
|
||||
artist.setTextColor(Util.resolveColor(activity, R.attr.caption_text_color));
|
||||
int defaultBarColor = Util.resolveColor(activity, R.attr.default_bar_color);
|
||||
title.setTextColor(DialogUtils.resolveColor(activity, R.attr.title_text_color));
|
||||
artist.setTextColor(DialogUtils.resolveColor(activity, R.attr.caption_text_color));
|
||||
int defaultBarColor = DialogUtils.resolveColor(activity, R.attr.default_bar_color);
|
||||
ViewUtil.animateViewColor(footer, defaultBarColor, defaultBarColor);
|
||||
}
|
||||
|
||||
private void resetColors(final TextView title, final TextView artist, final View footer) {
|
||||
title.setTextColor(Util.resolveColor(activity, R.attr.title_text_color));
|
||||
artist.setTextColor(Util.resolveColor(activity, R.attr.caption_text_color));
|
||||
int defaultBarColor = Util.resolveColor(activity, R.attr.default_bar_color);
|
||||
title.setTextColor(DialogUtils.resolveColor(activity, R.attr.title_text_color));
|
||||
artist.setTextColor(DialogUtils.resolveColor(activity, R.attr.caption_text_color));
|
||||
int defaultBarColor = DialogUtils.resolveColor(activity, R.attr.default_bar_color);
|
||||
footer.setBackgroundColor(defaultBarColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
|
||||
super.onDetachedFromRecyclerView(recyclerView);
|
||||
App.bus.unregister(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
|
||||
super.onAttachedToRecyclerView(recyclerView);
|
||||
App.bus.register(this);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onDataBaseEvent(DataBaseChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
|
|
@ -171,14 +158,4 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onUIChangeEvent(UIPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.ALBUM_OVERVIEW_PALETTE_CHANGED:
|
||||
usePalette = (boolean) event.getValue();
|
||||
notifyDataSetChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,10 +23,10 @@ import com.squareup.picasso.Picasso;
|
|||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by karim on 29.12.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder> {
|
||||
protected Activity activity;
|
||||
protected final Activity activity;
|
||||
protected List<Artist> dataSet;
|
||||
|
||||
public ArtistAdapter(Activity activity) {
|
||||
|
|
@ -70,9 +70,9 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
TextView artistName;
|
||||
TextView artistInfo;
|
||||
ImageView artistImage;
|
||||
final TextView artistName;
|
||||
final TextView artistInfo;
|
||||
final ImageView artistImage;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
@ -90,7 +90,7 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
|||
)};
|
||||
if (activity instanceof AbsFabActivity)
|
||||
artistPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(artistPairs);
|
||||
NavigationUtil.goToArtist(activity, dataSet.get(getPosition()).id, artistPairs);
|
||||
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).id, artistPairs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import com.squareup.picasso.Picasso;
|
|||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by karim on 24.11.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.ViewHolder> {
|
||||
public static final String TAG = AlbumAdapter.class.getSimpleName();
|
||||
|
|
@ -28,9 +28,9 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
private static final int TYPE_MIDDLE = 2;
|
||||
private static final int TYPE_LAST = 3;
|
||||
|
||||
private Activity activity;
|
||||
private List<Album> dataSet;
|
||||
private int listMargin;
|
||||
private final Activity activity;
|
||||
private final List<Album> dataSet;
|
||||
private final int listMargin;
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
|
|
@ -72,9 +72,9 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
ImageView image;
|
||||
TextView title;
|
||||
TextView year;
|
||||
final ImageView image;
|
||||
final TextView title;
|
||||
final TextView year;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
@ -92,7 +92,7 @@ public class ArtistAlbumAdapter extends RecyclerView.Adapter<ArtistAlbumAdapter.
|
|||
)};
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,52 +1,121 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.os.Build;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.ThemeSingleton;
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
|
||||
import com.kabouzeid.gramophone.model.NavigationDrawerItem;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.kabouzeid.gramophone.ui.fragments.NavigationDrawerFragment;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by karim on 23.11.14.
|
||||
* @author Aidan Follestad (afollestad)
|
||||
*/
|
||||
public class NavigationDrawerItemAdapter extends ArrayAdapter<NavigationDrawerItem> {
|
||||
private int currentChecked = -1;
|
||||
public class NavigationDrawerItemAdapter extends RecyclerView.Adapter<NavigationDrawerItemAdapter.ShortcutViewHolder> implements View.OnClickListener {
|
||||
|
||||
public NavigationDrawerItemAdapter(Context context, int resource, List<NavigationDrawerItem> 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<NavigationDrawerItem> mItems;
|
||||
private final Callback mCallback;
|
||||
|
||||
public interface Callback {
|
||||
void onItemSelected(int index);
|
||||
}
|
||||
|
||||
public NavigationDrawerItemAdapter(Context context, ArrayList<NavigationDrawerItem> 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);
|
||||
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);
|
||||
}
|
||||
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)));
|
||||
|
||||
@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 {
|
||||
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)));
|
||||
// noinspection deprecation
|
||||
holder.icon.setAlpha(selected ? ALPHA_ACTIVATED : ALPHA_ICON);
|
||||
}
|
||||
View container = convertView.findViewById(R.id.container);
|
||||
container.setActivated(position == currentChecked);
|
||||
return convertView;
|
||||
|
||||
holder.container.setActivated(selected);
|
||||
holder.container.setTag(position);
|
||||
holder.container.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mItems.size();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Fragment>(mFragment));
|
||||
mFragmentArray.put(position, new WeakReference<>(mFragment));
|
||||
return mFragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(final int position) {
|
||||
final Holder mCurrentHolder = mHolderList.get(position);
|
||||
final Fragment mFragment = Fragment.instantiate(mContext,
|
||||
return Fragment.instantiate(mContext,
|
||||
mCurrentHolder.mClassName, mCurrentHolder.mParams);
|
||||
return mFragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -114,7 +113,7 @@ public class PagerAdapter extends FragmentPagerAdapter {
|
|||
ARTIST(ArtistViewFragment.class),
|
||||
PLAYLIST(PlaylistViewFragment.class);
|
||||
|
||||
private Class<? extends Fragment> mFragmentClass;
|
||||
private final Class<? extends Fragment> mFragmentClass;
|
||||
|
||||
MusicFragments(final Class<? extends Fragment> fragmentClass) {
|
||||
mFragmentClass = fragmentClass;
|
||||
|
|
|
|||
|
|
@ -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<Song> {
|
||||
private Activity activity;
|
||||
|
||||
public PlayingQueueAdapter(Activity activity, List<Song> playList) {
|
||||
private final ActionBarActivity activity;
|
||||
|
||||
public PlayingQueueAdapter(ActionBarActivity activity, ArrayList<Song> playList) {
|
||||
super(activity, R.layout.item_list_playlist_song, playList);
|
||||
this.activity = activity;
|
||||
}
|
||||
|
|
@ -52,7 +44,7 @@ public class PlayingQueueAdapter extends ArrayAdapter<Song> {
|
|||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<PlaylistAdapter.ViewHolder> {
|
||||
|
||||
public static final String TAG = PlaylistAdapter.class.getSimpleName();
|
||||
protected Activity activity;
|
||||
protected final ActionBarActivity activity;
|
||||
protected List<Playlist> dataSet;
|
||||
|
||||
public PlaylistAdapter(Activity activity) {
|
||||
public PlaylistAdapter(ActionBarActivity activity) {
|
||||
this.activity = activity;
|
||||
loadDataSet();
|
||||
}
|
||||
|
|
@ -57,8 +58,8 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
public TextView playlistName;
|
||||
private ImageView menu;
|
||||
public final TextView playlistName;
|
||||
private final ImageView menu;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
@ -73,7 +74,8 @@ public class PlaylistAdapter extends RecyclerView.Adapter<PlaylistAdapter.ViewHo
|
|||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
return MenuItemClickHelper.handlePlaylistMenuClick(activity, dataSet.get(getAdapterPosition()), item);
|
||||
return MenuItemClickHelper.handlePlaylistMenuClick(
|
||||
activity, dataSet.get(getAdapterPosition()), item);
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
package com.kabouzeid.gramophone.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Typeface;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
|
@ -12,22 +12,23 @@ import android.widget.ImageView;
|
|||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.model.SearchEntry;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.SearchActivity;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by karim on 27.02.15.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class SearchAdapter extends ArrayAdapter<SearchEntry> {
|
||||
private Activity activity;
|
||||
|
||||
public SearchAdapter(Activity activity, List<SearchEntry> objects) {
|
||||
private final ActionBarActivity activity;
|
||||
|
||||
public SearchAdapter(ActionBarActivity activity, List<SearchEntry> objects) {
|
||||
super(activity, R.layout.item_list_search, objects);
|
||||
this.activity = activity;
|
||||
}
|
||||
|
|
@ -50,7 +51,7 @@ public class SearchAdapter extends ArrayAdapter<SearchEntry>{
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -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<AlbumSongAdapter.ViewHolder> {
|
||||
|
||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||
protected final ActionBarActivity activity;
|
||||
protected final ArrayList<Song> dataSet;
|
||||
|
||||
protected Activity activity;
|
||||
protected List<Song> dataSet;
|
||||
|
||||
public AlbumSongAdapter(Activity activity, List<Song> objects) {
|
||||
public AlbumSongAdapter(ActionBarActivity activity, ArrayList<Song> objects) {
|
||||
this.activity = activity;
|
||||
dataSet = objects;
|
||||
}
|
||||
|
|
@ -66,10 +55,10 @@ public class AlbumSongAdapter extends RecyclerView.Adapter<AlbumSongAdapter.View
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
TextView songTitle;
|
||||
TextView trackNumber;
|
||||
TextView artistName;
|
||||
ImageView overflowButton;
|
||||
final TextView songTitle;
|
||||
final TextView trackNumber;
|
||||
final TextView artistName;
|
||||
final ImageView overflowButton;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
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.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
|
@ -11,33 +10,25 @@ import android.widget.ArrayAdapter;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
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 com.squareup.picasso.Picasso;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by karim on 14.03.15.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class ArtistSongAdapter extends ArrayAdapter<Song> {
|
||||
private Activity activity;
|
||||
|
||||
public ArtistSongAdapter(Activity activity, List<Song> songs) {
|
||||
private final ActionBarActivity activity;
|
||||
|
||||
public ArtistSongAdapter(ActionBarActivity activity, List<Song> songs) {
|
||||
super(activity, R.layout.item_list_song, songs);
|
||||
this.activity = activity;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -22,17 +22,19 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
|
|||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by karim on 27.11.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapter.ViewHolder> {
|
||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||
protected Activity activity;
|
||||
protected List<PlaylistSong> dataSet;
|
||||
|
||||
public PlaylistSongAdapter(Activity activity, List<PlaylistSong> objects) {
|
||||
public static final String TAG = AlbumSongAdapter.class.getSimpleName();
|
||||
protected final ActionBarActivity activity;
|
||||
protected final ArrayList<PlaylistSong> dataSet;
|
||||
|
||||
public PlaylistSongAdapter(ActionBarActivity activity, ArrayList<PlaylistSong> objects) {
|
||||
this.activity = activity;
|
||||
dataSet = objects;
|
||||
}
|
||||
|
|
@ -62,10 +64,10 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
|||
}
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
TextView songTitle;
|
||||
TextView songInfo;
|
||||
ImageView overflowButton;
|
||||
ImageView albumArt;
|
||||
final TextView songTitle;
|
||||
final TextView songInfo;
|
||||
final ImageView overflowButton;
|
||||
final ImageView albumArt;
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
|
@ -77,7 +79,8 @@ public class PlaylistSongAdapter extends RecyclerView.Adapter<PlaylistSongAdapte
|
|||
itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
MusicPlayerRemote.openQueue((List<Song>) (List) dataSet, getAdapterPosition(), true);
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.openQueue((ArrayList<Song>) (List) dataSet, getAdapterPosition(), true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package com.kabouzeid.gramophone.adapter.songadapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Typeface;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -13,41 +12,35 @@ import android.widget.ImageView;
|
|||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.afollestad.materialdialogs.ThemeSingleton;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.DeleteSongsDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.MenuItemClickHelper;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.loader.SongLoader;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.SongTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.squareup.otto.Subscribe;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by karim on 27.11.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
||||
|
||||
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<Song> dataSet;
|
||||
protected final ActionBarActivity activity;
|
||||
protected ArrayList<Song> dataSet;
|
||||
|
||||
public SongAdapter(Activity activity) {
|
||||
public SongAdapter(ActionBarActivity activity) {
|
||||
this.activity = activity;
|
||||
loadDataSet();
|
||||
}
|
||||
|
|
@ -80,15 +73,14 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
|||
.placeholder(R.drawable.default_album_art)
|
||||
.into(holder.albumArt);
|
||||
} else {
|
||||
int accentColor = Util.resolveColor(activity, R.attr.colorAccent);
|
||||
holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase());
|
||||
holder.songTitle.setTextColor(accentColor);
|
||||
holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor);
|
||||
holder.songTitle.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
||||
holder.songInfo.setVisibility(View.GONE);
|
||||
holder.overflowButton.setVisibility(View.GONE);
|
||||
final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2;
|
||||
holder.albumArt.setPadding(padding, padding, padding, padding);
|
||||
holder.albumArt.setColorFilter(accentColor);
|
||||
holder.albumArt.setColorFilter(ThemeSingleton.get().positiveColor);
|
||||
holder.albumArt.setImageResource(R.drawable.ic_shuffle_white_48dp);
|
||||
holder.separator.setVisibility(View.VISIBLE);
|
||||
holder.short_separator.setVisibility(View.GONE);
|
||||
|
|
@ -101,12 +93,12 @@ public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
|
|||
}
|
||||
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import android.appwidget.AppWidgetProvider;
|
|||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
|
@ -15,7 +14,6 @@ import com.kabouzeid.gramophone.model.Song;
|
|||
import com.kabouzeid.gramophone.service.MusicService;
|
||||
import com.kabouzeid.gramophone.ui.activities.MusicControllerActivity;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ 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<Album> {
|
||||
class AlbumAlphabeticComparator implements Comparator<Album> {
|
||||
@Override
|
||||
public int compare(Album lhs, Album rhs) {
|
||||
return lhs.title.trim().compareToIgnoreCase(rhs.title.trim());
|
||||
|
|
|
|||
|
|
@ -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<Artist> {
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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<Song> {
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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<Song> {
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> list = new ArrayList<>();
|
||||
list.add(song);
|
||||
return create(list);
|
||||
}
|
||||
|
||||
public static AddToPlaylistDialog create(ArrayList<Song> 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<Playlist> 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<Song> songs = (ArrayList<Song>) 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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> list = new ArrayList<>();
|
||||
if (song != null)
|
||||
list.add(song);
|
||||
return create(list);
|
||||
}
|
||||
|
||||
public static CreatePlaylistDialog create(ArrayList<Song> 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<Song> songs = (ArrayList<Song>) getArguments().getSerializable("songs");
|
||||
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}).build();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> 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<Song> playingQueue = (ArrayList<Song>) getArguments().getSerializable("queue");
|
||||
AddToPlaylistDialog.create(playingQueue).show(getActivity().getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
}
|
||||
})
|
||||
.build();
|
||||
|
||||
//noinspection unchecked
|
||||
final ArrayList<Song> playingQueue = (ArrayList<Song>) 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> tmpSong = new ArrayList<>();
|
||||
tmpSong.add(song);
|
||||
return getDialog(context, tmpSong);
|
||||
}
|
||||
|
||||
public static MaterialDialog getDialog(final Context context, final List<Song> songs) {
|
||||
final List<Playlist> 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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> tmpSong = new ArrayList<>();
|
||||
tmpSong.add(song);
|
||||
return getDialog(context, tmpSong);
|
||||
}
|
||||
|
||||
public static MaterialDialog getDialog(final Context context, final List<Song> 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<Song>) 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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> 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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<Song> playingQueue;
|
||||
private static List<Song> restoredOriginalQueue;
|
||||
private static ArrayList<Song> playingQueue;
|
||||
private static ArrayList<Song> 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<Song> playingQueue, final int startPosition, final boolean startPlaying) {
|
||||
public static void openQueue(final ArrayList<Song> 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<Song> getPlayingQueue() {
|
||||
public static ArrayList<Song> 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<Song> songs = SongLoader.getAllSongs(context);
|
||||
ArrayList<Song> 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<Song>) InternalStorageUtil.readObject(context, AppKeys.IS_PLAYING_QUEUE);
|
||||
List restoredOriginalQueue = (ArrayList<Song>) InternalStorageUtil.readObject(context, AppKeys.IS_ORIGINAL_PLAYING_QUEUE);
|
||||
ArrayList<Song> restoredQueue = (ArrayList<Song>) InternalStorageUtil.readObject(context, AppKeys.IS_PLAYING_QUEUE);
|
||||
ArrayList<Song> restoredOriginalQueue = (ArrayList<Song>) 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;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.kabouzeid.gramophone.helper;
|
||||
|
||||
/**
|
||||
* Created by karim on 27.12.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
|
||||
import android.app.Notification;
|
||||
|
|
@ -22,6 +22,7 @@ import com.kabouzeid.gramophone.util.MusicUtil;
|
|||
import com.squareup.picasso.Picasso;
|
||||
|
||||
public class PlayingNotificationHelper {
|
||||
|
||||
public static final String TAG = PlayingNotificationHelper.class.getSimpleName();
|
||||
public static final int NOTIFICATION_ID = 1337;
|
||||
|
||||
|
|
@ -163,8 +164,6 @@ public class PlayingNotificationHelper {
|
|||
notificationManager.notify(NOTIFICATION_ID, notification);
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
public void killNotification() {
|
||||
service.stopForeground(true);
|
||||
notification = null;
|
||||
|
|
|
|||
|
|
@ -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<Song> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Song> listToShuffle, final int current) {
|
||||
if (current >= 0) {
|
||||
Song song = listToShuffle.remove(current);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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<Song> getAlbumSongList(final Context context, final int albumId, Comparator<Song> comparator) {
|
||||
List<Song> songs = getAlbumSongList(context, albumId);
|
||||
public static ArrayList<Song> getAlbumSongList(final Context context, final int albumId, Comparator<Song> comparator) {
|
||||
ArrayList<Song> songs = getAlbumSongList(context, albumId);
|
||||
Collections.sort(songs, comparator);
|
||||
return songs;
|
||||
}
|
||||
|
||||
public static List<Song> getAlbumSongList(final Context context, final int albumId) {
|
||||
public static ArrayList<Song> getAlbumSongList(final Context context, final int albumId) {
|
||||
Cursor cursor = makeAlbumSongCursor(context, albumId);
|
||||
List<Song> songs = new ArrayList<>();
|
||||
ArrayList<Song> 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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Album> getArtistAlbumList(final Context context, final int artistId) {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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<Song> getArtistSongList(final Context context, final int artistId) {
|
||||
|
||||
public static ArrayList<Song> getArtistSongList(final Context context, final int artistId) {
|
||||
Cursor cursor = makeArtistSongCursor(context, artistId);
|
||||
List<Song> songs = new ArrayList<>();
|
||||
ArrayList<Song> 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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<PlaylistSong> getPlaylistSongList(final Context context, final int playlistID) {
|
||||
List<PlaylistSong> songs = new ArrayList<>();
|
||||
public static ArrayList<PlaylistSong> getPlaylistSongList(final Context context, final int playlistID) {
|
||||
ArrayList<PlaylistSong> songs = new ArrayList<>();
|
||||
Cursor cursor = makePlaylistSongCursor(context, playlistID);
|
||||
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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<Song> getAllSongs(Context context) {
|
||||
public static ArrayList<Song> getAllSongs(Context context) {
|
||||
Cursor cursor = makeSongCursor(context);
|
||||
List<Song> songs = new ArrayList<>();
|
||||
ArrayList<Song> songs = new ArrayList<>();
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
do {
|
||||
final int id = cursor.getInt(0);
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -8,16 +8,16 @@ import com.kabouzeid.gramophone.util.MusicUtil;
|
|||
import com.squareup.picasso.Picasso;
|
||||
|
||||
/**
|
||||
* Created by karim on 22.11.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class Album implements SearchEntry {
|
||||
|
||||
public int id;
|
||||
public final int id;
|
||||
public int artistId;
|
||||
public String title;
|
||||
public String artistName;
|
||||
public int songCount;
|
||||
public int year;
|
||||
public final String title;
|
||||
public final String artistName;
|
||||
public final int songCount;
|
||||
public final int year;
|
||||
|
||||
public Album(final int id, final String title, final String artistName, final int artistId,
|
||||
final int songNumber, final int albumYear) {
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@ import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistThumbnailUrlLoader;
|
|||
import com.squareup.picasso.Picasso;
|
||||
|
||||
/**
|
||||
* Created by karim on 29.12.14.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class Artist implements SearchEntry {
|
||||
public int id;
|
||||
public String name;
|
||||
public int albumCount;
|
||||
public int songCount;
|
||||
public final int id;
|
||||
public final String name;
|
||||
public final int albumCount;
|
||||
public final int songCount;
|
||||
|
||||
public Artist(final int id, final String name, final int albumCount, final int songCount) {
|
||||
this.id = id;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.kabouzeid.gramophone.model;
|
||||
|
||||
/**
|
||||
* Created by karim on 28.03.15.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class UIPreferenceChangedEvent {
|
||||
public static final int THEME_CHANGED = 0;
|
||||
|
|
@ -11,8 +11,8 @@ public class UIPreferenceChangedEvent {
|
|||
public static final int PLAYBACK_CONTROLLER_CARD_CHANGED = 4;
|
||||
public static final int TOOLBAR_TRANSPARENT_CHANGED = 5;
|
||||
|
||||
private int action;
|
||||
private Object value;
|
||||
private final int action;
|
||||
private final Object value;
|
||||
|
||||
public UIPreferenceChangedEvent(int action, Object value) {
|
||||
this.action = action;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ import com.squareup.picasso.Target;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MusicService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener, AudioManager.OnAudioFocusChangeListener {
|
||||
public static final String ACTION_TOGGLE_PLAYBACK = "com.kabouzeid.gramophone.action.TOGGLE_PLAYBACK";
|
||||
|
|
@ -66,8 +65,8 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
}
|
||||
};
|
||||
private MediaPlayer player;
|
||||
private List<Song> playingQueue;
|
||||
private List<Song> originalPlayingQueue;
|
||||
private ArrayList<Song> playingQueue;
|
||||
private ArrayList<Song> originalPlayingQueue;
|
||||
private int currentSongId = -1;
|
||||
private int position = -1;
|
||||
private int shuffleMode;
|
||||
|
|
@ -355,7 +354,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
.into(remoteAlbumArt);
|
||||
}
|
||||
|
||||
private Target remoteAlbumArt = new Target() {
|
||||
private final Target remoteAlbumArt = new Target() {
|
||||
@Override
|
||||
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
|
||||
updateRemoteControlClientBitmap(bitmap.copy(bitmap.getConfig(), true));
|
||||
|
|
@ -432,7 +431,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
return getPosition() == getPlayingQueue().size() - 1;
|
||||
}
|
||||
|
||||
public List<Song> getPlayingQueue() {
|
||||
public ArrayList<Song> getPlayingQueue() {
|
||||
return playingQueue;
|
||||
}
|
||||
|
||||
|
|
@ -475,7 +474,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
savePosition();
|
||||
}
|
||||
|
||||
public void openQueue(final List<Song> playingQueue, final int startPosition, final boolean startPlaying) {
|
||||
public void openQueue(final ArrayList<Song> playingQueue, final int startPosition, final boolean startPlaying) {
|
||||
if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue.size()) {
|
||||
originalPlayingQueue = playingQueue;
|
||||
this.playingQueue = new ArrayList<>(originalPlayingQueue);
|
||||
|
|
@ -514,7 +513,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
}
|
||||
}
|
||||
|
||||
public void restorePreviousState(final List<Song> originalPlayingQueue, final List<Song> playingQueue, int position) {
|
||||
public void restorePreviousState(final ArrayList<Song> originalPlayingQueue, final ArrayList<Song> playingQueue, int position) {
|
||||
this.originalPlayingQueue = originalPlayingQueue;
|
||||
this.playingQueue = playingQueue;
|
||||
this.position = position;
|
||||
|
|
@ -772,6 +771,8 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe
|
|||
}
|
||||
|
||||
public int getAudioSessionId() {
|
||||
if (player == null)
|
||||
return AudioEffect.ERROR_BAD_VALUE;
|
||||
return player.getAudioSessionId();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
|
@ -43,7 +43,7 @@ import com.squareup.otto.Subscribe;
|
|||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -54,10 +54,8 @@ import java.util.List;
|
|||
* */
|
||||
|
||||
public class AlbumDetailActivity extends AbsFabActivity {
|
||||
|
||||
public static final String TAG = AlbumDetailActivity.class.getSimpleName();
|
||||
|
||||
private App app;
|
||||
|
||||
private Album album;
|
||||
|
||||
private ObservableRecyclerView recyclerView;
|
||||
|
|
@ -66,12 +64,11 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
private View songsBackgroundView;
|
||||
private TextView albumTitleView;
|
||||
private Toolbar toolbar;
|
||||
private int toolbarHeight;
|
||||
private int headerOffset;
|
||||
private int titleViewHeight;
|
||||
private int albumArtViewHeight;
|
||||
private int toolbarColor;
|
||||
private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||
@Override
|
||||
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
|
||||
scrollY += albumArtViewHeight + titleViewHeight;
|
||||
|
|
@ -112,7 +109,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
App.bus.register(this);
|
||||
|
||||
if (Util.hasLollipopSDK()) postponeEnterTransition();
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled())
|
||||
getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
|
||||
Bundle intentExtras = getIntent().getExtras();
|
||||
int albumId = -1;
|
||||
|
|
@ -148,8 +146,8 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
|
||||
private void setUpObservableListViewParams() {
|
||||
albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
|
||||
toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
|
||||
toolbarHeight = Util.getActionBarSize(this);
|
||||
toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
|
||||
int toolbarHeight = Util.getActionBarSize(this);
|
||||
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
|
||||
headerOffset = toolbarHeight;
|
||||
headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin);
|
||||
|
|
@ -229,7 +227,7 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void setUpSongsAdapter() {
|
||||
final List<Song> songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator());
|
||||
final ArrayList<Song> songs = AlbumSongLoader.getAlbumSongList(this, album.id, new SongTrackNumberComparator());
|
||||
final AlbumSongAdapter albumSongAdapter = new AlbumSongAdapter(this, songs);
|
||||
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
||||
recyclerView.setAdapter(albumSongAdapter);
|
||||
|
|
@ -283,15 +281,15 @@ public class AlbumDetailActivity extends AbsFabActivity {
|
|||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.action_go_to_artist:
|
||||
Pair[] artistPairs = null;
|
||||
artistPairs = getSharedViewsWithFab(artistPairs);
|
||||
Pair[] artistPairs = getSharedViewsWithFab(null);
|
||||
NavigationUtil.goToArtist(this, album.artistId, artistPairs);
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Subscribe public void onUIPreferenceChanged(UIPreferenceChangedEvent event){
|
||||
@Subscribe
|
||||
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED:
|
||||
setNavigationBarColored((boolean) event.getValue());
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import android.widget.TextView;
|
|||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
|
@ -50,6 +51,7 @@ import com.squareup.otto.Subscribe;
|
|||
import com.squareup.picasso.Callback;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
|
|
@ -74,7 +76,6 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
private View songsBackgroundView;
|
||||
private TextView artistNameTv;
|
||||
private Toolbar toolbar;
|
||||
private int toolbarHeight;
|
||||
private int headerOffset;
|
||||
private int titleViewHeight;
|
||||
private int artistImageViewHeight;
|
||||
|
|
@ -85,7 +86,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
|
||||
private Spanned biography;
|
||||
|
||||
private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||
@Override
|
||||
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
|
||||
scrollY += artistImageViewHeight + titleViewHeight;
|
||||
|
|
@ -127,7 +128,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
App.bus.register(this);
|
||||
|
||||
if (Util.hasLollipopSDK()) postponeEnterTransition();
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
|
||||
getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
|
||||
getIntentExtras();
|
||||
initViews();
|
||||
|
|
@ -153,8 +155,8 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
|
||||
private void setUpObservableListViewParams() {
|
||||
artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height);
|
||||
toolbarColor = Util.resolveColor(this, R.attr.default_bar_color);
|
||||
toolbarHeight = Util.getActionBarSize(this);
|
||||
toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
|
||||
int toolbarHeight = Util.getActionBarSize(this);
|
||||
titleViewHeight = getResources().getDimensionPixelSize(R.dimen.title_view_height);
|
||||
headerOffset = toolbarHeight;
|
||||
headerOffset += getResources().getDimensionPixelSize(R.dimen.statusMargin);
|
||||
|
|
@ -193,7 +195,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0);
|
||||
songListView.addHeaderView(songListHeader);
|
||||
|
||||
final List<Song> songs = ArtistSongLoader.getArtistSongList(this, artist.id);
|
||||
final ArrayList<Song> songs = ArtistSongLoader.getArtistSongList(this, artist.id);
|
||||
ArtistSongAdapter songAdapter = new ArtistSongAdapter(this, songs);
|
||||
songListView.setAdapter(songAdapter);
|
||||
|
||||
|
|
@ -242,6 +244,7 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
return new MaterialDialog.Builder(ArtistDetailActivity.this)
|
||||
.title(artist.name)
|
||||
.content(biography)
|
||||
.positiveText(android.R.string.ok)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
|
@ -285,14 +288,15 @@ public class ArtistDetailActivity extends AbsFabActivity {
|
|||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private void setStandardColors() {
|
||||
int titleTextColor = Util.resolveColor(this, R.attr.title_text_color);
|
||||
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
|
||||
int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
|
||||
int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
|
||||
|
||||
toolbarColor = defaultBarColor;
|
||||
artistNameTv.setBackgroundColor(defaultBarColor);
|
||||
artistNameTv.setTextColor(titleTextColor);
|
||||
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) getWindow().setNavigationBarColor(Util.resolveColor(this, R.attr.default_bar_color));
|
||||
if (Util.hasLollipopSDK() && PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled())
|
||||
getWindow().setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color));
|
||||
}
|
||||
|
||||
private void setUpToolBar() {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import android.content.Intent;
|
|||
import android.content.res.Configuration;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.provider.MediaStore;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v4.view.ViewPager;
|
||||
|
|
@ -17,11 +18,12 @@ import android.view.MenuItem;
|
|||
import android.view.SubMenu;
|
||||
import android.view.View;
|
||||
|
||||
import com.afollestad.materialdialogs.ThemeSingleton;
|
||||
import com.astuetz.PagerSlidingTabStrip;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.PagerAdapter;
|
||||
import com.kabouzeid.gramophone.helper.AboutDeveloperDialogHelper;
|
||||
import com.kabouzeid.gramophone.helper.CreatePlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.dialogs.AboutDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||
import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
||||
|
|
@ -44,6 +46,7 @@ import com.kabouzeid.gramophone.util.Util;
|
|||
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
|
|
@ -95,8 +98,7 @@ public class MainActivity extends AbsFabActivity
|
|||
|
||||
navigationDrawerFragment.setItemChecked(startPosition);
|
||||
|
||||
final int accentColor = Util.resolveColor(MainActivity.this, R.attr.colorAccent);
|
||||
slidingTabLayout.setIndicatorColor(accentColor);
|
||||
slidingTabLayout.setIndicatorColor(ThemeSingleton.get().positiveColor);
|
||||
slidingTabLayout.setViewPager(viewPager);
|
||||
|
||||
slidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||
|
|
@ -137,7 +139,7 @@ public class MainActivity extends AbsFabActivity
|
|||
|
||||
private void setToolBarTransparent(boolean transparent) {
|
||||
float alpha = transparent ? 0.97f : 1f;
|
||||
final int colorPrimary = Util.resolveColor(this, R.attr.colorPrimary);
|
||||
final int colorPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary();
|
||||
ViewUtil.setBackgroundAlpha(toolbar, alpha, colorPrimary);
|
||||
ViewUtil.setBackgroundAlpha(statusBar, alpha, colorPrimary);
|
||||
ViewUtil.setBackgroundAlpha(slidingTabLayout, alpha, colorPrimary);
|
||||
|
|
@ -222,6 +224,22 @@ public class MainActivity extends AbsFabActivity
|
|||
getResources().getString(R.string.transition_album_cover)
|
||||
)
|
||||
}));
|
||||
} else if (position == NavigationDrawerFragment.ABOUT_INDEX) {
|
||||
drawerLayout.closeDrawers();
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
new AboutDialog().show(getSupportFragmentManager(), "ABOUT_DIALOG");
|
||||
}
|
||||
}, 200);
|
||||
} else if (position == NavigationDrawerFragment.SETTINGS_INDEX) {
|
||||
drawerLayout.closeDrawers();
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
|
||||
}
|
||||
}, 200);
|
||||
} else {
|
||||
if (viewPager != null) {
|
||||
viewPager.setCurrentItem(position, true);
|
||||
|
|
@ -267,17 +285,11 @@ public class MainActivity extends AbsFabActivity
|
|||
MusicPlayerRemote.shuffleAllSongs(this);
|
||||
return true;
|
||||
case R.id.action_new_playlist:
|
||||
CreatePlaylistDialogHelper.getDialog(this).show();
|
||||
CreatePlaylistDialog.create().show(getSupportFragmentManager(), "CREATE_PLAYLIST");
|
||||
return true;
|
||||
case R.id.action_search:
|
||||
startActivity(new Intent(MainActivity.this, SearchActivity.class));
|
||||
return true;
|
||||
case R.id.action_settings:
|
||||
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
|
||||
return true;
|
||||
case R.id.action_about:
|
||||
AboutDeveloperDialogHelper.getDialog(this).show();
|
||||
return true;
|
||||
case R.id.action_current_playing:
|
||||
NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(null));
|
||||
return true;
|
||||
|
|
@ -319,9 +331,9 @@ public class MainActivity extends AbsFabActivity
|
|||
PreferenceUtils.getInstance(MainActivity.this).setLastStartPage(currentPage);
|
||||
}
|
||||
|
||||
private boolean handlePlaybackIntent(Intent intent) {
|
||||
private void handlePlaybackIntent(Intent intent) {
|
||||
if (intent == null) {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
Uri uri = intent.getData();
|
||||
|
|
@ -335,7 +347,8 @@ public class MainActivity extends AbsFabActivity
|
|||
final int id = (int) parseIdFromIntent(intent, "playlistId", "playlist");
|
||||
if (id >= 0) {
|
||||
int position = intent.getIntExtra("position", 0);
|
||||
MusicPlayerRemote.openQueue((List<Song>) (List<? extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
|
||||
//noinspection unchecked
|
||||
MusicPlayerRemote.openQueue((ArrayList<Song>) (List<? extends Song>) PlaylistSongLoader.getPlaylistSongList(this, id), position, true);
|
||||
handled = true;
|
||||
}
|
||||
} else if (MediaStore.Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
|
||||
|
|
@ -356,7 +369,6 @@ public class MainActivity extends AbsFabActivity
|
|||
if (handled) {
|
||||
setIntent(new Intent());
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
private long parseIdFromIntent(Intent intent, String longKey,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.ui.activities;
|
|||
import android.annotation.TargetApi;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
|
@ -20,11 +19,14 @@ import android.widget.SeekBar;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.ThemeSingleton;
|
||||
import com.afollestad.materialdialogs.internal.MDTintHelper;
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.helper.AddToPlaylistDialogHelper;
|
||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.SongDetailDialog;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SongDetailDialogHelper;
|
||||
import com.kabouzeid.gramophone.lastfm.artist.LastFMArtistImageUrlLoader;
|
||||
import com.kabouzeid.gramophone.loader.SongFilePathLoader;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
|
|
@ -66,9 +68,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
private ImageButton repeatButton;
|
||||
private ImageButton shuffleButton;
|
||||
private View mediaControllerContainer;
|
||||
|
||||
private int lastFooterColor = -1;
|
||||
|
||||
private boolean killThreads = false;
|
||||
|
||||
@Override
|
||||
|
|
@ -128,11 +128,13 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
if (Util.hasLollipopSDK()) {
|
||||
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
|
||||
}
|
||||
mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
|
||||
mediaControllerContainer.setBackgroundColor(
|
||||
DialogUtils.resolveColor(this, R.attr.music_controller_container_color));
|
||||
} else {
|
||||
if (Util.hasLollipopSDK() && !Util.isInPortraitMode(this)) {
|
||||
mediaControllerContainer.setElevation(getResources().getDimensionPixelSize(R.dimen.cardview_default_elevation));
|
||||
mediaControllerContainer.setBackgroundColor(Util.resolveColor(this, R.attr.music_controller_container_color));
|
||||
mediaControllerContainer.setBackgroundColor(
|
||||
DialogUtils.resolveColor(this, R.attr.music_controller_container_color));
|
||||
} else {
|
||||
mediaControllerContainer.setBackground(null);
|
||||
}
|
||||
|
|
@ -140,6 +142,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void setUpProgressSlider() {
|
||||
MDTintHelper.setTint(progressSlider, ThemeSingleton.get().positiveColor);
|
||||
progressSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||
|
|
@ -159,8 +162,10 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void setUpPrevNext() {
|
||||
nextButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_next_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
prevButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_skip_previous_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
nextButton.setImageDrawable(Util.getTintedDrawable(this,
|
||||
R.drawable.ic_skip_next_white_48dp, DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
prevButton.setImageDrawable(Util.getTintedDrawable(this,
|
||||
R.drawable.ic_skip_previous_white_48dp, DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
nextButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
|
@ -188,10 +193,12 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
private void updateShuffleState() {
|
||||
switch (MusicPlayerRemote.getShuffleMode()) {
|
||||
case MusicService.SHUFFLE_MODE_SHUFFLE:
|
||||
shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
|
||||
shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp,
|
||||
ThemeSingleton.get().positiveColor));
|
||||
break;
|
||||
default:
|
||||
shuffleButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_shuffle_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_48dp,
|
||||
DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -209,13 +216,16 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
private void updateRepeatState() {
|
||||
switch (MusicPlayerRemote.getRepeatMode()) {
|
||||
case MusicService.REPEAT_MODE_NONE:
|
||||
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp,
|
||||
DialogUtils.resolveColor(this, R.attr.themed_drawable_color)));
|
||||
break;
|
||||
case MusicService.REPEAT_MODE_ALL:
|
||||
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
|
||||
repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_48dp,
|
||||
ThemeSingleton.get().positiveColor));
|
||||
break;
|
||||
default:
|
||||
repeatButton.setImageDrawable(Util.getTintedDrawable(getResources(), R.drawable.ic_repeat_one_white_48dp, Util.resolveColor(this, R.attr.themed_drawable_activated_color)));
|
||||
repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_one_white_48dp,
|
||||
ThemeSingleton.get().positiveColor));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -294,9 +304,9 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
}
|
||||
|
||||
private void setStandardColors() {
|
||||
int songTitleTextColor = Util.resolveColor(this, R.attr.title_text_color);
|
||||
int artistNameTextColor = Util.resolveColor(this, R.attr.caption_text_color);
|
||||
int defaultBarColor = Util.resolveColor(this, R.attr.default_bar_color);
|
||||
int songTitleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color);
|
||||
int artistNameTextColor = DialogUtils.resolveColor(this, R.attr.caption_text_color);
|
||||
int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color);
|
||||
|
||||
animateColorChange(defaultBarColor);
|
||||
|
||||
|
|
@ -353,7 +363,8 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
Thread.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
} catch (Exception e2) {
|
||||
e2.printStackTrace();
|
||||
}
|
||||
final int finalTotal = total;
|
||||
final int finalCurrentPosition = currentPosition;
|
||||
|
|
@ -427,7 +438,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
Toast.makeText(this, "This feature is not available yet", Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
case R.id.action_add_to_playlist:
|
||||
AddToPlaylistDialogHelper.getDialog(this, song).show();
|
||||
AddToPlaylistDialog.create(song).show(getSupportFragmentManager(), "ADD_PLAYLIST");
|
||||
return true;
|
||||
case android.R.id.home:
|
||||
super.onBackPressed();
|
||||
|
|
@ -443,7 +454,7 @@ public class MusicControllerActivity extends AbsFabActivity {
|
|||
case R.id.action_details:
|
||||
String songFilePath = SongFilePathLoader.getSongFilePath(this, song.id);
|
||||
File songFile = new File(songFilePath);
|
||||
SongDetailDialogHelper.getDialog(this, songFile).show();
|
||||
SongDetailDialog.create(songFile).show(getSupportFragmentManager(), "SONG_DETAIL");
|
||||
return true;
|
||||
case R.id.action_go_to_album:
|
||||
NavigationUtil.goToAlbum(this, song.albumId, getSharedViewsWithFab(null));
|
||||
|
|
|
|||
|
|
@ -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<PlaylistSong> songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
|
||||
getIntentExtras();
|
||||
|
||||
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
||||
final ArrayList<PlaylistSong> 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;
|
||||
|
|
|
|||
|
|
@ -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<Song> playList = new ArrayList<>();
|
||||
ArrayList<Song> 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) {
|
||||
|
|
|
|||
|
|
@ -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,25 +13,48 @@ import android.preference.PreferenceManager;
|
|||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.ColorChooserDialog;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.prefs.ColorChooserPreference;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
|
||||
public class SettingsActivity extends AbsBaseActivity {
|
||||
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
|
||||
public static final String TAG = SettingsActivity.class.getSimpleName();
|
||||
|
||||
private Toolbar mToolbar;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_preferences);
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
mToolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
mToolbar.setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
||||
getWindow().setStatusBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker());
|
||||
setSupportActionBar(mToolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
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 {
|
||||
private Preference equalizer;
|
||||
|
||||
|
|
@ -62,6 +86,30 @@ public class SettingsActivity extends AbsBaseActivity {
|
|||
}
|
||||
});
|
||||
|
||||
ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color");
|
||||
primaryColor.setColor(PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary(),
|
||||
DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary));
|
||||
primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
new ColorChooserDialog().show(getActivity(), preference.getTitleRes(),
|
||||
PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
ColorChooserPreference accentColor = (ColorChooserPreference) findPreference("accent_color");
|
||||
accentColor.setColor(PreferenceUtils.getInstance(getActivity()).getThemeColorAccent(),
|
||||
DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary));
|
||||
accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
new ColorChooserDialog().show(getActivity(), preference.getTitleRes(),
|
||||
PreferenceUtils.getInstance(getActivity()).getThemeColorAccent());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
findPreference("transparent_toolbar").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
|
|
|
|||
|
|
@ -3,24 +3,22 @@ package com.kabouzeid.gramophone.ui.activities.base;
|
|||
import android.annotation.TargetApi;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
|
||||
import com.crashlytics.android.Crashlytics;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble;
|
||||
import com.kabouzeid.gramophone.misc.AppKeys;
|
||||
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtils;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
/**
|
||||
* Created by karim on 20.01.15.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public abstract class AbsBaseActivity extends ActionBarActivity implements KabViewsDisableAble {
|
||||
public abstract class AbsBaseActivity extends ThemeBaseActivity implements KabViewsDisableAble {
|
||||
|
||||
private App app;
|
||||
private boolean areViewsEnabled;
|
||||
private Object uiPreferenceChangeListener = new Object() {
|
||||
private final Object uiPreferenceChangeListener = new Object() {
|
||||
@Subscribe
|
||||
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
|
||||
AbsBaseActivity.this.onUIPreferenceChangedEvent(event);
|
||||
|
|
@ -30,7 +28,6 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
Crashlytics.setString(AppKeys.CL_CURRENT_ACTIVITY, getTag());
|
||||
setTheme(PreferenceUtils.getInstance(this).getGeneralTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
try {
|
||||
App.bus.register(uiPreferenceChangeListener);
|
||||
|
|
@ -45,7 +42,7 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
|
|||
return app;
|
||||
}
|
||||
|
||||
public abstract String getTag();
|
||||
protected abstract String getTag();
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
|
|
@ -53,15 +50,6 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
|
|||
enableViews();
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.THEME_CHANGED:
|
||||
recreate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableViews() {
|
||||
areViewsEnabled = true;
|
||||
|
|
@ -77,14 +65,12 @@ public abstract class AbsBaseActivity extends ActionBarActivity implements KabVi
|
|||
return areViewsEnabled;
|
||||
}
|
||||
|
||||
protected void setUpTranslucence(boolean statusBarTranslucent, boolean navigationBarTranslucent) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent);
|
||||
if (Util.isInPortraitMode(this) || Util.isTablet(this)) {
|
||||
Util.setNavBarTranslucent(getWindow(), navigationBarTranslucent);
|
||||
} else {
|
||||
Util.setNavBarTranslucent(getWindow(), false);
|
||||
}
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
protected void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case UIPreferenceChangedEvent.THEME_CHANGED:
|
||||
recreate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ import android.view.animation.OvershootInterpolator;
|
|||
import android.widget.ImageView;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.util.DialogUtils;
|
||||
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
|
||||
import com.kabouzeid.gramophone.App;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
|
|
@ -48,10 +49,11 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by karim on 18.01.15.
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||
public static final String TAG = AbsTagEditorActivity.class.getSimpleName();
|
||||
|
||||
private static final String TAG = AbsTagEditorActivity.class.getSimpleName();
|
||||
private static final int REQUEST_CODE_SELECT_IMAGE = 1337;
|
||||
|
||||
private int id;
|
||||
|
|
@ -64,7 +66,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
private Toolbar toolBar;
|
||||
private ImageView image;
|
||||
private View header;
|
||||
private SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
|
||||
@Override
|
||||
public void onScrollChanged(int scrollY, boolean b, boolean b2) {
|
||||
float alpha;
|
||||
|
|
@ -168,7 +170,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
|
||||
protected abstract void deleteImage();
|
||||
|
||||
protected void setUpFab() {
|
||||
private void setUpFab() {
|
||||
ViewHelper.setScaleX(fab, 0);
|
||||
ViewHelper.setScaleY(fab, 0);
|
||||
fab.setEnabled(false);
|
||||
|
|
@ -183,7 +185,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
protected abstract void save();
|
||||
|
||||
private void restoreStandardColors() {
|
||||
final int vibrantColor = Util.resolveColor(this, R.attr.colorPrimary);
|
||||
final int vibrantColor = DialogUtils.resolveColor(this, R.attr.colorPrimary);
|
||||
paletteColorPrimary = vibrantColor;
|
||||
observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
|
|
@ -199,7 +201,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
}
|
||||
}
|
||||
|
||||
protected void setUpToolBar() {
|
||||
private void setUpToolBar() {
|
||||
setSupportActionBar(toolBar);
|
||||
getSupportActionBar().setTitle(getResources().getString(R.string.tag_editor));
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
|
@ -270,7 +272,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
|||
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
|
||||
@Override
|
||||
public void onGenerated(Palette palette) {
|
||||
final int vibrantColor = palette.getVibrantColor(Util.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color));
|
||||
final int vibrantColor = palette.getVibrantColor(DialogUtils.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color));
|
||||
paletteColorPrimary = vibrantColor;
|
||||
observableScrollViewCallbacks.onScrollChanged(scrollView.getCurrentScrollY(), false, false);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ import java.util.Map;
|
|||
public class AlbumTagEditorActivity extends AbsTagEditorActivity implements TextWatcher {
|
||||
public static final String TAG = AlbumTagEditorActivity.class.getSimpleName();
|
||||
|
||||
private File albumArtFile;
|
||||
private Bitmap albumArtBitmap;
|
||||
private boolean deleteAlbumArt;
|
||||
|
||||
|
|
@ -157,13 +156,9 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
|||
fieldKeyValueMap.put(FieldKey.GENRE, genreName.getText().toString());
|
||||
fieldKeyValueMap.put(FieldKey.YEAR, year.getText().toString());
|
||||
|
||||
try {
|
||||
albumArtFile = MusicUtil.getAlbumArtFile(this, String.valueOf(getId()));
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "error while creating albumArtFile", e);
|
||||
}
|
||||
File albumArtFile = MusicUtil.getAlbumArtFile(String.valueOf(getId()));
|
||||
|
||||
if (albumArtBitmap != null && albumArtFile != null) {
|
||||
if (albumArtBitmap != null) {
|
||||
try {
|
||||
albumArtBitmap.compress(Bitmap.CompressFormat.PNG, 0, new FileOutputStream(albumArtFile));
|
||||
artwork = ArtworkFactory.createArtworkFromFile(albumArtFile);
|
||||
|
|
|
|||
|
|
@ -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,12 +162,10 @@ public class NavigationDrawerFragment extends Fragment {
|
|||
}
|
||||
}, 400);
|
||||
}
|
||||
|
||||
}
|
||||
if (callbacks != null) {
|
||||
if (callbacks != null)
|
||||
callbacks.onNavigationDrawerItemSelected(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
|
|
@ -191,7 +186,7 @@ public class NavigationDrawerFragment extends Fragment {
|
|||
}
|
||||
}
|
||||
|
||||
public static interface NavigationDrawerCallbacks {
|
||||
public interface NavigationDrawerCallbacks {
|
||||
void onNavigationDrawerItemSelected(int position);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,13 +10,11 @@ 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);
|
||||
|
|
@ -26,9 +23,6 @@ public final class InternalStorageUtil {
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void renameAppFile(final Context context, String originalFileName, String newFileName) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue