Add dedicated background for custom action label key

Bug: 15526978
Change-Id: Ia73d825c7e00097018822704e61272d0e448f39a
Tadashi G. Takaoka 2014-08-06 17:23:14 +09:00
parent aa3ff194cd
commit 017e9f7e7f
6 changed files with 52 additions and 67 deletions

View File

@ -15,6 +15,11 @@
--> -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Custom label action keys. -->
<item android:state_active="true" android:state_checked="true" android:state_pressed="true"
android:drawable="@color/key_background_pressed_lxx_dark" />
<item android:state_active="true" android:state_checked="true"
android:drawable="@color/key_background_lxx_dark" />
<!-- Action keys. --> <!-- Action keys. -->
<item android:state_active="true" android:state_pressed="true" <item android:state_active="true" android:state_pressed="true"
android:drawable="@drawable/btn_keyboard_key_active_pressed_lxx_dark" /> android:drawable="@drawable/btn_keyboard_key_active_pressed_lxx_dark" />

View File

@ -15,6 +15,11 @@
--> -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Custom label action keys. -->
<item android:state_active="true" android:state_checked="true" android:state_pressed="true"
android:drawable="@color/key_background_pressed_lxx_light" />
<item android:state_active="true" android:state_checked="true"
android:drawable="@color/key_background_lxx_light" />
<!-- Action keys. --> <!-- Action keys. -->
<item android:state_active="true" android:state_pressed="true" <item android:state_active="true" android:state_pressed="true"
android:drawable="@drawable/btn_keyboard_key_active_pressed_lxx_light" /> android:drawable="@drawable/btn_keyboard_key_active_pressed_lxx_light" />

View File

@ -270,9 +270,10 @@
<enum name="empty" value="0" /> <enum name="empty" value="0" />
<enum name="normal" value="1" /> <enum name="normal" value="1" />
<enum name="functional" value="2" /> <enum name="functional" value="2" />
<enum name="action" value="3" /> <enum name="stickyOff" value="3" />
<enum name="stickyOff" value="4" /> <enum name="stickyOn" value="4" />
<enum name="stickyOn" value="5" /> <enum name="action" value="5" />
<enum name="customAction" value="6" />
</attr> </attr>
<!-- The key action flags. --> <!-- The key action flags. -->
<attr name="keyActionFlags" format="integer"> <attr name="keyActionFlags" format="integer">

View File

@ -230,6 +230,7 @@
latin:styleName="enterKeyStyle" latin:styleName="enterKeyStyle"
latin:keySpec="dummy_label|!code/key_enter" latin:keySpec="dummy_label|!code/key_enter"
latin:keyLabelFlags="fromCustomActionLabel" latin:keyLabelFlags="fromCustomActionLabel"
latin:backgroundType="customAction"
latin:parentStyle="defaultEnterKeyStyle" /> latin:parentStyle="defaultEnterKeyStyle" />
</case> </case>
<!-- imeAction is either actionNone or actionUnspecified. --> <!-- imeAction is either actionNone or actionUnspecified. -->

View File

@ -398,6 +398,7 @@
latin:styleName="enterKeyStyle" latin:styleName="enterKeyStyle"
latin:keySpec="dummy_label|!code/key_enter" latin:keySpec="dummy_label|!code/key_enter"
latin:keyLabelFlags="fromCustomActionLabel" latin:keyLabelFlags="fromCustomActionLabel"
latin:backgroundType="customAction"
latin:parentStyle="defaultEnterKeyStyle" /> latin:parentStyle="defaultEnterKeyStyle" />
</case> </case>
<!-- imeAction is either actionNone or actionUnspecified. --> <!-- imeAction is either actionNone or actionUnspecified. -->

View File

