1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.example.android.apis.preference;
18
19import com.example.android.apis.R;
20
21import android.content.Intent;
22import android.content.res.TypedArray;
23import android.net.Uri;
24import android.os.Bundle;
25import android.preference.CheckBoxPreference;
26import android.preference.EditTextPreference;
27import android.preference.ListPreference;
28import android.preference.PreferenceActivity;
29import android.preference.PreferenceCategory;
30import android.preference.PreferenceScreen;
31import android.preference.SwitchPreference;
32
33public class PreferencesFromCode extends PreferenceActivity {
34
35    @Override
36    protected void onCreate(Bundle savedInstanceState) {
37        super.onCreate(savedInstanceState);
38
39        setPreferenceScreen(createPreferenceHierarchy());
40    }
41
42    private PreferenceScreen createPreferenceHierarchy() {
43        // Root
44        PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
45
46        // Inline preferences
47        PreferenceCategory inlinePrefCat = new PreferenceCategory(this);
48        inlinePrefCat.setTitle(R.string.inline_preferences);
49        root.addPreference(inlinePrefCat);
50
51        // Checkbox preference
52        CheckBoxPreference checkboxPref = new CheckBoxPreference(this);
53        checkboxPref.setKey("checkbox_preference");
54        checkboxPref.setTitle(R.string.title_checkbox_preference);
55        checkboxPref.setSummary(R.string.summary_checkbox_preference);
56        inlinePrefCat.addPreference(checkboxPref);
57
58        // Switch preference
59        SwitchPreference switchPref = new SwitchPreference(this);
60        switchPref.setKey("switch_preference");
61        switchPref.setTitle(R.string.title_switch_preference);
62        switchPref.setSummary(R.string.summary_switch_preference);
63        inlinePrefCat.addPreference(switchPref);
64
65        // Dialog based preferences
66        PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
67        dialogBasedPrefCat.setTitle(R.string.dialog_based_preferences);
68        root.addPreference(dialogBasedPrefCat);
69
70        // Edit text preference
71        EditTextPreference editTextPref = new EditTextPreference(this);
72        editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
73        editTextPref.setKey("edittext_preference");
74        editTextPref.setTitle(R.string.title_edittext_preference);
75        editTextPref.setSummary(R.string.summary_edittext_preference);
76        dialogBasedPrefCat.addPreference(editTextPref);
77
78        // List preference
79        ListPreference listPref = new ListPreference(this);
80        listPref.setEntries(R.array.entries_list_preference);
81        listPref.setEntryValues(R.array.entryvalues_list_preference);
82        listPref.setDialogTitle(R.string.dialog_title_list_preference);
83        listPref.setKey("list_preference");
84        listPref.setTitle(R.string.title_list_preference);
85        listPref.setSummary(R.string.summary_list_preference);
86        dialogBasedPrefCat.addPreference(listPref);
87
88        // Launch preferences
89        PreferenceCategory launchPrefCat = new PreferenceCategory(this);
90        launchPrefCat.setTitle(R.string.launch_preferences);
91        root.addPreference(launchPrefCat);
92
93        /*
94         * The Preferences screenPref serves as a screen break (similar to page
95         * break in word processing). Like for other preference types, we assign
96         * a key here so that it is able to save and restore its instance state.
97         */
98        // Screen preference
99        PreferenceScreen screenPref = getPreferenceManager().createPreferenceScreen(this);
100        screenPref.setKey("screen_preference");
101        screenPref.setTitle(R.string.title_screen_preference);
102        screenPref.setSummary(R.string.summary_screen_preference);
103        launchPrefCat.addPreference(screenPref);
104
105        /*
106         * You can add more preferences to screenPref that will be shown on the
107         * next screen.
108         */
109
110        // Example of next screen toggle preference
111        CheckBoxPreference nextScreenCheckBoxPref = new CheckBoxPreference(this);
112        nextScreenCheckBoxPref.setKey("next_screen_toggle_preference");
113        nextScreenCheckBoxPref.setTitle(R.string.title_next_screen_toggle_preference);
114        nextScreenCheckBoxPref.setSummary(R.string.summary_next_screen_toggle_preference);
115        screenPref.addPreference(nextScreenCheckBoxPref);
116
117        // Intent preference
118        PreferenceScreen intentPref = getPreferenceManager().createPreferenceScreen(this);
119        intentPref.setIntent(new Intent().setAction(Intent.ACTION_VIEW)
120                .setData(Uri.parse("http://www.android.com")));
121        intentPref.setTitle(R.string.title_intent_preference);
122        intentPref.setSummary(R.string.summary_intent_preference);
123        launchPrefCat.addPreference(intentPref);
124
125        // Preference attributes
126        PreferenceCategory prefAttrsCat = new PreferenceCategory(this);
127        prefAttrsCat.setTitle(R.string.preference_attributes);
128        root.addPreference(prefAttrsCat);
129
130        // Visual parent toggle preference
131        CheckBoxPreference parentCheckBoxPref = new CheckBoxPreference(this);
132        parentCheckBoxPref.setTitle(R.string.title_parent_preference);
133        parentCheckBoxPref.setSummary(R.string.summary_parent_preference);
134        prefAttrsCat.addPreference(parentCheckBoxPref);
135
136        // Visual child toggle preference
137        // See res/values/attrs.xml for the <declare-styleable> that defines
138        // TogglePrefAttrs.
139        TypedArray a = obtainStyledAttributes(R.styleable.TogglePrefAttrs);
140        CheckBoxPreference childCheckBoxPref = new CheckBoxPreference(this);
141        childCheckBoxPref.setTitle(R.string.title_child_preference);
142        childCheckBoxPref.setSummary(R.string.summary_child_preference);
143        childCheckBoxPref.setLayoutResource(
144                a.getResourceId(R.styleable.TogglePrefAttrs_android_preferenceLayoutChild,
145                        0));
146        prefAttrsCat.addPreference(childCheckBoxPref);
147        a.recycle();
148
149        return root;
150    }
151}
152