From 4e27388fbe927717822b21ccff962ac6d7f657cd Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Thu, 21 May 2015 18:58:27 +0200 Subject: [PATCH 01/23] Prework for multiselect --- .../adapter/songadapter/SongAdapter.java | 76 +++++++++++-------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java index badb0ba9..0a2cb6de 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java @@ -28,6 +28,7 @@ import com.nostra13.universalimageloader.core.ImageLoader; import com.squareup.otto.Subscribe; import java.util.ArrayList; +import java.util.HashSet; /** * @author Karim Abou Zeid (kabouzeid) @@ -40,9 +41,11 @@ public class SongAdapter extends RecyclerView.Adapter { protected final AppCompatActivity activity; protected ArrayList dataSet; + private HashSet checked; public SongAdapter(AppCompatActivity activity) { this.activity = activity; + checked = new HashSet<>(); loadDataSet(); } @@ -77,6 +80,7 @@ public class SongAdapter extends RecyclerView.Adapter { .resetViewBeforeLoading(true) .build() ); + holder.view.setActivated(checked.contains(song.id)); } else { holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase()); holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor); @@ -97,7 +101,7 @@ public class SongAdapter extends RecyclerView.Adapter { return dataSet.size() + 1; } - public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { final TextView songTitle; final TextView songInfo; final ImageView overflowButton; @@ -115,43 +119,55 @@ public class SongAdapter extends RecyclerView.Adapter { overflowButton = (ImageView) itemView.findViewById(R.id.menu); separator = itemView.findViewById(R.id.separator); short_separator = itemView.findViewById(R.id.short_separator); - - overflowButton.setOnClickListener(this); - itemView.setOnClickListener(new View.OnClickListener() { + view.setOnClickListener(this); + view.setOnLongClickListener(this); + overflowButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View v) { - if (getItemViewType() == SHUFFLE_BUTTON) { - MusicPlayerRemote.shuffleAllSongs(activity); - } else { - MusicPlayerRemote.openQueue(dataSet, getAdapterPosition() - 1, true); - } + public void onClick(View view) { + PopupMenu popupMenu = new PopupMenu(activity, view); + popupMenu.inflate(R.menu.menu_item_song); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + final int position = getAdapterPosition() - 1; + switch (item.getItemId()) { + case R.id.action_go_to_album: + Pair[] albumPairs = new Pair[]{ + Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover)) + }; + if (activity instanceof AbsFabActivity) + albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); + NavigationUtil.goToAlbum(activity, dataSet.get(position).albumId, albumPairs); + return true; + } + return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(position), item); + } + }); + popupMenu.show(); } }); } @Override public void onClick(View v) { - PopupMenu popupMenu = new PopupMenu(activity, v); - popupMenu.inflate(R.menu.menu_item_song); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - final int position = getAdapterPosition() - 1; - switch (item.getItemId()) { - case R.id.action_go_to_album: - Pair[] albumPairs = new Pair[]{ - Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_cover)) - }; - if (activity instanceof AbsFabActivity) - albumPairs = ((AbsFabActivity) activity).getSharedViewsWithFab(albumPairs); - NavigationUtil.goToAlbum(activity, dataSet.get(position).albumId, albumPairs); - return true; - } - return MenuItemClickHelper.handleSongMenuClick(activity, dataSet.get(position), item); - } - }); - popupMenu.show(); + if (getItemViewType() == SHUFFLE_BUTTON) { + MusicPlayerRemote.shuffleAllSongs(activity); + } else { + MusicPlayerRemote.openQueue(dataSet, getAdapterPosition() - 1, true); + } } + + @Override + public boolean onLongClick(View view) { + toggleChecked(getAdapterPosition()); + return true; + } + } + + private void toggleChecked(final int position) { + final int id = dataSet.get(position - 1).id; + if (!checked.add(id)) checked.remove(id); + notifyItemChanged(position); } @Override From c96e5f42b93b68de084120c880129d00c2167620 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 23 May 2015 12:41:18 +0200 Subject: [PATCH 02/23] FAB no longer attached to the album/artist footer but placed on the bottom to avoid confusion about the FABs action. Added offset to the bottom. Solves issue #26 --- app/build.gradle | 4 ++-- .../ui/activities/AlbumDetailActivity.java | 8 +++----- .../ui/activities/ArtistDetailActivity.java | 8 +++----- .../AbsMainActivityFragment.java | 2 +- .../main/res/layout/activity_album_detail.xml | 20 ++++++++++++------- .../res/layout/activity_artist_detail.xml | 20 ++++++++++++------- .../res/layout/activity_playlist_detail.xml | 2 +- app/src/main/res/values/dimens.xml | 2 +- 8 files changed, 37 insertions(+), 29 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 63c4748c..8866d82b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.kabouzeid.gramophone" minSdkVersion 16 targetSdkVersion 22 - versionCode 24 - versionName "0.9.9.4b" + versionCode 25 + versionName "0.9.10b" } compileOptions { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 8bc381d4..1f5ea6eb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -67,6 +67,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH private int titleViewHeight; private int albumArtViewHeight; private int toolbarColor; + private int bottomOffset; private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() { @Override @@ -92,10 +93,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH titleTranslationY = Math.max(headerOffset, titleTranslationY); ViewHelper.setTranslationY(albumTitleView, titleTranslationY); - - // Translate FAB - int fabTranslationY = titleTranslationY + titleViewHeight - (getFab().getHeight() / 2); - ViewHelper.setTranslationY(getFab(), fabTranslationY); } }; @@ -155,6 +152,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } private void setUpObservableListViewParams() { + bottomOffset = getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity); albumArtViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height); toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); int toolbarHeight = Util.getActionBarSize(this); @@ -259,7 +257,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH private void setUpListView() { recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks); - recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, 0); + recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, bottomOffset); final View contentView = getWindow().getDecorView().findViewById(android.R.id.content); contentView.post(new Runnable() { @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 02a3a22b..f8c1a3df 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -77,6 +77,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private int titleViewHeight; private int artistImageViewHeight; private int toolbarColor; + private int bottomOffset; private View songListHeader; private RecyclerView albumRecyclerView; @@ -107,10 +108,6 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor titleTranslationY = Math.max(headerOffset, titleTranslationY); ViewHelper.setTranslationY(artistNameTv, titleTranslationY); - - // Translate FAB - int fabTranslationY = titleTranslationY + titleViewHeight - (getFab().getHeight() / 2); - ViewHelper.setTranslationY(getFab(), fabTranslationY); } }; @@ -168,6 +165,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } private void setUpObservableListViewParams() { + bottomOffset = getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity); artistImageViewHeight = getResources().getDimensionPixelSize(R.dimen.header_image_height); toolbarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); int toolbarHeight = Util.getActionBarSize(this); @@ -207,7 +205,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private void setUpSongListView() { songListView.setScrollViewCallbacks(observableScrollViewCallbacks); - songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, 0); + songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, bottomOffset); songListView.addHeaderView(songListHeader); final ArrayList songs = ArtistSongLoader.getArtistSongList(this, artist.id); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java index 5ff364f9..271f8452 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java @@ -26,7 +26,7 @@ public abstract class AbsMainActivityFragment extends Fragment implements KabVie } protected int getBottomPadding() { - return 0; + return getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity); } @Override diff --git a/app/src/main/res/layout/activity_album_detail.xml b/app/src/main/res/layout/activity_album_detail.xml index 9623d4ac..27cbc717 100644 --- a/app/src/main/res/layout/activity_album_detail.xml +++ b/app/src/main/res/layout/activity_album_detail.xml @@ -74,12 +74,18 @@ - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_artist_detail.xml b/app/src/main/res/layout/activity_artist_detail.xml index 5f7e85bd..503684e0 100644 --- a/app/src/main/res/layout/activity_artist_detail.xml +++ b/app/src/main/res/layout/activity_artist_detail.xml @@ -74,12 +74,18 @@ - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml index 9842ce10..6483502f 100644 --- a/app/src/main/res/layout/activity_playlist_detail.xml +++ b/app/src/main/res/layout/activity_playlist_detail.xml @@ -21,7 +21,7 @@ android:clipToPadding="false" android:divider="@null" android:dividerHeight="0px" - android:paddingBottom="@dimen/playlist_list_bottom_offset" + android:paddingBottom="@dimen/bottom_offset_fab_activity" android:scrollbars="vertical" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 42208fcd..b0467346 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -48,5 +48,5 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout 2dp 128dp - 86dp + 86dp From 2a7dad6ad00d21f2a0e3f9d7a42e8be5fb429640 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 23 May 2015 12:44:14 +0200 Subject: [PATCH 03/23] Small bug fix. --- .../java/com/kabouzeid/gramophone/service/MusicService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index 20427782..dbabf5e7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -796,7 +796,7 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe //to let other apps know whats playing. i.E. last.fm (scrobbling) or musixmatch final Intent intent = new Intent(what); final int position = getPosition(); - if(position >= 0) { + if (position >= 0 && !playingQueue.isEmpty()) { final Song currentSong = playingQueue.get(position); intent.putExtra("id", currentSong.id); intent.putExtra("artist", currentSong.artistName); From 501b0ad8dbc74c60020effb13fd6c8d4f6e51086 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sun, 24 May 2015 15:27:18 +0200 Subject: [PATCH 04/23] Fix broken colored album footers setting. --- app/build.gradle | 4 ++-- .../java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8866d82b..341c5ba1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.kabouzeid.gramophone" minSdkVersion 16 targetSdkVersion 22 - versionCode 25 - versionName "0.9.10b" + versionCode 26 + versionName "0.9.10.1b" } compileOptions { diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java index 9d263429..13e80325 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -67,12 +67,14 @@ public class AlbumAdapter extends RecyclerView.Adapter new SimpleImageLoadingListener() { @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { - paletteBlackAndWhite(holder.title, holder.artist, holder.footer); + if (usePalette) + paletteBlackAndWhite(holder.title, holder.artist, holder.footer); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { - applyPalette(loadedImage, holder.title, holder.artist, holder.footer); + if (usePalette) + applyPalette(loadedImage, holder.title, holder.artist, holder.footer); } } ); From 8503eb4e366862616473463ed41ea6217c219938 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sun, 24 May 2015 20:33:14 +0200 Subject: [PATCH 05/23] Prepared everything for multi-selection and implemented it in the song view for now. --- app/build.gradle | 3 +- .../adapter/AbsMultiSelectAdapter.java | 80 ++++++++++++++++++ .../adapter/songadapter/SongAdapter.java | 42 ++++++--- .../gramophone/helper/MusicPlayerRemote.java | 9 ++ .../gramophone/interfaces/CabHolder.java | 11 +++ .../gramophone/loader/AlbumLoader.java | 11 +-- .../gramophone/loader/AlbumSongLoader.java | 7 +- .../gramophone/loader/ArtistAlbumLoader.java | 5 +- .../gramophone/loader/ArtistSongLoader.java | 7 +- .../gramophone/loader/PlaylistSongLoader.java | 7 +- .../gramophone/loader/SongLoader.java | 13 +-- .../com/kabouzeid/gramophone/model/Album.java | 5 +- .../gramophone/model/PlaylistSong.java | 4 +- .../com/kabouzeid/gramophone/model/Song.java | 51 ++++++++++- .../gramophone/service/MusicService.java | 13 +++ .../ui/activities/MainActivity.java | 15 +++- .../AbsMainActivityFragment.java | 5 ++ .../SongViewFragment.java | 2 +- .../drawable-hdpi/ic_delete_white_24dp.png | Bin 0 -> 189 bytes .../ic_playlist_add_white_24dp.png | Bin 0 -> 131 bytes .../res/drawable-hdpi/ic_queue_white_24dp.png | Bin 0 -> 227 bytes .../drawable-mdpi/ic_delete_white_24dp.png | Bin 0 -> 129 bytes .../ic_playlist_add_white_24dp.png | Bin 0 -> 114 bytes .../res/drawable-mdpi/ic_queue_white_24dp.png | Bin 0 -> 164 bytes .../drawable-xhdpi/ic_delete_white_24dp.png | Bin 0 -> 192 bytes .../ic_playlist_add_white_24dp.png | Bin 0 -> 148 bytes .../drawable-xhdpi/ic_queue_white_24dp.png | Bin 0 -> 240 bytes .../drawable-xxhdpi/ic_delete_white_24dp.png | Bin 0 -> 277 bytes .../ic_playlist_add_white_24dp.png | Bin 0 -> 198 bytes .../drawable-xxhdpi/ic_queue_white_24dp.png | Bin 0 -> 349 bytes .../drawable-xxxhdpi/ic_delete_white_24dp.png | Bin 0 -> 353 bytes .../ic_playlist_add_white_24dp.png | Bin 0 -> 246 bytes .../drawable-xxxhdpi/ic_queue_white_24dp.png | Bin 0 -> 444 bytes app/src/main/res/layout/activity_main.xml | 20 ++++- .../main/res/menu/menu_media_selection.xml | 23 +++++ app/src/main/res/values-ar/strings.xml | 65 ++++++++++---- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 3 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 16 ++-- app/src/main/res/values-it/strings.xml | 6 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 3 +- app/src/main/res/values/styles.xml | 2 +- 55 files changed, 348 insertions(+), 108 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java create mode 100644 app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_queue_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_queue_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_queue_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_queue_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_queue_white_24dp.png create mode 100644 app/src/main/res/menu/menu_media_selection.xml diff --git a/app/build.gradle b/app/build.gradle index 341c5ba1..d81bafc3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,7 +25,7 @@ android { minSdkVersion 16 targetSdkVersion 22 versionCode 26 - versionName "0.9.10.1b" + versionName "0.9.10.1b DEV" } compileOptions { @@ -70,6 +70,7 @@ dependencies { compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' compile 'com.afollestad:material-dialogs:0.7.4.2' + compile 'com.afollestad:material-cab:0.1.2' compile 'com.jpardogo.materialtabstrip:library:1.0.9' compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' compile 'com.melnykov:floatingactionbutton:1.3.0' diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java new file mode 100644 index 00000000..dd3383d6 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java @@ -0,0 +1,80 @@ +package com.kabouzeid.gramophone.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.Menu; +import android.view.MenuItem; + +import com.afollestad.materialcab.MaterialCab; +import com.kabouzeid.gramophone.interfaces.CabHolder; + +import java.util.ArrayList; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public abstract class AbsMultiSelectAdapter extends RecyclerView.Adapter implements MaterialCab.Callback { + private final CabHolder cabHolder; + private MaterialCab cab; + private ArrayList checked; + private int menuRes; + + public AbsMultiSelectAdapter(CabHolder cabHolder, int menuRes) { + this.cabHolder = cabHolder; + checked = new ArrayList<>(); + this.menuRes = menuRes; + } + + protected void toggleChecked(final int position) { + if (cabHolder != null) { + openCabIfNecessary(); + if (position > 0) { + I identifier = getIdentifier(position); + if (!checked.remove(identifier)) checked.add(identifier); + notifyItemChanged(position); + } + if (checked.isEmpty()) cab.finish(); + } + } + + private void openCabIfNecessary() { + if (cab == null || !cab.isActive()) { + cab = cabHolder.openCab(menuRes, this); + } + } + + private void uncheckAll() { + checked.clear(); + notifyDataSetChanged(); + } + + protected boolean isChecked(I identifier) { + return checked.contains(identifier); + } + + protected boolean isInQuickSelectMode() { + return cab != null && cab.isActive(); + } + + @Override + public boolean onCabCreated(MaterialCab materialCab, Menu menu) { + return true; + } + + @Override + public boolean onCabItemClicked(MenuItem menuItem) { + onMultipleItemAction(menuItem, new ArrayList<>(checked)); + cab.finish(); + uncheckAll(); + return true; + } + + @Override + public boolean onCabFinished(MaterialCab materialCab) { + uncheckAll(); + return true; + } + + protected abstract I getIdentifier(int position); + + protected abstract void onMultipleItemAction(MenuItem menuItem, ArrayList selection); +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java index 0a2cb6de..ceb05a2c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/SongAdapter.java @@ -12,11 +12,16 @@ import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; +import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.ThemeSingleton; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter; +import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; +import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; import com.kabouzeid.gramophone.model.Song; @@ -28,12 +33,11 @@ import com.nostra13.universalimageloader.core.ImageLoader; import com.squareup.otto.Subscribe; import java.util.ArrayList; -import java.util.HashSet; /** * @author Karim Abou Zeid (kabouzeid) */ -public class SongAdapter extends RecyclerView.Adapter { +public class SongAdapter extends AbsMultiSelectAdapter implements MaterialCab.Callback { public static final String TAG = AlbumSongAdapter.class.getSimpleName(); private static final int SHUFFLE_BUTTON = 0; @@ -41,11 +45,10 @@ public class SongAdapter extends RecyclerView.Adapter { protected final AppCompatActivity activity; protected ArrayList dataSet; - private HashSet checked; - public SongAdapter(AppCompatActivity activity) { + public SongAdapter(AppCompatActivity activity, CabHolder cabHolder) { + super(cabHolder, R.menu.menu_media_selection); this.activity = activity; - checked = new HashSet<>(); loadDataSet(); } @@ -80,7 +83,7 @@ public class SongAdapter extends RecyclerView.Adapter { .resetViewBeforeLoading(true) .build() ); - holder.view.setActivated(checked.contains(song.id)); + holder.view.setActivated(isChecked(song)); } else { holder.songTitle.setText(activity.getResources().getString(R.string.shuffle_all).toUpperCase()); holder.songTitle.setTextColor(ThemeSingleton.get().positiveColor); @@ -101,6 +104,26 @@ public class SongAdapter extends RecyclerView.Adapter { return dataSet.size() + 1; } + @Override + protected Song getIdentifier(int position) { + return dataSet.get(position - 1); + } + + @Override + protected void onMultipleItemAction(MenuItem menuItem, ArrayList selection) { + switch (menuItem.getItemId()) { + case R.id.action_delete_from_disk: + DeleteSongsDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); + break; + case R.id.action_add_to_playlist: + AddToPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); + break; + case R.id.action_add_to_current_playing: + MusicPlayerRemote.enqueue(selection); + break; + } + } + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { final TextView songTitle; final TextView songInfo; @@ -152,6 +175,8 @@ public class SongAdapter extends RecyclerView.Adapter { public void onClick(View v) { if (getItemViewType() == SHUFFLE_BUTTON) { MusicPlayerRemote.shuffleAllSongs(activity); + } else if (isInQuickSelectMode()) { + toggleChecked(getAdapterPosition()); } else { MusicPlayerRemote.openQueue(dataSet, getAdapterPosition() - 1, true); } @@ -164,11 +189,6 @@ public class SongAdapter extends RecyclerView.Adapter { } } - private void toggleChecked(final int position) { - final int id = dataSet.get(position - 1).id; - if (!checked.add(id)) checked.remove(id); - notifyItemChanged(position); - } @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java index fdf19e15..fe62786d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java @@ -21,6 +21,7 @@ import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.util.InternalStorageUtil; import java.util.ArrayList; +import java.util.List; import java.util.Random; /** @@ -251,6 +252,14 @@ public class MusicPlayerRemote { } } + public static void enqueue(List songs) { + if (musicService != null) { + musicService.addSongs(songs); + final String toast = songs.size() > 1 ? musicService.getResources().getString(R.string.added_x_titles_to_playing_queue, songs.size()) : musicService.getResources().getString(R.string.added_title_to_playing_queue); + Toast.makeText(musicService, toast, Toast.LENGTH_SHORT).show(); + } + } + public static void removeFromQueue(Song song) { if (musicService != null) { musicService.removeSong(song); diff --git a/app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java b/app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java new file mode 100644 index 00000000..cf836d88 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/interfaces/CabHolder.java @@ -0,0 +1,11 @@ +package com.kabouzeid.gramophone.interfaces; + +import com.afollestad.materialcab.MaterialCab; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public interface CabHolder { + + MaterialCab openCab(final int menuRes, final MaterialCab.Callback callback); +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java index b7a13887..24cdfd55 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java @@ -27,9 +27,8 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); - final String albumArtPath = cursor.getString(6); - final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + final Album album = new Album(id, albumName, artist, artistId, songCount, year); albums.add(album); } while (cursor.moveToNext()); } @@ -58,8 +57,6 @@ public class AlbumLoader { MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 5 */ MediaStore.Audio.AlbumColumns.FIRST_YEAR, - /* 6 */ - MediaStore.Audio.AlbumColumns.ALBUM_ART }, selection, values, PreferenceUtils.getInstance(context).getAlbumSortOrder()); } @@ -73,9 +70,8 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); - final String albumArtPath = cursor.getString(6); - album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + album = new Album(id, albumName, artist, artistId, songCount, year); } if (cursor != null) { @@ -95,9 +91,8 @@ public class AlbumLoader { final int artistId = cursor.getInt(3); final int songCount = cursor.getInt(4); final int year = cursor.getInt(5); - final String albumArtPath = cursor.getString(6); - final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + final Album album = new Album(id, albumName, artist, artistId, songCount, year); albums.add(album); } while (cursor.moveToNext()); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java index a931616c..df5d1d11 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java @@ -27,9 +27,8 @@ public class AlbumSongLoader { final long duration = cursor.getLong(4); final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); - final long dateModified = cursor.getInt(7); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -54,9 +53,7 @@ public class AlbumSongLoader { /* 5 */ MediaStore.Audio.AudioColumns.TRACK, /* 6 */ - MediaStore.Audio.AudioColumns.ARTIST_ID, - /* 7 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.AudioColumns.ARTIST_ID }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " + MediaStore.Audio.AudioColumns.ALBUM_ID + "=" + albumId, null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java index eaa82d0d..893a53f6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java @@ -26,9 +26,8 @@ public class ArtistAlbumLoader { final String artist = cursor.getString(2); final int songCount = cursor.getInt(3); final int year = cursor.getInt(4); - final String albumArtPath = cursor.getString(5); - final Album album = new Album(id, albumName, artist, artistId, songCount, year, albumArtPath); + final Album album = new Album(id, albumName, artist, artistId, songCount, year); albums.add(album); } while (cursor.moveToNext()); } @@ -51,8 +50,6 @@ public class ArtistAlbumLoader { MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS, /* 4 */ MediaStore.Audio.AlbumColumns.FIRST_YEAR, - /* 5 */ - MediaStore.Audio.AlbumColumns.ALBUM_ART }, null, null, PreferenceUtils.getInstance(context).getArtistAlbumSortOrder()); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java index 3d84ef23..2a68191c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java @@ -27,9 +27,8 @@ public class ArtistSongLoader { final long duration = cursor.getLong(4); final int trackNumber = cursor.getInt(5); final int albumId = cursor.getInt(6); - final long dateModified = cursor.getInt(7); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -54,9 +53,7 @@ public class ArtistSongLoader { /* 5 */ MediaStore.Audio.AudioColumns.TRACK, /* 6 */ - MediaStore.Audio.AudioColumns.ALBUM_ID, - /* 7 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.AudioColumns.ALBUM_ID }, (MediaStore.Audio.AudioColumns.IS_MUSIC + "=1") + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" + " AND " + MediaStore.Audio.AudioColumns.ARTIST_ID + "=" + artistId, null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java index 619daf1e..5b201d99 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java @@ -26,9 +26,8 @@ public class PlaylistSongLoader { final int albumId = cursor.getInt(6); final int artistId = cursor.getInt(7); final int idInPlaylist = cursor.getInt(8); - final long dateModified = cursor.getInt(9); - final PlaylistSong song = new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, playlistID, idInPlaylist, dateModified); + final PlaylistSong song = new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, playlistID, idInPlaylist); songs.add(song); } while (cursor.moveToNext()); @@ -60,9 +59,7 @@ public class PlaylistSongLoader { /* 7 */ AudioColumns.ARTIST_ID, /* 8 */ - MediaStore.Audio.Playlists.Members._ID, - /* 9 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.Playlists.Members._ID }, (AudioColumns.IS_MUSIC + "=1") + " AND " + AudioColumns.TITLE + " != ''", null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java index 9c7e00b5..0bc8607c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java @@ -30,9 +30,8 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - final long dateModified = cursor.getInt(8); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -68,9 +67,7 @@ public class SongLoader { /* 6 */ MediaStore.Audio.AudioColumns.ARTIST_ID, /* 7 */ - MediaStore.Audio.AudioColumns.ALBUM_ID, - /* 8 */ - MediaStore.Audio.AudioColumns.DATE_MODIFIED + MediaStore.Audio.AudioColumns.ALBUM_ID }, finalSelection, values, PreferenceUtils.getInstance(context).getSongSortOrder()); } @@ -87,9 +84,8 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - final long dateModified = cursor.getInt(8); - final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + final Song song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); songs.add(song); } while (cursor.moveToNext()); } @@ -111,8 +107,7 @@ public class SongLoader { final int trackNumber = cursor.getInt(5); final int artistId = cursor.getInt(6); final int albumId = cursor.getInt(7); - final long dateModified = cursor.getInt(8); - song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, dateModified); + song = new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber); } if (cursor != null) { cursor.close(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java index b674c284..f3a000d0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java @@ -11,17 +11,15 @@ public class Album { public final String artistName; public final int songCount; public final int year; - public final String albumArtPath; //used as cache key public Album(final int id, final String title, final String artistName, final int artistId, - final int songNumber, final int albumYear, final String albumArtPath) { + final int songNumber, final int albumYear) { this.id = id; this.title = title; this.artistName = artistName; this.artistId = artistId; songCount = songNumber; year = albumYear; - this.albumArtPath = albumArtPath != null ? albumArtPath : ""; } public Album() { @@ -31,6 +29,5 @@ public class Album { this.artistId = -1; songCount = -1; year = -1; - this.albumArtPath = ""; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java index e746a877..2d40c30d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java @@ -8,8 +8,8 @@ public class PlaylistSong extends Song { public final int idInPlayList; public PlaylistSong(final int id, final int albumId, final int artistId, final String title, final String artistName, - final String albumName, final long duration, final int trackNumber, final int playlistId, final int idInPlayList, final long dateModified) { - super(id, albumId, artistId, title, artistName, albumName, duration, trackNumber, dateModified); + final String albumName, final long duration, final int trackNumber, final int playlistId, final int idInPlayList) { + super(id, albumId, artistId, title, artistName, albumName, duration, trackNumber); this.playlistId = playlistId; this.idInPlayList = idInPlayList; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java index 4497f70b..4543586d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java @@ -1,5 +1,7 @@ package com.kabouzeid.gramophone.model; +import android.text.TextUtils; + import java.io.Serializable; /** @@ -17,10 +19,9 @@ public class Song implements Serializable { public final String albumName; public final long duration; public final int trackNumber; - public final long dateModified; //used as cache key 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, final long dateModified) { + final String albumName, final long duration, final int trackNumber) { this.id = id; this.albumId = albumId; this.artistId = artistId; @@ -29,7 +30,6 @@ public class Song implements Serializable { this.albumName = albumName; this.duration = duration; this.trackNumber = trackNumber; - this.dateModified = dateModified; } public Song() { @@ -41,6 +41,49 @@ public class Song implements Serializable { this.albumName = ""; this.duration = -1; this.trackNumber = -1; - this.dateModified = -1; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (albumName == null ? 0 : albumName.hashCode()); + result = prime * result + (artistName == null ? 0 : artistName.hashCode()); + result = prime * result + (int) duration; + result = prime * result + id; + result = prime * result + (title == null ? 0 : title.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Song other = (Song) obj; + if (id != other.id) { + return false; + } + if (!TextUtils.equals(albumName, other.albumName)) { + return false; + } + if (!TextUtils.equals(artistName, other.artistName)) { + return false; + } + if (duration != other.duration) { + return false; + } + return TextUtils.equals(title, other.title); + } + + @Override + public String toString() { + return title; } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index dbabf5e7..53c92f6a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -42,6 +42,7 @@ import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListene 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"; @@ -552,6 +553,18 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe saveState(); } + public void addSongs(int position, List songs) { + playingQueue.addAll(position, songs); + originalPlayingQueue.addAll(position, songs); + saveState(); + } + + public void addSongs(List songs) { + playingQueue.addAll(songs); + originalPlayingQueue.addAll(songs); + saveState(); + } + public void removeSong(int position) { if (getShuffleMode() == SHUFFLE_MODE_NONE) { playingQueue.remove(position); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index 1de1e71e..9c37fb60 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -25,6 +25,7 @@ import android.view.MenuItem; import android.view.SubMenu; import android.widget.FrameLayout; +import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.ThemeSingleton; import com.astuetz.PagerSlidingTabStrip; import com.kabouzeid.gramophone.R; @@ -32,6 +33,7 @@ import com.kabouzeid.gramophone.adapter.PagerAdapter; import com.kabouzeid.gramophone.dialogs.AboutDialog; import com.kabouzeid.gramophone.dialogs.CreatePlaylistDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.loader.AlbumSongLoader; import com.kabouzeid.gramophone.loader.ArtistSongLoader; @@ -57,7 +59,7 @@ import java.util.List; import java.util.Set; public class MainActivity extends AbsFabActivity - implements NavigationDrawerFragment.NavigationDrawerCallbacks, KabViewsDisableAble { + implements NavigationDrawerFragment.NavigationDrawerCallbacks, KabViewsDisableAble, CabHolder { public static final String TAG = MainActivity.class.getSimpleName(); @@ -69,6 +71,7 @@ public class MainActivity extends AbsFabActivity private ViewPager viewPager; private PagerSlidingTabStrip slidingTabLayout; private int currentPage = -1; + private MaterialCab cab; @Override protected void onCreate(Bundle savedInstanceState) { @@ -553,4 +556,14 @@ public class MainActivity extends AbsFabActivity }); return super.onMenuOpened(featureId, menu); } + + @Override + public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { + if (cab != null) cab.finish(); + cab = new MaterialCab(this, R.id.cab_stub) + .setMenu(menu) + .setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary()) + .start(callback); + return cab; + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java index 271f8452..0739b3b3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java @@ -5,6 +5,7 @@ import android.support.v4.app.Fragment; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; +import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.util.Util; /** @@ -29,6 +30,10 @@ public abstract class AbsMainActivityFragment extends Fragment implements KabVie return getResources().getDimensionPixelSize(R.dimen.bottom_offset_fab_activity); } + protected MainActivity getMainActivity() { + return (MainActivity) getActivity(); + } + @Override public void enableViews() { areViewsEnabled = true; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java index 1697b487..9d068485 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java @@ -26,6 +26,6 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment { @Override protected RecyclerView.Adapter createAdapter() { - return new SongAdapter((AppCompatActivity) getActivity()); + return new SongAdapter((AppCompatActivity) getActivity(), getMainActivity()); } } diff --git a/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5e89821e2af31cfdba2c634963a9da8e16f7d532 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4mJh`hKCF@W-u@?w0OEWhE&{odt)PKgMmQn zL+!hc>VoB)d@GYvISM5M~m5?F|;r+Ffe$!`njxgN@xNANa01N literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e466600ad04d3a83150262b5d9610dba2f3a1f50 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4mJh`hKCF@W-u@?czL=whE&{od(DxHL4kw8 z@&EtK>gL2mlg99whq+wSjxFI-P*7NqxL_T739m|4cvvoXhLf{{yJPIyocD~Ynp}8U iz9^mO7krU_fyp|F@xhM!P9+Qs3=E#GelF{r5}E)rLn#{o literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_queue_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7efdfab6490c72e54b0dd5d4ef2a616f28cda640 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4mJh`hKCF@W-u@?tnzem45_&F_QpZZ0}4E> z0sduc`=)Vn+OYG{_G+kleBDtc@^w2qn6N>*QG$=ig3b9i2a+n`0B3r_~Du3(u;DAkRP9>Lx fPTX%l)9m-4zk6e$`MNC(3=9mOu6{1-oD!M}1|M>sko>|xM zaK{D*#t!*E$65Fn6s1Hu=t}1|M>sko>|xM z@CsJt(@a4JA8bx|a*Xkw!s6AePaYjiW?bp$G^J`+l);zB2~VO7q810XF^X)Ib+f#) SA%TH`fx*+&&t;ucLK6VM*(cHf literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_queue_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_queue_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1aeb991a96dc512c51742fab06af1d40b756eeb9 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJovOQfKLn>}1|M>sko>|xM zutSsp#}WPillkHpH`*JDO-Q!j*`sod$&1ldOkgeB?8e1n6H*yBzO4HYWgvC3`8?C6 zF0K;pxWI%T+(|kg)Hl1ZO1|^%VGUVdkdb##JIh7Oj{5{}@giM`S!=l%^iH2~U*8nX R&A`CG;OXk;vd$@?2>{iqHNXG> literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9e171869415b851787451c4478683af11260be GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FYKnR_c<9CW!*yJkVPwy)Gf_O$CqZK5<>LPGz^FfuSOG^j`3_wQrN(7Z2tvFJuM z149Sf1Njanj*le_m|zDp-{DWY*%J&|MEDPcY?ho7pFQb%-WR7c-=}`BFnj7txIRfp8y%*>FVdQ&MBb@03Q!NYXATM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..aa874a65cf7cd139dba248299d1c47065df93b75 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FYI@UY!F0zH-G~)z3Ir+Y#`A3 zaE@D5wJE#s#W%|ZOVo8=7*F2v|G;glIte%5rkSnNgc%qlrF?-}zb2WhziO_IKj62(!O8&)#PYsXf5RaKP7L)l1h>R)J{t pinEoH3%<;$XF1?$+fdKAhcWGdp%w3?)_Wi$Jzf1=);T3K0RX*4S04ZX literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2e8ea3b964d302f8490b809af9783495795b09 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D4d?s&R5hE&{od)tt&$v~tb zQEgANUfhKjmKTq_;Iv>ZT&|0T=vxoxSPjdy(4 phwlDT`6rJ7;x0y}CH;FD3l?;>@W^rmGcYhPc)I$ztaD0e0szq}UHSk3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..82e0ee1f376a47f32f07173d60590deb197a3bf2 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D4ddOcknLn>~)y>*b2L4k+m z;FtR)YZM;1dmiGreW1qg;E6K~)z2nQ(?7-8O z7=F!o%a@L&j|~4hPMNoKhqv*9(@`Qllg~;2xYoySC1jGOG-={{Mn;7O1||)|1x~@4 zR%cZ{hDHRh)-)B*Ua7^JM3CA?^iY3rZIVEhtr3zjvzSgyZ*4$((S` lFSQb|H&+C!D}2VRbV+Y#{`^_X7#J8BJYD@<);T3K0RYC+ddC0& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b2514da1696960c89b7e274e469b0f4b9ebcf3 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RWH9TD$Ln>~)y>phg$$+6P zF>eP?p=()y@@0wT2X=JEtx!G4yXDJs#me=^YWg?Mxz#FQ^>(@-1A_nq0~3P-0|N&G z10zTBkH5xDH}e1F2u4ZSd$(LWcAoE{ynNJeW(Fj{$e_T$@XB@yBa#^9%my)rd#wHc zS1~?_G&m5$d|+!rLohGH@f$%8e!MQ1%VLO_&BbD|{Dzw70mU-?j6cz9)^k4SHc0(f zz9nb>AG@o1)pw@uoX0u+MsoGp(+@+7@A2JH{3@sCUs|lk0Cq47LjwbYKttIthP5$5 U=Qee>o&veq)78&qol`;+07^w-f&c&j literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4cdc5b84f0492c1e9a3aac3bd016abef216093 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW_IkQFhE&{od;K6Ug8>J# z;kS4zS>_}3|Ln>~)z3Z5DC_sQM zp?q8W#7B|0g~aDA_26H4Wbzf?xcki_yLx7)O!~?8k9p6}CVf7mcV3#-k$STj7#bKD z6c`vhgc_31u6!2vS>yHkvbKH8R#$fOe26O6yS*;4W=Gs2#x2k4r`wdy>@pBPu=B}k zJ+1>ApR7qdHP?Xsz{)3U&vP(*KfMg9sClHdVxLnIz5vjL>A;S7VAnJ&)-b+#RD3@?P3_qa1;td?$XIh&tu=fZGe z*RD^=Uir_MGO}y*J7@h5-Q3Uep}pYNkK-2&?0)`USvyns!T-4z%ud}qc72QPo~*dz z+}}Us*iT~+U|?WjU|?imU}*TkF!T9ORVD}igvbWI1DhBkpZ`o`*z{jCl%pZ%^Pd8S s$Y(znGH$avA1@0DHx32{ri8mcS-JC%{HidGIskICr>mdKI;Vst01^M0@c;k- literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4386dc78..d47aac85 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,15 +20,22 @@ android:fitsSystemWindows="true" /> + android:paddingTop="@dimen/main_toolbar_padding_top" + tools:ignore="UnusedAttribute"> - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2b049b81..a37fbebe 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,16 +1,17 @@ "الإعدادات" - عنى - يتم التشغيل حالياً - قائمة الانتظار + " عن التطبيق +" + الإستماع الآن + قائمة الإنتظار بحث استمع لاحقاً - أضف إلى قائمة الانتظار + أضف إلى قائمة الإنتظار أزل من قائمة الانتظار أضف إلى قائمة تشغيل... - تعديل معلومات الموسيقى - حذف + تعديل معلومات الملف + حذف نهائي التفاصيل الألبومات الفنانون @@ -27,30 +28,29 @@ النوع فنان الألبوم السنة - الموسيقى + "المقطع " "الموسيقى (٢ للموسيقى ٢ أو ٣٠٠٤ للموسيقى ٤)" حقل نص اسم الألبوم أو اسم الفنان فارغ تتم كتابة الملف يتم حفظ التغييرات... التفاصيل - اسم الملف + إسم الملف مسار الملف الحجم - التنسيق + نوع الملف الطول معدل البت معدل أخذ العينات - اذهب إلى الفنان - اذهب إلى الألبوم - قائمة الانتظار + إذهب إلى الفنان + إذهب إلى الألبوم + قائمة الإنتظار حفظ كقائمة تشغيل - الأيقونة من - "مشغل الموسيقى فونقراف هو برنامج مجاني بشكلٍ كامل بتصميم أنيق من " + الأيقونة من تصميم + "مشغل الموسيقى فونقراف هو برنامج مجاني بشكلٍ كامل بتصميم أنيق من تصميم" بحث لا توجد نتائج تحديث صورة الفنان يتم التحديث... - "تمت الإضافة إلى قائمة الانتظار" حذف من قائمة التشغيل قائمة تشغيل جديدة... عدد قوائم الشبكة @@ -71,14 +71,14 @@ حذف قائمة التشغيل "إضافة إلى قائمة التشغيل" قائمة تشغيل جديدة - "تحذير: لا يمكن التراجع هذه العملية." + "تحذير: لا يمكن التراجع عن هذه العملية." عشوائي آخر ما تم فتحه فاتح داكن المعادل واجهة المستخدم - السمة الأساسية + الثيم العام الصوت عام في أي مشهد يتم تلوين شريط التنقل @@ -93,4 +93,35 @@ مشهد قائمة التشغيل تعديل معلومات الموسيقى في أي مكان + الهوامش السفلية للألبومات ملونة + لا يوجد معدل صوت + "لا يوجد audio id, شغل شيئا وحاول مرة أخرى." + إفتح قائمة التصفح الجانبية + "إغلاق قائمة التصفح الجانبية" + حذف + إعادة التسمية + إختيار + إفتراضي + اللون الأساسي + اللون الثانوي + تحديد الأزرق النيلي كلون ثيم اساسي. + تحديد الوردي كلون ثانوي. + تحديث الصورة + قائمة التشغيل فارغة + لا توجد قوائم تشغيل + إسم قائمة الشغيل + الأغنية + "متوفر في نظام التشغيل Lollipop." + جعل المحتوى الذي يمر تحت شريط الأدوات مرئيا. + "تلوين الهوامش السفلية للألبومات بلون غلاف الألبوم." + "تعذر تحميل صور هذا الألبوم." + البحث في المكتبة... + إعادة تفحص الملفات... + + تحميل من last.fm + اختيار من ذاكرة التخزين الداخلية + بحث في الإنترنات + حذف الغلاف + + "تمت الإضافة إلى قائمة الانتظار" diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4649c68c..375c33a0 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -50,7 +50,6 @@ Žádné výsledky Změnit obrázek umělce Aktualizace... - "Přidána 1 skladba do fronty." Vymazat z playlistu Nový playlist... Počet sloupců mřížky @@ -120,4 +119,5 @@ Najít na webu Odstranit obal alba + "Přidána 1 skladba do fronty." diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3f40a4ea..25dd5d07 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -50,7 +50,7 @@ Keine Ergebnisse Interpretenbild aktualisieren Aktualisiere... - "1 Titel wurde der Wiedergabeliste hinzugefügt." + %1$d Titel wurden der Wiedergabeliste hinzugefügt. Aus Playlist entfernen Neue Playlist… Rastergröße @@ -120,4 +120,5 @@ Web suche Cover entfernen + "1 Titel wurde der Wiedergabeliste hinzugefügt." diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index fd24d489..1c20b3bd 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -50,7 +50,6 @@ Κανένα αποτέλεσμα Ανανέωση εικόνας καλλιτέχνη Γίνεται ανανέωση... - "Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής" Διαγραφή από τη λίστα αναπαραγωγής Νέα λίστα αναπαραγωγής... Στήλες πλέγματος @@ -120,4 +119,5 @@ Αναζήτηση στο διαδίκτυο Διαγραφή εξώφυλλου + "Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής" diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 27773a0a..da0b4500 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -50,7 +50,6 @@ Sin resultados Actualizar imagen del artista Actualizando... - "1 título añadido a la cola de reproducción" Borrar de la lista de reproducción Nueva lista de reproducción... Columnas de la cuadrícula @@ -118,4 +117,5 @@ Busqueda Web Eliminar Carátula + "1 título añadido a la cola de reproducción" diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 907a03e4..abe8644e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -3,11 +3,11 @@ "Paramètres" À propos Lecture en cours - File de lecture + Liste de lecture Rechercher - Lire ensuite - Ajouter à la file de lecture - Retirer de la file de lecture + Prochaine lecture + Ajouter à la liste de lecture + Retirer de la liste de lecture Ajouter à une playlist... Éditeur d\'infos Supprimer de l\'appareil @@ -31,10 +31,10 @@ "Piste (2 pour piste 2 ou 3004 pour CD3 piste 4)" Veuillez indiquer le nom et l\'artiste de l\'album. Fichier en cours d\'écriture - Sauvegarde des changements... + Sauvegarde en cours... Détails Nom du fichier - Chemin du fichier + Location du fichier Taille Format Durée @@ -45,12 +45,11 @@ File de lecture Sauvegarder Icône par - "Phonograph est un lecteur de musique avec un Material Design et entièrement gratuit créé par" + "Phonograph est un lecteur de musique entièrement gratuit avec le concept de Material Design créé par" Rechercher Aucun résultat Actualiser l\'image de l\'artiste Actualisation... - "1 titre ajouté à la file de lecture." Supprimer de la playlist Nouvelle playlist... Nombre de colonnes @@ -120,4 +119,5 @@ Recherche internet Supprimer la couverture + "1 titre ajouté à la file de lecture." diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d3022808..daf59af7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -12,9 +12,9 @@ Modifica tag Elimina Dettagli - album + Album Artisti - brani + Brani Playlist Niente in riproduzione Spiacenti - si è verificato un errore nel tentativo di riprodurre questa canzone @@ -52,7 +52,6 @@ Nessun risultato Aggiorna immagine artista Aggiornamento... - "Un brano aggiunto alla coda." DettagliAttivitàPlaylist Elimina dalla playlist Nuova playlist... @@ -123,4 +122,5 @@ Cerca nel web Rimuovi copertina + "Un brano aggiunto alla coda." diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 5267f8a0..72d56453 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -50,7 +50,6 @@ 결과 없음 아티스트 이미지 변경 변경 중... - "재생 대기열에 1개의 음악을 추가했습니다." 재생목록에서 삭제 새로운 재생목록... 가로세로 격자 @@ -121,4 +120,5 @@ 인터넷 검색 커버 없애기 + "재생 대기열에 1개의 음악을 추가했습니다." diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c5e71ea7..a2c818eb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -50,7 +50,6 @@ Geen resultaten Artiest afbeelding bijwerken Bijwerken... - "1 titel toegevoegd aan de afspeelwachtrij." Verwijderen uit afspeellijst Nieuwe afspeellijst... Rasterkolommen @@ -120,4 +119,5 @@ Zoeken op internet Verwijder hoes + "1 titel toegevoegd aan de afspeelwachtrij." diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e3c05028..f6612073 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -52,7 +52,6 @@ Brak wyników Zaktualizuj zdjęcie wykonawcy Aktualizowanie... - "Dodano 1 tytuł do kolejki odtwarzania" Usuń z listy odtwarzania Nowa lista odtwarzania... Siatka kolumn @@ -122,4 +121,5 @@ Szukaj w sieci Usuń okładkę + "Dodano 1 tytuł do kolejki odtwarzania" diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 9aed5cdb..1ba9e656 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -50,7 +50,6 @@ Sem resultados Atualizar imagem do artista Atualizando... - "1 título adicionado à lista de reprodução" Excluir da playlist Nova playlist... Colunas da grade @@ -120,4 +119,5 @@ Pesquisar na Internet Remover Arte do Album + "1 título adicionado à lista de reprodução" diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 52d6e8e3..c60997c7 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -49,7 +49,6 @@ Nenhum resultado Atualizar imagem do artista Atualizando... - "Adicionada uma música para a fila atual de músicas." Apagar da playlist Colunas da grade Colunas da grade (Paisagem) @@ -74,4 +73,5 @@ Abrir área de navegação "Fechar área de navegação" Música + "Adicionada uma música para a fila atual de músicas." diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 9468a11d..738749e9 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -49,7 +49,6 @@ Niciun rezultat Actualizează imagine artist Actualizare... - "Adăugat 1 melodie la lista de redare." Şterge din playlist Playlist nou... Rânduri pe grid @@ -99,4 +98,5 @@ Culoare Primară Culoare de accent Melodie + "Adăugat 1 melodie la lista de redare." diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 471c1808..b13f32bd 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -50,7 +50,6 @@ Нет результатов Обновить изображение исполнителя Обновление... - "Добавлена 1 композиция в очередь воспроизведения" Удалить из списка воспроизведения Новый список воспроизведения... Столбцы сетки @@ -120,4 +119,5 @@ Поиск в интернете Удалить обложку + "Добавлена 1 композиция в очередь воспроизведения" diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 88fef55e..9b0affcd 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -50,7 +50,6 @@ Inga resultat Uppdatera artistbild Uppdaterar ... - "Lagt till 1 titel till spellistan." Radera från spellista Ny spellista ... Spellista %1$s skapad @@ -115,4 +114,5 @@ Vill du radera %1$d låtar? Weksök Ta bort omslag + "Lagt till 1 titel till spellistan." diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e3b216e5..33e3beca 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -50,7 +50,6 @@ Sonuç bulunamadı Sanatçı resmini güncelle Güncelleniyor... - "Çalma sırasına 1 başlık eklendi" Çalma listesinden sil Yeni çalma listesi Izgara sütunları @@ -120,4 +119,5 @@ Web\'de ara Albüm Kapağını Kaldır + "Çalma sırasına 1 başlık eklendi" diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5db100c5..e866a9d4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -50,7 +50,6 @@ 没有找到结果 更新歌手图片 正在更新… - "该曲目已加入播放队列" 从播放列表中删除 新建播放列表 专辑列数 @@ -120,4 +119,5 @@ 通过网络搜索 删除封面 + "该曲目已加入播放队列" diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index cca45c35..bf78e3b8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -50,7 +50,6 @@ 無搜尋結果 更新歌手圖片 更新中… - "這歌曲已加入播放佇列" 從音樂清單移除 新增音樂清單 專輯網格列數 @@ -120,4 +119,5 @@ 網路搜尋 刪除封面 + "這歌曲已加入播放佇列" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a3d04136..9e2745d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -53,7 +53,8 @@ No results Update artist image Updating… - Added 1 title to the playing queue. + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. Playlist Activity Delete from playlist New playlist… diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3e606a12..56e647d3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -43,7 +43,7 @@ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d1d1544d..302c28d3 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,7 +15,7 @@ @color/grey_300 #fff #0C000000 - @color/grey_300 + @color/grey_500 #8A000000 #D0D0D0 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b0467346..08a3f990 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -12,9 +12,9 @@ 2dp 360dp + 32dp - 0dp - 0dp + 0dp 64.0dip diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 56e647d3..180b60c9 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -41,6 +41,7 @@ @@ -29,7 +28,6 @@ diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index f27071fa..995f3fdd 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,7 +1,6 @@ - #3F51B5 #9E9E9E #424242 #1C1C1C @@ -13,6 +12,7 @@ #E91E63 #9C27B0 #5E35B1 + #3F51B5 #1976D2 #03A9F4 #00BCD4 @@ -33,6 +33,7 @@ #795548 #D32F2F #E91E63 + #FF4081 #9C27B0 #5E35B1 #1976D2 diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 5d9ae327..48169268 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -25,8 +25,4 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 302c28d3..726ce8dd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -8,27 +8,18 @@ #3e000000 - @color/indigo_500 - @color/indigo_600 - @color/pink_500 - @color/pink_600 @color/grey_300 #fff #0C000000 @color/grey_500 #8A000000 - #D0D0D0 - @color/indigo_500 - @color/indigo_600 - @color/pink_500 @color/grey_800 @color/grey_900 #0CFFFFFF @color/grey_900 @color/white - #55000000 #FFFFFF #99FFFFFF @@ -36,6 +27,4 @@ #29ffffff - #40000000 - \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 08a3f990..7faeaf81 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -12,7 +12,8 @@ 2dp 360dp - 32dp + 20dp + 120dp 0dp diff --git a/app/src/main/res/values/materialcolors.xml b/app/src/main/res/values/materialcolors.xml index 683b6469..b9b2725b 100644 --- a/app/src/main/res/values/materialcolors.xml +++ b/app/src/main/res/values/materialcolors.xml @@ -1,11 +1,9 @@ - #e91e63 - #d81b60 + #ff4081 #3f51b5 - #3949ab #000000 #ffffff diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 386b2a76..efdad1f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -115,6 +115,8 @@ Tag editor Everywhere else Colored album footers + Force square album art + Opaque toolbar now playing No equalizer found No audio ID, play something and try again. Open navigation drawer @@ -136,6 +138,8 @@ Only available on Lollipop. Content scrolling underneath the toolbar is visible. Album footers in the grid are colored with the album cover\'s palette. + Album art in the now playing view is forced to be squared. + The toolbar in the now playing view is opaque and no longer covers the album art. Unable to download the art for this album. Search your library… Rescanning media… diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 180b60c9..636beaa9 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -37,7 +37,6 @@ @@ -81,7 +80,9 @@ \ No newline at end of file diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index a655cb05..427fe775 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -30,6 +30,22 @@ android:layout="@layout/preference_custom" android:widgetLayout="@layout/preference_dynamiccheckbox" /> + + + + Date: Sat, 30 May 2015 01:13:41 +0200 Subject: [PATCH 22/23] Nav drawer android design support library and more --- app/build.gradle | 2 +- .../gramophone/adapter/AlbumAdapter.java | 5 +- .../ui/activities/AlbumDetailActivity.java | 37 +-- .../ui/activities/ArtistDetailActivity.java | 32 +-- .../ui/activities/MainActivity.java | 212 ++++++++++-------- .../activities/MusicControllerActivity.java | 21 +- .../ui/activities/PlaylistDetailActivity.java | 22 +- .../ui/activities/SearchActivity.java | 16 +- .../ui/activities/SettingsActivity.java | 26 +-- .../ui/activities/base/AbsBaseActivity.java | 4 +- .../ui/activities/base/ThemeBaseActivity.java | 70 ++---- .../tageditor/AbsTagEditorActivity.java | 22 +- .../fragments/NavigationDrawerFragment.java | 17 +- .../AbsMainActivityFragment.java | 1 - app/src/main/res/layout/activity_main.xml | 25 +-- .../res/layout/fragment_navigation_drawer.xml | 86 ------- .../res/layout/navigation_drawer_header.xml | 60 +++++ app/src/main/res/menu/menu_drawer.xml | 36 +++ .../main/res/values-sw360dp-v19/dimens.xml | 2 +- app/src/main/res/values-v19/dimens.xml | 2 +- app/src/main/res/values-v21/dimens.xml | 2 +- app/src/main/res/values-v21/styles.xml | 3 + app/src/main/res/values/dimens.xml | 2 +- app/src/main/res/values/strings.xml | 1 + build.gradle | 2 +- 25 files changed, 303 insertions(+), 405 deletions(-) delete mode 100644 app/src/main/res/layout/fragment_navigation_drawer.xml create mode 100644 app/src/main/res/layout/navigation_drawer_header.xml create mode 100644 app/src/main/res/menu/menu_drawer.xml diff --git a/app/build.gradle b/app/build.gradle index 8ddb3742..8d7823d6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ repositories { android { compileSdkVersion 22 - buildToolsVersion "22.0.1" + buildToolsVersion "23.0.0 rc1" defaultConfig { applicationId "com.kabouzeid.gramophone" diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java index ae37ce30..346234d4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -1,6 +1,5 @@ package com.kabouzeid.gramophone.adapter; -import android.annotation.TargetApi; import android.graphics.Bitmap; import android.os.Build; import android.support.annotation.Nullable; @@ -151,9 +150,9 @@ public class AlbumAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { view.setOnTouchListener(new View.OnTouchListener() { - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override public boolean onTouch(View view, MotionEvent motionEvent) { ((FrameLayout) view.findViewById(R.id.content)).getForeground().setHotspot(motionEvent.getX(), motionEvent.getY()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 6f3c8505..53cd573a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.ui.activities; import android.animation.Animator; -import android.annotation.TargetApi; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -111,7 +110,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } }; - @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -119,7 +117,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH App.bus.register(this); - if (Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { postponeEnterTransition(); if (PreferenceUtils.getInstance(this).coloredNavigationBarAlbumEnabled()) setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); @@ -140,7 +138,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH setUpToolBar(); setUpViews(); - if (Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().getEnterTransition().addListener(new SmallTransitionListener() { @Override public void onTransitionStart(Transition transition) { @@ -164,21 +162,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } } - @Override - protected boolean shouldColorStatusBar() { - return false; - } - - @Override - protected boolean shouldColorNavBar() { - return false; - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; - } - @Override public String getTag() { return TAG; @@ -222,20 +205,22 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH .resetViewBeforeLoading(true) .build(), new SimpleImageLoadingListener() { - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { applyPalette(null); albumArtBackground.setImageBitmap(new StackBlurManager(BitmapFactory.decodeResource(getResources(), R.drawable.default_album_art)).process(10)); - if (Util.isAtLeastLollipop()) startPostponedEnterTransition(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + startPostponedEnterTransition(); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { applyPalette(loadedImage); albumArtBackground.setImageBitmap(new StackBlurManager(loadedImage).process(10)); - if (Util.isAtLeastLollipop()) startPostponedEnterTransition(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + startPostponedEnterTransition(); } } ); @@ -245,7 +230,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH if (bitmap != null) { Palette.from(bitmap) .generate(new Palette.PaletteAsyncListener() { - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override public void onGenerated(Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); @@ -266,7 +251,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void resetColors() { int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color); int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); @@ -291,7 +276,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH return toolbarColor; } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void setNavigationBarColored(boolean colored) { if (colored) { setNavigationBarColor(toolbarColor); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 8f229f0d..c0540d53 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.ui.activities; import android.animation.Animator; -import android.annotation.TargetApi; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -125,7 +124,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor }; - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -133,7 +132,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor App.bus.register(this); - if (Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { postponeEnterTransition(); if (PreferenceUtils.getInstance(this).coloredNavigationBarArtistEnabled()) setNavigationBarColor(DialogUtils.resolveColor(this, R.attr.default_bar_color)); @@ -148,12 +147,12 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor getSupportActionBar().setTitle(null); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - if (Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { fixLollipopTransitionImageWrongSize(); startPostponedEnterTransition(); } - if (Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().getEnterTransition().addListener(new SmallTransitionListener() { @Override public void onTransitionStart(Transition transition) { @@ -177,21 +176,6 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } } - @Override - protected boolean shouldColorStatusBar() { - return false; - } - - @Override - protected boolean shouldColorNavBar() { - return false; - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; - } - private void initViews() { artistImage = (ImageView) findViewById(R.id.artist_image); artistImageBackground = (ImageView) findViewById(R.id.artist_image_background); @@ -235,7 +219,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor loadBiography(); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void setNavigationBarColored(boolean colored) { if (colored) { setNavigationBarColor(toolbarColor); @@ -327,7 +311,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor if (bitmap != null) { Palette.from(bitmap) .generate(new Palette.PaletteAsyncListener() { - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override public void onGenerated(Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); @@ -365,7 +349,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor return toolbarColor; } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void resetColors() { int titleTextColor = DialogUtils.resolveColor(this, R.attr.title_text_color); int defaultBarColor = DialogUtils.resolveColor(this, R.attr.default_bar_color); @@ -443,7 +427,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor toolbar.setEnabled(false); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void fixLollipopTransitionImageWrongSize() { getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() { @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index a8b02f06..edf8fd39 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -1,12 +1,15 @@ package com.kabouzeid.gramophone.ui.activities; import android.content.Intent; +import android.content.res.ColorStateList; import android.content.res.Configuration; +import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; import android.support.annotation.NonNull; +import android.support.design.widget.NavigationView; import android.support.v4.util.Pair; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; @@ -16,15 +19,14 @@ import android.support.v7.internal.view.menu.MenuPopupHelper; import android.support.v7.widget.ActionMenuPresenter; import android.support.v7.widget.ActionMenuView; import android.support.v7.widget.Toolbar; -import android.util.DisplayMetrics; import android.util.Log; -import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; -import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.ThemeSingleton; @@ -43,7 +45,6 @@ import com.kabouzeid.gramophone.model.MusicRemoteEvent; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent; import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity; -import com.kabouzeid.gramophone.ui.fragments.NavigationDrawerFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AlbumViewFragment; import com.kabouzeid.gramophone.util.MusicUtil; @@ -60,20 +61,20 @@ import java.util.List; import java.util.Set; public class MainActivity extends AbsFabActivity - implements NavigationDrawerFragment.NavigationDrawerCallbacks, KabViewsDisableAble, CabHolder { + implements KabViewsDisableAble, CabHolder, View.OnClickListener { public static final String TAG = MainActivity.class.getSimpleName(); private DrawerLayout drawerLayout; private ActionBarDrawerToggle drawerToggle; - private NavigationDrawerFragment navigationDrawerFragment; private Toolbar toolbar; private PagerAdapter pagerAdapter; private ViewPager viewPager; private PagerSlidingTabStrip slidingTabLayout; private int currentPage = -1; private MaterialCab cab; - private View statusBar; + private NavigationView navigationView; + private View navigationDrawerHeader; @Override protected void onCreate(Bundle savedInstanceState) { @@ -81,31 +82,16 @@ public class MainActivity extends AbsFabActivity setContentView(R.layout.activity_main); initViews(); - navigationDrawerFragment.setUp( - drawerLayout - ); setUpDrawerLayout(); setUpToolBar(); setUpViewPager(); + if (PreferenceUtils.getInstance(this).coloredNavigationBarOtherScreensEnabled()) + setNavigationBarThemeColor(); + handlePlaybackIntent(getIntent()); } - @Override - protected boolean shouldColorStatusBar() { - return false; - } - - @Override - protected boolean shouldColorNavBar() { - return PreferenceUtils.getInstance(this).coloredNavigationBarOtherScreensEnabled(); - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; - } - private void setUpViewPager() { pagerAdapter = new PagerAdapter(this, getSupportFragmentManager()); final PagerAdapter.MusicFragments[] fragments = PagerAdapter.MusicFragments.values(); @@ -121,7 +107,7 @@ public class MainActivity extends AbsFabActivity currentPage = startPosition; viewPager.setCurrentItem(startPosition); - navigationDrawerFragment.setItemChecked(startPosition); + navigationView.getMenu().getItem(startPosition).setChecked(true); slidingTabLayout.setIndicatorColor(ThemeSingleton.get().positiveColor); slidingTabLayout.setViewPager(viewPager); @@ -134,7 +120,7 @@ public class MainActivity extends AbsFabActivity @Override public void onPageSelected(final int position) { - navigationDrawerFragment.setItemChecked(position); + navigationView.getMenu().getItem(position).setChecked(true); currentPage = position; } @@ -148,9 +134,7 @@ public class MainActivity extends AbsFabActivity viewPager = (ViewPager) findViewById(R.id.pager); slidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); - navigationDrawerFragment = (NavigationDrawerFragment) - getFragmentManager().findFragmentById(R.id.navigation_drawer); - statusBar = findViewById(R.id.status_bar); + navigationView = (NavigationView) findViewById(R.id.nav_view); } private void setUpToolBar() { @@ -166,7 +150,75 @@ public class MainActivity extends AbsFabActivity final int colorPrimary = PreferenceUtils.getInstance(this).getThemeColorPrimary(); ViewUtil.setBackgroundAlpha(toolbar, alpha, colorPrimary); ViewUtil.setBackgroundAlpha(slidingTabLayout, alpha, colorPrimary); - ViewUtil.setBackgroundAlpha(statusBar, alpha, colorPrimary); + } + + private void setUpNavigationView() { + final int colorAccent = ThemeSingleton.get().positiveColor; + navigationView.setItemTextColor(new ColorStateList( + new int[][]{ + //{-android.R.attr.state_enabled}, // disabled + {android.R.attr.state_checked}, // checked + {} // default + }, + new int[]{ + // 0, + colorAccent, + Color.argb(222, 0, 0, 0) + } + )); + navigationView.setItemIconTintList(new ColorStateList( + new int[][]{ + //{-android.R.attr.state_enabled}, // disabled + {android.R.attr.state_checked}, // checked + {} // default + }, + new int[]{ + // 0, + colorAccent, + Color.argb(138, 0, 0, 0) + } + )); + navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(MenuItem menuItem) { + drawerLayout.closeDrawers(); + switch (menuItem.getItemId()) { + case R.id.nav_songs: + menuItem.setChecked(true); + viewPager.setCurrentItem(PagerAdapter.MusicFragments.SONG.ordinal(), true); + break; + case R.id.nav_albums: + menuItem.setChecked(true); + viewPager.setCurrentItem(PagerAdapter.MusicFragments.ALBUM.ordinal(), true); + break; + case R.id.nav_artists: + menuItem.setChecked(true); + viewPager.setCurrentItem(PagerAdapter.MusicFragments.ARTIST.ordinal(), true); + break; + case R.id.nav_playlists: + menuItem.setChecked(true); + viewPager.setCurrentItem(PagerAdapter.MusicFragments.PLAYLIST.ordinal(), true); + break; + case R.id.nav_settings: + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + startActivity(new Intent(MainActivity.this, SettingsActivity.class)); + } + }, 200); + break; + case R.id.nav_about: + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + new AboutDialog().show(getSupportFragmentManager(), "ABOUT_DIALOG"); + } + }, 200); + break; + } + return true; + } + }); } private void setUpDrawerToggle() { @@ -186,16 +238,8 @@ public class MainActivity extends AbsFabActivity } private void setUpDrawerLayout() { - FrameLayout navDrawerFrame = (FrameLayout) findViewById(R.id.nav_drawer_frame); - int navDrawerMargin = getResources().getDimensionPixelSize(R.dimen.nav_drawer_margin); - DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); - int navDrawerWidthLimit = getResources().getDimensionPixelSize(R.dimen.nav_drawer_width_limit); - int navDrawerWidth = displayMetrics.widthPixels - navDrawerMargin; - if (navDrawerWidth > navDrawerWidthLimit) { - navDrawerWidth = navDrawerWidthLimit; - } - navDrawerFrame.setLayoutParams(new DrawerLayout.LayoutParams(navDrawerWidth, - DrawerLayout.LayoutParams.MATCH_PARENT, Gravity.START)); + drawerLayout.setStatusBarBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker()); + setUpNavigationView(); } @Override @@ -210,21 +254,26 @@ public class MainActivity extends AbsFabActivity } private void updateNavigationDrawerHeader() { - if (navigationDrawerFragment != null) { - Song song = MusicPlayerRemote.getCurrentSong(); - if (song.id != -1) { - navigationDrawerFragment.getSongTitle().setText(song.title); - navigationDrawerFragment.getSongArtist().setText(song.artistName); - ImageLoader.getInstance().displayImage( - MusicUtil.getAlbumArtUri(song.albumId).toString(), - navigationDrawerFragment.getAlbumArtImageView(), - new DisplayImageOptions.Builder() - .cacheInMemory(true) - .showImageOnFail(R.drawable.default_album_art) - .resetViewBeforeLoading(true) - .build() - ); + Song song = MusicPlayerRemote.getCurrentSong(); + if (song.id != -1) { + if (navigationDrawerHeader == null) { + navigationDrawerHeader = navigationView.inflateHeaderView(R.layout.navigation_drawer_header); + navigationDrawerHeader.setOnClickListener(this); } + ((TextView) navigationDrawerHeader.findViewById(R.id.song_title)).setText(song.title); + ((TextView) navigationDrawerHeader.findViewById(R.id.song_artist)).setText(song.artistName); + ImageLoader.getInstance().displayImage( + MusicUtil.getAlbumArtUri(song.albumId).toString(), + ((ImageView) navigationDrawerHeader.findViewById(R.id.album_art)), + new DisplayImageOptions.Builder() + .cacheInMemory(true) + .showImageOnFail(R.drawable.default_album_art) + .resetViewBeforeLoading(true) + .build() + ); + } else { + navigationView.removeHeaderView(navigationDrawerHeader); + navigationDrawerHeader = null; } } @@ -257,37 +306,6 @@ public class MainActivity extends AbsFabActivity } } - @Override - public void onNavigationDrawerItemSelected(int position) { - if (position == NavigationDrawerFragment.NAVIGATION_DRAWER_HEADER) { - NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(new Pair[]{ - Pair.create(navigationDrawerFragment.getAlbumArtImageView(), - 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); - } - } - } - @Override public boolean onCreateOptionsMenu(Menu menu) { if (isAlbumPage()) { @@ -355,13 +373,16 @@ public class MainActivity extends AbsFabActivity setToolBarTransparent((boolean) event.getValue()); break; case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_OTHER_SCREENS_CHANGED: - setShouldColorNavBar((boolean) event.getValue()); + if ((boolean) event.getValue()) setNavigationBarThemeColor(); + else resetNavigationBarColor(); break; case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_CHANGED: try { - setShouldColorNavBar(((Set) event.getValue()).contains(PreferenceUtils.COLORED_NAVIGATION_BAR_OTHER_SCREENS)); + if (((Set) event.getValue()).contains(PreferenceUtils.COLORED_NAVIGATION_BAR_OTHER_SCREENS)) + setNavigationBarThemeColor(); + else resetNavigationBarColor(); } catch (NullPointerException ignored) { - setShouldColorNavBar(false); + resetNavigationBarColor(); } break; } @@ -369,7 +390,7 @@ public class MainActivity extends AbsFabActivity @Override public void onBackPressed() { - if (navigationDrawerFragment.isDrawerOpen()) drawerLayout.closeDrawers(); + if (drawerLayout.isDrawerOpen(navigationView)) drawerLayout.closeDrawers(); else if (cab != null && cab.isActive()) cab.finish(); else super.onBackPressed(); } @@ -569,4 +590,15 @@ public class MainActivity extends AbsFabActivity .start(callback); return cab; } + + @Override + public void onClick(View v) { + if (v == navigationDrawerHeader) { + NavigationUtil.openCurrentPlayingIfPossible(this, getSharedViewsWithFab(new Pair[]{ + Pair.create(((ImageView) navigationDrawerHeader.findViewById(R.id.album_art)), + getResources().getString(R.string.transition_album_cover) + ) + })); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index 4465fa48..d1e003aa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.ui.activities; import android.animation.Animator; -import android.annotation.TargetApi; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -79,7 +78,7 @@ public class MusicControllerActivity extends AbsFabActivity { private boolean opaqueToolBar = PreferenceUtils.getInstance(this).opaqueToolbarNowPlaying(); private boolean forceSquareAlbumArt = PreferenceUtils.getInstance(this).forceAlbumArtSquared(); - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -100,7 +99,7 @@ public class MusicControllerActivity extends AbsFabActivity { getSupportActionBar().setTitle(null); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - if (Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().getEnterTransition().addListener(new SmallTransitionListener() { @Override public void onTransitionStart(Transition transition) { @@ -130,20 +129,6 @@ public class MusicControllerActivity extends AbsFabActivity { getFab().setOnLongClickListener(null); } - @Override - protected boolean shouldColorStatusBar() { - return false; // let other code handle this below - } - - @Override - protected boolean shouldColorNavBar() { - return false; // let other code handle this below - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; - } private void moveSeekBarIntoPlace() { // RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) progressSlider.getLayoutParams(); @@ -360,7 +345,7 @@ public class MusicControllerActivity extends AbsFabActivity { notifyTaskColorChange(defaultBarColor); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void animateColorChange(final int newColor) { if (lastFooterColor != -1 && lastFooterColor != newColor) { ViewUtil.animateViewColor(footer, lastFooterColor, newColor, COLOR_TRANSITION_TIME); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index d633b278..d3cdbcec 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -1,7 +1,5 @@ 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; @@ -38,7 +36,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder private PlaylistSongAdapter adapter; private ArrayList songs; - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -79,24 +77,12 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder getSupportActionBar().setTitle(playlist.name); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + if (PreferenceUtils.getInstance(this).coloredNavigationBarPlaylistEnabled()) + setNavigationBarThemeColor(); + App.bus.register(this); } - @Override - protected boolean shouldColorStatusBar() { - return true; - } - - @Override - protected boolean shouldColorNavBar() { - return PreferenceUtils.getInstance(this).coloredNavigationBarPlaylistEnabled(); - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; - } - private void getIntentExtras() { Bundle intentExtras = getIntent().getExtras(); final int playlistId = intentExtras.getInt(AppKeys.E_PLAYLIST); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java index 7cf0c338..09d593f2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java @@ -59,21 +59,9 @@ public class SearchActivity extends AbsBaseActivity { setSupportActionBar(toolbar); //noinspection ConstantConditions getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } - @Override - protected boolean shouldColorStatusBar() { - return true; - } - - @Override - protected boolean shouldColorNavBar() { - return true; - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; + setNavigationBarThemeColor(); + setStatusBarThemeColor(); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java index 087e3e82..879f9514 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java @@ -40,21 +40,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia if (savedInstanceState == null) getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit(); - } - @Override - protected boolean shouldColorStatusBar() { - return true; - } - - @Override - protected boolean shouldColorNavBar() { - return PreferenceUtils.getInstance(this).coloredNavigationBarOtherScreensEnabled(); - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; + if (PreferenceUtils.getInstance(this).coloredNavigationBarOtherScreensEnabled()) + setNavigationBarThemeColor(); + setStatusBarThemeColor(); } @Override @@ -202,13 +191,16 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia super.onUIPreferenceChangedEvent(event); switch (event.getAction()) { case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_OTHER_SCREENS_CHANGED: - setShouldColorNavBar((boolean) event.getValue()); + if ((boolean) event.getValue()) setNavigationBarThemeColor(); + else resetNavigationBarColor(); break; case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_CHANGED: try { - setShouldColorNavBar(((Set) event.getValue()).contains(PreferenceUtils.COLORED_NAVIGATION_BAR_OTHER_SCREENS)); + if (((Set) event.getValue()).contains(PreferenceUtils.COLORED_NAVIGATION_BAR_OTHER_SCREENS)) + setNavigationBarThemeColor(); + else resetNavigationBarColor(); } catch (NullPointerException ignored) { - setShouldColorNavBar(false); + resetNavigationBarColor(); } break; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java index 293bb12d..755bea24 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsBaseActivity.java @@ -1,7 +1,5 @@ package com.kabouzeid.gramophone.ui.activities.base; -import android.annotation.TargetApi; -import android.os.Build; import android.os.Bundle; import com.crashlytics.android.Crashlytics; @@ -65,7 +63,7 @@ public abstract class AbsBaseActivity extends ThemeBaseActivity implements KabVi return areViewsEnabled; } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + protected void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { switch (event.getAction()) { case UIPreferenceChangedEvent.THEME_CHANGED: diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java index 283ba71b..ad2e1f0d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/ThemeBaseActivity.java @@ -1,6 +1,5 @@ package com.kabouzeid.gramophone.ui.activities.base; -import android.annotation.TargetApi; import android.app.ActivityManager; import android.graphics.BitmapFactory; import android.os.Build; @@ -9,39 +8,29 @@ import android.support.v7.app.AppCompatActivity; import com.afollestad.materialdialogs.ThemeSingleton; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.dialogs.ColorChooserDialog; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; import com.kabouzeid.gramophone.util.PreferenceUtils; import com.kabouzeid.gramophone.util.Util; -import com.readystatesoftware.systembartint.SystemBarTintManager; /** * @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid) */ public abstract class ThemeBaseActivity extends AppCompatActivity implements KabViewsDisableAble { - private final boolean statusBarTranslucent = shouldSetStatusBarTranslucent(); @Override protected void onCreate(Bundle savedInstanceState) { - setStatusBarTranslucent(statusBarTranslucent); setTheme(PreferenceUtils.getInstance(this).getGeneralTheme()); super.onCreate(savedInstanceState); setupTheme(); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private void setupTheme() { - // Apply colors to system UI if necessary - setShouldColorNavBar(shouldColorNavBar()); - setShouldColorStatusBar(shouldColorStatusBar()); - // Accent colors in dialogs, and any dynamic views that pull from this singleton + private void setupTheme() { ThemeSingleton.get().positiveColor = PreferenceUtils.getInstance(this).getThemeColorAccent(); ThemeSingleton.get().negativeColor = ThemeSingleton.get().positiveColor; ThemeSingleton.get().neutralColor = ThemeSingleton.get().positiveColor; ThemeSingleton.get().widgetColor = ThemeSingleton.get().positiveColor; - // Dark theme ThemeSingleton.get().darkTheme = PreferenceUtils.getInstance(this).getGeneralTheme() == R.style.Theme_MaterialMusic; if (!overridesTaskColor()) { @@ -60,61 +49,38 @@ public abstract class ThemeBaseActivity extends AppCompatActivity implements Kab } } - private void setStatusBarTranslucent(boolean statusBarTranslucent) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + protected void setStatusBarTranslucent(boolean statusBarTranslucent) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) Util.setStatusBarTranslucent(getWindow(), statusBarTranslucent); - } } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) protected final void setNavigationBarColor(int color) { - if (Util.isAtLeastLollipop()) - getWindow().setNavigationBarColor(ColorChooserDialog.shiftColorDown(color)); - + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + getWindow().setNavigationBarColor(color); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) protected final void setStatusBarColor(int color) { - if (!statusBarTranslucent && Util.isAtLeastLollipop()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) getWindow().setStatusBarColor(color); - } else { - SystemBarTintManager tintManager = new SystemBarTintManager(this); - tintManager.setStatusBarTintEnabled(true); - tintManager.setStatusBarTintColor(color); - } } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - protected final void setShouldColorNavBar(boolean shouldColorNavBar) { - if (Util.isAtLeastLollipop()) { - if (shouldColorNavBar) { - setNavigationBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimary()); - } else { - getWindow().setNavigationBarColor(Util.resolveColor(this, android.R.attr.navigationBarColor)); - } - } + protected final void setNavigationBarThemeColor() { + setNavigationBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker()); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - protected final void setShouldColorStatusBar(boolean shouldColorStatusBar) { - if (shouldColorStatusBar) { - final int primary = PreferenceUtils.getInstance(this).getThemeColorPrimary(); - setStatusBarColor(primary); - } else { - if (Util.isAtLeastLollipop()) { - getWindow().setStatusBarColor(Util.resolveColor(this, android.R.attr.statusBarColor)); - } else { - SystemBarTintManager tintManager = new SystemBarTintManager(this); - tintManager.setStatusBarTintEnabled(false); - } - } + protected final void setStatusBarThemeColor() { + setStatusBarColor(PreferenceUtils.getInstance(this).getThemeColorPrimaryDarker()); } - protected abstract boolean shouldColorStatusBar(); + protected final void resetNavigationBarColor() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + setNavigationBarColor(Util.resolveColor(this, android.R.attr.navigationBarColor)); + } - protected abstract boolean shouldColorNavBar(); - - protected abstract boolean shouldSetStatusBarTranslucent(); + protected final void resetStatusBarColor() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + setStatusBarColor(Util.resolveColor(this, android.R.attr.statusBarColor)); + } protected boolean overridesTaskColor() { return false; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java index 933eb115..4430f6b9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java @@ -1,6 +1,5 @@ package com.kabouzeid.gramophone.ui.activities.tageditor; -import android.annotation.TargetApi; import android.app.SearchManager; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -113,21 +112,6 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - @Override - protected boolean shouldColorStatusBar() { - return false; - } - - @Override - protected boolean shouldColorNavBar() { - return false; - } - - @Override - protected boolean shouldSetStatusBarTranslucent() { - return true; - } - private void initViews() { fab = (FloatingActionButton) findViewById(R.id.fab); scrollView = (ObservableScrollView) findViewById(R.id.observableScrollView); @@ -213,7 +197,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { protected abstract void save(); - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private void resetColors() { final int primaryColor = PreferenceUtils.getInstance(this).getThemeColorPrimary(); paletteColorPrimary = primaryColor; @@ -257,7 +241,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return super.onOptionsItemSelected(item); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + protected void setNoImageMode() { isInNoImageMode = true; image.setVisibility(View.GONE); @@ -306,7 +290,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { private void applyPalette(final Bitmap bitmap) { Palette.from(bitmap) .generate(new Palette.PaletteAsyncListener() { - @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override public void onGenerated(Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java index 2bed3859..4d73790e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/NavigationDrawerFragment.java @@ -12,7 +12,6 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -36,7 +35,7 @@ public class NavigationDrawerFragment extends Fragment { private DrawerLayout drawerLayout; private RecyclerView drawerRecyclerView; - private Button headerButton; + private View headerButton; private ImageView albumArt; private TextView songTitle; private TextView songArtist; @@ -98,7 +97,7 @@ public class NavigationDrawerFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_navigation_drawer, container, false); + return inflater.inflate(R.layout.navigation_drawer_header, container, false); } @Override @@ -110,12 +109,12 @@ public class NavigationDrawerFragment extends Fragment { } private void initViews() { - 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); - songTitle = (TextView) drawerHeader.findViewById(R.id.song_title); - songArtist = (TextView) drawerHeader.findViewById(R.id.song_artist); +// drawerRecyclerView = (RecyclerView) fragmentRootView.findViewById(R.id.navigation_drawer_list); +// final View drawerHeader = fragmentRootView.findViewById(R.id.header); +// headerButton = (View) drawerHeader.findViewById(R.id.header_clickable); +// albumArt = (ImageView) drawerHeader.findViewById(R.id.album_art); +// songTitle = (TextView) drawerHeader.findViewById(R.id.song_title); +// songArtist = (TextView) drawerHeader.findViewById(R.id.song_artist); } private void setUpViews() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java index 31ccd7ff..ce0cafb5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityFragment.java @@ -16,7 +16,6 @@ public abstract class AbsMainActivityFragment extends Fragment implements KabVie protected int getTopPadding() { return Util.getActionBarSize(getActivity()) + - Util.getStatusBarHeight(getActivity()) + getResources().getDimensionPixelSize(R.dimen.tab_height) + getResources().getDimensionPixelSize(R.dimen.list_padding_vertical); } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6313c4f2..25607b97 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,4 +1,5 @@ - - @@ -79,21 +75,12 @@ - - - - - + android:fitsSystemWindows="true" + app:menu="@menu/menu_drawer" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_navigation_drawer.xml b/app/src/main/res/layout/fragment_navigation_drawer.xml deleted file mode 100644 index dcbd1fb9..00000000 --- a/app/src/main/res/layout/fragment_navigation_drawer.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - -