142113ea809342a8cc7d2ed7d53583e6d5daac791Erik// Copyright 2011 Google Inc. All Rights Reserved. 242113ea809342a8cc7d2ed7d53583e6d5daac791Erik 342113ea809342a8cc7d2ed7d53583e6d5daac791Erikpackage com.android.vending.sectool.v1; 442113ea809342a8cc7d2ed7d53583e6d5daac791Erik 542113ea809342a8cc7d2ed7d53583e6d5daac791Erikimport com.android.vending.sectool.v1.GoogleSettingsContract; 642113ea809342a8cc7d2ed7d53583e6d5daac791Erikimport com.android.vending.sectool.v1.Gservices; 742113ea809342a8cc7d2ed7d53583e6d5daac791Erik 842113ea809342a8cc7d2ed7d53583e6d5daac791Erikimport android.app.Application; 942113ea809342a8cc7d2ed7d53583e6d5daac791Erikimport android.content.ContentResolver; 1042113ea809342a8cc7d2ed7d53583e6d5daac791Erikimport android.content.Context; 1142113ea809342a8cc7d2ed7d53583e6d5daac791Erik 1242113ea809342a8cc7d2ed7d53583e6d5daac791Erik/** 1342113ea809342a8cc7d2ed7d53583e6d5daac791Erik * A convenient way to read Gservices values, inspired by Flag. 1442113ea809342a8cc7d2ed7d53583e6d5daac791Erik * 1542113ea809342a8cc7d2ed7d53583e6d5daac791Erik * You must call {@link #init(Context)} before any calls to {@link #get()}. 1642113ea809342a8cc7d2ed7d53583e6d5daac791Erik * The recommended place to call this is in {@link Application#onCreate()}. 1742113ea809342a8cc7d2ed7d53583e6d5daac791Erik */ 1842113ea809342a8cc7d2ed7d53583e6d5daac791Erikpublic abstract class GservicesValue<T> { 1942113ea809342a8cc7d2ed7d53583e6d5daac791Erik private static GservicesReader sGservicesReader = null; 2042113ea809342a8cc7d2ed7d53583e6d5daac791Erik 2142113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static void init(Context context) { 2242113ea809342a8cc7d2ed7d53583e6d5daac791Erik sGservicesReader = new GservicesReaderImpl(context.getContentResolver()); 2342113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 2442113ea809342a8cc7d2ed7d53583e6d5daac791Erik 2542113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static void initForTests() { 2642113ea809342a8cc7d2ed7d53583e6d5daac791Erik sGservicesReader = new GservicesReaderForTests(); 2742113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 2842113ea809342a8cc7d2ed7d53583e6d5daac791Erik 2942113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected final String mKey; 3042113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected final T mDefaultValue; 3142113ea809342a8cc7d2ed7d53583e6d5daac791Erik private T mOverride = null; 3242113ea809342a8cc7d2ed7d53583e6d5daac791Erik 3342113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected GservicesValue(String key, T defaultValue) { 3442113ea809342a8cc7d2ed7d53583e6d5daac791Erik mKey = key; 3542113ea809342a8cc7d2ed7d53583e6d5daac791Erik mDefaultValue = defaultValue; 3642113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 3742113ea809342a8cc7d2ed7d53583e6d5daac791Erik 3842113ea809342a8cc7d2ed7d53583e6d5daac791Erik /** For tests. */ 3942113ea809342a8cc7d2ed7d53583e6d5daac791Erik public void override(T value) { 4042113ea809342a8cc7d2ed7d53583e6d5daac791Erik mOverride = value; 4142113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 4242113ea809342a8cc7d2ed7d53583e6d5daac791Erik 4342113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected abstract T retrieve(String key); 4442113ea809342a8cc7d2ed7d53583e6d5daac791Erik 4542113ea809342a8cc7d2ed7d53583e6d5daac791Erik public final T get() { 4642113ea809342a8cc7d2ed7d53583e6d5daac791Erik if (mOverride != null) { 4742113ea809342a8cc7d2ed7d53583e6d5daac791Erik return mOverride; 4842113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 4942113ea809342a8cc7d2ed7d53583e6d5daac791Erik return retrieve(mKey); 5042113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 5142113ea809342a8cc7d2ed7d53583e6d5daac791Erik 5242113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static GservicesValue<Boolean> value(String key, boolean defaultValue) { 5342113ea809342a8cc7d2ed7d53583e6d5daac791Erik return new GservicesValue<Boolean>(key, defaultValue) { 5442113ea809342a8cc7d2ed7d53583e6d5daac791Erik @Override 5542113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected Boolean retrieve(String key) { 5642113ea809342a8cc7d2ed7d53583e6d5daac791Erik return sGservicesReader.getBoolean(mKey, mDefaultValue); 5742113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 5842113ea809342a8cc7d2ed7d53583e6d5daac791Erik }; 5942113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 6042113ea809342a8cc7d2ed7d53583e6d5daac791Erik 6142113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static GservicesValue<Long> value(String key, Long defaultValue) { 6242113ea809342a8cc7d2ed7d53583e6d5daac791Erik return new GservicesValue<Long>(key, defaultValue) { 6342113ea809342a8cc7d2ed7d53583e6d5daac791Erik @Override 6442113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected Long retrieve(String key) { 6542113ea809342a8cc7d2ed7d53583e6d5daac791Erik return sGservicesReader.getLong(mKey, mDefaultValue); 6642113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 6742113ea809342a8cc7d2ed7d53583e6d5daac791Erik }; 6842113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 6942113ea809342a8cc7d2ed7d53583e6d5daac791Erik 7042113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static GservicesValue<Integer> value(String key, Integer defaultValue) { 7142113ea809342a8cc7d2ed7d53583e6d5daac791Erik return new GservicesValue<Integer>(key, defaultValue) { 7242113ea809342a8cc7d2ed7d53583e6d5daac791Erik @Override 7342113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected Integer retrieve(String key) { 7442113ea809342a8cc7d2ed7d53583e6d5daac791Erik return sGservicesReader.getInt(mKey, mDefaultValue); 7542113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 7642113ea809342a8cc7d2ed7d53583e6d5daac791Erik }; 7742113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 7842113ea809342a8cc7d2ed7d53583e6d5daac791Erik 7942113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static GservicesValue<String> value(String key, String defaultValue) { 8042113ea809342a8cc7d2ed7d53583e6d5daac791Erik return new GservicesValue<String>(key, defaultValue) { 8142113ea809342a8cc7d2ed7d53583e6d5daac791Erik @Override 8242113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected String retrieve(String key) { 8342113ea809342a8cc7d2ed7d53583e6d5daac791Erik return sGservicesReader.getString(mKey, mDefaultValue); 8442113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 8542113ea809342a8cc7d2ed7d53583e6d5daac791Erik }; 8642113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 8742113ea809342a8cc7d2ed7d53583e6d5daac791Erik 8842113ea809342a8cc7d2ed7d53583e6d5daac791Erik public static GservicesValue<String> partnerSetting(String key, String defaultValue) { 8942113ea809342a8cc7d2ed7d53583e6d5daac791Erik return new GservicesValue<String>(key, defaultValue) { 9042113ea809342a8cc7d2ed7d53583e6d5daac791Erik @Override 9142113ea809342a8cc7d2ed7d53583e6d5daac791Erik protected String retrieve(String key) { 9242113ea809342a8cc7d2ed7d53583e6d5daac791Erik return sGservicesReader.getPartnerString(mKey, mDefaultValue); 9342113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 9442113ea809342a8cc7d2ed7d53583e6d5daac791Erik }; 9542113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 9642113ea809342a8cc7d2ed7d53583e6d5daac791Erik 9742113ea809342a8cc7d2ed7d53583e6d5daac791Erik 9842113ea809342a8cc7d2ed7d53583e6d5daac791Erik private interface GservicesReader { 9942113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Boolean getBoolean(String key, Boolean defaultValue); 10042113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Long getLong(String key, Long defaultValue); 10142113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Integer getInt(String key, Integer defaultValue); 10242113ea809342a8cc7d2ed7d53583e6d5daac791Erik public String getString(String key, String defaultValue); 10342113ea809342a8cc7d2ed7d53583e6d5daac791Erik public String getPartnerString(String key, String defaultValue); 10442113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 10542113ea809342a8cc7d2ed7d53583e6d5daac791Erik 10642113ea809342a8cc7d2ed7d53583e6d5daac791Erik /** The real Gservices reader. */ 10742113ea809342a8cc7d2ed7d53583e6d5daac791Erik private static class GservicesReaderImpl implements GservicesReader { 10842113ea809342a8cc7d2ed7d53583e6d5daac791Erik private final ContentResolver mContentResolver; 10942113ea809342a8cc7d2ed7d53583e6d5daac791Erik public GservicesReaderImpl(ContentResolver contentResolver) { 11042113ea809342a8cc7d2ed7d53583e6d5daac791Erik mContentResolver = contentResolver; 11142113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 11242113ea809342a8cc7d2ed7d53583e6d5daac791Erik 11342113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Boolean getBoolean(String key, Boolean defaultValue) { 11442113ea809342a8cc7d2ed7d53583e6d5daac791Erik return Gservices.getBoolean(mContentResolver, key, defaultValue); 11542113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 11642113ea809342a8cc7d2ed7d53583e6d5daac791Erik 11742113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Integer getInt(String key, Integer defaultValue) { 11842113ea809342a8cc7d2ed7d53583e6d5daac791Erik return Gservices.getInt(mContentResolver, key, defaultValue); 11942113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 12042113ea809342a8cc7d2ed7d53583e6d5daac791Erik 12142113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Long getLong(String key, Long defaultValue) { 12242113ea809342a8cc7d2ed7d53583e6d5daac791Erik return Gservices.getLong(mContentResolver, key, defaultValue); 12342113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 12442113ea809342a8cc7d2ed7d53583e6d5daac791Erik 12542113ea809342a8cc7d2ed7d53583e6d5daac791Erik public String getString(String key, String defaultValue) { 12642113ea809342a8cc7d2ed7d53583e6d5daac791Erik return Gservices.getString(mContentResolver, key, defaultValue); 12742113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 12842113ea809342a8cc7d2ed7d53583e6d5daac791Erik 12942113ea809342a8cc7d2ed7d53583e6d5daac791Erik public String getPartnerString(String key, String defaultValue) { 13042113ea809342a8cc7d2ed7d53583e6d5daac791Erik return GoogleSettingsContract.Partner.getString(mContentResolver, key, defaultValue); 13142113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 13242113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 13342113ea809342a8cc7d2ed7d53583e6d5daac791Erik 13442113ea809342a8cc7d2ed7d53583e6d5daac791Erik /** Implementation of GservicesReader for testing. */ 13542113ea809342a8cc7d2ed7d53583e6d5daac791Erik private static class GservicesReaderForTests implements GservicesReader { 13642113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Boolean getBoolean(String key, Boolean defaultValue) { return defaultValue; } 13742113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Integer getInt(String key, Integer defaultValue) { return defaultValue; } 13842113ea809342a8cc7d2ed7d53583e6d5daac791Erik public Long getLong(String key, Long defaultValue) { return defaultValue; } 13942113ea809342a8cc7d2ed7d53583e6d5daac791Erik public String getString(String key, String defaultValue) { return defaultValue; } 14042113ea809342a8cc7d2ed7d53583e6d5daac791Erik public String getPartnerString(String key, String defaultValue) { return defaultValue; } 14142113ea809342a8cc7d2ed7d53583e6d5daac791Erik } 14242113ea809342a8cc7d2ed7d53583e6d5daac791Erik} 143