OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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.ui.base; | 5 package org.chromium.ui.base; |
6 | 6 |
7 import android.content.ClipData; | 7 import android.content.ClipData; |
8 import android.content.ClipboardManager; | 8 import android.content.ClipboardManager; |
9 import android.content.Context; | 9 import android.content.Context; |
10 | 10 |
| 11 import org.chromium.base.ContextUtils; |
11 import org.chromium.base.annotations.CalledByNative; | 12 import org.chromium.base.annotations.CalledByNative; |
12 import org.chromium.base.annotations.JNINamespace; | 13 import org.chromium.base.annotations.JNINamespace; |
13 import org.chromium.base.annotations.SuppressFBWarnings; | 14 import org.chromium.base.annotations.SuppressFBWarnings; |
14 import org.chromium.ui.R; | 15 import org.chromium.ui.R; |
15 import org.chromium.ui.widget.Toast; | 16 import org.chromium.ui.widget.Toast; |
16 | 17 |
17 /** | 18 /** |
18 * Simple proxy that provides C++ code with an access pathway to the Android | 19 * Simple proxy that provides C++ code with an access pathway to the Android cli
pboard. |
19 * clipboard. | |
20 */ | 20 */ |
21 @JNINamespace("ui") | 21 @JNINamespace("ui") |
22 public class Clipboard { | 22 public class Clipboard { |
| 23 private static Clipboard sInstance; |
| 24 |
23 // Necessary for coercing clipboard contents to text if they require | 25 // Necessary for coercing clipboard contents to text if they require |
24 // access to network resources, etceteras (e.g., URI in clipboard) | 26 // access to network resources, etceteras (e.g., URI in clipboard) |
25 private final Context mContext; | 27 private final Context mContext; |
26 | 28 |
27 private final ClipboardManager mClipboardManager; | 29 private final ClipboardManager mClipboardManager; |
28 | 30 |
29 /** | 31 /** |
30 * Use the factory constructor instead. | 32 * Get the singleton Clipboard instance (creating it if needed). |
31 * | |
32 * @param context for accessing the clipboard | |
33 */ | 33 */ |
34 public Clipboard(final Context context) { | 34 @CalledByNative |
35 mContext = context; | 35 public static Clipboard getInstance() { |
36 mClipboardManager = (ClipboardManager) | 36 if (sInstance == null) { |
37 context.getSystemService(Context.CLIPBOARD_SERVICE); | 37 sInstance = new Clipboard(); |
| 38 } |
| 39 return sInstance; |
| 40 } |
| 41 |
| 42 private Clipboard() { |
| 43 mContext = ContextUtils.getApplicationContext(); |
| 44 mClipboardManager = |
| 45 (ClipboardManager) ContextUtils.getApplicationContext().getSyste
mService( |
| 46 Context.CLIPBOARD_SERVICE); |
38 } | 47 } |
39 | 48 |
40 /** | 49 /** |
41 * Returns a new Clipboard object bound to the specified context. | |
42 * | |
43 * @param context for accessing the clipboard | |
44 * @return the new object | |
45 */ | |
46 @CalledByNative | |
47 private static Clipboard create(final Context context) { | |
48 return new Clipboard(context); | |
49 } | |
50 | |
51 /** | |
52 * Emulates the behavior of the now-deprecated | 50 * Emulates the behavior of the now-deprecated |
53 * {@link android.text.ClipboardManager#getText()} by invoking | 51 * {@link android.text.ClipboardManager#getText()} by invoking |
54 * {@link android.content.ClipData.Item#coerceToText(Context)} on the first | 52 * {@link android.content.ClipData.Item#coerceToText(Context)} on the first |
55 * item in the clipboard (if any) and returning the result as a string. | 53 * item in the clipboard (if any) and returning the result as a string. |
56 * <p> | 54 * <p> |
57 * This is quite different than simply calling {@link Object#toString()} on | 55 * This is quite different than simply calling {@link Object#toString()} on |
58 * the clip; consumers of this API should familiarize themselves with the | 56 * the clip; consumers of this API should familiarize themselves with the |
59 * process described in | 57 * process described in |
60 * {@link android.content.ClipData.Item#coerceToText(Context)} before using | 58 * {@link android.content.ClipData.Item#coerceToText(Context)} before using |
61 * this method. | 59 * this method. |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 private void setPrimaryClipNoException(ClipData clip) { | 133 private void setPrimaryClipNoException(ClipData clip) { |
136 try { | 134 try { |
137 mClipboardManager.setPrimaryClip(clip); | 135 mClipboardManager.setPrimaryClip(clip); |
138 } catch (Exception ex) { | 136 } catch (Exception ex) { |
139 // Ignore any exceptions here as certain devices have bugs and will
fail. | 137 // Ignore any exceptions here as certain devices have bugs and will
fail. |
140 String text = mContext.getString(R.string.copy_to_clipboard_failure_
message); | 138 String text = mContext.getString(R.string.copy_to_clipboard_failure_
message); |
141 Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show(); | 139 Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show(); |
142 } | 140 } |
143 } | 141 } |
144 } | 142 } |
OLD | NEW |