Skip to content

Commit

Permalink
Minor changes after extra CR; and grant that inherited available-offl…
Browse files Browse the repository at this point in the history
…ine property can't be removed from any view in the app
  • Loading branch information
davivel committed Dec 9, 2016
1 parent 9f59bea commit 5d84efc
Show file tree
Hide file tree
Showing 16 changed files with 83 additions and 70 deletions.
Expand Up @@ -62,7 +62,6 @@ public class OCFileUnitTest {
private static final String PERMISSIONS = "SRKNVD";
private static final String REMOTE_ID = "jadñgiadf8203:9jrp98v2mn3er2089fh";
private static final String ETAG_IN_CONFLICT = "2adshfas98ferqw8f9yu";
private static final OCFile.AvailableOfflineStatus AVAILABLE_OFFLINE = OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE;

private OCFile mFile;

Expand All @@ -86,7 +85,7 @@ public void writeThenReadAsParcelable() {
mFile.setModificationTimestampAtLastSyncForData(MODIFICATION_TIMESTAMP_AT_LAST_SYNC_FOR_DATA);
mFile.setLastSyncDateForProperties(LAST_SYNC_DATE_FOR_PROPERTIES);
mFile.setLastSyncDateForData(LAST_SYNC_DATE_FOR_DATA);
mFile.setAvailableOfflineStatus(AVAILABLE_OFFLINE);
mFile.setAvailableOfflineStatus(OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE);
mFile.setEtag(ETAG);
mFile.setShareViaLink(true);
mFile.setShareWithSharee(true);
Expand Down Expand Up @@ -121,7 +120,10 @@ public void writeThenReadAsParcelable() {
);
assertThat(fileReadFromParcel.getLastSyncDateForProperties(), is(LAST_SYNC_DATE_FOR_PROPERTIES));
assertThat(fileReadFromParcel.getLastSyncDateForData(), is(LAST_SYNC_DATE_FOR_DATA));
assertThat(fileReadFromParcel.getAvailableOfflineStatus(), is(AVAILABLE_OFFLINE));
assertThat(
fileReadFromParcel.getAvailableOfflineStatus(),
is(OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE)
);
assertThat(fileReadFromParcel.getEtag(), is(ETAG));
assertThat(fileReadFromParcel.isSharedViaLink(), is(true));
assertThat(fileReadFromParcel.isSharedWithSharee(), is(true));
Expand Down
8 changes: 4 additions & 4 deletions res/menu/file_actions_menu.xml
Expand Up @@ -45,14 +45,14 @@
app:showAsAction="ifRoom"
android:orderInCategory="1" />
<item
android:id="@+id/action_favorite_file"
android:title="@string/favorite"
android:id="@+id/action_set_available_offline"
android:title="@string/set_available_offline"
app:showAsAction="never"
android:icon="@drawable/ic_action_set_available_offline"
android:orderInCategory="1" />
<item
android:id="@+id/action_unfavorite_file"
android:title="@string/unfavorite"
android:id="@+id/action_unset_available_offline"
android:title="@string/unset_available_offline"
app:showAsAction="never"
android:icon="@drawable/ic_action_unset_available_offline"
android:orderInCategory="1" />
Expand Down
6 changes: 3 additions & 3 deletions res/values/strings.xml
Expand Up @@ -229,8 +229,8 @@
<string name="auth_can_not_auth_against_server">Cannot authenticate to this server</string>
<string name="auth_account_does_not_exist">Account does not exist in the device yet</string>

<string name="favorite">Set as available offline</string>
<string name="unfavorite">Unset as available offline</string>
<string name="set_available_offline">Set as available offline</string>
<string name="unset_available_offline">Unset as available offline</string>
<string name="common_rename">Rename</string>
<string name="common_remove">Remove</string>
<string name="confirmation_remove_file_alert">"Do you really want to remove %1$s?"</string>
Expand All @@ -240,7 +240,7 @@
<string name="remove_success_msg">"Removal succeeded"</string>
<string name="remove_fail_msg">"Removal failed"</string>
<string name="rename_dialog_title">Enter a new name</string>
<string name="unfavorite_inherited_msg">A folder that contains this file is already favorite</string>
<string name="available_offline_inherited_msg">A folder that containing this file is available offline</string>
<string name="rename_local_fail_msg">"Local copy could not be renamed; try a different name"</string>
<string name="rename_server_fail_msg">"Rename could not be completed"</string>
<string name="sync_file_fail_msg">Remote file could not be checked</string>
Expand Down
35 changes: 16 additions & 19 deletions src/com/owncloud/android/datamodel/FileDataStorageManager.java
Expand Up @@ -773,26 +773,23 @@ private Vector<OCFile> getFolderContent(long parentId/*, boolean onlyOnDevice*/)
new String[]{String.valueOf(parentId)}, null);
}

if (c.moveToFirst()) {
do {
OCFile child = createFileInstance(c);
// TODO Enable when "On Device" is recovered ?
// if (child.isFolder() || !onlyOnDevice || onlyOnDevice && child.isDown()){
ret.add(child);
// }
} while (c.moveToNext());

if (ret.size() > 0) {
if (isAnyParentAFavoriteFolder(parentId)) {
for(OCFile file: ret) {
file.setAvailableOfflineStatus(OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE_PARENT);
if (c!= null) {
if (c.moveToFirst()) {
boolean inFolderAvailableOffline = isAnyAncestorAvailableOfflineFolder(parentId);
do {
OCFile child = createFileInstance(c);
// TODO Enable when "On Device" is recovered ?
// if (child.isFolder() || !onlyOnDevice || onlyOnDevice && child.isDown()){
if (inFolderAvailableOffline) {
child.setAvailableOfflineStatus(OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE_PARENT);
}
}
ret.add(child);
// }
} while (c.moveToNext());
}
c.close();
}

c.close();

Collections.sort(ret);

return ret;
Expand All @@ -803,14 +800,14 @@ private Vector<OCFile> getFolderContent(long parentId/*, boolean onlyOnDevice*/)
* @param parentId
* @return true/false
*/
private boolean isAnyParentAFavoriteFolder(long parentId) {
private boolean isAnyAncestorAvailableOfflineFolder(long parentId) {
boolean isFavorite = false;
OCFile file = getFileById(parentId);
if (file.isFolder()) {
if (file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE) {
isFavorite = true;
} else if (!file.getFileName().equals(OCFile.ROOT_PATH)) {
isFavorite = isAnyParentAFavoriteFolder(file.getParentId());
isFavorite = isAnyAncestorAvailableOfflineFolder(file.getParentId());
}
}
return isFavorite;
Expand Down Expand Up @@ -918,7 +915,7 @@ private OCFile createFileInstance(Cursor c) {
file.setLastSyncDateForData(c.getLong(c.
getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA)));
file.setAvailableOfflineStatus(
OCFile.AvailableOfflineStatus.fromValue(c.getInt(c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)))
OCFile.AvailableOfflineStatus.fromValue(c.getInt(c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)))
);
file.setEtag(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_ETAG)));
file.setShareViaLink(c.getInt(
Expand Down
6 changes: 3 additions & 3 deletions src/com/owncloud/android/datamodel/OCFile.java
Expand Up @@ -65,7 +65,7 @@ public enum AvailableOfflineStatus {
/**
* File is not available offline
*/
NO_AVAILABLE_OFFLINE(0),
NOT_AVAILABLE_OFFLINE(0),

/**
* File is available offline
Expand All @@ -90,7 +90,7 @@ public int getValue() {
public static AvailableOfflineStatus fromValue(int value) {
switch (value) {
case 0:
return NO_AVAILABLE_OFFLINE;
return NOT_AVAILABLE_OFFLINE;
case 1:
return AVAILABLE_OFFLINE;
case 2:
Expand Down Expand Up @@ -183,7 +183,7 @@ private OCFile(Parcel source) {
try {
mAvailableOfflineStatus = AvailableOfflineStatus.valueOf(source.readString());
} catch (IllegalArgumentException x) {
mAvailableOfflineStatus = AvailableOfflineStatus.NO_AVAILABLE_OFFLINE;
mAvailableOfflineStatus = AvailableOfflineStatus.NOT_AVAILABLE_OFFLINE;
}
mLastSyncDateForProperties = source.readLong();
mLastSyncDateForData = source.readLong();
Expand Down
15 changes: 8 additions & 7 deletions src/com/owncloud/android/files/FileMenuFilter.java
Expand Up @@ -28,6 +28,7 @@
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
import com.owncloud.android.lib.resources.status.OCCapability;
import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
Expand Down Expand Up @@ -227,18 +228,18 @@ private void filter(List<Integer> toShow, List <Integer> toHide) {
toShow.add(R.id.action_send_file);
}

// FAVORITES
// SET AS AVAILABLE OFFLINE
if (synchronizing || !anyUnfavorite()) {
toHide.add(R.id.action_favorite_file);
toHide.add(R.id.action_set_available_offline);
} else {
toShow.add(R.id.action_favorite_file);
toShow.add(R.id.action_set_available_offline);
}

// UNFAVORITES
// UNSET AS AVAILABLE OFFLINE
if (synchronizing || !anyFavorite()) {
toHide.add(R.id.action_unfavorite_file);
toHide.add(R.id.action_unset_available_offline);
} else {
toShow.add(R.id.action_unfavorite_file);
toShow.add(R.id.action_unset_available_offline);
}

}
Expand Down Expand Up @@ -325,7 +326,7 @@ private boolean anyFavorite() {

private boolean anyUnfavorite() {
for(OCFile file: mFiles) {
if(file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.NO_AVAILABLE_OFFLINE) {
if(file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.NOT_AVAILABLE_OFFLINE) {
return true;
}
}
Expand Down
Expand Up @@ -358,6 +358,11 @@ private void synchronizeData(ArrayList<Object> folderAndFiles, OwnCloudClient cl
// get 'fresh data' from the database
mLocalFolder = mStorageManager.getFileByPath(mLocalFolder.getRemotePath());

// parse data from remote folder
OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) folderAndFiles.get(0));
remoteFolder.setParentId(mLocalFolder.getParentId());
remoteFolder.setFileId(mLocalFolder.getFileId());

Log_OC.d(TAG, "Remote folder " + mLocalFolder.getRemotePath()
+ " changed - starting update of local data ");

Expand Down Expand Up @@ -445,7 +450,6 @@ private void synchronizeData(ArrayList<Object> folderAndFiles, OwnCloudClient cl
}

// save updated contents in local database
OCFile remoteFolder = mStorageManager.getFileByPath(((RemoteFile) folderAndFiles.get(0)).getRemotePath());
mStorageManager.saveFolder(remoteFolder, updatedFiles, localFilesMap.values());

mChildren = updatedFiles;
Expand Down
Expand Up @@ -289,7 +289,7 @@ public View getView(int position, View convertView, ViewGroup parent) {

// this if-else is needed even though favorite icon is visible by default
// because android reuses views in listview
if (file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.NO_AVAILABLE_OFFLINE) {
if (file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.NOT_AVAILABLE_OFFLINE) {
view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);
} else {
view.findViewById(R.id.favoriteIcon).setVisibility(View.VISIBLE);
Expand Down
Expand Up @@ -60,7 +60,7 @@ public static RemoveFilesDialogFragment newInstance(ArrayList<OCFile> files) {
for (OCFile file: files) {
if (file.isFolder()) containsFolder = true;
if (file.isDown()) containsDown = true;
if (file.getAvailableOfflineStatus() != OCFile.AvailableOfflineStatus.NO_AVAILABLE_OFFLINE) {
if (file.getAvailableOfflineStatus() != OCFile.AvailableOfflineStatus.NOT_AVAILABLE_OFFLINE) {
containsFavorite = true;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/com/owncloud/android/ui/fragment/FileDetailFragment.java
Expand Up @@ -314,11 +314,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
}
return true;
}
case R.id.action_favorite_file:{
case R.id.action_set_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true);
return true;
}
case R.id.action_unfavorite_file:{
case R.id.action_unset_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions src/com/owncloud/android/ui/fragment/OCFileListFragment.java
Expand Up @@ -725,12 +725,12 @@ public boolean onFileActionChosen(int menuId) {
((FileDisplayActivity) mContainerActivity).cancelTransference(checkedFiles);
return true;
}
case R.id.action_favorite_file: {
case R.id.action_set_available_offline: {
mContainerActivity.getFileOperationsHelper().toggleFavorites(checkedFiles, true);
getListView().invalidateViews();
return true;
}
case R.id.action_unfavorite_file: {
case R.id.action_unset_available_offline: {
mContainerActivity.getFileOperationsHelper().toggleFavorites(checkedFiles, false);
getListView().invalidateViews();
return true;
Expand Down
41 changes: 25 additions & 16 deletions src/com/owncloud/android/ui/helpers/FileOperationsHelper.java
Expand Up @@ -461,33 +461,42 @@ public void toggleFavorites(Collection<OCFile> files, boolean isFavorite){
}

public void toggleFavorite(OCFile file, boolean isFavorite) {
OCFile.AvailableOfflineStatus availableOfflineStatus = isFavorite ?
OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE : OCFile.AvailableOfflineStatus.NO_AVAILABLE_OFFLINE;
file.setAvailableOfflineStatus(availableOfflineStatus);
mFileActivity.getStorageManager().saveFile(file);

// If file is a folder, all children files that were available offline must be unset
if (file.isFolder() && isFavorite) {
toggleAvailableOfflineFilesInFolder(file, false);
}
if (file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE_PARENT) {
Toast.makeText(
mFileActivity,
mFileActivity.getString(R.string.available_offline_inherited_msg),
Toast.LENGTH_LONG
).show();

} else {
OCFile.AvailableOfflineStatus availableOfflineStatus = isFavorite ?
OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE : OCFile.AvailableOfflineStatus.NOT_AVAILABLE_OFFLINE;
file.setAvailableOfflineStatus(availableOfflineStatus);
mFileActivity.getStorageManager().saveFile(file);

// If file is a folder, all children files that were available offline must be unset
if (file.isFolder() && isFavorite) {
toggleAvailableOfflineFilesInFolder(file, false);
}

/// register the OCFile instance in the observer service to monitor local updates
FileObserverService.observeFile(
/// register the OCFile instance in the observer service to monitor local updates
FileObserverService.observeFile(
mFileActivity,
file,
mFileActivity.getAccount(),
isFavorite
);
);

/// immediate content synchronization
if (file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE) {
syncFile(file);
/// immediate content synchronization
if (file.getAvailableOfflineStatus() == OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE) {
syncFile(file);
}
}
}

private void toggleAvailableOfflineFilesInFolder(OCFile file, boolean isAvailableOffline) {
OCFile.AvailableOfflineStatus availableOfflineStatus = isAvailableOffline ?
OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE : OCFile.AvailableOfflineStatus.NO_AVAILABLE_OFFLINE;
OCFile.AvailableOfflineStatus.AVAILABLE_OFFLINE : OCFile.AvailableOfflineStatus.NOT_AVAILABLE_OFFLINE;
Vector<OCFile> filesInFolder = mFileActivity.getStorageManager().getFolderContent(file);
for (OCFile fileInFolder: filesInFolder) {
fileInFolder.setAvailableOfflineStatus(availableOfflineStatus);
Expand Down
4 changes: 2 additions & 2 deletions src/com/owncloud/android/ui/preview/PreviewAudioFragment.java
Expand Up @@ -377,11 +377,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
}
case R.id.action_favorite_file:{
case R.id.action_set_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true);
return true;
}
case R.id.action_unfavorite_file:{
case R.id.action_unset_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions src/com/owncloud/android/ui/preview/PreviewImageFragment.java
Expand Up @@ -332,11 +332,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
}
case R.id.action_favorite_file:{
case R.id.action_set_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true);
return true;
}
case R.id.action_unfavorite_file:{
case R.id.action_unset_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions src/com/owncloud/android/ui/preview/PreviewTextFragment.java
Expand Up @@ -379,11 +379,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
}
case R.id.action_favorite_file:{
case R.id.action_set_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true);
return true;
}
case R.id.action_unfavorite_file:{
case R.id.action_unset_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions src/com/owncloud/android/ui/preview/PreviewVideoFragment.java
Expand Up @@ -377,11 +377,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
mContainerActivity.getFileOperationsHelper().syncFile(getFile());
return true;
}
case R.id.action_favorite_file:{
case R.id.action_set_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true);
return true;
}
case R.id.action_unfavorite_file:{
case R.id.action_unset_available_offline:{
mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false);
return true;
}
Expand Down

0 comments on commit 5d84efc

Please sign in to comment.