summaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/theme
diff options
context:
space:
mode:
authorClark Scheff <clark@cyngn.com>2014-07-25 10:06:02 -0700
committerClark Scheff <clark@cyngn.com>2014-07-28 10:31:05 -0700
commit350dcc49f02aa33568f55f92c284abcdeaafca40 (patch)
tree40c51cb86ce6b89f9ef995335e877bb0cfb4ca8d /src/org/cyanogenmod/theme
parente088e35d98c5b515eb0f790e9f3c6ca38d3f44e2 (diff)
downloadpackages_apps_ThemeChooser-350dcc49f02aa33568f55f92c284abcdeaafca40.zip
packages_apps_ThemeChooser-350dcc49f02aa33568f55f92c284abcdeaafca40.tar.gz
packages_apps_ThemeChooser-350dcc49f02aa33568f55f92c284abcdeaafca40.tar.bz2
Move retrieving of current theme to ChooserActivity.
Handle retrieving this information in the ChooserActivity rather than loading it on a per-fragment basis. Change-Id: I3a4c55d14f091d04b3b221c95e925f1d649a0def
Diffstat (limited to 'src/org/cyanogenmod/theme')
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java82
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java31
2 files changed, 72 insertions, 41 deletions
diff --git a/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java b/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java
index e748e05..8a66d53 100644
--- a/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java
+++ b/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java
@@ -20,9 +20,11 @@ import android.content.res.Resources;
import android.content.res.ThemeConfig;
import android.content.res.ThemeManager;
import android.database.Cursor;
+import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
+import android.provider.ThemesContract;
import android.provider.ThemesContract.ThemesColumns;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
@@ -44,6 +46,9 @@ import org.cyanogenmod.theme.chooserv2.ComponentSelector.OnOpenCloseListener;
import org.cyanogenmod.theme.util.TypefaceHelperCache;
import org.cyanogenmod.theme.util.Utils;
+import java.util.HashMap;
+import java.util.Map;
+
import static android.provider.ThemesContract.ThemesColumns.MODIFIES_ALARMS;
import static android.provider.ThemesContract.ThemesColumns.MODIFIES_BOOT_ANIM;
import static android.provider.ThemesContract.ThemesColumns.MODIFIES_NOTIFICATIONS;
@@ -59,6 +64,9 @@ 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 PagerContainer mContainer;
private ThemeViewPager mPager;
private Button mEdit;
@@ -73,6 +81,9 @@ public class ChooserActivity extends FragmentActivity
private boolean mIsAnimating;
private Handler mHandler;
+ // Current system theme configuration as component -> pkgName
+ private Map<String, String> mCurrentTheme = new HashMap<String, String>();
+
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.v2_activity_main);
@@ -118,7 +129,7 @@ public class ChooserActivity extends FragmentActivity
mSelector.setOnOpenCloseListener(mOpenCloseListener);
mService = (ThemeManager) getSystemService(Context.THEME_SERVICE);
- getSupportLoaderManager().initLoader(0, null, this);
+ getSupportLoaderManager().restartLoader(LOADER_ID_APPLIED, null, this);
mSaveApplyLayout = findViewById(R.id.save_apply_layout);
if (!Utils.hasNavigationBar(this)) {
@@ -256,6 +267,7 @@ public class ChooserActivity extends FragmentActivity
protected void onResume() {
super.onResume();
mService.onClientResumed(this);
+ getSupportLoaderManager().restartLoader(LOADER_ID_APPLIED, null, this);
}
@Override
@@ -347,32 +359,70 @@ public class ChooserActivity extends FragmentActivity
return (ThemeFragment) mAdapter.instantiateItem(mPager, mPager.getCurrentItem());
}
+ private void populateCurrentTheme(Cursor c) {
+ c.moveToPosition(-1);
+ while(c.moveToNext()) {
+ int mixkeyIdx = c.getColumnIndex(ThemesContract.MixnMatchColumns.COL_KEY);
+ int pkgIdx = c.getColumnIndex(ThemesContract.MixnMatchColumns.COL_VALUE);
+ String mixkey = c.getString(mixkeyIdx);
+ String component = ThemesContract.MixnMatchColumns.mixNMatchKeyToComponent(mixkey);
+ String pkg = c.getString(pkgIdx);
+ mCurrentTheme.put(component, pkg);
+ }
+ }
+
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- // Swap the new cursor in. (The framework will take care of closing the
- // old cursor once we return.)
- mAdapter.swapCursor(data);
- mAdapter.notifyDataSetChanged();
+ switch (loader.getId()) {
+ case LOADER_ID_INSTALLED_THEMES:
+ // Swap the new cursor in. (The framework will take care of closing the
+ // old cursor once we return.)
+ mAdapter.swapCursor(data);
+ mAdapter.notifyDataSetChanged();
+ break;
+ case LOADER_ID_APPLIED:
+ getSupportLoaderManager().restartLoader(LOADER_ID_INSTALLED_THEMES, null, this);
+ populateCurrentTheme(data);
+ break;
+ }
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
- mAdapter.swapCursor(null);
- mAdapter.notifyDataSetChanged();
+ switch (loader.getId()) {
+ case LOADER_ID_INSTALLED_THEMES:
+ mAdapter.swapCursor(null);
+ mAdapter.notifyDataSetChanged();
+ break;
+ }
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- String selection;
+ String selection = null;
String selectionArgs[] = null;
- selection = ThemesColumns.PRESENT_AS_THEME + "=?";
- selectionArgs = new String[] {"1"};
+ String sortOrder = null;
+ Uri contentUri = null;
+
+ switch (id) {
+ case LOADER_ID_INSTALLED_THEMES:
+ selection = ThemesColumns.PRESENT_AS_THEME + "=?";
+ selectionArgs = new String[] { "1" };
+ // sort in ascending order but make sure the "default" theme is always first
+ sortOrder = "(" + ThemesColumns.IS_DEFAULT_THEME + "=1) DESC, "
+ + ThemesColumns.TITLE + " ASC";
+ contentUri = ThemesColumns.CONTENT_URI;
+ 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;
+ }
- // sort in ascending order but make sure the "default" theme is always first
- String sortOrder = "(" + ThemesColumns.IS_DEFAULT_THEME + "=1) DESC, "
- + ThemesColumns.TITLE + " ASC";
- return new CursorLoader(this, ThemesColumns.CONTENT_URI, null, selection,
+ return new CursorLoader(this, contentUri, null, selection,
selectionArgs, sortOrder);
}
@@ -405,7 +455,9 @@ public class ChooserActivity extends FragmentActivity
int pkgIdx = mCursor.getColumnIndex(ThemesColumns.PKG_NAME);
pkgName = mCursor.getString(pkgIdx);
}
- return ThemeFragment.newInstance(pkgName);
+ ThemeFragment f = ThemeFragment.newInstance(pkgName);
+ f.setCurrentTheme(mCurrentTheme);
+ return f;
}
@Override
diff --git a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
index f57f556..233a911 100644
--- a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
+++ b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
@@ -158,7 +158,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
private static final int LOADER_ID_RINGTONE = 9;
private static final int LOADER_ID_NOTIFICATION = 10;
private static final int LOADER_ID_ALARM = 11;
- private static final int LOADER_ID_APPLIED = 20;
private static ComponentName[] sIconComponents;
@@ -373,7 +372,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
int translationY = getDistanceToMoveBelowScreen(mAdditionalCards);
mAdditionalCards.setTranslationY(translationY);
- getLoaderManager().initLoader(LOADER_ID_APPLIED, null, this);
+ getLoaderManager().initLoader(LOADER_ID_ALL, null, this);
initCards(v);
@@ -1044,13 +1043,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
ThemesColumns.TITLE
};
break;
- case LOADER_ID_APPLIED:
- //TODO: Mix n match query should only be done once
- uri = ThemesContract.MixnMatchColumns.CONTENT_URI;
- projection = null;
- selection = null;
- selectionArgs = null;
- break;
}
return new CursorLoader(getActivity(), uri, projection, selection, selectionArgs, null);
}
@@ -1102,11 +1094,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
case LOADER_ID_ALARM:
loadAudible(RingtoneManager.TYPE_ALARM, c, true);
break;
- case LOADER_ID_APPLIED:
- getLoaderManager().initLoader(LOADER_ID_ALL, null, this);
- populateCurrentTheme(c);
- getLoaderManager().destroyLoader(LOADER_ID_APPLIED);
- break;
}
}
@@ -1187,18 +1174,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
}
- private void populateCurrentTheme(Cursor c) {
- c.moveToPosition(-1);
- while(c.moveToNext()) {
- int mixkeyIdx = c.getColumnIndex(ThemesContract.MixnMatchColumns.COL_KEY);
- int pkgIdx = c.getColumnIndex(ThemesContract.MixnMatchColumns.COL_VALUE);
- String mixkey = c.getString(mixkeyIdx);
- String component = ThemesContract.MixnMatchColumns.mixNMatchKeyToComponent(mixkey);
- String pkg = c.getString(pkgIdx);
- mCurrentTheme.put(component, pkg);
- }
- }
-
/**
* Determines whether a card should be shown or not.
* UX Rules:
@@ -1806,6 +1781,10 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
return mIsUninstalled;
}
+ public void setCurrentTheme(Map<String, String> currentTheme) {
+ mCurrentTheme = currentTheme;
+ }
+
class AnimationLoader extends AsyncTask<Void, Void, Boolean> {
Context mContext;
String mPkgName;