summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClark Scheff <clark@cyngn.com>2014-08-28 10:59:39 -0700
committerClark Scheff <clark@cyngn.com>2014-08-28 10:59:39 -0700
commit33679232291538f570425ae93b9175b69c420460 (patch)
tree16d40713c5c569ff1fe083da846662d48f47fdf3
parent08462be0bded4000679b95de3bcfe318aecf462b (diff)
downloadpackages_apps_ThemeChooser-33679232291538f570425ae93b9175b69c420460.zip
packages_apps_ThemeChooser-33679232291538f570425ae93b9175b69c420460.tar.gz
packages_apps_ThemeChooser-33679232291538f570425ae93b9175b69c420460.tar.bz2
Use a ContentObserver to listen for changes of installed themes
This solves two issues. If a theme is installed while in the theme chooser, the themes will be re-populated with the newly installed theme and if a theme is uninstalled the themes will also be re-populated. Change-Id: I960d6fbb79b18258dca79f00fc380878fe334878
-rw-r--r--src/com/cyngn/theme/chooser/ChooserActivity.java38
-rw-r--r--src/com/cyngn/theme/chooser/ThemeFragment.java19
2 files changed, 35 insertions, 22 deletions
diff --git a/src/com/cyngn/theme/chooser/ChooserActivity.java b/src/com/cyngn/theme/chooser/ChooserActivity.java
index b96f59f..76f1e5b 100644
--- a/src/com/cyngn/theme/chooser/ChooserActivity.java
+++ b/src/com/cyngn/theme/chooser/ChooserActivity.java
@@ -14,6 +14,7 @@ import android.content.IntentFilter;
import android.content.res.Resources;
import android.content.res.ThemeConfig;
import android.content.res.ThemeManager;
+import android.database.ContentObserver;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.ColorMatrix;
@@ -66,7 +67,6 @@ public class ChooserActivity extends FragmentActivity
private static final String TAG = ChooserActivity.class.getSimpleName();
public static final String DEFAULT = ThemeConfig.HOLO_DEFAULT;
- public static final int REQUEST_UNINSTALL = 1; // Request code
public static final String EXTRA_PKGNAME = "pkgName";
private static final int OFFSCREEN_PAGE_LIMIT = 3;
@@ -108,6 +108,8 @@ 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>();
@@ -431,6 +433,11 @@ public class ChooserActivity extends FragmentActivity
// clear out the newly installed themes count
PreferenceUtils.setNewlyInstalledThemeCount(this, 0);
+
+ // register content observer for changes in installed themes
+ mThemesObserver = new ThemesObserver(new Handler());
+ getContentResolver().registerContentObserver(ThemesColumns.CONTENT_URI, true,
+ mThemesObserver);
}
@Override
@@ -480,6 +487,12 @@ 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
@@ -674,6 +687,26 @@ public class ChooserActivity extends FragmentActivity
}
+ 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) {
+ mAdapter = new ThemesAdapter(ChooserActivity.this);
+ mPager.setAdapter(mAdapter);
+ getSupportLoaderManager().restartLoader(LOADER_ID_INSTALLED_THEMES, null,
+ ChooserActivity.this);
+ }
+ }
+
public class ThemesAdapter extends FragmentStatePagerAdapter {
private Cursor mCursor;
private Context mContext;
@@ -704,9 +737,6 @@ public class ChooserActivity extends FragmentActivity
@Override
public int getItemPosition(Object object) {
ThemeFragment fragment = (ThemeFragment) object;
- if (fragment.isUninstalled()) {
- return POSITION_NONE;
- }
return super.getItemPosition(object);
}
diff --git a/src/com/cyngn/theme/chooser/ThemeFragment.java b/src/com/cyngn/theme/chooser/ThemeFragment.java
index ee7c896..3aafaee 100644
--- a/src/com/cyngn/theme/chooser/ThemeFragment.java
+++ b/src/com/cyngn/theme/chooser/ThemeFragment.java
@@ -227,7 +227,6 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
protected Handler mHandler;
- protected boolean mIsUninstalled;
protected int mActiveCardId = -1;
protected ComponentSelector mSelector;
// Supported components for the theme this fragment represents
@@ -2008,23 +2007,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
Uri packageURI = Uri.parse("package:" + mPkgName);
Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, true);
- startActivityForResult(uninstallIntent,
- ChooserActivity.REQUEST_UNINSTALL);
- }
-
- public void onActivityResult (int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_UNINSTALL) {
- try {
- ApplicationInfo ainfo = getActivity()
- .getPackageManager().getApplicationInfo(mPkgName, 0);
- } catch (PackageManager.NameNotFoundException e) {
- mIsUninstalled = true;
- }
- }
- }
-
- public boolean isUninstalled() {
- return mIsUninstalled;
+ startActivity(uninstallIntent);
}
public void setCurrentTheme(Map<String, String> currentTheme) {