| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.share; | 5 package org.chromium.chrome.browser.share; |
| 6 | 6 |
| 7 import android.annotation.TargetApi; | 7 import android.annotation.TargetApi; |
| 8 import android.app.Activity; | 8 import android.app.Activity; |
| 9 import android.app.PendingIntent; | 9 import android.app.PendingIntent; |
| 10 import android.content.BroadcastReceiver; | 10 import android.content.BroadcastReceiver; |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 } else { | 307 } else { |
| 308 showShareDialog( | 308 showShareDialog( |
| 309 saveLastUsed, activity, title, text, url, offlineUri, screen
shotUri, callback); | 309 saveLastUsed, activity, title, text, url, offlineUri, screen
shotUri, callback); |
| 310 } | 310 } |
| 311 } | 311 } |
| 312 | 312 |
| 313 /** | 313 /** |
| 314 * Trigger the share action for the given image data. | 314 * Trigger the share action for the given image data. |
| 315 * @param activity The activity used to trigger the share action. | 315 * @param activity The activity used to trigger the share action. |
| 316 * @param jpegImageData The image data to be shared in jpeg format. | 316 * @param jpegImageData The image data to be shared in jpeg format. |
| 317 * @param name When this is not null, it will share the image directly with
whatever the |
| 318 * component name is. |
| 317 */ | 319 */ |
| 318 public static void shareImage(final Activity activity, final byte[] jpegImag
eData) { | 320 public static void shareImage( |
| 321 final Activity activity, final byte[] jpegImageData, final Component
Name name) { |
| 319 if (jpegImageData.length == 0) { | 322 if (jpegImageData.length == 0) { |
| 320 Log.w(TAG, "Share failed -- Received image contains no data."); | 323 Log.w(TAG, "Share failed -- Received image contains no data."); |
| 321 return; | 324 return; |
| 322 } | 325 } |
| 323 | 326 |
| 324 new AsyncTask<Void, Void, File>() { | 327 new AsyncTask<Void, Void, File>() { |
| 325 @Override | 328 @Override |
| 326 protected File doInBackground(Void... params) { | 329 protected File doInBackground(Void... params) { |
| 327 FileOutputStream fOut = null; | 330 FileOutputStream fOut = null; |
| 328 try { | 331 try { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 355 | 358 |
| 356 @Override | 359 @Override |
| 357 protected void onPostExecute(File saveFile) { | 360 protected void onPostExecute(File saveFile) { |
| 358 if (saveFile == null) return; | 361 if (saveFile == null) return; |
| 359 | 362 |
| 360 if (ApplicationStatus.getStateForApplication() | 363 if (ApplicationStatus.getStateForApplication() |
| 361 != ApplicationState.HAS_DESTROYED_ACTIVITIES) { | 364 != ApplicationState.HAS_DESTROYED_ACTIVITIES) { |
| 362 Uri imageUri = ApiCompatibilityUtils.getUriForImageCaptureFi
le(activity, | 365 Uri imageUri = ApiCompatibilityUtils.getUriForImageCaptureFi
le(activity, |
| 363 saveFile); | 366 saveFile); |
| 364 | 367 |
| 365 Intent chooserIntent = Intent.createChooser(getShareImageInt
ent(imageUri), | 368 if (name == null) { |
| 366 activity.getString(R.string.share_link_chooser_title
)); | 369 Intent chooserIntent = Intent.createChooser(getShareImag
eIntent(imageUri), |
| 367 fireIntent(activity, chooserIntent); | 370 activity.getString(R.string.share_link_chooser_t
itle)); |
| 371 fireIntent(activity, chooserIntent); |
| 372 } else { |
| 373 Intent imageIntent = getShareImageIntent(imageUri); |
| 374 imageIntent.setComponent(name); |
| 375 fireIntent(activity, imageIntent); |
| 376 } |
| 368 } | 377 } |
| 369 } | 378 } |
| 370 }.execute(); | 379 }.execute(); |
| 371 } | 380 } |
| 372 | 381 |
| 373 /** | 382 /** |
| 374 * Persists the screenshot file and notifies the file provider that the file
is ready to be | 383 * Persists the screenshot file and notifies the file provider that the file
is ready to be |
| 375 * accessed by the client. | 384 * accessed by the client. |
| 376 * | 385 * |
| 377 * The bitmap is compressed to JPEG before being written to the file. | 386 * The bitmap is compressed to JPEG before being written to the file. |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 shareIntent(saveLastUsed, activity, intent, callback); | 542 shareIntent(saveLastUsed, activity, intent, callback); |
| 534 } | 543 } |
| 535 | 544 |
| 536 /** | 545 /** |
| 537 * Set the icon and the title for the menu item used for direct share. | 546 * Set the icon and the title for the menu item used for direct share. |
| 538 * | 547 * |
| 539 * @param activity Activity that is used to access the package manager. | 548 * @param activity Activity that is used to access the package manager. |
| 540 * @param item The menu item that is used for direct share | 549 * @param item The menu item that is used for direct share |
| 541 */ | 550 */ |
| 542 public static void configureDirectShareMenuItem(Activity activity, MenuItem
item) { | 551 public static void configureDirectShareMenuItem(Activity activity, MenuItem
item) { |
| 552 Drawable directShareIcon; |
| 553 CharSequence directShareTitle; |
| 554 |
| 555 Pair<Drawable, CharSequence> directShare = getShareableIconAndName(activ
ity); |
| 556 directShareIcon = directShare.first; |
| 557 directShareTitle = directShare.second; |
| 558 |
| 559 item.setIcon(directShareIcon); |
| 560 if (directShareTitle != null) { |
| 561 item.setTitle( |
| 562 activity.getString(R.string.accessibility_menu_share_via, di
rectShareTitle)); |
| 563 } |
| 564 } |
| 565 |
| 566 /** |
| 567 * Get the icon and name of the most recently shared app within chrome. |
| 568 * @param activity Activity that is used to access the package manager. |
| 569 * @return The Image and the String of the recently shared Icon. |
| 570 */ |
| 571 public static Pair<Drawable, CharSequence> getShareableIconAndName(Activity
activity) { |
| 543 Drawable directShareIcon = null; | 572 Drawable directShareIcon = null; |
| 544 CharSequence directShareTitle = null; | 573 CharSequence directShareTitle = null; |
| 545 | 574 |
| 546 final ComponentName component = getLastShareComponentName(); | 575 final ComponentName component = getLastShareComponentName(); |
| 547 boolean isComponentValid = false; | 576 boolean isComponentValid = false; |
| 548 if (component != null) { | 577 if (component != null) { |
| 549 Intent intent = getShareIntent(activity, "", "", "", null, null); | 578 Intent intent = getShareIntent(activity, "", "", "", null, null); |
| 550 intent.setPackage(component.getPackageName()); | 579 intent.setPackage(component.getPackageName()); |
| 551 PackageManager manager = activity.getPackageManager(); | 580 PackageManager manager = activity.getPackageManager(); |
| 552 List<ResolveInfo> resolveInfoList = manager.queryIntentActivities(in
tent, 0); | 581 List<ResolveInfo> resolveInfoList = manager.queryIntentActivities(in
tent, 0); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 // Use the default null values. | 619 // Use the default null values. |
| 591 } catch (ExecutionException ee) { | 620 } catch (ExecutionException ee) { |
| 592 // Use the default null values. | 621 // Use the default null values. |
| 593 } catch (TimeoutException te) { | 622 } catch (TimeoutException te) { |
| 594 // Use the default null values. | 623 // Use the default null values. |
| 595 } | 624 } |
| 596 RecordHistogram.recordBooleanHistogram( | 625 RecordHistogram.recordBooleanHistogram( |
| 597 "Android.IsLastSharedAppInfoRetrieved", retrieved); | 626 "Android.IsLastSharedAppInfoRetrieved", retrieved); |
| 598 } | 627 } |
| 599 | 628 |
| 600 item.setIcon(directShareIcon); | 629 return new Pair<>(directShareIcon, directShareTitle); |
| 601 if (directShareTitle != null) { | |
| 602 item.setTitle(activity.getString(R.string.accessibility_menu_share_v
ia, | |
| 603 directShareTitle)); | |
| 604 } | |
| 605 } | 630 } |
| 606 | 631 |
| 607 /* | 632 /* |
| 608 * Stores the component selected for sharing last time share was called. | 633 * Stores the component selected for sharing last time share was called. |
| 609 * | 634 * |
| 610 * This method is public since it is used in tests to avoid creating share d
ialog. | 635 * This method is public since it is used in tests to avoid creating share d
ialog. |
| 611 */ | 636 */ |
| 612 @VisibleForTesting | 637 @VisibleForTesting |
| 613 public static void setLastShareComponentName(ComponentName component) { | 638 public static void setLastShareComponentName(ComponentName component) { |
| 614 SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); | 639 SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 | 692 |
| 668 private static Intent getDirectShareIntentForComponent(Activity activity, St
ring title, | 693 private static Intent getDirectShareIntentForComponent(Activity activity, St
ring title, |
| 669 String text, String url, Uri offlineUri, Uri screenshotUri, Componen
tName component) { | 694 String text, String url, Uri offlineUri, Uri screenshotUri, Componen
tName component) { |
| 670 Intent intent = getShareIntent(activity, title, text, url, offlineUri, s
creenshotUri); | 695 Intent intent = getShareIntent(activity, title, text, url, offlineUri, s
creenshotUri); |
| 671 intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT | 696 intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT |
| 672 | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); | 697 | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); |
| 673 intent.setComponent(component); | 698 intent.setComponent(component); |
| 674 return intent; | 699 return intent; |
| 675 } | 700 } |
| 676 | 701 |
| 677 private static ComponentName getLastShareComponentName() { | 702 public static ComponentName getLastShareComponentName() { |
| 678 SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); | 703 SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); |
| 679 String packageName = preferences.getString(PACKAGE_NAME_KEY, null); | 704 String packageName = preferences.getString(PACKAGE_NAME_KEY, null); |
| 680 String className = preferences.getString(CLASS_NAME_KEY, null); | 705 String className = preferences.getString(CLASS_NAME_KEY, null); |
| 681 if (packageName == null || className == null) return null; | 706 if (packageName == null || className == null) return null; |
| 682 return new ComponentName(packageName, className); | 707 return new ComponentName(packageName, className); |
| 683 } | 708 } |
| 684 } | 709 } |
| OLD | NEW |