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 android.content.Context; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.SharedPreferences; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.util.Base64; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Thin wrapper to get/set shared prefs values. 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic abstract class BuglePrefsImpl extends BuglePrefs { 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Context mContext; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public BuglePrefsImpl(final Context context) { 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mContext = context; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Validate the prefs key passed in. Subclasses should override this as needed to perform 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * runtime checks (such as making sure per-subscription settings don't sneak into application- 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * wide settings). 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd protected void validateKey(String key) { 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getInt(final String key, final int defaultValue) { 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return prefs.getInt(key, defaultValue); 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public long getLong(final String key, final long defaultValue) { 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return prefs.getLong(key, defaultValue); 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getBoolean(final String key, final boolean defaultValue) { 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return prefs.getBoolean(key, defaultValue); 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getString(final String key, final String defaultValue) { 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return prefs.getString(key, defaultValue); 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public byte[] getBytes(String key) { 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String byteValue = getString(key, null); 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return byteValue == null ? null : Base64.decode(byteValue, Base64.DEFAULT); 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void putInt(final String key, final int value) { 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences.Editor editor = prefs.edit(); 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.putInt(key, value); 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.apply(); 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void putLong(final String key, final long value) { 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences.Editor editor = prefs.edit(); 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.putLong(key, value); 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.apply(); 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void putBoolean(final String key, final boolean value) { 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences.Editor editor = prefs.edit(); 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.putBoolean(key, value); 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.apply(); 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void putString(final String key, final String value) { 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences.Editor editor = prefs.edit(); 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.putString(key, value); 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.apply(); 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void putBytes(String key, byte[] value) { 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String encodedBytes = Base64.encodeToString(value, Base64.DEFAULT); 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd putString(key, encodedBytes); 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void remove(final String key) { 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd validateKey(key); 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences prefs = mContext.getSharedPreferences( 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd getSharedPreferencesName(), Context.MODE_PRIVATE); 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SharedPreferences.Editor editor = prefs.edit(); 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.remove(key); 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd editor.apply(); 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 136