Search in sources :

Example 26 with SettingNotFoundException

use of android.provider.Settings.SettingNotFoundException in project android_frameworks_base by ResurrectionRemix.

the class LockSettingsService method migrateOldData.

private void migrateOldData() {
    try {
        // root user.
        if (getString("migrated", null, 0) == null) {
            final ContentResolver cr = mContext.getContentResolver();
            for (String validSetting : VALID_SETTINGS) {
                String value = Settings.Secure.getString(cr, validSetting);
                if (value != null) {
                    setString(validSetting, value, 0);
                }
            }
            // No need to move the password / pattern files. They're already in the right place.
            setString("migrated", "true", 0);
            Slog.i(TAG, "Migrated lock settings to new location");
        }
        // These Settings changed after multi-user was enabled, hence need to be moved per user.
        if (getString("migrated_user_specific", null, 0) == null) {
            final ContentResolver cr = mContext.getContentResolver();
            List<UserInfo> users = mUserManager.getUsers();
            for (int user = 0; user < users.size(); user++) {
                // Migrate owner info
                final int userId = users.get(user).id;
                final String OWNER_INFO = Secure.LOCK_SCREEN_OWNER_INFO;
                String ownerInfo = Settings.Secure.getStringForUser(cr, OWNER_INFO, userId);
                if (!TextUtils.isEmpty(ownerInfo)) {
                    setString(OWNER_INFO, ownerInfo, userId);
                    Settings.Secure.putStringForUser(cr, OWNER_INFO, "", userId);
                }
                // Migrate owner info enabled.  Note there was a bug where older platforms only
                // stored this value if the checkbox was toggled at least once. The code detects
                // this case by handling the exception.
                final String OWNER_INFO_ENABLED = Secure.LOCK_SCREEN_OWNER_INFO_ENABLED;
                boolean enabled;
                try {
                    int ivalue = Settings.Secure.getIntForUser(cr, OWNER_INFO_ENABLED, userId);
                    enabled = ivalue != 0;
                    setLong(OWNER_INFO_ENABLED, enabled ? 1 : 0, userId);
                } catch (SettingNotFoundException e) {
                    // Setting was never stored. Store it if the string is not empty.
                    if (!TextUtils.isEmpty(ownerInfo)) {
                        setLong(OWNER_INFO_ENABLED, 1, userId);
                    }
                }
                Settings.Secure.putIntForUser(cr, OWNER_INFO_ENABLED, 0, userId);
            }
            // No need to move the password / pattern files. They're already in the right place.
            setString("migrated_user_specific", "true", 0);
            Slog.i(TAG, "Migrated per-user lock settings to new location");
        }
        // Migrates biometric weak such that the fallback mechanism becomes the primary.
        if (getString("migrated_biometric_weak", null, 0) == null) {
            List<UserInfo> users = mUserManager.getUsers();
            for (int i = 0; i < users.size(); i++) {
                int userId = users.get(i).id;
                long type = getLong(LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userId);
                long alternateType = getLong(LockPatternUtils.PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userId);
                if (type == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
                    setLong(LockPatternUtils.PASSWORD_TYPE_KEY, alternateType, userId);
                }
                setLong(LockPatternUtils.PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userId);
            }
            setString("migrated_biometric_weak", "true", 0);
            Slog.i(TAG, "Migrated biometric weak to use the fallback instead");
        }
        // user we disable the flag to remain consistent.
        if (getString("migrated_lockscreen_disabled", null, 0) == null) {
            final List<UserInfo> users = mUserManager.getUsers();
            final int userCount = users.size();
            int switchableUsers = 0;
            for (int i = 0; i < userCount; i++) {
                if (users.get(i).supportsSwitchTo()) {
                    switchableUsers++;
                }
            }
            if (switchableUsers > 1) {
                for (int i = 0; i < userCount; i++) {
                    int id = users.get(i).id;
                    if (getBoolean(LockPatternUtils.DISABLE_LOCKSCREEN_KEY, false, id)) {
                        setBoolean(LockPatternUtils.DISABLE_LOCKSCREEN_KEY, false, id);
                    }
                }
            }
            setString("migrated_lockscreen_disabled", "true", 0);
            Slog.i(TAG, "Migrated lockscreen disabled flag");
        }
        final List<UserInfo> users = mUserManager.getUsers();
        for (int i = 0; i < users.size(); i++) {
            final UserInfo userInfo = users.get(i);
            if (userInfo.isManagedProfile() && mStorage.hasChildProfileLock(userInfo.id)) {
                // When managed profile has a unified lock, the password quality stored has 2
                // possibilities only.
                // 1). PASSWORD_QUALITY_UNSPECIFIED, which is upgraded from dp2, and we are
                // going to set it back to PASSWORD_QUALITY_ALPHANUMERIC.
                // 2). PASSWORD_QUALITY_ALPHANUMERIC, which is the actual password quality for
                // unified lock.
                final long quality = getLong(LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userInfo.id);
                if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
                    // Only possible when it's upgraded from nyc dp3
                    Slog.i(TAG, "Migrated tied profile lock type");
                    setLong(LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC, userInfo.id);
                } else if (quality != DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC) {
                    // It should not happen
                    Slog.e(TAG, "Invalid tied profile lock type: " + quality);
                }
            }
            try {
                final String alias = LockPatternUtils.PROFILE_KEY_NAME_ENCRYPT + userInfo.id;
                java.security.KeyStore keyStore = java.security.KeyStore.getInstance("AndroidKeyStore");
                keyStore.load(null);
                if (keyStore.containsAlias(alias)) {
                    keyStore.deleteEntry(alias);
                }
            } catch (KeyStoreException | NoSuchAlgorithmException | CertificateException | IOException e) {
                Slog.e(TAG, "Unable to remove tied profile key", e);
            }
        }
        boolean isWatch = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
        // and device management the lockscreen must be re-enabled now for users that upgrade.
        if (isWatch && getString("migrated_wear_lockscreen_disabled", null, 0) == null) {
            final int userCount = users.size();
            for (int i = 0; i < userCount; i++) {
                int id = users.get(i).id;
                setBoolean(LockPatternUtils.DISABLE_LOCKSCREEN_KEY, false, id);
            }
            setString("migrated_wear_lockscreen_disabled", "true", 0);
            Slog.i(TAG, "Migrated lockscreen_disabled for Wear devices");
        }
    } catch (RemoteException re) {
        Slog.e(TAG, "Unable to migrate old data", re);
    }
}
Also used : UserInfo(android.content.pm.UserInfo) CertificateException(java.security.cert.CertificateException) KeyStoreException(java.security.KeyStoreException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) IOException(java.io.IOException) ContentResolver(android.content.ContentResolver) SettingNotFoundException(android.provider.Settings.SettingNotFoundException) RemoteException(android.os.RemoteException)

