blob: 152b45c6462e4a43dc729f3ee9afa6d15e8471b6 [file] [log] [blame]
package com.android.clockwork.flags;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.net.Uri;
import android.provider.Settings;
import java.util.HashSet;
import java.util.Set;
/**
* Common functionality for tracking feature flags from Global Settings.
*
* <p>Allows for registration of Listeners and takes care of the details of dealing with feature
* names.
*
* <p>If your feature is controlled by a single flag consider using one of the generic observers in
* this package (e.g. {@link com.android.clockwork.flags.BooleanFlag}) or creating a new one.
*/
public abstract class FeatureFlagsObserver<Listener> extends ContentObserver {
public static final String LOG_TAG = "WearFlags";
private final ContentResolver mContentResolver;
private final Set<Listener> mListeners;
FeatureFlagsObserver(ContentResolver contentResolver) {
super(null);
mContentResolver = contentResolver;
mListeners = new HashSet<>();
}
public ContentResolver getContentResolver() {
return mContentResolver;
}
public void addListener(Listener listener) {
mListeners.add(listener);
}
public void removeListener(Listener listener) {
mListeners.remove(listener);
}
protected Set<Listener> getListeners() {
return mListeners;
}
protected void register(String feature) {
mContentResolver.registerContentObserver(Settings.Global.getUriFor(feature), false, this);
}
protected static boolean featureMatchesUri(String feature, Uri uri) {
return Settings.Global.getUriFor(feature).equals(uri);
}
protected int getGlobalSettingsInt(String key, int fallback) {
return Settings.Global.getInt(mContentResolver, key, fallback);
}
protected long getGlobalSettingsLong(String key, long fallback) {
return Settings.Global.getLong(mContentResolver, key, fallback);
}
@Override
public abstract void onChange(boolean selfChange, Uri uri);
}