| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.messaging.util; |
| |
| import android.content.Context; |
| import android.content.res.Resources; |
| import android.text.TextUtils; |
| |
| import com.android.messaging.Factory; |
| import com.android.messaging.R; |
| |
| /** |
| * Provides interface to access per-subscription shared preferences. We have one instance of |
| * this per active subscription. |
| */ |
| public class BugleSubscriptionPrefs extends BuglePrefsImpl { |
| private final int mSubId; |
| |
| public BugleSubscriptionPrefs(final Context context, final int subId) { |
| super(context); |
| mSubId = subId; |
| } |
| |
| @Override |
| public String getSharedPreferencesName() { |
| return SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX + String.valueOf(mSubId); |
| } |
| |
| @Override |
| protected void validateKey(String key) { |
| super.validateKey(key); |
| // Callers should only access per-subscription preferences from this class |
| Assert.isTrue(key.startsWith(SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX)); |
| } |
| |
| @Override |
| public void onUpgrade(final int oldVersion, final int newVersion) { |
| switch (oldVersion) { |
| case BuglePrefs.NO_SHARED_PREFERENCES_VERSION: |
| // Upgrade to version 1. Adding per-subscription shared prefs. |
| // Migrate values from the application-wide settings. |
| migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), "delivery_reports", |
| R.string.delivery_reports_pref_key, R.bool.delivery_reports_pref_default); |
| migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), "auto_retrieve_mms", |
| R.string.auto_retrieve_mms_pref_key, R.bool.auto_retrieve_mms_pref_default); |
| migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), |
| "auto_retrieve_mms_when_roaming", |
| R.string.auto_retrieve_mms_when_roaming_pref_key, |
| R.bool.auto_retrieve_mms_when_roaming_pref_default); |
| migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), "group_messaging", |
| R.string.group_mms_pref_key, R.bool.group_mms_pref_default); |
| |
| if (PhoneUtils.getDefault().getActiveSubscriptionCount() == 1) { |
| migratePrefStringInternal(BuglePrefs.getApplicationPrefs(), "mms_phone_number", |
| R.string.mms_phone_number_pref_key, null); |
| } |
| } |
| } |
| |
| private void migratePrefBooleanInternal(final BuglePrefs oldPrefs, final String oldKey, |
| final int newKeyResId, final int defaultValueResId) { |
| final Resources resources = Factory.get().getApplicationContext().getResources(); |
| final boolean defaultValue = resources.getBoolean(defaultValueResId); |
| final boolean oldValue = oldPrefs.getBoolean(oldKey, defaultValue); |
| |
| // Only migrate pref value if it's different than the default. |
| if (oldValue != defaultValue) { |
| putBoolean(resources.getString(newKeyResId), oldValue); |
| } |
| } |
| |
| private void migratePrefStringInternal(final BuglePrefs oldPrefs, final String oldKey, |
| final int newKeyResId, final String defaultValue) { |
| final Resources resources = Factory.get().getApplicationContext().getResources(); |
| final String oldValue = oldPrefs.getString(oldKey, defaultValue); |
| |
| // Only migrate pref value if it's different than the default. |
| if (!TextUtils.equals(oldValue, defaultValue)) { |
| putString(resources.getString(newKeyResId), oldValue); |
| } |
| } |
| } |