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

Commit 456229cc authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Fix how Home Activities are refreshed" into lmp-dev

parents 1e9405b5 b0a464fd
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -1824,19 +1824,5 @@
            </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>
+35 −9
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RadioButton;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Index;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;

@@ -61,14 +62,23 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl

    public static final String HOME_SHOW_NOTICE = "show";

    PreferenceGroup mPrefGroup;
    private class HomePackageReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            buildHomeActivitiesList();
            Index.getInstance(context).updateFromClassNameResource(
                    HomeSettings.class.getName(), true, true);
        }
    }

    PackageManager mPm;
    ComponentName[] mHomeComponentSet;
    ArrayList<HomeAppPreference> mPrefs;
    HomeAppPreference mCurrentHome = null;
    final IntentFilter mHomeFilter;
    boolean mShowNotice;
    private PreferenceGroup mPrefGroup;
    private PackageManager mPm;
    private ComponentName[] mHomeComponentSet;
    private ArrayList<HomeAppPreference> mPrefs;
    private HomeAppPreference mCurrentHome = null;
    private final IntentFilter mHomeFilter;
    private boolean mShowNotice;
    private HomePackageReceiver mHomePackageReceiver = new HomePackageReceiver();

    public HomeSettings() {
        mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);
@@ -151,7 +161,7 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl
        }
    }

    void buildHomeActivitiesList() {
    private void buildHomeActivitiesList() {
        ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
        ComponentName currentDefaultHome  = mPm.getHomeActivities(homeActivities);

@@ -207,10 +217,26 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl
    @Override
    public void onResume() {
        super.onResume();

        final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        filter.addCategory(Intent.CATEGORY_HOME);
        filter.addCategory(Intent.CATEGORY_LAUNCHER);
        filter.addDataScheme("package");
        getActivity().registerReceiver(mHomePackageReceiver, filter);

        buildHomeActivitiesList();
    }

    class HomeAppPreference extends Preference {
    @Override
    public void onPause() {
        super.onPause();
        getActivity().unregisterReceiver(mHomePackageReceiver);
    }

    private class HomeAppPreference extends Preference {
        ComponentName activityName;
        int index;
        HomeSettings fragment;
+13 −17
Original line number Diff line number Diff line
@@ -304,7 +304,7 @@ public class SettingsActivity extends Activity

                if (mBatteryPresent != batteryPresent) {
                    mBatteryPresent = batteryPresent;
                    invalidateCategories();
                    invalidateCategories(true);
                }
            }
        }
@@ -334,15 +334,16 @@ public class SettingsActivity extends Activity

    // Categories
    private ArrayList<DashboardCategory> mCategories = new ArrayList<DashboardCategory>();
    private boolean mNeedToRebuildCategories;

    private static final String MSG_DATA_FORCE_REFRESH = "msg_data_force_refresh";
    private static final int MSG_BUILD_CATEGORIES = 1;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_BUILD_CATEGORIES: {
                    if(mNeedToRebuildCategories) {
                    final boolean forceRefresh = msg.getData().getBoolean(MSG_DATA_FORCE_REFRESH);
                    if (forceRefresh) {
                        buildDashboardCategories(mCategories);
                    }
                } break;
@@ -357,10 +358,9 @@ public class SettingsActivity extends Activity
        return mSwitchBar;
    }

    public List<DashboardCategory> getDashboardCategories() {
        if (mNeedToRebuildCategories || mCategories.size() == 0) {
    public List<DashboardCategory> getDashboardCategories(boolean forceRefresh) {
        if (forceRefresh || mCategories.size() == 0) {
            buildDashboardCategories(mCategories);
            mNeedToRebuildCategories = false;
        }
        return mCategories;
    }
@@ -389,9 +389,11 @@ public class SettingsActivity extends Activity
        return false;
    }

    private void invalidateCategories() {
    private void invalidateCategories(boolean forceRefresh) {
        if (!mHandler.hasMessages(MSG_BUILD_CATEGORIES)) {
            mHandler.sendEmptyMessage(MSG_BUILD_CATEGORIES);
            Message msg = new Message();
            msg.what = MSG_BUILD_CATEGORIES;
            msg.getData().putBoolean(MSG_DATA_FORCE_REFRESH, forceRefresh);
        }
    }

@@ -712,15 +714,13 @@ public class SettingsActivity extends Activity
        final int newHomeActivityCount = getHomeActivitiesCount();
        if (newHomeActivityCount != mHomeActivitiesCount) {
            mHomeActivitiesCount = newHomeActivityCount;
            setNeedToRebuildCategories(true);
            invalidateCategories();
            invalidateCategories(true);
        }

        mDevelopmentPreferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                setNeedToRebuildCategories(true);
                invalidateCategories();
                invalidateCategories(true);
            }
        };
        mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
@@ -740,7 +740,6 @@ public class SettingsActivity extends Activity
        super.onPause();

        unregisterReceiver(mBatteryInfoReceiver);

        mDynamicIndexableContentMonitor.unregister();
    }

@@ -899,10 +898,6 @@ public class SettingsActivity extends Activity
        return f;
    }

    public void setNeedToRebuildCategories(boolean need) {
        mNeedToRebuildCategories = need;
    }

    /**
     * Called when the activity needs its list of categories/tiles built.
     *
@@ -1167,6 +1162,7 @@ public class SettingsActivity extends Activity
        }

        try {
            mHomeActivitiesCount = getHomeActivitiesCount();
            if (mHomeActivitiesCount < 2) {
                // When there's only one available home app, omit this settings
                // category entirely at the top level UI.  If the user just
+35 −10
Original line number Diff line number Diff line
@@ -17,7 +17,10 @@
package com.android.settings.dashboard;

import android.app.Fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
@@ -53,12 +56,41 @@ public class DashboardSummary extends Fragment {
        }
    };

    private class HomePackageReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            rebuildUI(context);
        }
    }
    private HomePackageReceiver mHomePackageReceiver = new HomePackageReceiver();

    @Override
    public void onResume() {
        super.onResume();

        sendRebuildUI();

        final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        filter.addCategory(Intent.CATEGORY_HOME);
        filter.addCategory(Intent.CATEGORY_LAUNCHER);
        filter.addDataScheme("package");
        getActivity().registerReceiver(mHomePackageReceiver, filter);
    }

    @Override
    public void onPause() {
        super.onPause();

        getActivity().unregisterReceiver(mHomePackageReceiver);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final Context context = getActivity();

        mLayoutInflater = inflater;

        final View rootView = inflater.inflate(R.layout.dashboard, container, false);
@@ -79,7 +111,7 @@ public class DashboardSummary extends Fragment {
        mDashboard.removeAllViews();

        List<DashboardCategory> categories =
                ((SettingsActivity) context).getDashboardCategories();
                ((SettingsActivity) context).getDashboardCategories(true);

        final int count = categories.size();

@@ -115,13 +147,6 @@ public class DashboardSummary extends Fragment {
        Log.d(LOG_TAG, "rebuildUI took: " + delta + " ms");
    }

    @Override
    public void onResume() {
        super.onResume();

        sendRebuildUI();
    }

    private void updateTileView(Context context, Resources res, DashboardTile tile,
            ImageView tileIcon, TextView tileTextView, TextView statusTextView) {

+0 −36
Original line number Diff line number Diff line
/*
 * 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.search;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.android.settings.HomeSettings;

import java.util.Set;

/**
 * A BroadcastReceiver for detecting Home Launchers
 */
public class HomePackageReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Index.getInstance(context).updateFromClassNameResource(
                HomeSettings.class.getName(), true, true);
    }
}