summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt1
-rw-r--r--api/system-current.txt1
-rw-r--r--api/test-current.txt1
-rw-r--r--core/java/android/content/ClipDescription.java36
-rw-r--r--services/core/java/com/android/server/clipboard/ClipboardService.java5
5 files changed, 44 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt
index 95e8a5d967dc..86079a92f448 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -8057,6 +8057,7 @@ package android.content {
method public java.lang.CharSequence getLabel();
method public java.lang.String getMimeType(int);
method public int getMimeTypeCount();
+ method public long getTimestamp();
method public boolean hasMimeType(java.lang.String);
method public void setExtras(android.os.PersistableBundle);
method public void writeToParcel(android.os.Parcel, int);
diff --git a/api/system-current.txt b/api/system-current.txt
index 4bd383891f81..5db982a890a4 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -8443,6 +8443,7 @@ package android.content {
method public java.lang.CharSequence getLabel();
method public java.lang.String getMimeType(int);
method public int getMimeTypeCount();
+ method public long getTimestamp();
method public boolean hasMimeType(java.lang.String);
method public void setExtras(android.os.PersistableBundle);
method public void writeToParcel(android.os.Parcel, int);
diff --git a/api/test-current.txt b/api/test-current.txt
index 89b098ac5dac..65b4ccb6c34f 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -8080,6 +8080,7 @@ package android.content {
method public java.lang.CharSequence getLabel();
method public java.lang.String getMimeType(int);
method public int getMimeTypeCount();
+ method public long getTimestamp();
method public boolean hasMimeType(java.lang.String);
method public void setExtras(android.os.PersistableBundle);
method public void writeToParcel(android.os.Parcel, int);
diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java
index b33a915ad2a5..621136290fab 100644
--- a/core/java/android/content/ClipDescription.java
+++ b/core/java/android/content/ClipDescription.java
@@ -19,7 +19,9 @@ package android.content;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
+import android.os.SystemClock;
import android.text.TextUtils;
+import android.util.TimeUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -92,6 +94,7 @@ public class ClipDescription implements Parcelable {
final CharSequence mLabel;
private final ArrayList<String> mMimeTypes;
private PersistableBundle mExtras;
+ private long mTimeStamp;
/**
* Create a new clip.
@@ -113,6 +116,7 @@ public class ClipDescription implements Parcelable {
public ClipDescription(ClipDescription o) {
mLabel = o.mLabel;
mMimeTypes = new ArrayList<String>(o.mMimeTypes);
+ mTimeStamp = o.mTimeStamp;
}
/**
@@ -142,6 +146,29 @@ public class ClipDescription implements Parcelable {
}
/**
+ * Used for setting the timestamp at which the associated {@link ClipData} is copied to
+ * global clipboard.
+ *
+ * @param timeStamp at which the associated {@link ClipData} is copeid to clipboard in
+ * {@link SystemClock#elapsedRealtime()} time base.
+ * @hide
+ */
+ public void setTimestamp(long timeStamp) {
+ mTimeStamp = timeStamp;
+ }
+
+ /**
+ * Return the timestamp at which the associated {@link ClipData} is copied to global clipboard
+ * in the {@link SystemClock#elapsedRealtime()} time base.
+ *
+ * @return timestamp at which the associated {@link ClipData} is copied to global clipboard
+ * or {@code 0} if it is not copied to clipboard.
+ */
+ public long getTimestamp() {
+ return mTimeStamp;
+ }
+
+ /**
* Return the label for this clip.
*/
public CharSequence getLabel() {
@@ -285,6 +312,13 @@ public class ClipDescription implements Parcelable {
first = false;
b.append(mExtras.toString());
}
+ if (mTimeStamp > 0) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ TimeUtils.formatDuration(mTimeStamp, b);
+ }
return !first;
}
@@ -312,12 +346,14 @@ public class ClipDescription implements Parcelable {
TextUtils.writeToParcel(mLabel, dest, flags);
dest.writeStringList(mMimeTypes);
dest.writePersistableBundle(mExtras);
+ dest.writeLong(mTimeStamp);
}
ClipDescription(Parcel in) {
mLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
mMimeTypes = in.createStringArrayList();
mExtras = in.readPersistableBundle();
+ mTimeStamp = in.readLong();
}
public static final Parcelable.Creator<ClipDescription> CREATOR =
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 5fed397b1024..4487d5b9b28e 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -41,6 +41,7 @@ import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
+import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Slog;
@@ -403,6 +404,10 @@ public class ClipboardService extends SystemService {
return;
}
clipboard.primaryClip = clip;
+ final ClipDescription description = clipboard.primaryClip.getDescription();
+ if (description != null) {
+ description.setTimestamp(SystemClock.elapsedRealtime());
+ }
final long ident = Binder.clearCallingIdentity();
final int n = clipboard.primaryClipListeners.beginBroadcast();
try {