From 5317c5140057835f9073ffd61e56f77ac78ded23 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Fri, 10 Jul 2015 02:37:10 +0200 Subject: [PATCH] Added Nullity Annotations --- .../adapter/AbsMultiSelectAdapter.java | 1 + .../gramophone/adapter/AlbumAdapter.java | 33 +++++++++------ .../gramophone/adapter/ArtistAdapter.java | 23 +++++++---- .../adapter/ArtistAlbumAdapter.java | 18 +++++--- .../gramophone/adapter/PagerAdapter.java | 11 +++-- .../adapter/PlayingQueueAdapter.java | 10 +++-- .../gramophone/adapter/PlaylistAdapter.java | 15 ++++--- .../gramophone/adapter/SearchAdapter.java | 23 +++++++---- .../adapter/songadapter/AlbumSongAdapter.java | 15 +++++-- .../songadapter/ArtistSongAdapter.java | 14 ++++--- .../songadapter/PlaylistSongAdapter.java | 17 +++++--- .../adapter/songadapter/SongAdapter.java | 17 +++++--- .../SmartPlaylistSongAdapter.java | 18 +++++--- .../gramophone/appwidget/WidgetMedium.java | 20 +++++---- .../gramophone/dialogs/AboutDialog.java | 2 +- .../dialogs/AddToPlaylistDialog.java | 4 +- .../dialogs/ClearSmartPlaylistDialog.java | 1 + .../dialogs/ColorChooserDialog.java | 13 ++++-- .../dialogs/CreatePlaylistDialog.java | 8 +++- .../dialogs/DeletePlaylistDialog.java | 2 + .../gramophone/dialogs/DeleteSongsDialog.java | 2 + .../dialogs/RemoveFromPlaylistDialog.java | 2 + .../dialogs/RenamePlaylistDialog.java | 3 +- .../gramophone/dialogs/SleepTimerDialog.java | 2 +- .../gramophone/dialogs/SongDetailDialog.java | 5 ++- .../gramophone/dialogs/SongShareDialog.java | 1 + .../helper/MenuItemClickHelper.java | 8 ++-- .../gramophone/helper/MusicPlayerRemote.java | 16 +++++--- .../helper/PlayingNotificationHelper.java | 13 ++++-- .../gramophone/helper/SearchQueryHelper.java | 4 +- .../gramophone/helper/ShuffleHelper.java | 4 +- .../helper/bitmapblur/BlurProcess.java | 2 + .../helper/bitmapblur/JavaBlurProcess.java | 6 ++- .../helper/bitmapblur/StackBlurManager.java | 8 +++- .../PhonographImageDownloader.java | 16 +++++--- .../lastfm/rest/LastFMRestClient.java | 5 ++- .../gramophone/loader/AlbumLoader.java | 26 ++++++++---- .../gramophone/loader/AlbumSongLoader.java | 6 ++- .../gramophone/loader/ArtistAlbumLoader.java | 6 ++- .../gramophone/loader/ArtistLoader.java | 22 ++++++---- .../gramophone/loader/ArtistSongLoader.java | 6 ++- .../gramophone/loader/LastAddedLoader.java | 6 ++- .../gramophone/loader/PlaylistLoader.java | 22 ++++++---- .../gramophone/loader/PlaylistSongLoader.java | 9 ++-- .../gramophone/loader/SongLoader.java | 24 +++++++---- .../gramophone/loader/SortedCursor.java | 22 ++++++---- .../TopAndRecentlyPlayedTracksLoader.java | 23 +++++++---- .../gramophone/misc/DragSortRecycler.java | 16 +++++--- .../com/kabouzeid/gramophone/model/Album.java | 3 +- .../kabouzeid/gramophone/model/Artist.java | 3 +- .../kabouzeid/gramophone/model/Playlist.java | 3 +- .../com/kabouzeid/gramophone/model/Song.java | 3 +- .../model/smartplaylist/AbsSmartPlaylist.java | 4 +- .../smartplaylist/LastAddedPlaylist.java | 8 ++-- .../smartplaylist/MyTopTracksPlaylist.java | 8 ++-- .../smartplaylist/RecentlyPlayedPlaylist.java | 8 ++-- .../prefs/ColorChooserPreference.java | 6 +-- .../prefs/DynamicPreferenceCategory.java | 6 +-- .../gramophone/provider/AlbumJSONStore.java | 17 +++++--- .../gramophone/provider/ArtistJSONStore.java | 17 +++++--- .../provider/MusicPlaybackQueueStore.java | 23 +++++++---- .../provider/RecentlyPlayedStore.java | 12 ++++-- .../provider/SongPlayCountStore.java | 23 +++++++---- .../service/MediaButtonIntentReceiver.java | 3 +- .../gramophone/service/MultiPlayer.java | 15 ++++--- .../gramophone/service/MusicService.java | 35 ++++++++++------ .../ui/activities/AlbumDetailActivity.java | 17 ++++---- .../ui/activities/ArtistDetailActivity.java | 22 ++++++---- .../ui/activities/MainActivity.java | 20 +++++---- .../activities/MusicControllerActivity.java | 19 +++++---- .../ui/activities/PlaylistDetailActivity.java | 10 ++++- .../ui/activities/SearchActivity.java | 10 +++-- .../ui/activities/SettingsActivity.java | 21 ++++++---- .../ui/activities/base/AbsBaseActivity.java | 6 ++- .../ui/activities/base/AbsFabActivity.java | 8 +++- .../base/AbsPlaybackControlActivity.java | 6 ++- .../ui/activities/base/AbsThemeActivity.java | 2 + .../tageditor/AbsTagEditorActivity.java | 41 +++++++++++-------- .../tageditor/AlbumTagEditorActivity.java | 7 +++- .../tageditor/SongTagEditorActivity.java | 3 ++ .../AbsMainActivityFragment.java | 2 + .../AbsMainActivityRecyclerViewFragment.java | 4 +- .../AlbumViewFragment.java | 2 + .../ArtistViewFragment.java | 3 ++ .../PlaylistViewFragment.java | 3 ++ .../SongViewFragment.java | 3 ++ .../kabouzeid/gramophone/util/ImageUtil.java | 9 ++-- .../gramophone/util/InternalStorageUtil.java | 7 ++-- .../kabouzeid/gramophone/util/MusicUtil.java | 36 +++++++++------- .../gramophone/util/NavigationUtil.java | 16 ++++---- .../gramophone/util/PlaylistsUtil.java | 25 ++++++----- .../gramophone/util/PreferenceUtils.java | 13 +++++- .../com/kabouzeid/gramophone/util/Util.java | 28 +++++++------ .../kabouzeid/gramophone/util/ViewUtil.java | 14 ++++--- .../kabouzeid/gramophone/views/ColorView.java | 15 ++++--- .../gramophone/views/DynamicSwitch.java | 15 ++++--- .../gramophone/views/FastScroller.java | 10 +++-- .../views/HeightFitSquareImageView.java | 5 ++- .../views/HeightWidthFitSquareImageView.java | 5 ++- .../gramophone/views/PlayPauseDrawable.java | 12 +++--- .../views/SquareIfPlaceImageView.java | 5 ++- .../views/WidthFitSquareImageView.java | 5 ++- 102 files changed, 772 insertions(+), 404 deletions(-) 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 0d01a798..f7e40df0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AbsMultiSelectAdapter.java @@ -16,6 +16,7 @@ import java.util.ArrayList; * @author Karim Abou Zeid (kabouzeid) */ public abstract class AbsMultiSelectAdapter extends RecyclerView.Adapter implements MaterialCab.Callback { + @Nullable private final CabHolder cabHolder; private MaterialCab cab; private ArrayList checked; 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 48b42087..a4beba35 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumAdapter.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.adapter; import android.annotation.TargetApi; import android.graphics.Bitmap; import android.os.Build; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; @@ -54,10 +55,12 @@ public class AlbumAdapter extends AbsMultiSelectAdapter dataSet; + @NonNull @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(activity).inflate(R.layout.item_grid_album, parent, false); @@ -65,7 +68,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_disk: DeleteSongsDialog.create(getSongList(selection)).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); @@ -128,7 +131,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter getSongList(List albums) { + @NonNull + private ArrayList getSongList(@NonNull List albums) { final ArrayList songs = new ArrayList<>(); for (Album album : albums) { songs.addAll(AlbumSongLoader.getAlbumSongList(activity, album.id)); @@ -137,14 +141,19 @@ public class AlbumAdapter extends AbsMultiSelectAdapter { + @NonNull protected final AppCompatActivity activity; protected List dataSet; + @NonNull protected final LastFMRestClient lastFMRestClient; - public ArtistAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { + public ArtistAdapter(@NonNull AppCompatActivity activity, @Nullable CabHolder cabHolder) { super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; lastFMRestClient = new LastFMRestClient(activity); @@ -64,6 +67,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter() { @Override - public void success(ArtistInfo artistInfo, Response response) { + public void success(@NonNull ArtistInfo artistInfo, Response response) { if (artistInfo.getArtist() != null) { int thumbnailIndex = 0; List images = artistInfo.getArtist().getImage(); @@ -127,7 +131,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_disk: DeleteSongsDialog.create(getSongList(selection)).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); @@ -141,7 +145,8 @@ public class ArtistAdapter extends AbsMultiSelectAdapter getSongList(List artists) { + @NonNull + private ArrayList getSongList(@NonNull List artists) { final ArrayList songs = new ArrayList<>(); for (Artist artist : artists) { songs.addAll(ArtistSongLoader.getArtistSongList(activity, artist.id)); @@ -150,12 +155,16 @@ public class ArtistAdapter extends AbsMultiSelectAdapter dataSet; private final int listMargin; - public ArtistAlbumAdapter(AppCompatActivity activity, ArrayList objects, @Nullable CabHolder cabHolder) { + public ArtistAlbumAdapter(@NonNull AppCompatActivity activity, ArrayList objects, @Nullable CabHolder cabHolder) { super(activity, cabHolder, R.menu.menu_media_selection); this.activity = activity; dataSet = objects; @@ -60,6 +62,7 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_disk: DeleteSongsDialog.create(getSongList(selection)).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); @@ -125,7 +128,8 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter getSongList(List albums) { + @NonNull + private ArrayList getSongList(@NonNull List albums) { final ArrayList songs = new ArrayList<>(); for (Album album : albums) { songs.addAll(AlbumSongLoader.getAlbumSongList(activity, album.id)); @@ -134,12 +138,16 @@ public class ArtistAlbumAdapter extends AbsMultiSelectAdapter mHolderList = new ArrayList<>(); + @NonNull private final Context mContext; private int mCurrentPage; + @NonNull private final String[] titles; - public PagerAdapter(final Context context, final FragmentManager fragmentManager) { + public PagerAdapter(@NonNull final Context context, final FragmentManager fragmentManager) { super(fragmentManager); mContext = context; titles = new String[]{ @@ -43,7 +46,7 @@ public class PagerAdapter extends FragmentPagerAdapter { } @SuppressWarnings("synthetic-access") - public void add(final Class className, final Bundle params) { + public void add(@NonNull final Class className, final Bundle params) { final Holder mHolder = new Holder(); mHolder.mClassName = className.getName(); mHolder.mParams = params; @@ -61,8 +64,9 @@ public class PagerAdapter extends FragmentPagerAdapter { return getItem(position); } + @NonNull @Override - public Object instantiateItem(final ViewGroup container, final int position) { + public Object instantiateItem(@NonNull final ViewGroup container, final int position) { final Fragment mFragment = (Fragment) super.instantiateItem(container, position); final WeakReference mWeakFragment = mFragmentArray.get(position); if (mWeakFragment != null) { @@ -93,6 +97,7 @@ public class PagerAdapter extends FragmentPagerAdapter { return mHolderList.size(); } + @NonNull @Override public CharSequence getPageTitle(final int position) { return titles[position] diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java index c0015dbc..7aa7aea6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlayingQueueAdapter.java @@ -1,5 +1,7 @@ package com.kabouzeid.gramophone.adapter; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.MenuItem; @@ -24,15 +26,17 @@ import java.util.ArrayList; */ public class PlayingQueueAdapter extends ArrayAdapter { + @NonNull private final AppCompatActivity activity; - public PlayingQueueAdapter(AppCompatActivity activity, ArrayList playList) { + public PlayingQueueAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList playList) { super(activity, R.layout.item_list_playlist_song, playList); this.activity = activity; } + @Nullable @Override - public View getView(final int position, View convertView, ViewGroup parent) { + public View getView(final int position, @Nullable View convertView, ViewGroup parent) { final Song song = getItem(position); if (convertView == null) { convertView = LayoutInflater.from(activity).inflate(R.layout.item_list_playlist_song, parent, false); @@ -56,7 +60,7 @@ public class PlayingQueueAdapter extends ArrayAdapter { popupMenu.inflate(R.menu.menu_item_playing_queue_song); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public boolean onMenuItemClick(@NonNull MenuItem item) { if (item.getItemId() == R.id.action_remove_from_playing_queue) { MusicPlayerRemote.removeFromQueue(position); notifyDataSetChanged(); 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 0e151b4e..7b2a17ea 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.adapter; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; @@ -72,6 +73,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_playlist: for (int i = 0; i < selection.size(); i++) { @@ -135,7 +137,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter getSongList(List playlists) { + @NonNull + private ArrayList getSongList(@NonNull List playlists) { final ArrayList songs = new ArrayList<>(); for (Playlist playlist : playlists) { if (playlist instanceof AbsSmartPlaylist) { @@ -156,7 +159,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter() { @Override - public void success(ArtistInfo artistInfo, Response response) { + public void success(@NonNull ArtistInfo artistInfo, Response response) { if (artistInfo.getArtist() != null) { int thumbnailIndex = 0; List images = artistInfo.getArtist().getImage(); @@ -177,12 +183,15 @@ public class SearchAdapter extends RecyclerView.Adapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_disk: DeleteSongsDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); @@ -93,13 +95,18 @@ public class AlbumSongAdapter extends AbsMultiSelectAdapter implements MaterialCab.Callback { + @Nullable private final CabHolder cabHolder; private MaterialCab cab; private ArrayList dataSet; private ArrayList checked; + @NonNull private final AppCompatActivity activity; - public ArtistSongAdapter(AppCompatActivity activity, ArrayList songs, @Nullable CabHolder cabHolder) { + public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList songs, @Nullable CabHolder cabHolder) { super(activity, R.layout.item_list_song, songs); this.activity = activity; this.cabHolder = cabHolder; @@ -55,8 +58,9 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab addAll(dataSet); } + @Nullable @Override - public View getView(final int position, View convertView, ViewGroup parent) { + public View getView(final int position, @Nullable View convertView, ViewGroup parent) { final Song song = getItem(position); if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list_artist_song, parent, false); @@ -87,7 +91,7 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab popupMenu.inflate(R.menu.menu_item_song); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override - public boolean onMenuItemClick(MenuItem item) { + public boolean onMenuItemClick(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_go_to_album: Pair[] albumPairs = new Pair[]{ @@ -127,7 +131,7 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab return convertView; } - private void onMultipleItemAction(MenuItem menuItem, ArrayList selection) { + private void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_disk: DeleteSongsDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); @@ -182,7 +186,7 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab } @Override - public boolean onCabItemClicked(MenuItem menuItem) { + public boolean onCabItemClicked(@NonNull MenuItem menuItem) { onMultipleItemAction(menuItem, new ArrayList<>(checked)); cab.finish(); uncheckAll(); 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 17ec8d56..92d66d5f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/songadapter/PlaylistSongAdapter.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.adapter.songadapter; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; @@ -39,11 +40,12 @@ import java.util.List; public class PlaylistSongAdapter extends AbsPlaylistSongAdapter { public static final String TAG = PlaylistSongAdapter.class.getSimpleName(); + @NonNull protected final AppCompatActivity activity; protected ArrayList dataSet; private Playlist playlist; - public PlaylistSongAdapter(AppCompatActivity activity, Playlist playlist, @Nullable CabHolder cabHolder) { + public PlaylistSongAdapter(@NonNull AppCompatActivity activity, @NonNull Playlist playlist, @Nullable CabHolder cabHolder) { super(activity, cabHolder, R.menu.menu_playlists_songs_selection); this.activity = activity; this.playlist = playlist; @@ -67,6 +69,7 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_playlist: RemoveFromPlaylistDialog.create(selection).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); @@ -129,12 +132,16 @@ public class PlaylistSongAdapter extends AbsPlaylistSongAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_delete_from_disk: DeleteSongsDialog.create(selection).show(activity.getSupportFragmentManager(), "DELETE_SONGS"); @@ -133,15 +135,20 @@ public class SongAdapter extends AbsMultiSelectAdapter selection) { + protected void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull ArrayList selection) { switch (menuItem.getItemId()) { case R.id.action_add_to_playlist: onAddToPlaylist(selection); @@ -113,17 +115,21 @@ public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter songs) { + protected void onAddToCurrentPlaying(@NonNull ArrayList songs) { MusicPlayerRemote.enqueue(songs); } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { + @NonNull final TextView songTitle; + @NonNull final TextView songInfo; + @NonNull final ImageView overflowButton; + @NonNull final ImageView albumArt; - public ViewHolder(View itemView, final int songMenu) { + public ViewHolder(@NonNull View itemView, final int songMenu) { super(itemView); songTitle = (TextView) itemView.findViewById(R.id.song_title); songInfo = (TextView) itemView.findViewById(R.id.song_info); @@ -138,7 +144,7 @@ public class SmartPlaylistSongAdapter extends AbsPlaylistSongAdapter list = new ArrayList<>(); list.add(song); return create(list); } + @NonNull public static AddToPlaylistDialog create(ArrayList songs) { AddToPlaylistDialog dialog = new AddToPlaylistDialog(); Bundle args = new Bundle(); @@ -49,7 +51,7 @@ public class AddToPlaylistDialog extends DialogFragment { .items(playlistNames) .itemsCallback(new MaterialDialog.ListCallback() { @Override - public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence charSequence) { + public void onSelection(@NonNull MaterialDialog materialDialog, View view, int i, CharSequence charSequence) { //noinspection unchecked final ArrayList songs = (ArrayList) getArguments().getSerializable("songs"); if (i == 0) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java index c6615dac..e65957b4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java @@ -15,6 +15,7 @@ import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; */ public class ClearSmartPlaylistDialog extends DialogFragment { + @NonNull public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) { ClearSmartPlaylistDialog dialog = new ClearSmartPlaylistDialog(); Bundle args = new Bundle(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java index 8928c24b..8e3e3519 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ColorChooserDialog.java @@ -13,6 +13,8 @@ import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.shapes.OvalShape; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.content.res.ResourcesCompat; import android.view.LayoutInflater; import android.view.View; @@ -31,6 +33,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi private ColorCallback mCallback; private int[] mColors; + @Nullable private GridView mGrid; @Override @@ -40,7 +43,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi } @Override - public void onClick(View v) { + public void onClick(@NonNull View v) { if (v.getTag() != null) { final int index = (Integer) v.getTag(); getArguments().putInt("preselect", mColors[index]); @@ -128,8 +131,9 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi return position; } + @Nullable @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(int position, @Nullable View convertView, ViewGroup parent) { if (convertView == null) convertView = LayoutInflater.from(getActivity()).inflate(R.layout.griditem_color_chooser, parent, false); @@ -156,7 +160,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi } @Override - public void onClick(View v) { + public void onClick(@NonNull View v) { final int index = (Integer) v.getTag(); getArguments().putInt("preselect", mColors[index]); invalidateGrid(); @@ -180,6 +184,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi return Color.argb(alpha, red, green, blue); } + @NonNull private static Drawable createSelector(int color) { ShapeDrawable darkerCircle = new ShapeDrawable(new OvalShape()); darkerCircle.getPaint().setColor(translucentColor(shiftColorDown(color))); @@ -188,7 +193,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi return stateListDrawable; } - public void show(Activity context, int title, int preselect) { + public void show(@NonNull Activity context, int title, int preselect) { Bundle args = new Bundle(); args.putInt("preselect", preselect); args.putInt("title", title); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java index 2faf8b32..ef08ba0e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.dialogs; import android.app.Dialog; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.text.InputType; @@ -18,17 +19,20 @@ import java.util.ArrayList; */ public class CreatePlaylistDialog extends DialogFragment { + @NonNull public static CreatePlaylistDialog create() { return create((Song) null); } - public static CreatePlaylistDialog create(Song song) { + @NonNull + public static CreatePlaylistDialog create(@Nullable Song song) { ArrayList list = new ArrayList<>(); if (song != null) list.add(song); return create(list); } + @NonNull public static CreatePlaylistDialog create(ArrayList songs) { CreatePlaylistDialog dialog = new CreatePlaylistDialog(); Bundle args = new Bundle(); @@ -49,7 +53,7 @@ public class CreatePlaylistDialog extends DialogFragment { InputType.TYPE_TEXT_FLAG_CAP_WORDS) .input(R.string.playlist_name_empty, 0, false, new MaterialDialog.InputCallback() { @Override - public void onInput(MaterialDialog materialDialog, CharSequence charSequence) { + public void onInput(MaterialDialog materialDialog, @NonNull CharSequence charSequence) { if (getActivity() == null) return; if (!charSequence.toString().trim().isEmpty()) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java index 88fab01c..2b92f779 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java @@ -18,12 +18,14 @@ import java.util.ArrayList; */ public class DeletePlaylistDialog extends DialogFragment { + @NonNull public static DeletePlaylistDialog create(Playlist playlist) { ArrayList list = new ArrayList<>(); list.add(playlist); return create(list); } + @NonNull public static DeletePlaylistDialog create(ArrayList playlists) { DeletePlaylistDialog dialog = new DeletePlaylistDialog(); Bundle args = new Bundle(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java index f27d6ef7..883b9a31 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java @@ -18,12 +18,14 @@ import java.util.ArrayList; */ public class DeleteSongsDialog extends DialogFragment { + @NonNull public static DeleteSongsDialog create(Song song) { ArrayList list = new ArrayList<>(); list.add(song); return create(list); } + @NonNull public static DeleteSongsDialog create(ArrayList songs) { DeleteSongsDialog dialog = new DeleteSongsDialog(); Bundle args = new Bundle(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java index 493c3c18..3abb7705 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java @@ -18,12 +18,14 @@ import java.util.ArrayList; */ public class RemoveFromPlaylistDialog extends DialogFragment { + @NonNull public static RemoveFromPlaylistDialog create(PlaylistSong song) { ArrayList list = new ArrayList<>(); list.add(song); return create(list); } + @NonNull public static RemoveFromPlaylistDialog create(ArrayList songs) { RemoveFromPlaylistDialog dialog = new RemoveFromPlaylistDialog(); Bundle args = new Bundle(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java index 9fe8a416..b3405a24 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RenamePlaylistDialog.java @@ -15,6 +15,7 @@ import com.kabouzeid.gramophone.util.PlaylistsUtil; */ public class RenamePlaylistDialog extends DialogFragment { + @NonNull public static RenamePlaylistDialog create(long playlistId) { RenamePlaylistDialog dialog = new RenamePlaylistDialog(); Bundle args = new Bundle(); @@ -37,7 +38,7 @@ public class RenamePlaylistDialog extends DialogFragment { .input(getString(R.string.playlist_name_empty), PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), false, new MaterialDialog.InputCallback() { @Override - public void onInput(MaterialDialog materialDialog, CharSequence charSequence) { + public void onInput(MaterialDialog materialDialog, @NonNull CharSequence charSequence) { if (!charSequence.toString().trim().equals("")) { long playlistId = getArguments().getLong("playlist_id"); PlaylistsUtil.renamePlaylist(getActivity(), playlistId, charSequence.toString()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java index 094c23f0..9444b6b7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SleepTimerDialog.java @@ -121,7 +121,7 @@ public class SleepTimerDialog extends DialogFragment { seekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() { @Override - public void onProgressChanged(SeekArc seekArc, int i, boolean b) { + public void onProgressChanged(@NonNull SeekArc seekArc, int i, boolean b) { if (i < 1) { seekArc.setProgress(1); return; diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java index ec3770cf..0ec9c28e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java @@ -35,6 +35,7 @@ public class SongDetailDialog extends DialogFragment { public static final String TAG = SongDetailDialog.class.getSimpleName(); + @NonNull public static SongDetailDialog create(File songFile) { SongDetailDialog dialog = new SongDetailDialog(); Bundle args = new Bundle(); @@ -85,13 +86,13 @@ public class SongDetailDialog extends DialogFragment { bitRate.setText(makeTextWithTitle(context, R.string.label_bit_rate, audioHeader.getBitRate() + " kb/s")); samplingRate.setText(makeTextWithTitle(context, R.string.label_sampling_rate, audioHeader.getSampleRate() + " Hz")); } - } catch (CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) { + } catch (@NonNull CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) { Log.e(TAG, "error while reading the song file", e); } return dialog; } - private static Spanned makeTextWithTitle(Context context, int titleResId, String text) { + private static Spanned makeTextWithTitle(@NonNull Context context, int titleResId, String text) { return Html.fromHtml("" + context.getResources().getString(titleResId) + ": " + "" + text); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java index f2b036cc..1b193c74 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java @@ -16,6 +16,7 @@ import com.kabouzeid.gramophone.util.MusicUtil; * @author Karim Abou Zeid (kabouzeid) */ public class SongShareDialog extends DialogFragment { + @NonNull public static SongShareDialog create(final Song song) { final SongShareDialog dialog = new SongShareDialog(); final Bundle args = new Bundle(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java index fee1eafa..f38d0a48 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MenuItemClickHelper.java @@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.helper; import android.app.Activity; import android.content.Intent; +import android.support.annotation.NonNull; import android.support.v4.util.Pair; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; @@ -31,7 +32,7 @@ import java.util.ArrayList; */ public class MenuItemClickHelper { - public static boolean handleSongMenuClick(AppCompatActivity activity, Song song, MenuItem item) { + public static boolean handleSongMenuClick(@NonNull AppCompatActivity activity, @NonNull Song song, @NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_set_as_ringtone: MusicUtil.setRingtone(activity, song.id); @@ -78,7 +79,7 @@ public class MenuItemClickHelper { return false; } - public static boolean handlePlaylistMenuClick(AppCompatActivity activity, Playlist playlist, MenuItem item) { + public static boolean handlePlaylistMenuClick(@NonNull AppCompatActivity activity, @NonNull Playlist playlist, @NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_play: MusicPlayerRemote.openQueue(new ArrayList<>(getPlaylistSongs(activity, playlist)), 0, true); @@ -96,7 +97,8 @@ public class MenuItemClickHelper { return false; } - private static ArrayList getPlaylistSongs(Activity activity, Playlist playlist) { + @NonNull + private static ArrayList getPlaylistSongs(@NonNull Activity activity, Playlist playlist) { return playlist instanceof AbsSmartPlaylist ? ((AbsSmartPlaylist) playlist).getSongs(activity) : PlaylistSongLoader.getPlaylistSongList(activity, playlist.id); 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 79cca3b8..78ec1b8f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java @@ -8,6 +8,8 @@ import android.content.Intent; import android.content.ServiceConnection; import android.media.audiofx.AudioEffect; import android.os.IBinder; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.widget.Toast; import com.kabouzeid.gramophone.R; @@ -26,11 +28,12 @@ public class MusicPlayerRemote { public static final String TAG = MusicPlayerRemote.class.getSimpleName(); + @Nullable public static MusicService musicService; private static final WeakHashMap mConnectionMap = new WeakHashMap<>(); - public static ServiceToken bindToService(final Context context, + public static ServiceToken bindToService(@NonNull final Context context, final ServiceConnection callback) { Activity realActivity = ((Activity) context).getParent(); if (realActivity == null) { @@ -49,7 +52,7 @@ public class MusicPlayerRemote { return null; } - public static void unbindFromService(final ServiceToken token) { + public static void unbindFromService(@Nullable final ServiceToken token) { if (token == null) { return; } @@ -161,6 +164,7 @@ public class MusicPlayerRemote { return -1; } + @Nullable public static ArrayList getPlayingQueue() { if (musicService != null) { return musicService.getPlayingQueue(); @@ -226,11 +230,11 @@ public class MusicPlayerRemote { return false; } - public static boolean shuffleAllSongs(final Context context, boolean startPlaying) { + public static boolean shuffleAllSongs(@NonNull final Context context, boolean startPlaying) { return openAndShuffleQueue(context, SongLoader.getAllSongs(context), startPlaying); } - public static boolean openAndShuffleQueue(final Context context, final ArrayList songs, boolean startPlaying) { + public static boolean openAndShuffleQueue(final Context context, @NonNull final ArrayList songs, boolean startPlaying) { if (musicService != null) { if (!songs.isEmpty()) { MusicPlayerRemote.openQueue(songs, new Random().nextInt(songs.size()), startPlaying); @@ -259,7 +263,7 @@ public class MusicPlayerRemote { return false; } - public static boolean enqueue(ArrayList songs) { + public static boolean enqueue(@NonNull ArrayList songs) { if (musicService != null) { musicService.addSongs(songs); final String toast = songs.size() == 1 ? musicService.getResources().getString(R.string.added_title_to_playing_queue) : musicService.getResources().getString(R.string.added_x_titles_to_playing_queue, songs.size()); @@ -269,7 +273,7 @@ public class MusicPlayerRemote { return false; } - public static boolean removeFromQueue(Song song) { + public static boolean removeFromQueue(@NonNull Song song) { if (musicService != null) { musicService.removeSong(song); return true; diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java index 4edaf4ce..887f5844 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java @@ -13,6 +13,8 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Bitmap; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; import android.support.v7.graphics.Palette; import android.view.View; @@ -38,9 +40,12 @@ public class PlayingNotificationHelper { public static final String ACTION_NOTIFICATION_COLOR_PREFERENCE_CHANGED = "com.kabouzeid.gramophone.NOTIFICATION_COLOR_PREFERENCE_CHANGED"; public static final String EXTRA_NOTIFICATION_COLORED = "com.kabouzeid.gramophone.EXTRA_NOTIFICATION_COLORED"; + @NonNull private final MusicService service; + @NonNull private final NotificationManager notificationManager; + @Nullable private Notification notification = null; private RemoteViews notificationLayout; @@ -54,9 +59,10 @@ public class PlayingNotificationHelper { private boolean isReceiverRegistered; private boolean isNotificationShown; + @NonNull final IntentFilter intentFilter; - public PlayingNotificationHelper(final MusicService service) { + public PlayingNotificationHelper(@NonNull final MusicService service) { this.service = service; notificationManager = (NotificationManager) service .getSystemService(Context.NOTIFICATION_SERVICE); @@ -65,9 +71,10 @@ public class PlayingNotificationHelper { intentFilter.addAction(ACTION_NOTIFICATION_COLOR_PREFERENCE_CHANGED); } + @NonNull private BroadcastReceiver notificationColorPreferenceChangedReceiver = new BroadcastReceiver() { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, @NonNull Intent intent) { if (intent.getAction().equals(ACTION_NOTIFICATION_COLOR_PREFERENCE_CHANGED)) { boolean isColored = intent.getBooleanExtra(EXTRA_NOTIFICATION_COLORED, false); if (isNotificationShown && PlayingNotificationHelper.this.isColored != isColored) { @@ -219,7 +226,7 @@ public class PlayingNotificationHelper { }); } - private void setAlbumArt(Bitmap albumArt) { + private void setAlbumArt(@Nullable Bitmap albumArt) { if (albumArt != null) { notificationLayout.setImageViewBitmap(R.id.icon, albumArt); notificationLayoutExpanded.setImageViewBitmap(R.id.icon, albumArt); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/SearchQueryHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/SearchQueryHelper.java index 097f0cff..210846f5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/SearchQueryHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/SearchQueryHelper.java @@ -4,6 +4,7 @@ import android.app.SearchManager; import android.content.Context; import android.os.Bundle; import android.provider.MediaStore; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.Song; @@ -19,7 +20,8 @@ public class SearchQueryHelper { private static final String ARTIST_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.ARTIST + ") = ?"; private static final String AND = " AND "; - public static ArrayList getSongs(final Context context, final Bundle extras) { + @NonNull + public static ArrayList getSongs(@NonNull final Context context, @NonNull final Bundle extras) { final String query = extras.getString(SearchManager.QUERY, null); final String artistName = extras.getString(MediaStore.EXTRA_MEDIA_ARTIST, null); final String albumName = extras.getString(MediaStore.EXTRA_MEDIA_ALBUM, null); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java index 28c92180..699ee8e7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/ShuffleHelper.java @@ -1,5 +1,7 @@ package com.kabouzeid.gramophone.helper; +import android.support.annotation.NonNull; + import com.kabouzeid.gramophone.model.Song; import java.util.Collections; @@ -10,7 +12,7 @@ import java.util.List; */ public class ShuffleHelper { - public static void makeShuffleList(List listToShuffle, final int current) { + public static void makeShuffleList(@NonNull List listToShuffle, final int current) { if (current >= 0) { Song song = listToShuffle.remove(current); Collections.shuffle(listToShuffle); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/BlurProcess.java b/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/BlurProcess.java index cce072b3..2620f3bb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/BlurProcess.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/BlurProcess.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.helper.bitmapblur; import android.graphics.Bitmap; +import android.support.annotation.Nullable; interface BlurProcess { /** @@ -11,5 +12,6 @@ interface BlurProcess { * @param radius the radius in pixels to blur the image * @return the blurred version of the image. */ + @Nullable Bitmap blur(Bitmap original, float radius); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/JavaBlurProcess.java b/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/JavaBlurProcess.java index cc5a7336..620669c3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/JavaBlurProcess.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/JavaBlurProcess.java @@ -1,6 +1,8 @@ package com.kabouzeid.gramophone.helper.bitmapblur; import android.graphics.Bitmap; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import java.util.ArrayList; import java.util.concurrent.Callable; @@ -71,8 +73,9 @@ class JavaBlurProcess implements BlurProcess { 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 }; + @Nullable @Override - public Bitmap blur(Bitmap original, float radius) { + public Bitmap blur(@NonNull Bitmap original, float radius) { int w = original.getWidth(); int h = original.getHeight(); int[] currentPixels = new int[w * h]; @@ -319,6 +322,7 @@ class JavaBlurProcess implements BlurProcess { _round = round; } + @Nullable @Override public Void call() throws Exception { blurIteration(_src, _w, _h, _radius, _totalCores, _coreIndex, _round); diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/StackBlurManager.java b/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/StackBlurManager.java index a7ecd1e4..6809ee58 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/StackBlurManager.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/bitmapblur/StackBlurManager.java @@ -26,6 +26,8 @@ package com.kabouzeid.gramophone.helper.bitmapblur; import android.graphics.Bitmap; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.util.Util; @@ -46,11 +48,13 @@ public class StackBlurManager { /** * Most recent result of blurring */ + @Nullable private Bitmap _result; /** * Method of blurring */ + @NonNull private final BlurProcess _blurProcess; /** @@ -58,7 +62,7 @@ public class StackBlurManager { * * @param image The image that will be analysed */ - public StackBlurManager(Bitmap image) { + public StackBlurManager(@NonNull Bitmap image) { _image = Util.getResizedBitmap(image, 500, 500, false); _blurProcess = new JavaBlurProcess(); } @@ -68,6 +72,7 @@ public class StackBlurManager { * * @param radius */ + @Nullable public Bitmap process(int radius) { _result = _blurProcess.blur(_image, radius); return _result; @@ -78,6 +83,7 @@ public class StackBlurManager { * * @return blurred image */ + @Nullable public Bitmap returnBlurredImage() { return _result; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/imageloader/PhonographImageDownloader.java b/app/src/main/java/com/kabouzeid/gramophone/imageloader/PhonographImageDownloader.java index 4fe539f4..1bd5c89e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/imageloader/PhonographImageDownloader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/imageloader/PhonographImageDownloader.java @@ -2,6 +2,8 @@ package com.kabouzeid.gramophone.imageloader; import android.content.Context; import android.graphics.Bitmap; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.loader.AlbumSongLoader; import com.kabouzeid.gramophone.model.Song; @@ -24,12 +26,13 @@ public class PhonographImageDownloader extends BaseImageDownloader { public static final String SCHEME_ALBUM = "album://"; public static final String SCHEME_SONG = "song://"; - public PhonographImageDownloader(Context context) { + public PhonographImageDownloader(@NonNull Context context) { super(context); } + @Nullable @Override - protected InputStream getStreamFromOtherSource(String imageUri, Object extra) throws IOException { + protected InputStream getStreamFromOtherSource(@NonNull String imageUri, Object extra) throws IOException { if (imageUri.startsWith(SCHEME_ALBUM)) { return getStreamFromAlbum(imageUri, extra); } else if (imageUri.startsWith(SCHEME_SONG)) { @@ -39,7 +42,8 @@ public class PhonographImageDownloader extends BaseImageDownloader { } } - protected InputStream getStreamFromAlbum(String imageUri, Object extra) throws IOException { + @Nullable + protected InputStream getStreamFromAlbum(@NonNull String imageUri, Object extra) throws IOException { int albumId = Integer.valueOf(imageUri.substring(SCHEME_ALBUM.length())); if (PreferenceUtils.getInstance(context).ignoreMediaStoreArtwork()) { @@ -55,7 +59,8 @@ public class PhonographImageDownloader extends BaseImageDownloader { return getStream(MusicUtil.getAlbumArtUri(albumId).toString(), extra); } - protected InputStream getStreamFromSong(String imageUri, Object extra) throws IOException { + @Nullable + protected InputStream getStreamFromSong(@NonNull String imageUri, Object extra) throws IOException { String[] data = imageUri.split("#", 2); if (PreferenceUtils.getInstance(context).ignoreMediaStoreArtwork()) { @@ -70,7 +75,8 @@ public class PhonographImageDownloader extends BaseImageDownloader { return getStream(MusicUtil.getAlbumArtUri(id).toString(), extra); } - private static ByteArrayInputStream getBitmapInputStream(Bitmap bitmap) { + @NonNull + private static ByteArrayInputStream getBitmapInputStream(@NonNull Bitmap bitmap) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); return new ByteArrayInputStream(bos.toByteArray()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/LastFMRestClient.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/LastFMRestClient.java index 7992a065..f38f744c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/LastFMRestClient.java +++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/LastFMRestClient.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.lastfm.rest; import android.content.Context; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.lastfm.rest.service.LastFMService; import com.squareup.okhttp.Cache; @@ -20,7 +21,7 @@ public class LastFMRestClient { private LastFMService apiService; - public LastFMRestClient(Context context) { + public LastFMRestClient(@NonNull Context context) { OkHttpClient okHttpClient = new OkHttpClient(); File cacheDir = new File(context.getCacheDir().getAbsolutePath(), "/okhttp-lastfm/"); @@ -33,7 +34,7 @@ public class LastFMRestClient { .setClient(new OkClient(okHttpClient)) .setRequestInterceptor(new RequestInterceptor() { @Override - public void intercept(RequestInterceptor.RequestFacade request) { + public void intercept(@NonNull RequestInterceptor.RequestFacade request) { request.addHeader("Cache-Control", String.format("max-age=%d, max-stale=%d", 31536000, 31536000)); } }) 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 55d8611f..dbc51ec4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumLoader.java @@ -7,6 +7,8 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AlbumColumns; import android.provider.MediaStore.Audio.AudioColumns; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -18,22 +20,26 @@ import java.util.ArrayList; */ public class AlbumLoader { - public static ArrayList getAllAlbums(final Context context) { + @NonNull + public static ArrayList getAllAlbums(@NonNull final Context context) { Cursor cursor = makeAlbumCursor(context, null, null); return getAlbums(cursor); } - public static ArrayList getAlbums(final Context context, String query) { + @NonNull + public static ArrayList getAlbums(@NonNull final Context context, String query) { Cursor cursor = makeAlbumCursor(context, AlbumColumns.ALBUM + " LIKE ?", new String[]{"%" + query + "%"}); return getAlbums(cursor); } - public static Album getAlbum(final Context context, int albumId) { + @NonNull + public static Album getAlbum(@NonNull final Context context, int albumId) { Cursor cursor = makeAlbumCursor(context, BaseColumns._ID + "=?", new String[]{String.valueOf(albumId)}); return getAlbum(cursor); } - public static ArrayList getAlbums(final Cursor cursor) { + @NonNull + public static ArrayList getAlbums(@Nullable final Cursor cursor) { ArrayList albums = new ArrayList<>(); if (cursor != null && cursor.moveToFirst()) { do { @@ -46,7 +52,8 @@ public class AlbumLoader { return albums; } - public static Album getAlbum(final Cursor cursor) { + @NonNull + public static Album getAlbum(@Nullable final Cursor cursor) { Album album = new Album(); if (cursor != null && cursor.moveToFirst()) { album = getAlbumFromCursorImpl(cursor); @@ -58,7 +65,8 @@ public class AlbumLoader { return album; } - private static Album getAlbumFromCursorImpl(final Cursor cursor) { + @NonNull + private static Album getAlbumFromCursorImpl(@NonNull final Cursor cursor) { final int id = cursor.getInt(0); final String albumName = cursor.getString(1); final String artist = cursor.getString(2); @@ -69,15 +77,15 @@ public class AlbumLoader { return new Album(id, albumName, artist, artistId, songCount, year); } - public static Cursor makeAlbumCursor(final Context context, final String selection, final String[] values) { + public static Cursor makeAlbumCursor(@NonNull final Context context, final String selection, final String[] values) { return makeAlbumCursor(context, selection, values, PreferenceUtils.getInstance(context).getAlbumSortOrder()); } - public static Cursor makeAlbumCursor(final Context context, final String selection, final String[] values, final String sortOrder) { + public static Cursor makeAlbumCursor(@NonNull final Context context, final String selection, final String[] values, final String sortOrder) { return makeAlbumCursor(context, MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, selection, values, sortOrder); } - public static Cursor makeAlbumCursor(final Context context, final Uri contentUri, final String selection, final String[] values, final String sortOrder) { + public static Cursor makeAlbumCursor(@NonNull final Context context, @NonNull final Uri contentUri, final String selection, final String[] values, final String sortOrder) { return context.getContentResolver().query(contentUri, new String[]{ /* 0 */ diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java index a2930b08..d34ad61f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/AlbumSongLoader.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -14,11 +15,12 @@ import java.util.ArrayList; */ public class AlbumSongLoader { - public static ArrayList getAlbumSongList(final Context context, final int albumId) { + @NonNull + public static ArrayList getAlbumSongList(@NonNull final Context context, final int albumId) { return SongLoader.getSongs(makeAlbumSongCursor(context, albumId)); } - public static Cursor makeAlbumSongCursor(final Context context, final int albumId) { + public static Cursor makeAlbumSongCursor(@NonNull final Context context, final int albumId) { return SongLoader.makeSongCursor( context, MediaStore.Audio.AudioColumns.ALBUM_ID + "=?", 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 16d4f5f6..daf5b57d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistAlbumLoader.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -14,11 +15,12 @@ import java.util.ArrayList; */ public class ArtistAlbumLoader { - public static ArrayList getArtistAlbumList(final Context context, final int artistId) { + @NonNull + public static ArrayList getArtistAlbumList(@NonNull final Context context, final int artistId) { return AlbumLoader.getAlbums(makeArtistAlbumCursor(context, artistId)); } - public static Cursor makeArtistAlbumCursor(final Context context, final int artistId) { + public static Cursor makeArtistAlbumCursor(@NonNull final Context context, final int artistId) { return AlbumLoader.makeAlbumCursor(context, MediaStore.Audio.Artists.Albums.getContentUri("external", artistId), null, diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java index 408ca018..4b78c631 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistLoader.java @@ -5,6 +5,8 @@ import android.database.Cursor; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.ArtistColumns; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.model.Artist; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -16,22 +18,26 @@ import java.util.ArrayList; */ public class ArtistLoader { - public static ArrayList getAllArtists(Context context) { + @NonNull + public static ArrayList getAllArtists(@NonNull Context context) { Cursor cursor = makeArtistCursor(context, null, null); return getArtists(cursor); } - public static ArrayList getArtists(Context context, String query) { + @NonNull + public static ArrayList getArtists(@NonNull Context context, String query) { Cursor cursor = makeArtistCursor(context, ArtistColumns.ARTIST + " LIKE ?", new String[]{"%" + query + "%"}); return getArtists(cursor); } - public static Artist getArtist(Context context, int artistId) { + @NonNull + public static Artist getArtist(@NonNull Context context, int artistId) { Cursor cursor = makeArtistCursor(context, BaseColumns._ID + "=?", new String[]{String.valueOf(artistId)}); return getArtist(cursor); } - public static ArrayList getArtists(Cursor cursor) { + @NonNull + public static ArrayList getArtists(@Nullable Cursor cursor) { ArrayList artists = new ArrayList<>(); if (cursor != null && cursor.moveToFirst()) { do { @@ -45,7 +51,8 @@ public class ArtistLoader { return artists; } - public static Artist getArtist(Cursor cursor) { + @NonNull + public static Artist getArtist(@Nullable Cursor cursor) { Artist artist = new Artist(); if (cursor != null && cursor.moveToFirst()) { artist = getArtistFromCursorImpl(cursor); @@ -57,7 +64,8 @@ public class ArtistLoader { return artist; } - private static Artist getArtistFromCursorImpl(Cursor cursor) { + @NonNull + private static Artist getArtistFromCursorImpl(@NonNull Cursor cursor) { final int id = cursor.getInt(0); final String artistName = cursor.getString(1); final int albumCount = cursor.getInt(2); @@ -66,7 +74,7 @@ public class ArtistLoader { return new Artist(id, artistName, albumCount, songCount); } - public static Cursor makeArtistCursor(final Context context, final String selection, final String[] values) { + public static Cursor makeArtistCursor(@NonNull final Context context, final String selection, final String[] values) { return context.getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, new String[]{ /* 0 */ diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java index 9555c4ab..deaa703b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/ArtistSongLoader.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -14,11 +15,12 @@ import java.util.ArrayList; */ public class ArtistSongLoader { - public static ArrayList getArtistSongList(final Context context, final int artistId) { + @NonNull + public static ArrayList getArtistSongList(@NonNull final Context context, final int artistId) { return SongLoader.getSongs(makeArtistSongCursor(context, artistId)); } - public static Cursor makeArtistSongCursor(final Context context, final int artistId) { + public static Cursor makeArtistSongCursor(@NonNull final Context context, final int artistId) { return SongLoader.makeSongCursor( context, MediaStore.Audio.AudioColumns.ARTIST_ID + "=?", diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/LastAddedLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/LastAddedLoader.java index f90e0d14..0070f0c8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/LastAddedLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/LastAddedLoader.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -11,11 +12,12 @@ import java.util.ArrayList; public class LastAddedLoader { - public static ArrayList getLastAddedSongs(Context context) { + @NonNull + public static ArrayList getLastAddedSongs(@NonNull Context context) { return SongLoader.getSongs(makeLastAddedCursor(context)); } - public static Cursor makeLastAddedCursor(final Context context) { + public static Cursor makeLastAddedCursor(@NonNull final Context context) { long fourWeeksAgo = (System.currentTimeMillis() / 1000) - (4 * 3600 * 24 * 7); // possible saved timestamp caused by user "clearing" the last added playlist long cutoff = PreferenceUtils.getInstance(context).getLastAddedCutOffTimestamp() / 1000; diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistLoader.java index c6a255dc..69397cc2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistLoader.java @@ -5,6 +5,8 @@ import android.database.Cursor; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.PlaylistsColumns; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.model.Playlist; @@ -13,11 +15,13 @@ import java.util.List; public class PlaylistLoader { - public static List getAllPlaylists(final Context context) { + @NonNull + public static List getAllPlaylists(@NonNull final Context context) { return getAllPlaylists(makePlaylistCursor(context, null, null)); } - public static Playlist getPlaylist(final Context context, final int playlistId) { + @NonNull + public static Playlist getPlaylist(@NonNull final Context context, final int playlistId) { return getPlaylist(makePlaylistCursor( context, BaseColumns._ID + "=?", @@ -27,7 +31,8 @@ public class PlaylistLoader { )); } - public static Playlist getPlaylist(final Context context, final String playlistName) { + @NonNull + public static Playlist getPlaylist(@NonNull final Context context, final String playlistName) { return getPlaylist(makePlaylistCursor( context, PlaylistsColumns.NAME + "=?", @@ -37,7 +42,8 @@ public class PlaylistLoader { )); } - public static Playlist getPlaylist(final Cursor cursor) { + @NonNull + public static Playlist getPlaylist(@Nullable final Cursor cursor) { Playlist playlist = new Playlist(); if (cursor != null && cursor.moveToFirst()) { @@ -48,7 +54,8 @@ public class PlaylistLoader { return playlist; } - public static List getAllPlaylists(final Cursor cursor) { + @NonNull + public static List getAllPlaylists(@Nullable final Cursor cursor) { List playlists = new ArrayList<>(); if (cursor != null && cursor.moveToFirst()) { @@ -61,13 +68,14 @@ public class PlaylistLoader { return playlists; } - private static Playlist getPlaylistFromCursorImpl(final Cursor cursor) { + @NonNull + private static Playlist getPlaylistFromCursorImpl(@NonNull final Cursor cursor) { final int id = cursor.getInt(0); final String name = cursor.getString(1); return new Playlist(id, name); } - public static Cursor makePlaylistCursor(final Context context, final String selection, final String[] values) { + public static Cursor makePlaylistCursor(@NonNull final Context context, final String selection, final String[] values) { return context.getContentResolver().query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[]{ /* 0 */ 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 63b7877f..f85d8ce3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/PlaylistSongLoader.java @@ -4,6 +4,7 @@ import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AudioColumns; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.model.PlaylistSong; @@ -11,7 +12,8 @@ import java.util.ArrayList; public class PlaylistSongLoader { - public static ArrayList getPlaylistSongList(final Context context, final int playlistId) { + @NonNull + public static ArrayList getPlaylistSongList(@NonNull final Context context, final int playlistId) { ArrayList songs = new ArrayList<>(); Cursor cursor = makePlaylistSongCursor(context, playlistId); @@ -26,7 +28,8 @@ public class PlaylistSongLoader { return songs; } - private static PlaylistSong getPlaylistSongFromCursorImpl(Cursor cursor) { + @NonNull + private static PlaylistSong getPlaylistSongFromCursorImpl(@NonNull Cursor cursor) { final int id = cursor.getInt(0); final String songName = cursor.getString(1); final String artist = cursor.getString(2); @@ -42,7 +45,7 @@ public class PlaylistSongLoader { return new PlaylistSong(id, albumId, artistId, songName, artist, album, duration, trackNumber, data, playlistId, idInPlaylist); } - public static Cursor makePlaylistSongCursor(final Context context, final int playlistId) { + public static Cursor makePlaylistSongCursor(@NonNull final Context context, final int playlistId) { return context.getContentResolver().query( MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId), new String[]{ 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 30ff7fe1..03facfe2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java @@ -5,6 +5,8 @@ import android.database.Cursor; import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AudioColumns; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.util.PreferenceUtils; @@ -17,22 +19,26 @@ import java.util.ArrayList; public class SongLoader { protected static final String BASE_SELECTION = AudioColumns.IS_MUSIC + "=1" + " AND " + AudioColumns.TITLE + " != ''"; - public static ArrayList getAllSongs(Context context) { + @NonNull + public static ArrayList getAllSongs(@NonNull Context context) { Cursor cursor = makeSongCursor(context, null, null); return getSongs(cursor); } - public static ArrayList getSongs(final Context context, final String query) { + @NonNull + public static ArrayList getSongs(@NonNull final Context context, final String query) { Cursor cursor = makeSongCursor(context, AudioColumns.TITLE + " LIKE ?", new String[]{"%" + query + "%"}); return getSongs(cursor); } - public static Song getSong(final Context context, final int queryId) { + @NonNull + public static Song getSong(@NonNull final Context context, final int queryId) { Cursor cursor = makeSongCursor(context, AudioColumns._ID + "=?", new String[]{String.valueOf(queryId)}); return getSong(cursor); } - public static ArrayList getSongs(final Cursor cursor) { + @NonNull + public static ArrayList getSongs(@Nullable final Cursor cursor) { ArrayList songs = new ArrayList<>(); if (cursor != null && cursor.moveToFirst()) { do { @@ -45,7 +51,8 @@ public class SongLoader { return songs; } - public static Song getSong(Cursor cursor) { + @NonNull + public static Song getSong(@Nullable Cursor cursor) { Song song = new Song(); if (cursor != null && cursor.moveToFirst()) { song = getSongFromCursorImpl(cursor); @@ -56,7 +63,8 @@ public class SongLoader { return song; } - private static Song getSongFromCursorImpl(Cursor cursor) { + @NonNull + private static Song getSongFromCursorImpl(@NonNull Cursor cursor) { final int id = cursor.getInt(0); final String songName = cursor.getString(1); final String artist = cursor.getString(2); @@ -69,11 +77,11 @@ public class SongLoader { return new Song(id, albumId, artistId, songName, artist, album, duration, trackNumber, data); } - public static Cursor makeSongCursor(final Context context, final String selection, final String[] values) { + public static Cursor makeSongCursor(@NonNull final Context context, final String selection, final String[] values) { return makeSongCursor(context, selection, values, PreferenceUtils.getInstance(context).getSongSortOrder()); } - public static Cursor makeSongCursor(final Context context, final String selection, final String[] values, final String sortOrder) { + public static Cursor makeSongCursor(@NonNull final Context context, @Nullable final String selection, final String[] values, final String sortOrder) { String baseSelection = BASE_SELECTION; if (selection != null && !selection.trim().equals("")) { baseSelection += " AND " + selection; diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SortedCursor.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SortedCursor.java index 88647710..abbf619a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SortedCursor.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SortedCursor.java @@ -17,6 +17,8 @@ package com.kabouzeid.gramophone.loader; import android.database.AbstractCursor; import android.database.Cursor; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; @@ -30,6 +32,7 @@ import java.util.List; */ public class SortedCursor extends AbstractCursor { // cursor to wrap + @Nullable private final Cursor mCursor; // the map of external indices to internal indices private ArrayList mOrderedPositions; @@ -45,8 +48,8 @@ public class SortedCursor extends AbstractCursor { * @param order the list of unique ids in sorted order to display * @param columnName the column name of the id to look up in the internal cursor */ - public SortedCursor(final Cursor cursor, final long[] order, final String columnName, - final List extraData) { + public SortedCursor(@Nullable final Cursor cursor, final long[] order, final String columnName, + final List extraData) { if (cursor == null) { throw new IllegalArgumentException("Non-null cursor is needed"); } @@ -63,14 +66,15 @@ public class SortedCursor extends AbstractCursor { * @param extraData Extra data we want to add to the cursor * @return returns the ids that aren't found in the underlying cursor */ - private ArrayList buildCursorPositionMapping(final long[] order, - final String columnName, final List extraData) { - ArrayList missingIds = new ArrayList(); + @NonNull + private ArrayList buildCursorPositionMapping(@Nullable final long[] order, + final String columnName, @Nullable final List extraData) { + ArrayList missingIds = new ArrayList<>(); - mOrderedPositions = new ArrayList(mCursor.getCount()); - mExtraData = new ArrayList(); + mOrderedPositions = new ArrayList<>(mCursor.getCount()); + mExtraData = new ArrayList<>(); - mMapCursorPositions = new HashMap(mCursor.getCount()); + mMapCursorPositions = new HashMap<>(mCursor.getCount()); final int idPosition = mCursor.getColumnIndex(columnName); if (mCursor.moveToFirst()) { @@ -110,6 +114,7 @@ public class SortedCursor extends AbstractCursor { /** * @return the list of ids that were in the underlying cursor but not part of the ordered list */ + @NonNull public Collection getExtraIds() { return mMapCursorPositions.keySet(); } @@ -117,6 +122,7 @@ public class SortedCursor extends AbstractCursor { /** * @return the extra object data that was passed in to be attached to the current row */ + @Nullable public Object getExtraData() { int position = getPosition(); return position < mExtraData.size() ? mExtraData.get(position) : null; diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/TopAndRecentlyPlayedTracksLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/TopAndRecentlyPlayedTracksLoader.java index 811a4171..258abb34 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/TopAndRecentlyPlayedTracksLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/TopAndRecentlyPlayedTracksLoader.java @@ -19,6 +19,8 @@ package com.kabouzeid.gramophone.loader; import android.content.Context; import android.database.Cursor; import android.provider.BaseColumns; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.provider.RecentlyPlayedStore; @@ -29,15 +31,18 @@ import java.util.ArrayList; public class TopAndRecentlyPlayedTracksLoader { public static final int NUMBER_OF_TOP_TRACKS = 99; - public static ArrayList getRecentlyPlayedTracks(Context context) { + @NonNull + public static ArrayList getRecentlyPlayedTracks(@NonNull Context context) { return SongLoader.getSongs(makeRecentTracksCursorAndClearUpDatabase(context)); } - public static ArrayList getTopTracks(Context context) { + @NonNull + public static ArrayList getTopTracks(@NonNull Context context) { return SongLoader.getSongs(makeTopTracksCursorAndClearUpDatabase(context)); } - public static Cursor makeRecentTracksCursorAndClearUpDatabase(final Context context) { + @Nullable + public static Cursor makeRecentTracksCursorAndClearUpDatabase(@NonNull final Context context) { SortedCursor retCursor = makeRecentTracksCursorImpl(context); // clean up the databases with any ids not found @@ -52,7 +57,8 @@ public class TopAndRecentlyPlayedTracksLoader { return retCursor; } - public static Cursor makeTopTracksCursorAndClearUpDatabase(final Context context) { + @Nullable + public static Cursor makeTopTracksCursorAndClearUpDatabase(@NonNull final Context context) { SortedCursor retCursor = makeTopTracksCursorImpl(context); // clean up the databases with any ids not found @@ -67,7 +73,8 @@ public class TopAndRecentlyPlayedTracksLoader { return retCursor; } - private static SortedCursor makeRecentTracksCursorImpl(final Context context) { + @Nullable + private static SortedCursor makeRecentTracksCursorImpl(@NonNull final Context context) { // first get the top results ids from the internal database Cursor songs = RecentlyPlayedStore.getInstance(context).queryRecentIds(); @@ -81,7 +88,8 @@ public class TopAndRecentlyPlayedTracksLoader { } } - private static SortedCursor makeTopTracksCursorImpl(final Context context) { + @Nullable + private static SortedCursor makeTopTracksCursorImpl(@NonNull final Context context) { // first get the top results ids from the internal database Cursor songs = SongPlayCountStore.getInstance(context).getTopPlayedResults(NUMBER_OF_TOP_TRACKS); @@ -95,7 +103,8 @@ public class TopAndRecentlyPlayedTracksLoader { } } - private static SortedCursor makeSortedCursor(final Context context, final Cursor cursor, + @Nullable + private static SortedCursor makeSortedCursor(@NonNull final Context context, @Nullable final Cursor cursor, final int idColumn) { if (cursor != null && cursor.moveToFirst()) { // create the list of ids to select against diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java b/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java index 1dae9de7..aae89882 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java +++ b/app/src/main/java/com/kabouzeid/gramophone/misc/DragSortRecycler.java @@ -26,6 +26,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.Log; @@ -52,6 +53,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec private float autoScrollWindow = 0.1f; private float autoScrollSpeed = 0.5f; + @Nullable private BitmapDrawable floatingItem; private Rect floatingItemStatingBounds; private Rect floatingItemBounds; @@ -85,6 +87,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec Log.d(TAG, log); } + @NonNull public RecyclerView.OnScrollListener getScrollListener() { return scrollListener; } @@ -128,7 +131,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec } @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView rv, RecyclerView.State state) { + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView rv, RecyclerView.State state) { super.getItemOffsets(outRect, view, rv, state); debugLog("getItemOffsets"); @@ -195,7 +198,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec * This *seems* to work, another method would be to use * getItemOffsets, but I think that could miss items?.. */ - private int getNewPostion(RecyclerView rv) { + private int getNewPostion(@NonNull RecyclerView rv) { int itemsOnScreen = rv.getLayoutManager().getChildCount(); float floatMiddleY = floatingItemBounds.top + floatingItemBounds.height() / 2; @@ -242,7 +245,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec @Override - public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { + public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { debugLog("onInterceptTouchEvent"); //if (e.getAction() == MotionEvent.ACTION_DOWN) @@ -315,7 +318,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec } @Override - public void onTouchEvent(RecyclerView rv, MotionEvent e) { + public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { debugLog("onTouchEvent"); if ((e.getAction() == MotionEvent.ACTION_UP) || @@ -388,7 +391,7 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec final Paint bgColor = new Paint(); @Override - public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { + public void onDrawOver(@NonNull Canvas c, RecyclerView parent, RecyclerView.State state) { if (floatingItem != null) { floatingItem.setAlpha((int) (255 * floatingItemAlpha)); bgColor.setColor(floatingItemBgColor); @@ -410,7 +413,8 @@ public class DragSortRecycler extends RecyclerView.ItemDecoration implements Rec return true; } - private BitmapDrawable createFloatingBitmap(View v) { + @NonNull + private BitmapDrawable createFloatingBitmap(@NonNull View v) { floatingItemStatingBounds = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); floatingItemBounds = new Rect(floatingItemStatingBounds); diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java index 5ebf3844..440d47b4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.model; +import android.support.annotation.Nullable; import android.text.TextUtils; /** @@ -46,7 +47,7 @@ public class Album { } @Override - public boolean equals(final Object obj) { + public boolean equals(@Nullable final Object obj) { if (this == obj) { return true; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java index 51a1eba7..238d0399 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.model; +import android.support.annotation.Nullable; import android.text.TextUtils; /** @@ -37,7 +38,7 @@ public class Artist { } @Override - public boolean equals(final Object obj) { + public boolean equals(@Nullable final Object obj) { if (this == obj) { return true; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java index dedc8b2f..3f52cc22 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.model; +import android.support.annotation.Nullable; import android.text.TextUtils; import java.io.Serializable; @@ -34,7 +35,7 @@ public class Playlist implements Serializable { } @Override - public boolean equals(final Object obj) { + public boolean equals(@Nullable final Object obj) { if (this == obj) { return true; } 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 f956c59d..beeeb6ed 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,6 @@ package com.kabouzeid.gramophone.model; +import android.support.annotation.Nullable; import android.text.TextUtils; import java.io.Serializable; @@ -59,7 +60,7 @@ public class Song implements Serializable { } @Override - public boolean equals(final Object obj) { + public boolean equals(@Nullable final Object obj) { if (this == obj) { return true; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java index 6984fd88..2789b39e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java @@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; import android.support.annotation.DrawableRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; @@ -32,6 +33,7 @@ public abstract class AbsSmartPlaylist extends Playlist { this.iconRes = R.drawable.ic_queue_music_white_24dp; } + @Nullable public SmartPlaylistSongAdapter createAdapter(AppCompatActivity activity, @Nullable CabHolder cabHolder) { return new SmartPlaylistSongAdapter(activity, this, cabHolder); } @@ -49,7 +51,7 @@ public abstract class AbsSmartPlaylist extends Playlist { } @Override - public boolean equals(final Object obj) { + public boolean equals(@NonNull final Object obj) { if (super.equals(obj)) { if (getClass() != obj.getClass()) { return false; diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java index 6cadfe2a..8a778f29 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -16,17 +17,18 @@ import java.util.ArrayList; */ public class LastAddedPlaylist extends AbsSmartPlaylist { - public LastAddedPlaylist(Context context) { + public LastAddedPlaylist(@NonNull Context context) { super(context.getString(R.string.last_added), R.drawable.ic_queue_white_24dp); } + @NonNull @Override - public ArrayList getSongs(Context context) { + public ArrayList getSongs(@NonNull Context context) { return LastAddedLoader.getLastAddedSongs(context); } @Override - public void clear(Context context) { + public void clear(@NonNull Context context) { PreferenceUtils.getInstance(context).setLastAddedCutoffTimestamp(System.currentTimeMillis()); App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java index 11433fc6..78b29b7f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -16,17 +17,18 @@ import java.util.ArrayList; */ public class MyTopTracksPlaylist extends AbsSmartPlaylist { - public MyTopTracksPlaylist(Context context) { + public MyTopTracksPlaylist(@NonNull Context context) { super(context.getString(R.string.my_top_tracks), R.drawable.ic_trending_up_white_24dp); } + @NonNull @Override - public ArrayList getSongs(Context context) { + public ArrayList getSongs(@NonNull Context context) { return TopAndRecentlyPlayedTracksLoader.getTopTracks(context); } @Override - public void clear(Context context) { + public void clear(@NonNull Context context) { SongPlayCountStore.getInstance(context).clear(); App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java index 46a48d21..86e4d3e0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/RecentlyPlayedPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.support.annotation.NonNull; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; @@ -16,17 +17,18 @@ import java.util.ArrayList; */ public class RecentlyPlayedPlaylist extends AbsSmartPlaylist { - public RecentlyPlayedPlaylist(Context context) { + public RecentlyPlayedPlaylist(@NonNull Context context) { super(context.getString(R.string.recently_played), R.drawable.ic_access_time_white_24dp); } + @NonNull @Override - public ArrayList getSongs(Context context) { + public ArrayList getSongs(@NonNull Context context) { return TopAndRecentlyPlayedTracksLoader.getRecentlyPlayedTracks(context); } @Override - public void clear(Context context) { + public void clear(@NonNull Context context) { RecentlyPlayedStore.getInstance(context).clear(); App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java index 587cc232..053e3de7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java +++ b/app/src/main/java/com/kabouzeid/gramophone/prefs/ColorChooserPreference.java @@ -15,15 +15,15 @@ public class ColorChooserPreference extends Preference { private int color; private int border; - public ColorChooserPreference(Context context, AttributeSet attrs) { + public ColorChooserPreference(@NonNull Context context, @NonNull AttributeSet attrs) { this(context, attrs, 0); } - public ColorChooserPreference(Context context) { + public ColorChooserPreference(@NonNull Context context) { this(context, null, 0); } - public ColorChooserPreference(Context context, AttributeSet attrs, int defStyleAttr) { + public ColorChooserPreference(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setLayoutResource(R.layout.preference_custom); setWidgetLayoutResource(R.layout.preference_color_widget); diff --git a/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java b/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java index 40a2f976..21553c80 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java +++ b/app/src/main/java/com/kabouzeid/gramophone/prefs/DynamicPreferenceCategory.java @@ -17,15 +17,15 @@ import com.kabouzeid.gramophone.R; */ public class DynamicPreferenceCategory extends PreferenceCategory { - public DynamicPreferenceCategory(Context context, AttributeSet attrs) { + public DynamicPreferenceCategory(@NonNull Context context, @NonNull AttributeSet attrs) { this(context, attrs, 0); } - public DynamicPreferenceCategory(Context context) { + public DynamicPreferenceCategory(@NonNull Context context) { this(context, null, 0); } - public DynamicPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) { + public DynamicPreferenceCategory(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setLayoutResource(R.layout.preference_category_custom); setSelectable(false); diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java index 116affdc..154f1b83 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java +++ b/app/src/main/java/com/kabouzeid/gramophone/provider/AlbumJSONStore.java @@ -5,25 +5,29 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; public class AlbumJSONStore extends SQLiteOpenHelper { public static final String DATABASE_NAME = "albums_last_fm.db"; private static final int VERSION = 1; + @Nullable private static AlbumJSONStore sInstance = null; public AlbumJSONStore(final Context context) { super(context, DATABASE_NAME, null, VERSION); } - public static synchronized AlbumJSONStore getInstance(final Context context) { + @Nullable + public static synchronized AlbumJSONStore getInstance(@NonNull final Context context) { if (sInstance == null) { sInstance = new AlbumJSONStore(context.getApplicationContext()); } return sInstance; } - public void addAlbumJSON(final String albumAndArtistName, final String json) { + public void addAlbumJSON(@Nullable final String albumAndArtistName, @Nullable final String json) { if (albumAndArtistName == null || json == null) { return; } @@ -41,7 +45,8 @@ public class AlbumJSONStore extends SQLiteOpenHelper { database.endTransaction(); } - public String getJSONData(final String albumAndArtistName) { + @Nullable + public String getJSONData(@Nullable final String albumAndArtistName) { if (albumAndArtistName == null) { return null; } @@ -68,7 +73,7 @@ public class AlbumJSONStore extends SQLiteOpenHelper { return null; } - public void removeAlbumJSON(final String albumAndArtistName) { + public void removeAlbumJSON(@NonNull final String albumAndArtistName) { final SQLiteDatabase database = getReadableDatabase(); database.delete(AlbumJSONColumns.NAME, AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME + " = ?", new String[]{ albumAndArtistName.trim().toLowerCase() @@ -83,7 +88,7 @@ public class AlbumJSONStore extends SQLiteOpenHelper { } @Override - public void onCreate(final SQLiteDatabase db) { + public void onCreate(@NonNull final SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS " + AlbumJSONColumns.NAME + " (" + AlbumJSONColumns.ALBUM_PLUS_ARTIST_NAME + " TEXT NOT NULL," + AlbumJSONColumns.JSON_DATA + " TEXT NOT NULL);" @@ -92,7 +97,7 @@ public class AlbumJSONStore extends SQLiteOpenHelper { @Override - public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + public void onUpgrade(@NonNull final SQLiteDatabase db, final int oldVersion, final int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + AlbumJSONColumns.NAME); onCreate(db); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java index 86695710..7bfddb9d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java +++ b/app/src/main/java/com/kabouzeid/gramophone/provider/ArtistJSONStore.java @@ -5,25 +5,29 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; public class ArtistJSONStore extends SQLiteOpenHelper { public static final String DATABASE_NAME = "artists_last_fm.db"; private static final int VERSION = 1; + @Nullable private static ArtistJSONStore sInstance = null; public ArtistJSONStore(final Context context) { super(context, DATABASE_NAME, null, VERSION); } - public static synchronized ArtistJSONStore getInstance(final Context context) { + @Nullable + public static synchronized ArtistJSONStore getInstance(@NonNull final Context context) { if (sInstance == null) { sInstance = new ArtistJSONStore(context.getApplicationContext()); } return sInstance; } - public void addArtistJSON(final String artistName, final String json) { + public void addArtistJSON(@Nullable final String artistName, @Nullable final String json) { if (artistName == null || json == null) { return; } @@ -41,7 +45,8 @@ public class ArtistJSONStore extends SQLiteOpenHelper { database.endTransaction(); } - public String getArtistJSON(final String artistName) { + @Nullable + public String getArtistJSON(@Nullable final String artistName) { if (artistName == null) { return null; } @@ -68,7 +73,7 @@ public class ArtistJSONStore extends SQLiteOpenHelper { return null; } - public void removeArtistJSON(final String artistName) { + public void removeArtistJSON(@NonNull final String artistName) { final SQLiteDatabase database = getReadableDatabase(); database.delete(ArtistJSONColumns.NAME, ArtistJSONColumns.ARTIST_NAME + "=?", new String[]{ artistName.trim().toLowerCase() @@ -83,7 +88,7 @@ public class ArtistJSONStore extends SQLiteOpenHelper { } @Override - public void onCreate(final SQLiteDatabase db) { + public void onCreate(@NonNull final SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS " + ArtistJSONColumns.NAME + " (" + ArtistJSONColumns.ARTIST_NAME + " TEXT NOT NULL," + ArtistJSONColumns.JSON_DATA + " TEXT NOT NULL);" @@ -92,7 +97,7 @@ public class ArtistJSONStore extends SQLiteOpenHelper { @Override - public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + public void onUpgrade(@NonNull final SQLiteDatabase db, final int oldVersion, final int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + ArtistJSONColumns.NAME); onCreate(db); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/MusicPlaybackQueueStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/MusicPlaybackQueueStore.java index b27c1d2d..47e33c73 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/MusicPlaybackQueueStore.java +++ b/app/src/main/java/com/kabouzeid/gramophone/provider/MusicPlaybackQueueStore.java @@ -22,6 +22,8 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.provider.BaseColumns; import android.provider.MediaStore.Audio.AudioColumns; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.model.Song; @@ -34,6 +36,7 @@ import java.util.ArrayList; * This keeps track of the music playback and history state of the playback service */ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { + @Nullable private static MusicPlaybackQueueStore sInstance = null; public static final String DATABASE_NAME = "music_playback_state.db"; public static final String PLAYING_QUEUE_TABLE_NAME = "playing_queue"; @@ -50,12 +53,12 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { } @Override - public void onCreate(final SQLiteDatabase db) { + public void onCreate(@NonNull final SQLiteDatabase db) { createTable(db, PLAYING_QUEUE_TABLE_NAME); createTable(db, ORIGINAL_PLAYING_QUEUE_TABLE_NAME); } - private void createTable(final SQLiteDatabase db, final String tableName) { + private void createTable(@NonNull final SQLiteDatabase db, final String tableName) { //noinspection StringBufferReplaceableByString StringBuilder builder = new StringBuilder(); builder.append("CREATE TABLE IF NOT EXISTS "); @@ -93,7 +96,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { } @Override - public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + public void onUpgrade(@NonNull final SQLiteDatabase db, final int oldVersion, final int newVersion) { // not necessary yet db.execSQL("DROP TABLE IF EXISTS " + PLAYING_QUEUE_TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + ORIGINAL_PLAYING_QUEUE_TABLE_NAME); @@ -101,7 +104,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { } @Override - public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + public void onDowngrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { // If we ever have downgrade, drop the table to be safe db.execSQL("DROP TABLE IF EXISTS " + PLAYING_QUEUE_TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + ORIGINAL_PLAYING_QUEUE_TABLE_NAME); @@ -112,14 +115,15 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { * @param context The {@link Context} to use * @return A new instance of this class. */ - public static synchronized MusicPlaybackQueueStore getInstance(final Context context) { + @Nullable + public static synchronized MusicPlaybackQueueStore getInstance(@NonNull final Context context) { if (sInstance == null) { sInstance = new MusicPlaybackQueueStore(context.getApplicationContext()); } return sInstance; } - public synchronized void saveQueues(final ArrayList playingQueue, final ArrayList originalPlayingQueue) { + public synchronized void saveQueues(@NonNull final ArrayList playingQueue, @NonNull final ArrayList originalPlayingQueue) { saveQueue(PLAYING_QUEUE_TABLE_NAME, playingQueue); saveQueue(ORIGINAL_PLAYING_QUEUE_TABLE_NAME, originalPlayingQueue); } @@ -130,7 +134,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { * * @param queue the queue to save */ - private synchronized void saveQueue(final String tableName, final ArrayList queue) { + private synchronized void saveQueue(final String tableName, @NonNull final ArrayList queue) { final SQLiteDatabase database = getWritableDatabase(); database.beginTransaction(); @@ -170,15 +174,18 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper { } } + @NonNull public ArrayList getSavedPlayingQueue() { return getQueue(PLAYING_QUEUE_TABLE_NAME); } + @NonNull public ArrayList getSavedOriginalPlayingQueue() { return getQueue(ORIGINAL_PLAYING_QUEUE_TABLE_NAME); } - private ArrayList getQueue(final String tableName) { + @NonNull + private ArrayList getQueue(@NonNull final String tableName) { Cursor cursor = getReadableDatabase().query(tableName, null, null, null, null, null, null); return SongLoader.getSongs(cursor); diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/RecentlyPlayedStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/RecentlyPlayedStore.java index cbe53a07..23ed9598 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/RecentlyPlayedStore.java +++ b/app/src/main/java/com/kabouzeid/gramophone/provider/RecentlyPlayedStore.java @@ -21,12 +21,15 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; public class RecentlyPlayedStore extends SQLiteOpenHelper { private static final int MAX_ITEMS_IN_DB = 100; public static final String DATABASE_NAME = "recently_played.db"; private static final int VERSION = 1; + @Nullable private static RecentlyPlayedStore sInstance = null; public RecentlyPlayedStore(final Context context) { @@ -34,25 +37,26 @@ public class RecentlyPlayedStore extends SQLiteOpenHelper { } @Override - public void onCreate(final SQLiteDatabase db) { + public void onCreate(@NonNull final SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS " + RecentStoreColumns.NAME + " (" + RecentStoreColumns.ID + " LONG NOT NULL," + RecentStoreColumns.TIME_PLAYED + " LONG NOT NULL);"); } @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + public void onUpgrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + RecentStoreColumns.NAME); onCreate(db); } @Override - public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + public void onDowngrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + RecentStoreColumns.NAME); onCreate(db); } - public static synchronized RecentlyPlayedStore getInstance(final Context context) { + @Nullable + public static synchronized RecentlyPlayedStore getInstance(@NonNull final Context context) { if (sInstance == null) { sInstance = new RecentlyPlayedStore(context.getApplicationContext()); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/SongPlayCountStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/SongPlayCountStore.java index 6dc93922..9d3d19cf 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/SongPlayCountStore.java +++ b/app/src/main/java/com/kabouzeid/gramophone/provider/SongPlayCountStore.java @@ -21,6 +21,8 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; @@ -29,12 +31,14 @@ import android.view.animation.Interpolator; * the top played tracks as well as the playlist images */ public class SongPlayCountStore extends SQLiteOpenHelper { + @Nullable private static SongPlayCountStore sInstance = null; public static final String DATABASE_NAME = "song_play_count.db"; private static final int VERSION = 1; // interpolator curve applied for measuring the curve + @NonNull private static Interpolator sInterpolator = new AccelerateInterpolator(1.5f); // how many weeks worth of playback to track @@ -51,6 +55,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { @SuppressWarnings("FieldCanBeLocal") private static int ONE_WEEK_IN_MS = 1000 * 60 * 60 * 24 * 7; + @NonNull private static String WHERE_ID_EQUALS = SongPlayCountColumns.ID + "=?"; // number of weeks since epoch time @@ -69,7 +74,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { } @Override - public void onCreate(final SQLiteDatabase db) { + public void onCreate(@NonNull final SQLiteDatabase db) { // create the play count table // WARNING: If you change the order of these columns // please update getColumnIndexForWeek @@ -95,13 +100,13 @@ public class SongPlayCountStore extends SQLiteOpenHelper { } @Override - public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + public void onUpgrade(@NonNull final SQLiteDatabase db, final int oldVersion, final int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + SongPlayCountColumns.NAME); onCreate(db); } @Override - public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + public void onDowngrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) { // If we ever have downgrade, drop the table to be safe db.execSQL("DROP TABLE IF EXISTS " + SongPlayCountColumns.NAME); onCreate(db); @@ -111,7 +116,8 @@ public class SongPlayCountStore extends SQLiteOpenHelper { * @param context The {@link Context} to use * @return A new instance of this class. */ - public static synchronized SongPlayCountStore getInstance(final Context context) { + @Nullable + public static synchronized SongPlayCountStore getInstance(@NonNull final Context context) { if (sInstance == null) { sInstance = new SongPlayCountStore(context.getApplicationContext()); } @@ -138,7 +144,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { * @param database a write able database * @param songId the id of the track */ - private void createNewPlayedEntry(final SQLiteDatabase database, final long songId) { + private void createNewPlayedEntry(@NonNull final SQLiteDatabase database, final long songId) { // no row exists, create a new one float newScore = getScoreMultiplierForWeek(0); int newPlayCount = 1; @@ -160,7 +166,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { * @param id the id of the track to bump * @param bumpCount whether to bump the current's week play count by 1 and adjust the score */ - private void updateExistingRow(final SQLiteDatabase database, final long id, boolean bumpCount) { + private void updateExistingRow(@NonNull final SQLiteDatabase database, final long id, boolean bumpCount) { String stringId = String.valueOf(id); // begin the transaction @@ -329,7 +335,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { * @param database database to use * @param stringId id to delete */ - private void deleteEntry(final SQLiteDatabase database, final String stringId) { + private void deleteEntry(@NonNull final SQLiteDatabase database, final String stringId) { database.delete(SongPlayCountColumns.NAME, WHERE_ID_EQUALS, new String[]{stringId}); } @@ -340,7 +346,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { * where playCounts[N] is the # of times it was played N weeks ago * @return the score */ - private static float calculateScore(final int[] playCounts) { + private static float calculateScore(@Nullable final int[] playCounts) { if (playCounts == null) { return 0; } @@ -359,6 +365,7 @@ public class SongPlayCountStore extends SQLiteOpenHelper { * @param week number * @return the column name */ + @NonNull private static String getColumnNameForWeek(final int week) { return SongPlayCountColumns.WEEK_PLAY_COUNT + String.valueOf(week); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java b/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java index 96b618cc..d3587d55 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MediaButtonIntentReceiver.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.support.annotation.NonNull; import android.view.KeyEvent; public class MediaButtonIntentReceiver extends BroadcastReceiver { @@ -12,7 +13,7 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver { private static long mLastClickTime = 0; @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(@NonNull Context context, @NonNull Intent intent) { if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) { final KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event == null) diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java b/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java index ad3b84cd..f268fcd5 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MultiPlayer.java @@ -7,6 +7,8 @@ import android.media.audiofx.AudioEffect; import android.net.Uri; import android.os.Handler; import android.os.PowerManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.util.Log; import android.widget.Toast; @@ -22,9 +24,12 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { public static final String TAG = MultiPlayer.class.getSimpleName(); + @NonNull private final WeakReference mService; + @Nullable private MediaPlayer mCurrentMediaPlayer = new MediaPlayer(); + @Nullable private MediaPlayer mNextMediaPlayer; private Handler mHandler; @@ -45,7 +50,7 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener, * @return True if the player has been prepared and is * ready to play, false otherwise */ - public boolean setDataSource(final String path) { + public boolean setDataSource(@NonNull final String path) { mIsInitialized = false; mIsInitialized = setDataSourceImpl(mCurrentMediaPlayer, path); if (mIsInitialized) { @@ -61,7 +66,7 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener, * @return True if the player has been prepared and is * ready to play, false otherwise */ - private boolean setDataSourceImpl(final MediaPlayer player, final String path) { + private boolean setDataSourceImpl(@NonNull final MediaPlayer player, @NonNull final String path) { MusicService service = mService.get(); if (service == null) { return false; @@ -95,7 +100,7 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener, * @param path The path of the file, or the http/rtsp URL of the stream * you want to play */ - public void setNextDataSource(final String path) { + public void setNextDataSource(@Nullable final String path) { MusicService service = mService.get(); if (service == null) { return; @@ -122,7 +127,7 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener, if (setDataSourceImpl(mNextMediaPlayer, path)) { try { mCurrentMediaPlayer.setNextMediaPlayer(mNextMediaPlayer); - } catch (IllegalArgumentException | IllegalStateException e) { + } catch (@NonNull IllegalArgumentException | IllegalStateException e) { Log.e(TAG, "setNextDataSource: setNextMediaPlayer()", e); if (mNextMediaPlayer != null) { mNextMediaPlayer.release(); @@ -269,7 +274,7 @@ public class MultiPlayer implements MediaPlayer.OnErrorListener, try { mCurrentMediaPlayer.setAudioSessionId(sessionId); return true; - } catch (IllegalArgumentException | IllegalStateException e) { + } catch (@NonNull IllegalArgumentException | IllegalStateException e) { return false; } } 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 6dbe0fa3..5c2110ba 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -23,6 +23,8 @@ import android.os.Message; import android.os.PowerManager; import android.os.Process; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.View; import android.widget.Toast; @@ -95,8 +97,11 @@ public class MusicService extends Service { private final IBinder musicBind = new MusicBinder(); + @Nullable private MultiPlayer player; + @Nullable private ArrayList playingQueue; + @Nullable private ArrayList originalPlayingQueue; private int position = -1; private int nextPosition = -1; @@ -113,14 +118,16 @@ public class MusicService extends Service { private QueueSaveHandler queueSaveHandler; private HandlerThread musicPlayerHandlerThread; private HandlerThread queueSaveHandlerThread; + @Nullable private RecentlyPlayedStore recentlyPlayedStore; + @Nullable private SongPlayCountStore songPlayCountStore; private boolean notNotifiedMetaChangedForCurrentTrack; private boolean isServiceInUse; private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, @NonNull Intent intent) { if (intent.getAction().equals(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) { pause(); } @@ -129,7 +136,7 @@ public class MusicService extends Service { private final BroadcastReceiver preferencesChangedReceiver = new BroadcastReceiver() { @Override - public void onReceive(Context context, Intent intent) { + public void onReceive(Context context, @NonNull Intent intent) { switch (intent.getAction()) { case SETTING_GAPLESS_PLAYBACK_CHANGED: setGaplessPlaybackEnabled(intent.getBooleanExtra(SETTING_BOOLEAN_EXTRA, false)); @@ -225,7 +232,7 @@ public class MusicService extends Service { } @Override - public int onStartCommand(Intent intent, int flags, int startId) { + public int onStartCommand(@Nullable Intent intent, int flags, int startId) { if (intent != null) { if (intent.getAction() != null) { String action = intent.getAction(); @@ -438,7 +445,7 @@ public class MusicService extends Service { final String currentAlbumArtUri = MusicUtil.getSongImageLoaderString(song); ImageLoader.getInstance().displayImage(currentAlbumArtUri, new NonViewAware(new ImageSize(-1, -1), ViewScaleType.CROP), new SimpleImageLoadingListener() { @Override - public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) { if (currentAlbumArtUri.equals(imageUri)) { if (loadedImage != null) { // RemoteControlClient wants to recycle the bitmaps thrown at it, so we need @@ -495,7 +502,7 @@ public class MusicService extends Service { WidgetMedium.updateWidgets(this, getCurrentSong(), isPlaying()); } - private static String getTrackUri(Song song) { + private static String getTrackUri(@NonNull Song song) { return ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, song.id).toString(); } @@ -530,6 +537,7 @@ public class MusicService extends Service { return getPosition() == getPlayingQueue().size() - 1; } + @Nullable public ArrayList getPlayingQueue() { return playingQueue; } @@ -553,7 +561,7 @@ public class MusicService extends Service { } } - public void openAndPlayQueue(final ArrayList playingQueue, final int startPosition, final boolean startPlaying) { + public void openAndPlayQueue(@Nullable final ArrayList playingQueue, final int startPosition, final boolean startPlaying) { if (playingQueue != null && !playingQueue.isEmpty() && startPosition >= 0 && startPosition < playingQueue.size()) { originalPlayingQueue = playingQueue; this.playingQueue = new ArrayList<>(originalPlayingQueue); @@ -618,7 +626,7 @@ public class MusicService extends Service { saveState(); } - public void removeSong(Song song) { + public void removeSong(@NonNull Song song) { for (int i = 0; i < playingQueue.size(); i++) { if (playingQueue.get(i).id == song.id) playingQueue.remove(i); } @@ -796,7 +804,7 @@ public class MusicService extends Service { notifyChange(SHUFFLE_MODE_CHANGED); } - private void notifyChange(final String what) { + private void notifyChange(@NonNull final String what) { final Intent internalIntent = new Intent(what); final Song currentSong = getCurrentSong(); @@ -857,21 +865,23 @@ public class MusicService extends Service { } public class MusicBinder extends Binder { + @NonNull public MusicService getService() { return MusicService.this; } } private static final class QueueSaveHandler extends Handler { + @NonNull private final WeakReference mService; - public QueueSaveHandler(final MusicService service, final Looper looper) { + public QueueSaveHandler(final MusicService service, @NonNull final Looper looper) { super(looper); mService = new WeakReference<>(service); } @Override - public void handleMessage(Message msg) { + public void handleMessage(@NonNull Message msg) { final MusicService service = mService.get(); switch (msg.what) { case SAVE_QUEUES: @@ -882,16 +892,17 @@ public class MusicService extends Service { } private static final class MusicPlayerHandler extends Handler { + @NonNull private final WeakReference mService; private float currentDuckVolume = 1.0f; - public MusicPlayerHandler(final MusicService service, final Looper looper) { + public MusicPlayerHandler(final MusicService service, @NonNull final Looper looper) { super(looper); mService = new WeakReference<>(service); } @Override - public void handleMessage(final Message msg) { + public void handleMessage(@NonNull final Message msg) { final MusicService service = mService.get(); if (service == null) { return; 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 38d21367..90b11e4b 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 @@ -8,6 +8,8 @@ import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.util.Pair; import android.support.v7.graphics.Palette; import android.support.v7.widget.GridLayoutManager; @@ -181,6 +183,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } } + @NonNull @Override public String getTag() { return TAG; @@ -226,7 +229,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH @Override - public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + public void onLoadingComplete(String imageUri, View view, @NonNull Bitmap loadedImage) { applyPalette(loadedImage); albumArtBackground.setImageBitmap(new StackBlurManager(loadedImage).process(10)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) @@ -236,13 +239,13 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH ); } - private void applyPalette(Bitmap bitmap) { + private void applyPalette(@Nullable Bitmap bitmap) { if (bitmap != null) { Palette.from(bitmap) .resizeBitmapSize(100) .generate(new Palette.PaletteAsyncListener() { @Override - public void onGenerated(Palette palette) { + public void onGenerated(@NonNull Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); if (vibrantSwatch != null) { toolbarColor = vibrantSwatch.getRgb(); @@ -345,7 +348,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_sleep_timer: @@ -389,7 +392,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } @Subscribe - public void onDataBaseEvent(DataBaseChangedEvent event) { + public void onDataBaseEvent(@NonNull DataBaseChangedEvent event) { switch (event.getAction()) { case DataBaseChangedEvent.SONGS_CHANGED: case DataBaseChangedEvent.ALBUMS_CHANGED: @@ -402,7 +405,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } @Subscribe - public void onUIPreferenceChanged(UIPreferenceChangedEvent event) { + public void onUIPreferenceChanged(@NonNull UIPreferenceChangedEvent event) { switch (event.getAction()) { case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ALBUM_CHANGED: setNavigationBarColored((boolean) event.getValue()); @@ -417,7 +420,7 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH } @Override - public MaterialCab openCab(int menuRes, final MaterialCab.Callback callback) { + public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); cab = new MaterialCab(this, R.id.cab_stub) .setMenu(menuRes) 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 d853fa25..2b3b24db 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 @@ -8,6 +8,8 @@ import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.graphics.Palette; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -109,6 +111,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private int bottomOffset; private Artist artist; + @Nullable private Spanned biography; private ArtistAlbumAdapter albumAdapter; private ArtistSongAdapter songAdapter; @@ -219,6 +222,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor albumRecyclerView = ButterKnife.findById(songListHeader, R.id.recycler_view); } + @NonNull @Override public String getTag() { return TAG; @@ -276,7 +280,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor private void loadBiography() { lastFMRestClient.getApiService().getArtistInfo(artist.name, null, new Callback() { @Override - public void success(ArtistInfo artistInfo, Response response) { + public void success(@NonNull ArtistInfo artistInfo, Response response) { if (artistInfo.getArtist() != null) { String bio = artistInfo.getArtist().getBio().getContent(); if (bio != null && !bio.trim().equals("")) { @@ -315,7 +319,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } lastFMRestClient.getApiService().getArtistInfo(artist.name, forceDownload ? "no-cache" : null, new Callback() { @Override - public void success(ArtistInfo artistInfo, Response response) { + public void success(@NonNull ArtistInfo artistInfo, Response response) { if (artistInfo.getArtist() != null) { List images = artistInfo.getArtist().getImage(); int lastElementIndex = images.size() - 1; @@ -336,7 +340,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } @Override - public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + public void onLoadingComplete(String imageUri, View view, @Nullable Bitmap loadedImage) { if (loadedImage != null) { applyPalette(loadedImage); artistImageBackground.setImageBitmap(new StackBlurManager(loadedImage).process(10)); @@ -373,14 +377,14 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor artistImageBackground.setImageBitmap(defaultArtistImageBlurManager.process(10)); } - private void applyPalette(Bitmap bitmap) { + private void applyPalette(@Nullable Bitmap bitmap) { if (bitmap != null) { Palette.from(bitmap) .resizeBitmapSize(100) .generate(new Palette.PaletteAsyncListener() { @Override - public void onGenerated(Palette palette) { + public void onGenerated(@NonNull Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); if (vibrantSwatch != null) { toolbarColor = vibrantSwatch.getRgb(); @@ -447,7 +451,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_sleep_timer: @@ -531,7 +535,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } @Subscribe - public void onDataBaseEvent(DataBaseChangedEvent event) { + public void onDataBaseEvent(@NonNull DataBaseChangedEvent event) { switch (event.getAction()) { case DataBaseChangedEvent.SONGS_CHANGED: case DataBaseChangedEvent.ALBUMS_CHANGED: @@ -547,7 +551,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } @Subscribe - public void onUIPreferenceChanged(UIPreferenceChangedEvent event) { + public void onUIPreferenceChanged(@NonNull UIPreferenceChangedEvent event) { switch (event.getAction()) { case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_ARTIST_CHANGED: setNavigationBarColored((boolean) event.getValue()); @@ -562,7 +566,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor } @Override - public MaterialCab openCab(int menuRes, final MaterialCab.Callback callback) { + public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); cab = new MaterialCab(this, R.id.cab_stub) .setMenu(menuRes) 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 5d11c4d4..bd2faa00 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,7 @@ import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.AppBarLayout.OnOffsetChangedListener; import android.support.design.widget.NavigationView; @@ -87,6 +88,7 @@ public class MainActivity extends AbsFabActivity private PagerAdapter pagerAdapter; private int currentPage = -1; private MaterialCab cab; + @Nullable private View navigationDrawerHeader; @Override @@ -180,7 +182,7 @@ public class MainActivity extends AbsFabActivity )); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override - public boolean onNavigationItemSelected(MenuItem menuItem) { + public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { drawerLayout.closeDrawers(); switch (menuItem.getItemId()) { case R.id.nav_songs: @@ -242,6 +244,7 @@ public class MainActivity extends AbsFabActivity setUpNavigationView(); } + @NonNull @Override public String getTag() { return TAG; @@ -307,7 +310,7 @@ public class MainActivity extends AbsFabActivity } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(@NonNull Menu menu) { if (isAlbumPage()) { getMenuInflater().inflate(R.menu.menu_albums, menu); setUpGridMenu(menu); @@ -329,7 +332,7 @@ public class MainActivity extends AbsFabActivity } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (drawerToggle.onOptionsItemSelected(item)) { return true; } @@ -370,7 +373,7 @@ public class MainActivity extends AbsFabActivity } @Override - public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { + public void onUIPreferenceChangedEvent(@NonNull UIPreferenceChangedEvent event) { super.onUIPreferenceChangedEvent(event); switch (event.getAction()) { case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_OTHER_SCREENS_CHANGED: @@ -402,7 +405,7 @@ public class MainActivity extends AbsFabActivity PreferenceUtils.getInstance(MainActivity.this).setLastStartPage(currentPage); } - private void handlePlaybackIntent(Intent intent) { + private void handlePlaybackIntent(@Nullable Intent intent) { if (intent == null) { return; } @@ -447,7 +450,7 @@ public class MainActivity extends AbsFabActivity } } - private long parseIdFromIntent(Intent intent, String longKey, + private long parseIdFromIntent(@NonNull Intent intent, String longKey, String stringKey) { long id = intent.getLongExtra(longKey, -1); if (id < 0) { @@ -475,6 +478,7 @@ public class MainActivity extends AbsFabActivity return pager.getCurrentItem() == PagerAdapter.MusicFragments.ALBUM.ordinal(); } + @NonNull public AlbumViewFragment getAlbumFragment() { return (AlbumViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.ALBUM.ordinal()); } @@ -495,7 +499,7 @@ public class MainActivity extends AbsFabActivity // return (PlaylistViewFragment) pagerAdapter.getFragment(PagerAdapter.MusicFragments.PLAYLIST.ordinal()); // } - private void setUpGridMenu(Menu menu) { + private void setUpGridMenu(@NonNull Menu menu) { boolean isPortrait = Util.isInPortraitMode(this); int columns = isPortrait ? PreferenceUtils.getInstance(this).getAlbumGridColumns() : PreferenceUtils.getInstance(this).getAlbumGridColumnsLand(); String title = isPortrait ? getResources().getString(R.string.action_grid_columns) : getResources().getString(R.string.action_grid_columns_land); @@ -507,7 +511,7 @@ public class MainActivity extends AbsFabActivity gridSizeMenu.getItem(columns - 1).setChecked(true); } - private boolean handleGridSize(MenuItem item) { + private boolean handleGridSize(@NonNull MenuItem item) { int size = -1; switch (item.getItemId()) { 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 ee72bb0a..629830f4 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 @@ -14,6 +14,8 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.graphics.Palette; import android.support.v7.widget.CardView; import android.support.v7.widget.Toolbar; @@ -279,7 +281,7 @@ public class MusicControllerActivity extends AbsFabActivity { setUpProgressSlider(); } - private void setTint(SeekBar seekBar, int color) { + private void setTint(@NonNull SeekBar seekBar, int color) { ColorStateList s1 = ColorStateList.valueOf(color); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { seekBar.setThumbTintList(s1); @@ -380,6 +382,7 @@ public class MusicControllerActivity extends AbsFabActivity { } + @NonNull @Override public String getTag() { return TAG; @@ -443,7 +446,7 @@ public class MusicControllerActivity extends AbsFabActivity { } @Override - public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + public void onLoadingComplete(String imageUri, View view, @NonNull Bitmap loadedImage) { applyPalette(loadedImage); albumArtBackground.setImageBitmap(new StackBlurManager(loadedImage).process(10)); } @@ -451,13 +454,13 @@ public class MusicControllerActivity extends AbsFabActivity { ); } - private void applyPalette(Bitmap bitmap) { + private void applyPalette(@Nullable Bitmap bitmap) { if (bitmap != null) { Palette.from(bitmap) .resizeBitmapSize(100) .generate(new Palette.PaletteAsyncListener() { @Override - public void onGenerated(Palette palette) { + public void onGenerated(@NonNull Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); if (vibrantSwatch != null) { final int swatchRgb = vibrantSwatch.getRgb(); @@ -616,7 +619,7 @@ public class MusicControllerActivity extends AbsFabActivity { } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(@NonNull Menu menu) { getMenuInflater().inflate(R.menu.menu_music_playing, menu); boolean isFavorite = MusicUtil.isFavorite(this, song); menu.findItem(R.id.action_toggle_favorite) @@ -626,7 +629,7 @@ public class MusicControllerActivity extends AbsFabActivity { } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_sleep_timer: @@ -701,13 +704,13 @@ public class MusicControllerActivity extends AbsFabActivity { private static class MusicProgressViewsUpdateHandler extends Handler { private WeakReference activityReference; - public MusicProgressViewsUpdateHandler(final MusicControllerActivity activity, final Looper looper) { + public MusicProgressViewsUpdateHandler(final MusicControllerActivity activity, @NonNull final Looper looper) { super(looper); activityReference = new WeakReference<>(activity); } @Override - public void handleMessage(Message msg) { + public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); if (msg.what == CMD_UPDATE_PROGRESS_VIEWS) { activityReference.get().updateProgressViews(); 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 972d0b80..44912c0a 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,6 +1,8 @@ package com.kabouzeid.gramophone.ui.activities; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; @@ -33,6 +35,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder public static final String TAG = PlaylistDetailActivity.class.getSimpleName(); + @NonNull public static String EXTRA_PLAYLIST = "extra_playlist"; @InjectView(R.id.recycler_view) @@ -42,8 +45,10 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder @InjectView(android.R.id.empty) TextView empty; + @Nullable private Playlist playlist; private MaterialCab cab; + @Nullable private AbsPlaylistSongAdapter adapter; @Override @@ -110,6 +115,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder } } + @NonNull @Override public String getTag() { return TAG; @@ -122,7 +128,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_sleep_timer: @@ -165,7 +171,7 @@ public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder } @Subscribe - public void onDataBaseEvent(DataBaseChangedEvent event) { + public void onDataBaseEvent(@NonNull DataBaseChangedEvent event) { switch (event.getAction()) { case DataBaseChangedEvent.PLAYLISTS_CHANGED: case DataBaseChangedEvent.DATABASE_CHANGED: 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 5076c82e..11ea3823 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 @@ -6,6 +6,7 @@ import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.LinearLayoutManager; @@ -74,6 +75,7 @@ public class SearchActivity extends AbsBaseActivity { setStatusBarThemeColor(); } + @NonNull @Override public String getTag() { return TAG; @@ -92,7 +94,7 @@ public class SearchActivity extends AbsBaseActivity { } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(@NonNull Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); final MenuItem search = menu.findItem(R.id.action_search); @@ -111,7 +113,7 @@ public class SearchActivity extends AbsBaseActivity { searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override - public boolean onQueryTextSubmit(String query) { + public boolean onQueryTextSubmit(@NonNull String query) { onQueryTextChange(query); Util.hideSoftKeyboard(SearchActivity.this); searchView.clearFocus(); @@ -119,7 +121,7 @@ public class SearchActivity extends AbsBaseActivity { } @Override - public boolean onQueryTextChange(String newText) { + public boolean onQueryTextChange(@NonNull String newText) { search(newText); return false; } @@ -142,7 +144,7 @@ public class SearchActivity extends AbsBaseActivity { return true; } - private void search(String query) { + private void search(@NonNull String query) { if (searchAdapter != null) { searchAdapter.search(query); empty.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE); 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 f5b5f0d7..af173844 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 @@ -10,6 +10,8 @@ import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; import android.view.MenuItem; @@ -31,7 +33,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia public static final String TAG = SettingsActivity.class.getSimpleName(); @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_preferences); @@ -77,7 +79,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia setSummary(defaultStartPage); defaultStartPage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override - public boolean onPreferenceChange(Preference preference, Object o) { + public boolean onPreferenceChange(Preference preference, @NonNull Object o) { setSummary(defaultStartPage, o); return true; } @@ -87,7 +89,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia setSummary(generalTheme); generalTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override - public boolean onPreferenceChange(Preference preference, Object o) { + public boolean onPreferenceChange(Preference preference, @NonNull Object o) { setSummary(generalTheme, o); App.bus.post(new UIPreferenceChangedEvent(UIPreferenceChangedEvent.THEME_CHANGED, o)); return true; @@ -99,7 +101,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary)); primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override - public boolean onPreferenceClick(Preference preference) { + public boolean onPreferenceClick(@NonNull Preference preference) { new ColorChooserDialog().show(getActivity(), preference.getTitleRes(), PreferenceUtils.getInstance(getActivity()).getThemeColorPrimary()); return true; @@ -111,7 +113,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia DialogUtils.resolveColor(getActivity(), android.R.attr.textColorPrimary)); accentColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override - public boolean onPreferenceClick(Preference preference) { + public boolean onPreferenceClick(@NonNull Preference preference) { new ColorChooserDialog().show(getActivity(), preference.getTitleRes(), PreferenceUtils.getInstance(getActivity()).getThemeColorAccent()); return true; @@ -178,13 +180,13 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia }); } - private static void setSummary(Preference preference) { + private static void setSummary(@NonNull Preference preference) { setSummary(preference, PreferenceManager .getDefaultSharedPreferences(preference.getContext()) .getString(preference.getKey(), "")); } - private static void setSummary(Preference preference, Object value) { + private static void setSummary(Preference preference, @NonNull Object value) { String stringValue = value.toString(); if (preference instanceof ListPreference) { @@ -211,7 +213,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia } @Override - protected void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { + protected void onUIPreferenceChangedEvent(@NonNull UIPreferenceChangedEvent event) { super.onUIPreferenceChangedEvent(event); switch (event.getAction()) { case UIPreferenceChangedEvent.COLORED_NAVIGATION_BAR_OTHER_SCREENS_CHANGED: @@ -231,7 +233,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; @@ -239,6 +241,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia return super.onOptionsItemSelected(item); } + @NonNull @Override public String getTag() { return TAG; 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 f92df28c..fbff2629 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 @@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.ui.activities.base; import android.media.AudioManager; import android.os.Bundle; +import android.support.annotation.NonNull; import com.crashlytics.android.Crashlytics; import com.kabouzeid.gramophone.App; @@ -18,7 +19,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie private boolean areViewsEnabled; private final Object uiPreferenceChangeListener = new Object() { @Subscribe - public void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { + public void onUIPreferenceChangedEvent(@NonNull UIPreferenceChangedEvent event) { AbsBaseActivity.this.onUIPreferenceChangedEvent(event); } }; @@ -34,6 +35,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie setVolumeControlStream(AudioManager.STREAM_MUSIC); } + @NonNull protected abstract String getTag(); @Override @@ -57,7 +59,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity implements KabVie return areViewsEnabled; } - protected void onUIPreferenceChangedEvent(UIPreferenceChangedEvent event) { + protected void onUIPreferenceChangedEvent(@NonNull UIPreferenceChangedEvent event) { switch (event.getAction()) { case UIPreferenceChangedEvent.THEME_CHANGED: recreate(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java index 7f2eac98..52bb3439 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsFabActivity.java @@ -3,6 +3,8 @@ package com.kabouzeid.gramophone.ui.activities.base; import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v4.util.Pair; import android.util.Log; @@ -30,6 +32,7 @@ import butterknife.Optional; public abstract class AbsFabActivity extends AbsPlaybackControlActivity { public static final String TAG = AbsFabActivity.class.getSimpleName(); + @Nullable @Optional @InjectView(R.id.fab) FloatingActionButton fab; @@ -83,7 +86,7 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity { getFab().setOnTouchListener(new View.OnTouchListener() { @Override - public boolean onTouch(View view, MotionEvent event) { + public boolean onTouch(View view, @NonNull MotionEvent event) { gestureDetector.onTouchEvent(event); return false; } @@ -119,6 +122,7 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity { } } + @Nullable protected FloatingActionButton getFab() { if (fab == null) { fab = (FloatingActionButton) findViewById(R.id.fab); @@ -136,7 +140,7 @@ public abstract class AbsFabActivity extends AbsPlaybackControlActivity { updateFabState(); } - public Pair[] getSharedViewsWithFab(Pair[] sharedViews) { + public Pair[] getSharedViewsWithFab(@Nullable Pair[] sharedViews) { Pair[] sharedViewsWithFab; if (sharedViews != null) { sharedViewsWithFab = new Pair[sharedViews.length + 1]; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsPlaybackControlActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsPlaybackControlActivity.java index e2433341..ed1dda56 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsPlaybackControlActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsPlaybackControlActivity.java @@ -8,6 +8,8 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.service.MusicService; @@ -18,6 +20,7 @@ import java.lang.ref.WeakReference; * @author Karim Abou Zeid (kabouzeid) */ public abstract class AbsPlaybackControlActivity extends AbsBaseActivity { + @Nullable private MusicPlayerRemote.ServiceToken serviceToken; private PlaybackStatusReceiver playbackStatusReceiver; @@ -88,6 +91,7 @@ public abstract class AbsPlaybackControlActivity extends AbsBaseActivity { private static final class PlaybackStatusReceiver extends BroadcastReceiver { + @NonNull private final WeakReference reference; public PlaybackStatusReceiver(final AbsPlaybackControlActivity activity) { @@ -95,7 +99,7 @@ public abstract class AbsPlaybackControlActivity extends AbsBaseActivity { } @Override - public void onReceive(final Context context, final Intent intent) { + public void onReceive(final Context context, @NonNull final Intent intent) { final String action = intent.getAction(); switch (action) { case MusicService.META_CHANGED: diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java index fef7f755..3f9306e3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsThemeActivity.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.ui.activities.base; import android.app.ActivityManager; import android.os.Build; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; @@ -21,6 +22,7 @@ public abstract class AbsThemeActivity extends AppCompatActivity implements KabV private int colorPrimaryDarker; private int colorAccent; + @Nullable private ActivityManager.TaskDescription taskDescription; @Override 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 fc5904a7..a817cbff 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 @@ -9,6 +9,8 @@ import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v7.graphics.Palette; import android.support.v7.widget.Toolbar; @@ -52,7 +54,6 @@ import java.util.Map; import butterknife.ButterKnife; import butterknife.InjectView; -import butterknife.Optional; /** * @author Karim Abou Zeid (kabouzeid) @@ -77,7 +78,6 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { ObservableScrollView observableScrollView; @InjectView(R.id.toolbar) Toolbar toolbar; - @Optional @InjectView(R.id.image) ImageView image; @InjectView(R.id.header) @@ -220,9 +220,10 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { protected abstract int getContentViewLayout(); + @NonNull protected abstract List getSongPaths(); - protected void searchWebFor(List strings) { + protected void searchWebFor(@NonNull List strings) { StringBuilder stringBuilder = new StringBuilder(); for (String string : strings) { stringBuilder.append(string); @@ -234,7 +235,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); switch (id) { case android.R.id.home: @@ -281,7 +282,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { setImageBitmap(bitmap); } - protected void setImageBitmap(final Bitmap bitmap) { + protected void setImageBitmap(@Nullable final Bitmap bitmap) { if (bitmap != null) { image.setImageBitmap(bitmap); applyPalette(bitmap); @@ -290,12 +291,12 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { } } - private void applyPalette(final Bitmap bitmap) { + private void applyPalette(@NonNull final Bitmap bitmap) { Palette.from(bitmap) .resizeBitmapSize(100) .generate(new Palette.PaletteAsyncListener() { @Override - public void onGenerated(Palette palette) { + public void onGenerated(@NonNull Palette palette) { final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch(); if (vibrantSwatch != null) { paletteColorPrimary = palette.getVibrantColor(DialogUtils.resolveColor(AbsTagEditorActivity.this, R.attr.default_bar_color)); @@ -317,11 +318,11 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return true; } - protected void writeValuesToFiles(final Map fieldKeyValueMap) { + protected void writeValuesToFiles(@NonNull final Map fieldKeyValueMap) { writeValuesToFiles(fieldKeyValueMap, null, false); } - protected void writeValuesToFiles(final Map fieldKeyValueMap, final Artwork artwork, final boolean deleteArtwork) { + protected void writeValuesToFiles(@NonNull final Map fieldKeyValueMap, @Nullable final Artwork artwork, final boolean deleteArtwork) { Util.hideSoftKeyboard(this); final String writingFileStr = getResources().getString(R.string.writing_file_number); final MaterialDialog progressDialog = new MaterialDialog.Builder(AbsTagEditorActivity.this) @@ -361,7 +362,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { tag.setField(artwork); } audioFile.commit(); - } catch (CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) { + } catch (@NonNull CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) { Log.e(TAG, "Error while reading audio file.", e); } catch (CannotWriteException e) { Log.e(TAG, "Error while writing audio file.", e); @@ -390,7 +391,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { }).start(); } - private void rescanMediaAndQuitOnFinish(final OnScannedAllListener listener) { + private void rescanMediaAndQuitOnFinish(@NonNull final OnScannedAllListener listener) { String[] toBeScanned = new String[songPaths.size()]; toBeScanned = songPaths.toArray(toBeScanned); final int toBeScannedLength = toBeScanned.length; @@ -418,7 +419,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return id; } - protected void writeValuesToFiles(final Map fieldKeyValueMap, final Artwork artwork) { + protected void writeValuesToFiles(@NonNull final Map fieldKeyValueMap, @Nullable final Artwork artwork) { if (artwork == null) { writeValuesToFiles(fieldKeyValueMap, null, true); } else { @@ -426,12 +427,12 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { } } - protected void writeValuesToFiles(final Map fieldKeyValueMap, boolean deleteArtwork) { + protected void writeValuesToFiles(@NonNull final Map fieldKeyValueMap, boolean deleteArtwork) { writeValuesToFiles(fieldKeyValueMap, null, deleteArtwork); } @Override - protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { + protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent imageReturnedIntent) { super.onActivityResult(requestCode, resultCode, imageReturnedIntent); switch (requestCode) { case REQUEST_CODE_SELECT_IMAGE: @@ -444,6 +445,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { protected abstract void loadImageFromFile(Uri selectedFile); + @Nullable protected String getSongTitle() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.TITLE); @@ -452,15 +454,16 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { } } - private AudioFile getAudioFile(String path) { + private AudioFile getAudioFile(@NonNull String path) { try { return AudioFileIO.read(new File(path)); - } catch (CannotReadException | ReadOnlyFileException | InvalidAudioFrameException | TagException | IOException e) { + } catch (@NonNull CannotReadException | ReadOnlyFileException | InvalidAudioFrameException | TagException | IOException e) { Log.e(TAG, "Error while trying to create the AudioFile from java.io.File", e); } return null; } + @Nullable protected String getAlbumTitle() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.ALBUM); @@ -469,6 +472,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return null; } + @Nullable protected String getArtistName() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.ARTIST); @@ -477,6 +481,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return null; } + @Nullable protected String getAlbumArtistName() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.ALBUM_ARTIST); @@ -485,6 +490,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return null; } + @Nullable protected String getGenreName() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.GENRE); @@ -493,6 +499,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return null; } + @Nullable protected String getSongYear() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.YEAR); @@ -501,6 +508,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return null; } + @Nullable protected String getTrackNumber() { try { return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.TRACK); @@ -509,6 +517,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { return null; } + @Nullable protected Bitmap getAlbumArt() { try { Artwork artworkTag = getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirstArtwork(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java index f2e89020..b3a76e3c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java @@ -3,6 +3,7 @@ package com.kabouzeid.gramophone.ui.activities.tageditor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -67,6 +68,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text setUpViews(); } + @NonNull @Override public String getTag() { return TAG; @@ -104,7 +106,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text } lastFMRestClient.getApiService().getAlbumInfo(albumTitleStr, albumArtistNameStr, new Callback() { @Override - public void success(AlbumInfo albumInfo, Response response) { + public void success(@NonNull AlbumInfo albumInfo, Response response) { if (albumInfo.getAlbum() != null) { List images = albumInfo.getAlbum().getImage(); int lastIndexOfImages = images.size() - 1; @@ -187,6 +189,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text return R.layout.activity_album_tag_editor; } + @NonNull @Override protected List getSongPaths() { ArrayList songs = AlbumSongLoader.getAlbumSongList(this, getId()); @@ -198,7 +201,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text } @Override - protected void loadImageFromFile(final Uri selectedFileUri) { + protected void loadImageFromFile(@NonNull final Uri selectedFileUri) { ImageLoader.getInstance().loadImage(selectedFileUri.toString(), new ImageSize(500, 500), new SimpleImageLoadingListener() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java index 59adafa8..da6ff927 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/SongTagEditorActivity.java @@ -2,6 +2,7 @@ package com.kabouzeid.gramophone.ui.activities.tageditor; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; @@ -45,6 +46,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW setUpViews(); } + @NonNull @Override public String getTag() { return TAG; @@ -106,6 +108,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW return R.layout.activity_song_tag_editor; } + @NonNull @Override protected List getSongPaths() { ArrayList paths = new ArrayList<>(1); 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 34016ed2..e046ad27 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 @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import com.kabouzeid.gramophone.interfaces.KabViewsDisableAble; @@ -12,6 +13,7 @@ import com.kabouzeid.gramophone.ui.activities.MainActivity; public abstract class AbsMainActivityFragment extends Fragment implements KabViewsDisableAble { private boolean areViewsEnabled; + @NonNull protected MainActivity getMainActivity() { return (MainActivity) getActivity(); } 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 3a47c64f..dc0dfe29 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,6 +2,7 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; import android.os.Bundle; import android.support.annotation.LayoutRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.design.widget.AppBarLayout; @@ -40,7 +41,7 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit private RecyclerView.Adapter mAdapter; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(getLayoutRes(), container, false); ButterKnife.inject(this, view); return view; @@ -130,6 +131,7 @@ public abstract class AbsMainActivityRecyclerViewFragment extends AbsMainActivit protected abstract RecyclerView.LayoutManager createLayoutManager(); + @NonNull protected abstract RecyclerView.Adapter createAdapter(); @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java index e9a47040..279bdbad 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AlbumViewFragment.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; @@ -23,6 +24,7 @@ public class AlbumViewFragment extends AbsMainActivityRecyclerViewFragment { return layoutManager; } + @NonNull @Override protected RecyclerView.Adapter createAdapter() { return new AlbumAdapter(getMainActivity(), getMainActivity()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java index 3022a8a9..db68ee98 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/ArtistViewFragment.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; @@ -13,11 +14,13 @@ public class ArtistViewFragment extends AbsMainActivityRecyclerViewFragment { public static final String TAG = ArtistViewFragment.class.getSimpleName(); + @NonNull @Override protected RecyclerView.LayoutManager createLayoutManager() { return new GridLayoutManager(getActivity(), 1); } + @NonNull @Override protected RecyclerView.Adapter createAdapter() { return new ArtistAdapter(getMainActivity(), getMainActivity()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java index df94b0bb..f0037d65 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/PlaylistViewFragment.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; @@ -13,11 +14,13 @@ public class PlaylistViewFragment extends AbsMainActivityRecyclerViewFragment { public static final String TAG = PlaylistViewFragment.class.getSimpleName(); + @NonNull @Override protected RecyclerView.LayoutManager createLayoutManager() { return new GridLayoutManager(getActivity(), 1); } + @NonNull @Override protected RecyclerView.Adapter createAdapter() { return new PlaylistAdapter(getMainActivity(), getMainActivity()); 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 f7149be2..305b4b1d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java @@ -1,5 +1,6 @@ package com.kabouzeid.gramophone.ui.fragments.mainactivityfragments; +import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; @@ -13,11 +14,13 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewFragment { public static final String TAG = SongViewFragment.class.getSimpleName(); + @NonNull @Override protected RecyclerView.LayoutManager createLayoutManager() { return new GridLayoutManager(getActivity(), 1); } + @NonNull @Override protected RecyclerView.Adapter createAdapter() { return new SongAdapter(getMainActivity(), getMainActivity()); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java index bfa2dbd1..20156340 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ImageUtil.java @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Point; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.Display; import android.view.WindowManager; @@ -24,7 +25,7 @@ import java.io.IOException; public class ImageUtil { @Nullable - public static Bitmap getEmbeddedSongArt(File songFile, Context context) { + public static Bitmap getEmbeddedSongArt(File songFile, @NonNull Context context) { try { AudioFile audioFile = AudioFileIO.read(songFile); byte[] data = audioFile.getTag().getFirstArtwork().getBinaryData(); @@ -39,13 +40,13 @@ public class ImageUtil { options.inJustDecodeBounds = false; return BitmapFactory.decodeByteArray(data, 0, data.length, options); } - } catch (CannotReadException | TagException | IOException | ReadOnlyFileException | InvalidAudioFrameException e) { + } catch (@NonNull CannotReadException | TagException | IOException | ReadOnlyFileException | InvalidAudioFrameException e) { e.printStackTrace(); } return null; } - public static int calculateInSampleSize(BitmapFactory.Options options, Context context) { + public static int calculateInSampleSize(@NonNull BitmapFactory.Options options, @NonNull Context context) { // Raw height and width of image final int height = options.outHeight; @@ -76,7 +77,7 @@ public class ImageUtil { return inSampleSize; } - private static int getSmallerScreenSize(Context c) { + private static int getSmallerScreenSize(@NonNull Context c) { Display display = ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); Point size = new Point(); display.getSize(size); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java index ce72f955..b313d657 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/InternalStorageUtil.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.util; import android.content.Context; +import android.support.annotation.NonNull; import java.io.File; import java.io.FileInputStream; @@ -22,7 +23,7 @@ public final class InternalStorageUtil { * @param key the filename * @param object any {@link java.io.Serializable} object which will be written to the internal storage */ - public static synchronized void writeObject(final Context context, final String key, final Object object) throws IOException { + public static synchronized void writeObject(@NonNull final Context context, @NonNull final String key, final Object object) throws IOException { // First write the object to a file with ".tmp" postfix, // so when an error occurs, we do not overwrite the original // file (if exists) with a corrupted file. @@ -43,7 +44,7 @@ public final class InternalStorageUtil { * @param originalFileName the original filename * @param newFileName the new filename */ - public static synchronized void renameAppFile(final Context context, String originalFileName, String newFileName) { + public static synchronized void renameAppFile(@NonNull final Context context, String originalFileName, @NonNull String newFileName) { File originalFile = context.getFileStreamPath(originalFileName); File newFile = new File(originalFile.getParent(), newFileName); if (newFile.exists()) { @@ -57,7 +58,7 @@ public final class InternalStorageUtil { * @param context a valid {@link Context} * @param key the filename */ - public static synchronized Object readObject(final Context context, String key) throws IOException, + public static synchronized Object readObject(@NonNull final Context context, String key) throws IOException, ClassNotFoundException { FileInputStream fis = context.openFileInput(key); ObjectInputStream ois = new ObjectInputStream(fis); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index 0449c62e..8619efa4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -12,6 +12,7 @@ import android.provider.BaseColumns; import android.provider.MediaStore; import android.provider.Settings; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.util.Log; import android.widget.Toast; @@ -37,11 +38,13 @@ import java.util.List; public class MusicUtil { public static final String TAG = MusicUtil.class.getSimpleName(); - public static String getAlbumImageLoaderString(Album album) { + @NonNull + public static String getAlbumImageLoaderString(@NonNull Album album) { return PhonographImageDownloader.SCHEME_ALBUM + album.id; } - public static String getSongImageLoaderString(Song song) { + @NonNull + public static String getSongImageLoaderString(@NonNull Song song) { return PhonographImageDownloader.SCHEME_SONG + song.albumId + "#" + song.data; } @@ -57,14 +60,14 @@ public class MusicUtil { } @NonNull - public static Intent createShareSongFileIntent(final Song song) { + public static Intent createShareSongFileIntent(@NonNull final Song song) { return new Intent() .setAction(Intent.ACTION_SEND) .putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + song.data)) .setType("audio/*"); } - public static void setRingtone(final Context context, final int id) { + public static void setRingtone(@NonNull final Context context, final int id) { final ContentResolver resolver = context.getContentResolver(); final Uri uri = getSongUri(id); try { @@ -72,7 +75,7 @@ public class MusicUtil { values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, "1"); values.put(MediaStore.Audio.AudioColumns.IS_ALARM, "1"); resolver.update(uri, values, null, null); - } catch (final UnsupportedOperationException ignored) { + } catch (@NonNull final UnsupportedOperationException ignored) { return; } @@ -95,7 +98,8 @@ public class MusicUtil { } } - public static String getArtistInfoString(Context context, Artist artist) { + @NonNull + public static String getArtistInfoString(@NonNull Context context, @NonNull Artist artist) { return artist.songCount + " " + context.getResources().getString(R.string.songs) + " | " + artist.albumCount + " " + context.getResources().getString(R.string.albums); } @@ -111,7 +115,7 @@ public class MusicUtil { return trackNumberToFix % 1000; } - public static void insertAlbumArt(Context context, int albumId, String path) { + public static void insertAlbumArt(@NonNull Context context, int albumId, String path) { ContentResolver contentResolver = context.getContentResolver(); Uri artworkUri = Uri.parse("content://media/external/audio/albumart"); @@ -124,16 +128,18 @@ public class MusicUtil { contentResolver.insert(artworkUri, values); } - public static void deleteAlbumArt(Context context, int albumId) { + public static void deleteAlbumArt(@NonNull Context context, int albumId) { ContentResolver contentResolver = context.getContentResolver(); Uri localUri = Uri.parse("content://media/external/audio/albumart"); contentResolver.delete(ContentUris.withAppendedId(localUri, albumId), null, null); } + @NonNull public static File createAlbumArtFile(String name) { return new File(createAlbumArtDir(), name + System.currentTimeMillis()); } + @NonNull @SuppressWarnings("ResultOfMethodCallIgnored") public static File createAlbumArtDir() { File albumArtDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "/.albumart/"); @@ -148,7 +154,7 @@ public class MusicUtil { return albumArtDir; } - public static void deleteTracks(final Context context, final List songs) { + public static void deleteTracks(@NonNull final Context context, @NonNull final List songs) { final String[] projection = new String[]{ BaseColumns._ID, MediaStore.MediaColumns.DATA }; @@ -191,7 +197,7 @@ public class MusicUtil { Log.e("MusicUtils", "Failed to delete file " + name); } cursor.moveToNext(); - } catch (final SecurityException ex) { + } catch (@NonNull final SecurityException ex) { cursor.moveToNext(); } catch (NullPointerException e) { Log.e("MusicUtils", "Failed to find file " + name); @@ -204,19 +210,19 @@ public class MusicUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.DATABASE_CHANGED)); } - private static Playlist getFavoritesPlaylist(final Context context) { + private static Playlist getFavoritesPlaylist(@NonNull final Context context) { return PlaylistLoader.getPlaylist(context, context.getString(R.string.favorites)); } - private static Playlist getOrCreateFavoritesPlaylist(final Context context) { + private static Playlist getOrCreateFavoritesPlaylist(@NonNull final Context context) { return PlaylistLoader.getPlaylist(context, PlaylistsUtil.createPlaylist(context, context.getString(R.string.favorites))); } - public static boolean isFavorite(final Context context, final Song song) { + public static boolean isFavorite(@NonNull final Context context, @NonNull final Song song) { return PlaylistsUtil.doPlaylistContains(context, getFavoritesPlaylist(context).id, song.id); } - public static void toggleFavorite(final Context context, final Song song) { + public static void toggleFavorite(@NonNull final Context context, @NonNull final Song song) { if (isFavorite(context, song)) { PlaylistsUtil.removeFromPlaylist(context, song, getFavoritesPlaylist(context).id); } else { @@ -224,7 +230,7 @@ public class MusicUtil { } } - public static boolean isArtistNameUnknown(final String artistName) { + public static boolean isArtistNameUnknown(@Nullable final String artistName) { return artistName != null && (artistName.trim().toLowerCase().equals("unknown") || artistName.trim().toLowerCase().equals("")); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java index ab009169..4ab5c526 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java @@ -4,6 +4,8 @@ import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.media.audiofx.AudioEffect; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.util.Pair; @@ -25,7 +27,7 @@ import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity; */ public class NavigationUtil { - public static void goToArtist(final Activity activity, final int artistId, final Pair[] sharedViews) { + public static void goToArtist(final Activity activity, final int artistId, @Nullable final Pair[] sharedViews) { if (activity instanceof ArtistDetailActivity) return; if ((activity instanceof KabViewsDisableAble && ((KabViewsDisableAble) activity).areViewsEnabled()) || !(activity instanceof KabViewsDisableAble)) { @@ -44,7 +46,7 @@ public class NavigationUtil { } } - public static void goToAlbum(final Activity activity, final int albumId, final Pair[] sharedViews) { + public static void goToAlbum(final Activity activity, final int albumId, @Nullable final Pair[] sharedViews) { if (activity instanceof AlbumDetailActivity) return; if ((activity instanceof KabViewsDisableAble && ((KabViewsDisableAble) activity).areViewsEnabled()) || !(activity instanceof KabViewsDisableAble)) { @@ -63,7 +65,7 @@ public class NavigationUtil { } } - public static void goToPlaylist(final Activity activity, final Playlist playlist, final Pair[] sharedViews) { + public static void goToPlaylist(final Activity activity, final Playlist playlist, @Nullable final Pair[] sharedViews) { if ((activity instanceof KabViewsDisableAble && ((KabViewsDisableAble) activity).areViewsEnabled()) || !(activity instanceof KabViewsDisableAble)) { if (activity instanceof KabViewsDisableAble) ((KabViewsDisableAble) activity).disableViews(); @@ -83,7 +85,7 @@ public class NavigationUtil { } } - public static void openCurrentPlayingIfPossible(final Activity activity, final Pair[] sharedViews) { + public static void openCurrentPlayingIfPossible(final Activity activity, @Nullable final Pair[] sharedViews) { if (activity instanceof MusicControllerActivity) { activity.onBackPressed(); return; @@ -107,7 +109,7 @@ public class NavigationUtil { } } - public static void openPlayingQueueDialog(final AppCompatActivity activity) { + public static void openPlayingQueueDialog(@NonNull final AppCompatActivity activity) { PlayingQueueDialog dialog = PlayingQueueDialog.create(); if (dialog != null) { dialog.show(activity.getSupportFragmentManager(), "PLAY_QUEUE"); @@ -116,7 +118,7 @@ public class NavigationUtil { } } - public static void openEqualizer(final Activity activity) { + public static void openEqualizer(@NonNull final Activity activity) { final int sessionId = MusicPlayerRemote.getAudioSessionId(); if (sessionId == AudioEffect.ERROR_BAD_VALUE) { Toast.makeText(activity, activity.getResources().getString(R.string.no_audio_ID), Toast.LENGTH_LONG).show(); @@ -126,7 +128,7 @@ public class NavigationUtil { effects.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId); effects.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC); activity.startActivityForResult(effects, 0); - } catch (final ActivityNotFoundException notFound) { + } catch (@NonNull final ActivityNotFoundException notFound) { Toast.makeText(activity, activity.getResources().getString(R.string.no_equalizer), Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java index ef91ec11..4f2c36b9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java @@ -7,6 +7,8 @@ import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.widget.Toast; import com.kabouzeid.gramophone.App; @@ -24,7 +26,7 @@ import java.util.List; */ public class PlaylistsUtil { - public static int createPlaylist(final Context context, final String name) { + public static int createPlaylist(@NonNull final Context context, @Nullable final String name) { int id = -1; if (name != null && name.length() > 0) { Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, @@ -70,7 +72,7 @@ public class PlaylistsUtil { // App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); // } - public static void deletePlaylists(final Context context, final ArrayList playlists) { + public static void deletePlaylists(@NonNull final Context context, @NonNull final ArrayList playlists) { final Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; final StringBuilder selection = new StringBuilder(); selection.append(MediaStore.Audio.Playlists._ID + " IN ("); @@ -85,13 +87,13 @@ public class PlaylistsUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } - public static void addToPlaylist(final Context context, final Song song, final int playlistId, final boolean showToastOnFinish) { + public static void addToPlaylist(@NonNull final Context context, final Song song, final int playlistId, final boolean showToastOnFinish) { List helperList = new ArrayList<>(); helperList.add(song); addToPlaylist(context, helperList, playlistId, showToastOnFinish); } - public static void addToPlaylist(final Context context, final List songs, final int playlistId, final boolean showToastOnFinish) { + public static void addToPlaylist(@NonNull final Context context, @NonNull final List songs, final int playlistId, final boolean showToastOnFinish) { final int size = songs.size(); final ContentResolver resolver = context.getContentResolver(); final String[] projection = new String[]{ @@ -124,7 +126,8 @@ public class PlaylistsUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } - public static ContentValues[] makeInsertItems(final List songs, final int offset, int len, final int base) { + @NonNull + public static ContentValues[] makeInsertItems(@NonNull final List songs, final int offset, int len, final int base) { if (offset + len > songs.size()) { len = songs.size() - offset; } @@ -139,7 +142,7 @@ public class PlaylistsUtil { return contentValues; } - public static void removeFromPlaylist(final Context context, final Song song, int playlistId) { + public static void removeFromPlaylist(@NonNull final Context context, @NonNull final Song song, int playlistId) { Uri uri = MediaStore.Audio.Playlists.Members.getContentUri( "external", playlistId); String selection = MediaStore.Audio.Playlists.Members.AUDIO_ID + " =?"; @@ -149,7 +152,7 @@ public class PlaylistsUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } - public static void removeFromPlaylist(final Context context, final List songs) { + public static void removeFromPlaylist(@NonNull final Context context, @NonNull final List songs) { final int playlistId = songs.get(0).playlistId; Uri uri = MediaStore.Audio.Playlists.Members.getContentUri( "external", playlistId); @@ -165,7 +168,7 @@ public class PlaylistsUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } - public static boolean doPlaylistContains(final Context context, final long playlistId, final int songId) { + public static boolean doPlaylistContains(@NonNull final Context context, final long playlistId, final int songId) { if (playlistId != -1) { Cursor c = context.getContentResolver().query( MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId), @@ -195,12 +198,12 @@ public class PlaylistsUtil { // return 0; // } - public static boolean moveItem(final Context context, int playlistId, int from, int to) { + public static boolean moveItem(@NonNull final Context context, int playlistId, int from, int to) { return MediaStore.Audio.Playlists.Members.moveItem(context.getContentResolver(), playlistId, from, to); } - public static void renamePlaylist(final Context context, final long id, final String newName) { + public static void renamePlaylist(@NonNull final Context context, final long id, final String newName) { ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.Audio.PlaylistsColumns.NAME, newName); context.getContentResolver().update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, @@ -210,7 +213,7 @@ public class PlaylistsUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } - public static String getNameForPlaylist(final Context context, final long id) { + public static String getNameForPlaylist(@NonNull final Context context, final long id) { Cursor cursor = context.getContentResolver().query( MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.PlaylistsColumns.NAME}, diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java index 09775117..e3890ff0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtils.java @@ -4,6 +4,8 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.kabouzeid.gramophone.R; @@ -49,15 +51,16 @@ public final class PreferenceUtils { private static PreferenceUtils sInstance; + @NonNull private final Context mContext; private final SharedPreferences mPreferences; - public PreferenceUtils(final Context context) { + public PreferenceUtils(@NonNull final Context context) { mContext = context; mPreferences = PreferenceManager.getDefaultSharedPreferences(context); } - public static PreferenceUtils getInstance(final Context context) { + public static PreferenceUtils getInstance(@NonNull final Context context) { if (sInstance == null) { sInstance = new PreferenceUtils(context.getApplicationContext()); } @@ -204,29 +207,35 @@ public final class PreferenceUtils { return mPreferences.getBoolean(IGNORE_MEDIA_STORE_ARTWORK, false); } + @Nullable public final String getArtistSortOrder() { return mPreferences.getString(ARTIST_SORT_ORDER, SortOrder.ArtistSortOrder.ARTIST_A_Z); } + @Nullable public final String getArtistSongSortOrder() { return mPreferences.getString(ARTIST_SONG_SORT_ORDER, SortOrder.ArtistSongSortOrder.SONG_A_Z); } + @Nullable public final String getArtistAlbumSortOrder() { return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER, SortOrder.ArtistAlbumSortOrder.ALBUM_YEAR_ASC); } + @Nullable public final String getAlbumSortOrder() { return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.AlbumSortOrder.ALBUM_A_Z); } + @Nullable public final String getAlbumSongSortOrder() { return mPreferences.getString(ALBUM_SONG_SORT_ORDER, SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST); } + @Nullable public final String getSongSortOrder() { return mPreferences.getString(SONG_SORT_ORDER, SortOrder.SongSortOrder.SONG_A_Z); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java index 45c55980..67710a50 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java @@ -15,6 +15,8 @@ import android.os.Build; import android.support.annotation.AttrRes; import android.support.annotation.ColorInt; import android.support.annotation.DrawableRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.content.ContextCompat; import android.util.TypedValue; import android.view.View; @@ -36,7 +38,7 @@ public class Util { // return resId; // } - public static int resolveColor(Context context, @AttrRes int colorAttr) { + public static int resolveColor(@NonNull Context context, @AttrRes int colorAttr) { TypedArray a = context.obtainStyledAttributes(new int[]{colorAttr}); int resId = a.getColor(0, 0); a.recycle(); @@ -50,7 +52,7 @@ public class Util { // return result; // } - public static int getActionBarSize(Context context) { + public static int getActionBarSize(@NonNull Context context) { TypedValue typedValue = new TypedValue(); int[] textSizeAttr = new int[]{R.attr.actionBarSize}; int indexOfAttrTextSize = 0; @@ -60,7 +62,7 @@ public class Util { return actionBarSize; } - public static int getStatusBarHeight(Context context) { + public static int getStatusBarHeight(@NonNull Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { @@ -69,7 +71,7 @@ public class Util { return result; } - public static int getNavigationBarHeight(Context context) { + public static int getNavigationBarHeight(@NonNull Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { @@ -96,7 +98,7 @@ public class Util { // } @TargetApi(19) - public static void setStatusBarTranslucent(Window window, boolean translucent) { + public static void setStatusBarTranslucent(@NonNull Window window, boolean translucent) { if (translucent) { window.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, @@ -112,12 +114,13 @@ public class Util { WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } - public static void setAllowDrawUnderStatusBar(Window window) { + public static void setAllowDrawUnderStatusBar(@NonNull Window window) { window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } + @NonNull public static String getFileSizeString(long sizeInBytes) { long fileSizeInKB = sizeInBytes / 1024; long fileSizeInMB = fileSizeInKB / 1024; @@ -142,7 +145,7 @@ public class Util { // return Bitmap.createScaledBitmap(bitmap, albumArtSize, albumArtSize, false); // } - public static void hideSoftKeyboard(Activity activity) { + public static void hideSoftKeyboard(@Nullable Activity activity) { if (activity != null) { View currentFocus = activity.getCurrentFocus(); if (currentFocus != null) { @@ -160,15 +163,15 @@ public class Util { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; } - public static boolean isTablet(final Context context) { + public static boolean isTablet(@NonNull final Context context) { return context.getResources().getConfiguration().smallestScreenWidthDp >= 600; } - public static boolean isInPortraitMode(final Context context) { + public static boolean isInPortraitMode(@NonNull final Context context) { return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; } - public static Drawable getTintedDrawable(Context context, @DrawableRes int drawableResId, int color) { + public static Drawable getTintedDrawable(@NonNull Context context, @DrawableRes int drawableResId, int color) { Drawable drawable = ContextCompat.getDrawable(context, drawableResId); if (drawable != null) { drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); @@ -195,6 +198,7 @@ public class Util { return (alpha << 24) + (0x00ffffff & Color.HSVToColor(hsv)); } + @NonNull public static ColorStateList getEmptyColorStateList(int color) { return new ColorStateList( new int[][]{ @@ -205,14 +209,14 @@ public class Util { } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) - public static boolean isRTL(Context context) { + public static boolean isRTL(@NonNull Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Configuration config = context.getResources().getConfiguration(); return config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; } else return false; } - public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth, boolean recycleOld) { + public static Bitmap getResizedBitmap(@NonNull Bitmap bm, int newHeight, int newWidth, boolean recycleOld) { int width = bm.getWidth(); int height = bm.getHeight(); float scaleWidth = ((float) newWidth) / width; diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java index 8ecc296f..abafb57d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ViewUtil.java @@ -3,6 +3,8 @@ package com.kabouzeid.gramophone.util; import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.internal.view.menu.ListMenuItemView; import android.support.v7.internal.view.menu.MenuPopupHelper; import android.view.View; @@ -26,7 +28,7 @@ import java.lang.reflect.Field; public class ViewUtil { public final static int DEFAULT_COLOR_ANIMATION_DURATION = 500; - public static void disableViews(ViewGroup layout) { + public static void disableViews(@NonNull ViewGroup layout) { for (int i = 0; i < layout.getChildCount(); i++) { View child = layout.getChildAt(i); if (child instanceof ViewGroup) { @@ -37,7 +39,7 @@ public class ViewUtil { } } - public static void enableViews(ViewGroup layout) { + public static void enableViews(@NonNull ViewGroup layout) { for (int i = 0; i < layout.getChildCount(); i++) { View child = layout.getChildAt(i); if (child instanceof ViewGroup) { @@ -48,7 +50,7 @@ public class ViewUtil { } } - public static void setListViewHeightBasedOnChildren(ListView listView) { + public static void setListViewHeightBasedOnChildren(@NonNull ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) return; @@ -100,13 +102,13 @@ public class ViewUtil { animator.start(); } - public static void setBackgroundAlpha(View view, float alpha, int baseColor) { + public static void setBackgroundAlpha(@NonNull View view, float alpha, int baseColor) { int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24; int rgb = 0x00ffffff & baseColor; view.setBackgroundColor(a + rgb); } - public static void addOnGlobalLayoutListener(final View view, final Runnable runnable) { + public static void addOnGlobalLayoutListener(@NonNull final View view, @NonNull final Runnable runnable) { ViewTreeObserver vto = view.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override @@ -134,7 +136,7 @@ public class ViewUtil { // } // } - public static void setCheckBoxTintForMenu(MenuPopupHelper menuPopupHelper) { + public static void setCheckBoxTintForMenu(@Nullable MenuPopupHelper menuPopupHelper) { if (menuPopupHelper != null) { final ListView listView = menuPopupHelper.getPopup().getListView(); listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java b/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java index 89e7976e..5c644b07 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/ColorView.java @@ -9,6 +9,8 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.util.AttributeSet; import android.widget.FrameLayout; @@ -18,20 +20,23 @@ import com.kabouzeid.gramophone.util.Util; public class ColorView extends FrameLayout { private final Bitmap mCheck; + @NonNull private final Paint paint; + @NonNull private final Paint paintBorder; + @Nullable private Paint paintCheck; private final int borderWidth; - public ColorView(Context context) { + public ColorView(@NonNull Context context) { this(context, null, 0); } - public ColorView(Context context, AttributeSet attrs) { + public ColorView(@NonNull Context context, AttributeSet attrs) { this(context, attrs, 0); } - public ColorView(Context context, AttributeSet attrs, int defStyleAttr) { + public ColorView(@NonNull Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); final int checkSize = (int) context.getResources().getDimension(R.dimen.circle_view_check); mCheck = getResizedBitmap(BitmapFactory.decodeResource(context.getResources(), @@ -47,7 +52,7 @@ public class ColorView extends FrameLayout { setWillNotDraw(false); } - private static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { + private static Bitmap getResizedBitmap(@NonNull Bitmap bm, int newHeight, int newWidth) { int width = bm.getWidth(); int height = bm.getHeight(); float scaleWidth = ((float) newWidth) / width; @@ -88,7 +93,7 @@ public class ColorView extends FrameLayout { @Override - protected void onDraw(Canvas canvas) { + protected void onDraw(@NonNull Canvas canvas) { super.onDraw(canvas); int canvasSize = canvas.getWidth(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicSwitch.java b/app/src/main/java/com/kabouzeid/gramophone/views/DynamicSwitch.java index 12e92c5f..3b776f74 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/DynamicSwitch.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/DynamicSwitch.java @@ -5,6 +5,7 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.graphics.ColorUtils; import android.support.v4.graphics.drawable.DrawableCompat; @@ -25,17 +26,17 @@ public class DynamicSwitch extends SwitchCompat { static final int[] CHECKED_STATE_SET = new int[]{android.R.attr.state_checked}; static final int[] EMPTY_STATE_SET = new int[0]; - public DynamicSwitch(Context context) { + public DynamicSwitch(@NonNull Context context) { super(context); init(); } - public DynamicSwitch(Context context, AttributeSet attrs) { + public DynamicSwitch(@NonNull Context context, AttributeSet attrs) { super(context, attrs); init(); } - public DynamicSwitch(Context context, AttributeSet attrs, int defStyleAttr) { + public DynamicSwitch(@NonNull Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @@ -45,7 +46,7 @@ public class DynamicSwitch extends SwitchCompat { setTint(this, color); } - public static void setTint(SwitchCompat switchCompat, int color) { + public static void setTint(@NonNull SwitchCompat switchCompat, int color) { ColorStateList trackColorSl = createSwitchTrackColorStateList(switchCompat.getContext(), color); ColorStateList thumbColorSl = createSwitchThumbColorStateList(switchCompat.getContext(), color); @@ -59,7 +60,8 @@ public class DynamicSwitch extends SwitchCompat { switchCompat.setTrackDrawable(trackDrawable); } - private static ColorStateList createSwitchTrackColorStateList(Context context, int colorActivated) { + @NonNull + private static ColorStateList createSwitchTrackColorStateList(@NonNull Context context, int colorActivated) { final int[][] states = new int[3][]; final int[] colors = new int[3]; int i = 0; @@ -80,7 +82,8 @@ public class DynamicSwitch extends SwitchCompat { return new ColorStateList(states, colors); } - private static ColorStateList createSwitchThumbColorStateList(Context context, int colorActivated) { + @NonNull + private static ColorStateList createSwitchThumbColorStateList(@NonNull Context context, int colorActivated) { final int[][] states = new int[3][]; final int[] colors = new int[3]; int i = 0; 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 4d533a13..67f4170e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/FastScroller.java @@ -8,6 +8,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.StateListDrawable; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.MotionEvent; @@ -36,19 +37,20 @@ public class FastScroller extends FrameLayout { private boolean isHidden; private int hideTranslationX; + @Nullable private ViewPropertyAnimator currentAnimator = null; - public FastScroller(Context context, AttributeSet attrs) { + public FastScroller(@NonNull Context context, AttributeSet attrs) { super(context, attrs); initialise(context); } - public FastScroller(Context context, AttributeSet attrs, int defStyleAttr) { + public FastScroller(@NonNull Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initialise(context); } - private void initialise(Context context) { + private void initialise(@NonNull Context context) { hideTranslationX = getContext().getResources().getDimensionPixelSize(R.dimen.scrollbar_width) * (Util.isRTL(context) ? -1 : 1); setClipChildren(false); inflate(context, R.layout.vertical_recycler_fast_scroller_layout, this); @@ -76,7 +78,7 @@ public class FastScroller extends FrameLayout { return super.onTouchEvent(event); } - public void setRecyclerView(RecyclerView recyclerView) { + public void setRecyclerView(@NonNull RecyclerView recyclerView) { this.recyclerView = recyclerView; recyclerView.addOnScrollListener(scrollListener); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/HeightFitSquareImageView.java b/app/src/main/java/com/kabouzeid/gramophone/views/HeightFitSquareImageView.java index 0ded0ba1..5be34b5d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/HeightFitSquareImageView.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/HeightFitSquareImageView.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.views; import android.content.Context; +import android.support.annotation.NonNull; import android.util.AttributeSet; import android.widget.ImageView; @@ -13,11 +14,11 @@ public class HeightFitSquareImageView extends ImageView { super(context); } - public HeightFitSquareImageView(Context context, AttributeSet attrs) { + public HeightFitSquareImageView(@NonNull Context context, AttributeSet attrs) { super(context, attrs); } - public HeightFitSquareImageView(Context context, AttributeSet attrs, int defStyle) { + public HeightFitSquareImageView(@NonNull Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/HeightWidthFitSquareImageView.java b/app/src/main/java/com/kabouzeid/gramophone/views/HeightWidthFitSquareImageView.java index 93872632..710a33db 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/HeightWidthFitSquareImageView.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/HeightWidthFitSquareImageView.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.views; import android.content.Context; +import android.support.annotation.NonNull; import android.util.AttributeSet; import android.widget.ImageView; @@ -13,11 +14,11 @@ public class HeightWidthFitSquareImageView extends ImageView { super(context); } - public HeightWidthFitSquareImageView(Context context, AttributeSet attrs) { + public HeightWidthFitSquareImageView(@NonNull Context context, AttributeSet attrs) { super(context, attrs); } - public HeightWidthFitSquareImageView(Context context, AttributeSet attrs, int defStyle) { + public HeightWidthFitSquareImageView(@NonNull Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/PlayPauseDrawable.java b/app/src/main/java/com/kabouzeid/gramophone/views/PlayPauseDrawable.java index bcb55603..8f645315 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/PlayPauseDrawable.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/PlayPauseDrawable.java @@ -14,6 +14,7 @@ import android.graphics.Path; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; import android.util.Property; import android.view.animation.DecelerateInterpolator; @@ -25,12 +26,12 @@ public class PlayPauseDrawable extends Drawable { private static final Property PROGRESS = new Property(Float.class, "progress") { @Override - public Float get(PlayPauseDrawable d) { + public Float get(@NonNull PlayPauseDrawable d) { return d.getProgress(); } @Override - public void set(PlayPauseDrawable d, Float value) { + public void set(@NonNull PlayPauseDrawable d, Float value) { d.setProgress(value); } }; @@ -51,7 +52,7 @@ public class PlayPauseDrawable extends Drawable { private AnimatorSet animatorSet; - public PlayPauseDrawable(Context context) { + public PlayPauseDrawable(@NonNull Context context) { final Resources res = context.getResources(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); @@ -62,7 +63,7 @@ public class PlayPauseDrawable extends Drawable { } @Override - protected void onBoundsChange(final Rect bounds) { + protected void onBoundsChange(@NonNull final Rect bounds) { super.onBoundsChange(bounds); if (bounds.width() > 0 && bounds.height() > 0) { width = bounds.width(); @@ -71,7 +72,7 @@ public class PlayPauseDrawable extends Drawable { } @Override - public void draw(Canvas canvas) { + public void draw(@NonNull Canvas canvas) { leftPauseBar.rewind(); rightPauseBar.rewind(); @@ -126,6 +127,7 @@ public class PlayPauseDrawable extends Drawable { canvas.restore(); } + @NonNull private Animator getPausePlayAnimator() { isPlaySet = !isPlaySet; final Animator anim = ObjectAnimator.ofFloat(this, PROGRESS, isPlay ? 1 : 0, isPlay ? 0 : 1); diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/SquareIfPlaceImageView.java b/app/src/main/java/com/kabouzeid/gramophone/views/SquareIfPlaceImageView.java index ce034fd8..bb2483b8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/SquareIfPlaceImageView.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/SquareIfPlaceImageView.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.views; import android.content.Context; +import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; @@ -15,11 +16,11 @@ public class SquareIfPlaceImageView extends ImageView { super(context); } - public SquareIfPlaceImageView(Context context, AttributeSet attrs) { + public SquareIfPlaceImageView(@NonNull Context context, AttributeSet attrs) { super(context, attrs); } - public SquareIfPlaceImageView(Context context, AttributeSet attrs, int defStyle) { + public SquareIfPlaceImageView(@NonNull Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/WidthFitSquareImageView.java b/app/src/main/java/com/kabouzeid/gramophone/views/WidthFitSquareImageView.java index 3200fe24..f610043c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/views/WidthFitSquareImageView.java +++ b/app/src/main/java/com/kabouzeid/gramophone/views/WidthFitSquareImageView.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.views; import android.content.Context; +import android.support.annotation.NonNull; import android.util.AttributeSet; import android.widget.ImageView; @@ -13,11 +14,11 @@ public class WidthFitSquareImageView extends ImageView { super(context); } - public WidthFitSquareImageView(Context context, AttributeSet attrs) { + public WidthFitSquareImageView(@NonNull Context context, AttributeSet attrs) { super(context, attrs); } - public WidthFitSquareImageView(Context context, AttributeSet attrs, int defStyle) { + public WidthFitSquareImageView(@NonNull Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }