summaryrefslogtreecommitdiffstats
path: root/src/com/cyngn/theme/chooser/AppReceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/cyngn/theme/chooser/AppReceiver.java')
-rw-r--r--src/com/cyngn/theme/chooser/AppReceiver.java27
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);
+ }
}