diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-05-17 16:40:17 +0300 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-05-17 16:40:17 +0300 |
| commit | 361abacbe113eda94617d5629d1f20dc5b7da05a (patch) | |
| tree | a735725486624f1de32602f9ac521ef1bc2c02b4 | |
| parent | 6964d2cbce2e23e8d8767cc4192a3f46f93ccd42 (diff) | |
cleanup video fragment a bit, do all gallery model processing in a single background job
| -rw-r--r-- | org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java | 140 | ||||
| -rwxr-xr-x | org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryVideoFragment.java | 56 |
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(); } |