package com.numix.calculator.view; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; import android.preference.SwitchPreference; import android.view.View; import android.widget.ListView; import com.numix.calculator.CalculatorSettings; import com.numix.calculator.Preferences; import com.numix.calculator.R; public class PreferencesFragment extends PreferenceFragment { private static final String EXTRA_LIST_POSITION = "list_position"; private static final String EXTRA_LIST_VIEW_OFFSET = "list_view_top"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preferences); SwitchPreference holo = (SwitchPreference) findPreference("THEME_STYLE"); if(holo != null) { holo.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if((Boolean) newValue != CalculatorSettings.useLightTheme(getActivity())) { // Update app icon int lightState = (Boolean) newValue ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; int darkState = (Boolean) newValue ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED : PackageManager.COMPONENT_ENABLED_STATE_ENABLED; getActivity().getPackageManager().setComponentEnabledSetting( new ComponentName("com.numix.calculator", "com.numix.calculator.Calculator-Light"), lightState, PackageManager.DONT_KILL_APP); getActivity().getPackageManager().setComponentEnabledSetting( new ComponentName("com.numix.calculator", "com.numix.calculator.Calculator-Dark"), darkState, PackageManager.DONT_KILL_APP); // Create a new intent to relaunch the settings Intent intent = new Intent(getActivity(), Preferences.class); // Preserve the list offsets int itemPosition = getListView().getFirstVisiblePosition(); View child = getListView().getChildAt(0); int itemOffset = child != null ? child.getTop() : 0; intent.putExtra(EXTRA_LIST_POSITION, itemPosition); intent.putExtra(EXTRA_LIST_VIEW_OFFSET, itemOffset); // Go startActivity(intent); getActivity().finish(); // Set a smooth fade transition getActivity().overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } return true; } }); } Preference about = findPreference("ABOUT"); if(about != null) { String versionName = ""; try { versionName = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName; } catch(NameNotFoundException e) { e.printStackTrace(); } about.setTitle(about.getTitle() + " " + versionName); } } @Override public void onStart() { super.onStart(); // Restore the scroll position, if any final Bundle args = getArguments(); if (args != null) { getListView().setSelectionFromTop( args.getInt(EXTRA_LIST_POSITION, 0), args.getInt(EXTRA_LIST_VIEW_OFFSET, 0) ); } } public ListView getListView() { return (ListView) getView().findViewById(android.R.id.list); } }