Skip to content

Commit de0a88d

Browse files
Merge pull request #14485 from nextcloud/bugfix/observe-download-state
BugFix - Observe Download State In Encrypted Folder
2 parents 108c04e + b4e6a5c commit de0a88d

File tree

4 files changed

+51
-3
lines changed

4 files changed

+51
-3
lines changed

app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import com.nextcloud.client.network.ClientFactory;
3434
import com.nextcloud.client.network.ConnectivityService;
3535
import com.nextcloud.client.preferences.AppPreferences;
36+
import com.nextcloud.model.WorkerState;
37+
import com.nextcloud.model.WorkerStateLiveData;
3638
import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
3739
import com.nextcloud.utils.MenuUtils;
3840
import com.nextcloud.utils.extensions.BundleExtensionsKt;
@@ -608,6 +610,20 @@ public void updateFileDetails(boolean transferring, boolean refresh) {
608610
if (getView() != null) {
609611
getView().invalidate();
610612
}
613+
614+
observeWorkerState();
615+
}
616+
617+
private void observeWorkerState() {
618+
WorkerStateLiveData.Companion.instance().observe(getViewLifecycleOwner(), state -> {
619+
if (state instanceof WorkerState.DownloadStarted) {
620+
binding.progressText.setText(R.string.downloader_download_in_progress_ticker);
621+
} else if (state instanceof WorkerState.UploadStarted) {
622+
binding.progressText.setText(R.string.uploader_upload_in_progress_ticker);
623+
} else {
624+
binding.progressBlock.setVisibility(View.GONE);
625+
}
626+
});
611627
}
612628

613629
private void setFileModificationTimestamp(OCFile file, boolean showDetailedTimestamp) {

app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.nextcloud.client.account.User;
2424
import com.nextcloud.client.di.Injectable;
2525
import com.nextcloud.client.jobs.download.FileDownloadHelper;
26+
import com.nextcloud.model.WorkerState;
27+
import com.nextcloud.model.WorkerStateLiveData;
2628
import com.nextcloud.utils.extensions.BundleExtensionsKt;
2729
import com.nextcloud.utils.extensions.FileExtensionsKt;
2830
import com.owncloud.android.R;
@@ -52,6 +54,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene
5254
private static final String ARG_FILE = "FILE";
5355
private static final String ARG_IGNORE_FIRST = "IGNORE_FIRST";
5456
private static final String ARG_USER = "USER";
57+
private static final String ARG_FILE_POSITION = "FILE_POSITION";
5558

5659
private View mView;
5760
private User user;
@@ -64,6 +67,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene
6467

6568
private boolean mIgnoreFirstSavedState;
6669
private boolean mError;
70+
private Integer filePosition;
6771

6872

6973
/**
@@ -81,10 +85,11 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene
8185
* @param ignoreFirstSavedState Flag to work around an unexpected behaviour of {@link FragmentStatePagerAdapter}
8286
* TODO better solution
8387
*/
84-
public static Fragment newInstance(OCFile file, User user, boolean ignoreFirstSavedState) {
88+
public static Fragment newInstance(OCFile file, User user, boolean ignoreFirstSavedState, Integer filePosition) {
8589
FileDownloadFragment frag = new FileDownloadFragment();
8690
Bundle args = new Bundle();
8791
args.putParcelable(ARG_FILE, file);
92+
args.putInt(ARG_FILE_POSITION, filePosition);
8893
args.putParcelable(ARG_USER, user);
8994
args.putBoolean(ARG_IGNORE_FIRST, ignoreFirstSavedState);
9095
frag.setArguments(args);
@@ -116,6 +121,7 @@ public void onCreate(Bundle savedInstanceState) {
116121

117122
mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST);
118123
user = BundleExtensionsKt.getParcelableArgument(args, ARG_USER, User.class);
124+
filePosition = args.getInt(ARG_FILE_POSITION);
119125
}
120126

121127

@@ -157,15 +163,27 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
157163
setButtonsForTransferring();
158164
}
159165

166+
observeWorkerState();
167+
160168
return mView;
161169
}
162170

171+
private void observeWorkerState() {
172+
WorkerStateLiveData.Companion.instance().observe(getViewLifecycleOwner(), state -> {
173+
if (state instanceof WorkerState.DownloadFinished &&
174+
requireActivity() instanceof PreviewImageActivity activity &&
175+
filePosition != null) {
176+
activity.setPreviewImagePagerCurrentItem(filePosition);
177+
}
178+
});
179+
}
163180

164181
@Override
165182
public void onSaveInstanceState(@NonNull Bundle outState) {
166183
super.onSaveInstanceState(outState);
167184
FileExtensionsKt.logFileSize(getFile(), TAG);
168185
outState.putParcelable(FileDownloadFragment.EXTRA_FILE, getFile());
186+
outState.putInt(FileDownloadFragment.ARG_FILE_POSITION, filePosition);
169187
outState.putParcelable(FileDownloadFragment.EXTRA_USER, user);
170188
outState.putBoolean(FileDownloadFragment.EXTRA_ERROR, mError);
171189
}

app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
*/
77
package com.owncloud.android.ui.preview
88

9+
import android.annotation.SuppressLint
910
import android.content.BroadcastReceiver
1011
import android.content.Context
1112
import android.content.Intent
1213
import android.content.IntentFilter
1314
import android.os.Build
1415
import android.os.Bundle
16+
import android.os.Handler
17+
import android.os.Looper
1518
import android.view.MenuItem
1619
import android.view.View
1720
import android.view.WindowInsets
@@ -185,6 +188,17 @@ class PreviewImageActivity : FileActivity(), FileFragment.ContainerActivity, OnR
185188
}
186189
}
187190

191+
@SuppressLint("NotifyDataSetChanged")
192+
fun setPreviewImagePagerCurrentItem(position: Int) {
193+
if (user.isPresent) {
194+
Handler(Looper.getMainLooper()).post {
195+
initViewPager(user.get())
196+
viewPager?.setCurrentItem(position, false)
197+
viewPager?.adapter?.notifyDataSetChanged()
198+
}
199+
}
200+
}
201+
188202
override fun onBackPressed() {
189203
sendRefreshSearchEventBroadcast()
190204
super.onBackPressed()

app/src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,11 @@ class PreviewImagePagerAdapter : FragmentStateAdapter {
151151
addVideoOfLivePhoto(file)
152152

153153
if (mDownloadErrors.remove(i)) {
154-
fragment = FileDownloadFragment.newInstance(file, user, true)
154+
fragment = FileDownloadFragment.newInstance(file, user, true, i)
155155
(fragment as FileDownloadFragment).setError(true)
156156
} else {
157157
fragment = if (file.isEncrypted) {
158-
FileDownloadFragment.newInstance(file, user, mObsoletePositions.contains(i))
158+
FileDownloadFragment.newInstance(file, user, mObsoletePositions.contains(i), i)
159159
} else if (PreviewMediaFragment.canBePreviewed(file)) {
160160
PreviewMediaFragment.newInstance(file, user, 0, false, file.livePhotoVideo != null)
161161
} else {

0 commit comments

Comments
 (0)