Example 27 with SettingNotFoundException

use of android.provider.Settings.SettingNotFoundException in project android_frameworks_base by crdroidandroid.

the class LockSettingsService method migrateOldData.

private void migrateOldData() {
    try {
        // root user.
        if (getString("migrated", null, 0) == null) {
            final ContentResolver cr = mContext.getContentResolver();
            for (String validSetting : VALID_SETTINGS) {
                String value = Settings.Secure.getString(cr, validSetting);
                if (value != null) {
                    setString(validSetting, value, 0);
                }
            }
            // No need to move the password / pattern files. They're already in the right place.
            setString("migrated", "true", 0);
            Slog.i(TAG, "Migrated lock settings to new location");
        }
        // These Settings changed after multi-user was enabled, hence need to be moved per user.
        if (getString("migrated_user_specific", null, 0) == null) {
            final ContentResolver cr = mContext.getContentResolver();
            List<UserInfo> users = mUserManager.getUsers();
            for (int user = 0; user < users.size(); user++) {
                // Migrate owner info
                final int userId = users.get(user).id;
                final String OWNER_INFO = Secure.LOCK_SCREEN_OWNER_INFO;
                String ownerInfo = Settings.Secure.getStringForUser(cr, OWNER_INFO, userId);
                if (!TextUtils.isEmpty(ownerInfo)) {
                    setString(OWNER_INFO, ownerInfo, userId);
                    Settings.Secure.putStringForUser(cr, OWNER_INFO, "", userId);
                }
                // Migrate owner info enabled.  Note there was a bug where older platforms only
                // stored this value if the checkbox was toggled at least once. The code detects
                // this case by handling the exception.
                final String OWNER_INFO_ENABLED = Secure.LOCK_SCREEN_OWNER_INFO_ENABLED;
                boolean enabled;
                try {
                    int ivalue = Settings.Secure.getIntForUser(cr, OWNER_INFO_ENABLED, userId);
                    enabled = ivalue != 0;
                    setLong(OWNER_INFO_ENABLED, enabled ? 1 : 0, userId);
                } catch (SettingNotFoundException e) {
                    // Setting was never stored. Store it if the string is not empty.
                    if (!TextUtils.isEmpty(ownerInfo)) {
                        setLong(OWNER_INFO_ENABLED, 1, userId);
                    }
                }
                Settings.Secure.putIntForUser(cr, OWNER_INFO_ENABLED, 0, userId);
            }
            // No need to move the password / pattern files. They're already in the right place.
            setString("migrated_user_specific", "true", 0);
            Slog.i(TAG, "Migrated per-user lock settings to new location");
        }
        // Migrates biometric weak such that the fallback mechanism becomes the primary.
        if (getString("migrated_biometric_weak", null, 0) == null) {
            List<UserInfo> users = mUserManager.getUsers();
            for (int i = 0; i < users.size(); i++) {
                int userId = users.get(i).id;
                long type = getLong(LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userId);
                long alternateType = getLong(LockPatternUtils.PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userId);
                if (type == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
                    setLong(LockPatternUtils.PASSWORD_TYPE_KEY, alternateType, userId);
                }
                setLong(LockPatternUtils.PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userId);
            }
            setString("migrated_biometric_weak", "true", 0);
            Slog.i(TAG, "Migrated biometric weak to use the fallback instead");
        }
        // user we disable the flag to remain consistent.
        if (getString("migrated_lockscreen_disabled", null, 0) == null) {
            final List<UserInfo> users = mUserManager.getUsers();
            final int userCount = users.size();
            int switchableUsers = 0;
            for (int i = 0; i < userCount; i++) {
                if (users.get(i).supportsSwitchTo()) {
                    switchableUsers++;
                }
            }
            if (switchableUsers > 1) {
                for (int i = 0; i < userCount; i++) {
                    int id = users.get(i).id;
                    if (getBoolean(LockPatternUtils.DISABLE_LOCKSCREEN_KEY, false, id)) {
                        setBoolean(LockPatternUtils.DISABLE_LOCKSCREEN_KEY, false, id);
                    }
                }
            }
            setString("migrated_lockscreen_disabled", "true", 0);
            Slog.i(TAG, "Migrated lockscreen disabled flag");
        }
        final List<UserInfo> users = mUserManager.getUsers();
        for (int i = 0; i < users.size(); i++) {
            final UserInfo userInfo = users.get(i);
            if (userInfo.isManagedProfile() && mStorage.hasChildProfileLock(userInfo.id)) {
                // When managed profile has a unified lock, the password quality stored has 2
                // possibilities only.
                // 1). PASSWORD_QUALITY_UNSPECIFIED, which is upgraded from dp2, and we are
                // going to set it back to PASSWORD_QUALITY_ALPHANUMERIC.
                // 2). PASSWORD_QUALITY_ALPHANUMERIC, which is the actual password quality for
                // unified lock.
                final long quality = getLong(LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userInfo.id);
                if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
                    // Only possible when it's upgraded from nyc dp3
                    Slog.i(TAG, "Migrated tied profile lock type");
                    setLong(LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC, userInfo.id);
                } else if (quality != DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC) {
                    // It should not happen
                    Slog.e(TAG, "Invalid tied profile lock type: " + quality);
                }
            }
            try {
                final String alias = LockPatternUtils.PROFILE_KEY_NAME_ENCRYPT + userInfo.id;
                java.security.KeyStore keyStore = java.security.KeyStore.getInstance("AndroidKeyStore");
                keyStore.load(null);
                if (keyStore.containsAlias(alias)) {
                    keyStore.deleteEntry(alias);
                }
            } catch (KeyStoreException | NoSuchAlgorithmException | CertificateException | IOException e) {
                Slog.e(TAG, "Unable to remove tied profile key", e);
            }
        }
        boolean isWatch = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
        // and device management the lockscreen must be re-enabled now for users that upgrade.
        if (isWatch && getString("migrated_wear_lockscreen_disabled", null, 0) == null) {
            final int userCount = users.size();
            for (int i = 0; i < userCount; i++) {
                int id = users.get(i).id;
                setBoolean(LockPatternUtils.DISABLE_LOCKSCREEN_KEY, false, id);
            }
            setString("migrated_wear_lockscreen_disabled", "true", 0);
            Slog.i(TAG, "Migrated lockscreen_disabled for Wear devices");
        }
    } catch (RemoteException re) {
        Slog.e(TAG, "Unable to migrate old data", re);
    }
}
Also used : UserInfo(android.content.pm.UserInfo) CertificateException(java.security.cert.CertificateException) KeyStoreException(java.security.KeyStoreException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) IOException(java.io.IOException) ContentResolver(android.content.ContentResolver) SettingNotFoundException(android.provider.Settings.SettingNotFoundException) RemoteException(android.os.RemoteException)

