<item
android:id="@+id/action_share_file"
- android:title="@string/action_share_file"
+ android:title="@string/action_share"
android:icon="@android:drawable/ic_menu_share"
android:orderInCategory="1" />
- <item
- android:id="@+id/action_unshare_file"
- android:title="@string/action_unshare_file"
- android:icon="@android:drawable/ic_menu_share"
- android:orderInCategory="1" />
- <item
- android:id="@+id/action_share_with_users"
- android:title="@string/action_share_with_users"
- android:orderInCategory="1" />
<item
android:id="@+id/action_open_file_with"
<string name="filedetails_sync_file">Synchronize</string>
<string name="filedetails_renamed_in_upload_msg">File was renamed to %1$s during upload</string>
<string name="list_layout">List Layout</string>
- <string name="action_share_file">Share link</string>
- <string name="action_unshare_file">Unshare link</string>
- <string name="action_share_with_users">Share with users</string>
+ <string name="action_share">Share</string>
<string name="common_yes">Yes</string>
<string name="common_no">No</string>
<string name="common_ok">OK</string>
package com.owncloud.android.datamodel;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
import android.accounts.Account;
import android.content.ContentProviderClient;
import android.content.ContentProviderOperation;
import com.owncloud.android.lib.resources.status.OCCapability;
import com.owncloud.android.utils.FileStorageUtils;
+import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
public class FileDataStorageManager {
+ ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
+ ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" ;
if (!ShareType.PUBLIC_LINK.equals(type)) {
- selection += ProviderTableMeta.OCSHARES_SHARE_WITH + "=? AND ";
+ selection += " AND " + ProviderTableMeta.OCSHARES_SHARE_WITH + "=?";
}
String [] selectionArgs;
// TODO add check on SHARE available on server side?
boolean shareAllowed = (mContext != null &&
mContext.getString(R.string.share_feature).equalsIgnoreCase("on"));
- if (!shareAllowed || mFile == null) {
- toHide.add(R.id.action_share_file);
- } else {
- toShow.add(R.id.action_share_file);
- }
-
- // UNSHARE FILE
- // TODO add check on SHARE available on server side?
- if ( !shareAllowed || (mFile == null || !mFile.isSharedViaLink())) {
- toHide.add(R.id.action_unshare_file);
- } else {
- toShow.add(R.id.action_unshare_file);
- }
// SHARE FILE, with Users
OCCapability capability = mComponentsGetter.getStorageManager().getCapability(mAccount.name);
boolean shareApiEnabled = capability != null &&
(capability.getFilesSharingApiEnabled().isTrue() || capability.getFilesSharingApiEnabled().isUnknown());
if (!shareAllowed || mFile == null || !shareApiEnabled ) {
- toHide.add(R.id.action_share_with_users);
+ toHide.add(R.id.action_share_file);
} else {
- toShow.add(R.id.action_share_with_users);
+ toShow.add(R.id.action_share_file);
}
-
// SEE DETAILS
if (mFile == null || mFile.isFolder()) {
toHide.add(R.id.action_see_details);
import com.owncloud.android.ui.dialog.ShareLinkToDialog;
import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
-import org.apache.http.protocol.HTTP;
import java.util.List;
mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service);
} else {
- Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
- }
- } else {
- // Show a Message
- Toast t = Toast.makeText(
- mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api),
- Toast.LENGTH_LONG
- );
- t.show();
- }
- }
-
- public void shareFileWithLinkOLD(OCFile file) {
-
- if (isSharedSupported()) {
- if (file != null) {
- String link = "https://fake.url";
- Intent intent = createShareWithLinkIntent(link);
- String[] packagesToExclude = new String[]{mFileActivity.getPackageName()};
- DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent,
- packagesToExclude, file);
- chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
-
- } else {
Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
}
-
} else {
// Show a Message
Toast t = Toast.makeText(
}
}
-
public void shareFileWithLinkToApp(OCFile file, String password, Intent sendIntent) {
if (file != null) {
}
}
-
- private Intent createShareWithLinkIntent(String link) {
- Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
- intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
- intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE);
- return intentToShareLink;
- }
-
-
/**
* Helper method to share a file with a known sharee. Starts a request to do it in {@link OperationsService}
*
import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.operations.common.SyncOperation;
+import java.util.ArrayList;
+
public class CreateShareViaLinkOperation extends SyncOperation {
private String mPath;
// Check if the share link already exists
RemoteOperation operation = new GetRemoteSharesForFileOperation(mPath, false, false);
RemoteOperationResult result = operation.execute(client);
- // TODO - fix this check; if the user already shared the file with users or group, a share via link will not be created
- if (!result.isSuccess() || result.getData().size() <= 0) {
+ boolean shareByLink = false;
+ // Check if the file is shared by link
+ if (result.isSuccess() && result.getData().size() > 0){
+ ArrayList<Object> shares = result.getData();
+ for(Object object: shares){
+ if (((OCShare) object).getShareType() == ShareType.PUBLIC_LINK){
+ shareByLink = true;
+ break;
+ }
+ }
+ }
+
+ if (!result.isSuccess() || !shareByLink) {
operation = new CreateRemoteShareOperation(
mPath,
ShareType.PUBLIC_LINK,
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.annotation.TargetApi;
-import android.support.v7.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
+import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.operations.CopyFileOperation;
import com.owncloud.android.operations.CreateFolderOperation;
-import com.owncloud.android.operations.CreateShareViaLinkOperation;
-import com.owncloud.android.operations.CreateShareWithShareeOperation;
import com.owncloud.android.operations.MoveFileOperation;
import com.owncloud.android.operations.RefreshFolderOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
-import com.owncloud.android.operations.UnshareOperation;
import com.owncloud.android.services.observer.FileObserverService;
import com.owncloud.android.syncadapter.FileSyncAdapter;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
} else if (operation instanceof CreateFolderOperation) {
onCreateFolderOperationFinish((CreateFolderOperation) operation, result);
- } else if (operation instanceof CreateShareViaLinkOperation ||
- operation instanceof CreateShareWithShareeOperation ) {
-
- refreshShowDetails();
- refreshListOfFilesFragment();
-
- } else if (operation instanceof UnshareOperation) {
- onUnshareLinkOperationFinish((UnshareOperation) operation, result);
-
} else if (operation instanceof MoveFileOperation) {
onMoveFileOperationFinish((MoveFileOperation) operation, result);
}
- private void onUnshareLinkOperationFinish(UnshareOperation operation,
- RemoteOperationResult result) {
- if (result.isSuccess()) {
- refreshShowDetails();
- refreshListOfFilesFragment();
-
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- cleanSecondFragment();
- refreshListOfFilesFragment();
- }
- }
-
private void refreshShowDetails() {
FileFragment details = getSecondFragment();
if (details != null) {
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.ui.activity.ComponentsGetter;
import com.owncloud.android.ui.activity.CopyToClipboardActivity;
import com.owncloud.android.ui.activity.FileActivity;
ComponentName name=new ComponentName(
actInfo.applicationInfo.packageName,
actInfo.name);
- mIntent.setComponent(name);
+ mIntent.setComponent(name);
- if (sendAction) {
- dialog.dismiss(); // explicitly added for Android 2.x devices
+ // Send the intent
+ dialog.dismiss(); // explicitly added for Android 2.x devices
- // Send the file
- ((FileActivity)getActivity()).startActivity(mIntent);
-
- } else {
-// // Create a new share resource
-// ((ComponentsGetter)getActivity()).getFileOperationsHelper()
-// .shareFileWithLinkToApp(mFile, "", mIntent);
- // Send the intent
- dialog.dismiss(); // explicitly added for Android 2.x devices
-
- // Send the file
- ((FileActivity)getActivity()).startActivity(mIntent);
- }
+ // Send the file
+ ((FileActivity)getActivity()).startActivity(mIntent);
}
})
.create();
((FileActivity) getActivity()).getFileOperationsHelper().
setPasswordToShareViaLink(mFile, password);
- } else { // TODO remove old flow
- ((FileActivity) getActivity()).getFileOperationsHelper()
- .shareFileWithLinkToApp(mFile, password, mSendIntent);
}
} else {
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLinkOLD(getFile());
- return true;
- }
- case R.id.action_share_with_users: {
mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
return true;
}
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileViaLink(getFile());
- return true;
- }
-
case R.id.action_open_file_with: {
mContainerActivity.getFileOperationsHelper().openFile(getFile());
return true;
mTargetFile = (OCFile) mAdapter.getItem(filePosition);
switch (menuId) {
case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLinkOLD(mTargetFile);
- return true;
- }
- case R.id.action_share_with_users: {
mContainerActivity.getFileOperationsHelper().showShareFile(mTargetFile);
return true;
}
mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
return true;
}
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileViaLink(mTargetFile);
- return true;
- }
case R.id.action_rename_file: {
RenameFileDialogFragment dialog = RenameFileDialogFragment.newInstance(mTargetFile);
dialog.show(getFragmentManager(), FileDetailFragment.FTAG_RENAME_FILE);
import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.operations.CreateShareViaLinkOperation;
-import com.owncloud.android.operations.CreateShareWithShareeOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
-import com.owncloud.android.operations.UnshareOperation;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
-import com.owncloud.android.ui.activity.ShareActivity;
import com.owncloud.android.ui.fragment.FileFragment;
public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
super.onRemoteOperationFinish(operation, result);
- if (operation instanceof CreateShareViaLinkOperation ||
- operation instanceof CreateShareWithShareeOperation) {
- onCreateShareOperationFinish(result);
-
- } else if (operation instanceof UnshareOperation) {
- onUnshareLinkOperationFinish((UnshareOperation) operation, result);
-
- } else if (operation instanceof RemoveFileOperation) {
+ if (operation instanceof RemoveFileOperation) {
finish();
} else if (operation instanceof SynchronizeFileOperation) {
onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
}
}
-
- private void onUnshareLinkOperationFinish(UnshareOperation operation,
- RemoteOperationResult result) {
- if (result.isSuccess()) {
- OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
- if (file != null) {
- setFile(file);
- }
- invalidateOptionsMenu();
- } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
- backToDisplayActivity();
- }
-
- }
-
- private void onCreateShareOperationFinish(RemoteOperationResult result) {
- if (result.isSuccess()) {
- OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
- if (file != null) {
- setFile(file);
- }
- invalidateOptionsMenu();
- }
- }
-
private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
RemoteOperationResult result) {
if (result.isSuccess()) {
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLinkOLD(getFile());
- return true;
- }
- case R.id.action_share_with_users: {
mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
return true;
}
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileViaLink(getFile());
- return true;
- }
case R.id.action_open_file_with: {
openFile();
return true;
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- stopPreview(false);
- mContainerActivity.getFileOperationsHelper().shareFileWithLinkOLD(getFile());
- return true;
- }
- case R.id.action_share_with_users: {
seeShareFile();
return true;
}
- case R.id.action_unshare_file: {
- stopPreview(false);
- mContainerActivity.getFileOperationsHelper().unshareFileViaLink(getFile());
- return true;
- }
case R.id.action_open_file_with: {
openFile();
return true;
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share_file: {
- mContainerActivity.getFileOperationsHelper().shareFileWithLinkOLD(getFile());
- return true;
- }
- case R.id.action_share_with_users: {
mContainerActivity.getFileOperationsHelper().showShareFile(getFile());
return true;
}
- case R.id.action_unshare_file: {
- mContainerActivity.getFileOperationsHelper().unshareFileViaLink(getFile());
- return true;
- }
case R.id.action_open_file_with: {
openFile();
return true;