[2/2] OmniGears: Configurable dashboard columns

Change-Id: Ic05a3b709702f2dfd44c05279463b4decc83a0b7
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 31ffdb8..e288c42 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -198,4 +198,29 @@
         <item>1500</item>
         <item>2000</item>
     </string-array>
+
+    <!-- Dashboard columns -->
+    <string-array name="dashboard_columns_phone_entries">
+        <item>@string/dashboard_columns_phone_default</item>
+        <item>@string/dashboard_columns_two</item>
+        <item>@string/dashboard_columns_three</item>
+    </string-array>
+
+    <string-array name="dashboard_columns_phone_values" translatable="false">
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+    </string-array>
+
+    <string-array name="dashboard_columns_tablet_entries">
+        <item>@string/dashboard_columns_tablet_default</item>
+        <item>@string/dashboard_columns_three</item>
+        <item>@string/dashboard_columns_four</item>
+    </string-array>
+
+    <string-array name="dashboard_columns_tablet_values" translatable="false">
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+    </string-array>
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 7861d08..d8f0e61 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -260,4 +260,14 @@
     <!-- Enable Tablet Style navigation bar -->
     <string name="enable_tablet_navigation_title">Use tablet layout</string>
     <string name="enable_tablet_navigation_summary">Tablet layout shows back and home on the left side and overview on the right side of the navigation bar</string>
+
+    <string name="other_category">Other</string>
+
+    <!-- Dashboard columns -->
+    <string name="dashboard_columns_title">Settings columns</string>
+    <string name="dashboard_columns_phone_default">Default</string>
+    <string name="dashboard_columns_two">Two</string>
+    <string name="dashboard_columns_tablet_default">Default</string>
+    <string name="dashboard_columns_three">Three</string>
+    <string name="dashboard_columns_four">Four</string>
 </resources>
diff --git a/res/xml/more_interface_settings.xml b/res/xml/more_interface_settings.xml
index 186c7cb..2dc2dc3 100644
--- a/res/xml/more_interface_settings.xml
+++ b/res/xml/more_interface_settings.xml
@@ -20,7 +20,7 @@
         android:title="@string/interface_more_title"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
-    <PreferenceCategory
+        <PreferenceCategory
             android:key="category_recents"
             android:title="@string/recents_category">
 
@@ -35,7 +35,7 @@
                     android:title="@string/recents_fullscreen_title"
                     android:summary="@string/recents_fullscreen_summary"
                     android:defaultValue="false"/>
-    </PreferenceCategory>
+        </PreferenceCategory>
 
         <PreferenceCategory
             android:key="weather_category"
@@ -59,7 +59,16 @@
                 android:key="weather_icon_pack"
                 android:title="@string/weather_icon_pack_title"
                 android:persistent="false" />
+        </PreferenceCategory>
 
+        <PreferenceCategory
+            android:key="category_other"
+            android:title="@string/other_category">
+
+            <ListPreference
+                android:key="dashboard_columns"
+                android:title="@string/dashboard_columns_title"
+                android:dialogTitle="@string/dashboard_columns_title" />
         </PreferenceCategory>
 </PreferenceScreen>
 
diff --git a/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java b/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
index f670529..6594ef4 100644
--- a/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
@@ -22,6 +22,7 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.database.Cursor;
@@ -31,6 +32,7 @@
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
+import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
 import android.preference.PreferenceCategory;
 import android.provider.SearchIndexableResource;
@@ -39,6 +41,7 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.util.omni.PackageUtils;
+import com.android.internal.util.omni.DeviceUtils;
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
@@ -66,10 +69,12 @@
     private static final String DEFAULT_WEATHER_ICON_PACKAGE = "org.omnirom.omnijaws";
     private static final String WEATHER_SERVICE_PACKAGE = "org.omnirom.omnijaws";
     private static final String LOCK_CLOCK_PACKAGE="com.cyanogenmod.lockclock";
+    private static final String DASHBOARD_COLUMNS = "dashboard_columns";
 
     private PreferenceCategory mWeatherCategory;
     private ListPreference mWeatherIconPack;
     private CheckBoxPreference mHeaderWeather;
+    private ListPreference mDashboardColumns;
 
     @Override
     protected int getMetricsCategory() {
@@ -110,6 +115,26 @@
 
             mHeaderWeather = (CheckBoxPreference) findPreference(STATUS_BAR_HEADER_WEATHER);
         }
+        mDashboardColumns = (ListPreference) findPreference(DASHBOARD_COLUMNS);
+        int dashboardValue = getResources().getInteger(R.integer.dashboard_num_columns);
+
+        final boolean isTablet = DeviceUtils.isTablet(getActivity());
+        if (!isTablet) {
+            // layout-land has a value of 2 but we dont want this to be the default
+            // for phones so set 1 as the default to display
+            dashboardValue = 1;
+        }
+        mDashboardColumns.setEntries(getResources().getStringArray(isTablet ?
+                R.array.dashboard_columns_tablet_entries : R.array.dashboard_columns_phone_entries));
+        mDashboardColumns.setEntryValues(getResources().getStringArray(isTablet ?
+                R.array.dashboard_columns_tablet_values : R.array.dashboard_columns_phone_values));
+
+        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
+        if (!prefs.contains(DASHBOARD_COLUMNS)) {
+            mDashboardColumns.setValue(Integer.toString(dashboardValue));
+        }
+        mDashboardColumns.setSummary(mDashboardColumns.getEntry());
+        mDashboardColumns.setOnPreferenceChangeListener(this);
     }
 
     @Override
@@ -131,9 +156,14 @@
                     Settings.System.STATUS_BAR_WEATHER_ICON_PACK, value);
             int valueIndex = mWeatherIconPack.findIndexOfValue(value);
             mWeatherIconPack.setSummary(mWeatherIconPack.getEntries()[valueIndex]);
+            return true;
+        } else if (preference == mDashboardColumns) {
+            String value = (String) objValue;
+            int valueIndex = mDashboardColumns.findIndexOfValue(value);
+            mDashboardColumns.setSummary(mDashboardColumns.getEntries()[valueIndex]);
+            return true;
         }
-
-        return true;
+        return false;
     }
 
     private boolean isOmniJawsServiceInstalled() {