Example 28 with SettingNotFoundException

use of android.provider.Settings.SettingNotFoundException in project android_packages_apps_Dialer by LineageOS.

the class ContactsPreferences method maybeMigrateSystemSettings.

/**
 * If there are currently no preferences (which means this is the first time we are run), For sort
 * order and display order, check to see if there are any preferences stored in system settings
 * (pre-L) which can be copied into our own SharedPreferences. For default account setting, check
 * to see if there are any preferences stored in the previous SharedPreferences which can be
 * copied into current SharedPreferences.
 */
private void maybeMigrateSystemSettings() {
    if (!mPreferences.contains(SORT_ORDER_KEY)) {
        int sortOrder = getDefaultSortOrder();
        try {
            sortOrder = Settings.System.getInt(mContext.getContentResolver(), SORT_ORDER_KEY);
        } catch (SettingNotFoundException e) {
        }
        setSortOrder(sortOrder);
    }
    if (!mPreferences.contains(DISPLAY_ORDER_KEY)) {
        int displayOrder = getDefaultDisplayOrder();
        try {
            displayOrder = Settings.System.getInt(mContext.getContentResolver(), DISPLAY_ORDER_KEY);
        } catch (SettingNotFoundException e) {
        }
        setDisplayOrder(displayOrder);
    }
    if (!mPreferences.contains(mDefaultAccountKey)) {
        final SharedPreferences previousPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        final String defaultAccount = previousPrefs.getString(mDefaultAccountKey, null);
        if (!TextUtils.isEmpty(defaultAccount)) {
            final AccountWithDataSet accountWithDataSet = AccountWithDataSet.unstringify(defaultAccount);
            setDefaultAccount(accountWithDataSet);
        }
    }
}
Also used : SharedPreferences(android.content.SharedPreferences) AccountWithDataSet(com.android.contacts.common.model.account.AccountWithDataSet) SettingNotFoundException(android.provider.Settings.SettingNotFoundException)

