/**
* ownCloud Android client application
*
* @author Bartek Przybylski
* @author David A. Velasco
* Copyright (C) 2012 Bartek Przybylski
* Copyright (C) 2016 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package com.owncloud.android.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog.Decision;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog.OnConflictDecisionMadeListener;
/**
* Wrapper activity which will be launched if keep-in-sync file will be modified by external
* application.
*/
public class ConflictsResolveActivity extends FileActivity implements OnConflictDecisionMadeListener {
private static final String TAG = ConflictsResolveActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void conflictDecisionMade(Decision decision) {
Integer behaviour = null;
Boolean forceOverwrite = null;
switch (decision) {
case CANCEL:
finish();
return;
case OVERWRITE:
// use local version -> overwrite on server
forceOverwrite = true;
break;
case KEEP_BOTH:
behaviour = FileUploader.LOCAL_BEHAVIOUR_MOVE;
break;
case SERVER:
// use server version -> delete local, request download
Intent intent = new Intent(this, FileDownloader.class);
intent.putExtra(FileDownloader.EXTRA_ACCOUNT, getAccount());
intent.putExtra(FileDownloader.EXTRA_FILE, getFile());
startService(intent);
finish();
return;
default:
Log_OC.e(TAG, "Unhandled conflict decision " + decision);
return;
}
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
requester.uploadUpdate(this, getAccount(), getFile(), behaviour, forceOverwrite);
finish();
}
@Override
protected void onAccountSet(boolean stateWasRecovered) {
super.onAccountSet(stateWasRecovered);
if (getAccount() != null) {
OCFile file = getFile();
if (getFile() == null) {
Log_OC.e(TAG, "No conflictive file received");
finish();
} else {
/// Check whether the 'main' OCFile handled by the Activity is contained in the current Account
file = getStorageManager().getFileByPath(file.getRemotePath()); // file = null if not in the
// current Account
if (file != null) {
setFile(file);
ConflictsResolveDialog d = ConflictsResolveDialog.newInstance(this);
d.showDialog(this);
} else {
// account was changed to a different one - just finish
finish();
}
}
} else {
finish();
}
}
}