| /* |
| * Copyright (C) 2018 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.settings.development.autofill; |
| |
| import android.content.Context; |
| import android.provider.Settings; |
| import android.text.InputType; |
| import android.util.AttributeSet; |
| import android.util.Log; |
| import android.view.View; |
| import android.widget.EditText; |
| |
| import com.android.settings.Utils; |
| import com.android.settingslib.CustomEditTextPreferenceCompat; |
| |
| /** |
| * Base class for Autofill integer properties that are backed by |
| * {@link android.provider.Settings.Global}. |
| */ |
| abstract class AbstractGlobalSettingsPreference extends CustomEditTextPreferenceCompat { |
| |
| private static final String TAG = "AbstractGlobalSettingsPreference"; |
| |
| private final String mKey; |
| private final int mDefaultValue; |
| |
| private final AutofillDeveloperSettingsObserver mObserver; |
| |
| protected AbstractGlobalSettingsPreference(Context context, AttributeSet attrs, |
| String key, int defaultValue) { |
| super(context, attrs); |
| |
| mKey = key; |
| mDefaultValue = defaultValue; |
| mObserver = new AutofillDeveloperSettingsObserver(context, () -> updateSummary()); |
| } |
| |
| @Override |
| public void onAttached() { |
| super.onAttached(); |
| |
| mObserver.register(); |
| updateSummary(); |
| } |
| |
| @Override |
| public void onDetached() { |
| mObserver.unregister(); |
| |
| super.onDetached(); |
| } |
| |
| private String getCurrentValue() { |
| final int value = Settings.Global.getInt(getContext().getContentResolver(), |
| mKey, mDefaultValue); |
| |
| return Integer.toString(value); |
| } |
| |
| private void updateSummary() { |
| setSummary(getCurrentValue()); |
| |
| } |
| |
| @Override |
| protected void onBindDialogView(View view) { |
| super.onBindDialogView(view); |
| |
| EditText editText = view.findViewById(android.R.id.edit); |
| if (editText != null) { |
| editText.setInputType(InputType.TYPE_CLASS_NUMBER); |
| editText.setText(getCurrentValue()); |
| Utils.setEditTextCursorPosition(editText); |
| } |
| } |
| |
| @Override |
| protected void onDialogClosed(boolean positiveResult) { |
| if (positiveResult) { |
| final String stringValue = getText(); |
| int newValue = mDefaultValue; |
| try { |
| newValue = Integer.parseInt(stringValue); |
| } catch (Exception e) { |
| Log.e(TAG, "Error converting '" + stringValue + "' to integer. Using " |
| + mDefaultValue + " instead"); |
| } |
| Settings.Global.putInt(getContext().getContentResolver(), mKey, newValue); |
| } |
| } |
| } |