Caching external icons in LauncherModel
- Global search icon and voice search icon are loaded instantly on device rotations Change-Id: I91380849d470b181e8eb5569410ab25067b4efaf
This commit is contained in:
@@ -259,6 +259,11 @@ public final class Launcher extends Activity
|
||||
private HashMap<View, AppWidgetProviderInfo> mWidgetsToAdvance =
|
||||
new HashMap<View, AppWidgetProviderInfo>();
|
||||
|
||||
// External icons saved in case of resource changes, orientation, etc.
|
||||
private static Drawable sGlobalSearchIcon;
|
||||
private static Drawable sVoiceSearchIcon;
|
||||
private static Drawable sAppMarketIcon;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -374,6 +379,19 @@ public final class Launcher extends Activity
|
||||
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
|
||||
registerReceiver(mCloseSystemDialogsReceiver, filter);
|
||||
|
||||
// If we have a saved version of these external icons, we load them up immediately
|
||||
if (LauncherApplication.isScreenXLarge()) {
|
||||
if (sGlobalSearchIcon != null) {
|
||||
updateGlobalSearchIcon(sGlobalSearchIcon);
|
||||
}
|
||||
if (sVoiceSearchIcon != null) {
|
||||
updateVoiceSearchIcon(sVoiceSearchIcon);
|
||||
}
|
||||
if (sAppMarketIcon != null) {
|
||||
updateAppMarketIcon(sAppMarketIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkForLocaleChange() {
|
||||
@@ -2880,7 +2898,8 @@ public final class Launcher extends Activity
|
||||
showWorkspace(true, layout);
|
||||
}
|
||||
|
||||
private void updateButtonWithIconFromExternalActivity(
|
||||
// if successful in getting icon, return it; otherwise, set button to use default drawable
|
||||
private Drawable updateButtonWithIconFromExternalActivity(
|
||||
int buttonId, ComponentName activityName, int fallbackDrawableId) {
|
||||
ImageView button = (ImageView) findViewById(buttonId);
|
||||
Drawable toolbarIcon = null;
|
||||
@@ -2902,18 +2921,25 @@ public final class Launcher extends Activity
|
||||
// If we were unable to find the icon via the meta-data, use a generic one
|
||||
if (toolbarIcon == null) {
|
||||
button.setImageResource(fallbackDrawableId);
|
||||
return null;
|
||||
} else {
|
||||
button.setImageDrawable(toolbarIcon);
|
||||
return toolbarIcon;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateButtonWithDrawable(int buttonId, Drawable d) {
|
||||
ImageView button = (ImageView) findViewById(buttonId);
|
||||
button.setImageDrawable(d);
|
||||
}
|
||||
|
||||
private void updateGlobalSearchIcon() {
|
||||
if (LauncherApplication.isScreenXLarge()) {
|
||||
final SearchManager searchManager =
|
||||
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
|
||||
ComponentName activityName = searchManager.getGlobalSearchActivity();
|
||||
if (activityName != null) {
|
||||
updateButtonWithIconFromExternalActivity(
|
||||
sGlobalSearchIcon = updateButtonWithIconFromExternalActivity(
|
||||
R.id.search_button, activityName, R.drawable.search_button_generic);
|
||||
} else {
|
||||
findViewById(R.id.search_button).setVisibility(View.GONE);
|
||||
@@ -2921,12 +2947,16 @@ public final class Launcher extends Activity
|
||||
}
|
||||
}
|
||||
|
||||
private void updateGlobalSearchIcon(Drawable d) {
|
||||
updateButtonWithDrawable(R.id.search_button, d);
|
||||
}
|
||||
|
||||
private void updateVoiceSearchIcon() {
|
||||
if (LauncherApplication.isScreenXLarge()) {
|
||||
Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
|
||||
ComponentName activityName = intent.resolveActivity(getPackageManager());
|
||||
if (activityName != null) {
|
||||
updateButtonWithIconFromExternalActivity(
|
||||
sVoiceSearchIcon = updateButtonWithIconFromExternalActivity(
|
||||
R.id.voice_button, activityName, R.drawable.ic_voice_search);
|
||||
} else {
|
||||
findViewById(R.id.voice_button).setVisibility(View.GONE);
|
||||
@@ -2934,6 +2964,10 @@ public final class Launcher extends Activity
|
||||
}
|
||||
}
|
||||
|
||||
private void updateVoiceSearchIcon(Drawable d) {
|
||||
updateButtonWithDrawable(R.id.voice_button, d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the app market icon (shown when all apps is visible on x-large screens)
|
||||
*/
|
||||
@@ -2945,12 +2979,16 @@ public final class Launcher extends Activity
|
||||
ComponentName activityName = intent.resolveActivity(getPackageManager());
|
||||
if (activityName != null) {
|
||||
mAppMarketIntent = intent;
|
||||
updateButtonWithIconFromExternalActivity(
|
||||
sAppMarketIcon = updateButtonWithIconFromExternalActivity(
|
||||
R.id.market_button, activityName, R.drawable.app_market_generic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAppMarketIcon(Drawable d) {
|
||||
updateButtonWithDrawable(R.id.market_button, d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the shortcut creation dialog and launches, if necessary, the
|
||||
* appropriate activity.
|
||||
|
||||
Reference in New Issue
Block a user