diff options
author | Clark Scheff <clark@cyngn.com> | 2014-07-25 10:06:02 -0700 |
---|---|---|
committer | Clark Scheff <clark@cyngn.com> | 2014-07-28 10:31:05 -0700 |
commit | 350dcc49f02aa33568f55f92c284abcdeaafca40 (patch) | |
tree | 40c51cb86ce6b89f9ef995335e877bb0cfb4ca8d /src/org/cyanogenmod/theme | |
parent | e088e35d98c5b515eb0f790e9f3c6ca38d3f44e2 (diff) | |
download | packages_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.java | 82 | ||||
-rw-r--r-- | src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java | 31 |
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; |