Added an option to show the "wiki" of albums.

This commit is contained in:
Materight 2017-06-11 22:01:49 +02:00
commit 2b4b5f1638
6 changed files with 93 additions and 2 deletions

View file

@ -24,6 +24,8 @@ public class LastFmAlbum {
@Expose
private List<Image> image = new ArrayList<>();
@Expose
private Wiki wiki;
public List<Image> 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")

View file

@ -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<LastFmAlbum> getAlbumInfo(@Query("album") String albumName, @Query("artist") String artistName);
Call<LastFmAlbum> getAlbumInfo(@Query("album") String albumName, @Query("artist") String artistName, @Nullable @Query("lang") String language);
@GET(BASE_QUERY_PARAMETERS + "&method=artist.getinfo")
Call<LastFmArtist> getArtistInfo(@Query("artist") String artistName, @Nullable @Query("lang") String language, @Nullable @Header("Cache-Control") String cacheControl);

View file

@ -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<LastFmAlbum> wikiCallback = new Callback<LastFmAlbum>(){
@Override
public void onResponse(Call<LastFmAlbum> call, Response<LastFmAlbum> 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<LastFmAlbum> 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);
}

View file

@ -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<LastFmAlbum>() {
lastFMRestClient.getApiService().getAlbumInfo(albumTitleStr, albumArtistNameStr, null).enqueue(new Callback<LastFmAlbum>() {
@Override
public void onResponse(Call<LastFmAlbum> call, Response<LastFmAlbum> response) {
LastFmAlbum lastFmAlbum = response.body();

View file

@ -9,6 +9,11 @@
android:title="@string/action_shuffle_album"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_wiki"
android:title="@string/wiki"
app:showAsAction="never" />
<item
android:id="@+id/action_go_to_artist"
android:title="@string/action_go_to_artist"

View file

@ -40,6 +40,7 @@
<string name="unplayable_file">Couldn\u2019t play this song.</string>
<string name="biography_unavailable">Couldn\u2019t find the artists biography.</string>
<string name="biography">Biography</string>
<string name="wiki">Wiki</string>
<string name="audio_focus_denied">Audio focus denied.</string>
<string name="album">Album</string>
<string name="artist">Artist</string>