Merge "Fix how Home Activities are refreshed" into lmp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
456229ccdf
@@ -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>
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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) {
|
||||
|
||||
|
@@ -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