Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import java.util.ArrayList;
      4 
      5 import android.preference.Preference;
      6 import android.preference.PreferenceGroup;
      7 import android.text.TextUtils;
      8 
      9 import com.xtremelabs.robolectric.internal.Implementation;
     10 import com.xtremelabs.robolectric.internal.Implements;
     11 import 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)
     17 public 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