summaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/themes/provider/ThemesProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/cyanogenmod/themes/provider/ThemesProvider.java')
-rw-r--r--src/org/cyanogenmod/themes/provider/ThemesProvider.java37
1 files changed, 30 insertions, 7 deletions
diff --git a/src/org/cyanogenmod/themes/provider/ThemesProvider.java b/src/org/cyanogenmod/themes/provider/ThemesProvider.java
index 503d703..ae0a5af 100644
--- a/src/org/cyanogenmod/themes/provider/ThemesProvider.java
+++ b/src/org/cyanogenmod/themes/provider/ThemesProvider.java
@@ -17,6 +17,7 @@ package org.cyanogenmod.themes.provider;
import android.content.ContentProvider;
+import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
@@ -43,6 +44,7 @@ import android.util.Log;
import org.cyanogenmod.themes.provider.ThemesOpenHelper.MixnMatchTable;
import org.cyanogenmod.themes.provider.ThemesOpenHelper.PreviewsTable;
import org.cyanogenmod.themes.provider.ThemesOpenHelper.ThemesTable;
+import org.cyanogenmod.themes.provider.util.ProviderUtils;
import java.util.ArrayList;
import java.util.Collection;
@@ -150,9 +152,9 @@ public class ThemesProvider extends ContentProvider {
switch (uriType) {
case THEMES:
boolean processPreviews = true;
- if (values.containsKey(KEY_PROCESS_PREVIEWS)) {
- processPreviews = values.getAsBoolean(KEY_PROCESS_PREVIEWS);
- values.remove(KEY_PROCESS_PREVIEWS);
+ if (values.containsKey(ThemesColumns.INSTALL_STATE)) {
+ int state = values.getAsInteger(ThemesColumns.INSTALL_STATE);
+ processPreviews = state == ThemesColumns.InstallState.INSTALLING;
}
id = sqlDB.insert(ThemesOpenHelper.ThemesTable.TABLE_NAME, null, values);
if (processPreviews) {
@@ -185,8 +187,11 @@ public class ThemesProvider extends ContentProvider {
break;
default:
}
- getContext().getContentResolver().notifyChange(uri, null);
- return Uri.parse(MixnMatchColumns.CONTENT_URI + "/" + id);
+ if (id >= 0) {
+ ContentUris.withAppendedId(uri, id);
+ getContext().getContentResolver().notifyChange(uri, null);
+ }
+ return uri;
}
@Override
@@ -272,6 +277,8 @@ public class ThemesProvider extends ContentProvider {
case THEMES_ID:
String pkgName = values.getAsString(ThemesColumns.PKG_NAME);
final boolean updatePreviews = getShouldUpdatePreviews(sqlDB, pkgName);
+ final int oldInstallState =
+ ProviderUtils.getInstallStateForTheme(getContext(), pkgName);
rowsUpdated = sqlDB.update(ThemesTable.TABLE_NAME, values, selection, selectionArgs);
if (updateNotTriggeredByContentProvider(values) && updatePreviews) {
Intent intent = new Intent(getContext(), PreviewGenerationService.class);
@@ -295,6 +302,18 @@ public class ThemesProvider extends ContentProvider {
hasBootAni != null && hasBootAni);
getContext().startService(intent);
}
+ // Broadcast that the theme is installed if the previous state was INSTALLING and
+ // the new state is INSTALLED.
+ if (values.containsKey(ThemesColumns.INSTALL_STATE)) {
+ int newState = values.getAsInteger(ThemesColumns.INSTALL_STATE);
+ if (newState == ThemesColumns.InstallState.INSTALLED) {
+ if (oldInstallState == ThemesColumns.InstallState.INSTALLING) {
+ ProviderUtils.sendThemeInstalledBroadcast(getContext(), pkgName);
+ } else if (oldInstallState == ThemesColumns.InstallState.UPDATING) {
+ ProviderUtils.sendThemeUpdatedBroadcast(getContext(), pkgName);
+ }
+ }
+ }
getContext().getContentResolver().notifyChange(uri, null);
break;
case MIXNMATCH:
@@ -555,7 +574,9 @@ public class ThemesProvider extends ContentProvider {
private void insertThemes(Collection<PackageInfo> themesToInsert) {
for (PackageInfo themeInfo : themesToInsert) {
try {
- ThemePackageHelper.insertPackage(getContext(), themeInfo.packageName, true);
+ final Context context = getContext();
+ ThemePackageHelper.insertPackage(context, themeInfo.packageName,
+ ProviderUtils.isThemeBeingProcessed(context, themeInfo.packageName));
} catch (NameNotFoundException e) {
Log.e(TAG, "Unable to insert theme " + themeInfo.packageName, e);
}
@@ -565,7 +586,9 @@ public class ThemesProvider extends ContentProvider {
private void updateThemes(List<String> themesToUpdate) {
for (String pkgName : themesToUpdate) {
try {
- ThemePackageHelper.updatePackage(getContext(), pkgName);
+ final Context context = getContext();
+ ThemePackageHelper.updatePackage(context, pkgName,
+ ProviderUtils.isThemeBeingProcessed(context, pkgName));
} catch (NameNotFoundException e) {
Log.e(TAG, "Unable to update theme " + pkgName, e);
}