| /* |
| * Copyright (C) 2014 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.inputmethod; |
| |
| import android.content.ActivityNotFoundException; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.preference.Preference; |
| import android.text.TextUtils; |
| import android.view.View; |
| import android.view.View.OnClickListener; |
| import android.view.textservice.SpellCheckerInfo; |
| import android.widget.RadioButton; |
| import android.widget.Toast; |
| |
| import com.android.settings.R; |
| import com.android.settings.Utils; |
| |
| /** |
| * Spell checker service preference. |
| * |
| * This preference represents a spell checker service. It is used for two purposes. 1) A radio |
| * button on the left side is used to choose the current spell checker service. 2) A settings |
| * icon on the right side is used to invoke the setting activity of the spell checker service. |
| */ |
| class SpellCheckerPreference extends Preference implements OnClickListener { |
| interface OnRadioButtonPreferenceListener { |
| /** |
| * Called when this preference needs to be saved its state. |
| * |
| * Note that this preference is non-persistent and needs explicitly to be saved its state. |
| * Because changing one IME state may change other IMEs' state, this is a place to update |
| * other IMEs' state as well. |
| * |
| * @param pref This preference. |
| */ |
| public void onRadioButtonClicked(SpellCheckerPreference pref); |
| } |
| |
| private final SpellCheckerInfo mSci; |
| private final OnRadioButtonPreferenceListener mOnRadioButtonListener; |
| |
| private RadioButton mRadioButton; |
| private View mPrefLeftButton; |
| private View mSettingsButton; |
| private boolean mSelected; |
| |
| public SpellCheckerPreference(final Context context, final SpellCheckerInfo sci, |
| final OnRadioButtonPreferenceListener onRadioButtonListener) { |
| super(context, null, 0); |
| setPersistent(false); |
| setLayoutResource(R.layout.preference_spellchecker); |
| setWidgetLayoutResource(R.layout.preference_spellchecker_widget); |
| mSci = sci; |
| mOnRadioButtonListener = onRadioButtonListener; |
| setKey(sci.getId()); |
| setTitle(sci.loadLabel(context.getPackageManager())); |
| final String settingsActivity = mSci.getSettingsActivity(); |
| if (TextUtils.isEmpty(settingsActivity)) { |
| setIntent(null); |
| } else { |
| final Intent intent = new Intent(Intent.ACTION_MAIN); |
| intent.setClassName(mSci.getPackageName(), settingsActivity); |
| setIntent(intent); |
| } |
| } |
| |
| @Override |
| protected void onBindView(View view) { |
| super.onBindView(view); |
| mRadioButton = (RadioButton)view.findViewById(R.id.pref_radio); |
| mPrefLeftButton = view.findViewById(R.id.pref_left_button); |
| mPrefLeftButton.setOnClickListener(this); |
| mSettingsButton = view.findViewById(R.id.pref_right_button); |
| mSettingsButton.setOnClickListener(this); |
| updateSelectedState(mSelected); |
| } |
| |
| @Override |
| public void onClick(final View v) { |
| if (v == mPrefLeftButton) { |
| mOnRadioButtonListener.onRadioButtonClicked(this); |
| return; |
| } |
| if (v == mSettingsButton) { |
| onSettingsButtonClicked(); |
| return; |
| } |
| } |
| |
| private void onSettingsButtonClicked() { |
| final Context context = getContext(); |
| try { |
| final Intent intent = getIntent(); |
| if (intent != null) { |
| // Invoke a settings activity of an spell checker. |
| context.startActivity(intent); |
| } |
| } catch (final ActivityNotFoundException e) { |
| final String message = context.getString(R.string.failed_to_open_app_settings_toast, |
| mSci.loadLabel(context.getPackageManager())); |
| Toast.makeText(context, message, Toast.LENGTH_LONG).show(); |
| } |
| } |
| |
| public SpellCheckerInfo getSpellCheckerInfo() { |
| return mSci; |
| } |
| |
| public void setSelected(final boolean selected) { |
| mSelected = selected; |
| updateSelectedState(selected); |
| } |
| |
| private void updateSelectedState(final boolean selected) { |
| if (mRadioButton != null) { |
| mRadioButton.setChecked(selected); |
| enableSettingsButton(isEnabled() && selected); |
| } |
| } |
| |
| private void enableSettingsButton(final boolean enabled) { |
| if (mSettingsButton == null) { |
| return; |
| } |
| if (getIntent() == null) { |
| mSettingsButton.setVisibility(View.GONE); |
| } else { |
| mSettingsButton.setEnabled(enabled); |
| mSettingsButton.setClickable(enabled); |
| mSettingsButton.setFocusable(enabled); |
| if (!enabled) { |
| mSettingsButton.setAlpha(Utils.DISABLED_ALPHA); |
| } |
| } |
| } |
| } |