summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/trebuchet/preference/Preferences.java
diff options
context:
space:
mode:
authornebkat <nebkat@teamhacksung.org>2012-12-19 18:28:01 +0000
committernebkat <nebkat@teamhacksung.org>2012-12-19 18:47:40 +0000
commit24c41727bdd4736e3da8e964d1acbc1c374b6d2c (patch)
tree0e635e437d1b851b7f0d07290fee4291260121aa /src/com/cyanogenmod/trebuchet/preference/Preferences.java
parenta8012a552429889d04f7829317d602de23054864 (diff)
downloadandroid_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.java212
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;
+ }
+ }
}