152 lines
5.3 KiB
Java
152 lines
5.3 KiB
Java
/*
|
|
* 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);
|
|
}
|
|
}
|
|
}
|
|
}
|