Modifying portals in landscape on the phone UI

Change-Id: I4190b0e4958dfd0d59d943d9b4c4d6fd2e9303c0
diff --git a/res/values-land/config.xml b/res/values-land/config.xml
index 121bb0c..fc20456 100644
--- a/res/values-land/config.xml
+++ b/res/values-land/config.xml
@@ -20,4 +20,9 @@
     <bool name="config_useDropTargetDownTransition">false</bool>
     <!-- Whether or not to fade the side pages -->
     <bool name="config_workspaceFadeAdjacentScreens">false</bool>
+
+    <!-- Folder max bounds and max number of items.
+         Note: folder_max_count_x * folder_max_count_y >= folder_max_num_items. -->
+    <integer name="folder_max_count_x">6</integer>
+    <integer name="folder_max_count_y">3</integer>
 </resources>
diff --git a/res/values-sw600dp/config.xml b/res/values-sw600dp/config.xml
index 2a81e12..7a07898 100644
--- a/res/values-sw600dp/config.xml
+++ b/res/values-sw600dp/config.xml
@@ -19,4 +19,9 @@
     <!-- When shrinking the workspace, this is the percentage of its original size. -->
     <integer name="config_workspaceShrinkPercent">17</integer>
 
+    <!-- Folder max bounds and max number of items. Note: folder_max_count_x * folder_max_count_y
+         >= folder_max_num_items. When these are set to -1, they are automatically determined. -->
+    <integer name="folder_max_count_x">-1</integer>
+    <integer name="folder_max_count_y">-1</integer>
+    <integer name="folder_max_num_items">-1</integer>
 </resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index b8040e6..7ab9870 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -84,4 +84,10 @@
 
     <!-- When shrinking the workspace, this is the percentage of its original size. -->
     <integer name="config_workspaceShrinkPercent">17</integer>
+
+    <!-- Folder max bounds and max number of items. Note: folder_max_count_x * folder_max_count_y
+         >= folder_max_num_items. When these are set to -1, they are automatically determined. -->
+    <integer name="folder_max_count_x">4</integer>
+    <integer name="folder_max_count_y">4</integer>
+    <integer name="folder_max_num_items">16</integer>
 </resources>
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index 33b5de1..a6757d7 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -83,6 +83,7 @@
     private FolderIcon mFolderIcon;
     private int mMaxCountX;
     private int mMaxCountY;
+    private int mMaxNumItems;
     private Rect mNewSize = new Rect();
     private Rect mIconRect = new Rect();
     private ArrayList<View> mItemsInReadingOrder = new ArrayList<View>();
@@ -121,13 +122,20 @@
         setAlwaysDrawnWithCacheEnabled(false);
         mInflater = LayoutInflater.from(context);
         mIconCache = ((LauncherApplication)context.getApplicationContext()).getIconCache();
-        mMaxCountX = LauncherModel.getCellCountX();
-        mMaxCountY = LauncherModel.getCellCountY();
+
+        Resources res = getResources();
+        mMaxCountX = res.getInteger(R.integer.folder_max_count_x);
+        mMaxCountY = res.getInteger(R.integer.folder_max_count_y);
+        mMaxNumItems = res.getInteger(R.integer.folder_max_num_items);
+        if (mMaxCountX < 0 || mMaxCountY < 0 || mMaxNumItems < 0) {
+            mMaxCountX = LauncherModel.getCellCountX();
+            mMaxCountY = LauncherModel.getCellCountY();
+            mMaxNumItems = mMaxCountX * mMaxCountY;
+        }
 
         mInputMethodManager = (InputMethodManager)
                 mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
 
-        Resources res = getResources();
         mExpandDuration = res.getInteger(R.integer.config_folderAnimDuration);
 
         if (sDefaultFolderName == null) {
@@ -746,7 +754,7 @@
             int oldCountY = countY;
             if (countX * countY < count) {
                 // Current grid is too small, expand it
-                if (countX <= countY && countX < mMaxCountX) {
+                if ((countX <= countY || countY == mMaxCountY) && countX < mMaxCountX) {
                     countX++;
                 } else if (countY < mMaxCountY) {
                     countY++;
@@ -764,7 +772,7 @@
     }
 
     public boolean isFull() {
-        return getItemCount() >= mMaxCountX * mMaxCountY;
+        return getItemCount() >= mMaxNumItems;
     }
 
     private void centerAboutIcon() {