From 2b4b5f16386578e834fb26a78f033eb7404c223e Mon Sep 17 00:00:00 2001 From: Materight Date: Sun, 11 Jun 2017 22:01:49 +0200 Subject: [PATCH] Added an option to show the "wiki" of albums. --- .../lastfm/rest/model/LastFmAlbum.java | 23 +++++++ .../lastfm/rest/service/LastFMService.java | 2 +- .../ui/activities/AlbumDetailActivity.java | 62 +++++++++++++++++++ .../tageditor/AlbumTagEditorActivity.java | 2 +- app/src/main/res/menu/menu_album_detail.xml | 5 ++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 93 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/model/LastFmAlbum.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/model/LastFmAlbum.java index 1992b7e3..4db56c78 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/model/LastFmAlbum.java +++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/model/LastFmAlbum.java @@ -24,6 +24,8 @@ public class LastFmAlbum { @Expose private List image = new ArrayList<>(); + @Expose + private Wiki wiki; public List getImage() { return image; @@ -33,6 +35,27 @@ public class LastFmAlbum { this.image = image; } + public Wiki getWiki() { return wiki; } + + public void setWiki(Wiki wiki) { + this.wiki = wiki; + } + + public class Wiki { + + @Expose + private String content; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + } + public static class Image { @SerializedName("#text") diff --git a/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/service/LastFMService.java b/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/service/LastFMService.java index 36136ba8..4a9b33c7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/service/LastFMService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/lastfm/rest/service/LastFMService.java @@ -18,7 +18,7 @@ public interface LastFMService { String BASE_QUERY_PARAMETERS = "?format=json&autocorrect=1&api_key=" + API_KEY; @GET(BASE_QUERY_PARAMETERS + "&method=album.getinfo") - Call getAlbumInfo(@Query("album") String albumName, @Query("artist") String artistName); + Call getAlbumInfo(@Query("album") String albumName, @Query("artist") String artistName, @Nullable @Query("lang") String language); @GET(BASE_QUERY_PARAMETERS + "&method=artist.getinfo") Call getArtistInfo(@Query("artist") String artistName, @Nullable @Query("lang") String language, @Nullable @Header("Cache-Control") String cacheControl); 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 c3929f9d..1e9381a3 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 @@ -5,18 +5,23 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.text.Html; +import android.text.Spanned; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import com.afollestad.materialcab.MaterialCab; +import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.util.DialogUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestListener; @@ -34,6 +39,8 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.LoaderIds; import com.kabouzeid.gramophone.interfaces.PaletteColorHolder; +import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient; +import com.kabouzeid.gramophone.lastfm.rest.model.LastFmAlbum; import com.kabouzeid.gramophone.loader.AlbumLoader; import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks; import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader; @@ -46,8 +53,13 @@ import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.Util; import com.kabouzeid.gramophone.util.ViewUtil; +import java.util.Locale; + import butterknife.BindView; import butterknife.ButterKnife; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; /** * Be careful when changing things in this Activity! @@ -84,6 +96,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private int toolbarColor; private float toolbarAlpha; + @Nullable + private Spanned wiki; + private LastFMRestClient lastFMRestClient; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -92,6 +108,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements supportPostponeEnterTransition(); + lastFMRestClient = new LastFMRestClient(this); + setUpObservableListViewParams(); setUpToolBar(); setUpViews(); @@ -237,6 +255,42 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements return true; } + private MaterialDialog getWikiDialog() { + return new MaterialDialog.Builder(AlbumDetailActivity.this) + .title(getAlbum().getTitle()) + .content(wiki != null ? wiki : "") + .positiveText(android.R.string.ok) + .build(); + } + + private void loadWiki() { + final Callback wikiCallback = new Callback(){ + @Override + public void onResponse(Call call, Response response) { + LastFmAlbum lastFmAlbum = response.body(); + if (lastFmAlbum.getAlbum().getWiki() != null) { + String wik = lastFmAlbum.getAlbum().getWiki().getContent(); + if (wik != null && !wik.trim().equals("")) { + wiki = Html.fromHtml(wik); + return; + } + } + if(call.request().url().queryParameter("lang") != null){ + //If the "lang" parameter is set and no wiki is given, retry with default language + lastFMRestClient.getApiService().getAlbumInfo(getAlbum().getTitle(), getAlbum().getArtistName(), null).enqueue(this); + } + wiki = null; + } + + @Override + public void onFailure(Call call, Throwable t) { + t.printStackTrace(); + wiki = null; + } + }; + lastFMRestClient.getApiService().getAlbumInfo(getAlbum().getTitle(), getAlbum().getArtistName(), Locale.getDefault().getLanguage()).enqueue(wikiCallback); + } + @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); @@ -261,6 +315,13 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements case R.id.action_go_to_artist: NavigationUtil.goToArtist(this, getAlbum().getArtistId()); return true; + case R.id.action_wiki: + if (wiki != null) { + getWikiDialog().show(); + } else { + Toast.makeText(AlbumDetailActivity.this, getResources().getString(R.string.biography_unavailable), Toast.LENGTH_SHORT).show(); + } + return true; } return super.onOptionsItemSelected(item); } @@ -327,6 +388,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private void setAlbum(Album album) { this.album = album; loadAlbumCover(); + loadWiki(); albumTitleView.setText(album.getTitle()); adapter.swapDataSet(album.songs); } 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 7a6fd6ce..ef8ec723 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 @@ -100,7 +100,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text Toast.makeText(this, getResources().getString(R.string.album_or_artist_empty), Toast.LENGTH_SHORT).show(); return; } - lastFMRestClient.getApiService().getAlbumInfo(albumTitleStr, albumArtistNameStr).enqueue(new Callback() { + lastFMRestClient.getApiService().getAlbumInfo(albumTitleStr, albumArtistNameStr, null).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { LastFmAlbum lastFmAlbum = response.body(); diff --git a/app/src/main/res/menu/menu_album_detail.xml b/app/src/main/res/menu/menu_album_detail.xml index 035ab981..40b72e1d 100644 --- a/app/src/main/res/menu/menu_album_detail.xml +++ b/app/src/main/res/menu/menu_album_detail.xml @@ -9,6 +9,11 @@ android:title="@string/action_shuffle_album" app:showAsAction="ifRoom" /> + + Couldn\u2019t play this song. Couldn\u2019t find the artists biography. Biography + Wiki Audio focus denied. Album Artist