Coalescing multiple print job notifications (Settings)

We used to show a single notificaiton for every print job but
this is against th UX guidelines. Since we have to lead by
example, this change adds coalescing of multiple notifications.

bug:11155212

Change-Id: I865450495e7e85bd6620c1f42aeef07d2f83a01a
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 2b8bde2..e93fa18 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -81,6 +81,7 @@
 import com.android.settings.location.LocationSettings;
 import com.android.settings.nfc.AndroidBeam;
 import com.android.settings.nfc.PaymentSettings;
+import com.android.settings.print.PrintJobSettingsFragment;
 import com.android.settings.print.PrintServiceSettingsFragment;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.tts.TextToSpeechSettings;
@@ -347,6 +348,7 @@
         NotificationAccessSettings.class.getName(),
         ManageAccountsSettings.class.getName(),
         PrintSettingsFragment.class.getName(),
+        PrintJobSettingsFragment.class.getName(),
         TrustedCredentialsSettings.class.getName(),
         PaymentSettings.class.getName(),
         KeyboardLayoutPickerFragment.class.getName()
@@ -1108,4 +1110,5 @@
     public static class TrustedCredentialsSettingsActivity extends Settings { /* empty */ }
     public static class PaymentSettingsActivity extends Settings { /* empty */ }
     public static class PrintSettingsActivity extends Settings { /* empty */ }
+    public static class PrintJobSettingsActivity extends Settings { /* empty */ }
 }
diff --git a/src/com/android/settings/print/PrintJobSettingsFragment.java b/src/com/android/settings/print/PrintJobSettingsFragment.java
index c15bc06..cfb4cb2 100644
--- a/src/com/android/settings/print/PrintJobSettingsFragment.java
+++ b/src/com/android/settings/print/PrintJobSettingsFragment.java
@@ -19,6 +19,7 @@
 import android.app.ActivityManager;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.print.PrintJob;
@@ -45,6 +46,8 @@
     private static final int MENU_ITEM_ID_CANCEL = 1;
     private static final int MENU_ITEM_ID_RESTART = 2;
 
+    private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";
+
     private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
     private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";
 
@@ -53,7 +56,7 @@
     private final PrintJobStateChangeListener mPrintJobStateChangeListener =
             new PrintJobStateChangeListener() {
         @Override
-        public void onPrintJobsStateChanged(PrintJobId printJobId) {
+        public void onPrintJobStateChanged(PrintJobId printJobId) {
             updateUi();
         }
     };
@@ -141,8 +144,8 @@
     }
 
     private void processArguments() {
-        mPrintJobId = (PrintJobId) getArguments().getParcelable(
-                PrintSettingsFragment.EXTRA_PRINT_JOB_ID);
+        String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
+        mPrintJobId = PrintJobId.unflattenFromString(printJobId);
         if (mPrintJobId == null) {
             finish();
         }
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index 8d080ce..391d505 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -112,8 +112,6 @@
 
     private PrintJobsController mPrintJobsController;
 
-    private String mPrintJobPreferenceToActivate;
-
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -268,19 +266,6 @@
             if (prereference != null) {
                 prereference.performClick(getPreferenceScreen());
             }
-        } else {
-            String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
-            if (printJobId != null) {
-                getArguments().remove(EXTRA_PRINT_JOB_ID);
-                Preference preference = findPreference(printJobId);
-                if (preference != null) {
-                    preference.performClick(getPreferenceScreen());
-                } else {
-                    // The preference not being present may mean the the print job
-                    // loader has not completed so make a note and wait for the load.
-                    mPrintJobPreferenceToActivate = printJobId;
-                }
-            }
         }
     }
 
@@ -427,20 +412,10 @@
                     }
 
                     Bundle extras = preference.getExtras();
-                    extras.putParcelable(EXTRA_PRINT_JOB_ID, printJob.getId());
+                    extras.putString(EXTRA_PRINT_JOB_ID, printJob.getId().flattenToString());
 
                     mActivePrintJobsCategory.addPreference(preference);
                 }
-
-                // If were waiting for creating a preference for a print
-                // job so we can start it - do that.
-                if (mPrintJobPreferenceToActivate != null) {
-                    Preference preference = findPreference(mPrintJobPreferenceToActivate);
-                    mPrintJobPreferenceToActivate = null;
-                    if (preference != null) {
-                        preference.performClick(getPreferenceScreen());
-                    }
-                }
             }
         }
 
@@ -454,7 +429,7 @@
 
         private static final String LOG_TAG = "PrintJobsLoader";
 
-        private static final boolean DEBUG = true;
+        private static final boolean DEBUG = false;
 
         private List <PrintJobInfo> mPrintJobs = new ArrayList<PrintJobInfo>();
 
@@ -489,7 +464,7 @@
             if (mPrintJobStateChangeListener == null) {
                 mPrintJobStateChangeListener = new PrintJobStateChangeListener() {
                     @Override
-                    public void onPrintJobsStateChanged(PrintJobId printJobId) {
+                    public void onPrintJobStateChanged(PrintJobId printJobId) {
                         onForceLoad();
                     }
                 };