aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2016-01-21 19:36:37 -0800
committerScott Jackson <daneren2005@gmail.com>2016-01-21 19:36:37 -0800
commit48e1ba9468c5cb7f12cffef0a31aa2d30b633fab (patch)
tree0245540926054fc93046f8dab2405665be85d0f1 /app/src/main/java/github
parent814d50293f6f40a8ba70a23506ad19454dbfb006 (diff)
downloaddsub-48e1ba9468c5cb7f12cffef0a31aa2d30b633fab.tar.gz
dsub-48e1ba9468c5cb7f12cffef0a31aa2d30b633fab.tar.bz2
dsub-48e1ba9468c5cb7f12cffef0a31aa2d30b633fab.zip
Fixes #626: Put missing artists inline instead of requiring dialog
Diffstat (limited to 'app/src/main/java/github')
-rw-r--r--app/src/main/java/github/daneren2005/dsub/adapter/SimilarArtistAdapter.java53
-rw-r--r--app/src/main/java/github/daneren2005/dsub/domain/Artist.java10
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SimilarArtistFragment.java78
3 files changed, 103 insertions, 38 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/SimilarArtistAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/SimilarArtistAdapter.java
new file mode 100644
index 00000000..2234d4cd
--- /dev/null
+++ b/app/src/main/java/github/daneren2005/dsub/adapter/SimilarArtistAdapter.java
@@ -0,0 +1,53 @@
+/*
+ This file is part of Subsonic.
+ Subsonic is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ Subsonic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
+ Copyright 2016 (C) Scott Jackson
+*/
+
+package github.daneren2005.dsub.adapter;
+
+import android.content.Context;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+import github.daneren2005.dsub.domain.Artist;
+import github.daneren2005.dsub.view.ArtistView;
+import github.daneren2005.dsub.view.UpdateView;
+
+public class SimilarArtistAdapter extends SectionAdapter<Artist> {
+ public static int VIEW_TYPE_ARTIST = 4;
+
+ public SimilarArtistAdapter(Context context, List<Artist> artists, OnItemClickedListener onItemClickedListener) {
+ super(context, artists);
+ this.onItemClickedListener = onItemClickedListener;
+ }
+ public SimilarArtistAdapter(Context context, List<String> headers, List<List<Artist>> sections, OnItemClickedListener onItemClickedListener) {
+ super(context, headers, sections);
+ this.onItemClickedListener = onItemClickedListener;
+ }
+
+ @Override
+ public UpdateView.UpdateViewHolder onCreateSectionViewHolder(ViewGroup parent, int viewType) {
+ return new UpdateView.UpdateViewHolder(new ArtistView(context));
+ }
+
+ @Override
+ public void onBindViewHolder(UpdateView.UpdateViewHolder holder, Artist item, int viewType) {
+ holder.getUpdateView().setObject(item);
+ }
+
+ @Override
+ public int getItemViewType(Artist item) {
+ return VIEW_TYPE_ARTIST;
+ }
+}
diff --git a/app/src/main/java/github/daneren2005/dsub/domain/Artist.java b/app/src/main/java/github/daneren2005/dsub/domain/Artist.java
index 56e8f92e..9d4cbe29 100644
--- a/app/src/main/java/github/daneren2005/dsub/domain/Artist.java
+++ b/app/src/main/java/github/daneren2005/dsub/domain/Artist.java
@@ -30,6 +30,8 @@ import java.util.List;
*/
public class Artist implements Serializable {
private static final String TAG = Artist.class.getSimpleName();
+ public static final String ROOT_ID = "-1";
+ public static final String MISSING_ID = "-2";
private String id;
private String name;
@@ -38,6 +40,14 @@ public class Artist implements Serializable {
private Integer rating;
private int closeness;
+ public Artist() {
+
+ }
+ public Artist(String id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
public String getId() {
return id;
}
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SimilarArtistFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SimilarArtistFragment.java
index 93e3a93a..a41b9d6f 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SimilarArtistFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SimilarArtistFragment.java
@@ -15,14 +15,16 @@
package github.daneren2005.dsub.fragments;
+import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import github.daneren2005.dsub.R;
-import github.daneren2005.dsub.adapter.ArtistAdapter;
import github.daneren2005.dsub.adapter.SectionAdapter;
+import github.daneren2005.dsub.adapter.SimilarArtistAdapter;
import github.daneren2005.dsub.domain.Artist;
import github.daneren2005.dsub.domain.ArtistInfo;
import github.daneren2005.dsub.domain.MusicDirectory;
@@ -35,6 +37,8 @@ import github.daneren2005.dsub.util.Util;
import github.daneren2005.dsub.view.UpdateView;
import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@@ -52,18 +56,6 @@ public class SimilarArtistFragment extends SelectRecyclerFragment<Artist> {
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
- super.onCreateOptionsMenu(menu, menuInflater);
- if(!primaryFragment) {
- return;
- }
-
- if(info.getMissingArtists().isEmpty()) {
- menu.removeItem(R.id.menu_show_missing);
- }
- }
-
- @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_play_now:
@@ -72,9 +64,6 @@ public class SimilarArtistFragment extends SelectRecyclerFragment<Artist> {
case R.id.menu_shuffle:
playAll(true);
return true;
- case R.id.menu_show_missing:
- showMissingArtists();
- break;
}
return super.onOptionsItemSelected(item);
@@ -82,8 +71,10 @@ public class SimilarArtistFragment extends SelectRecyclerFragment<Artist> {
@Override
public void onCreateContextMenu(Menu menu, MenuInflater menuInflater, UpdateView<Artist> updateView, Artist item) {
- onCreateContextMenuSupport(menu, menuInflater, updateView, item);
- recreateContextMenu(menu);
+ if(!Artist.MISSING_ID.equals(item.getId())) {
+ onCreateContextMenuSupport(menu, menuInflater, updateView, item);
+ recreateContextMenu(menu);
+ }
}
@Override
@@ -93,14 +84,21 @@ public class SimilarArtistFragment extends SelectRecyclerFragment<Artist> {
@Override
public void onItemClicked(UpdateView<Artist> updateView, Artist artist) {
- SubsonicFragment fragment = new SelectDirectoryFragment();
- Bundle args = new Bundle();
- args.putString(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
- args.putString(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
- args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
- fragment.setArguments(args);
-
- replaceFragment(fragment);
+ if(Artist.MISSING_ID.equals(artist.getId())) {
+ String url = "http://www.last.fm/music/" + URLEncoder.encode(artist.getName());
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
+ } else {
+ SubsonicFragment fragment = new SelectDirectoryFragment();
+ Bundle args = new Bundle();
+ args.putString(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
+ args.putString(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
+ fragment.setArguments(args);
+
+ replaceFragment(fragment);
+ }
}
@Override
@@ -109,8 +107,22 @@ public class SimilarArtistFragment extends SelectRecyclerFragment<Artist> {
}
@Override
- public SectionAdapter getAdapter(List<Artist> objects) {
- return new ArtistAdapter(context, objects, this);
+ public SectionAdapter getAdapter(List<Artist> artists) {
+ if(info.getMissingArtists().isEmpty()) {
+ return new SimilarArtistAdapter(context, artists, this);
+ } else {
+ List<String> headers = new ArrayList<>();
+ headers.add(null);
+ headers.add(context.getResources().getString(R.string.menu_similar_artists_missing));
+
+ List<Artist> missingArtists = new ArrayList<>();
+ for(String artistName: info.getMissingArtists()) {
+ Artist artist = new Artist(Artist.MISSING_ID, artistName);
+ missingArtists.add(artist);
+ }
+
+ return new SimilarArtistAdapter(context, headers, Arrays.asList(artists, missingArtists), this);
+ }
}
@Override
@@ -124,16 +136,6 @@ public class SimilarArtistFragment extends SelectRecyclerFragment<Artist> {
return R.string.menu_similar_artists;
}
- private void showMissingArtists() {
- StringBuilder b = new StringBuilder();
-
- for(String name: info.getMissingArtists()) {
- b.append("<h3><a href=\"https://www.google.com/#q=" + URLEncoder.encode(name) + "\">" + name + "</a></h3> ");
- }
-
- Util.showHTMLDialog(context, R.string.menu_similar_artists, b.toString());
- }
-
private void playAll(final boolean shuffle) {
new RecursiveLoader(context) {
@Override