From f963b8ba77b78d163458fa0fc7787f1042ed1b50 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 3 Feb 2025 10:04:49 +0100 Subject: [PATCH 1/2] observe download state Signed-off-by: alperozturk --- .../ui/fragment/FileDetailFragment.java | 16 +++++++++++++++ .../ui/preview/FileDownloadFragment.java | 20 ++++++++++++++++++- .../ui/preview/PreviewImageActivity.kt | 14 +++++++++++++ .../ui/preview/PreviewImagePagerAdapter.kt | 4 ++-- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java index 327ae698bfde..9c360590c51b 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -33,6 +33,8 @@ import com.nextcloud.client.network.ClientFactory; import com.nextcloud.client.network.ConnectivityService; import com.nextcloud.client.preferences.AppPreferences; +import com.nextcloud.model.WorkerState; +import com.nextcloud.model.WorkerStateLiveData; import com.nextcloud.ui.fileactions.FileActionsBottomSheet; import com.nextcloud.utils.MenuUtils; import com.nextcloud.utils.extensions.BundleExtensionsKt; @@ -608,6 +610,20 @@ public void updateFileDetails(boolean transferring, boolean refresh) { if (getView() != null) { getView().invalidate(); } + + observeWorkerState(); + } + + private void observeWorkerState() { + WorkerStateLiveData.Companion.instance().observe(getViewLifecycleOwner(), state -> { + if (state instanceof WorkerState.DownloadStarted) { + binding.progressText.setText(R.string.downloader_download_in_progress_ticker); + } else if (state instanceof WorkerState.UploadStarted) { + binding.progressText.setText(R.string.uploader_upload_in_progress_ticker); + } else { + binding.progressBlock.setVisibility(View.GONE); + } + }); } private void setFileModificationTimestamp(OCFile file, boolean showDetailedTimestamp) { diff --git a/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java b/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java index 3004dce0fd36..460addcd5529 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java @@ -23,6 +23,8 @@ import com.nextcloud.client.account.User; import com.nextcloud.client.di.Injectable; import com.nextcloud.client.jobs.download.FileDownloadHelper; +import com.nextcloud.model.WorkerState; +import com.nextcloud.model.WorkerStateLiveData; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.extensions.FileExtensionsKt; import com.owncloud.android.R; @@ -52,6 +54,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene private static final String ARG_FILE = "FILE"; private static final String ARG_IGNORE_FIRST = "IGNORE_FIRST"; private static final String ARG_USER = "USER"; + private static final String ARG_FILE_POSITION = "FILE_POSITION"; private View mView; private User user; @@ -64,6 +67,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene private boolean mIgnoreFirstSavedState; private boolean mError; + private Integer filePosition; /** @@ -81,10 +85,11 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene * @param ignoreFirstSavedState Flag to work around an unexpected behaviour of {@link FragmentStatePagerAdapter} * TODO better solution */ - public static Fragment newInstance(OCFile file, User user, boolean ignoreFirstSavedState) { + public static Fragment newInstance(OCFile file, User user, boolean ignoreFirstSavedState, Integer filePosition) { FileDownloadFragment frag = new FileDownloadFragment(); Bundle args = new Bundle(); args.putParcelable(ARG_FILE, file); + args.putInt(ARG_FILE_POSITION, filePosition); args.putParcelable(ARG_USER, user); args.putBoolean(ARG_IGNORE_FIRST, ignoreFirstSavedState); frag.setArguments(args); @@ -116,6 +121,7 @@ public void onCreate(Bundle savedInstanceState) { mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST); user = BundleExtensionsKt.getParcelableArgument(args, ARG_USER, User.class); + filePosition = args.getInt(ARG_FILE_POSITION); } @@ -157,15 +163,27 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, setButtonsForTransferring(); } + observeWorkerState(); + return mView; } + private void observeWorkerState() { + WorkerStateLiveData.Companion.instance().observe(getViewLifecycleOwner(), state -> { + if (state instanceof WorkerState.DownloadFinished) { + if (requireActivity() instanceof PreviewImageActivity activity && filePosition != null) { + activity.setPreviewImagePagerCurrentItem(filePosition); + } + } + }); + } @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); FileExtensionsKt.logFileSize(getFile(), TAG); outState.putParcelable(FileDownloadFragment.EXTRA_FILE, getFile()); + outState.putInt(FileDownloadFragment.ARG_FILE_POSITION, filePosition); outState.putParcelable(FileDownloadFragment.EXTRA_USER, user); outState.putBoolean(FileDownloadFragment.EXTRA_ERROR, mError); } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt index 9ed0babe6a2d..c2580868bc35 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt @@ -6,12 +6,15 @@ */ package com.owncloud.android.ui.preview +import android.annotation.SuppressLint import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.view.MenuItem import android.view.View import android.view.WindowInsets @@ -185,6 +188,17 @@ class PreviewImageActivity : FileActivity(), FileFragment.ContainerActivity, OnR } } + @SuppressLint("NotifyDataSetChanged") + fun setPreviewImagePagerCurrentItem(position: Int) { + if (user.isPresent) { + Handler(Looper.getMainLooper()).post { + initViewPager(user.get()) + viewPager?.setCurrentItem(position, false) + viewPager?.adapter?.notifyDataSetChanged() + } + } + } + override fun onBackPressed() { sendRefreshSearchEventBroadcast() super.onBackPressed() diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt index 38f350999b32..fdb08f37baca 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt @@ -151,11 +151,11 @@ class PreviewImagePagerAdapter : FragmentStateAdapter { addVideoOfLivePhoto(file) if (mDownloadErrors.remove(i)) { - fragment = FileDownloadFragment.newInstance(file, user, true) + fragment = FileDownloadFragment.newInstance(file, user, true, i) (fragment as FileDownloadFragment).setError(true) } else { fragment = if (file.isEncrypted) { - FileDownloadFragment.newInstance(file, user, mObsoletePositions.contains(i)) + FileDownloadFragment.newInstance(file, user, mObsoletePositions.contains(i), i) } else if (PreviewMediaFragment.canBePreviewed(file)) { PreviewMediaFragment.newInstance(file, user, 0, false, file.livePhotoVideo != null) } else { From 37d79e5eb7e46ae1ef9c1b5617d608aaf54548d4 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 3 Feb 2025 10:57:27 +0100 Subject: [PATCH 2/2] fix code analytics Signed-off-by: alperozturk --- .../owncloud/android/ui/preview/FileDownloadFragment.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java b/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java index 460addcd5529..a3bf1bf77075 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java @@ -170,10 +170,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, private void observeWorkerState() { WorkerStateLiveData.Companion.instance().observe(getViewLifecycleOwner(), state -> { - if (state instanceof WorkerState.DownloadFinished) { - if (requireActivity() instanceof PreviewImageActivity activity && filePosition != null) { - activity.setPreviewImagePagerCurrentItem(filePosition); - } + if (state instanceof WorkerState.DownloadFinished && + requireActivity() instanceof PreviewImageActivity activity && + filePosition != null) { + activity.setPreviewImagePagerCurrentItem(filePosition); } }); }