From 8e0bced9e82cab8f3cdf8d1e0e86cd5bea95a68c Mon Sep 17 00:00:00 2001 From: d34d Date: Thu, 4 Jun 2015 16:30:51 -0700 Subject: Re-populate component selector when theme added/removed Change-Id: Ie8d3bba59bbf5333314594db01d96cc3a4d8aa50 REF: CHOOSER-94 --- src/com/cyngn/theme/chooser/ComponentSelector.java | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/com') diff --git a/src/com/cyngn/theme/chooser/ComponentSelector.java b/src/com/cyngn/theme/chooser/ComponentSelector.java index 57bc749..2b58ef2 100644 --- a/src/com/cyngn/theme/chooser/ComponentSelector.java +++ b/src/com/cyngn/theme/chooser/ComponentSelector.java @@ -3,11 +3,13 @@ */ package com.cyngn.theme.chooser; +import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ThemeUtils; import android.content.res.Resources; import android.content.res.TypedArray; +import android.database.ContentObserver; import android.database.Cursor; import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; @@ -110,6 +112,8 @@ public class ComponentSelector extends LinearLayout private TypefaceHelperCache mTypefaceCache; + private ThemesObserver mThemesObserver; + public ComponentSelector(Context context, AttributeSet attrs) { super(context, attrs); @@ -167,6 +171,7 @@ public class ComponentSelector extends LinearLayout } }); mTypefaceCache = TypefaceHelperCache.getInstance(); + mThemesObserver = new ThemesObserver(); } @Override @@ -176,6 +181,18 @@ public class ComponentSelector extends LinearLayout setEnabled(false); } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mThemesObserver.register(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + mThemesObserver.unregister(); + } + public void setComponentType(String component) { setComponentType(component, null, DEFAULT_COMPONENT_ID); } @@ -675,6 +692,29 @@ public class ComponentSelector extends LinearLayout } }; + private class ThemesObserver extends ContentObserver { + public ThemesObserver() { + super(null); + } + + public void register() { + mContext.getContentResolver().registerContentObserver( + ThemesColumns.CONTENT_URI, false, this); + } + + public void unregister() { + mContext.getContentResolver().unregisterContentObserver(this); + } + + @Override + public void onChange(boolean selfChange) { + // reload items by calling setComponentType() + final String componentType = mComponentType; + mComponentType = null; + setComponentType(componentType, mSelectedComponentPkgName); + } + } + public interface OnItemClickedListener { public void onItemClicked(String pkgName, long componentId); } -- cgit v1.2.3