From 8ba0c72037e465123837a7b3a10fd2027994fb58 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Wed, 10 Jun 2015 15:27:45 +0200 Subject: [PATCH] Changed the way to check if a view is empty, fixed some strings, fixed fastscroller alignment. --- app/build.gradle | 8 +-- .../adapter/AbsMultiSelectAdapter.java | 8 ++- .../gramophone/adapter/AlbumAdapter.java | 13 +---- .../gramophone/adapter/ArtistAdapter.java | 13 +---- .../adapter/ArtistAlbumAdapter.java | 2 +- .../gramophone/adapter/PlaylistAdapter.java | 13 +---- .../gramophone/adapter/SearchAdapter.java | 3 -- .../adapter/songadapter/AlbumSongAdapter.java | 2 +- .../songadapter/PlaylistSongAdapter.java | 8 +-- .../adapter/songadapter/SongAdapter.java | 13 +---- ...log.java => RemoveFromPlaylistDialog.java} | 18 +++---- .../interfaces/OnUpdatedListener.java | 9 ---- .../gramophone/interfaces/SelfUpdating.java | 9 ---- .../ui/activities/MainActivity.java | 30 +++++++++--- .../ui/activities/SearchActivity.java | 6 ++- .../AbsMainActivityRecyclerViewFragment.java | 49 ++++++++++++------- .../gramophone/views/FastScroller.java | 10 ++-- app/src/main/res/layout/activity_main.xml | 8 +-- app/src/main/res/layout/activity_search.xml | 16 +++--- .../main/res/menu/menu_item_playlist_song.xml | 2 +- app/src/main/res/menu/menu_music_playing.xml | 3 +- .../menu/menu_playlists_songs_selection.xml | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 10 ++-- app/src/main/res/values-es-rES/strings.xml | 10 ++-- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 10 ++-- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 10 ++-- app/src/main/res/values-nn/strings.xml | 10 ++-- app/src/main/res/values-pl/strings.xml | 10 ++-- app/src/main/res/values-pt-rBR/strings.xml | 10 ++-- 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 | 10 ++-- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 10 ++-- app/src/main/res/values-zh-rCN/strings.xml | 10 ++-- app/src/main/res/values-zh-rTW/strings.xml | 10 ++-- app/src/main/res/values/strings.xml | 16 +++--- 43 files changed, 185 insertions(+), 204 deletions(-) rename app/src/main/java/com/kabouzeid/gramophone/dialogs/{DeleteFromPlaylistDialog.java => RemoveFromPlaylistDialog.java} (76%) delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/interfaces/OnUpdatedListener.java delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/interfaces/SelfUpdating.java diff --git a/app/build.gradle b/app/build.gradle index c1e9d338..d3a9f247 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ repositories { android { compileSdkVersion 22 - buildToolsVersion "23.0.0 rc1" + buildToolsVersion '22.0.1' defaultConfig { applicationId "com.kabouzeid.gramophone" @@ -49,22 +49,18 @@ dependencies { compile('com.crashlytics.sdk.android:crashlytics:2.2.1@aar') { transitive = true; } - compile 'com.android.support:support-v13:22.2.0' compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.android.support:cardview-v7:22.2.0' compile 'com.android.support:palette-v7:22.2.0' compile 'com.android.support:design:22.2.0' - compile 'com.github.ksoichiro:android-observablescrollview:1.5.1' compile 'asia.ivity.android:drag-sort-listview:1.0' - compile 'com.mcxiaoke.volley:library:1.0.16' compile 'com.squareup:otto:1.3.7' compile 'de.hdodenhof:circleimageview:1.3.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' - - compile 'com.afollestad:material-dialogs:0.7.5.0' + compile 'com.afollestad:material-dialogs:0.7.5.5' compile 'com.afollestad:material-cab:0.1.4' } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java index ed8c11f3..6c0e8007 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java @@ -1,11 +1,13 @@ package com.kabouzeid.gramophone.adapter; +import android.content.Context; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.MenuItem; import com.afollestad.materialcab.MaterialCab; +import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.interfaces.CabHolder; import java.util.ArrayList; @@ -18,11 +20,13 @@ public abstract class AbsMultiSelectAdapter checked; private int menuRes; + private final Context context; - public AbsMultiSelectAdapter(@Nullable CabHolder cabHolder, int menuRes) { + public AbsMultiSelectAdapter(Context context, @Nullable CabHolder cabHolder, int menuRes) { this.cabHolder = cabHolder; checked = new ArrayList<>(); this.menuRes = menuRes; + this.context = context; } protected void toggleChecked(final int position) { @@ -36,7 +40,7 @@ public abstract class AbsMultiSelectAdapter 1) cab.setTitle(String.valueOf(size)); + else if (size > 1) cab.setTitle(context.getString(R.string.x_selected, size)); } } 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 92b08e6d..079ab399 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -23,8 +23,6 @@ import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; import com.kabouzeid.gramophone.dialogs.DeleteSongsDialog; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; -import com.kabouzeid.gramophone.interfaces.OnUpdatedListener; -import com.kabouzeid.gramophone.interfaces.SelfUpdating; import com.kabouzeid.gramophone.loader.AlbumLoader; import com.kabouzeid.gramophone.loader.AlbumSongLoader; import com.kabouzeid.gramophone.model.Album; @@ -49,13 +47,12 @@ import java.util.List; /** * @author Karim Abou Zeid (kabouzeid) */ -public class AlbumAdapter extends AbsMultiSelectAdapter implements SelfUpdating { +public class AlbumAdapter extends AbsMultiSelectAdapter { public static final String TAG = AlbumAdapter.class.getSimpleName(); private final AppCompatActivity activity; private boolean usePalette; private List dataSet; - private OnUpdatedListener listener; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @@ -133,11 +130,6 @@ public class AlbumAdapter extends AbsMultiSelectAdapter implements SelfUpdating { +public class ArtistAdapter extends AbsMultiSelectAdapter { protected final AppCompatActivity activity; protected List dataSet; - private OnUpdatedListener listener; public ArtistAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { - super(cabHolder, R.menu.menu_media_selection); + super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; loadDataSet(); } private void loadDataSet() { dataSet = ArtistLoader.getAllArtists(activity); - if (listener != null) listener.onUpdated(this); } @Override @@ -116,11 +112,6 @@ public class ArtistAdapter extends AbsMultiSelectAdapter objects, @Nullable CabHolder cabHolder) { - super(cabHolder, R.menu.menu_media_selection); + super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; dataSet = objects; listMargin = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin); diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java index 2d69deb7..60ac2d8a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -18,8 +18,6 @@ import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog; import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; -import com.kabouzeid.gramophone.interfaces.OnUpdatedListener; -import com.kabouzeid.gramophone.interfaces.SelfUpdating; import com.kabouzeid.gramophone.loader.PlaylistLoader; import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.model.DataBaseChangedEvent; @@ -35,22 +33,20 @@ import java.util.List; /** * @author Karim Abou Zeid (kabouzeid) */ -public class PlaylistAdapter extends AbsMultiSelectAdapter implements SelfUpdating { +public class PlaylistAdapter extends AbsMultiSelectAdapter { public static final String TAG = PlaylistAdapter.class.getSimpleName(); protected final AppCompatActivity activity; protected List dataSet; - private OnUpdatedListener listener; public PlaylistAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { - super(cabHolder, R.menu.menu_playlists_selection); + super(activity, cabHolder, R.menu.menu_playlists_selection); this.activity = activity; loadDataSet(); } public void loadDataSet() { dataSet = PlaylistLoader.getAllPlaylists(activity); - if (listener != null) listener.onUpdated(this); } @Override @@ -99,11 +95,6 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter dataSet; public AlbumSongAdapter(AppCompatActivity activity, ArrayList objects, @Nullable CabHolder cabHolder) { - super(cabHolder, R.menu.menu_media_selection); + super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; dataSet = objects; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java index 4126a08f..84eaf6a9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java @@ -15,7 +15,7 @@ import android.widget.TextView; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog; -import com.kabouzeid.gramophone.dialogs.DeleteFromPlaylistDialog; +import com.kabouzeid.gramophone.dialogs.RemoveFromPlaylistDialog; import com.kabouzeid.gramophone.helper.MenuItemClickHelper; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; @@ -40,7 +40,7 @@ public class PlaylistSongAdapter extends AbsMultiSelectAdapter dataSet; public PlaylistSongAdapter(AppCompatActivity activity, ArrayList objects, @Nullable CabHolder cabHolder) { - super(cabHolder, R.menu.menu_playlists_songs_selection); + super(activity, cabHolder, R.menu.menu_playlists_songs_selection); this.activity = activity; dataSet = objects; } @@ -88,7 +88,7 @@ public class PlaylistSongAdapter extends AbsMultiSelectAdapter selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_playlist: - DeleteFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_FROM_PLAYLIST"); + RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_FROM_PLAYLIST"); break; case R.id.action_add_to_playlist: //noinspection unchecked @@ -127,7 +127,7 @@ public class PlaylistSongAdapter extends AbsMultiSelectAdapter implements MaterialCab.Callback, SelfUpdating { +public class SongAdapter extends AbsMultiSelectAdapter implements MaterialCab.Callback { public static final String TAG = AlbumSongAdapter.class.getSimpleName(); private static final int SHUFFLE_BUTTON = 0; @@ -47,17 +45,15 @@ public class SongAdapter extends AbsMultiSelectAdapter dataSet; - private OnUpdatedListener listener; public SongAdapter(AppCompatActivity activity, CabHolder cabHolder) { - super(cabHolder, R.menu.menu_media_selection); + super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; loadDataSet(); } private void loadDataSet() { dataSet = SongLoader.getAllSongs(activity); - if (listener != null) listener.onUpdated(this); } @Override @@ -129,11 +125,6 @@ public class SongAdapter extends AbsMultiSelectAdapter list = new ArrayList<>(); list.add(song); return create(list); } - public static DeleteFromPlaylistDialog create(ArrayList songs) { - DeleteFromPlaylistDialog dialog = new DeleteFromPlaylistDialog(); + public static RemoveFromPlaylistDialog create(ArrayList songs) { + RemoveFromPlaylistDialog dialog = new RemoveFromPlaylistDialog(); Bundle args = new Bundle(); args.putSerializable("songs", songs); dialog.setArguments(args); @@ -40,16 +40,16 @@ public class DeleteFromPlaylistDialog extends DialogFragment { int title; CharSequence content; if (songs.size() > 1) { - title = R.string.delete_songs_from_playlist_title; - content = Html.fromHtml(getString(R.string.delete_x_songs_from_playlist, songs.size())); + title = R.string.remove_songs_from_playlist_title; + content = Html.fromHtml(getString(R.string.remove_x_songs_from_playlist, songs.size())); } else { - title = R.string.delete_song_from_playlist_title; - content = Html.fromHtml(getString(R.string.delete_song_x_from_playlist, songs.get(0).title)); + title = R.string.remove_song_from_playlist_title; + content = Html.fromHtml(getString(R.string.remove_song_x_from_playlist, songs.get(0).title)); } return new MaterialDialog.Builder(getActivity()) .title(title) .content(content) - .positiveText(R.string.delete_action) + .positiveText(R.string.remove_action) .negativeText(android.R.string.cancel) .callback(new MaterialDialog.ButtonCallback() { @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/interfaces/OnUpdatedListener.java b/app/src/main/java/com/kabouzeid/gramophone/interfaces/OnUpdatedListener.java deleted file mode 100644 index 40ee2e82..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/interfaces/OnUpdatedListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.kabouzeid.gramophone.interfaces; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public interface OnUpdatedListener { - - void onUpdated(SelfUpdating selfUpdating); -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/interfaces/SelfUpdating.java b/app/src/main/java/com/kabouzeid/gramophone/interfaces/SelfUpdating.java deleted file mode 100644 index 90237cb4..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/interfaces/SelfUpdating.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.kabouzeid.gramophone.interfaces; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public interface SelfUpdating { - - void setOnUpdatedListener(OnUpdatedListener listener); -} 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 b28529ba..aff85bb4 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 @@ -9,6 +9,8 @@ import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; import android.support.annotation.NonNull; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.AppBarLayout.OnOffsetChangedListener; import android.support.design.widget.NavigationView; import android.support.design.widget.TabLayout; import android.support.v4.util.Pair; @@ -67,6 +69,7 @@ public class MainActivity extends AbsFabActivity private DrawerLayout drawerLayout; private ActionBarDrawerToggle drawerToggle; + private AppBarLayout appBar; private Toolbar toolbar; private PagerAdapter pagerAdapter; private ViewPager viewPager; @@ -83,7 +86,7 @@ public class MainActivity extends AbsFabActivity initViews(); setUpDrawerLayout(); - setUpToolBar(); + setUpToolbar(); setUpViewPager(); if (PreferenceUtils.getInstance(this).coloredNavigationBarOtherScreensEnabled()) @@ -135,20 +138,19 @@ public class MainActivity extends AbsFabActivity tabLayout = (TabLayout) findViewById(R.id.tabs); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navigationView = (NavigationView) findViewById(R.id.nav_view); + toolbar = (Toolbar) findViewById(R.id.toolbar); + appBar = (AppBarLayout) findViewById(R.id.appbar); } - private void setUpToolBar() { + private void setUpToolbar() { setTitle(getResources().getString(R.string.app_name)); - toolbar = (Toolbar) findViewById(R.id.toolbar); - setToolBarColor(); + setAppBarColor(); setSupportActionBar(toolbar); setUpDrawerToggle(); } - private void setToolBarColor() { - final int colorPrimary = getThemeColorPrimary(); - toolbar.setBackgroundColor(colorPrimary); - tabLayout.setBackgroundColor(colorPrimary); + private void setAppBarColor() { + appBar.setBackgroundColor(getThemeColorPrimary()); } private void setUpNavigationView() { @@ -597,4 +599,16 @@ public class MainActivity extends AbsFabActivity })); } } + + public void addOnAppBarOffsetChangedListener(OnOffsetChangedListener onOffsetChangedListener) { + appBar.addOnOffsetChangedListener(onOffsetChangedListener); + } + + public void removeOnAppBArOffsetChangedListener(OnOffsetChangedListener onOffsetChangedListener) { + appBar.removeOnOffsetChangedListener(onOffsetChangedListener); + } + + public int getTotalAppBarScrollingRange() { + return appBar.getTotalScrollRange(); + } } \ No newline at end of file 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 96e2c17c..1b91ff10 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java @@ -29,6 +29,7 @@ public class SearchActivity extends AbsBaseActivity { private RecyclerView recyclerView; private SearchView searchView; private SearchAdapter searchAdapter; + private View noResults; @SuppressLint("NewApi") @Override @@ -37,6 +38,7 @@ public class SearchActivity extends AbsBaseActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); + noResults = findViewById(android.R.id.empty); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); searchAdapter = new SearchAdapter(this); @@ -132,7 +134,9 @@ public class SearchActivity extends AbsBaseActivity { } private void search(String query) { - if (searchAdapter != null) + if (searchAdapter != null) { searchAdapter.search(query); + noResults.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE); + } } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java index fe7c541a..eb1f79c4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java @@ -2,26 +2,29 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; import android.os.Bundle; import android.support.annotation.StringRes; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.AppBarLayout.OnOffsetChangedListener; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.TextView; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.interfaces.OnUpdatedListener; -import com.kabouzeid.gramophone.interfaces.SelfUpdating; import com.kabouzeid.gramophone.views.FastScroller; /** * @author Karim Abou Zeid (kabouzeid) */ -public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment implements OnUpdatedListener { +public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivityFragment implements OnOffsetChangedListener { public static final String TAG = AbsMainActivityRecyclerViewFragment.class.getSimpleName(); private RecyclerView recyclerView; private RecyclerView.Adapter mAdapter; + private FastScroller fastScroller; + private TextView empty; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -33,25 +36,34 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit super.onViewCreated(view, savedInstanceState); recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); + fastScroller = (FastScroller) view.findViewById(R.id.fast_scroller); + empty = (TextView) view.findViewById(android.R.id.empty); - final FastScroller fastScroller = (FastScroller) view.findViewById(R.id.fast_scroller); fastScroller.setRecyclerView(recyclerView); + fastScroller.setPressedHandleColor(getMainActivity().getThemeColorPrimary()); fastScroller.setOnHandleTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; } }); - fastScroller.setPressedHandleColor(getMainActivity().getThemeColorPrimary()); + + getMainActivity().addOnAppBarOffsetChangedListener(this); setUpRecyclerView(); - checkAndProcessAdapterSize(); + showEmptyMessageIfEmpty(); } private void setUpRecyclerView() { mAdapter = createAdapter(); - if (mAdapter instanceof SelfUpdating) ((SelfUpdating) mAdapter).setOnUpdatedListener(this); + mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { + @Override + public void onChanged() { + super.onChanged(); + showEmptyMessageIfEmpty(); + } + }); recyclerView.setLayoutManager(createLayoutManager()); recyclerView.setAdapter(mAdapter); @@ -61,6 +73,13 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit return mAdapter; } + @Override + public void onOffsetChanged(AppBarLayout appBarLayout, int i) { + FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fastScroller.getLayoutParams(); + params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, getMainActivity().getTotalAppBarScrollingRange() + i); + fastScroller.setLayoutParams(params); + } + @Override public void enableViews() { super.enableViews(); @@ -73,14 +92,11 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit recyclerView.setEnabled(false); } - private void checkAndProcessAdapterSize() { - final View v = getView(); + private void showEmptyMessageIfEmpty() { RecyclerView.Adapter adapter = getAdapter(); - if (adapter != null && v != null) { - final TextView emptyTextView = (TextView) v.findViewById(android.R.id.empty); - - emptyTextView.setText(getEmptyMessage()); - emptyTextView.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); + if (adapter != null) { + empty.setText(getEmptyMessage()); + empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } } @@ -92,9 +108,4 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit protected abstract RecyclerView.LayoutManager createLayoutManager(); protected abstract RecyclerView.Adapter createAdapter(); - - @Override - public void onUpdated(SelfUpdating selfUpdating) { - checkAndProcessAdapterSize(); - } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java b/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java index 71ce53b2..3fe2a8e5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java @@ -91,11 +91,11 @@ public class FastScroller extends FrameLayout { if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { mHandle.setPressed(true); - mInitialBarHeight = mBar.getHeight(); + mInitialBarHeight = getBarHeight(); mLastPressedYAdjustedToInitial = event.getY() + mHandle.getY() + mBar.getY(); } else if (event.getActionMasked() == MotionEvent.ACTION_MOVE) { float newHandlePressedY = event.getY() + mHandle.getY() + mBar.getY(); - int barHeight = mBar.getHeight(); + int barHeight = getBarHeight(); float newHandlePressedYAdjustedToInitial = newHandlePressedY + (mInitialBarHeight - barHeight); @@ -218,7 +218,7 @@ public class FastScroller extends FrameLayout { int verticalScrollRange = mRecyclerView.computeVerticalScrollRange() + mRecyclerView.getPaddingBottom(); - int barHeight = mBar.getHeight(); + int barHeight = getBarHeight(); float ratio = (float) scrollOffset / (verticalScrollRange - barHeight); int calculatedHandleHeight = (int) ((float) barHeight / verticalScrollRange * barHeight); @@ -245,4 +245,8 @@ public class FastScroller extends FrameLayout { } } } + + private int getBarHeight() { + return mBar.getHeight(); + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 71719adb..fde35a6f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,8 @@ + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + tools:ignore="UnusedAttribute"> diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 475ec169..deaa5240 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -7,24 +7,28 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_item_playlist_song.xml b/app/src/main/res/menu/menu_item_playlist_song.xml index 9f2bfee4..d6f0ca69 100644 --- a/app/src/main/res/menu/menu_item_playlist_song.xml +++ b/app/src/main/res/menu/menu_item_playlist_song.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + app:showAsAction="never" /> \ 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 726e7197..8b07c7d3 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -52,7 +52,7 @@ تحديث صورة الفنان يتم التحديث... "تمت الإضافة إلى قائمة الانتظار" - حذف من قائمة التشغيل + حذف من قائمة التشغيل قائمة تشغيل جديدة... عدد قوائم الشبكة قائمة شبكية (أرضية) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 605bf193..9b2aac5f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -51,7 +51,7 @@ Změnit obrázek umělce Aktualizace... "Přidána 1 skladba do fronty." - Vymazat z playlistu + Vymazat z playlistu Nový playlist... Počet sloupců mřížky Počet sloupců mřížky (Horizontálně) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 27df3cfc..244b9e53 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -60,7 +60,7 @@ Aktualisiere... "1 Titel wurde der Wiedergabeliste hinzugefügt." %1$d Titel wurden der Wiedergabeliste hinzugefügt. - Aus Playlist entfernen + Aus Playlist entfernen Neue Playlist… Rastergröße Rastergröße (Land) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 7450b4d2..6b1fd5c6 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -55,7 +55,7 @@ "Προστέθηκε ένας τίτλος στη σειρά αναπαραγωγής" Προστέθηκαν %1$d εικονίδια στην σειρά αναπαραγωγής Δραστηριότητα λίστας - Διαγραφή από τη λίστα αναπαραγωγής + Διαγραφή από τη λίστα αναπαραγωγής Νέα λίστα αναπαραγωγής... Στήλες πλέγματος Στήλες πλέγματος @@ -69,16 +69,16 @@ ]]> %1$s;]]> %1$d τραγούδια;]]> - %1$s από τη λίστα αναπαραγωγής; ]]> - %1$d κομμάτια από τη λίστα αναπαραγωγής; ]]> Διαγραφή τραγουδιού Διαγραφή τραγουδιών - Διαγραφή τραγουδιού από τη λίστα αναπαραγωγής - Διαγραφή τραγουδιών από τη λίστα αναπαραγωγής + Διαγραφή τραγουδιού από τη λίστα αναπαραγωγής + Διαγραφή τραγουδιών από τη λίστα αναπαραγωγής Μετονομασία λίστας αναπαραγωγής Διαγραφή λίστας αναπαραγωγής Διαγραφή λιστών αναπαραγωγής diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index c2b65130..b2a994a1 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -62,7 +62,7 @@ "1 título añadido a la cola de reproducción" %1$d título(s) añadido(s) a la cola de reproducción Actividad de la lista de reproducción - Borrar de la lista de reproducción + Borrar de la lista de reproducción Nueva lista de reproducción... Columnas de la cuadrícula Columnas de la cuadrícula (apaisado) @@ -76,16 +76,16 @@ ]]> %1$s?]]> %1$d canciones?]]> - %1$s de la lista de reproducción? ]]> - %1$d de la lista de reproducción? ]]> Borrar canción Borrar canciones - Eliminar canción de la lista de reproducción - Eliminar canciones de la lista de reproducción + Eliminar canción de la lista de reproducción + Eliminar canciones de la lista de reproducción Renombrar lista de reproducción Borrar lista de reproducción Eliminar listas de reproducción diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index e1eaf5c2..feb871a1 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -52,7 +52,7 @@ Päivitetään... "Kappale lisätty jonoon" {%1$d} kappaletta lisättiin jonoon - Poista soittolistalta + Poista soittolistalta Uusi soittolista Ruudukon sarakkeet Ruudukon sarakkeet (Vaaka) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ecae5cbd..90f8ff43 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -52,7 +52,7 @@ Actualisation... "1 titre ajouté à la file de lecture." %1$d titres ajoutés à la file de lecture. - Supprimer de la playlist + Supprimer de la playlist Nouvelle playlist... Nombre de colonnes Nombre de colonnes (paysage) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index fb77e623..4c1a7344 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -62,7 +62,7 @@ "Un brano aggiunto alla coda." %1$d titoli aggiunti alla coda. Attività playlist - Elimina dalla playlist + Elimina dalla playlist Nuova playlist... Colonne griglia Colonne griglia (schermo orizzontale) @@ -76,16 +76,16 @@ ]]> %1$s? ]]> %1$d brani? ]]> - %1$s dalla playlist? ]]> - %1$d brani dalla playlist? ]]> Elimina brano Elimina brani - Elimina brano dalla playlist - Elimina brani dalla playlist + Elimina brano dalla playlist + Elimina brani dalla playlist Rinomina playlist Elimina playlist Elimina playlist diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index cc16dcd4..c6cefa13 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -52,7 +52,7 @@ 변경 중... "재생 대기열에 1개의 음악을 추가했습니다." %1$d개의 타이틀을 재생 대기열에 추가했습니다. - 재생목록에서 삭제 + 재생목록에서 삭제 새로운 재생목록... 가로 격자 가로 격자 (가로모드일 때) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index dd70e365..fbf8498b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -55,7 +55,7 @@ "1 titel toegevoegd aan de afspeelwachtrij." %1$d titels toegevoegd aan de afspeellijst. "Afspeellijst activiteit " - Verwijderen uit afspeellijst + Verwijderen uit afspeellijst Nieuwe afspeellijst... Rasterkolommen Rasterkolommen (Land) @@ -67,14 +67,14 @@ %1$d afspeellijsten verwijderen?]]> %1$s verwijderen?]]> %1$d nummers verwijderen?]]> - %1$s verwijderen van de afspeellijst?]]> - %1$s verwijderen van de afspeellijst?]]> + %1$d nummers verwijderen uit de afspeellijst? ]]> Verwijder nummer Verwijder nummers - Verwijder nummer uit afspeellijst - Verwijder nummers uit afspeellijst + Verwijder nummer uit afspeellijst + Verwijder nummers uit afspeellijst Hernoem afspeellijst Verwijder afspeellijst Verwijder afspeellijst diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 1030f8cf..030bd622 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -55,7 +55,7 @@ "La 1 tittel til songkøen." La %1$d titlar til songkøen. Spelelisteaktivitet - Fjern frå speleliste + Fjern frå speleliste Ny speleliste... Rutenettkolonnar Rutenettkolonnar (land) @@ -75,16 +75,16 @@ %1$d songar? ]]> - %1$s frå spelelista? ]]> - %1$d songar frår spelelista? ]]> Slett song Slett songar - Slett song frå speleliste - Slett songar frå speleliste + Slett song frå speleliste + Slett songar frå speleliste Gje nytt namn til speleliste Slett speleliste Slett spelelister diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index f9391c11..dbbb8403 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -62,7 +62,7 @@ "Dodano 1 tytuł do kolejki odtwarzania" Dodano %1$d tytuły do kolejki odtwarzania Aktywność list odtwarzania - Usuń z listy odtwarzania + Usuń z listy odtwarzania Nowa lista odtwarzania... Siatka kolumn Siatka kolumn (poziomo) @@ -74,12 +74,12 @@ %1$d listy odtwarzania? ]]> %1$s? ]]> %1$d utworów? ]]> - %1$s z listy odtwarzania? ]]> - %1$d utworów z listy odtwarzania? ]]> + %1$s z listy odtwarzania? ]]> + %1$d utworów z listy odtwarzania? ]]> Usuwanie utworu Usuń utwory - Usuń utwór z listy odtwarzania - Usuń utwory z listy odtwarzania + Usuń utwór z listy odtwarzania + Usuń utwory z listy odtwarzania Zmień nazwę listy odtwarzania Usuń listę odtwarzania Usuń listy odtwarzania diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e1ce6d13..989a16ca 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -62,7 +62,7 @@ "1 título adicionado à lista de reprodução" %1$d faixas adicionadas à lista de reprodução. Atividade da Lista de Reprodução - Excluir da playlist + Excluir da playlist Nova playlist... Colunas da grade Colunas da grade (Horizontal) @@ -76,16 +76,16 @@ ]]> %1$s? ]]> %1$d faixas? ]]> - %1$s da playlist? ]]> - %1$d músicas da playlist? ]]> Excluir Faixa Excluir Faixas - Deletar música da Playlist - Deletar músicas da Playlist + Deletar música da Playlist + Deletar músicas da Playlist Renomear Playlist Excluir Playlist Apagar Playlists diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index e5f76dbb..ce343397 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -50,7 +50,7 @@ Atualizar imagem do artista Atualizando... "Adicionada uma música para a fila atual de músicas." - Apagar da playlist + Apagar da playlist Colunas da grade Colunas da grade (Paisagem) "Aviso: Esta operação não pode ser desfeita." diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index c0203e31..7a9eba36 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -50,7 +50,7 @@ Actualizează imagine artist Actualizare... "Adăugat 1 melodie la lista de redare." - Şterge din playlist + Şterge din playlist Playlist nou... Rânduri pe grid Rânduri pe grid (Orizontal) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d1c82250..a39396d6 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -55,7 +55,7 @@ "Добавлена 1 композиция в очередь воспроизведения" Добавлено %1$d композиций в очередь воспроизведения Активность списка воспроизведения - Удалить из списка воспроизведения + Удалить из списка воспроизведения Новый список воспроизведения... Столбцы сетки Столбцы сетки (ландшафт) @@ -69,16 +69,16 @@ ]]> %1$s? ]]> %1$d песни? ]]> - %1$s из списка воспроизведения ? ]]> - %1$d из списка воспроизведения ? ]]> Удалить песню Удалить песни - Удалить песню из списка воспроизведения - Удалить песни из списка воспроизведения + Удалить песню из списка воспроизведения + Удалить песни из списка воспроизведения Переименовать список воспроизведения Удалить список воспроизведения Удалить списки воспроизведения diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2ff0636a..bc849c9a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -51,7 +51,7 @@ Uppdatera artistbild Uppdaterar ... "Lagt till 1 titel till spellistan." - Radera från spellista + Radera från spellista Ny spellista ... Spellista %1$s skapad Spellista %1$s raderad diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 44cdccf8..e36d5996 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -62,7 +62,7 @@ "Çalma kuyruğuna 1 başlık eklendi" Çalma kuyruğuna %1$d başlıkları eklendi. Çalma listesi etkinliği - Çalma listesinden sil + Çalma listesinden sil Yeni çalma listesi Izgara sütunları Izgara sütunları (Manzara) @@ -74,13 +74,13 @@ %1$d oynatma listelerini silmek istiyor musunuz?]]> %1$s şarkısını silmek istiyor musunuz? ]]> %1$d bu şarkıları silmek istiyor musunuz? ]]> - %1$s şarkısını silmek istiyor musunuz?]]> - %1$d şarkılarını silmek istiyor musunuz? + %1$s şarkısını silmek istiyor musunuz?]]> + %1$d şarkılarını silmek istiyor musunuz? ]]> Şarkıyı Sil Şarkıları Sil - Çalma listesinden şarkı sil - Çalma listesinden şarkıları sil + Çalma listesinden şarkı sil + Çalma listesinden şarkıları sil Çalma Listesini Yeniden Adlandır Çalma Listesini Sil Çalma listelerini sil diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ddb59aa1..646f9b96 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -62,7 +62,7 @@ "该曲目已加入播放队列" %1$d首曲目已加入播放队列 播放列表操作 - 从播放列表中删除 + 从播放列表中删除 新建播放列表 专辑列数 专辑列数(横屏) @@ -80,16 +80,16 @@ %1$d首歌曲? ]]> - %1$s? ]]> - %1$d首歌曲? ]]> 删除歌曲 删除歌曲 - 从播放列表删除 - 从播放列表删除 + 从播放列表删除 + 从播放列表删除 重命名播放列表 删除播放列表 删除播放列表 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 6467b93c..6a458f5c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -55,7 +55,7 @@ "這歌曲已加入播放佇列" 已增加%1$d首歌曲到播放佇列 音樂清單活動 - 從音樂清單移除 + 從音樂清單移除 新增音樂清單 專輯網格列數 專輯網格列數(橫向) @@ -73,16 +73,16 @@ 你想移除這首歌曲: %1$s嗎? ]]> %1$d嗎?]]> - %1$s從音樂清單移除嗎? ]]> - %1$d從音樂清單移除嗎? ]]> 移除歌曲 移除歌曲 - 將歌曲從音樂清單移除 - 將歌曲從音樂清單移除 + 將歌曲從音樂清單移除 + 將歌曲從音樂清單移除 重新命名音樂清單 刪除音樂清單 刪除音樂清單 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 387ff074..b1aab21b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,7 +63,7 @@ "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Playlist Activity - Delete from playlist + Remove from playlist New playlist… Grid columns Grid columns (Land) @@ -84,16 +84,16 @@ %1$d songs? ]]> - %1$s from the playlist? + %1$s from the playlist? ]]> - %1$d songs from the playlist? + %1$d songs from the playlist? ]]> Delete Song Delete Songs - Delete Song from Playlist - Delete Songs from Playlist + Remove Song from Playlist + Remove Songs from Playlist Rename Playlist Delete Playlist Delete Playlists @@ -128,9 +128,11 @@ Open navigation drawer Close navigation drawer Delete + Remove Rename Create + %1$d selected Select Default Primary Color