summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard MacGregor <rmacgregor@cyngn.com>2015-05-28 15:59:03 -0700
committerRichard MacGregor <rmacgregor@cyngn.com>2015-05-29 12:05:09 -0700
commit1c5c017dd27126f84309072ba5d602a7977816e6 (patch)
treee11176e404faab932c57e40c70e01c7d312fc2fa /src
parent9819db1f4e1443e9eda6f22f99f32937cc1e3130 (diff)
downloadpackages_apps_ThemeChooser-1c5c017dd27126f84309072ba5d602a7977816e6.zip
packages_apps_ThemeChooser-1c5c017dd27126f84309072ba5d602a7977816e6.tar.gz
packages_apps_ThemeChooser-1c5c017dd27126f84309072ba5d602a7977816e6.tar.bz2
Introduce Theme Versioning
Move sql query construction into new class. Consolidate shared Loader_ID_* states across different classes. Include versioning to allow for certain functions to not be called, and sql queries not built if frameworks doesn't support them. Depends on: http://review.cyanogenmod.org/#/c/99452/ http://review.cyanogenmod.org/#/c/99600/ Change-Id: I8061f1894890fa7e2221e1d4f4c90c4ed503e3d1
Diffstat (limited to 'src')
-rw-r--r--src/com/cyngn/theme/chooser/ChooserActivity.java32
-rw-r--r--src/com/cyngn/theme/chooser/ComponentSelector.java126
-rw-r--r--src/com/cyngn/theme/chooser/MyThemeFragment.java29
-rw-r--r--src/com/cyngn/theme/chooser/ThemeFragment.java170
-rw-r--r--src/com/cyngn/theme/util/CursorLoaderHelper.java369
5 files changed, 419 insertions, 307 deletions
diff --git a/src/com/cyngn/theme/chooser/ChooserActivity.java b/src/com/cyngn/theme/chooser/ChooserActivity.java
index 1158782..c851abe 100644
--- a/src/com/cyngn/theme/chooser/ChooserActivity.java
+++ b/src/com/cyngn/theme/chooser/ChooserActivity.java
@@ -53,6 +53,7 @@ import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import com.cyngn.theme.perapptheming.PerAppThemingWindow;
+import com.cyngn.theme.util.CursorLoaderHelper;
import com.cyngn.theme.util.NotificationHelper;
import com.cyngn.theme.util.PreferenceUtils;
import com.cyngn.theme.util.TypefaceHelperCache;
@@ -69,6 +70,9 @@ import static android.provider.ThemesContract.ThemesColumns.MODIFIES_RINGTONES;
import static com.cyngn.theme.chooser.ComponentSelector.DEFAULT_COMPONENT_ID;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_INSTALLED_THEMES;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_APPLIED;
+
public class ChooserActivity extends FragmentActivity
implements LoaderManager.LoaderCallbacks<Cursor> {
public static final String THEME_STORE_PACKAGE = "com.cyngn.themestore";
@@ -80,10 +84,6 @@ public class ChooserActivity extends FragmentActivity
private static final int OFFSCREEN_PAGE_LIMIT = 3;
- private static final int LOADER_ID_INSTALLED_THEMES = 1000;
- private static final int LOADER_ID_APPLIED = 1001;
-
-
private static final String THEME_STORE_ACTIVITY = THEME_STORE_PACKAGE + ".ui.StoreActivity";
private static final String ACTION_APPLY_THEME = "android.intent.action.APPLY_THEME";
private static final String PERMISSION_WRITE_THEME = "android.permission.WRITE_THEMES";
@@ -879,37 +879,15 @@ public class ChooserActivity extends FragmentActivity
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- String selection = null;
- String selectionArgs[] = null;
- String sortOrder = null;
- String[] projection = null;
- Uri contentUri = null;
-
switch (id) {
case LOADER_ID_INSTALLED_THEMES:
mAppliedBaseTheme = PreferenceUtils.getAppliedBaseTheme(this);
- selection = ThemesColumns.PRESENT_AS_THEME + "=? AND " +
- ThemesColumns.INSTALL_STATE + "=?";
- selectionArgs = new String[] { "1", "" + ThemesColumns.InstallState.INSTALLED};
- // sort in ascending order but make sure the "default" theme is always first
- sortOrder = "(" + ThemesColumns.IS_DEFAULT_THEME + "=1) DESC, "
- + "(" + ThemesColumns.PKG_NAME + "='" + mAppliedBaseTheme + "') DESC, "
- + ThemesColumns.INSTALL_TIME + " DESC";
- contentUri = ThemesColumns.CONTENT_URI;
- projection = new String[] {ThemesColumns.PKG_NAME, ThemesColumns.TITLE,
- ThemesColumns.AUTHOR};
break;
case LOADER_ID_APPLIED:
//TODO: Mix n match query should only be done once
- contentUri = ThemesContract.MixnMatchColumns.CONTENT_URI;
- selection = null;
- selectionArgs = null;
break;
}
-
-
- return new CursorLoader(this, contentUri, projection, selection,
- selectionArgs, sortOrder);
+ return CursorLoaderHelper.chooserActivityCursorLoader(this, id, mAppliedBaseTheme);
}
public class ThemesAdapter extends NewFragmentStatePagerAdapter {
diff --git a/src/com/cyngn/theme/chooser/ComponentSelector.java b/src/com/cyngn/theme/chooser/ComponentSelector.java
index d47c47a..57bc749 100644
--- a/src/com/cyngn/theme/chooser/ComponentSelector.java
+++ b/src/com/cyngn/theme/chooser/ComponentSelector.java
@@ -40,6 +40,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.cyngn.theme.util.AudioUtils;
+import com.cyngn.theme.util.CursorLoaderHelper;
import com.cyngn.theme.util.ThemedTypefaceHelper;
import com.cyngn.theme.util.TypefaceHelperCache;
import com.cyngn.theme.util.Utils;
@@ -56,6 +57,18 @@ import static android.provider.ThemesContract.ThemesColumns.MODIFIES_NAVIGATION_
import static android.provider.ThemesContract.ThemesColumns.MODIFIES_ICONS;
import static android.provider.ThemesContract.ThemesColumns.MODIFIES_FONTS;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_STATUS_BAR;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_FONT;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ICONS;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_WALLPAPER;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_NAVIGATION_BAR;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_LOCKSCREEN;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_STYLE;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_BOOT_ANIMATION;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_RINGTONE;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_NOTIFICATION;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ALARM;
+
public class ComponentSelector extends LinearLayout
implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String TAG = ComponentSelector.class.getSimpleName();
@@ -64,18 +77,6 @@ public class ComponentSelector extends LinearLayout
public static final String EXTERNAL_WALLPAPER = "external";
- private static final int LOADER_ID_STATUS_BAR = 100;
- private static final int LOADER_ID_NAVIGATION_BAR = 101;
- private static final int LOADER_ID_FONT = 102;
- private static final int LOADER_ID_ICON = 103;
- private static final int LOADER_ID_STYLE = 104;
- private static final int LOADER_ID_WALLPAPER = 105;
- private static final int LOADER_ID_BOOTANIMATIONS = 106;
- private static final int LOADER_ID_RINGTONE = 107;
- private static final int LOADER_ID_NOTIFICATION = 108;
- private static final int LOADER_ID_ALARM = 109;
- private static final int LOADER_ID_LOCKSCREEN = 110;
-
private static final int EXTRA_WALLPAPER_COMPONENTS = 2;
protected static final long DEFAULT_COMPONENT_ID = 0;
@@ -277,7 +278,7 @@ public class ComponentSelector extends LinearLayout
return LOADER_ID_FONT;
}
if (MODIFIES_ICONS.equals(component)) {
- return LOADER_ID_ICON;
+ return LOADER_ID_ICONS;
}
if (MODIFIES_OVERLAYS.equals(component)) {
return LOADER_ID_STYLE;
@@ -286,7 +287,7 @@ public class ComponentSelector extends LinearLayout
return LOADER_ID_WALLPAPER;
}
if (MODIFIES_BOOT_ANIM.equals(component)) {
- return LOADER_ID_BOOTANIMATIONS;
+ return LOADER_ID_BOOT_ANIMATION;
}
if (MODIFIES_RINGTONES.equals(component)) {
return LOADER_ID_RINGTONE;
@@ -305,96 +306,7 @@ public class ComponentSelector extends LinearLayout
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- Uri uri = PreviewColumns.CONTENT_URI;
- String selection;
- String[] selectionArgs = { "1" };
- String[] projection = { ThemesColumns.TITLE, ThemesColumns.PKG_NAME };
- switch(id) {
- case LOADER_ID_STATUS_BAR:
- selection = MODIFIES_STATUS_BAR + "=?";
- projection = new String[] {
- PreviewColumns.STATUSBAR_WIFI_ICON,
- PreviewColumns.STATUSBAR_SIGNAL_ICON,
- PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
- PreviewColumns.STATUSBAR_BACKGROUND,
- PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
- PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
- PreviewColumns.STATUSBAR_BATTERY_PORTRAIT,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME
- };
- break;
- case LOADER_ID_NAVIGATION_BAR:
- selection = MODIFIES_NAVIGATION_BAR + "=?";
- projection = new String[] {
- PreviewColumns.NAVBAR_BACK_BUTTON,
- PreviewColumns.STATUSBAR_BACKGROUND,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME,
- };
- break;
- case LOADER_ID_FONT:
- selection = MODIFIES_FONTS + "=?";
- break;
- case LOADER_ID_ICON:
- selection = MODIFIES_ICONS + "=?";
- projection = new String[] {
- PreviewColumns.ICON_PREVIEW_1,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME
- };
- break;
- case LOADER_ID_STYLE:
- selection = MODIFIES_OVERLAYS + "=?";
- projection = new String[] {
- PreviewColumns.STYLE_THUMBNAIL,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME
- };
- break;
- case LOADER_ID_WALLPAPER:
- uri = PreviewColumns.COMPONENTS_URI;
- selection = MODIFIES_LAUNCHER + "=?";
- projection = new String[] {
- PreviewColumns.WALLPAPER_THUMBNAIL,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME,
- PreviewColumns.COMPONENT_ID
- };
- break;
- case LOADER_ID_BOOTANIMATIONS:
- selection = MODIFIES_BOOT_ANIM + "=?";
- projection = new String[] {
- PreviewColumns.BOOTANIMATION_THUMBNAIL,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME
- };
- break;
- case LOADER_ID_RINGTONE:
- selection = MODIFIES_RINGTONES + "=?";
- break;
- case LOADER_ID_NOTIFICATION:
- selection = MODIFIES_NOTIFICATIONS + "=?";
- break;
- case LOADER_ID_ALARM:
- selection = MODIFIES_ALARMS + "=?";
- break;
- case LOADER_ID_LOCKSCREEN:
- selection = MODIFIES_LOCKSCREEN + "=?";
- projection = new String[] {
- PreviewColumns.LOCK_WALLPAPER_THUMBNAIL,
- ThemesColumns.TITLE,
- ThemesColumns.PKG_NAME,
- PreviewColumns.COMPONENT_ID
- };
- break;
- default:
- return null;
- }
- // sort in ascending order but make sure the "default" theme is always first
- String sortOrder = "(" + ThemesContract.ThemesColumns.IS_DEFAULT_THEME + "=1) DESC, "
- + ThemesContract.ThemesColumns.TITLE + " ASC";
- return new CursorLoader(mContext, uri, projection, selection, selectionArgs, sortOrder);
+ return CursorLoaderHelper.componentSelectorCursorLoader(mContext, id);
}
@Override
@@ -418,7 +330,7 @@ public class ComponentSelector extends LinearLayout
count = (int) Math.ceil((double)count / mItemsPerPage);
mContent.setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);
break;
- case LOADER_ID_BOOTANIMATIONS:
+ case LOADER_ID_BOOT_ANIMATION:
dividerPadding = res.getDimensionPixelSize(
R.dimen.component_divider_padding_top_bootani);
dividerHeight = res.getDimensionPixelSize(R.dimen.component_divider_height_bootani);
@@ -598,11 +510,13 @@ public class ComponentSelector extends LinearLayout
cursor.moveToPosition(position - EXTRA_WALLPAPER_COMPONENTS);
int pkgNameIndex = cursor.getColumnIndex(ThemesContract.ThemesColumns.PKG_NAME);
int cmpntIdIndex = cursor.getColumnIndex(PreviewColumns.COMPONENT_ID);
+ long cmpntId = (cmpntIdIndex >= 0) ?
+ cursor.getLong(cmpntIdIndex) : DEFAULT_COMPONENT_ID;
iv.setImageBitmap(
Utils.loadBitmapBlob(cursor, wallpaperIndex));
setTitle(((TextView) v.findViewById(R.id.title)), cursor);
v.setTag(R.id.tag_key_package_name, cursor.getString(pkgNameIndex));
- v.setTag(R.id.tag_key_component_id, cursor.getLong(cmpntIdIndex));
+ v.setTag(R.id.tag_key_component_id, cmpntId);
}
v.setOnClickListener(mItemClickListener);
return v;
diff --git a/src/com/cyngn/theme/chooser/MyThemeFragment.java b/src/com/cyngn/theme/chooser/MyThemeFragment.java
index d1c14a1..ab0b485 100644
--- a/src/com/cyngn/theme/chooser/MyThemeFragment.java
+++ b/src/com/cyngn/theme/chooser/MyThemeFragment.java
@@ -40,6 +40,7 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.cyngn.theme.util.AudioUtils;
+import com.cyngn.theme.util.CursorLoaderHelper;
import com.cyngn.theme.util.PreferenceUtils;
import com.cyngn.theme.util.ThemedTypefaceHelper;
import com.cyngn.theme.util.TypefaceHelperCache;
@@ -51,7 +52,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import static com.cyngn.theme.chooser.ComponentSelector.DEFAULT_COMPONENT_ID;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ALL;
public class MyThemeFragment extends ThemeFragment {
private static final String TAG = MyThemeFragment.class.getSimpleName();
@@ -333,8 +334,6 @@ public class MyThemeFragment extends ThemeFragment {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- Uri uri;
- String[] projection;
switch (id) {
case LOADER_ID_ALL:
if (args != null) {
@@ -343,29 +342,7 @@ public class MyThemeFragment extends ThemeFragment {
return super.onCreateLoader(id, args);
}
}
- projection = new String[]{
- PreviewColumns.WALLPAPER_PREVIEW,
- PreviewColumns.STATUSBAR_BACKGROUND,
- PreviewColumns.STATUSBAR_WIFI_ICON,
- PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END,
- PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
- PreviewColumns.STATUSBAR_SIGNAL_ICON,
- PreviewColumns.STATUSBAR_CLOCK_TEXT_COLOR,
- PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
- PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
- PreviewColumns.STATUSBAR_BATTERY_PORTRAIT,
- PreviewColumns.NAVBAR_BACK_BUTTON,
- PreviewColumns.NAVBAR_HOME_BUTTON,
- PreviewColumns.NAVBAR_RECENT_BUTTON,
- PreviewColumns.ICON_PREVIEW_1,
- PreviewColumns.ICON_PREVIEW_2,
- PreviewColumns.ICON_PREVIEW_3,
- PreviewColumns.LOCK_WALLPAPER_PREVIEW,
- PreviewColumns.STYLE_PREVIEW,
- PreviewColumns.NAVBAR_BACKGROUND
- };
- uri = PreviewColumns.APPLIED_URI;
- return new CursorLoader(getActivity(), uri, projection, null, null, null);
+ return CursorLoaderHelper.myThemeFragmentCursorLoader(getActivity(), id);
default:
// Only LOADER_ID_ALL differs for MyThemeFragment
return super.onCreateLoader(id, args);
diff --git a/src/com/cyngn/theme/chooser/ThemeFragment.java b/src/com/cyngn/theme/chooser/ThemeFragment.java
index c1aa725..77daf1d 100644
--- a/src/com/cyngn/theme/chooser/ThemeFragment.java
+++ b/src/com/cyngn/theme/chooser/ThemeFragment.java
@@ -74,6 +74,7 @@ import android.widget.TextView;
import com.cyngn.theme.chooser.ComponentSelector.OnItemClickedListener;
import com.cyngn.theme.util.AudioUtils;
import com.cyngn.theme.util.BootAnimationHelper;
+import com.cyngn.theme.util.CursorLoaderHelper;
import com.cyngn.theme.util.IconPreviewHelper;
import com.cyngn.theme.util.PreferenceUtils;
import com.cyngn.theme.util.ThemedTypefaceHelper;
@@ -85,6 +86,8 @@ import com.cyngn.theme.widget.ConfirmCancelOverlay;
import com.cyngn.theme.widget.LockableScrollView;
import com.cyngn.theme.widget.ThemeTagLayout;
+import cyanogenmod.app.ThemeVersion;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -109,6 +112,20 @@ import static android.provider.ThemesContract.ThemesColumns.MODIFIES_FONTS;
import static com.cyngn.theme.chooser.ComponentSelector.DEFAULT_COMPONENT_ID;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_INVALID;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ALL;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_STATUS_BAR;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_FONT;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ICONS;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_WALLPAPER;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_NAVIGATION_BAR;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_LOCKSCREEN;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_STYLE;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_BOOT_ANIMATION;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_RINGTONE;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_NOTIFICATION;
+import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ALARM;
+
import static android.content.pm.ThemeUtils.SYSTEM_TARGET_API;
public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>,
@@ -151,20 +168,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
protected static final String WALLPAPER_NONE = "";
- protected static final int LOADER_ID_INVALID = -1;
- protected static final int LOADER_ID_ALL = 0;
- protected static final int LOADER_ID_STATUS_BAR = 1;
- protected static final int LOADER_ID_FONT = 2;
- protected static final int LOADER_ID_ICONS = 3;
- protected static final int LOADER_ID_WALLPAPER = 4;
- protected static final int LOADER_ID_NAVIGATION_BAR = 5;
- protected static final int LOADER_ID_LOCKSCREEN = 6;
- protected static final int LOADER_ID_STYLE = 7;
- protected static final int LOADER_ID_BOOT_ANIMATION = 8;
- protected static final int LOADER_ID_RINGTONE = 9;
- protected static final int LOADER_ID_NOTIFICATION = 10;
- protected static final int LOADER_ID_ALARM = 11;
-
protected static final String ARG_PACKAGE_NAME = "pkgName";
protected static final String ARG_COMPONENT_ID = "cmpntId";
protected static final String ARG_SKIP_LOADING_ANIM = "skipLoadingAnim";
@@ -284,6 +287,8 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
protected boolean mIsLegacyTheme;
+ private static final int mThemeVersion = ThemeVersion.getVersion();
+
protected enum CustomizeResetAction {
Customize,
Reset,
@@ -1208,139 +1213,8 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
pkgName = args.getString(ARG_PACKAGE_NAME);
componentId = args.getLong(ARG_COMPONENT_ID, DEFAULT_COMPONENT_ID);
}
- Uri uri = ThemesContract.PreviewColumns.CONTENT_URI;
- String selection = ThemesContract.ThemesColumns.PKG_NAME + "= ?";
- String[] selectionArgs = new String[] { pkgName };
- String[] projection = null;
- switch (id) {
- case LOADER_ID_ALL:
- // Load all default component previews (component_id == 0)
- selection = ThemesContract.ThemesColumns.PKG_NAME + "=? AND " +
- PreviewColumns.COMPONENT_ID + "=?";
- selectionArgs = new String[] { pkgName, String.valueOf(DEFAULT_COMPONENT_ID) };
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- ThemesColumns.AUTHOR,
- ThemesColumns.WALLPAPER_URI,
- ThemesColumns.HOMESCREEN_URI,
- ThemesColumns.TARGET_API,
- // Theme abilities
- ThemesColumns.MODIFIES_LAUNCHER,
- ThemesColumns.MODIFIES_LOCKSCREEN,
- ThemesColumns.MODIFIES_ALARMS,
- ThemesColumns.MODIFIES_BOOT_ANIM,
- ThemesColumns.MODIFIES_FONTS,
- ThemesColumns.MODIFIES_ICONS,
- ThemesColumns.MODIFIES_NAVIGATION_BAR,
- ThemesColumns.MODIFIES_OVERLAYS,
- ThemesColumns.MODIFIES_RINGTONES,
- ThemesColumns.MODIFIES_STATUS_BAR,
- ThemesColumns.MODIFIES_NOTIFICATIONS,
- //Previews
- PreviewColumns.WALLPAPER_PREVIEW,
- PreviewColumns.STATUSBAR_BACKGROUND,
- PreviewColumns.STATUSBAR_WIFI_ICON,
- PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END,
- PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
- PreviewColumns.STATUSBAR_SIGNAL_ICON,
- PreviewColumns.STATUSBAR_CLOCK_TEXT_COLOR,
- PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
- PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
- PreviewColumns.STATUSBAR_BATTERY_PORTRAIT,
- PreviewColumns.NAVBAR_BACK_BUTTON,
- PreviewColumns.NAVBAR_HOME_BUTTON,
- PreviewColumns.NAVBAR_RECENT_BUTTON,
- PreviewColumns.ICON_PREVIEW_1,
- PreviewColumns.ICON_PREVIEW_2,
- PreviewColumns.ICON_PREVIEW_3,
- PreviewColumns.LOCK_WALLPAPER_PREVIEW,
- PreviewColumns.STYLE_PREVIEW
- };
- break;
- case LOADER_ID_STATUS_BAR:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- PreviewColumns.STATUSBAR_BACKGROUND,
- PreviewColumns.STATUSBAR_WIFI_ICON,
- PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END,
- PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
- PreviewColumns.STATUSBAR_SIGNAL_ICON,
- PreviewColumns.STATUSBAR_CLOCK_TEXT_COLOR,
- PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
- PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
- PreviewColumns.STATUSBAR_BATTERY_PORTRAIT
- };
- break;
- case LOADER_ID_FONT:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE
- };
- break;
- case LOADER_ID_ICONS:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- PreviewColumns.ICON_PREVIEW_1,
- PreviewColumns.ICON_PREVIEW_2,
- PreviewColumns.ICON_PREVIEW_3,
- };
- break;
- case LOADER_ID_WALLPAPER:
- uri = PreviewColumns.COMPONENTS_URI;
- // Load specified wallpaper previews (component_id is specified)
- selection = ThemesContract.ThemesColumns.PKG_NAME + "=? AND " +
- PreviewColumns.COMPONENT_ID + "=?";
- selectionArgs = new String[] { pkgName, String.valueOf(componentId) };
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- PreviewColumns.WALLPAPER_PREVIEW,
- PreviewColumns.COMPONENT_ID
- };
- break;
- case LOADER_ID_NAVIGATION_BAR:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- PreviewColumns.STATUSBAR_BACKGROUND,
- PreviewColumns.NAVBAR_BACK_BUTTON,
- PreviewColumns.NAVBAR_HOME_BUTTON,
- PreviewColumns.NAVBAR_RECENT_BUTTON
- };
- break;
- case LOADER_ID_LOCKSCREEN:
- projection = new String[]{
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- PreviewColumns.LOCK_WALLPAPER_PREVIEW
- };
- break;
- case LOADER_ID_STYLE:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE,
- PreviewColumns.STYLE_PREVIEW
- };
- break;
- case LOADER_ID_BOOT_ANIMATION:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE
- };
- break;
- case LOADER_ID_RINGTONE:
- case LOADER_ID_NOTIFICATION:
- case LOADER_ID_ALARM:
- projection = new String[] {
- ThemesColumns.PKG_NAME,
- ThemesColumns.TITLE
- };
- break;
- }
- return new CursorLoader(getActivity(), uri, projection, selection, selectionArgs, null);
+ return CursorLoaderHelper.themeFragmentCursorLoader(getActivity(), id, pkgName,
+ componentId);
}
@Override
@@ -2172,7 +2046,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
builder.setComponent(component, componentMap.get(component));
}
builder.setRequestType(requestType);
- builder.setWallpaperId(mSelectedWallpaperComponentId);
+ if (mThemeVersion >= 3) builder.setWallpaperId(mSelectedWallpaperComponentId);
return builder.build();
}
diff --git a/src/com/cyngn/theme/util/CursorLoaderHelper.java b/src/com/cyngn/theme/util/CursorLoaderHelper.java
new file mode 100644
index 0000000..b315f38
--- /dev/null
+++ b/src/com/cyngn/theme/util/CursorLoaderHelper.java
@@ -0,0 +1,369 @@
+/*
+ * Copyright (C) 2015 Cyanogen, Inc.
+ */
+package com.cyngn.theme.util;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ThemesContract;
+import android.provider.ThemesContract.MixnMatchColumns;
+import android.provider.ThemesContract.PreviewColumns;
+import android.provider.ThemesContract.ThemesColumns;
+import android.support.v4.content.CursorLoader;
+import android.support.v4.content.Loader;
+
+import cyanogenmod.app.ThemeVersion;
+
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_ALARMS;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_BOOT_ANIM;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_LAUNCHER;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_LOCKSCREEN;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_NOTIFICATIONS;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_OVERLAYS;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_RINGTONES;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_STATUS_BAR;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_NAVIGATION_BAR;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_ICONS;
+import static android.provider.ThemesContract.ThemesColumns.MODIFIES_FONTS;
+
+public class CursorLoaderHelper {
+
+ public static final int LOADER_ID_INVALID = -1;
+ public static final int LOADER_ID_ALL = 0;
+ public static final int LOADER_ID_STATUS_BAR = 1;
+ public static final int LOADER_ID_FONT = 2;
+ public static final int LOADER_ID_ICONS = 3;
+ public static final int LOADER_ID_WALLPAPER = 4;
+ public static final int LOADER_ID_NAVIGATION_BAR = 5;
+ public static final int LOADER_ID_LOCKSCREEN = 6;
+ public static final int LOADER_ID_STYLE = 7;
+ public static final int LOADER_ID_BOOT_ANIMATION = 8;
+ public static final int LOADER_ID_RINGTONE = 9;
+ public static final int LOADER_ID_NOTIFICATION = 10;
+ public static final int LOADER_ID_ALARM = 11;
+ public static final int LOADER_ID_INSTALLED_THEMES = 1000;
+ public static final int LOADER_ID_APPLIED = 1001;
+
+ private static final long DEFAULT_COMPONENT_ID = 0;
+
+ private static int mThemeVersion = ThemeVersion.getVersion();
+
+ public static Loader<Cursor> chooserActivityCursorLoader(Context context, int id,
+ String appliedBaseTheme) {
+ String selection = null;
+ String selectionArgs[] = null;
+ String sortOrder = null;
+ String[] projection = null;
+ Uri contentUri = null;
+
+ switch (id) {
+ case LOADER_ID_INSTALLED_THEMES:
+ selection = ThemesColumns.PRESENT_AS_THEME + "=? AND " +
+ ThemesColumns.INSTALL_STATE + "=?";
+ selectionArgs = new String[] { "1", "" + ThemesColumns.InstallState.INSTALLED};
+ // sort in ascending order but make sure the "default" theme is always first
+ sortOrder = "(" + ThemesColumns.IS_DEFAULT_THEME + "=1) DESC, "
+ + "(" + ThemesColumns.PKG_NAME + "='" + appliedBaseTheme + "') DESC, "
+ + ThemesColumns.INSTALL_TIME + " DESC";
+ contentUri = ThemesColumns.CONTENT_URI;
+ projection = new String[] {ThemesColumns.PKG_NAME, ThemesColumns.TITLE,
+ ThemesColumns.AUTHOR};
+ break;
+ case LOADER_ID_APPLIED:
+ //TODO: Mix n match query should only be done once
+ contentUri = ThemesContract.MixnMatchColumns.CONTENT_URI;
+ selection = null;
+ selectionArgs = null;
+ break;
+ }
+
+ return new CursorLoader(context, contentUri, projection, selection,
+ selectionArgs, sortOrder);
+ }
+
+ public static Loader<Cursor> componentSelectorCursorLoader(Context context, int id) {
+ Uri uri = PreviewColumns.CONTENT_URI;
+ String selection;
+ String[] selectionArgs = { "1" };
+ String[] projection = { ThemesColumns.TITLE, ThemesColumns.PKG_NAME };
+ switch(id) {
+ case LOADER_ID_STATUS_BAR:
+ selection = MODIFIES_STATUS_BAR + "=?";
+ projection = new String[] {
+ PreviewColumns.STATUSBAR_WIFI_ICON,
+ PreviewColumns.STATUSBAR_SIGNAL_ICON,
+ PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
+ PreviewColumns.STATUSBAR_BACKGROUND,
+ PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
+ PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
+ PreviewColumns.STATUSBAR_BATTERY_PORTRAIT,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME
+ };
+ break;
+ case LOADER_ID_NAVIGATION_BAR:
+ selection = MODIFIES_NAVIGATION_BAR + "=?";
+ projection = new String[] {
+ PreviewColumns.NAVBAR_BACK_BUTTON,
+ PreviewColumns.STATUSBAR_BACKGROUND,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME,
+ };
+ break;
+ case LOADER_ID_FONT:
+ selection = MODIFIES_FONTS + "=?";
+ break;
+ case LOADER_ID_ICONS:
+ selection = MODIFIES_ICONS + "=?";
+ projection = new String[] {
+ PreviewColumns.ICON_PREVIEW_1,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME
+ };
+ break;
+ case LOADER_ID_STYLE:
+ selection = MODIFIES_OVERLAYS + "=?";
+ projection = new String[] {
+ PreviewColumns.STYLE_THUMBNAIL,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME
+ };
+ break;
+ case LOADER_ID_WALLPAPER:
+ selection = MODIFIES_LAUNCHER + "=?";
+ if (mThemeVersion >= 3) {
+ uri = PreviewColumns.COMPONENTS_URI;
+ projection = new String[]{
+ PreviewColumns.WALLPAPER_THUMBNAIL,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME,
+ PreviewColumns.COMPONENT_ID
+ };
+ } else {
+ projection = new String[]{
+ PreviewColumns.WALLPAPER_THUMBNAIL,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME
+ };
+ }
+ break;
+ case LOADER_ID_BOOT_ANIMATION:
+ selection = MODIFIES_BOOT_ANIM + "=?";
+ projection = new String[] {
+ PreviewColumns.BOOTANIMATION_THUMBNAIL,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME
+ };
+ break;
+ case LOADER_ID_RINGTONE:
+ selection = MODIFIES_RINGTONES + "=?";
+ break;
+ case LOADER_ID_NOTIFICATION:
+ selection = MODIFIES_NOTIFICATIONS + "=?";
+ break;
+ case LOADER_ID_ALARM:
+ selection = MODIFIES_ALARMS + "=?";
+ break;
+ case LOADER_ID_LOCKSCREEN:
+ selection = MODIFIES_LOCKSCREEN + "=?";
+ if (mThemeVersion >= 3) {
+ projection = new String[]{
+ PreviewColumns.LOCK_WALLPAPER_THUMBNAIL,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME,
+ PreviewColumns.COMPONENT_ID
+ };
+ } else {
+ projection = new String[]{
+ PreviewColumns.LOCK_WALLPAPER_THUMBNAIL,
+ ThemesColumns.TITLE,
+ ThemesColumns.PKG_NAME
+ };
+ }
+ break;
+ default:
+ return null;
+ }
+ // sort in ascending order but make sure the "default" theme is always first
+ String sortOrder = "(" + ThemesContract.ThemesColumns.IS_DEFAULT_THEME + "=1) DESC, "
+ + ThemesContract.ThemesColumns.TITLE + " ASC";
+ return new CursorLoader(context, uri, projection, selection, selectionArgs, sortOrder);
+ }
+
+ public static Loader<Cursor> myThemeFragmentCursorLoader(Context context, int id) {
+ Uri uri;
+ String[] projection;
+ projection = new String[]{
+ PreviewColumns.WALLPAPER_PREVIEW,
+ PreviewColumns.STATUSBAR_BACKGROUND,
+ PreviewColumns.STATUSBAR_WIFI_ICON,
+ PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END,
+ PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
+ PreviewColumns.STATUSBAR_SIGNAL_ICON,
+ PreviewColumns.STATUSBAR_CLOCK_TEXT_COLOR,
+ PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
+ PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
+ PreviewColumns.STATUSBAR_BATTERY_PORTRAIT,
+ PreviewColumns.NAVBAR_BACK_BUTTON,
+ PreviewColumns.NAVBAR_HOME_BUTTON,
+ PreviewColumns.NAVBAR_RECENT_BUTTON,
+ PreviewColumns.ICON_PREVIEW_1,
+ PreviewColumns.ICON_PREVIEW_2,
+ PreviewColumns.ICON_PREVIEW_3,
+ PreviewColumns.LOCK_WALLPAPER_PREVIEW,
+ PreviewColumns.STYLE_PREVIEW,
+ PreviewColumns.NAVBAR_BACKGROUND
+ };
+ uri = PreviewColumns.APPLIED_URI;
+ return new CursorLoader(context, uri, projection, null, null, null);
+ }
+
+ public static Loader<Cursor> themeFragmentCursorLoader(Context context, int id, String pkgName,
+ long componentId) {
+ Uri uri = PreviewColumns.CONTENT_URI;
+ String selection = ThemesContract.ThemesColumns.PKG_NAME + "= ?";
+ String[] selectionArgs = new String[] { pkgName };
+ String[] projection = null;
+ switch (id) {
+ case LOADER_ID_ALL:
+ if (mThemeVersion >= 3) {
+ // Load all default component previews (component_id == 0)
+ selection += " AND " + PreviewColumns.COMPONENT_ID + "=?";
+ selectionArgs = new String[] { pkgName, String.valueOf(DEFAULT_COMPONENT_ID) };
+ } else {
+ // SQL query will fail if we ask for PreviewColumns.COMPONENT_ID, don't add it.
+ selectionArgs = new String[]{pkgName};
+ }
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ ThemesColumns.AUTHOR,
+ ThemesColumns.WALLPAPER_URI,
+ ThemesColumns.HOMESCREEN_URI,
+ ThemesColumns.TARGET_API,
+ // Theme abilities
+ ThemesColumns.MODIFIES_LAUNCHER,
+ ThemesColumns.MODIFIES_LOCKSCREEN,
+ ThemesColumns.MODIFIES_ALARMS,
+ ThemesColumns.MODIFIES_BOOT_ANIM,
+ ThemesColumns.MODIFIES_FONTS,
+ ThemesColumns.MODIFIES_ICONS,
+ ThemesColumns.MODIFIES_NAVIGATION_BAR,
+ ThemesColumns.MODIFIES_OVERLAYS,
+ ThemesColumns.MODIFIES_RINGTONES,
+ ThemesColumns.MODIFIES_STATUS_BAR,
+ ThemesColumns.MODIFIES_NOTIFICATIONS,
+ //Previews
+ PreviewColumns.WALLPAPER_PREVIEW,
+ PreviewColumns.STATUSBAR_BACKGROUND,
+ PreviewColumns.STATUSBAR_WIFI_ICON,
+ PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END,
+ PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
+ PreviewColumns.STATUSBAR_SIGNAL_ICON,
+ PreviewColumns.STATUSBAR_CLOCK_TEXT_COLOR,
+ PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
+ PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
+ PreviewColumns.STATUSBAR_BATTERY_PORTRAIT,
+ PreviewColumns.NAVBAR_BACK_BUTTON,
+ PreviewColumns.NAVBAR_HOME_BUTTON,
+ PreviewColumns.NAVBAR_RECENT_BUTTON,
+ PreviewColumns.ICON_PREVIEW_1,
+ PreviewColumns.ICON_PREVIEW_2,
+ PreviewColumns.ICON_PREVIEW_3,
+ PreviewColumns.LOCK_WALLPAPER_PREVIEW,
+ PreviewColumns.STYLE_PREVIEW
+ };
+ break;
+ case LOADER_ID_STATUS_BAR:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.STATUSBAR_BACKGROUND,
+ PreviewColumns.STATUSBAR_WIFI_ICON,
+ PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END,
+ PreviewColumns.STATUSBAR_BLUETOOTH_ICON,
+ PreviewColumns.STATUSBAR_SIGNAL_ICON,
+ PreviewColumns.STATUSBAR_CLOCK_TEXT_COLOR,
+ PreviewColumns.STATUSBAR_BATTERY_CIRCLE,
+ PreviewColumns.STATUSBAR_BATTERY_LANDSCAPE,
+ PreviewColumns.STATUSBAR_BATTERY_PORTRAIT
+ };
+ break;
+ case LOADER_ID_FONT:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE
+ };
+ break;
+ case LOADER_ID_ICONS:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.ICON_PREVIEW_1,
+ PreviewColumns.ICON_PREVIEW_2,
+ PreviewColumns.ICON_PREVIEW_3,
+ };
+ break;
+ case LOADER_ID_WALLPAPER:
+ if (mThemeVersion >= 3) {
+ uri = PreviewColumns.COMPONENTS_URI;
+ // Load specified wallpaper previews (component_id is specified)
+ selection += " AND " + PreviewColumns.COMPONENT_ID + "=?";
+ selectionArgs = new String[]{pkgName, String.valueOf(componentId)};
+ projection = new String[]{
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.WALLPAPER_PREVIEW,
+ PreviewColumns.COMPONENT_ID
+ };
+ } else {
+ projection = new String[]{
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.WALLPAPER_PREVIEW
+ };
+ }
+ break;
+ case LOADER_ID_NAVIGATION_BAR:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.STATUSBAR_BACKGROUND,
+ PreviewColumns.NAVBAR_BACK_BUTTON,
+ PreviewColumns.NAVBAR_HOME_BUTTON,
+ PreviewColumns.NAVBAR_RECENT_BUTTON
+ };
+ break;
+ case LOADER_ID_LOCKSCREEN:
+ projection = new String[]{
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.LOCK_WALLPAPER_PREVIEW
+ };
+ break;
+ case LOADER_ID_STYLE:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE,
+ PreviewColumns.STYLE_PREVIEW
+ };
+ break;
+ case LOADER_ID_BOOT_ANIMATION:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE
+ };
+ break;
+ case LOADER_ID_RINGTONE:
+ case LOADER_ID_NOTIFICATION:
+ case LOADER_ID_ALARM:
+ projection = new String[] {
+ ThemesColumns.PKG_NAME,
+ ThemesColumns.TITLE
+ };
+ break;
+ }
+ return new CursorLoader(context, uri, projection, selection, selectionArgs, null);
+ }
+} \ No newline at end of file