1package 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;
23import android.net.Uri;
24import android.os.UserHandle;
25
26import com.android.launcher3.LauncherAppState;
27import com.android.launcher3.LauncherSettings;
28import com.android.launcher3.Utilities;
29import 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
39    private CommitParams mCommitParams;
40    private Bitmap mIcon;
41    private UserHandle mUser;
42
43    public ContentWriter(Context context, CommitParams commitParams) {
44        this(context);
45        mCommitParams = commitParams;
46    }
47
48    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
82    public ContentWriter putIcon(Bitmap value, UserHandle user) {
83        mIcon = value;
84        mUser = user;
85        return this;
86    }
87
88    public ContentWriter put(String key, UserHandle user) {
89        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     */
96    public ContentValues getValues(Context context) {
97        Preconditions.assertNonUiThread();
98        if (mIcon != null && !LauncherAppState.getInstance(context).getIconCache()
99                .isDefaultIcon(mIcon, mUser)) {
100            mValues.put(LauncherSettings.Favorites.ICON, Utilities.flattenBitmap(mIcon));
101            mIcon = null;
102        }
103        return mValues;
104    }
105
106    public int commit() {
107        if (mCommitParams != null) {
108            return mContext.getContentResolver().update(mCommitParams.mUri, getValues(mContext),
109                    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    }
126}
127