Fix how Home Activities are refreshed
- remove that HomePackageReceiver from the AndroidManifest that could force Settings to run - use a HomePackageReceiver into HomeSettings and DashboardSummary - fix also the BatteryInfoReceiver for refreshing the Dashboard Change-Id: Id3891529fc176e7e4c450f2ce723f8ac2af66c58
This commit is contained in:
@@ -1832,19 +1832,5 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</provider>
|
</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>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@@ -48,6 +48,7 @@ import android.view.View.OnClickListener;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.RadioButton;
|
import android.widget.RadioButton;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
import com.android.settings.search.Index;
|
||||||
import com.android.settings.search.Indexable;
|
import com.android.settings.search.Indexable;
|
||||||
import com.android.settings.search.SearchIndexableRaw;
|
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";
|
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;
|
private PreferenceGroup mPrefGroup;
|
||||||
ComponentName[] mHomeComponentSet;
|
private PackageManager mPm;
|
||||||
ArrayList<HomeAppPreference> mPrefs;
|
private ComponentName[] mHomeComponentSet;
|
||||||
HomeAppPreference mCurrentHome = null;
|
private ArrayList<HomeAppPreference> mPrefs;
|
||||||
final IntentFilter mHomeFilter;
|
private HomeAppPreference mCurrentHome = null;
|
||||||
boolean mShowNotice;
|
private final IntentFilter mHomeFilter;
|
||||||
|
private boolean mShowNotice;
|
||||||
|
private HomePackageReceiver mHomePackageReceiver = new HomePackageReceiver();
|
||||||
|
|
||||||
public HomeSettings() {
|
public HomeSettings() {
|
||||||
mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);
|
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>();
|
ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
|
||||||
ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
|
ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
|
||||||
|
|
||||||
@@ -207,10 +217,26 @@ public class HomeSettings extends SettingsPreferenceFragment implements Indexabl
|
|||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.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();
|
buildHomeActivitiesList();
|
||||||
}
|
}
|
||||||
|
|
||||||
class HomeAppPreference extends Preference {
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
getActivity().unregisterReceiver(mHomePackageReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class HomeAppPreference extends Preference {
|
||||||
ComponentName activityName;
|
ComponentName activityName;
|
||||||
int index;
|
int index;
|
||||||
HomeSettings fragment;
|
HomeSettings fragment;
|
||||||
|
@@ -303,7 +303,7 @@ public class SettingsActivity extends Activity
|
|||||||
|
|
||||||
if (mBatteryPresent != batteryPresent) {
|
if (mBatteryPresent != batteryPresent) {
|
||||||
mBatteryPresent = batteryPresent;
|
mBatteryPresent = batteryPresent;
|
||||||
invalidateCategories();
|
invalidateCategories(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -333,15 +333,16 @@ public class SettingsActivity extends Activity
|
|||||||
|
|
||||||
// Categories
|
// Categories
|
||||||
private ArrayList<DashboardCategory> mCategories = new ArrayList<DashboardCategory>();
|
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 static final int MSG_BUILD_CATEGORIES = 1;
|
||||||
private Handler mHandler = new Handler() {
|
private Handler mHandler = new Handler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
case MSG_BUILD_CATEGORIES: {
|
case MSG_BUILD_CATEGORIES: {
|
||||||
if(mNeedToRebuildCategories) {
|
final boolean forceRefresh = msg.getData().getBoolean(MSG_DATA_FORCE_REFRESH);
|
||||||
|
if (forceRefresh) {
|
||||||
buildDashboardCategories(mCategories);
|
buildDashboardCategories(mCategories);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@@ -356,10 +357,9 @@ public class SettingsActivity extends Activity
|
|||||||
return mSwitchBar;
|
return mSwitchBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DashboardCategory> getDashboardCategories() {
|
public List<DashboardCategory> getDashboardCategories(boolean forceRefresh) {
|
||||||
if (mNeedToRebuildCategories || mCategories.size() == 0) {
|
if (forceRefresh || mCategories.size() == 0) {
|
||||||
buildDashboardCategories(mCategories);
|
buildDashboardCategories(mCategories);
|
||||||
mNeedToRebuildCategories = false;
|
|
||||||
}
|
}
|
||||||
return mCategories;
|
return mCategories;
|
||||||
}
|
}
|
||||||
@@ -388,9 +388,11 @@ public class SettingsActivity extends Activity
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void invalidateCategories() {
|
private void invalidateCategories(boolean forceRefresh) {
|
||||||
if (!mHandler.hasMessages(MSG_BUILD_CATEGORIES)) {
|
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();
|
final int newHomeActivityCount = getHomeActivitiesCount();
|
||||||
if (newHomeActivityCount != mHomeActivitiesCount) {
|
if (newHomeActivityCount != mHomeActivitiesCount) {
|
||||||
mHomeActivitiesCount = newHomeActivityCount;
|
mHomeActivitiesCount = newHomeActivityCount;
|
||||||
setNeedToRebuildCategories(true);
|
invalidateCategories(true);
|
||||||
invalidateCategories();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mDevelopmentPreferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
mDevelopmentPreferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
setNeedToRebuildCategories(true);
|
invalidateCategories(true);
|
||||||
invalidateCategories();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
|
mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
|
||||||
@@ -739,7 +739,6 @@ public class SettingsActivity extends Activity
|
|||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
unregisterReceiver(mBatteryInfoReceiver);
|
unregisterReceiver(mBatteryInfoReceiver);
|
||||||
|
|
||||||
mDynamicIndexableContentMonitor.unregister();
|
mDynamicIndexableContentMonitor.unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -898,10 +897,6 @@ public class SettingsActivity extends Activity
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNeedToRebuildCategories(boolean need) {
|
|
||||||
mNeedToRebuildCategories = need;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the activity needs its list of categories/tiles built.
|
* Called when the activity needs its list of categories/tiles built.
|
||||||
*
|
*
|
||||||
@@ -1166,6 +1161,7 @@ public class SettingsActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
mHomeActivitiesCount = getHomeActivitiesCount();
|
||||||
if (mHomeActivitiesCount < 2) {
|
if (mHomeActivitiesCount < 2) {
|
||||||
// When there's only one available home app, omit this settings
|
// When there's only one available home app, omit this settings
|
||||||
// category entirely at the top level UI. If the user just
|
// category entirely at the top level UI. If the user just
|
||||||
|
@@ -17,7 +17,10 @@
|
|||||||
package com.android.settings.dashboard;
|
package com.android.settings.dashboard;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
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
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
final Context context = getActivity();
|
|
||||||
|
|
||||||
mLayoutInflater = inflater;
|
mLayoutInflater = inflater;
|
||||||
|
|
||||||
final View rootView = inflater.inflate(R.layout.dashboard, container, false);
|
final View rootView = inflater.inflate(R.layout.dashboard, container, false);
|
||||||
@@ -79,7 +111,7 @@ public class DashboardSummary extends Fragment {
|
|||||||
mDashboard.removeAllViews();
|
mDashboard.removeAllViews();
|
||||||
|
|
||||||
List<DashboardCategory> categories =
|
List<DashboardCategory> categories =
|
||||||
((SettingsActivity) context).getDashboardCategories();
|
((SettingsActivity) context).getDashboardCategories(true);
|
||||||
|
|
||||||
final int count = categories.size();
|
final int count = categories.size();
|
||||||
|
|
||||||
@@ -115,13 +147,6 @@ public class DashboardSummary extends Fragment {
|
|||||||
Log.d(LOG_TAG, "rebuildUI took: " + delta + " ms");
|
Log.d(LOG_TAG, "rebuildUI took: " + delta + " ms");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
sendRebuildUI();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateTileView(Context context, Resources res, DashboardTile tile,
|
private void updateTileView(Context context, Resources res, DashboardTile tile,
|
||||||
ImageView tileIcon, TextView tileTextView, TextView statusTextView) {
|
ImageView tileIcon, TextView tileTextView, TextView statusTextView) {
|
||||||
|
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user