Merge "Add live wallpaper logging functions" into ub-launcher3-master
diff --git a/res/menu/bottom_navigation_menu.xml b/res/menu/bottom_navigation_menu.xml
index d477aaf..b64bf8d 100644
--- a/res/menu/bottom_navigation_menu.xml
+++ b/res/menu/bottom_navigation_menu.xml
@@ -17,19 +17,19 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- TODO (santie): replace icons with real ones when available -->
     <item
+        android:id="@+id/nav_wallpaper"
+        android:title="@string/wallpaper_title"
+        android:icon="@drawable/ic_nav_wallpaper" />
+    <item
         android:id="@+id/nav_theme"
         android:title="@string/theme_title"
         android:icon="@drawable/ic_nav_theme" />
     <item
-        android:id="@+id/nav_clock"
-        android:title="@string/clock_title"
-        android:icon="@drawable/ic_nav_clock" />
-    <item
         android:id="@+id/nav_grid"
         android:title="@string/grid_title"
         android:icon="@drawable/ic_nav_grid" />
     <item
-        android:id="@+id/nav_wallpaper"
-        android:title="@string/wallpaper_title"
-        android:icon="@drawable/ic_nav_wallpaper" />
+        android:id="@+id/nav_clock"
+        android:title="@string/clock_title"
+        android:icon="@drawable/ic_nav_clock" />
 </menu>
\ No newline at end of file
diff --git a/res/values/override.xml b/res/values/override.xml
index a01507e..1b82e00 100644
--- a/res/values/override.xml
+++ b/res/values/override.xml
@@ -17,6 +17,7 @@
 -->
 <resources>
     <string name="themes_stub_package" translatable="false"/>
+    <string name="clocks_stub_package" translatable="false"/>
     <!-- Authority of a provider in System UI that will provide preview info for available clockfaces. -->
     <string name="clocks_provider_authority" translatable="false">com.android.keyguard.clock</string>
 
diff --git a/src/com/android/customization/model/clock/ContentProviderClockProvider.java b/src/com/android/customization/model/clock/ContentProviderClockProvider.java
index ad60ddc..8f4c031 100644
--- a/src/com/android/customization/model/clock/ContentProviderClockProvider.java
+++ b/src/com/android/customization/model/clock/ContentProviderClockProvider.java
@@ -2,7 +2,9 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ProviderInfo;
 import android.database.Cursor;
 import android.net.Uri;
@@ -25,6 +27,7 @@
     private final Context mContext;
     private final ProviderInfo mProviderInfo;
     private List<Clockface> mClocks;
+    private boolean mClockContentAvailable;
 
     public ContentProviderClockProvider(Context context) {
         mContext = context;
@@ -33,11 +36,25 @@
         mProviderInfo = TextUtils.isEmpty(providerAuthority) ? null
                 : mContext.getPackageManager().resolveContentProvider(providerAuthority,
                         PackageManager.MATCH_SYSTEM_ONLY);
+
+        if (TextUtils.isEmpty(mContext.getString(R.string.clocks_stub_package))) {
+            mClockContentAvailable = false;
+        } else {
+            try {
+                ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(
+                        mContext.getString(R.string.clocks_stub_package),
+                        PackageManager.MATCH_SYSTEM_ONLY);
+                mClockContentAvailable = applicationInfo != null;
+            } catch (NameNotFoundException e) {
+                mClockContentAvailable = false;
+            }
+        }
     }
 
     @Override
     public boolean isAvailable() {
-        return mProviderInfo != null && (mClocks == null || !mClocks.isEmpty());
+        return mProviderInfo != null && mClockContentAvailable
+                && (mClocks == null || !mClocks.isEmpty());
     }
 
     @Override
diff --git a/src/com/android/customization/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index 60647d9..86a0bf6 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -130,10 +130,9 @@
 
                 // Navigate to the Wallpaper tab if we started directly from launcher, otherwise
                 // start at the Styles tab
-                int section = WALLPAPER_FOCUS.equals(getIntent()
-                    .getStringExtra(WALLPAPER_FLAVOR_EXTRA))
-                    ? mBottomNav.getMenu().size() - 1 : 0;
-                navigateToSection(mBottomNav.getMenu().getItem(section).getItemId());
+                navigateToSection(
+                        WALLPAPER_FOCUS.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA))
+                                ? R.id.nav_wallpaper : R.id.nav_theme);
             }
         }
     }
@@ -293,6 +292,9 @@
 
     @Override
     public void onBackPressed() {
+        if (mWallpaperCategoryFragment != null && mWallpaperCategoryFragment.popChildFragment()) {
+            return;
+        }
         if (getSupportFragmentManager().popBackStackImmediate()) {
             return;
         }
@@ -303,6 +305,11 @@
     }
 
     private void navigateToSection(@IdRes int id) {
+        // Navigate to the first section if the targeted section doesn't exist.
+        if (!mSections.containsKey(id)) {
+            id = mBottomNav.getMenu().getItem(0).getItemId();
+        }
+
         mBottomNav.setSelectedItemId(id);
     }
 
@@ -332,14 +339,6 @@
         mDelegate.showViewOnlyPreview(wallpaperInfo);
     }
 
-    /**
-     * Shows the picker activity for the given category.
-     */
-    @Override
-    public void show(String collectionId) {
-        mDelegate.show(collectionId);
-    }
-
     @Override
     public void onWallpapersReady() {