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

This commit is contained in:
Fabrice Di Meglio
2014-07-24 01:25:38 +00:00
committed by Android (Google) Code Review
5 changed files with 83 additions and 86 deletions

View File

@@ -1824,19 +1824,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>

View File

@@ -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;

View File

@@ -304,7 +304,7 @@ public class SettingsActivity extends Activity
if (mBatteryPresent != batteryPresent) { if (mBatteryPresent != batteryPresent) {
mBatteryPresent = batteryPresent; mBatteryPresent = batteryPresent;
invalidateCategories(); invalidateCategories(true);
} }
} }
} }
@@ -334,15 +334,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;
@@ -357,10 +358,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;
} }
@@ -389,9 +389,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);
} }
} }
@@ -712,15 +714,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(
@@ -740,7 +740,6 @@ public class SettingsActivity extends Activity
super.onPause(); super.onPause();
unregisterReceiver(mBatteryInfoReceiver); unregisterReceiver(mBatteryInfoReceiver);
mDynamicIndexableContentMonitor.unregister(); mDynamicIndexableContentMonitor.unregister();
} }
@@ -899,10 +898,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.
* *
@@ -1167,6 +1162,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

View File

@@ -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) {

View File

@@ -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);
}
}