From 0edd09569eb1b487bc9e34a44c32267be568afaf Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Wed, 11 Aug 2021 16:08:53 +0200 Subject: [PATCH] Force replace html dirty text from biography --- .../cappielloantonio/play/model/Artist.java | 10 +++++++ .../play/ui/fragment/ArtistPageFragment.java | 14 ++++++++- .../cappielloantonio/play/util/MusicUtil.java | 29 ++++++++----------- .../main/res/layout/fragment_artist_page.xml | 5 ++-- 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/model/Artist.java b/app/src/main/java/com/cappielloantonio/play/model/Artist.java index 16650eb3..4304f206 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Artist.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Artist.java @@ -34,6 +34,7 @@ public class Artist implements Parcelable { public boolean favorite; public String bio; public String imageUrl; + public String lastfm; public Artist(ArtistID3 artistID3) { this.id = artistID3.getId(); @@ -67,6 +68,7 @@ public class Artist implements Parcelable { this.similarArtists = MappingUtil.mapSimilarArtist(artistInfo2.getSimilarArtists()); this.bio = artistInfo2.getBiography(); this.imageUrl = artistInfo2.getLargeImageUrl(); + this.lastfm = artistInfo2.getLastFmUrl(); } public Artist(String id, String name) { @@ -170,6 +172,14 @@ public class Artist implements Parcelable { this.imageUrl = imageUrl; } + public String getLastfm() { + return lastfm; + } + + public void setLastfm(String lastfm) { + this.lastfm = lastfm; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java index 980ece32..9dfce0dd 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java @@ -1,8 +1,10 @@ package com.cappielloantonio.play.ui.fragment; import android.annotation.SuppressLint; +import android.content.Intent; import android.graphics.BlendMode; import android.graphics.BlendModeColorFilter; +import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -110,13 +112,23 @@ public class ArtistPageFragment extends Fragment { } private void initArtistInfo() { + artistPageViewModel.getArtistInfo(artistPageViewModel.getArtist().getId()).observe(requireActivity(), artist -> { + if (bind != null) bind.artistPageBioSector.setVisibility(artist.getBio() != null ? View.VISIBLE : View.GONE); + if (bind != null) bind.bioMoreTextViewClickable.setVisibility(artist.getLastfm() != null ? View.VISIBLE : View.GONE); + CustomGlideRequest.Builder .from(requireContext(), null, CustomGlideRequest.ARTIST_PIC, artist.getImageUrl()) .build() .into(bind.artistBackdropImageView); - bind.bioTextView.setText(MusicUtil.HTMLParser(artist.getBio())); + bind.bioTextView.setText(MusicUtil.forceReadableString(artist.getBio())); + + bind.bioMoreTextViewClickable.setOnClickListener(v -> { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(artist.getLastfm())); + startActivity(intent); + }); }); } diff --git a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java index 9c2b0be5..abe864d3 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java @@ -9,6 +9,7 @@ import com.cappielloantonio.play.model.Song; import com.google.android.exoplayer2.MediaItem; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -61,6 +62,17 @@ public class MusicUtil { return ""; } + public static String forceReadableString(String string) { + if (string != null) { + return getReadableString(string) + .replaceAll(""", "\"") + .replaceAll("'", "'") + .replaceAll("]+)>((?:.(?!))*.)", ""); + } + + return ""; + } + public static List getReadableStrings(List strings) { List readableStrings = new ArrayList<>(); @@ -93,21 +105,4 @@ public class MusicUtil { String uri = MusicUtil.getSongFileUri(song); return MediaItem.fromUri(uri); } - - public static CharSequence HTMLParser(String toParse) { - if (toParse != null && containsHTML(toParse)) { - return Html.fromHtml(toParse, Html.FROM_HTML_MODE_LEGACY); - } - else { - return toParse; - } - } - - private static boolean containsHTML(String toParse) { - String HTML_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>"; - Pattern pattern = Pattern.compile(HTML_PATTERN); - - Matcher matcher = pattern.matcher(toParse); - return matcher.find(); - } } diff --git a/app/src/main/res/layout/fragment_artist_page.xml b/app/src/main/res/layout/fragment_artist_page.xml index 933eecf9..54259a32 100644 --- a/app/src/main/res/layout/fragment_artist_page.xml +++ b/app/src/main/res/layout/fragment_artist_page.xml @@ -134,7 +134,7 @@ android:layout_weight="1" android:paddingStart="16dp" android:paddingEnd="8dp" - android:text="Bio" /> + android:text="Biography" /> + android:paddingTop="8dp" + android:paddingBottom="8dp"/>