Reorganize spell checkers settings
Bug: 15976603 Bug: 16115751 Change-Id: I3b23d7f01d8d39da27215a5263b12304ac64db0f
This commit is contained in:
151
src/com/android/settings/inputmethod/SpellCheckerPreference.java
Normal file
151
src/com/android/settings/inputmethod/SpellCheckerPreference.java
Normal file
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user