1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/*
2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project
3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License");
5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License.
6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at
7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *      http://www.apache.org/licenses/LICENSE-2.0
9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software
11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS,
12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and
14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License.
15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.util;
18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.Factory;
20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/**
22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Thin wrapper to get/set shared prefs values.
23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic abstract class BuglePrefs {
25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Shared preferences name for preferences applicable to the entire app.
27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final String SHARED_PREFERENCES_NAME = "bugle";
29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Shared preferences name for subscription-specific preferences.
32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Note: for all subscription-specific preferences, please prefix the shared preference keys
33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * with "buglesub_", so that Bugle may perform runtime validations on preferences to make sure
34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * you don't accidentally write per-subscription settings into the general pref file, and vice
35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * versa.
36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final String SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX = "buglesub_";
38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * A placeholder base version for Bugle builds where no shared pref version was defined.
41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static final int NO_SHARED_PREFERENCES_VERSION = -1;
43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Returns the shared preferences file name to use.
46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Subclasses should override and return the shared preferences file.
47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract String getSharedPreferencesName();
49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Handles pref version upgrade.
53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void onUpgrade(final int oldVersion, final int newVersion);
55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Gets the SharedPreferences accessor to the application-wide preferences.
58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static BuglePrefs getApplicationPrefs() {
60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return Factory.get().getApplicationPrefs();
61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * Gets the SharedPreferences accessor to the subscription-specific preferences.
65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public static BuglePrefs getSubscriptionPrefs(final int subId) {
67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        return Factory.get().getSubscriptionPrefs(subId);
68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to look up in shared prefs
72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param defaultValue The default value if value in shared prefs is null or if
73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * NumberFormatException is caught.
74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @return The corresponding value, or the default value.
75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract int getInt(final String key, final int defaultValue);
77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to look up in shared prefs
80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param defaultValue The default value if value in shared prefs is null or if
81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * NumberFormatException is caught.
82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @return The corresponding value, or the default value.
83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract long getLong(final String key, final long defaultValue);
85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to look up in shared prefs
88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param defaultValue The default value if value in shared prefs is null.
89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @return The corresponding value, or the default value.
90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract boolean getBoolean(final String key, final boolean defaultValue);
92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to look up in shared prefs
95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param defaultValue The default value if value in shared prefs is null.
96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @return The corresponding value, or the default value.
97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract String getString(final String key, final String defaultValue);
99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to look up in shared prefs
102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @return The corresponding value, or null if not found.
103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract byte[] getBytes(final String key);
105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to set in shared prefs
108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param value The value to assign to the key
109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void putInt(final String key, final int value);
111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to set in shared prefs
114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param value The value to assign to the key
115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void putLong(final String key, final long value);
117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to set in shared prefs
120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param value The value to assign to the key
121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void putBoolean(final String key, final boolean value);
123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to set in shared prefs
126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param value The value to assign to the key
127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void putString(final String key, final String value);
129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to set in shared prefs
132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param value The value to assign to the key
133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void putBytes(final String key, final byte[] value);
135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * @param key The key to remove from shared prefs
138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract void remove(String key);
140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd}
141