Example 29 with SettingNotFoundException

use of android.provider.Settings.SettingNotFoundException in project android_packages_apps_Settings by LineageOS.

the class TextToSpeechSettings method initDefaultSettings.

private void initDefaultSettings() {
    ContentResolver resolver = getContentResolver();
    // Find the default TTS values in the settings, initialize and store the
    // settings if they are not found.
    // "Use Defaults"
    int useDefault = 0;
    mUseDefaultPref = (CheckBoxPreference) findPreference(KEY_TTS_USE_DEFAULT);
    try {
        useDefault = Settings.Secure.getInt(resolver, TTS_USE_DEFAULTS);
    } catch (SettingNotFoundException e) {
        // "use default" setting not found, initialize it
        useDefault = TextToSpeech.Engine.USE_DEFAULTS;
        Settings.Secure.putInt(resolver, TTS_USE_DEFAULTS, useDefault);
    }
    mUseDefaultPref.setChecked(useDefault == 1);
    mUseDefaultPref.setOnPreferenceChangeListener(this);
    // Default synthesis engine
    mDefaultSynthPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);
    loadEngines();
    mDefaultSynthPref.setOnPreferenceChangeListener(this);
    String engine = Settings.Secure.getString(resolver, TTS_DEFAULT_SYNTH);
    if (engine == null) {
        // TODO move FALLBACK_TTS_DEFAULT_SYNTH to TextToSpeech
        engine = FALLBACK_TTS_DEFAULT_SYNTH;
        Settings.Secure.putString(resolver, TTS_DEFAULT_SYNTH, engine);
    }
    mDefaultEng = engine;
    // Default rate
    mDefaultRatePref = (ListPreference) findPreference(KEY_TTS_DEFAULT_RATE);
    try {
        mDefaultRate = Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
    } catch (SettingNotFoundException e) {
        // default rate setting not found, initialize it
        mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
        Settings.Secure.putInt(resolver, TTS_DEFAULT_RATE, mDefaultRate);
    }
    mDefaultRatePref.setValue(String.valueOf(mDefaultRate));
    mDefaultRatePref.setOnPreferenceChangeListener(this);
    // Default language / country / variant : these three values map to a single ListPref
    // representing the matching Locale
    mDefaultLocPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_LANG);
    initDefaultLang();
    mDefaultLocPref.setOnPreferenceChangeListener(this);
}
Also used : SettingNotFoundException(android.provider.Settings.SettingNotFoundException) ContentResolver(android.content.ContentResolver)

