package com.gettingmobile.goodnews.settings;
import android.app.Dialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import com.gettingmobile.android.app.actions.Action;
import com.gettingmobile.android.app.actions.ActionContext;
import com.gettingmobile.android.app.actions.ActionContextActivityAccessor;
import com.gettingmobile.goodnews.Application;
import roboguice.activity.RoboPreferenceActivity;
abstract class AbstractSettingsActivity extends RoboPreferenceActivity
implements ActionContext<Application>, SettingsManager, PreferenceActionController.PreferenceProvider {
protected final PreferenceActionController actionController = new PreferenceActionController(this, this);
private ActionContextActivityAccessor<Application, AbstractSettingsActivity> accessor = null;
public AbstractSettingsActivity() {
}
/*
* lifecycle management
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*
* handle activity configuration changes
*/
final Object nonConfigurationInstance = getLastNonConfigurationInstance();
if (nonConfigurationInstance != null) {
final AbstractSettingsActivity prevInstance = (AbstractSettingsActivity) nonConfigurationInstance;
accessor = prevInstance.accessor;
accessor.setActivity(this);
} else {
accessor = new ActionContextActivityAccessor<Application, AbstractSettingsActivity>(this);
}
}
@Override
public Object onRetainNonConfigurationInstance() {
return this;
}
/*
* interface implementations
*/
@Override
public android.app.Activity getActivity() {
return accessor.getActivity();
}
@Override
public Application getApp() {
return (Application) getApplication();
}
@Override
public ActionContext<Application> getActionContext() {
return this;
}
@Override
public void registerChangeListener(String key, Preference.OnPreferenceChangeListener l) {
final Preference pref = findPreference(key);
pref.setOnPreferenceChangeListener(l);
}
@Override
public void registerAction(String key, Action<?> action) {
actionController.registerAction(key, action);
}
@Override
public <A extends Action<?>> A registerAction(String key, Class<A> actionClass) {
return actionController.registerAction(key, actionClass);
}
@Override
public void unregisterAction(String key) {
actionController.unregisterAction(key);
}
@Override
public void updateActionPreferenceStatus() {
//noinspection unchecked
new AsyncTask<Object, Object, Object>() {
@Override
protected Object doInBackground(Object... objects) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
actionController.updateActionPreferenceStatus();
}
});
return null;
}
}.execute();
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
return actionController.fireAction(preference.getKey()) ||
super.onPreferenceTreeClick(preferenceScreen, preference);
}
/*
* dialog handling
*/
@Override
protected Dialog onCreateDialog(int id) {
final Dialog dlg = accessor.onCreateDialog(id);
return dlg != null ? dlg : super.onCreateDialog(id);
}
@Override
public void showWaitDialog() {
accessor.showWaitDialog();
}
@Override
public void dismissWaitDialog() {
accessor.dismissWaitDialog();
}
}