diff options
author | nebkat <nebkat@teamhacksung.org> | 2012-12-19 18:28:01 +0000 |
---|---|---|
committer | nebkat <nebkat@teamhacksung.org> | 2012-12-19 18:47:40 +0000 |
commit | 24c41727bdd4736e3da8e964d1acbc1c374b6d2c (patch) | |
tree | 0e635e437d1b851b7f0d07290fee4291260121aa /src/com/cyanogenmod/trebuchet/preference/Preferences.java | |
parent | a8012a552429889d04f7829317d602de23054864 (diff) | |
download | android_packages_apps_Trebuchet-24c41727bdd4736e3da8e964d1acbc1c374b6d2c.tar.gz android_packages_apps_Trebuchet-24c41727bdd4736e3da8e964d1acbc1c374b6d2c.tar.bz2 android_packages_apps_Trebuchet-24c41727bdd4736e3da8e964d1acbc1c374b6d2c.zip |
Preferences: Cleanup
Change-Id: I8973c8c043755ed01e1bb6107b09bb0eb734e66a
Diffstat (limited to 'src/com/cyanogenmod/trebuchet/preference/Preferences.java')
-rw-r--r-- | src/com/cyanogenmod/trebuchet/preference/Preferences.java | 212 |
1 files changed, 202 insertions, 10 deletions
diff --git a/src/com/cyanogenmod/trebuchet/preference/Preferences.java b/src/com/cyanogenmod/trebuchet/preference/Preferences.java index d4013a25c..abb692115 100644 --- a/src/com/cyanogenmod/trebuchet/preference/Preferences.java +++ b/src/com/cyanogenmod/trebuchet/preference/Preferences.java @@ -18,47 +18,239 @@ package com.cyanogenmod.trebuchet.preference; import android.content.Context; import android.content.SharedPreferences; +import android.content.res.Resources; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListAdapter; +import android.widget.TextView; +import com.cyanogenmod.trebuchet.LauncherApplication; import com.cyanogenmod.trebuchet.R; +import java.util.List; + public class Preferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "Trebuchet.Preferences"; - private SharedPreferences mPrefs; + private SharedPreferences mPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.preferences); - - mPrefs = getSharedPreferences(PreferencesProvider.PREFERENCES_KEY, + mPreferences = getSharedPreferences(PreferencesProvider.PREFERENCES_KEY, Context.MODE_PRIVATE); - - Preference version = findPreference("application_version"); - version.setTitle(getString(R.string.application_name) + " " + getString(R.string.application_version)); } @Override protected void onResume() { super.onResume(); - mPrefs.registerOnSharedPreferenceChangeListener(this); + mPreferences.registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { - mPrefs.unregisterOnSharedPreferenceChangeListener(this); super.onPause(); + mPreferences.unregisterOnSharedPreferenceChangeListener(this); + } + + @Override + public void onBuildHeaders(List<Header> target) { + loadHeadersFromResource(R.xml.preferences_headers, target); + updateHeaders(target); } + private void updateHeaders(List<Header> headers) { + int i = 0; + while (i < headers.size()) { + Header header = headers.get(i); + + // Version preference + if (header.id == R.id.preferences_application_version) { + header.title = getString(R.string.application_name) + " " + getString(R.string.application_version); + } + + // Remove dock header on tablets + if (LauncherApplication.isScreenLarge() && header.id == R.id.preferences_dock_section) { + headers.remove(header); + } + + // Increment if not removed + if (headers.get(i) == header) { + i++; + } + } + } + + @Override + public void setListAdapter(ListAdapter adapter) { + if (adapter == null) { + super.setListAdapter(null); + } else { + super.setListAdapter(new HeaderAdapter(this, getHeaders())); + } + } + + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - SharedPreferences.Editor editor = mPrefs.edit(); + SharedPreferences.Editor editor = mPreferences.edit(); editor.putBoolean(PreferencesProvider.PREFERENCES_CHANGED, true); editor.commit(); } + public static class HomescreenFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences_homescreen); + } + } + + public static class DrawerFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences_drawer); + } + } + + public static class DockFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences_dock); + } + } + + public static class GeneralFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences_general); + } + } + + private static class HeaderAdapter extends ArrayAdapter<Header> { + private static final int HEADER_TYPE_NORMAL = 0; + private static final int HEADER_TYPE_CATEGORY = 1; + + private static final int HEADER_TYPE_COUNT = HEADER_TYPE_CATEGORY + 1; + + private static class HeaderViewHolder { + ImageView icon; + TextView title; + TextView summary; + } + + private LayoutInflater mInflater; + + static int getHeaderType(Header header) { + if (header.id == R.id.preferences_application_section) { + return HEADER_TYPE_CATEGORY; + } else { + return HEADER_TYPE_NORMAL; + } + } + + @Override + public int getItemViewType(int position) { + Header header = getItem(position); + return getHeaderType(header); + } + + @Override + public boolean areAllItemsEnabled() { + return false; // because of categories + } + + @Override + public boolean isEnabled(int position) { + return getItemViewType(position) != HEADER_TYPE_CATEGORY; + } + + @Override + public int getViewTypeCount() { + return HEADER_TYPE_COUNT; + } + + @Override + public boolean hasStableIds() { + return true; + } + + public HeaderAdapter(Context context, List<Header> objects) { + super(context, 0, objects); + + mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + HeaderViewHolder holder; + Header header = getItem(position); + int headerType = getHeaderType(header); + View view = null; + + if (convertView == null) { + holder = new HeaderViewHolder(); + switch (headerType) { + case HEADER_TYPE_CATEGORY: + view = new TextView(getContext(), null, + android.R.attr.listSeparatorTextViewStyle); + holder.title = (TextView) view; + break; + + case HEADER_TYPE_NORMAL: + view = mInflater.inflate( + R.layout.preference_header_item, parent, + false); + holder.icon = (ImageView) view.findViewById(R.id.icon); + holder.title = (TextView) + view.findViewById(com.android.internal.R.id.title); + holder.summary = (TextView) + view.findViewById(com.android.internal.R.id.summary); + break; + } + view.setTag(holder); + } else { + view = convertView; + holder = (HeaderViewHolder) view.getTag(); + } + + // All view fields must be updated every time, because the view may be recycled + switch (headerType) { + case HEADER_TYPE_CATEGORY: + holder.title.setText(header.getTitle(getContext().getResources())); + break; + + case HEADER_TYPE_NORMAL: + holder.icon.setImageResource(header.iconRes); + holder.title.setText(header.getTitle(getContext().getResources())); + CharSequence summary = header.getSummary(getContext().getResources()); + if (!TextUtils.isEmpty(summary)) { + holder.summary.setVisibility(View.VISIBLE); + holder.summary.setText(summary); + } else { + holder.summary.setVisibility(View.GONE); + } + break; + } + + return view; + } + } } |