diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 277a56e4e39..fac2d34975c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1832,19 +1832,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java
index 6d5883ca035..9177c73af68 100644
--- a/src/com/android/settings/HomeSettings.java
+++ b/src/com/android/settings/HomeSettings.java
@@ -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 mPrefs;
- HomeAppPreference mCurrentHome = null;
- final IntentFilter mHomeFilter;
- boolean mShowNotice;
+ private PreferenceGroup mPrefGroup;
+ private PackageManager mPm;
+ private ComponentName[] mHomeComponentSet;
+ private ArrayList 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 homeActivities = new ArrayList();
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;
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index df7e0060500..62609fcf5cc 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -303,7 +303,7 @@ public class SettingsActivity extends Activity
if (mBatteryPresent != batteryPresent) {
mBatteryPresent = batteryPresent;
- invalidateCategories();
+ invalidateCategories(true);
}
}
}
@@ -333,15 +333,16 @@ public class SettingsActivity extends Activity
// Categories
private ArrayList mCategories = new ArrayList();
- 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;
@@ -356,10 +357,9 @@ public class SettingsActivity extends Activity
return mSwitchBar;
}
- public List getDashboardCategories() {
- if (mNeedToRebuildCategories || mCategories.size() == 0) {
+ public List getDashboardCategories(boolean forceRefresh) {
+ if (forceRefresh || mCategories.size() == 0) {
buildDashboardCategories(mCategories);
- mNeedToRebuildCategories = false;
}
return mCategories;
}
@@ -388,9 +388,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);
}
}
@@ -711,15 +713,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(
@@ -739,7 +739,6 @@ public class SettingsActivity extends Activity
super.onPause();
unregisterReceiver(mBatteryInfoReceiver);
-
mDynamicIndexableContentMonitor.unregister();
}
@@ -898,10 +897,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.
*
@@ -1166,6 +1161,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
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index ed89d89f794..3e438fc0ac3 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -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 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) {
diff --git a/src/com/android/settings/search/HomePackageReceiver.java b/src/com/android/settings/search/HomePackageReceiver.java
deleted file mode 100644
index a24525273bb..00000000000
--- a/src/com/android/settings/search/HomePackageReceiver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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);
- }
-}