package com.WazaBe.HoloEverywhere; import java.util.HashSet; import java.util.Set; public final class Settings { private static final class DefaultSettingsListener implements SettingsListener { @Override public void onChangePackageName(String oldPackageName, String newPackageName) { setWidgetsPackage(newPackageName + ".widget"); setPreferencePackage(newPackageName + ".preference"); } @Override public void onChangePreferencePackage(String oldPreferencePackage, String newPreferencePackage) { } @Override public void onChangeWidgetsPackage(String oldWidgetsPackage, String newWidgetsPackage) { } } public static interface SettingsListener { public void onChangePackageName(String oldPackageName, String newPackageName); public void onChangePreferencePackage(String oldPreferencePackage, String newPreferencePackage); public void onChangeWidgetsPackage(String oldWidgetsPackage, String newWidgetsPackage); } private static final String DEFAULT_PACKAGE_NAME = Settings.class .getPackage().getName(); private static final SettingsListener DEFAULT_SETTINGS_LISTENER = new DefaultSettingsListener(); private static final Set<SettingsListener> LISTENERS = new HashSet<SettingsListener>(); private static String packageName, widgetsPackage, preferencePackage; static { addSettingsListener(DEFAULT_SETTINGS_LISTENER); setPackageName(DEFAULT_PACKAGE_NAME); } public static void addSettingsListener(SettingsListener listener) { if (listener != null) { if (LISTENERS.contains(listener)) { synchronized (LISTENERS) { if (LISTENERS.contains(listener)) { LISTENERS.remove(listener); } } } LISTENERS.add(listener); } } public static String getPackageName() { return packageName; } public static String getPreferencePackage() { return preferencePackage; } public static String getWidgetsPackage() { return widgetsPackage; } /* * Nop. For execute static code block */ public static void init() { } private static void onChangePackageName(String oldPackageName, String newPackageName) { for (SettingsListener listener : LISTENERS) { if (listener != null) { listener.onChangePackageName(oldPackageName, newPackageName); } } } private static void onChangePreferencePackage(String oldPreferencePackage, String newPreferencePackage) { for (SettingsListener listener : LISTENERS) { if (listener != null) { listener.onChangePreferencePackage(oldPreferencePackage, newPreferencePackage); } } } private static void onChangeWidgetsPackage(String oldWidgetsPackage, String newWidgetsPackage) { for (SettingsListener listener : LISTENERS) { if (listener != null) { listener.onChangeWidgetsPackage(oldWidgetsPackage, newWidgetsPackage); } } } public static void removeDefaultSettingsListener() { removeSettingsListener(DEFAULT_SETTINGS_LISTENER); } public static void removeSettingsListener(SettingsListener listener) { if (listener != null) { if (LISTENERS.contains(listener)) { synchronized (LISTENERS) { if (LISTENERS.contains(listener)) { LISTENERS.remove(listener); } } } } } public static void setPackageName(String packageName) { if (packageName != null && !packageName.equals(Settings.packageName)) { String oldPackageName = Settings.packageName; Settings.packageName = packageName; onChangePackageName(oldPackageName, packageName); } } public static void setPreferencePackage(String preferencePackage) { if (preferencePackage != null && !preferencePackage.equals(Settings.preferencePackage)) { String oldPreferencePackage = Settings.preferencePackage; Settings.preferencePackage = preferencePackage; onChangePreferencePackage(oldPreferencePackage, preferencePackage); } } public static void setWidgetsPackage(String widgetsPackage) { if (widgetsPackage != null && !widgetsPackage.equals(Settings.widgetsPackage)) { String oldWidgetsPackage = Settings.widgetsPackage; Settings.widgetsPackage = widgetsPackage; onChangeWidgetsPackage(oldWidgetsPackage, widgetsPackage); } } }