Implemented option to copy shared link in clipboard instead of trusting in external clipboard front-ends

This commit is contained in:
David A. Velasco 2014-02-19 18:00:49 +01:00
parent 7a4ac19993
commit 42fc189367
9 changed files with 96 additions and 15 deletions

View file

@ -80,12 +80,10 @@
<category android:name="android.intent.category.DEFAULT" >
</category>
<data android:mimeType="*/*" android:scheme="content">
<data android:mimeType="*/*" >
</data>
<data android:mimeType="*/*" android:scheme="file">
</data>
</intent-filter>
</intent-filter>
</activity>
<activity
android:name=".ui.activity.Preferences"
@ -183,6 +181,11 @@
</receiver>
<service android:name=".files.services.FileObserverService"/>
<activity
android:name=".ui.activity.CopyToClipboardActivity"
android:label="@string/copy_link"
android:icon="@drawable/copy_link" />
</application>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -100,7 +100,7 @@
<string name="sync_fail_in_favourites_content">Contents of %1$d files could not be sync\'ed (%2$d conflicts)</string>
<string name="sync_foreign_files_forgotten_ticker">Some local files were forgotten</string>
<string name="sync_foreign_files_forgotten_content">%1$d files out of the %2$s directory could not be copied into</string>
<string name="sync_foreign_files_forgotten_explanation">As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s directory and retain the link to %4$s.\n\nListed below are the local file(s), and the the remote file(s) in %5$s they were linked to.</string>
<string name="sync_foreign_files_forgotten_explanation">As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s directory and retain the link to %4$s.\n\nListed below are the local file(s), and the remote file(s) in %5$s they were linked to.</string>
<string name="sync_current_folder_was_removed">Folder %1$s does not exist anymore</string>
<string name="foreign_files_move">"Move all"</string>
<string name="foreign_files_success">"All files were moved"</string>
@ -252,4 +252,7 @@
<string name="share_link_file_error">An error occurred while trying to share this file or folder</string>
<string name="unshare_link_file_no_exist">Unable to unshare this file or folder. It does not exist.</string>
<string name="unshare_link_file_error">An error occurred while trying to unshare this file or folder</string>
<string name="copy_link">Copy link</string>
<string name="clipboard_text_copied">Copied to clipboard</string>
</resources>

View file

@ -33,7 +33,7 @@ import com.owncloud.android.lib.network.webdav.WebdavUtils;
import com.owncloud.android.lib.utils.OwnCloudVersion;
import com.owncloud.android.services.OperationsService;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.dialog.ActivityChooserDialog;
import com.owncloud.android.ui.dialog.ShareLinkToDialog;
import com.owncloud.android.utils.Log_OC;
/**
@ -89,7 +89,7 @@ public class FileOperationsHelper {
String link = "https://fake.url";
Intent intent = createShareWithLinkIntent(link);
String[] packagesToExclude = new String[] { callerActivity.getPackageName() };
DialogFragment chooserDialog = ActivityChooserDialog.newInstance(intent, packagesToExclude, file);
DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent, packagesToExclude, file);
chooserDialog.show(callerActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
} else {

View file

@ -0,0 +1,66 @@
/* ownCloud Android client application
* Copyright (C) 2012-2014 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 <http://www.gnu.org/licenses/>.
*
*/
package com.owncloud.android.ui.activity;
import com.owncloud.android.R;
import android.app.Activity;
import android.content.ClipData;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.ClipboardManager;
import android.widget.Toast;
/**
* Activity copying the text of the received Intent into the system clibpoard.
*
* @author David A. Velasco
*/
@SuppressWarnings("deprecation")
public class CopyToClipboardActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get the clipboard system service
ClipboardManager clipboardManager = (ClipboardManager) this.getSystemService(CLIPBOARD_SERVICE);
// get the text to copy into the clipboard
Intent intent = getIntent();
CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_TEXT);
// and put the text the clipboard
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
// API level >= 11 -> modern Clipboard
ClipData clip = ClipData.newPlainText("ownCloud was here", text);
((android.content.ClipboardManager)clipboardManager).setPrimaryClip(clip);
} else {
// API level >= 11 -> legacy Clipboard
clipboardManager.setText(text);
}
// alert the user that the text is in the clipboard and we're done
Toast.makeText(this, R.string.clipboard_text_copied, Toast.LENGTH_SHORT).show();
finish();
}
}

View file

@ -43,6 +43,7 @@ import com.actionbarsherlock.app.SherlockDialogFragment;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.files.FileOperationsHelper;
import com.owncloud.android.ui.activity.CopyToClipboardActivity;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.utils.Log_OC;
@ -52,19 +53,19 @@ import com.owncloud.android.utils.Log_OC;
*
* @author David A. Velasco
*/
public class ActivityChooserDialog extends SherlockDialogFragment {
public class ShareLinkToDialog extends SherlockDialogFragment {
private final static String TAG = ActivityChooserDialog.class.getSimpleName();
private final static String ARG_INTENT = ActivityChooserDialog.class.getSimpleName() + ".ARG_INTENT";
private final static String ARG_PACKAGES_TO_EXCLUDE = ActivityChooserDialog.class.getSimpleName() + ".ARG_PACKAGES_TO_EXCLUDE";
private final static String ARG_FILE_TO_SHARE = ActivityChooserDialog.class.getSimpleName() + ".FILE_TO_SHARE";
private final static String TAG = ShareLinkToDialog.class.getSimpleName();
private final static String ARG_INTENT = ShareLinkToDialog.class.getSimpleName() + ".ARG_INTENT";
private final static String ARG_PACKAGES_TO_EXCLUDE = ShareLinkToDialog.class.getSimpleName() + ".ARG_PACKAGES_TO_EXCLUDE";
private final static String ARG_FILE_TO_SHARE = ShareLinkToDialog.class.getSimpleName() + ".FILE_TO_SHARE";
private ActivityAdapter mAdapter;
private OCFile mFile;
private Intent mIntent;
public static ActivityChooserDialog newInstance(Intent intent, String[] packagesToExclude, OCFile fileToShare) {
ActivityChooserDialog f = new ActivityChooserDialog();
public static ShareLinkToDialog newInstance(Intent intent, String[] packagesToExclude, OCFile fileToShare) {
ShareLinkToDialog f = new ShareLinkToDialog();
Bundle args = new Bundle();
args.putParcelable(ARG_INTENT, intent);
args.putStringArray(ARG_PACKAGES_TO_EXCLUDE, packagesToExclude);
@ -73,7 +74,7 @@ public class ActivityChooserDialog extends SherlockDialogFragment {
return f;
}
public ActivityChooserDialog() {
public ShareLinkToDialog() {
super();
Log_OC.d(TAG, "constructor");
}
@ -95,6 +96,14 @@ public class ActivityChooserDialog extends SherlockDialogFragment {
it.remove();
}
}
// add activity for copy to clipboard
Intent copyToClipboardIntent = new Intent(getSherlockActivity(), CopyToClipboardActivity.class);
List<ResolveInfo> copyToClipboard = pm.queryIntentActivities(copyToClipboardIntent, 0);
if (!copyToClipboard.isEmpty()) {
activities.add(copyToClipboard.get(0));
}
Collections.sort(activities, new ResolveInfo.DisplayNameComparator(pm));
mAdapter = new ActivityAdapter(getSherlockActivity(), pm, activities);