diff options
author | Clark Scheff <clark@cyngn.com> | 2014-10-09 11:56:02 -0700 |
---|---|---|
committer | Clark Scheff <clark@cyngn.com> | 2014-10-14 18:05:59 +0000 |
commit | 825feaabfdd0adc9ccde23a8eb3f738752321b03 (patch) | |
tree | 4c976263b55a35c715645d66747d83bae07ad83b /src/com | |
parent | 053d1c88552a728350ac1f860d795321d0b46991 (diff) | |
download | packages_apps_ThemeChooser-825feaabfdd0adc9ccde23a8eb3f738752321b03.tar.gz packages_apps_ThemeChooser-825feaabfdd0adc9ccde23a8eb3f738752321b03.tar.bz2 packages_apps_ThemeChooser-825feaabfdd0adc9ccde23a8eb3f738752321b03.zip |
Wait for fragment to collapse before restarting a loader
Bad things happen when a theme is expanded and a new theme is
installed and added to the view pager. This patch sets a flag
that lets the ChooserActivity know it should restart the loader
once the fragment is collapsed. Once the fragment is collapsed
the loader will be restarted and new themes will be added to the
view pager.
Change-Id: I2b5fe64782ce278b7e8b09e4ff24755faa080bec
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/cyngn/theme/chooser/ChooserActivity.java | 116 |
1 files changed, 55 insertions, 61 deletions
diff --git a/src/com/cyngn/theme/chooser/ChooserActivity.java b/src/com/cyngn/theme/chooser/ChooserActivity.java index c581edd..9f26644 100644 --- a/src/com/cyngn/theme/chooser/ChooserActivity.java +++ b/src/com/cyngn/theme/chooser/ChooserActivity.java @@ -122,12 +122,11 @@ public class ChooserActivity extends FragmentActivity ImageView mCustomBackground; - private ThemesObserver mThemesObserver; - // Current system theme configuration as component -> pkgName private Map<String, String> mCurrentTheme = new HashMap<String, String>(); private boolean mIsPickingImage = false; + private boolean mRestartLoaderOnCollapse = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -176,18 +175,8 @@ public class ChooserActivity extends FragmentActivity public void onClick(View v) { if (mIsAnimating) return; hideSaveApplyButton(); - mExpanded = false; mContainer.setClickable(false); - final ThemeFragment f = getCurrentFragment(); - if (f != null) { - f.fadeOutCards(new Runnable() { - public void run() { - mContainer.collapse(); - f.collapse(true); - } - }); - } - setAnimatingStateAndScheduleFinish(); + collapse(true); } }); @@ -267,7 +256,22 @@ public class ChooserActivity extends FragmentActivity if (Intent.ACTION_MAIN.equals(intent.getAction()) && intent.hasExtra(EXTRA_PKGNAME)) { mSelectedTheme = intent.getStringExtra(EXTRA_PKGNAME); if (mPager != null) { - getSupportLoaderManager().restartLoader(LOADER_ID_INSTALLED_THEMES, null, this); + startLoader(LOADER_ID_INSTALLED_THEMES); + if (mExpanded) { + int collapseDelay = ThemeFragment.ANIMATE_START_DELAY; + if (mSelector.isEnabled()) { + // onBackPressed() has all the necessary logic for collapsing the + // component selector, so we call it here. + onBackPressed(); + collapseDelay += ThemeFragment.ANIMATE_DURATION; + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + collapse(false); + } + }, collapseDelay); + } } } } @@ -279,6 +283,10 @@ public class ChooserActivity extends FragmentActivity public void run() { mIsAnimating = false; mContainer.setIsAnimating(false); + if (mRestartLoaderOnCollapse) { + mRestartLoaderOnCollapse = false; + startLoader(LOADER_ID_INSTALLED_THEMES); + } } }, FINISH_ANIMATION_DELAY); if (mExpanded) { @@ -380,7 +388,7 @@ public class ChooserActivity extends FragmentActivity if (!isSuccess) { mAppliedBaseTheme = null; } - getSupportLoaderManager().restartLoader(LOADER_ID_APPLIED, null, this); + startLoader(LOADER_ID_APPLIED); } unlockPager(); } @@ -449,6 +457,20 @@ public class ChooserActivity extends FragmentActivity } } + public void collapse(final boolean applyTheme) { + mExpanded = false; + final ThemeFragment f = getCurrentFragment(); + if (f != null) { + f.fadeOutCards(new Runnable() { + public void run() { + mContainer.collapse(); + f.collapse(applyTheme); + } + }); + } + setAnimatingStateAndScheduleFinish(); + } + public void pickExternalWallpaper() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(TYPE_IMAGE); @@ -499,18 +521,13 @@ public class ChooserActivity extends FragmentActivity mThemeChanging = false; if (!mIsPickingImage) { - getSupportLoaderManager().restartLoader(LOADER_ID_APPLIED, null, this); + startLoader(LOADER_ID_APPLIED); } else { mIsPickingImage = false; } IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED); registerReceiver(mWallpaperChangeReceiver, filter); - - // register content observer for changes in installed themes - mThemesObserver = new ThemesObserver(new Handler()); - getContentResolver().registerContentObserver(ThemesColumns.CONTENT_URI, true, - mThemesObserver); } @Override @@ -532,16 +549,7 @@ public class ChooserActivity extends FragmentActivity hideSaveApplyButton(); if (f != null) f.clearChanges(); } - mExpanded = false; - if (f != null) { - f.fadeOutCards(new Runnable() { - public void run() { - mContainer.collapse(); - f.collapse(false); - } - }); - } - setAnimatingStateAndScheduleFinish(); + collapse(false); } else { if (f != null && f.isShowingConfirmCancelOverlay()) { f.hideConfirmCancelOverlay(); @@ -561,12 +569,6 @@ public class ChooserActivity extends FragmentActivity if (f != null) { mSelectedTheme = f.getThemePackageName(); } - - // unregister our installed themes content observer - if (mThemesObserver != null) { - getContentResolver().unregisterContentObserver(mThemesObserver); - mThemesObserver = null; - } } @Override @@ -703,10 +705,25 @@ public class ChooserActivity extends FragmentActivity } }; + private <T> void startLoader(int loaderId) { + final LoaderManager manager = getSupportLoaderManager(); + final Loader<T> loader = manager.getLoader(loaderId); + if (loader != null) { + manager.restartLoader(loaderId, null, this); + } else { + manager.initLoader(loaderId, null, this); + } + } + @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (mThemeChanging) return; + if (mExpanded) { + mRestartLoaderOnCollapse = true; + return; + } + switch (loader.getId()) { case LOADER_ID_INSTALLED_THEMES: // Swap the new cursor in. (The framework will take care of closing the @@ -731,7 +748,7 @@ public class ChooserActivity extends FragmentActivity if (mAnimateContentIn) animateContentIn(); break; case LOADER_ID_APPLIED: - getSupportLoaderManager().restartLoader(LOADER_ID_INSTALLED_THEMES, null, this); + startLoader(LOADER_ID_INSTALLED_THEMES); populateCurrentTheme(data); break; } @@ -781,29 +798,6 @@ public class ChooserActivity extends FragmentActivity selectionArgs, sortOrder); } - class ThemesObserver extends ContentObserver { - /** - * Creates a content observer. - * - * @param handler The handler to run {@link #onChange} on, or null if none. - */ - public ThemesObserver(Handler handler) { - super(handler); - } - - @Override - public void onChange(boolean selfChange) { - ThemeFragment f = getCurrentFragment(); - if (f != null) { - // remember what theme we were on in case the position changes, this way - // we can keep the user on this them instead of jumping around. - mSelectedTheme = f.getThemePackageName(); - } - getSupportLoaderManager().restartLoader(LOADER_ID_INSTALLED_THEMES, null, - ChooserActivity.this); - } - } - public class ThemesAdapter extends NewFragmentStatePagerAdapter { private ArrayList<String> mInstalledThemes; private String mAppliedThemeTitle; |