package com.gettingmobile.goodnews.settings;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import roboguice.RoboGuice;
public final class ViewSettingsActivity extends AbstractSettingsActivity {
public static final String EXTRA_KEY_BASE = "com.gettingmobile.goodnews.";
public static final String EXTRA_KEY_SETTINGS_HANDLER_CLASS = EXTRA_KEY_BASE + "SETTINGS_HANDLER_CLASS";
private SettingsHandler settingsHandler = null;
public static Intent createIntent(Context packageContext, Class<? extends SettingsHandler> handlerClass) {
final Intent intent = new Intent(packageContext, ViewSettingsActivity.class);
intent.putExtra(EXTRA_KEY_SETTINGS_HANDLER_CLASS, handlerClass);
return intent;
}
private SettingsHandler createSettingsHandler() {
//noinspection unchecked
return RoboGuice.getInjector(this).getInstance((Class<? extends SettingsHandler>)
getIntent().getSerializableExtra(EXTRA_KEY_SETTINGS_HANDLER_CLASS));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settingsHandler = createSettingsHandler();
for (int resId : settingsHandler.getPreferenceResourceIds()) {
addPreferencesFromResource(resId);
}
/*
* We are using a trick for all the view settings to provide them all as preference screen in the global
* settings, they are each wrapped into a preference screen which we would like to omit if they are used
* standalone, which is the case here. So we take the single preference entry and -- if it is a preference
* screen -- set it as the preference root.
*/
final PreferenceScreen currentRoot = getPreferenceScreen();
if (currentRoot.getPreferenceCount() == 1) {
final Preference singlePref = currentRoot.getPreference(0);
if (singlePref instanceof PreferenceScreen) {
setPreferenceScreen((PreferenceScreen) singlePref);
}
}
settingsHandler.setup(this);
}
@Override
protected void onDestroy() {
settingsHandler.cleanup();
super.onDestroy();
}
}