Add logging to TaskPersister restore.

Solve tasks not being restored.

Fixes bug 15935752.

Change-Id: Ia3dd50072ac8255bcc37812a0639545b60f5d06f
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index f4e9876..287ad00 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -1147,7 +1147,8 @@
         final ActivityInfo aInfo = stackSupervisor.resolveActivity(intent, resolvedType, 0, null,
                 null, userId);
         if (aInfo == null) {
-            throw new XmlPullParserException("restoreActivity resolver error.");
+            throw new XmlPullParserException("restoreActivity resolver error. Intent=" + intent +
+                    " resolvedType=" + resolvedType);
         }
         final ActivityRecord r = new ActivityRecord(service, /*caller*/null, launchedFromUid,
                 launchedFromPackage, intent, resolvedType, aInfo, service.getConfiguration(),
diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java
index 132b244..eee7e9e 100644
--- a/services/core/java/com/android/server/am/TaskPersister.java
+++ b/services/core/java/com/android/server/am/TaskPersister.java
@@ -177,6 +177,23 @@
         return false;
     }
 
+    private String fileToString(File file) {
+        final String newline = System.lineSeparator();
+        try {
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            StringBuffer sb = new StringBuffer((int) file.length() * 2);
+            String line;
+            while ((line = reader.readLine()) != null) {
+                sb.append(line + newline);
+            }
+            reader.close();
+            return sb.toString();
+        } catch (IOException ioe) {
+            Slog.e(TAG, "Couldn't read file " + file.getName());
+            return null;
+        }
+    }
+
     ArrayList<TaskRecord> restoreTasksLocked() {
         final ArrayList<TaskRecord> tasks = new ArrayList<TaskRecord>();
         ArraySet<Integer> recoveredTaskIds = new ArraySet<Integer>();
@@ -206,13 +223,18 @@
                         if (TAG_TASK.equals(name)) {
                             final TaskRecord task =
                                     TaskRecord.restoreFromXml(in, mStackSupervisor);
-                            if (DEBUG) Slog.d(TAG, "restoreTasksLocked: restored task=" + task);
+                            if (true || DEBUG) Slog.d(TAG, "restoreTasksLocked: restored task=" +
+                                    task);
                             if (task != null) {
                                 task.isPersistable = true;
+                                task.needsPersisting = true;
                                 tasks.add(task);
                                 final int taskId = task.taskId;
                                 recoveredTaskIds.add(taskId);
                                 mStackSupervisor.setNextTaskId(taskId);
+                            } else {
+                                Slog.e(TAG, "Unable to restore taskFile=" + taskFile + ": " +
+                                        fileToString(taskFile));
                             }
                         } else {
                             Slog.wtf(TAG, "restoreTasksLocked Unknown xml event=" + event +
@@ -223,6 +245,7 @@
                 }
             } catch (Exception e) {
                 Slog.wtf(TAG, "Unable to parse " + taskFile + ". Error " + e);
+                Slog.e(TAG, "Failing file: " + fileToString(taskFile));
                 deleteFile = true;
             } finally {
                 if (reader != null) {
@@ -232,7 +255,7 @@
                     }
                 }
                 if (!DEBUG && deleteFile) {
-                    if (DEBUG) Slog.d(TAG, "Deleting file=" + taskFile.getName());
+                    if (true || DEBUG) Slog.d(TAG, "Deleting file=" + taskFile.getName());
                     taskFile.delete();
                 }
             }
@@ -276,7 +299,8 @@
                     continue;
                 }
                 if (!persistentTaskIds.contains(taskId)) {
-                    if (DEBUG) Slog.d(TAG, "removeObsoleteFile: deleting file=" + file.getName());
+                    if (true || DEBUG) Slog.d(TAG, "removeObsoleteFile: deleting file=" +
+                            file.getName());
                     file.delete();
                 }
             }