Example 30 with SettingNotFoundException

use of android.provider.Settings.SettingNotFoundException in project android_frameworks_opt_telephony by LineageOS.

the class MultiSimSettingController method onSubscriptionGroupChanged.

/**
 * When a subscription group is created or new subscriptions are added in the group, make
 * sure the settings among them are synced.
 * TODO: b/130258159 have a separate database table for grouped subscriptions so we don't
 * manually sync each setting.
 */
private void onSubscriptionGroupChanged(ParcelUuid groupUuid) {
    if (DBG)
        log("onSubscriptionGroupChanged");
    List<SubscriptionInfo> infoList = mSubController.getSubscriptionsInGroup(groupUuid, mContext.getOpPackageName(), mContext.getAttributionTag());
    if (infoList == null || infoList.isEmpty())
        return;
    // Get a reference subscription to copy settings from.
    // TODO: the reference sub should be passed in from external caller.
    int refSubId = infoList.get(0).getSubscriptionId();
    for (SubscriptionInfo info : infoList) {
        int subId = info.getSubscriptionId();
        if (mSubController.isActiveSubId(subId) && !mSubController.isOpportunistic(subId)) {
            refSubId = subId;
            break;
        }
    }
    if (DBG)
        log("refSubId is " + refSubId);
    boolean enable = false;
    try {
        enable = GlobalSettingsHelper.getBoolean(mContext, Settings.Global.MOBILE_DATA, refSubId);
        onUserDataEnabled(refSubId, enable);
    } catch (SettingNotFoundException exception) {
        // pass invalid refSubId to fetch the single-sim setting
        enable = GlobalSettingsHelper.getBoolean(mContext, Settings.Global.MOBILE_DATA, INVALID_SUBSCRIPTION_ID, enable);
        onUserDataEnabled(refSubId, enable);
    }
    enable = false;
    try {
        enable = GlobalSettingsHelper.getBoolean(mContext, Settings.Global.DATA_ROAMING, refSubId);
        onRoamingDataEnabled(refSubId, enable);
    } catch (SettingNotFoundException exception) {
        // pass invalid refSubId to fetch the single-sim setting
        enable = GlobalSettingsHelper.getBoolean(mContext, Settings.Global.DATA_ROAMING, INVALID_SUBSCRIPTION_ID, enable);
        onRoamingDataEnabled(refSubId, enable);
    }
    // Sync settings in subscription database..
    mSubController.syncGroupedSetting(refSubId);
}
Also used : SubscriptionInfo(android.telephony.SubscriptionInfo) SettingNotFoundException(android.provider.Settings.SettingNotFoundException)

Aggregations

SettingNotFoundException (android.provider.Settings.SettingNotFoundException)31 ContentResolver (android.content.ContentResolver)16 RemoteException (android.os.RemoteException)7 UserInfo (android.content.pm.UserInfo)6 Vibrator (android.os.Vibrator)6 InputDevice (android.view.InputDevice)6 IOException (java.io.IOException)5 KeyStoreException (java.security.KeyStoreException)5 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)5 CertificateException (java.security.cert.CertificateException)5 SharedPreferences (android.content.SharedPreferences)3 SubscriptionInfo (android.telephony.SubscriptionInfo)2 AccountWithDataSet (com.android.contacts.common.model.account.AccountWithDataSet)2 SimpleHogBug (edu.berkeley.cs.amplab.carat.android.storage.SimpleHogBug)2 Context (android.content.Context)1 ApplicationInfo (android.content.pm.ApplicationInfo)1 UserManager (android.os.UserManager)1 ListPreference (android.preference.ListPreference)1 Settings (android.provider.Settings)1 TelephonyManager (android.telephony.TelephonyManager)1