diff options
-rw-r--r-- | api/current.xml | 74 | ||||
-rw-r--r-- | core/java/android/preference/PreferenceActivity.java | 5 | ||||
-rw-r--r-- | core/java/android/view/View.java | 330 | ||||
-rw-r--r-- | core/java/android/view/ViewGroup.java | 13 | ||||
-rw-r--r-- | core/java/android/widget/GridView.java | 3 | ||||
-rw-r--r-- | core/java/android/widget/ListView.java | 3 | ||||
-rw-r--r-- | core/res/res/drawable/activated_background.xml | 20 | ||||
-rw-r--r-- | core/res/res/drawable/activated_background_light.xml | 20 | ||||
-rw-r--r-- | core/res/res/layout/preference_header_item.xml (renamed from core/res/res/layout/preference_list_item.xml) | 4 | ||||
-rwxr-xr-x | core/res/res/values/attrs.xml | 41 | ||||
-rw-r--r-- | core/res/res/values/public.xml | 22 | ||||
-rw-r--r-- | core/res/res/values/themes.xml | 4 |
12 files changed, 391 insertions, 148 deletions
diff --git a/api/current.xml b/api/current.xml index a57ba84..f0a9810 100644 --- a/api/current.xml +++ b/api/current.xml @@ -2242,6 +2242,17 @@ visibility="public" > </field> +<field name="activatedBackgroundIndicator" + type="int" + transient="false" + volatile="false" + value="16843582" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="activityCloseEnterAnimation" type="int" transient="false" @@ -9117,6 +9128,17 @@ visibility="public" > </field> +<field name="state_activated" + type="int" + transient="false" + volatile="false" + value="16843583" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="state_active" type="int" transient="false" @@ -16271,7 +16293,7 @@ type="int" transient="false" volatile="false" - value="17039408" + value="17039393" static="true" final="true" deprecated="not deprecated" @@ -197603,6 +197625,19 @@ <parameter name="container" type="android.util.SparseArray<android.os.Parcelable>"> </parameter> </method> +<method name="dispatchSetActivated" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="protected" +> +<parameter name="activated" type="boolean"> +</parameter> +</method> <method name="dispatchSetPressed" return="void" abstract="false" @@ -198972,6 +199007,17 @@ <parameter name="drawable" type="android.graphics.drawable.Drawable"> </parameter> </method> +<method name="isActivated" + return="boolean" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> <method name="isClickable" return="boolean" abstract="false" @@ -200207,6 +200253,19 @@ <parameter name="event" type="android.view.accessibility.AccessibilityEvent"> </parameter> </method> +<method name="setActivated" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="activated" type="boolean"> +</parameter> +</method> <method name="setAlpha" return="void" abstract="false" @@ -203073,6 +203132,19 @@ <parameter name="container" type="android.util.SparseArray<android.os.Parcelable>"> </parameter> </method> +<method name="dispatchSetActivated" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="activated" type="boolean"> +</parameter> +</method> <method name="dispatchSetSelected" return="void" abstract="false" diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index 60d810e..4247ae5 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -241,7 +241,7 @@ public abstract class PreferenceActivity extends ListActivity implements View view; if (convertView == null) { - view = mInflater.inflate(com.android.internal.R.layout.preference_list_item, + view = mInflater.inflate(com.android.internal.R.layout.preference_header_item, parent, false); holder = new HeaderViewHolder(); holder.icon = (ImageView) view.findViewById(com.android.internal.R.id.icon); @@ -446,6 +446,9 @@ public abstract class PreferenceActivity extends ListActivity implements if (!mSinglePane) { // Multi-pane. getListView().setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); + if (mCurHeader != null) { + setSelectedHeader(mCurHeader); + } mPrefsContainer.setVisibility(View.VISIBLE); } } else { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 51c3879..d04007c 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -986,7 +986,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see android.graphics.drawable.Drawable * @see #getDrawableState() */ - protected static final int[] EMPTY_STATE_SET = {}; + protected static final int[] EMPTY_STATE_SET; /** * Indicates the view is enabled. States are used with * {@link android.graphics.drawable.Drawable} to change the drawing of the @@ -995,7 +995,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see android.graphics.drawable.Drawable * @see #getDrawableState() */ - protected static final int[] ENABLED_STATE_SET = {R.attr.state_enabled}; + protected static final int[] ENABLED_STATE_SET; /** * Indicates the view is focused. States are used with * {@link android.graphics.drawable.Drawable} to change the drawing of the @@ -1004,7 +1004,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see android.graphics.drawable.Drawable * @see #getDrawableState() */ - protected static final int[] FOCUSED_STATE_SET = {R.attr.state_focused}; + protected static final int[] FOCUSED_STATE_SET; /** * Indicates the view is selected. States are used with * {@link android.graphics.drawable.Drawable} to change the drawing of the @@ -1013,7 +1013,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see android.graphics.drawable.Drawable * @see #getDrawableState() */ - protected static final int[] SELECTED_STATE_SET = {R.attr.state_selected}; + protected static final int[] SELECTED_STATE_SET; /** * Indicates the view is pressed. States are used with * {@link android.graphics.drawable.Drawable} to change the drawing of the @@ -1023,7 +1023,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #getDrawableState() * @hide */ - protected static final int[] PRESSED_STATE_SET = {R.attr.state_pressed}; + protected static final int[] PRESSED_STATE_SET; /** * Indicates the view's window has focus. States are used with * {@link android.graphics.drawable.Drawable} to change the drawing of the @@ -1032,8 +1032,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see android.graphics.drawable.Drawable * @see #getDrawableState() */ - protected static final int[] WINDOW_FOCUSED_STATE_SET = - {R.attr.state_window_focused}; + protected static final int[] WINDOW_FOCUSED_STATE_SET; // Doubles /** * Indicates the view is enabled and has the focus. @@ -1041,48 +1040,42 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #ENABLED_STATE_SET * @see #FOCUSED_STATE_SET */ - protected static final int[] ENABLED_FOCUSED_STATE_SET = - stateSetUnion(ENABLED_STATE_SET, FOCUSED_STATE_SET); + protected static final int[] ENABLED_FOCUSED_STATE_SET; /** * Indicates the view is enabled and selected. * * @see #ENABLED_STATE_SET * @see #SELECTED_STATE_SET */ - protected static final int[] ENABLED_SELECTED_STATE_SET = - stateSetUnion(ENABLED_STATE_SET, SELECTED_STATE_SET); + protected static final int[] ENABLED_SELECTED_STATE_SET; /** * Indicates the view is enabled and that its window has focus. * * @see #ENABLED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(ENABLED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is focused and selected. * * @see #FOCUSED_STATE_SET * @see #SELECTED_STATE_SET */ - protected static final int[] FOCUSED_SELECTED_STATE_SET = - stateSetUnion(FOCUSED_STATE_SET, SELECTED_STATE_SET); + protected static final int[] FOCUSED_SELECTED_STATE_SET; /** * Indicates the view has the focus and that its window has the focus. * * @see #FOCUSED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is selected and that its window has the focus. * * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET; // Triples /** * Indicates the view is enabled, focused and selected. @@ -1091,8 +1084,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #FOCUSED_STATE_SET * @see #SELECTED_STATE_SET */ - protected static final int[] ENABLED_FOCUSED_SELECTED_STATE_SET = - stateSetUnion(ENABLED_FOCUSED_STATE_SET, SELECTED_STATE_SET); + protected static final int[] ENABLED_FOCUSED_SELECTED_STATE_SET; /** * Indicates the view is enabled, focused and its window has the focus. * @@ -1100,8 +1092,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #FOCUSED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(ENABLED_FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is enabled, selected and its window has the focus. * @@ -1109,8 +1100,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(ENABLED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is focused, selected and its window has the focus. * @@ -1118,8 +1108,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is enabled, focused, selected and its window * has the focus. @@ -1129,28 +1118,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(ENABLED_FOCUSED_SELECTED_STATE_SET, - WINDOW_FOCUSED_STATE_SET); - + protected static final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed and its window has the focus. * * @see #PRESSED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed and selected. * * @see #PRESSED_STATE_SET * @see #SELECTED_STATE_SET */ - protected static final int[] PRESSED_SELECTED_STATE_SET = - stateSetUnion(PRESSED_STATE_SET, SELECTED_STATE_SET); - + protected static final int[] PRESSED_SELECTED_STATE_SET; /** * Indicates the view is pressed, selected and its window has the focus. * @@ -1158,18 +1140,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed and focused. * * @see #PRESSED_STATE_SET * @see #FOCUSED_STATE_SET */ - protected static final int[] PRESSED_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_STATE_SET, FOCUSED_STATE_SET); - + protected static final int[] PRESSED_FOCUSED_STATE_SET; /** * Indicates the view is pressed, focused and its window has the focus. * @@ -1177,9 +1155,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #FOCUSED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed, focused and selected. * @@ -1187,9 +1163,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #FOCUSED_STATE_SET */ - protected static final int[] PRESSED_FOCUSED_SELECTED_STATE_SET = - stateSetUnion(PRESSED_FOCUSED_STATE_SET, SELECTED_STATE_SET); - + protected static final int[] PRESSED_FOCUSED_SELECTED_STATE_SET; /** * Indicates the view is pressed, focused, selected and its window has the focus. * @@ -1198,18 +1172,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed and enabled. * * @see #PRESSED_STATE_SET * @see #ENABLED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_STATE_SET = - stateSetUnion(PRESSED_STATE_SET, ENABLED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_STATE_SET; /** * Indicates the view is pressed, enabled and its window has the focus. * @@ -1217,9 +1187,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #ENABLED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed, enabled and selected. * @@ -1227,9 +1195,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #ENABLED_STATE_SET * @see #SELECTED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_SELECTED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_STATE_SET, SELECTED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_SELECTED_STATE_SET; /** * Indicates the view is pressed, enabled, selected and its window has the * focus. @@ -1239,9 +1205,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed, enabled and focused. * @@ -1249,9 +1213,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #ENABLED_STATE_SET * @see #FOCUSED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_STATE_SET, FOCUSED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_FOCUSED_STATE_SET; /** * Indicates the view is pressed, enabled, focused and its window has the * focus. @@ -1261,9 +1223,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #FOCUSED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_FOCUSED_STATE_SET, WINDOW_FOCUSED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET; /** * Indicates the view is pressed, enabled, focused and selected. * @@ -1272,9 +1232,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #SELECTED_STATE_SET * @see #FOCUSED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_FOCUSED_STATE_SET, SELECTED_STATE_SET); - + protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET; /** * Indicates the view is pressed, enabled, focused, selected and its window * has the focus. @@ -1285,47 +1243,137 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * @see #FOCUSED_STATE_SET * @see #WINDOW_FOCUSED_STATE_SET */ - protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = - stateSetUnion(PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET, WINDOW_FOCUSED_STATE_SET); + protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; /** * The order here is very important to {@link #getDrawableState()} */ - private static final int[][] VIEW_STATE_SETS = { - EMPTY_STATE_SET, // 0 0 0 0 0 - WINDOW_FOCUSED_STATE_SET, // 0 0 0 0 1 - SELECTED_STATE_SET, // 0 0 0 1 0 - SELECTED_WINDOW_FOCUSED_STATE_SET, // 0 0 0 1 1 - FOCUSED_STATE_SET, // 0 0 1 0 0 - FOCUSED_WINDOW_FOCUSED_STATE_SET, // 0 0 1 0 1 - FOCUSED_SELECTED_STATE_SET, // 0 0 1 1 0 - FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 0 0 1 1 1 - ENABLED_STATE_SET, // 0 1 0 0 0 - ENABLED_WINDOW_FOCUSED_STATE_SET, // 0 1 0 0 1 - ENABLED_SELECTED_STATE_SET, // 0 1 0 1 0 - ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 0 1 0 1 1 - ENABLED_FOCUSED_STATE_SET, // 0 1 1 0 0 - ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET, // 0 1 1 0 1 - ENABLED_FOCUSED_SELECTED_STATE_SET, // 0 1 1 1 0 - ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 0 1 1 1 1 - PRESSED_STATE_SET, // 1 0 0 0 0 - PRESSED_WINDOW_FOCUSED_STATE_SET, // 1 0 0 0 1 - PRESSED_SELECTED_STATE_SET, // 1 0 0 1 0 - PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 1 0 0 1 1 - PRESSED_FOCUSED_STATE_SET, // 1 0 1 0 0 - PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET, // 1 0 1 0 1 - PRESSED_FOCUSED_SELECTED_STATE_SET, // 1 0 1 1 0 - PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 1 0 1 1 1 - PRESSED_ENABLED_STATE_SET, // 1 1 0 0 0 - PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET, // 1 1 0 0 1 - PRESSED_ENABLED_SELECTED_STATE_SET, // 1 1 0 1 0 - PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 1 1 0 1 1 - PRESSED_ENABLED_FOCUSED_STATE_SET, // 1 1 1 0 0 - PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET, // 1 1 1 0 1 - PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET, // 1 1 1 1 0 - PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, // 1 1 1 1 1 + private static final int[][] VIEW_STATE_SETS; + + static final int VIEW_STATE_WINDOW_FOCUSED = 1<<0; + static final int VIEW_STATE_SELECTED = 1<<1; + static final int VIEW_STATE_FOCUSED = 1<<2; + static final int VIEW_STATE_ENABLED = 1<<3; + static final int VIEW_STATE_PRESSED = 1<<4; + static final int VIEW_STATE_ACTIVATED = 1<<5; + + static final int[] VIEW_STATE_IDS = new int[] { + R.attr.state_window_focused, VIEW_STATE_WINDOW_FOCUSED, + R.attr.state_selected, VIEW_STATE_SELECTED, + R.attr.state_focused, VIEW_STATE_FOCUSED, + R.attr.state_enabled, VIEW_STATE_ENABLED, + R.attr.state_pressed, VIEW_STATE_PRESSED, + R.attr.state_activated, VIEW_STATE_ACTIVATED, }; + static { + int[] orderedIds = new int[VIEW_STATE_IDS.length]; + for (int i=0; i<R.styleable.ViewDrawableStates.length; i++) { + int viewState = R.styleable.ViewDrawableStates[i]; + for (int j=0; j<VIEW_STATE_IDS.length; j+=2) { + if (VIEW_STATE_IDS[j] == viewState) { + orderedIds[i*2] = viewState; + orderedIds[i*2+1] = VIEW_STATE_IDS[j+1]; + } + } + } + final int NUM_BITS = VIEW_STATE_IDS.length/2; + VIEW_STATE_SETS = new int[1<<NUM_BITS][]; + for (int i=0; i<VIEW_STATE_SETS.length; i++) { + int numBits = Integer.bitCount(i); + int[] set = new int[numBits]; + int pos = 0; + for (int j=0; j<orderedIds.length; j+=2) { + if ((i&orderedIds[j+1]) != 0) { + if (false) { + Log.i("View", "Index #" + i + " @ ordered #" + j + + " resid=0x" + Integer.toHexString(orderedIds[j]) + + " mask " + orderedIds[j+1]); + } + set[pos++] = orderedIds[j]; + } + } + VIEW_STATE_SETS[i] = set; + } + + EMPTY_STATE_SET = VIEW_STATE_SETS[0]; + WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[VIEW_STATE_WINDOW_FOCUSED]; + SELECTED_STATE_SET = VIEW_STATE_SETS[VIEW_STATE_SELECTED]; + SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED]; + FOCUSED_STATE_SET = VIEW_STATE_SETS[VIEW_STATE_FOCUSED]; + FOCUSED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_FOCUSED]; + FOCUSED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_FOCUSED]; + FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_FOCUSED]; + ENABLED_STATE_SET = VIEW_STATE_SETS[VIEW_STATE_ENABLED]; + ENABLED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_ENABLED]; + ENABLED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_ENABLED]; + ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_ENABLED]; + ENABLED_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_FOCUSED | VIEW_STATE_ENABLED]; + ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_FOCUSED + | VIEW_STATE_ENABLED]; + ENABLED_FOCUSED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_FOCUSED + | VIEW_STATE_ENABLED]; + ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_FOCUSED| VIEW_STATE_ENABLED]; + + PRESSED_STATE_SET = VIEW_STATE_SETS[VIEW_STATE_PRESSED]; + PRESSED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_PRESSED]; + PRESSED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_PRESSED]; + PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_PRESSED]; + PRESSED_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_FOCUSED | VIEW_STATE_PRESSED]; + PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_FOCUSED + | VIEW_STATE_PRESSED]; + PRESSED_FOCUSED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_FOCUSED + | VIEW_STATE_PRESSED]; + PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_FOCUSED | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_ENABLED | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_ENABLED + | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_ENABLED + | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_ENABLED | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_FOCUSED | VIEW_STATE_ENABLED + | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_FOCUSED + | VIEW_STATE_ENABLED | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_SELECTED | VIEW_STATE_FOCUSED + | VIEW_STATE_ENABLED | VIEW_STATE_PRESSED]; + PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = VIEW_STATE_SETS[ + VIEW_STATE_WINDOW_FOCUSED | VIEW_STATE_SELECTED + | VIEW_STATE_FOCUSED| VIEW_STATE_ENABLED + | VIEW_STATE_PRESSED]; + } + /** * Used by views that contain lists of items. This state indicates that * the view is showing the last item. @@ -1572,6 +1620,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility */ private static final int PIVOT_EXPLICITLY_SET = 0x10000000; + /** {@hide} */ + static final int ACTIVATED = 0x20000000; + /** * The parent this view is attached to. * {@hide} @@ -8343,18 +8394,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility int privateFlags = mPrivateFlags; - int viewStateIndex = (((privateFlags & PRESSED) != 0) ? 1 : 0); - - viewStateIndex = (viewStateIndex << 1) - + (((mViewFlags & ENABLED_MASK) == ENABLED) ? 1 : 0); - - viewStateIndex = (viewStateIndex << 1) + (isFocused() ? 1 : 0); - - viewStateIndex = (viewStateIndex << 1) - + (((privateFlags & SELECTED) != 0) ? 1 : 0); - - final boolean hasWindowFocus = hasWindowFocus(); - viewStateIndex = (viewStateIndex << 1) + (hasWindowFocus ? 1 : 0); + int viewStateIndex = 0; + if ((privateFlags & PRESSED) != 0) viewStateIndex |= VIEW_STATE_PRESSED; + if ((mViewFlags & ENABLED_MASK) == ENABLED) viewStateIndex |= VIEW_STATE_ENABLED; + if (isFocused()) viewStateIndex |= VIEW_STATE_FOCUSED; + if ((privateFlags & SELECTED) != 0) viewStateIndex |= VIEW_STATE_PRESSED; + if (hasWindowFocus()) viewStateIndex |= VIEW_STATE_WINDOW_FOCUSED; + if ((privateFlags & ACTIVATED) != 0) viewStateIndex |= VIEW_STATE_ACTIVATED; drawableState = VIEW_STATE_SETS[viewStateIndex]; @@ -8366,7 +8412,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility + " en=" + ((mViewFlags & ENABLED_MASK) == ENABLED) + " fo=" + hasFocus() + " sl=" + ((privateFlags & SELECTED) != 0) - + " wf=" + hasWindowFocus + + " wf=" + hasWindowFocus() + ": " + Arrays.toString(drawableState)); } @@ -8680,6 +8726,48 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } /** + * Changes the activated state of this view. A view can be activated or not. + * Note that activation is not the same as selection. Selection is + * a transient property, representing the view (hierarchy) the user is + * currently interacting with. Activation is a longer-term state that the + * user can move views in and out of. For example, in a list view with + * single or multiple selection enabled, the views in the current selection + * set are activated. (Um, yeah, we are deeply sorry about the terminology + * here.) The activated state is propagated down to children of the view it + * is set on. + * + * @param activated true if the view must be activated, false otherwise + */ + public void setActivated(boolean activated) { + if (((mPrivateFlags & ACTIVATED) != 0) != activated) { + mPrivateFlags = (mPrivateFlags & ~ACTIVATED) | (activated ? ACTIVATED : 0); + invalidate(); + refreshDrawableState(); + dispatchSetSelected(activated); + } + } + + /** + * Dispatch setActivated to all of this View's children. + * + * @see #setActivated(boolean) + * + * @param activated The new activated state + */ + protected void dispatchSetActivated(boolean activated) { + } + + /** + * Indicates the activation state of this view. + * + * @return true if the view is activated, false otherwise + */ + @ViewDebug.ExportedProperty + public boolean isActivated() { + return (mPrivateFlags & ACTIVATED) != 0; + } + + /** * Returns the ViewTreeObserver for this view's hierarchy. The view tree * observer can be used to get notifications when global events, like * layout, happen. diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 012f3cc..a18a977 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -2066,6 +2066,19 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + /** + * {@inheritDoc} + */ + @Override + public void dispatchSetActivated(boolean activated) { + final View[] children = mChildren; + final int count = mChildrenCount; + for (int i = 0; i < count; i++) { + + children[i].setActivated(activated); + } + } + @Override protected void dispatchSetPressed(boolean pressed) { final View[] children = mChildren; diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index dffe685..46c7d33 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1341,6 +1341,9 @@ public class GridView extends AbsListView { if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) { if (child instanceof Checkable) { ((Checkable) child).setChecked(mCheckStates.get(position)); + } else if (getContext().getApplicationInfo().targetSdkVersion + >= android.os.Build.VERSION_CODES.HONEYCOMB) { + child.setActivated(mCheckStates.get(position)); } } diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index f9bdc43..e5a34e8 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -1785,6 +1785,9 @@ public class ListView extends AbsListView { if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) { if (child instanceof Checkable) { ((Checkable) child).setChecked(mCheckStates.get(position)); + } else if (getContext().getApplicationInfo().targetSdkVersion + >= android.os.Build.VERSION_CODES.HONEYCOMB) { + child.setActivated(mCheckStates.get(position)); } } diff --git a/core/res/res/drawable/activated_background.xml b/core/res/res/drawable/activated_background.xml new file mode 100644 index 0000000..d92fba1 --- /dev/null +++ b/core/res/res/drawable/activated_background.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" /> + <item android:drawable="@color/transparent" /> +</selector> diff --git a/core/res/res/drawable/activated_background_light.xml b/core/res/res/drawable/activated_background_light.xml new file mode 100644 index 0000000..5d5681d --- /dev/null +++ b/core/res/res/drawable/activated_background_light.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_activated="true" android:drawable="@drawable/list_selector_background_selected_light" /> + <item android:drawable="@color/transparent" /> +</selector> diff --git a/core/res/res/layout/preference_list_item.xml b/core/res/res/layout/preference_header_item.xml index 3b888b4..80a3ac2 100644 --- a/core/res/res/layout/preference_list_item.xml +++ b/core/res/res/layout/preference_header_item.xml @@ -14,12 +14,12 @@ limitations under the License. --> -<!-- Layout for a preference category item, containing an icon and label. --> +<!-- Layout of a header item in PreferenceActivity. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+android:id/widget_frame" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" + android:background="?android:attr/activatedBackgroundIndicator" android:gravity="center_vertical" android:paddingRight="?android:attr/scrollbarSize"> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index cda997a..2ede9f0 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -151,6 +151,9 @@ <!-- Drawable used as a background for selected list items. --> <attr name="listChoiceBackgroundIndicator" format="reference" /> + <!-- Drawable used as a background for activated items. --> + <attr name="activatedBackgroundIndicator" format="reference" /> + <!-- ============= --> <!-- Button styles --> <!-- ============= --> @@ -3104,6 +3107,7 @@ <li>"state_last" <li>"state_only" <li>"state_pressed" + <li>"state_activated" <li>"state_error" <li>"state_circle" <li>"state_rect" @@ -3111,23 +3115,35 @@ <li>"state_move" </ul> --> <declare-styleable name="DrawableStates"> - <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> + <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, + set when a view has input focus. --> <attr name="state_focused" format="boolean" /> - <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> + <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, + set when a view's window has input focus. --> <attr name="state_window_focused" format="boolean" /> - <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> + <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, + set when a view is enabled. --> <attr name="state_enabled" format="boolean" /> - <!-- State identifier indicating that the object <var>may</var> display a check mark. - See {@link R.attr#state_checked} for the identifier that indicates whether it is - actually checked. --> + <!-- State identifier indicating that the object <var>may</var> display a check mark. + See {@link R.attr#state_checked} for the identifier that indicates whether it is + actually checked. --> <attr name="state_checkable" format="boolean"/> - <!-- State identifier indicating that the object is currently checked. See - {@link R.attr#state_checkable} for an additional identifier that can indicate if - any object may ever display a check, regardless of whether state_checked is - currently set. --> + <!-- State identifier indicating that the object is currently checked. See + {@link R.attr#state_checkable} for an additional identifier that can indicate if + any object may ever display a check, regardless of whether state_checked is + currently set. --> <attr name="state_checked" format="boolean"/> - <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> + <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, + set when a view (or one of its parents) is currently selected. --> <attr name="state_selected" format="boolean" /> + <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, + set when the user is pressing down in a view. --> + <attr name="state_pressed" format="boolean" /> + <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, + set when a view or its parent has been "activated" meaning the user has currently + marked it as being of interest. This is an alternative representation of + state_checked for when the state should be propagated down the view hierarchy. --> + <attr name="state_activated" format="boolean" /> <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> <attr name="state_active" format="boolean" /> <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> @@ -3138,8 +3154,6 @@ <attr name="state_middle" format="boolean" /> <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> <attr name="state_last" format="boolean" /> - <!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--> - <attr name="state_pressed" format="boolean" /> </declare-styleable> <declare-styleable name="ViewDrawableStates"> <attr name="state_pressed" /> @@ -3147,6 +3161,7 @@ <attr name="state_selected" /> <attr name="state_window_focused" /> <attr name="state_enabled" /> + <attr name="state_activated" /> </declare-styleable> <!-- State array representing a menu item that is currently checked. --> <declare-styleable name="MenuItemCheckedState"> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 86e5579..79040b8 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1346,6 +1346,8 @@ <public type="attr" name="iconifiedByDefault" /> <public type="attr" name="actionLayout" /> <public type="attr" name="actionViewClass" /> + <public type="attr" name="activatedBackgroundIndicator" /> + <public type="attr" name="state_activated" /> <public type="anim" name="animator_fade_in" /> <public type="anim" name="animator_fade_out" /> @@ -1354,12 +1356,6 @@ <!-- Context menu ID for the "Select text..." menu item to switch to text selection context mode in text views. --> <public type="id" name="selectTextMode" /> - - <public type="style" name="Theme.WithActionBar" /> - <public type="style" name="Widget.Spinner.DropDown" /> - <public type="style" name="Widget.ActionButton" /> - <public type="style" name="Theme.Dialog.NoFrame" /> - <public type="style" name="Theme.NoTitleBar.OverlayActionModes" /> <!-- Standard content view for a {@link android.app.ListFragment}. If you are implementing a subclass of ListFragment with your @@ -1368,6 +1364,15 @@ the base class. --> <public type="layout" name="list_content" /> + <!-- A simple ListView item layout which can contain text and support (single or multiple) item selection. --> + <public type="layout" name="simple_selectable_list_item" /> + + <public type="style" name="Theme.WithActionBar" /> + <public type="style" name="Widget.Spinner.DropDown" /> + <public type="style" name="Widget.ActionButton" /> + <public type="style" name="Theme.Dialog.NoFrame" /> + <public type="style" name="Theme.NoTitleBar.OverlayActionModes" /> + <public type="style" name="Theme.Holo" /> <public type="style" name="Theme.Light.Holo" /> <public type="style" name="Theme.Holo.NoActionBar" /> @@ -1375,9 +1380,6 @@ <public type="style" name="Theme.Light.Holo.NoActionBar" /> <public type="style" name="Theme.Light.Holo.NoActionBar.Fullscreen" /> - <!-- A simple ListView item layout which can contain text and support (single or multiple) item selection. --> - <public type="layout" name="simple_selectable_list_item" id="0x01090022" /> - - <public type="string" name="selectTextMode" id="0x01040030" /> + <public type="string" name="selectTextMode" /> </resources> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 8a9ebf0..70daee8 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -97,6 +97,8 @@ <item name="listChoiceBackgroundIndicator">@android:drawable/list_selected_background</item> + <item name="activatedBackgroundIndicator">@android:drawable/activated_background</item> + <item name="expandableListPreferredItemPaddingLeft">40dip</item> <item name="expandableListPreferredChildPaddingLeft"> ?android:attr/expandableListPreferredItemPaddingLeft</item> @@ -272,6 +274,8 @@ <item name="editTextColor">?android:attr/textColorPrimary</item> <item name="listChoiceBackgroundIndicator">@android:drawable/list_selected_background_light</item> + <item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item> + <item name="popupWindowStyle">@android:style/Widget.PopupWindow</item> <item name="textCheckMark">@android:drawable/indicator_check_mark_light</item> |