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

Commit d73045db authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Add Home / Launcher apps indexing

- add a BaseSearchIndexProvider to HomeSettings
- use a BroadcastReceiver for tracking add or remove of
Home / Launcher apps
- add "launcher" synonym for "home" too

- also code cleaning for DynamicIndexableContentMonitor

See bug: #16484927 Add "launcher" as a synonym for "home" in settings search

Change-Id: I819f4e5f7bd5e9a7882609206b2733ea1912fc69
parent f0b952d0
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1832,5 +1832,19 @@
            </intent-filter>
        </provider>

        <receiver android:name=".search.HomePackageReceiver"
                  android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_CHANGED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.LAUNCHER" />

                <data android:scheme="package"/>
            </intent-filter>
        </receiver>

    </application>
</manifest>
+1 −0
Original line number Diff line number Diff line
@@ -5434,6 +5434,7 @@
    <string name="keywords_wifi">wifi wi-fi network connection</string>
    <string name="keywords_more_default_sms_app">text message</string>
    <string name="keywords_more_mobile_networks">cellular cell carrier wireless</string>
    <string name="keywords_home">launcher</string>
    <string name="keywords_display">screen touchscreen</string>
    <string name="keywords_display_brightness_level">dim screen touchscreen</string>
    <string name="keywords_display_auto_brightness">dim screen touchscreen</string>
+64 −1
Original line number Diff line number Diff line
@@ -17,17 +17,21 @@
package com.android.settings;

import java.util.ArrayList;
import java.util.List;

import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
@@ -37,13 +41,17 @@ import android.os.Bundle;
import android.os.Handler;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RadioButton;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;

public class HomeSettings extends SettingsPreferenceFragment {
public class HomeSettings extends SettingsPreferenceFragment implements Indexable {
    static final String TAG = "HomeSettings";

    static final int REQUESTING_UNINSTALL = 10;
@@ -289,4 +297,59 @@ public class HomeSettings extends SettingsPreferenceFragment {
            }
        }
    }

    /**
     * For search
     */
    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
        new BaseSearchIndexProvider() {
            @Override
            public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();

                final PackageManager pm = context.getPackageManager();
                final ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
                pm.getHomeActivities(homeActivities);

                final SharedPreferences sp = context.getSharedPreferences(
                        HomeSettings.HOME_PREFS, Context.MODE_PRIVATE);
                final boolean doShowHome = sp.getBoolean(HomeSettings.HOME_PREFS_DO_SHOW, false);

                // We index Home Launchers only if there are more than one or if we are showing the
                // Home tile into the Dashboard
                if (homeActivities.size() > 1 || doShowHome) {
                    final Resources res = context.getResources();

                    // Add fragment title
                    SearchIndexableRaw data = new SearchIndexableRaw(context);
                    data.title = res.getString(R.string.home_settings);
                    data.screenTitle = res.getString(R.string.home_settings);
                    data.keywords = res.getString(R.string.keywords_home);
                    result.add(data);

                    for (int i = 0; i < homeActivities.size(); i++) {
                        final ResolveInfo resolveInfo = homeActivities.get(i);
                        final ActivityInfo activityInfo = resolveInfo.activityInfo;

                        CharSequence name;
                        try {
                            name = activityInfo.loadLabel(pm);
                            if (TextUtils.isEmpty(name)) {
                                continue;
                            }
                        } catch (Exception e) {
                            Log.v(TAG, "Problem dealing with Home " + activityInfo.name, e);
                            continue;
                        }

                        data = new SearchIndexableRaw(context);
                        data.title = name.toString();
                        data.screenTitle = res.getString(R.string.home_settings);
                        result.add(data);
                    }
                }

                return result;
            }
        };
}
+0 −1
Original line number Diff line number Diff line
@@ -294,7 +294,6 @@ public class SettingsActivity extends Activity

    private boolean mBatteryPresent = true;
    private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
+11 −13
Original line number Diff line number Diff line
@@ -78,10 +78,8 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
            new UserDictionaryContentObserver(mHandler);

    private Context mContext;

    private boolean mHasFeturePrinting;

    private boolean mHasFetureIme;
    private boolean mHasFeaturePrinting;
    private boolean mHasFeatureIme;

    private static Intent getAccessibilityServiceIntent(String packageName) {
        final Intent intent = new Intent(AccessibilityService.SERVICE_INTERFACE);
@@ -104,9 +102,9 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
    public void register(Context context) {
        mContext = context;

        mHasFeturePrinting = mContext.getPackageManager().hasSystemFeature(
        mHasFeaturePrinting = mContext.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_PRINTING);
        mHasFetureIme = mContext.getPackageManager().hasSystemFeature(
        mHasFeatureIme = mContext.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_INPUT_METHODS);

        // Cache accessibility service packages to know when they go away.
@@ -124,7 +122,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
            mAccessibilityServices.add(resolveInfo.serviceInfo.packageName);
        }

        if (mHasFeturePrinting) {
        if (mHasFeaturePrinting) {
            // Cache print service packages to know when they go away.
            PrintManager printManager = (PrintManager)
                    mContext.getSystemService(Context.PRINT_SERVICE);
@@ -141,7 +139,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
        }

        // Cache IME service packages to know when they go away.
        if (mHasFetureIme) {
        if (mHasFeatureIme) {
            InputMethodManager imeManager = (InputMethodManager)
                    mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
            List<InputMethodInfo> inputMethods = imeManager.getInputMethodList();
@@ -174,7 +172,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
                Context.INPUT_SERVICE);
        inputManager.unregisterInputDeviceListener(this);

        if (mHasFetureIme) {
        if (mHasFeatureIme) {
            mContext.getContentResolver().unregisterContentObserver(
                    mUserDictionaryContentObserver);
        }
@@ -242,7 +240,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
            }
        }

        if (mHasFeturePrinting) {
        if (mHasFeaturePrinting) {
            if (!mPrintServices.contains(packageName)) {
                final Intent intent = getPrintServiceIntent(packageName);
                if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -253,7 +251,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
            }
        }

        if (mHasFetureIme) {
        if (mHasFeatureIme) {
            if (!mImeServices.contains(packageName)) {
                Intent intent = getIMEServiceIntent(packageName);
                if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -273,7 +271,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
                    AccessibilitySettings.class.getName(), true, true);
        }

        if (mHasFeturePrinting) {
        if (mHasFeaturePrinting) {
            final int printIndex = mPrintServices.indexOf(packageName);
            if (printIndex >= 0) {
                mPrintServices.remove(printIndex);
@@ -282,7 +280,7 @@ public final class DynamicIndexableContentMonitor extends PackageMonitor impleme
            }
        }

        if (mHasFetureIme) {
        if (mHasFeatureIme) {
            final int imeIndex = mImeServices.indexOf(packageName);
            if (imeIndex >= 0) {
                mImeServices.remove(imeIndex);
Loading