Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5691b2f2 authored by Jungshik Jang's avatar Jungshik Jang
Browse files

Remove parameter field in HdmiCecKeycode.

Since we don't support mapping between android key and parameterized
cec keycode, remove parameter fields in HdmiCecKeycode.

Bug: 17099253
Change-Id: I8b6b6b361f0c343b0a263240b49e41bf289d36ca
parent d1858574
Loading
Loading
Loading
Loading
+16 −32
Original line number Original line Diff line number Diff line
@@ -155,7 +155,7 @@ final class HdmiCecKeycode {
    }
    }


    /**
    /**
     * A mapping between andorid and cec keycode.
     * A mapping between Android and CEC keycode.
     *
     *
     * <p>Normal implementation of this looks like
     * <p>Normal implementation of this looks like
     * <pre>
     * <pre>
@@ -174,43 +174,28 @@ final class HdmiCecKeycode {
    private static class KeycodeEntry {
    private static class KeycodeEntry {
        private final int mAndroidKeycode;
        private final int mAndroidKeycode;
        private final int mCecKeycode;
        private final int mCecKeycode;
        private final int mParam;
        private final boolean mIsRepeatable;
        private final boolean mIsRepeatable;


        private KeycodeEntry(int androidKeycode, int cecKeycode, int param, boolean isRepeatable) {
        private KeycodeEntry(int androidKeycode, int cecKeycode, boolean isRepeatable) {
            mAndroidKeycode = androidKeycode;
            mAndroidKeycode = androidKeycode;
            mCecKeycode = cecKeycode;
            mCecKeycode = cecKeycode;
            mParam = param;
            mIsRepeatable = isRepeatable;
            mIsRepeatable = isRepeatable;
        }
        }


        private KeycodeEntry(int androidKeycode, int cecKeycode) {
        private KeycodeEntry(int androidKeycode, int cecKeycode) {
            this(androidKeycode, cecKeycode, NO_PARAM, true);
            this(androidKeycode, cecKeycode, true);
        }

        private KeycodeEntry(int androidKeycode, int cecKeycode, boolean isRepeatable) {
            this(androidKeycode, cecKeycode, NO_PARAM, isRepeatable);
        }
        }


        private byte[] toCecKeycodeIfMatched(int androidKeycode) {
        private int toCecKeycodeIfMatched(int androidKeycode) {
            if (mAndroidKeycode == androidKeycode) {
            if (mAndroidKeycode == androidKeycode) {
                if (mParam == NO_PARAM) {
                return mCecKeycode;
                    return new byte[] {
                        (byte) (mCecKeycode & 0xFF)
                    };
                } else {
                    return new byte[] {
                        (byte) (mCecKeycode & 0xFF),
                        (byte) (mParam & 0xFF)
                    };
                }
            } else {
            } else {
                return null;
                return UNSUPPORTED_KEYCODE;
            }
            }
        }
        }


        private int toAndroidKeycodeIfMatched(int cecKeycode, int param) {
        private int toAndroidKeycodeIfMatched(int cecKeycode) {
            if (cecKeycode == mCecKeycode && mParam == param) {
            if (cecKeycode == mCecKeycode) {
                return mAndroidKeycode;
                return mAndroidKeycode;
            } else {
            } else {
                return UNSUPPORTED_KEYCODE;
                return UNSUPPORTED_KEYCODE;
@@ -365,29 +350,28 @@ final class HdmiCecKeycode {
     * Translate Android keycode to Hdmi Cec keycode.
     * Translate Android keycode to Hdmi Cec keycode.
     *
     *
     * @param keycode Android keycode. For details, refer {@link KeyEvent}
     * @param keycode Android keycode. For details, refer {@link KeyEvent}
     * @return array of byte which contains cec keycode and param if it has;
     * @return single byte CEC keycode if matched.
     *         return null if failed to find matched cec keycode
     */
     */
    static byte[] androidKeyToCecKey(int keycode) {
    static int androidKeyToCecKey(int keycode) {
        for (int i = 0; i < KEYCODE_ENTRIES.length; ++i) {
        for (int i = 0; i < KEYCODE_ENTRIES.length; ++i) {
            byte[] cecKeycode = KEYCODE_ENTRIES[i].toCecKeycodeIfMatched(keycode);
            int cecKeycode = KEYCODE_ENTRIES[i].toCecKeycodeIfMatched(keycode);
            if (cecKeycode != null) {
            if (cecKeycode != UNSUPPORTED_KEYCODE) {
                return cecKeycode;
                return cecKeycode;
            }
            }
        }
        }
        return null;
        return UNSUPPORTED_KEYCODE;
    }
    }


    /**
    /**
     * Translate Hdmi CEC keycode to Android keycode.
     * Translate Hdmi CEC keycode to Android keycode.
     *
     *
     * @param keycode Cec keycode. If has no param, put {@link #NO_PARAM}
     * @param keycode CEC keycode
     * @return cec keycode corresponding to the given android keycode.
     * @return cec keycode corresponding to the given android keycode.
     *         If finds no matched keycode, return {@link #UNSUPPORTED_KEYCODE}
     *         If finds no matched keycode, return {@link #UNSUPPORTED_KEYCODE}
     */
     */
    static int cecKeyToAndroidKey(int keycode, int param) {
    static int cecKeyToAndroidKey(int keycode) {
        for (int i = 0; i < KEYCODE_ENTRIES.length; ++i) {
        for (int i = 0; i < KEYCODE_ENTRIES.length; ++i) {
            int androidKey = KEYCODE_ENTRIES[i].toAndroidKeycodeIfMatched(keycode, param);
            int androidKey = KEYCODE_ENTRIES[i].toAndroidKeycodeIfMatched(keycode);
            if (androidKey != UNSUPPORTED_KEYCODE) {
            if (androidKey != UNSUPPORTED_KEYCODE) {
                return androidKey;
                return androidKey;
            }
            }
+3 −2
Original line number Original line Diff line number Diff line
@@ -405,8 +405,9 @@ abstract class HdmiCecLocalDevice {


        final long downTime = SystemClock.uptimeMillis();
        final long downTime = SystemClock.uptimeMillis();
        final byte[] params = message.getParams();
        final byte[] params = message.getParams();
        final int keycode = HdmiCecKeycode.cecKeyToAndroidKey(params[0],
        // Note that we don't support parameterized keycode now.
                params.length > 1 ? params[1] : HdmiCecKeycode.NO_PARAM);
        // TODO: translate parameterized keycode as well.
        final int keycode = HdmiCecKeycode.cecKeyToAndroidKey(params[0]);
        int keyRepeatCount = 0;
        int keyRepeatCount = 0;
        if (mLastKeycode != HdmiCecKeycode.UNSUPPORTED_KEYCODE) {
        if (mLastKeycode != HdmiCecKeycode.UNSUPPORTED_KEYCODE) {
            if (keycode == mLastKeycode) {
            if (keycode == mLastKeycode) {
+1 −2
Original line number Original line Diff line number Diff line
@@ -320,7 +320,6 @@ public final class HdmiControlService extends SystemService {
        }
        }
    }
    }



    private void registerContentObserver() {
    private void registerContentObserver() {
        ContentResolver resolver = getContext().getContentResolver();
        ContentResolver resolver = getContext().getContentResolver();
        String[] settings = new String[] {
        String[] settings = new String[] {
+3 −12
Original line number Original line Diff line number Diff line
@@ -109,12 +109,12 @@ final class SendKeyAction extends HdmiCecFeatureAction {
    }
    }


    private void sendKeyDown(int keycode) {
    private void sendKeyDown(int keycode) {
        byte[] keycodeAndParam = getCecKeycodeAndParam(keycode);
        int cecKeycode = HdmiCecKeycode.androidKeyToCecKey(keycode);
        if (keycodeAndParam == null) {
        if (cecKeycode == HdmiCecKeycode.UNSUPPORTED_KEYCODE) {
            return;
            return;
        }
        }
        sendCommand(HdmiCecMessageBuilder.buildUserControlPressed(getSourceAddress(),
        sendCommand(HdmiCecMessageBuilder.buildUserControlPressed(getSourceAddress(),
                mTargetAddress, keycodeAndParam));
                mTargetAddress, new byte[] { (byte) (cecKeycode & 0xFF) }));
    }
    }


    private void sendKeyUp() {
    private void sendKeyUp() {
@@ -141,13 +141,4 @@ final class SendKeyAction extends HdmiCecFeatureAction {
        sendKeyDown(mLastKeycode);
        sendKeyDown(mLastKeycode);
        addTimer(mState, IRT_MS);
        addTimer(mState, IRT_MS);
    }
    }

    // Converts the Android key code to corresponding CEC key code definition. Those CEC keys
    // with additional parameters should be mapped from individual Android key code. 'Select
    // Broadcast' with the parameter 'cable', for instance, shall have its counterpart such as
    // KeyEvent.KEYCODE_TV_BROADCAST_CABLE.
    // The return byte array contains both UI command (keycode) and optional parameter.
    private byte[] getCecKeycodeAndParam(int keycode) {
        return HdmiCecKeycode.androidKeyToCecKey(keycode);
    }
}
}