Changeset View
Changeset View
Standalone View
Standalone View
src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java
Show All 29 Lines | |||||
30 | import android.content.ContentResolver; | 30 | import android.content.ContentResolver; | ||
31 | import android.content.Context; | 31 | import android.content.Context; | ||
32 | import android.content.Intent; | 32 | import android.content.Intent; | ||
33 | import android.content.res.Resources; | 33 | import android.content.res.Resources; | ||
34 | import android.database.Cursor; | 34 | import android.database.Cursor; | ||
35 | import android.graphics.drawable.Drawable; | 35 | import android.graphics.drawable.Drawable; | ||
36 | import android.net.Uri; | 36 | import android.net.Uri; | ||
37 | import android.os.Build; | 37 | import android.os.Build; | ||
38 | import android.os.Bundle; | ||||
38 | import android.provider.MediaStore; | 39 | import android.provider.MediaStore; | ||
39 | import android.support.v4.app.NotificationCompat; | 40 | import android.support.v4.app.NotificationCompat; | ||
40 | import android.support.v4.app.TaskStackBuilder; | 41 | import android.support.v4.app.TaskStackBuilder; | ||
41 | import android.support.v4.content.ContextCompat; | 42 | import android.support.v4.content.ContextCompat; | ||
42 | import android.support.v4.provider.DocumentFile; | 43 | import android.support.v4.provider.DocumentFile; | ||
43 | import android.util.Log; | 44 | import android.util.Log; | ||
44 | import android.widget.Toast; | 45 | import android.widget.Toast; | ||
45 | 46 | | |||
46 | import org.kde.kdeconnect.Device; | 47 | import org.kde.kdeconnect.Device; | ||
47 | import org.kde.kdeconnect.Helpers.FilesHelper; | 48 | import org.kde.kdeconnect.Helpers.FilesHelper; | ||
48 | import org.kde.kdeconnect.Helpers.MediaStoreHelper; | 49 | import org.kde.kdeconnect.Helpers.MediaStoreHelper; | ||
49 | import org.kde.kdeconnect.Helpers.NotificationHelper; | 50 | import org.kde.kdeconnect.Helpers.NotificationHelper; | ||
50 | import org.kde.kdeconnect.NetworkPackage; | 51 | import org.kde.kdeconnect.NetworkPackage; | ||
51 | import org.kde.kdeconnect.Plugins.Plugin; | 52 | import org.kde.kdeconnect.Plugins.Plugin; | ||
52 | import org.kde.kdeconnect.UserInterface.SettingsActivity; | 53 | import org.kde.kdeconnect.UserInterface.SettingsActivity; | ||
53 | import org.kde.kdeconnect_tp.R; | 54 | import org.kde.kdeconnect_tp.R; | ||
54 | 55 | | |||
55 | import java.io.File; | 56 | import java.io.File; | ||
56 | import java.io.FileNotFoundException; | 57 | import java.io.FileNotFoundException; | ||
57 | import java.io.InputStream; | 58 | import java.io.InputStream; | ||
58 | import java.io.OutputStream; | 59 | import java.io.OutputStream; | ||
60 | import java.net.URL; | ||||
59 | import java.util.ArrayList; | 61 | import java.util.ArrayList; | ||
60 | 62 | | |||
61 | public class SharePlugin extends Plugin { | 63 | public class SharePlugin extends Plugin { | ||
62 | 64 | | |||
63 | public final static String PACKAGE_TYPE_SHARE_REQUEST = "kdeconnect.share.request"; | 65 | public final static String PACKAGE_TYPE_SHARE_REQUEST = "kdeconnect.share.request"; | ||
64 | 66 | | |||
65 | final static boolean openUrlsDirectly = true; | 67 | final static boolean openUrlsDirectly = true; | ||
66 | 68 | | |||
▲ Show 20 Lines • Show All 327 Lines • ▼ Show 20 Line(s) | 330 | try { | |||
394 | return np; | 396 | return np; | ||
395 | } catch (Exception e) { | 397 | } catch (Exception e) { | ||
396 | Log.e("SendFileActivity", "Exception sending files"); | 398 | Log.e("SendFileActivity", "Exception sending files"); | ||
397 | e.printStackTrace(); | 399 | e.printStackTrace(); | ||
398 | return null; | 400 | return null; | ||
399 | } | 401 | } | ||
400 | } | 402 | } | ||
401 | 403 | | |||
404 | public static void share(Intent intent, Device device){ | ||||
405 | Bundle extras = intent.getExtras(); | ||||
406 | if (extras != null) { | ||||
407 | if (extras.containsKey(Intent.EXTRA_STREAM)) { | ||||
408 | | ||||
409 | try { | ||||
410 | | ||||
411 | ArrayList<Uri> uriList; | ||||
412 | if (!Intent.ACTION_SEND.equals(intent.getAction())) { | ||||
413 | uriList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); | ||||
414 | } else { | ||||
415 | Uri uri = extras.getParcelable(Intent.EXTRA_STREAM); | ||||
416 | uriList = new ArrayList<>(); | ||||
417 | uriList.add(uri); | ||||
418 | } | ||||
419 | | ||||
420 | SharePlugin.queuedSendUriList(device.getContext(), device, uriList); | ||||
421 | | ||||
422 | } catch (Exception e) { | ||||
423 | Log.e("ShareActivity", "Exception"); | ||||
424 | e.printStackTrace(); | ||||
425 | } | ||||
426 | | ||||
427 | } else if (extras.containsKey(Intent.EXTRA_TEXT)) { | ||||
428 | String text = extras.getString(Intent.EXTRA_TEXT); | ||||
429 | String subject = extras.getString(Intent.EXTRA_SUBJECT); | ||||
430 | | ||||
431 | //Hack: Detect shared youtube videos, so we can open them in the browser instead of as text | ||||
432 | if (subject != null && subject.endsWith("YouTube")) { | ||||
433 | int index = text.indexOf(": http://youtu.be/"); | ||||
434 | if (index > 0) { | ||||
435 | text = text.substring(index + 2); //Skip ": " | ||||
436 | } | ||||
437 | } | ||||
438 | | ||||
439 | boolean isUrl; | ||||
440 | try { | ||||
441 | new URL(text); | ||||
442 | isUrl = true; | ||||
443 | } catch (Exception e) { | ||||
444 | isUrl = false; | ||||
445 | } | ||||
446 | NetworkPackage np = new NetworkPackage(SharePlugin.PACKAGE_TYPE_SHARE_REQUEST); | ||||
447 | if (isUrl) { | ||||
448 | np.set("url", text); | ||||
449 | } else { | ||||
450 | np.set("text", text); | ||||
451 | } | ||||
452 | device.sendPackage(np); | ||||
453 | } | ||||
454 | } | ||||
455 | | ||||
456 | } | ||||
402 | 457 | | |||
403 | @Override | 458 | @Override | ||
404 | public String[] getSupportedPackageTypes() { | 459 | public String[] getSupportedPackageTypes() { | ||
405 | return new String[]{PACKAGE_TYPE_SHARE_REQUEST}; | 460 | return new String[]{PACKAGE_TYPE_SHARE_REQUEST}; | ||
406 | } | 461 | } | ||
407 | 462 | | |||
408 | @Override | 463 | @Override | ||
409 | public String[] getOutgoingPackageTypes() { | 464 | public String[] getOutgoingPackageTypes() { | ||
410 | return new String[]{PACKAGE_TYPE_SHARE_REQUEST}; | 465 | return new String[]{PACKAGE_TYPE_SHARE_REQUEST}; | ||
411 | } | 466 | } | ||
412 | 467 | | |||
413 | @Override | 468 | @Override | ||
414 | public String[] getOptionalPermissions() { | 469 | public String[] getOptionalPermissions() { | ||
415 | return new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; | 470 | return new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; | ||
416 | } | 471 | } | ||
417 | } | 472 | } |