Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7bdf78d5 authored by satok's avatar satok Committed by Android (Google) Code Review
Browse files

Merge "Add a way to choose the current spell checker"

parents 1de7a331 ffc73120
Loading
Loading
Loading
Loading
+80 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 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.
-->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pref_all"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical">
    <LinearLayout
        android:id="@+id/pref_left_button"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:clickable="true"
        android:focusable="true"
        android:background="?android:attr/selectableItemBackground">
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dip"
            android:layout_marginRight="6dip"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="6dip"
            android:layout_weight="1">
            <TextView
                android:id="@+android:id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:ellipsize="marquee"
                android:fadingEdge="horizontal"/>
            <TextView
                android:id="@android:id/summary"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@android:id/title"
                android:layout_alignLeft="@android:id/title"
                android:visibility="gone"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textSize="13sp"
                android:textColor="?android:attr/textColorSecondary"
                android:maxLines="4" />
        </RelativeLayout>
    </LinearLayout>
    <View
        android:layout_width="2dip"
        android:layout_height="match_parent"
        android:layout_marginTop="5dip"
        android:layout_marginBottom="5dip"
        android:background="@android:drawable/divider_horizontal_dark" />
    <ImageView
        android:id="@+id/pref_right_button"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:paddingLeft="15dip"
        android:paddingRight="?android:attr/scrollbarSize"
        android:src="@drawable/ic_sysbar_quicksettings"
        android:contentDescription="@string/input_method_settings_button"
        android:layout_gravity="center"
        android:clickable="true"
        android:focusable="true"
        android:background="?android:attr/selectableItemBackground" />
</LinearLayout>
+125 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 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 com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;

import android.content.Intent;

import android.preference.Preference;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.textservice.SpellCheckerInfo;
import android.widget.ImageView;
import android.widget.TextView;

public class SingleSpellCheckerPreference extends Preference {
    private static final float DISABLED_ALPHA = 0.4f;

    private final SpellCheckerInfo mSpellCheckerInfo;

    private SettingsPreferenceFragment mFragment;
    private TextView mTitleText;
    private TextView mSummaryText;
    private View mPrefAll;
    private View mPrefLeftButton;
    private ImageView mSetingsButton;
    private Intent mSettingsIntent;
    private boolean mSelected;

    public SingleSpellCheckerPreference(SettingsPreferenceFragment fragment, Intent settingsIntent,
            SpellCheckerInfo sci) {
        super(fragment.getActivity(), null, 0);
        setLayoutResource(R.layout.preference_spellchecker);
        mSpellCheckerInfo = sci;
        mSelected = false;
    }

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        mPrefAll = view.findViewById(R.id.pref_all);
        mPrefLeftButton = view.findViewById(R.id.pref_left_button);
        mPrefLeftButton.setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View arg0) {
                        onLeftButtonClicked(arg0);
                    }
                });
        mSetingsButton = (ImageView)view.findViewById(R.id.pref_right_button);
        mTitleText = (TextView)view.findViewById(android.R.id.title);
        mSummaryText = (TextView)view.findViewById(android.R.id.summary);
        mSetingsButton.setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View arg0) {
                        onSettingsButtonClicked(arg0);
                    }
                });
        updateSelectedState(mSelected);
    }

    private void onLeftButtonClicked(View arg0) {
        final OnPreferenceClickListener listener = getOnPreferenceClickListener();
        if (listener != null) {
            listener.onPreferenceClick(this);
        }
    }

    public SpellCheckerInfo getSpellCheckerInfo() {
        return mSpellCheckerInfo;
    }

    public void updateSelectedState(boolean selected) {
        if (mPrefAll != null) {
            if (selected) {
                // TODO: Use a color defined by the design guideline.
                mPrefAll.setBackgroundColor(0x88006666);
            } else {
                mPrefAll.setBackgroundColor(0);
            }
            enableSettingsButton(selected);
        }
    }

    public void setSelected(boolean selected) {
        mSelected = selected;
    }

    protected void onSettingsButtonClicked(View arg0) {
        if (mFragment != null && mSettingsIntent != null) {
            mFragment.startActivity(mSettingsIntent);
        }
    }

    private void enableSettingsButton(boolean enabled) {
        if (mSetingsButton != null) {
            if (mSettingsIntent == null) {
                mSetingsButton.setVisibility(View.GONE);
            } else {
                mSetingsButton.setEnabled(enabled);
                mSetingsButton.setClickable(enabled);
                mSetingsButton.setFocusable(enabled);
                if (!enabled) {
                    mSetingsButton.setAlpha(DISABLED_ALPHA);
                }
            }
        }
    }
}
+25 −10
Original line number Diff line number Diff line
@@ -26,12 +26,16 @@ import android.preference.PreferenceScreen;
import android.view.textservice.SpellCheckerInfo;
import android.view.textservice.TextServicesManager;

import java.util.ArrayList;

public class SpellCheckersSettings extends SettingsPreferenceFragment
        implements Preference.OnPreferenceChangeListener {
        implements Preference.OnPreferenceClickListener {

    private SpellCheckerInfo mCurrentSci;
    private SpellCheckerInfo[] mEnabledScis;
    private TextServicesManager mTsm;
    private final ArrayList<SingleSpellCheckerPreference> mSpellCheckers =
            new ArrayList<SingleSpellCheckerPreference>();

    @Override
    public void onCreate(Bundle icicle) {
@@ -41,11 +45,6 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
        updateScreen();
    }

    @Override
    public boolean onPreferenceChange(Preference arg0, Object arg1) {
        return false;
    }

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
        return false;
@@ -78,12 +77,28 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
        if (mCurrentSci == null || mEnabledScis == null) {
            return;
        }
        // TODO: implement here
        mSpellCheckers.clear();
        for (int i = 0; i < mEnabledScis.length; ++i) {
            final SpellCheckerInfo sci = mEnabledScis[i];
            final PreferenceScreen scs = new PreferenceScreen(getActivity(), null);
            scs.setTitle(sci.getId());
            getPreferenceScreen().addPreference(scs);
            final SingleSpellCheckerPreference scPref = new SingleSpellCheckerPreference(
                    this, null, sci);
            mSpellCheckers.add(scPref);
            scPref.setTitle(sci.getId());
            scPref.setSelected(mCurrentSci != null && mCurrentSci.getId().equals(sci.getId()));
            getPreferenceScreen().addPreference(scPref);
        }
    }

    @Override
    public boolean onPreferenceClick(Preference arg0) {
        for (SingleSpellCheckerPreference scp : mSpellCheckers) {
            if (arg0.equals(scp)) {
                scp.setSelected(true);
                mTsm.setCurrentSpellChecker(scp.getSpellCheckerInfo());
            } else {
                scp.setSelected(false);
            }
        }
        return true;
    }
}