Themes: Partial change: Use ArrayListExtra for broadcasting theme changes

Change-Id: I897cfbbe293b73f9e8f069f4b4cefa7c3ffb79ed
Themes: Add method to "apply all" a theme

Change-Id: Ic8feaeade6c52707e6b5b17921b1b577b94ec8cf
Themes: Fix ResourceNotFoundException when updating  applied theme

If the user has a theme applied and there is an update to that theme,
then the themed apps will crash. This is because the theme's APK path changes,
but the apps do not update their resources. Apps were not updating their resources
because updateConfiguration() determined that the config (which only has pkgName) hasn't changed.

The problem is fixed by first applying the default theme config and then re-applying the
updated theme.

SystemUI was crashing with a NPE while verifying this fix, so a NP check was added to SystemUI as well.

Change-Id: I00e32fc1535b4d279fcb37c35f868501ecc1dd19
Themes: Support applying components from multiple themes [1/2]

The current implementation assumes the components being passed
into the ThemeService belong to the same theme.  This patch uses
a Map instead of a List to pass in a mapping of components to
package names, allowing us to apply several components from
different themes.

Requesting a theme change now takes a Map<String, String> which
maps components to the theme package name they will be applied
from.
Example:
    Map<String, String> componentMap = new HashMap<String,String>();
    componentMap.add(ThemesColumns.MODIFIES_ICONS, "com.mytheme.blue");
    componentMap.add(ThemesColumns.MODIFIES_OVERLAYS, "com.mytheme.red");

    ThemeManager tm = (ThemeManager) contex.getSystemService(Context.THEME_SERVICE);
    tm.requestThemeChange(componentMap);

Change-Id: I13fa17eabecb824884fe522d5dc1822a4d7c55f4
Themes: Build icon cache when applying icons

The theme service will schedule building of the icon cache when
an icon pack is applied.  This will allow the icon cache to be
populated immediately after icons are applied rather than build
it up as icons are requested.

Change-Id: I453eda5f6298ff79e22827c622a0eddcab9c721d
Themes: Allow clearing the wallpaper and ls wallpaper

By providing an empty string for the MODS_LAUNCHER and
MODS_LOCKSCREEN components, the theme service will clear out any
existing wallpaper the user had set.  This provides the same
functionality as if the user was picking "No wallpaper" from the
picker.

Change-Id: I0c349ad4afa2bcef2c302105315709786510c0aa
Themes: setUserRequired(false) when updating audibles

This prevents the following exception
F/Environment(18007): Path requests must specify a user by using UserEnvironment
F/Environment(18007): java.lang.Throwable
F/Environment(18007):   at android.os.Environment.throwIfUserRequired(Environment.java:787)

Change-Id: Ic6ac7537079ed27912c40683c877e05992b708e9
Themes: Fix setting wallpaper from a legacy theme

Change-Id: I3bfc9ee24d2a3ee5c1bdb97f2c07427e6d723206
Themes: Only kill launchers if overlays or icons changed

There is no need to kill the launcher for every coponent changed.
The only ones that really concern us in regards to killing launchers
are MODIFIES_OVERLAYS and MODIFIES_ICONS

Change-Id: I840b8e2ecd4b52a33f352809c5d3d2c7e92ce85e
Themes: Update provider with components that were applied

There may be times when one or more components do not get applied
so we should remove them from the component map and then update
the provider after all changes have been made.

Change-Id: I75d2a674d84c6a0de3f0b613d1dfc50654c2d181
Themes: Load correct common resources

In order to support theming separate packages we need to make sure
we load that theme's common resources.  We were currently loading
the system wide theme's common resources which is incorrect for
package level theming.

Change-Id: Ie594458be9b6b3f4a25c56c9c5c9ba5bd8cf063a
Themes: Avoid NPE when setting text in TickerView

It is possible, with the right timing, to receive an NPE in TextSwitcher
when a notification comes in during recreation of the status bar because
of a theme change.

Change-Id: Ia35ad0346f232df905ecff69158b71f3bf61a163
Themes: Add helper methods for creating complete component maps

These methods can be used to apply a theme while replacing any
components not found in the theme with the defaults.

Default components come from the default theme for the system
with any missing components in that default theme coming from HOLO.

Change-Id: Idea55cc684ccc8304b01a991c36b6993f55b8880
Merge changes Idea55cc6,Ia35ad034,Ie594458b,I75d2a674,I840b8e2e,I3bfc9ee2,Ic6ac7537,I0c349ad4,I453eda5f,I13fa17ea,I00e32fc1,Ic8feaead,I897cfbbe into du44

* changes:
  Themes: Add helper methods for creating complete component maps
  Themes: Avoid NPE when setting text in TickerView
  Themes: Load correct common resources
  Themes: Update provider with components that were applied
  Themes: Only kill launchers if overlays or icons changed
  Themes: Fix setting wallpaper from a legacy theme
  Themes: setUserRequired(false) when updating audibles
  Themes: Allow clearing the wallpaper and ls wallpaper
  Themes: Build icon cache when applying icons
  Themes: Support applying components from multiple themes [1/2]
  Themes: Fix ResourceNotFoundException when updating  applied theme
  Themes: Add method to "apply all" a theme
  Themes: Partial change: Use ArrayListExtra for broadcasting theme changes