From a503d05a5e142b94676724b527fb1b9cce8a2980 Mon Sep 17 00:00:00 2001 From: d34d Date: Wed, 18 Mar 2015 17:33:31 -0700 Subject: App Themer: Observe changes to themes database Change-Id: Ib61eedfaa50e9e6cfbba1e51ad4e3cea2b856edc REF: CHOOSER-62 --- .../theme/perapptheming/PerAppThemingWindow.java | 38 +++++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/com/cyngn/theme/perapptheming/PerAppThemingWindow.java b/src/com/cyngn/theme/perapptheming/PerAppThemingWindow.java index d33e7ed..84f43de 100644 --- a/src/com/cyngn/theme/perapptheming/PerAppThemingWindow.java +++ b/src/com/cyngn/theme/perapptheming/PerAppThemingWindow.java @@ -14,8 +14,10 @@ import android.content.res.Resources; import android.content.res.ThemeChangeRequest; import android.content.res.ThemeConfig; import android.content.res.ThemeManager; +import android.database.ContentObserver; import android.database.Cursor; import android.graphics.PixelFormat; +import android.net.Uri; import android.os.Handler; import android.os.IBinder; import android.provider.ThemesContract.ThemesColumns; @@ -168,6 +170,8 @@ public class PerAppThemingWindow extends Service implements OnTouchListener, final Configuration config = getResources().getConfiguration(); mThemeConfig = config != null ? config.themeConfig : null; loadThemes(); + getContentResolver().registerContentObserver(ThemesColumns.CONTENT_URI, true, + mThemesObserver); } @Override @@ -302,6 +306,10 @@ public class PerAppThemingWindow extends Service implements OnTouchListener, unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } + if (mThemesObserver != null) { + getContentResolver().unregisterContentObserver(mThemesObserver); + mThemesObserver = null; + } } @Override @@ -551,18 +559,37 @@ public class PerAppThemingWindow extends Service implements OnTouchListener, private void loadThemes() { String[] columns = {ThemesColumns._ID, ThemesColumns.TITLE, ThemesColumns.PKG_NAME}; - String selection = ThemesColumns.MODIFIES_OVERLAYS + "=?"; - String[] selectionArgs = {"1"}; + String selection = ThemesColumns.MODIFIES_OVERLAYS + "=? AND " + + ThemesColumns.INSTALL_STATE + "=?"; + String[] selectionArgs = {"1", "" + ThemesColumns.InstallState.INSTALLED}; String sortOrder = ThemesColumns.TITLE + " ASC"; Cursor c = getContentResolver().query(ThemesColumns.CONTENT_URI, columns, selection, selectionArgs, sortOrder); if (c != null) { - mAdapter = new ThemesAdapter(this, c); - mThemeList.setAdapter(mAdapter); - mThemeList.setOnItemClickListener(mThemeClickedListener); + if (mAdapter == null) { + mAdapter = new ThemesAdapter(this, c); + mThemeList.setAdapter(mAdapter); + mThemeList.setOnItemClickListener(mThemeClickedListener); + } else { + String pkgName = (String) mAdapter.getItem(0); + mAdapter.populateThemes(c); + mAdapter.setCurrentTheme(pkgName); + } } } + private ContentObserver mThemesObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + onChange(selfChange, null); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + loadThemes(); + } + }; + private void showThemeList(final int listSide) { if (mListLayoutParams == null) { mListLayoutParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, @@ -955,6 +982,7 @@ public class PerAppThemingWindow extends Service implements OnTouchListener, } private void populateThemes(Cursor cursor) { + mThemes.clear(); while(cursor.moveToNext()) { ThemeInfo info = new ThemeInfo( cursor.getString(cursor.getColumnIndex(ThemesColumns.PKG_NAME)), -- cgit v1.1