Option to redownload artist image
- redownload artist image - better search
This commit is contained in:
parent
3be34a854f
commit
59ca3a8c8f
12 changed files with 142 additions and 31 deletions
|
|
@ -2,6 +2,7 @@ package com.kabouzeid.materialmusic.adapter;
|
|||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Typeface;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
|
@ -38,16 +39,22 @@ public class SearchAdapter extends ArrayAdapter<SearchEntry> {
|
|||
final ImageView imageView = (ImageView) convertView.findViewById(R.id.image);
|
||||
|
||||
if (item instanceof SearchActivity.LabelEntry) {
|
||||
title.setTypeface(null, Typeface.BOLD);
|
||||
subTitle.setVisibility(View.GONE);
|
||||
imageView.setVisibility(View.GONE);
|
||||
convertView.setBackgroundColor(Util.resolveColor(getContext(), R.attr.colorPrimary));
|
||||
} else {
|
||||
title.setTypeface(null, Typeface.NORMAL);
|
||||
subTitle.setVisibility(View.VISIBLE);
|
||||
imageView.setVisibility(View.VISIBLE);
|
||||
convertView.setBackgroundColor(Color.TRANSPARENT);
|
||||
}
|
||||
|
||||
title.setText(item.getTitle());
|
||||
subTitle.setText(item.getSubTitle());
|
||||
item.loadImage(imageView);
|
||||
|
||||
imageView.setImageBitmap(null);
|
||||
item.loadImage(getContext(), imageView);
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,10 +24,15 @@ import org.json.JSONObject;
|
|||
public class LastFMArtistImageLoader {
|
||||
public static final String TAG = LastFMArtistImageLoader.class.getSimpleName();
|
||||
|
||||
@Deprecated
|
||||
public static void loadArtistImage(Context context, String queryArtist, ArtistImageLoaderCallback callback) {
|
||||
loadArtistImage(context, queryArtist, false, callback);
|
||||
}
|
||||
|
||||
public static void loadArtistImage(Context context, String queryArtist, boolean forceDownload, ArtistImageLoaderCallback callback) {
|
||||
if (queryArtist != null) {
|
||||
String artistJSON = ArtistJSONStore.getInstance(context).getArtistJSON(queryArtist);
|
||||
if (artistJSON != null) {
|
||||
if (artistJSON != null && !forceDownload) {
|
||||
Log.i(TAG, queryArtist + " is in cache.");
|
||||
try {
|
||||
loadArtistImageFromJSON(new JSONObject(artistJSON), callback);
|
||||
|
|
@ -35,7 +40,11 @@ public class LastFMArtistImageLoader {
|
|||
Log.e(TAG, "Error while parsing string from cache to JSONObject", e);
|
||||
}
|
||||
} else {
|
||||
Log.i(TAG, queryArtist + " is not in cache.");
|
||||
if(forceDownload){
|
||||
Log.i(TAG, queryArtist + " force re-download");
|
||||
} else {
|
||||
Log.i(TAG, queryArtist + " is not in cache.");
|
||||
}
|
||||
downloadArtistJSONAndStartImageDownload(context, queryArtist, callback);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ public class LastFMArtistInfoUtil {
|
|||
|
||||
public static void saveArtistJSONDataToCacheAndDisk(Context context, String artist, JSONObject jsonObject) {
|
||||
Log.i(TAG, "Saving new JSON artist data for " + artist + "...");
|
||||
ArtistJSONStore.getInstance(context).removeItem(artist);
|
||||
ArtistJSONStore.getInstance(context).addArtistJSON(artist, jsonObject.toString());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,10 +24,15 @@ import org.json.JSONObject;
|
|||
public class LastFMArtistThumbnailLoader {
|
||||
public static final String TAG = LastFMArtistThumbnailLoader.class.getSimpleName();
|
||||
|
||||
@Deprecated
|
||||
public static void loadArtistThumbnail(Context context, String queryArtist, ArtistThumbnailLoaderCallback callback) {
|
||||
loadArtistThumbnail(context, queryArtist, false, callback);
|
||||
}
|
||||
|
||||
public static void loadArtistThumbnail(Context context, String queryArtist, boolean forceDownload, ArtistThumbnailLoaderCallback callback) {
|
||||
if (queryArtist != null) {
|
||||
String artistJSON = ArtistJSONStore.getInstance(context).getArtistJSON(queryArtist);
|
||||
if (artistJSON != null) {
|
||||
if (artistJSON != null && !forceDownload) {
|
||||
Log.i(TAG, queryArtist + " is in cache.");
|
||||
try {
|
||||
loadArtistThumbnailFromJSON(new JSONObject(artistJSON), callback);
|
||||
|
|
@ -35,7 +40,11 @@ public class LastFMArtistThumbnailLoader {
|
|||
Log.e(TAG, "Error while parsing string from cache to JSONObject", e);
|
||||
}
|
||||
} else {
|
||||
Log.i(TAG, queryArtist + " is not in cache.");
|
||||
if(forceDownload){
|
||||
Log.i(TAG, queryArtist + " force re-download");
|
||||
} else {
|
||||
Log.i(TAG, queryArtist + " is not in cache.");
|
||||
}
|
||||
downloadArtistThumbnail(context, queryArtist, callback);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
package com.kabouzeid.materialmusic.model;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.kabouzeid.materialmusic.util.ImageLoaderUtil;
|
||||
import com.kabouzeid.materialmusic.util.MusicUtil;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
|
||||
/**
|
||||
* Created by karim on 22.11.14.
|
||||
*/
|
||||
|
|
@ -43,7 +48,7 @@ public class Album implements SearchEntry {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void loadImage(ImageView imageView) {
|
||||
|
||||
public void loadImage(Context context, ImageView imageView) {
|
||||
ImageLoader.getInstance().displayImage(MusicUtil.getAlbumArtUri(id).toString(), imageView, new ImageLoaderUtil.defaultAlbumArtOnFailed());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
package com.kabouzeid.materialmusic.model;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.kabouzeid.materialmusic.R;
|
||||
import com.kabouzeid.materialmusic.lastfm.artist.LastFMArtistThumbnailLoader;
|
||||
|
||||
/**
|
||||
* Created by karim on 29.12.14.
|
||||
*/
|
||||
|
|
@ -36,7 +41,19 @@ public class Artist implements SearchEntry {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void loadImage(ImageView imageView) {
|
||||
|
||||
public void loadImage(Context context, final ImageView imageView) {
|
||||
imageView.setTag(name);
|
||||
LastFMArtistThumbnailLoader.loadArtistThumbnail(context, name, new LastFMArtistThumbnailLoader.ArtistThumbnailLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistThumbnailLoaded(Bitmap thumbnail) {
|
||||
if (imageView.getTag().equals(name)) {
|
||||
if (thumbnail != null) {
|
||||
imageView.setImageBitmap(thumbnail);
|
||||
} else {
|
||||
imageView.setImageResource(R.drawable.default_artist_image);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.materialmusic.model;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.ImageView;
|
||||
|
||||
/**
|
||||
|
|
@ -10,5 +11,5 @@ public interface SearchEntry {
|
|||
|
||||
public String getSubTitle();
|
||||
|
||||
public void loadImage(ImageView imageView);
|
||||
public void loadImage(Context context, ImageView imageView);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
package com.kabouzeid.materialmusic.model;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.kabouzeid.materialmusic.util.ImageLoaderUtil;
|
||||
import com.kabouzeid.materialmusic.util.MusicUtil;
|
||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
|
|
@ -51,7 +56,7 @@ public class Song implements Serializable, SearchEntry {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void loadImage(ImageView imageView) {
|
||||
|
||||
public void loadImage(Context context, ImageView imageView) {
|
||||
ImageLoader.getInstance().displayImage(MusicUtil.getAlbumArtUri(albumId).toString(), imageView, new ImageLoaderUtil.defaultAlbumArtOnFailed());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import android.view.ViewGroup;
|
|||
import android.view.animation.DecelerateInterpolator;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks;
|
||||
import com.github.ksoichiro.android.observablescrollview.ScrollState;
|
||||
|
|
@ -103,7 +104,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
|
||||
@Override
|
||||
public void onTransitionEnd(Transition transition) {
|
||||
setUpArtistImageAndApplyPalette();
|
||||
setUpArtistImageAndApplyPalette(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -160,7 +161,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
artistTitleText.setText(artist.name);
|
||||
ViewHelper.setAlpha(artistArtOverlayView, 0);
|
||||
|
||||
setUpArtistImageAndApplyPalette();
|
||||
setUpArtistImageAndApplyPalette(false);
|
||||
setUpViewPatch();
|
||||
setUpSlidingTabs();
|
||||
}
|
||||
|
|
@ -312,8 +313,8 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
}
|
||||
}
|
||||
|
||||
private void setUpArtistImageAndApplyPalette() {
|
||||
LastFMArtistImageLoader.loadArtistImage(this, artist.name, new LastFMArtistImageLoader.ArtistImageLoaderCallback() {
|
||||
private void setUpArtistImageAndApplyPalette(final boolean forceDownload) {
|
||||
LastFMArtistImageLoader.loadArtistImage(this, artist.name, forceDownload, new LastFMArtistImageLoader.ArtistImageLoaderCallback() {
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
public void onArtistImageLoaded(Bitmap artistImage) {
|
||||
|
|
@ -321,7 +322,9 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
artistImageView.setImageBitmap(artistImage);
|
||||
applyPalette(artistImage);
|
||||
}
|
||||
//if (Util.hasLollipopSDK()) startPostponedEnterTransition();
|
||||
if(forceDownload){
|
||||
Toast.makeText(ArtistDetailActivity.this, getResources().getString(R.string.updated_artist_image_for) + " " + artist.name, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -383,6 +386,9 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
case android.R.id.home:
|
||||
super.onBackPressed();
|
||||
return true;
|
||||
case R.id.action_re_download_artist_image:
|
||||
Toast.makeText(ArtistDetailActivity.this, getResources().getString(R.string.updating), Toast.LENGTH_SHORT).show();
|
||||
setUpArtistImageAndApplyPalette(true);
|
||||
case R.id.action_settings:
|
||||
return true;
|
||||
case R.id.action_current_playing:
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.kabouzeid.materialmusic.ui.activities;
|
|||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.ActionBar;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
|
|
@ -9,6 +10,7 @@ import android.support.v7.widget.SearchView;
|
|||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
|
@ -34,6 +36,7 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
public static final String TAG = SearchActivity.class.getSimpleName();
|
||||
|
||||
private ListView listView;
|
||||
private SearchView searchView;
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
|
|
@ -69,6 +72,17 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
}
|
||||
});
|
||||
|
||||
listView.setOnTouchListener(new View.OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
Util.hideSoftKeyboard(SearchActivity.this);
|
||||
if(searchView != null){
|
||||
searchView.clearFocus();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
|
@ -101,7 +115,7 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
getMenuInflater().inflate(R.menu.menu_search, menu);
|
||||
|
||||
final MenuItem search = menu.findItem(R.id.action_search);
|
||||
SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
|
||||
searchView = (SearchView) MenuItemCompat.getActionView(search);
|
||||
searchView.setIconified(false);
|
||||
searchView.setIconifiedByDefault(false);
|
||||
|
||||
|
|
@ -111,7 +125,10 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
return false;
|
||||
onQueryTextChange(query);
|
||||
Util.hideSoftKeyboard(SearchActivity.this);
|
||||
searchView.clearFocus();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -148,26 +165,51 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
}
|
||||
|
||||
private void search(String query) {
|
||||
List<SearchEntry> results = new ArrayList<>();
|
||||
if (!query.trim().equals("")) {
|
||||
List<SearchEntry> results = new ArrayList<>();
|
||||
results.add(new LabelEntry("Songs"));
|
||||
results.addAll(SongLoader.getSongs(this, query));
|
||||
results.add(new LabelEntry("Artists"));
|
||||
results.addAll(ArtistLoader.getArtists(this, query));
|
||||
results.add(new LabelEntry("Albums"));
|
||||
results.addAll(AlbumLoader.getAlbums(this, query));
|
||||
ArrayAdapter adapter = new SearchAdapter(this, results);
|
||||
listView.setAdapter(adapter);
|
||||
} else {
|
||||
listView.setAdapter(null);
|
||||
LabelEntry songLabel = new LabelEntry(getResources().getString(R.string.songs).toUpperCase());
|
||||
results.add(songLabel);
|
||||
List<Song> songs = SongLoader.getSongs(this, query);
|
||||
results.addAll(songs);
|
||||
songLabel.setNumber(songs.size());
|
||||
|
||||
LabelEntry artistLabel = new LabelEntry(getResources().getString(R.string.artists).toUpperCase());
|
||||
results.add(artistLabel);
|
||||
List<Artist> artists = ArtistLoader.getArtists(this, query);
|
||||
results.addAll(artists);
|
||||
artistLabel.setNumber(artists.size());
|
||||
|
||||
LabelEntry albumLabel = new LabelEntry(getResources().getString(R.string.albums).toUpperCase());
|
||||
results.add(albumLabel);
|
||||
List<Album> albums = AlbumLoader.getAlbums(this, query);
|
||||
results.addAll(albums);
|
||||
albumLabel.setNumber(albums.size());
|
||||
}
|
||||
if(results.size() <= 3){
|
||||
results.clear();
|
||||
results.add(new LabelEntry(getResources().getString(R.string.no_results).toUpperCase()));
|
||||
}
|
||||
ArrayAdapter adapter = new SearchAdapter(this, results);
|
||||
listView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static class LabelEntry implements SearchEntry {
|
||||
String title;
|
||||
String label;
|
||||
|
||||
public LabelEntry(String label) {
|
||||
this.label = label;
|
||||
this.title = label;
|
||||
}
|
||||
|
||||
public void setNumber(int number){
|
||||
if(number != -1) {
|
||||
label = title + " (" + number + ")";
|
||||
} else {
|
||||
label = title;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -181,7 +223,7 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void loadImage(ImageView imageView) {
|
||||
public void loadImage(Context context, ImageView imageView) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue