1package com.xtremelabs.robolectric.shadows;
2
3import java.util.ArrayList;
4
5import android.preference.Preference;
6import android.preference.PreferenceGroup;
7import android.text.TextUtils;
8
9import com.xtremelabs.robolectric.internal.Implementation;
10import com.xtremelabs.robolectric.internal.Implements;
11import com.xtremelabs.robolectric.internal.RealObject;
12
13/**
14 * See: http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/preference/PreferenceGroup.java;hb=HEAD
15 */
16@Implements(PreferenceGroup.class)
17public class ShadowPreferenceGroup extends ShadowPreference {
18
19    @RealObject private PreferenceGroup realPreferenceGroup;
20
21    private ArrayList<Preference> preferenceList = new ArrayList<Preference>();
22
23	@Implementation
24	public void addItemFromInflater(Preference preference) {
25		addPreference(preference);
26	}
27
28	@Implementation
29	public boolean addPreference(Preference preference) {
30		if (preferenceList.contains(preference)) {
31            return true;
32        }
33
34		// TODO currently punting on ordering logic
35		preferenceList.add(preference);
36
37		return true;
38	}
39
40	@Implementation
41	public Preference getPreference(int index) {
42		return preferenceList.get(index);
43	}
44
45	@Implementation
46	public int getPreferenceCount() {
47		return preferenceList.size();
48	}
49
50	@Implementation
51	public boolean removePreference(Preference preference) {
52		return preferenceList.remove(preference);
53	}
54
55	@Implementation
56	public void removeAll() {
57		preferenceList.clear();
58	}
59
60	/**
61	 * Note: copied wholesale from Android source
62	 * @param key
63	 * @return
64	 */
65	@Implementation
66	public Preference findPreference(CharSequence key) {
67        if (TextUtils.equals(getKey(), key)) {
68            return realPreferenceGroup;
69        }
70        final int preferenceCount = getPreferenceCount();
71        for (int i = 0; i < preferenceCount; i++) {
72            final Preference preference = getPreference(i);
73            final String curKey = preference.getKey();
74
75            if (curKey != null && curKey.equals(key)) {
76                return preference;
77            }
78
79            if (preference instanceof PreferenceGroup) {
80                final Preference returnedPreference = ((PreferenceGroup)preference)
81                        .findPreference(key);
82                if (returnedPreference != null) {
83                    return returnedPreference;
84                }
85            }
86        }
87
88        return null;
89    }
90
91	/**
92	 * Note: copied wholesale from Android source
93	 */
94	@Implementation
95	public void setEnabled(boolean enabled) {
96		super.setEnabled(enabled);
97
98		final int preferenceCount = getPreferenceCount();
99        for (int i = 0; i < preferenceCount; i++) {
100            getPreference(i).setEnabled(enabled);
101        }
102	}
103}
104