blob: 4384328912562fa957d988c9bdca1f64d242aa3a [file] [log] [blame]
Sunny Goyal32f3dda2016-11-11 11:45:00 -08001package com.android.launcher3.util;
2
3/**
4 * Copyright (C) 2016 The Android Open Source Project
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19import android.content.ContentValues;
20import android.content.Context;
21import android.content.Intent;
22import android.graphics.Bitmap;
Sunny Goyalaaf86fe2017-01-05 21:50:27 -080023import android.net.Uri;
Sunny Goyal7c74e4a2016-12-15 15:53:17 -080024import android.os.UserHandle;
Sunny Goyal32f3dda2016-11-11 11:45:00 -080025
26import com.android.launcher3.LauncherAppState;
27import com.android.launcher3.LauncherSettings;
28import com.android.launcher3.Utilities;
Sunny Goyal32f3dda2016-11-11 11:45:00 -080029import com.android.launcher3.compat.UserManagerCompat;
30
31/**
32 * A wrapper around {@link ContentValues} with some utility methods.
33 */
34public class ContentWriter {
35
36 private final ContentValues mValues;
37 private final Context mContext;
38
Sunny Goyalaaf86fe2017-01-05 21:50:27 -080039 private CommitParams mCommitParams;
Sunny Goyal32f3dda2016-11-11 11:45:00 -080040 private Bitmap mIcon;
Sunny Goyal7c74e4a2016-12-15 15:53:17 -080041 private UserHandle mUser;
Sunny Goyal32f3dda2016-11-11 11:45:00 -080042
Sunny Goyalaaf86fe2017-01-05 21:50:27 -080043 public ContentWriter(Context context, CommitParams commitParams) {
44 this(context);
45 mCommitParams = commitParams;
46 }
47
Sunny Goyal32f3dda2016-11-11 11:45:00 -080048 public ContentWriter(Context context) {
49 this(new ContentValues(), context);
50 }
51
52 public ContentWriter(ContentValues values, Context context) {
53 mValues = values;
54 mContext = context;
55 }
56
57 public ContentWriter put(String key, Integer value) {
58 mValues.put(key, value);
59 return this;
60 }
61
62 public ContentWriter put(String key, Long value) {
63 mValues.put(key, value);
64 return this;
65 }
66
67 public ContentWriter put(String key, String value) {
68 mValues.put(key, value);
69 return this;
70 }
71
72 public ContentWriter put(String key, CharSequence value) {
73 mValues.put(key, value == null ? null : value.toString());
74 return this;
75 }
76
77 public ContentWriter put(String key, Intent value) {
78 mValues.put(key, value == null ? null : value.toUri(0));
79 return this;
80 }
81
Sunny Goyal7c74e4a2016-12-15 15:53:17 -080082 public ContentWriter putIcon(Bitmap value, UserHandle user) {
Sunny Goyal32f3dda2016-11-11 11:45:00 -080083 mIcon = value;
84 mUser = user;
85 return this;
86 }
87
Sunny Goyal7c74e4a2016-12-15 15:53:17 -080088 public ContentWriter put(String key, UserHandle user) {
Sunny Goyal32f3dda2016-11-11 11:45:00 -080089 return put(key, UserManagerCompat.getInstance(mContext).getSerialNumberForUser(user));
90 }
91
92 /**
93 * Commits any pending validation and returns the final values.
94 * Must not be called on UI thread.
95 */
Sunny Goyal87f784c2017-01-11 10:48:34 -080096 public ContentValues getValues(Context context) {
Sunny Goyal32f3dda2016-11-11 11:45:00 -080097 Preconditions.assertNonUiThread();
Sunny Goyal87f784c2017-01-11 10:48:34 -080098 if (mIcon != null && !LauncherAppState.getInstance(context).getIconCache()
Sunny Goyal32f3dda2016-11-11 11:45:00 -080099 .isDefaultIcon(mIcon, mUser)) {
100 mValues.put(LauncherSettings.Favorites.ICON, Utilities.flattenBitmap(mIcon));
101 mIcon = null;
102 }
103 return mValues;
104 }
Sunny Goyalaaf86fe2017-01-05 21:50:27 -0800105
106 public int commit() {
107 if (mCommitParams != null) {
Sunny Goyal87f784c2017-01-11 10:48:34 -0800108 return mContext.getContentResolver().update(mCommitParams.mUri, getValues(mContext),
Sunny Goyalaaf86fe2017-01-05 21:50:27 -0800109 mCommitParams.mWhere, mCommitParams.mSelectionArgs);
110 }
111 return 0;
112 }
113
114 public static final class CommitParams {
115
116 final Uri mUri = LauncherSettings.Favorites.CONTENT_URI;
117 String mWhere;
118 String[] mSelectionArgs;
119
120 public CommitParams(String where, String[] selectionArgs) {
121 mWhere = where;
122 mSelectionArgs = selectionArgs;
123 }
124
125 }
Sunny Goyal32f3dda2016-11-11 11:45:00 -0800126}