diff options
-rw-r--r-- | api/current.txt | 1 | ||||
-rw-r--r-- | api/system-current.txt | 1 | ||||
-rw-r--r-- | api/test-current.txt | 1 | ||||
-rw-r--r-- | core/java/android/content/ClipDescription.java | 36 | ||||
-rw-r--r-- | services/core/java/com/android/server/clipboard/ClipboardService.java | 5 |
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 { |