DO NOT MERGE: Optimize Dashboard loading

- prevent loading categories twice
- add some logging to see the time taken for building the Dashboard titles

Change-Id: I31724c0e66fe3b453a87f12476f58db84c73423f
(cherry picked from commit b644f29313c086806d1ba5ad3db8ac36d2bf3c4f)
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index f7e5dcd..a4aa60f 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -329,7 +329,9 @@
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case MSG_BUILD_CATEGORIES: {
-                    buildDashboardCategories(mCategories);
+                    if(mNeedToRebuildCategories) {
+                        buildDashboardCategories(mCategories);
+                    }
                 } break;
             }
         }
@@ -346,7 +348,7 @@
     }
 
     public List<DashboardCategory> getDashboardCategories() {
-        if (mNeedToRebuildCategories) {
+        if (mNeedToRebuildCategories || mCategories.size() == 0) {
             buildDashboardCategories(mCategories);
             mNeedToRebuildCategories = false;
         }
@@ -497,16 +499,11 @@
                 switchToFragment( initialFragmentName, initialArguments, true, false,
                         mInitialTitle, false);
             } else {
-                // We need to build the Categories in all cases
-                buildDashboardCategories(mCategories);
-
                 // No UP if we are displaying the main Dashboard
                 mDisplayHomeAsUpEnabled = false;
-                if (mCategories.size() > 0) {
-                    mInitialTitle = getText(R.string.dashboard_title);
-                    switchToFragment(DashboardSummary.class.getName(), null, false, false,
-                            mInitialTitle, false);
-                }
+                mInitialTitle = getText(R.string.dashboard_title);
+                switchToFragment(DashboardSummary.class.getName(), null, false, false,
+                        mInitialTitle, false);
             }
         }