auto import from //depot/cupcake/@135843
diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java
new file mode 100644
index 0000000..aab3736
--- /dev/null
+++ b/services/java/com/android/server/am/TaskRecord.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.am;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.os.SystemClock;
+
+import java.io.PrintWriter;
+
+class TaskRecord {
+    final int taskId;       // Unique identifier for this task.
+    final String affinity;  // The affinity name for this task, or null.
+    final boolean clearOnBackground; // As per the original activity.
+    Intent intent;          // The original intent that started the task.
+    Intent affinityIntent;  // Intent of affinity-moved activity that started this task.
+    ComponentName origActivity; // The non-alias activity component of the intent.
+    ComponentName realActivity; // The actual activity component that started the task.
+    int numActivities;      // Current number of activities in this task.
+    long lastActiveTime;    // Last time this task was active, including sleep.
+    boolean rootWasReset;   // True if the intent at the root of the task had
+                            // the FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flag.
+
+    TaskRecord(int _taskId, ActivityInfo info, Intent _intent,
+            boolean _clearOnBackground) {
+        taskId = _taskId;
+        affinity = info.taskAffinity;
+        clearOnBackground = _clearOnBackground;
+        setIntent(_intent, info);
+    }
+
+    void touchActiveTime() {
+        lastActiveTime = android.os.SystemClock.elapsedRealtime();
+    }
+    
+    long getInactiveDuration() {
+        return android.os.SystemClock.elapsedRealtime() - lastActiveTime;
+    }
+    
+    void setIntent(Intent _intent, ActivityInfo info) {
+        if (info.targetActivity == null) {
+            intent = _intent;
+            realActivity = _intent != null ? _intent.getComponent() : null;
+            origActivity = null;
+        } else {
+            ComponentName targetComponent = new ComponentName(
+                    info.packageName, info.targetActivity);
+            if (_intent != null) {
+                Intent targetIntent = new Intent(_intent);
+                targetIntent.setComponent(targetComponent);
+                intent = targetIntent;
+                realActivity = targetComponent;
+                origActivity = _intent.getComponent();
+            } else {
+                intent = null;
+                realActivity = targetComponent;
+                origActivity = new ComponentName(info.packageName, info.name);
+            }
+        }
+        
+        if (intent != null &&
+                (intent.getFlags()&Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) {
+            // Once we are set to an Intent with this flag, we count this
+            // task as having a true root activity.
+            rootWasReset = true;
+        }
+    }
+    
+    void dump(PrintWriter pw, String prefix) {
+        pw.println(prefix + this);
+        pw.println(prefix + "clearOnBackground=" + clearOnBackground
+              + " numActivities=" + numActivities
+              + " rootWasReset=" + rootWasReset);
+        pw.println(prefix + "affinity=" + affinity);
+        pw.println(prefix + "intent=" + intent);
+        pw.println(prefix + "affinityIntent=" + affinityIntent);
+        pw.println(prefix + "origActivity=" + origActivity);
+        pw.println(prefix + "lastActiveTime=" + lastActiveTime
+                +" (inactive for " + (getInactiveDuration()/1000) + "s)");
+    }
+
+    public String toString() {
+        return "Task{" + taskId + " "
+                + (affinity != null ? affinity
+                        : (intent != null ? intent.getComponent().flattenToShortString()
+                                : affinityIntent != null ? affinityIntent.getComponent().flattenToShortString() : "??"))
+                + "}";
+    }
+}