Skip to content

Commit 5a51327

Browse files
Merge pull request #2788 from nextcloud/backport-2781
Backport of #2781: TimSort, first fix values, then sort
2 parents 7bcc93d + 3e19241 commit 5a51327

File tree

3 files changed

+66
-28
lines changed

3 files changed

+66
-28
lines changed

src/main/java/com/owncloud/android/db/OCUpload.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
/**
1+
/*
22
* ownCloud Android client application
33
*
44
* @author LukeOwncloud
55
* @author masensio
66
* @author David A. Velasco
7+
* @author Tobias Kaminsky
78
* Copyright (C) 2016 ownCloud Inc.
9+
* Copyright (C) 2018 Nextcloud GmbH.
810
*
911
* This program is free software: you can redistribute it and/or modify
1012
* it under the terms of the GNU General Public License version 2,
@@ -117,6 +119,14 @@ public class OCUpload implements Parcelable {
117119
*/
118120
private String mFolderUnlockToken;
119121

122+
/**
123+
* temporary values, used for sorting
124+
*/
125+
private UploadStatus mFixedUploadStatus;
126+
private boolean mFixedUploadingNow;
127+
private long mFixedUploadEndTimeStamp;
128+
private long mFixedId;
129+
120130
/**
121131
* Main constructor.
122132
*
@@ -170,6 +180,13 @@ private void resetData() {
170180
mFolderUnlockToken = "";
171181
}
172182

183+
public void setDataFixed(FileUploader.FileUploaderBinder binder) {
184+
mFixedUploadStatus = mUploadStatus;
185+
mFixedUploadingNow = binder != null && binder.isUploadingNow(this);
186+
mFixedUploadEndTimeStamp = mUploadEndTimeStamp;
187+
mFixedId = mId;
188+
}
189+
173190
// Getters & Setters
174191
public void setUploadId(long id) {
175192
mId = id;
@@ -229,7 +246,7 @@ public String getRemotePath() {
229246
}
230247

231248
/**
232-
* @param remotePath
249+
* @param remotePath the remotePath
233250
*/
234251
public void setRemotePath(String remotePath) {
235252
mRemotePath = remotePath;
@@ -391,11 +408,11 @@ public String getFolderUnlockToken() {
391408
*
392409
* @param source The source parcel
393410
*/
394-
protected OCUpload(Parcel source) {
411+
private OCUpload(Parcel source) {
395412
readFromParcel(source);
396413
}
397414

398-
public void readFromParcel(Parcel source) {
415+
private void readFromParcel(Parcel source) {
399416
mId = source.readLong();
400417
mLocalPath = source.readString();
401418
mRemotePath = source.readString();
@@ -443,5 +460,21 @@ public void writeToParcel(Parcel dest, int flags) {
443460
dest.writeString(mFolderUnlockToken);
444461
}
445462

463+
public UploadStatus getFixedUploadStatus() {
464+
return mFixedUploadStatus;
465+
}
466+
467+
public boolean isFixedUploadingNow() {
468+
return mFixedUploadingNow;
469+
}
470+
471+
public long getFixedUploadEndTimestamp() {
472+
return mFixedUploadEndTimeStamp;
473+
}
474+
475+
public Long getFixedUploadId() {
476+
return mFixedId;
477+
}
478+
446479
enum CanUploadFileNowStatus {NOW, LATER, FILE_GONE, ERROR}
447480
}

src/main/java/com/owncloud/android/files/services/FileUploader.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -877,11 +877,11 @@ public boolean isUploading(Account account, OCFile file) {
877877

878878
public boolean isUploadingNow(OCUpload upload) {
879879
return (
880-
upload != null &&
881-
mCurrentAccount != null &&
882-
mCurrentUpload != null &&
883-
upload.getAccountName().equals(mCurrentAccount.name) &&
884-
upload.getRemotePath().equals(mCurrentUpload.getRemotePath())
880+
upload != null &&
881+
mCurrentAccount != null &&
882+
mCurrentUpload != null &&
883+
upload.getAccountName().equals(mCurrentAccount.name) &&
884+
upload.getRemotePath().equals(mCurrentUpload.getRemotePath())
885885
);
886886
}
887887

src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -113,24 +113,21 @@ public UploadListAdapter(FileActivity parentActivity) {
113113
mUploadGroups[0] = new UploadGroup(mParentActivity.getString(R.string.uploads_view_group_current_uploads)) {
114114
@Override
115115
public void refresh() {
116-
setItems(mUploadsStorageManager.getCurrentAndPendingUploadsForCurrentAccount());
117-
Arrays.sort(getItems(), comparator);
116+
fixAndSortItems(mUploadsStorageManager.getCurrentAndPendingUploadsForCurrentAccount());
118117
}
119118
};
120119

121120
mUploadGroups[1] = new UploadGroup(mParentActivity.getString(R.string.uploads_view_group_failed_uploads)) {
122121
@Override
123122
public void refresh() {
124-
setItems(mUploadsStorageManager.getFailedButNotDelayedUploadsForCurrentAccount());
125-
Arrays.sort(getItems(), comparator);
123+
fixAndSortItems(mUploadsStorageManager.getFailedButNotDelayedUploadsForCurrentAccount());
126124
}
127125
};
128126

129127
mUploadGroups[2] = new UploadGroup(mParentActivity.getString(R.string.uploads_view_group_finished_uploads)) {
130128
@Override
131129
public void refresh() {
132-
setItems(mUploadsStorageManager.getFinishedUploadsForCurrentAccount());
133-
Arrays.sort(getItems(), comparator);
130+
fixAndSortItems(mUploadsStorageManager.getFinishedUploadsForCurrentAccount());
134131
}
135132
};
136133
loadUploadItemsFromDb();
@@ -624,6 +621,17 @@ public void setItems(OCUpload[] items) {
624621
this.items = items;
625622
}
626623

624+
void fixAndSortItems(OCUpload[] array) {
625+
FileUploader.FileUploaderBinder binder = mParentActivity.getFileUploaderBinder();
626+
627+
for (OCUpload upload : array) {
628+
upload.setDataFixed(binder);
629+
}
630+
Arrays.sort(array, comparator);
631+
632+
setItems(array);
633+
}
634+
627635
private int getGroupItemCount() {
628636
return items == null ? 0 : items.length;
629637
}
@@ -640,23 +648,20 @@ public int compare(OCUpload upload1, OCUpload upload2) {
640648
if (upload2 == null) {
641649
return 1;
642650
}
643-
if (UploadStatus.UPLOAD_IN_PROGRESS.equals(upload1.getUploadStatus())) {
644-
if (!UploadStatus.UPLOAD_IN_PROGRESS.equals(upload2.getUploadStatus())) {
651+
if (UploadStatus.UPLOAD_IN_PROGRESS.equals(upload1.getFixedUploadStatus())) {
652+
if (!UploadStatus.UPLOAD_IN_PROGRESS.equals(upload2.getFixedUploadStatus())) {
645653
return -1;
646654
}
647655
// both are in progress
648-
FileUploader.FileUploaderBinder binder = mParentActivity.getFileUploaderBinder();
649-
if (binder != null) {
650-
if (binder.isUploadingNow(upload1)) {
651-
return -1;
652-
} else if (binder.isUploadingNow(upload2)) {
653-
return 1;
654-
}
656+
if (upload1.isFixedUploadingNow()) {
657+
return -1;
658+
} else if (upload2.isFixedUploadingNow()) {
659+
return 1;
655660
}
656-
} else if (upload2.getUploadStatus().equals(UploadStatus.UPLOAD_IN_PROGRESS)) {
661+
} else if (upload2.getFixedUploadStatus().equals(UploadStatus.UPLOAD_IN_PROGRESS)) {
657662
return 1;
658663
}
659-
if (upload1.getUploadEndTimestamp() == 0 || upload2.getUploadEndTimestamp() == 0) {
664+
if (upload1.getFixedUploadEndTimestamp() == 0 || upload2.getFixedUploadEndTimestamp() == 0) {
660665
return compareUploadId(upload1, upload2);
661666
} else {
662667
return compareUpdateTime(upload1, upload2);
@@ -665,12 +670,12 @@ public int compare(OCUpload upload1, OCUpload upload2) {
665670

666671
@SuppressFBWarnings("Bx")
667672
private int compareUploadId(OCUpload upload1, OCUpload upload2) {
668-
return Long.valueOf(upload1.getUploadId()).compareTo(upload2.getUploadId());
673+
return Long.valueOf(upload1.getFixedUploadId()).compareTo(upload2.getFixedUploadId());
669674
}
670675

671676
@SuppressFBWarnings("Bx")
672677
private int compareUpdateTime(OCUpload upload1, OCUpload upload2) {
673-
return Long.valueOf(upload2.getUploadEndTimestamp()).compareTo(upload1.getUploadEndTimestamp());
678+
return Long.valueOf(upload2.getFixedUploadEndTimestamp()).compareTo(upload1.getFixedUploadEndTimestamp());
674679
}
675680
};
676681
}

0 commit comments

Comments
 (0)