summaryrefslogtreecommitdiff
path: root/org.fox.ttrss
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-17 16:40:17 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-17 16:40:17 +0300
commit361abacbe113eda94617d5629d1f20dc5b7da05a (patch)
treea735725486624f1de32602f9ac521ef1bc2c02b4 /org.fox.ttrss
parent6964d2cbce2e23e8d8767cc4192a3f46f93ccd42 (diff)
cleanup video fragment a bit, do all gallery model processing in a single background job
Diffstat (limited to 'org.fox.ttrss')
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java140
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java56
2 files changed, 81 insertions, 115 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java
index 9486b7ed..5b550015 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java
@@ -31,7 +31,7 @@ public class GalleryModel extends AndroidViewModel {
private MutableLiveData<List<GalleryEntry>> m_items = new MutableLiveData<>(new ArrayList<>());
private MutableLiveData<Integer> m_checkProgress = new MutableLiveData<>(Integer.valueOf(0));
- private MutableLiveData<Integer> m_itemsToCheck = new MutableLiveData<Integer>(Integer.valueOf(0));
+ private MutableLiveData<Integer> m_itemsToCheck = new MutableLiveData<>(Integer.valueOf(0));
public GalleryModel(@NonNull Application application) {
super(application);
@@ -52,106 +52,102 @@ public class GalleryModel extends AndroidViewModel {
return m_checkProgress;
}
- public void collectItems(String articleText, String srcFirst) {
- Document doc = Jsoup.parse(articleText);
+ private boolean isDataUri(String src) {
+ try {
+ Uri uri = Uri.parse(src);
- List<GalleryEntry> checkList = new ArrayList<>();
+ return "data".equalsIgnoreCase(uri.getScheme());
- /* look for srcFirst quickly and post an update */
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
- Log.d(TAG, "looking for srcFirst=" + srcFirst);
+ return false;
+ }
- Elements elems = doc.select("img,video");
+ public void collectItems(String articleText, String srcFirst) {
+ m_executor.execute(() -> {
- m_itemsToCheck.postValue(elems.size());
+ Document doc = Jsoup.parse(articleText);
- int currentItem = 0;
+ List<GalleryEntry> checkList = new ArrayList<>();
- for (Element elem : elems) {
- ++currentItem;
+ Log.d(TAG, "looking for srcFirst=" + srcFirst);
- if ("video".equalsIgnoreCase(elem.tagName())) {
- Element source = elem.select("source").first();
- String poster = elem.attr("abs:poster");
+ Elements elems = doc.select("img,video");
- if (source != null) {
- String src = source.attr("abs:src");
+ m_itemsToCheck.postValue(elems.size());
- Log.d(TAG, "checking vid src=" + src + " poster=" + poster);
+ int currentItem = 0;
- if (src != null && src.equals(srcFirst)) {
- Log.d(TAG, "first item found, vid=" + src);
+ for (Element elem : elems) {
+ ++currentItem;
- GalleryEntry item = new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_VIDEO, poster);
+ if ("video".equalsIgnoreCase(elem.tagName())) {
+ Element source = elem.select("source").first();
+ String poster = elem.attr("abs:poster");
- checkList.add(item);
+ if (source != null) {
+ String src = source.attr("abs:src");
- m_items.postValue(checkList);
- } else {
- try {
- Uri checkUri = Uri.parse(src);
+ Log.d(TAG, "checking vid src=" + src + " poster=" + poster);
- if (!"data".equalsIgnoreCase(checkUri.getScheme())) {
- checkList.add(new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_VIDEO, poster));
+ if (src != null && src.equals(srcFirst)) {
+ Log.d(TAG, "first item found, vid=" + src);
+ GalleryEntry item = new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_VIDEO, poster);
+
+ checkList.add(item);
+
+ m_items.postValue(checkList);
+ } else {
+ if (!isDataUri(src)) {
+ checkList.add(new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_VIDEO, poster));
m_items.postValue(checkList);
}
- } catch (Exception e) {
- e.printStackTrace();
}
}
- }
- } else {
- String src = elem.attr("abs:src");
+ } else {
+ String src = elem.attr("abs:src");
- Log.d(TAG, "checking img src=" + src);
+ Log.d(TAG, "checking img src=" + src);
- if (src != null && src.equals(srcFirst)) {
- Log.d(TAG, "first item found, img=" + src);
+ if (src != null && src.equals(srcFirst)) {
+ Log.d(TAG, "first item found, img=" + src);
- GalleryEntry item = new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_IMAGE, null);
+ GalleryEntry item = new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_IMAGE, null);
- checkList.add(item);
+ checkList.add(item);
- m_items.postValue(checkList);
- } else {
- try {
- Uri checkUri = Uri.parse(src);
-
- if (!"data".equalsIgnoreCase(checkUri.getScheme())) {
-
- m_executor.execute(() -> {
- Log.d(TAG, "checking image with glide: " + src);
-
- try {
- Bitmap bmp = Glide.with(getApplication().getApplicationContext())
- .load(src)
- .asBitmap()
- .skipMemoryCache(false)
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .into(HeadlinesFragment.FLAVOR_IMG_MIN_SIZE, HeadlinesFragment.FLAVOR_IMG_MIN_SIZE)
- .get();
-
- if (bmp != null && bmp.getWidth() >= HeadlinesFragment.FLAVOR_IMG_MIN_SIZE && bmp.getHeight() >= HeadlinesFragment.FLAVOR_IMG_MIN_SIZE) {
- Log.d(TAG, "image matches gallery criteria, adding...");
-
- m_mainHandler.post(() -> {
- checkList.add(new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_IMAGE, null));
- m_items.postValue(checkList);
- });
- }
- } catch (Exception e) {
- e.printStackTrace();
+ m_items.postValue(checkList);
+ } else {
+ if (!isDataUri(src)) {
+ Log.d(TAG, "checking image with glide: " + src);
+
+ try {
+ Bitmap bmp = Glide.with(getApplication().getApplicationContext())
+ .load(src)
+ .asBitmap()
+ .skipMemoryCache(false)
+ .diskCacheStrategy(DiskCacheStrategy.ALL)
+ .into(HeadlinesFragment.FLAVOR_IMG_MIN_SIZE, HeadlinesFragment.FLAVOR_IMG_MIN_SIZE)
+ .get();
+
+ if (bmp != null && bmp.getWidth() >= HeadlinesFragment.FLAVOR_IMG_MIN_SIZE && bmp.getHeight() >= HeadlinesFragment.FLAVOR_IMG_MIN_SIZE) {
+ Log.d(TAG, "image matches gallery criteria, adding...");
+
+ checkList.add(new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_IMAGE, null));
+ m_items.postValue(checkList);
}
- });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
- } catch (Exception e) {
- e.printStackTrace();
}
}
- }
- m_checkProgress.postValue(currentItem);
- }
+ m_checkProgress.postValue(currentItem);
+ }
+ });
}
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java
index 28d6cf7d..18d08e4f 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java
@@ -26,7 +26,6 @@ public class GalleryVideoFragment extends GalleryBaseFragment {
String m_url;
String m_coverUrl;
MediaPlayer m_mediaPlayer;
- private boolean m_userVisibleHint = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -58,60 +57,34 @@ public class GalleryVideoFragment extends GalleryBaseFragment {
registerForContextMenu(imgView);
ActivityCompat.startPostponedEnterTransition(m_activity);
- initializeVideoPlayer(view);
-
- return view;
- }
-
- @Override
- public void setUserVisibleHint(boolean isVisibleToUser) {
- super.setUserVisibleHint(isVisibleToUser);
- m_userVisibleHint = isVisibleToUser;
- Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
-
- if (getView() == null) return;
-
- try {
-
- if (isVisibleToUser) {
- if (m_mediaPlayer != null && !m_mediaPlayer.isPlaying()) {
- m_mediaPlayer.start();
- }
+ view.findViewById(R.id.flavor_image_progress).setVisibility(View.VISIBLE);
- } else {
- if (m_mediaPlayer != null && m_mediaPlayer.isPlaying()) {
- m_mediaPlayer.pause();
- }
- }
- } catch (IllegalStateException e) {
- e.printStackTrace();
- }
+ initializeVideoPlayer(view);
+ return view;
}
private void initializeVideoPlayer(final View view) {
-
- //Log.d(TAG, "initializeVideoPlayer: " + m_activity + " " + view);
-
-
- final MediaController m_mediaController = new MediaController(m_activity);
+ final MediaController mediaController = new MediaController(m_activity);
final TextureView textureView = view.findViewById(R.id.flavor_video);
registerForContextMenu(textureView);
textureView.setOnClickListener(v -> {
try {
- if (!m_mediaController.isShowing())
- m_mediaController.show(5000);
+
+ if (mediaController.isShowing())
+ mediaController.hide();
else
- m_mediaController.hide();
+ mediaController.show();
+
} catch (Exception e) {
e.printStackTrace();
}
});
- m_mediaController.setAnchorView(textureView);
+ mediaController.setAnchorView(textureView);
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
@@ -120,7 +93,7 @@ public class GalleryVideoFragment extends GalleryBaseFragment {
m_mediaPlayer = new MediaPlayer();
- m_mediaController.setMediaPlayer(new MediaController.MediaPlayerControl() {
+ mediaController.setMediaPlayer(new MediaController.MediaPlayerControl() {
@Override
public void start() {
m_mediaPlayer.start();
@@ -187,16 +160,13 @@ public class GalleryVideoFragment extends GalleryBaseFragment {
}
m_mediaPlayer.setOnPreparedListener(mp -> {
- getView().findViewById(R.id.flavor_image).setVisibility(View.GONE);
- getView().findViewById(R.id.flavor_image_progress).setVisibility(View.GONE);
+ view.findViewById(R.id.flavor_image_progress).setVisibility(View.GONE);
try {
resizeSurface(textureView);
mp.setLooping(true);
- if (m_userVisibleHint) {
- mp.start();
- }
+ mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
}