Commit 9742763c authored by Michael van Ouwerkerk's avatar Michael van Ouwerkerk Committed by Commit Bot

Show sending device name in Shared Clipboard notification.

Screenshot links:
* https://storage.cloud.google.com/chromium-translation-screenshots/db20d59a367785851159036132b461e7025c6fc8
* https://storage.cloud.google.com/chromium-translation-screenshots/cfc10fd03d677cb87c705fbfe45c7e312a618f14

Bug: 992345
Change-Id: Ida28748db6927e0b50930163877a915bfcd4c4bf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1754011Reviewed-by: default avatarRichard Knoll <knollr@chromium.org>
Commit-Queue: Michael van Ouwerkerk <mvanouwerkerk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#687265}
parent 02426f68
...@@ -8,6 +8,8 @@ import android.app.PendingIntent; ...@@ -8,6 +8,8 @@ import android.app.PendingIntent;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources;
import android.text.TextUtils;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
...@@ -36,19 +38,21 @@ public class SharedClipboardMessageHandler { ...@@ -36,19 +38,21 @@ public class SharedClipboardMessageHandler {
* written to the clipboard. * written to the clipboard.
*/ */
@CalledByNative @CalledByNative
private static void showNotification() { private static void showNotification(String deviceName) {
// TODO(mvanouwerkerk): Set the correct small icon for the notification. // TODO(mvanouwerkerk): Set the correct small icon for the notification.
// TODO(mvanouwerkerk): Parameterize title text with machine name.
Context context = ContextUtils.getApplicationContext(); Context context = ContextUtils.getApplicationContext();
PendingIntentProvider contentIntent = PendingIntentProvider.getBroadcast(context, PendingIntentProvider contentIntent = PendingIntentProvider.getBroadcast(context,
/*requestCode=*/0, new Intent(context, TapReceiver.class), /*requestCode=*/0, new Intent(context, TapReceiver.class),
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT);
Resources resources = context.getResources();
String notificationTitle = TextUtils.isEmpty(deviceName)
? resources.getString(R.string.shared_clipboard_notification_title_unknown_device)
: resources.getString(R.string.shared_clipboard_notification_title, deviceName);
SharingNotificationUtil.showNotification( SharingNotificationUtil.showNotification(
NotificationUmaTracker.SystemNotificationType.SHARED_CLIPBOARD, NotificationUmaTracker.SystemNotificationType.SHARED_CLIPBOARD,
NotificationConstants.GROUP_SHARED_CLIPBOARD, NotificationConstants.GROUP_SHARED_CLIPBOARD,
NotificationConstants.NOTIFICATION_ID_SHARED_CLIPBOARD, contentIntent, NotificationConstants.NOTIFICATION_ID_SHARED_CLIPBOARD, contentIntent,
context.getResources().getString(R.string.shared_clipboard_notification_title), notificationTitle, resources.getString(R.string.shared_clipboard_notification_text),
context.getResources().getString(R.string.shared_clipboard_notification_text),
R.drawable.ic_phone_googblue_36dp); R.drawable.ic_phone_googblue_36dp);
} }
} }
...@@ -3847,9 +3847,12 @@ The site does NOT gain access to the camera. The camera images are only visible ...@@ -3847,9 +3847,12 @@ The site does NOT gain access to the camera. The camera images are only visible
</message> </message>
<!-- Shared Clipboard --> <!-- Shared Clipboard -->
<message name="IDS_SHARED_CLIPBOARD_NOTIFICATION_TITLE" desc="Title text displayed in a shared clipboard notification."> <message name="IDS_SHARED_CLIPBOARD_NOTIFICATION_TITLE_UNKNOWN_DEVICE" desc="Title text displayed in a shared clipboard notification when the source device name is unknown.">
Text shared from other device Text shared from other device
</message> </message>
<message name="IDS_SHARED_CLIPBOARD_NOTIFICATION_TITLE" desc="Title text displayed in a shared clipboard notification when the source device name is known.">
Text shared from <ph name="DEVICE_NAME">%1$s<ex>Pixel 3</ex></ph>
</message>
<message name="IDS_SHARED_CLIPBOARD_NOTIFICATION_TEXT" desc="Content text displayed in a shared clipboard notification."> <message name="IDS_SHARED_CLIPBOARD_NOTIFICATION_TEXT" desc="Content text displayed in a shared clipboard notification.">
Copied to your clipboard Copied to your clipboard
</message> </message>
......
...@@ -4,15 +4,23 @@ ...@@ -4,15 +4,23 @@
#include "chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_android.h" #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_android.h"
#include <memory>
#include <string>
#include "base/android/jni_string.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/android/chrome_jni_headers/SharedClipboardMessageHandler_jni.h" #include "chrome/android/chrome_jni_headers/SharedClipboardMessageHandler_jni.h"
#include "chrome/browser/sharing/proto/shared_clipboard_message.pb.h" #include "chrome/browser/sharing/proto/shared_clipboard_message.pb.h"
#include "chrome/browser/sharing/proto/sharing_message.pb.h" #include "chrome/browser/sharing/proto/sharing_message.pb.h"
#include "chrome/browser/sharing/sharing_service.h"
#include "components/sync_device_info/device_info.h"
#include "ui/base/clipboard/clipboard_types.h" #include "ui/base/clipboard/clipboard_types.h"
#include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/clipboard/scoped_clipboard_writer.h"
SharedClipboardMessageHandler::SharedClipboardMessageHandler() = default; SharedClipboardMessageHandler::SharedClipboardMessageHandler(
SharingService* sharing_service)
: sharing_service_(sharing_service) {}
SharedClipboardMessageHandler::~SharedClipboardMessageHandler() = default; SharedClipboardMessageHandler::~SharedClipboardMessageHandler() = default;
...@@ -23,6 +31,13 @@ void SharedClipboardMessageHandler::OnMessage( ...@@ -23,6 +31,13 @@ void SharedClipboardMessageHandler::OnMessage(
ui::ScopedClipboardWriter(ui::ClipboardType::kCopyPaste) ui::ScopedClipboardWriter(ui::ClipboardType::kCopyPaste)
.WriteText(base::UTF8ToUTF16(message.shared_clipboard_message().text())); .WriteText(base::UTF8ToUTF16(message.shared_clipboard_message().text()));
std::string device_name;
std::unique_ptr<syncer::DeviceInfo> device =
sharing_service_->GetDeviceByGuid(message.sender_guid());
if (device)
device_name = device->client_name();
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
Java_SharedClipboardMessageHandler_showNotification(env); Java_SharedClipboardMessageHandler_showNotification(
env, base::android::ConvertUTF8ToJavaString(env, device_name));
} }
...@@ -8,10 +8,12 @@ ...@@ -8,10 +8,12 @@
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/sharing/sharing_message_handler.h" #include "chrome/browser/sharing/sharing_message_handler.h"
class SharingService;
// Handles incoming messages for the shared clipboard feature. // Handles incoming messages for the shared clipboard feature.
class SharedClipboardMessageHandler : public SharingMessageHandler { class SharedClipboardMessageHandler : public SharingMessageHandler {
public: public:
SharedClipboardMessageHandler(); explicit SharedClipboardMessageHandler(SharingService* sharing_service);
~SharedClipboardMessageHandler() override; ~SharedClipboardMessageHandler() override;
// SharingMessageHandler implementation: // SharingMessageHandler implementation:
...@@ -19,6 +21,8 @@ class SharedClipboardMessageHandler : public SharingMessageHandler { ...@@ -19,6 +21,8 @@ class SharedClipboardMessageHandler : public SharingMessageHandler {
const chrome_browser_sharing::SharingMessage& message) override; const chrome_browser_sharing::SharingMessage& message) override;
private: private:
SharingService* sharing_service_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(SharedClipboardMessageHandler); DISALLOW_COPY_AND_ASSIGN(SharedClipboardMessageHandler);
}; };
......
...@@ -113,6 +113,14 @@ SharingService::~SharingService() { ...@@ -113,6 +113,14 @@ SharingService::~SharingService() {
sync_service_->RemoveObserver(this); sync_service_->RemoveObserver(this);
} }
std::unique_ptr<syncer::DeviceInfo> SharingService::GetDeviceByGuid(
const std::string& guid) const {
if (!IsSyncEnabled())
return nullptr;
return device_info_tracker_->GetDeviceInfo(guid);
}
std::vector<SharingDeviceInfo> SharingService::GetDeviceCandidates( std::vector<SharingDeviceInfo> SharingService::GetDeviceCandidates(
int required_capabilities) const { int required_capabilities) const {
if (!IsSyncEnabled()) if (!IsSyncEnabled())
......
...@@ -32,6 +32,7 @@ class GCMDriver; ...@@ -32,6 +32,7 @@ class GCMDriver;
} // namespace gcm } // namespace gcm
namespace syncer { namespace syncer {
class DeviceInfo;
class DeviceInfoTracker; class DeviceInfoTracker;
class LocalDeviceInfoProvider; class LocalDeviceInfoProvider;
class SyncService; class SyncService;
...@@ -76,6 +77,10 @@ class SharingService : public KeyedService, ...@@ -76,6 +77,10 @@ class SharingService : public KeyedService,
syncer::SyncService* sync_service); syncer::SyncService* sync_service);
~SharingService() override; ~SharingService() override;
// Returns the device matching |guid|, or nullptr if no match was found.
std::unique_ptr<syncer::DeviceInfo> GetDeviceByGuid(
const std::string& guid) const;
// Returns a list of DeviceInfo that is available to receive messages. // Returns a list of DeviceInfo that is available to receive messages.
// All returned devices has the specified |required_capabilities| defined in // All returned devices has the specified |required_capabilities| defined in
// SharingDeviceCapability enum. // SharingDeviceCapability enum.
...@@ -158,7 +163,7 @@ class SharingService : public KeyedService, ...@@ -158,7 +163,7 @@ class SharingService : public KeyedService,
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
ClickToCallMessageHandler click_to_call_message_handler_; ClickToCallMessageHandler click_to_call_message_handler_;
SharedClipboardMessageHandler shared_clipboard_message_handler_; SharedClipboardMessageHandler shared_clipboard_message_handler_{this};
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
base::WeakPtrFactory<SharingService> weak_ptr_factory_{this}; base::WeakPtrFactory<SharingService> weak_ptr_factory_{this};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment