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

Commit 0166269d authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Move IME related seach landing pages to its fragments"

parents 73038da3 e776821a
Loading
Loading
Loading
Loading
+54 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -33,9 +34,14 @@ import android.os.Bundle;
import android.support.v7.preference.PreferenceScreen;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;

import java.text.Collator;
import java.util.ArrayList;
@@ -44,7 +50,7 @@ import java.util.Comparator;
import java.util.List;

public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFragment
        implements InputMethodPreference.OnSavePreferenceListener {
        implements InputMethodPreference.OnSavePreferenceListener, Indexable {

    private final ArrayList<InputMethodPreference> mInputMethodPreferenceList = new ArrayList<>();
    private InputMethodSettingValuesWrapper mInputMethodSettingValues;
@@ -169,4 +175,51 @@ public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFr
            pref.updatePreferenceViews();
        }
    }

    private static List<InputMethodSubtype> getAllSubtypesOf(final InputMethodInfo imi) {
        final int subtypeCount = imi.getSubtypeCount();
        final List<InputMethodSubtype> allSubtypes = new ArrayList<>(subtypeCount);
        for (int index = 0; index < subtypeCount; index++) {
            allSubtypes.add(imi.getSubtypeAt(index));
        }
        return allSubtypes;
    }

    static List<SearchIndexableRaw> buildSearchIndexOfInputMethods(final Context context,
            final List<InputMethodInfo> inputMethods, final String screenTitle) {
        final List<SearchIndexableRaw> indexes = new ArrayList<>();
        final InputMethodManager imm = (InputMethodManager) context.getSystemService(
                Context.INPUT_METHOD_SERVICE);
        for (int i = 0; i < inputMethods.size(); i++) {
            final InputMethodInfo imi = inputMethods.get(i);
            final ServiceInfo serviceInfo = imi.getServiceInfo();
            final SearchIndexableRaw index = new SearchIndexableRaw(context);
            index.key = new ComponentName(serviceInfo.packageName, serviceInfo.name)
                    .flattenToString();
            index.title = imi.loadLabel(context.getPackageManager()).toString();
            index.summaryOn = index.summaryOff = InputMethodAndSubtypeUtil
                    .getSubtypeLocaleNameListAsSentence(getAllSubtypesOf(imi), context, imi);
            index.screenTitle = screenTitle;
            indexes.add(index);
        }
        return indexes;
    }

    public static Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider() {
        @Override
        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
            final InputMethodManager imm = context.getSystemService(InputMethodManager.class);
            final List<InputMethodInfo> enabledInputMethods = imm.getEnabledInputMethodList();
            final List<InputMethodInfo> disabledInputMethods = new ArrayList<>();
            for (final InputMethodInfo imi : imm.getInputMethodList()) {
                if (!enabledInputMethods.contains(imi)) {
                    disabledInputMethods.add(imi);
                }
            }
            final String screenTitle = context.getString(
                    R.string.available_virtual_keyboard_category);
            return buildSearchIndexOfInputMethods(context, disabledInputMethods, screenTitle);
        }
    };
}
+0 −36
Original line number Diff line number Diff line
@@ -17,16 +17,11 @@
package com.android.settings.inputmethod;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ServiceInfo;
import android.hardware.input.InputDeviceIdentifier;
import android.speech.tts.TtsEngines;
import android.support.v7.preference.Preference;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -212,37 +207,6 @@ public class InputMethodAndLanguageSettings extends DashboardFragment
            indexable.keywords = context.getString(R.string.keywords_keyboard_and_ime);
            indexables.add(indexable);

            InputMethodSettingValuesWrapper immValues = InputMethodSettingValuesWrapper
                    .getInstance(context);
            immValues.refreshAllInputMethodAndSubtypes();

            InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(
                    Context.INPUT_METHOD_SERVICE);

            // TODO: Move to VirtualKeyboardFragment and AvailableVirtualKeyboardFragment.
            // All other IMEs.
            List<InputMethodInfo> inputMethods = immValues.getInputMethodList();
            final int inputMethodCount = (inputMethods == null ? 0 : inputMethods.size());
            for (int i = 0; i < inputMethodCount; ++i) {
                InputMethodInfo inputMethod = inputMethods.get(i);
                List<InputMethodSubtype> subtypes = inputMethodManager
                        .getEnabledInputMethodSubtypeList(inputMethod, true);
                String summary = InputMethodAndSubtypeUtil.getSubtypeLocaleNameListAsSentence(
                        subtypes, context, inputMethod);

                ServiceInfo serviceInfo = inputMethod.getServiceInfo();
                ComponentName componentName = new ComponentName(serviceInfo.packageName,
                        serviceInfo.name);

                indexable = new SearchIndexableRaw(context);
                indexable.key = componentName.flattenToString();
                indexable.title = inputMethod.loadLabel(context.getPackageManager()).toString();
                indexable.summaryOn = summary;
                indexable.summaryOff = summary;
                indexable.screenTitle = screenTitle;
                indexables.add(indexable);
            }

            if (!PhysicalKeyboardFragment.getPhysicalFullKeyboards().isEmpty()) {
                // Hard keyboard category.
                indexable = new SearchIndexableRaw(context);
+18 −1
Original line number Diff line number Diff line
@@ -26,10 +26,15 @@ import android.os.Bundle;
import android.support.v7.preference.Preference;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.Preconditions;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;

import java.text.Collator;
import java.util.ArrayList;
@@ -37,7 +42,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public final class VirtualKeyboardFragment extends SettingsPreferenceFragment {
public final class VirtualKeyboardFragment extends SettingsPreferenceFragment implements Indexable {

    private static final String ADD_VIRTUAL_KEYBOARD_SCREEN = "add_virtual_keyboard_screen";
    private static final Drawable NO_ICON = new ColorDrawable(Color.TRANSPARENT);
@@ -117,4 +122,16 @@ public final class VirtualKeyboardFragment extends SettingsPreferenceFragment {
        mAddVirtualKeyboardScreen.setOrder(N);
        getPreferenceScreen().addPreference(mAddVirtualKeyboardScreen);
    }

    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider() {
        @Override
        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
            final InputMethodManager imm = context.getSystemService(InputMethodManager.class);
            final List<InputMethodInfo> enabledInputMethods = imm.getEnabledInputMethodList();
            final String screenTitle = context.getString(R.string.virtual_keyboard_category);
            return AvailableVirtualKeyboardFragment
                    .buildSearchIndexOfInputMethods(context, enabledInputMethods, screenTitle);
        }
    };
}
+10 −4
Original line number Diff line number Diff line
@@ -47,8 +47,10 @@ import android.view.inputmethod.InputMethodManager;

import com.android.internal.content.PackageMonitor;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.inputmethod.VirtualKeyboardFragment;
import com.android.settings.print.PrintSettingsFragment;

import java.util.ArrayList;
@@ -418,7 +420,11 @@ public final class DynamicIndexableContentMonitor implements
            mPackageManager = context.getPackageManager();
            mContentResolver = context.getContentResolver();
            mInputMethodServices.clear();
            // Build index of {@link UserDictionary}.
            buildIndex(InputMethodAndLanguageSettings.class, true /* rebuild */);
            // Build index of IMEs.
            buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
            buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);

            // Cache IME service packages to know when they go away.
            final InputMethodManager inputMethodManager = (InputMethodManager) context
@@ -451,15 +457,15 @@ public final class DynamicIndexableContentMonitor implements
                    .queryIntentServices(intent, 0 /* flags */);
            if (services == null || services.isEmpty()) return;
            mInputMethodServices.add(packageName);
            // TODO: Fix landing page to VirtualKeyboardFragment.
            buildIndex(InputMethodAndLanguageSettings.class, false /* rebuild */);
            buildIndex(VirtualKeyboardFragment.class, false /* rebuild */);
            buildIndex(AvailableVirtualKeyboardFragment.class, false /* rebuild */);
        }

        synchronized void onPackageUnavailable(String packageName) {
            if (mIndex == null) return;
            if (!mInputMethodServices.remove(packageName)) return;
            // TODO: Fix landing page to AvailableVirtualKeyboardFragment.
            buildIndex(InputMethodAndLanguageSettings.class, true /* rebuild */);
            buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
            buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
        }

        @Override
+5 −0
Original line number Diff line number Diff line
@@ -54,8 +54,10 @@ import com.android.settings.gestures.DoubleTwistGestureSettings;
import com.android.settings.gestures.GestureSettings;
import com.android.settings.gestures.PickupGestureSettings;
import com.android.settings.gestures.SwipeToNotificationSettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
import com.android.settings.inputmethod.VirtualKeyboardFragment;
import com.android.settings.location.LocationSettings;
import com.android.settings.location.ScanningSettings;
import com.android.settings.network.NetworkDashboardFragment;
@@ -142,6 +144,9 @@ public final class SearchIndexableResources {
                R.drawable.ic_settings_accounts);
        addIndex(InputMethodAndLanguageSettings.class,
                NO_DATA_RES_ID, R.drawable.ic_settings_language);
        addIndex(VirtualKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
        addIndex(AvailableVirtualKeyboardFragment.class,
                NO_DATA_RES_ID, R.drawable.ic_settings_language);
        addIndex(PhysicalKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
        addIndex(PrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup);
        addIndex(DateTimeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_date_time);
Loading