summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/graphics/GridOptionsProvider.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2019-01-11 15:08:44 -0800
committerSunny Goyal <sunnygoyal@google.com>2019-01-11 15:09:06 -0800
commit7d892ff198bba98e4a0319a8b0340c80cba3a015 (patch)
tree8be423425e1aba47db879ea903224af76b4e2a91 /src/com/android/launcher3/graphics/GridOptionsProvider.java
parent367a4855993af5b82da9e8ce1b080b887e944282 (diff)
downloadandroid_packages_apps_Trebuchet-7d892ff198bba98e4a0319a8b0340c80cba3a015.tar.gz
android_packages_apps_Trebuchet-7d892ff198bba98e4a0319a8b0340c80cba3a015.tar.bz2
android_packages_apps_Trebuchet-7d892ff198bba98e4a0319a8b0340c80cba3a015.zip
Adding API to set the current grid
Bug: 122262084 Change-Id: Ie356d4a90cf1e5a3715fde62cd3502384856e8b5
Diffstat (limited to 'src/com/android/launcher3/graphics/GridOptionsProvider.java')
-rw-r--r--src/com/android/launcher3/graphics/GridOptionsProvider.java64
1 files changed, 49 insertions, 15 deletions
diff --git a/src/com/android/launcher3/graphics/GridOptionsProvider.java b/src/com/android/launcher3/graphics/GridOptionsProvider.java
index 9b907ba6e..efd39ee8e 100644
--- a/src/com/android/launcher3/graphics/GridOptionsProvider.java
+++ b/src/com/android/launcher3/graphics/GridOptionsProvider.java
@@ -25,6 +25,8 @@ import org.xmlpull.v1.XmlPullParserException;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
@@ -40,6 +42,9 @@ import java.util.concurrent.Future;
* is_default: true if this grid is currently active
*
* /preview: Opens a file stream for the grid preview
+ *
+ * /default_grid: Call update to set the current grid, with values
+ * name: name of the grid to apply
*/
public class GridOptionsProvider extends ContentProvider {
@@ -51,6 +56,9 @@ public class GridOptionsProvider extends ContentProvider {
private static final String KEY_PREVIEW_COUNT = "preview_count";
private static final String KEY_IS_DEFAULT = "is_default";
+ private static final String KEY_LIST_OPTIONS = "/list_options";
+ private static final String KEY_DEFAULT_GRID = "/default_grid";
+
private static final String KEY_PREVIEW = "preview";
private static final String MIME_TYPE_PNG = "image/png";
@@ -75,33 +83,41 @@ public class GridOptionsProvider extends ContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
- // TODO: Validate the query uri
+ if (!KEY_LIST_OPTIONS.equals(uri.getPath())) {
+ return null;
+ }
MatrixCursor cursor = new MatrixCursor(new String[] {
KEY_NAME, KEY_ROWS, KEY_COLS, KEY_PREVIEW_COUNT, KEY_IS_DEFAULT});
InvariantDeviceProfile idp = InvariantDeviceProfile.INSTANCE.get(getContext());
+ for (GridOption gridOption : parseAllGridOptions()) {
+ cursor.newRow()
+ .add(KEY_NAME, gridOption.name)
+ .add(KEY_ROWS, gridOption.numRows)
+ .add(KEY_COLS, gridOption.numColumns)
+ .add(KEY_PREVIEW_COUNT, 1)
+ .add(KEY_IS_DEFAULT, idp.numColumns == gridOption.numColumns
+ && idp.numRows == gridOption.numRows);
+ }
+ return cursor;
+ }
+
+ private List<GridOption> parseAllGridOptions() {
+ List<GridOption> result = new ArrayList<>();
try (XmlResourceParser parser = getContext().getResources().getXml(R.xml.device_profiles)) {
final int depth = parser.getDepth();
int type;
while (((type = parser.next()) != XmlPullParser.END_TAG ||
parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
- if ((type == XmlPullParser.START_TAG) && "grid-option".equals(parser.getName())) {
- GridOption gridOption = new GridOption(
- getContext(), Xml.asAttributeSet(parser));
-
- cursor.newRow()
- .add(KEY_NAME, gridOption.name)
- .add(KEY_ROWS, gridOption.numRows)
- .add(KEY_COLS, gridOption.numColumns)
- .add(KEY_PREVIEW_COUNT, 1)
- .add(KEY_IS_DEFAULT, idp.numColumns == gridOption.numColumns
- && idp.numRows == gridOption.numRows);
+ if ((type == XmlPullParser.START_TAG)
+ && GridOption.TAG_NAME.equals(parser.getName())) {
+ result.add(new GridOption(getContext(), Xml.asAttributeSet(parser)));
}
}
} catch (IOException | XmlPullParserException e) {
Log.e(TAG, "Error parsing device profile", e);
+ return Collections.emptyList();
}
-
- return cursor;
+ return result;
}
@Override
@@ -125,7 +141,25 @@ public class GridOptionsProvider extends ContentProvider {
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- return 0;
+ if (!KEY_DEFAULT_GRID.equals(uri.getPath())) {
+ return 0;
+ }
+
+ String gridName = values.getAsString(KEY_NAME);
+ // Verify that this is a valid grid option
+ GridOption match = null;
+ for (GridOption option : parseAllGridOptions()) {
+ if (option.name.equals(gridName)) {
+ match = option;
+ break;
+ }
+ }
+ if (match == null) {
+ return 0;
+ }
+
+ InvariantDeviceProfile.INSTANCE.get(getContext()).setCurrentGrid(getContext(), gridName);
+ return 1;
}
@Override