@ -123,9 +123,10 @@ public class Key implements Comparable<Key> {
public static final int BACKGROUND_TYPE_EMPTY = 0; public static final int BACKGROUND_TYPE_EMPTY = 0;
public static final int BACKGROUND_TYPE_NORMAL = 1; public static final int BACKGROUND_TYPE_NORMAL = 1;
public static final int BACKGROUND_TYPE_FUNCTIONAL = 2; public static final int BACKGROUND_TYPE_FUNCTIONAL = 2;
public static final int BACKGROUND_TYPE_ACTION = 3; public static final int BACKGROUND_TYPE_STICKY_OFF = 3;
public static final int BACKGROUND_TYPE_STICKY_OFF = 4; public static final int BACKGROUND_TYPE_STICKY_ON = 4;
public static final int BACKGROUND_TYPE_STICKY_ON = 5; public static final int BACKGROUND_TYPE_ACTION = 5;
public static final int BACKGROUND_TYPE_CUSTOM_ACTION = 6;
private final int mActionFlags; private final int mActionFlags;
private static final int ACTION_FLAGS_IS_REPEATABLE = 0x01; private static final int ACTION_FLAGS_IS_REPEATABLE = 0x01;
@ -483,9 +484,10 @@ public class Key implements Comparable<Key> {
case BACKGROUND_TYPE_EMPTY: return "empty"; case BACKGROUND_TYPE_EMPTY: return "empty";
case BACKGROUND_TYPE_NORMAL: return "normal"; case BACKGROUND_TYPE_NORMAL: return "normal";
case BACKGROUND_TYPE_FUNCTIONAL: return "functional"; case BACKGROUND_TYPE_FUNCTIONAL: return "functional";
case BACKGROUND_TYPE_ACTION: return "action";
case BACKGROUND_TYPE_STICKY_OFF: return "stickyOff"; case BACKGROUND_TYPE_STICKY_OFF: return "stickyOff";
case BACKGROUND_TYPE_STICKY_ON: return "stickyOn"; case BACKGROUND_TYPE_STICKY_ON: return "stickyOn";
case BACKGROUND_TYPE_ACTION: return "action";
case BACKGROUND_TYPE_CUSTOM_ACTION: return "customAction";
default: return null; default: return null;
} }
} }
@ -814,47 +816,37 @@ public class Key implements Comparable<Key> {
return dx * dx + dy * dy; return dx * dx + dy * dy;
} }
private final static int[] KEY_STATE_NORMAL_HIGHLIGHT_ON = { static class KeyBackgroundState {
android.R.attr.state_checkable, private final int[] mReleasedState;
android.R.attr.state_checked private final int[] mPressedState;
};
private final static int[] KEY_STATE_PRESSED_HIGHLIGHT_ON = { private KeyBackgroundState(final int ... attrs) {
android.R.attr.state_pressed, mReleasedState = attrs;
android.R.attr.state_checkable, mPressedState = Arrays.copyOf(attrs, attrs.length + 1);
android.R.attr.state_checked mPressedState[attrs.length] = android.R.attr.state_pressed;
}; }
private final static int[] KEY_STATE_NORMAL_HIGHLIGHT_OFF = { public int[] getState(final boolean pressed) {
android.R.attr.state_checkable return pressed ? mPressedState : mReleasedState;
}; }
private final static int[] KEY_STATE_PRESSED_HIGHLIGHT_OFF = { public static final KeyBackgroundState[] STATES = {
android.R.attr.state_pressed, // 0: BACKGROUND_TYPE_EMPTY
android.R.attr.state_checkable new KeyBackgroundState(android.R.attr.state_empty),
}; // 1: BACKGROUND_TYPE_NORMAL
new KeyBackgroundState(),
private final static int[] KEY_STATE_NORMAL = { // 2: BACKGROUND_TYPE_FUNCTIONAL
}; new KeyBackgroundState(),
// 3: BACKGROUND_TYPE_STICKY_OFF
private final static int[] KEY_STATE_PRESSED = { new KeyBackgroundState(android.R.attr.state_checkable),
android.R.attr.state_pressed // 4: BACKGROUND_TYPE_STICKY_ON
}; new KeyBackgroundState(android.R.attr.state_checkable, android.R.attr.state_checked),
// 5: BACKGROUND_TYPE_ACTION
private final static int[] KEY_STATE_EMPTY = { new KeyBackgroundState(android.R.attr.state_active),
android.R.attr.state_empty // 6: BACKGROUND_TYPE_CUSTOM_ACTION
}; new KeyBackgroundState(android.R.attr.state_active, android.R.attr.state_checked)
};
// action normal state (with properties) }
private static final int[] KEY_STATE_ACTIVE_NORMAL = {
android.R.attr.state_active
};
// action pressed state (with properties)
private static final int[] KEY_STATE_ACTIVE_PRESSED = {
android.R.attr.state_active,
android.R.attr.state_pressed
};
/** /**
* Returns the background drawable for the key, based on the current state and type of the key. * Returns the background drawable for the key, based on the current state and type of the key.
@ -871,28 +863,8 @@ public class Key implements Comparable<Key> {
} else { } else {
background = keyBackground; background = keyBackground;
} }
final int[] stateSet; final int[] state = KeyBackgroundState.STATES[mBackgroundType].getState(mPressed);
switch (mBackgroundType) { background.setState(state);
case BACKGROUND_TYPE_ACTION:
stateSet = mPressed ? KEY_STATE_ACTIVE_PRESSED : KEY_STATE_ACTIVE_NORMAL;
break;
case BACKGROUND_TYPE_STICKY_OFF:
stateSet = mPressed ? KEY_STATE_PRESSED_HIGHLIGHT_OFF : KEY_STATE_NORMAL_HIGHLIGHT_OFF;
break;
case BACKGROUND_TYPE_STICKY_ON:
stateSet = mPressed ? KEY_STATE_PRESSED_HIGHLIGHT_ON : KEY_STATE_NORMAL_HIGHLIGHT_ON;
break;
case BACKGROUND_TYPE_EMPTY:
stateSet = mPressed ? KEY_STATE_PRESSED : KEY_STATE_EMPTY;
break;
case BACKGROUND_TYPE_FUNCTIONAL:
stateSet = mPressed ? KEY_STATE_PRESSED : KEY_STATE_NORMAL;
break;
default: /* BACKGROUND_TYPE_NORMAL */
stateSet = mPressed ? KEY_STATE_PRESSED : KEY_STATE_NORMAL;
break;
}
background.setState(stateSet);
return background; return background;
} }