blob: 51716329c1ad776b5749461cd74460ee8e8ccb6d [file] [log] [blame]
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +00001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package android.preference;
18
19import android.annotation.Nullable;
20
21import java.util.Set;
22
23/**
Filip Pavlisfd596452017-03-01 18:50:00 +000024 * A data store interface to be implemented and provided to the Preferences framework. This can be
25 * used to replace the default {@link android.content.SharedPreferences}, if needed.
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000026 *
Filip Pavlisfd596452017-03-01 18:50:00 +000027 * <p>In most cases you want to use {@link android.content.SharedPreferences} as it is automatically
28 * backed up and migrated to new devices. However, providing custom data store to preferences can be
29 * useful if your app stores its preferences in a local db, cloud or they are device specific like
30 * "Developer settings". It might be also useful when you want to use the preferences UI but
31 * the data are not supposed to be stored at all because they are valid per session only.
32 *
33 * <p>Once a put method is called it is full responsibility of the data store implementation to
34 * safely store the given values. Time expensive operations need to be done in the background to
35 * prevent from blocking the UI. You also need to have a plan on how to serialize the data in case
36 * the activity holding this object gets destroyed.
37 *
38 * <p>By default, all "put" methods throw {@link UnsupportedOperationException}.
39 *
40 * @see Preference#setPreferenceDataStore(PreferenceDataStore)
41 * @see PreferenceManager#setPreferenceDataStore(PreferenceDataStore)
Louis Pullen-Freilichb9596fa2018-11-19 17:40:56 +000042 *
43 * @deprecated Use the <a href="{@docRoot}jetpack/androidx.html">AndroidX</a>
44 * <a href="{@docRoot}reference/androidx/preference/package-summary.html">
45 * Preference Library</a> for consistent behavior across all devices. For more information on
46 * using the AndroidX Preference Library see
47 * <a href="{@docRoot}guide/topics/ui/settings.html">Settings</a>.
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000048 */
Louis Pullen-Freilichb9596fa2018-11-19 17:40:56 +000049@Deprecated
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000050public interface PreferenceDataStore {
51
52 /**
53 * Set a String value to the data store.
54 *
Filip Pavlisfd596452017-03-01 18:50:00 +000055 * <p>Once the value is set the data store is responsible for holding it.
56 *
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000057 * @param key The name of the preference to modify.
58 * @param value The new value for the preference.
59 * @see #getString(String, String)
60 */
61 default void putString(String key, @Nullable String value) {
62 throw new UnsupportedOperationException("Not implemented on this data store");
63 }
64
65 /**
66 * Set a set of String value to the data store.
67 *
Filip Pavlisfd596452017-03-01 18:50:00 +000068 * <p>Once the value is set the data store is responsible for holding it.
69 *
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000070 * @param key The name of the preference to modify.
71 * @param values The set of new values for the preference.
72 * @see #getStringSet(String, Set)
73 */
74 default void putStringSet(String key, @Nullable Set<String> values) {
75 throw new UnsupportedOperationException("Not implemented on this data store");
76 }
77
78 /**
79 * Set an int value to the data store.
80 *
Filip Pavlisfd596452017-03-01 18:50:00 +000081 * <p>Once the value is set the data store is responsible for holding it.
82 *
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000083 * @param key The name of the preference to modify.
84 * @param value The new value for the preference.
85 * @see #getInt(String, int)
86 */
87 default void putInt(String key, int value) {
88 throw new UnsupportedOperationException("Not implemented on this data store");
89 }
90
91 /**
92 * Set a long value to the data store.
93 *
Filip Pavlisfd596452017-03-01 18:50:00 +000094 * <p>Once the value is set the data store is responsible for holding it.
95 *
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +000096 * @param key The name of the preference to modify.
97 * @param value The new value for the preference.
98 * @see #getLong(String, long)
99 */
100 default void putLong(String key, long value) {
101 throw new UnsupportedOperationException("Not implemented on this data store");
102 }
103
104 /**
105 * Set a float value to the data store.
106 *
Filip Pavlisfd596452017-03-01 18:50:00 +0000107 * <p>Once the value is set the data store is responsible for holding it.
108 *
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +0000109 * @param key The name of the preference to modify.
110 * @param value The new value for the preference.
111 * @see #getFloat(String, float)
112 */
113 default void putFloat(String key, float value) {
114 throw new UnsupportedOperationException("Not implemented on this data store");
115 }
116
117 /**
118 * Set a boolean value to the data store.
119 *
Filip Pavlisfd596452017-03-01 18:50:00 +0000120 * <p>Once the value is set the data store is responsible for holding it.
121 *
Filip Pavlis0b0c6cb2016-11-16 15:58:28 +0000122 * @param key The name of the preference to modify.
123 * @param value The new value for the preference.
124 * @see #getBoolean(String, boolean)
125 */
126 default void putBoolean(String key, boolean value) {
127 throw new UnsupportedOperationException("Not implemented on this data store");
128 }
129
130 /**
131 * Retrieve a String value from the data store.
132 *
133 * @param key The name of the preference to retrieve.
134 * @param defValue Value to return if this preference does not exist.
135 * @see #putString(String, String)
136 */
137 @Nullable
138 default String getString(String key, @Nullable String defValue) {
139 return defValue;
140 }
141
142 /**
143 * Retrieve a set of String values from the data store.
144 *
145 * @param key The name of the preference to retrieve.
146 * @param defValues Values to return if this preference does not exist.
147 * @see #putStringSet(String, Set)
148 */
149 @Nullable
150 default Set<String> getStringSet(String key, @Nullable Set<String> defValues) {
151 return defValues;
152 }
153
154 /**
155 * Retrieve an int value from the data store.
156 *
157 * @param key The name of the preference to retrieve.
158 * @param defValue Value to return if this preference does not exist.
159 * @see #putInt(String, int)
160 */
161 default int getInt(String key, int defValue) {
162 return defValue;
163 }
164
165 /**
166 * Retrieve a long value from the data store.
167 *
168 * @param key The name of the preference to retrieve.
169 * @param defValue Value to return if this preference does not exist.
170 * @see #putLong(String, long)
171 */
172 default long getLong(String key, long defValue) {
173 return defValue;
174 }
175
176 /**
177 * Retrieve a float value from the data store.
178 *
179 * @param key The name of the preference to retrieve.
180 * @param defValue Value to return if this preference does not exist.
181 * @see #putFloat(String, float)
182 */
183 default float getFloat(String key, float defValue) {
184 return defValue;
185 }
186
187 /**
188 * Retrieve a boolean value from the data store.
189 *
190 * @param key The name of the preference to retrieve.
191 * @param defValue Value to return if this preference does not exist.
192 * @see #getBoolean(String, boolean)
193 */
194 default boolean getBoolean(String key, boolean defValue) {
195 return defValue;
196 }
197}