diff options
Diffstat (limited to 'src/com/cyngn/theme/chooser/AppReceiver.java')
-rw-r--r-- | src/com/cyngn/theme/chooser/AppReceiver.java | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/com/cyngn/theme/chooser/AppReceiver.java b/src/com/cyngn/theme/chooser/AppReceiver.java index 2ef37e1..257aa65 100644 --- a/src/com/cyngn/theme/chooser/AppReceiver.java +++ b/src/com/cyngn/theme/chooser/AppReceiver.java @@ -7,11 +7,15 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.ThemeManager; import android.net.Uri; import com.cyngn.theme.util.NotificationHelper; import com.cyngn.theme.util.PreferenceUtils; +import java.util.Set; + public class AppReceiver extends BroadcastReceiver { @Override @@ -24,7 +28,12 @@ public class AppReceiver extends BroadcastReceiver { if (Intent.ACTION_PACKAGE_ADDED.equals(action) && !isReplacing) { try { if (isTheme(context, pkgName)) { - NotificationHelper.postThemeInstalledNotification(context, pkgName); + if (!isThemeBeingProcessed(context, pkgName)) { + NotificationHelper.postThemeInstalledNotification(context, pkgName); + } else { + // store this package name so we know it's being processed + PreferenceUtils.addThemeBeingProcessed(context, pkgName); + } } } catch (NameNotFoundException e) { } @@ -43,6 +52,17 @@ public class AppReceiver extends BroadcastReceiver { } } catch (NameNotFoundException e) { } + } else if (Intent.ACTION_THEME_RESOURCES_CACHED.equals(action)) { + final String themePkgName = intent.getStringExtra(Intent.EXTRA_THEME_PACKAGE_NAME); + final int result = intent.getIntExtra(Intent.EXTRA_THEME_RESULT, + PackageManager.INSTALL_FAILED_THEME_UNKNOWN_ERROR); + Set<String> processingThemes = + PreferenceUtils.getInstalledThemesBeingProcessed(context); + if (processingThemes != null && + processingThemes.contains(themePkgName) && result >= 0) { + NotificationHelper.postThemeInstalledNotification(context, themePkgName); + PreferenceUtils.removeThemeBeingProcessed(context, themePkgName); + } } } @@ -57,4 +77,9 @@ public class AppReceiver extends BroadcastReceiver { return false; } + + private boolean isThemeBeingProcessed(Context context, String pkgName) { + ThemeManager tm = (ThemeManager) context.getSystemService(Context.THEME_SERVICE); + return tm.isThemeBeingProcessed(pkgName); + } } |