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

Commit 9289aeed authored by Venkatarama NG. Avadhani's avatar Venkatarama NG. Avadhani Committed by Automerger Merge Worker
Browse files

HDMICEC: Set common callback logic for shell cmd am: 571f0de1

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1555094

Change-Id: I21369f60791fc65b79a54241693d83d4eac6e1db
parents 06179bfb 571f0de1
Loading
Loading
Loading
Loading
+52 −19
Original line number Diff line number Diff line
@@ -35,9 +35,23 @@ final class HdmiControlShellCommand extends ShellCommand {

    private final IHdmiControlService.Stub mBinderService;

    final CountDownLatch mLatch;
    AtomicInteger mCecResult;
    IHdmiControlCallback.Stub mHdmiControlCallback;

    HdmiControlShellCommand(IHdmiControlService.Stub binderService) {
        mBinderService = binderService;
        mLatch = new CountDownLatch(1);
        mCecResult = new AtomicInteger();
        mHdmiControlCallback =
                new IHdmiControlCallback.Stub() {
                    @Override
                    public void onComplete(int result) {
                        getOutPrintWriter().println(" done (" + getResultString(result) + ")");
                        mCecResult.set(result);
                        mLatch.countDown();
                    }
                };
    }

    @Override
@@ -88,28 +102,14 @@ final class HdmiControlShellCommand extends ShellCommand {
    }

    private int oneTouchPlay(PrintWriter pw) throws RemoteException {
        final CountDownLatch latch = new CountDownLatch(1);
        AtomicInteger cecResult = new AtomicInteger();
        pw.print("Sending One Touch Play...");
        mBinderService.oneTouchPlay(new IHdmiControlCallback.Stub() {
            @Override
            public void onComplete(int result) {
                pw.println(" done (" + result + ")");
                latch.countDown();
                cecResult.set(result);
            }
        });
        mBinderService.oneTouchPlay(mHdmiControlCallback);

        try {
            if (!latch.await(HdmiConfig.TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
                getErrPrintWriter().println("One Touch Play timed out.");
        if (!receiveCallback("One Touch Play")) {
            return 1;
        }
        } catch (InterruptedException e) {
            getErrPrintWriter().println("Caught InterruptedException");
            Thread.currentThread().interrupt();
        }
        return cecResult.get() == HdmiControlManager.RESULT_SUCCESS ? 0 : 1;

        return mCecResult.get() == HdmiControlManager.RESULT_SUCCESS ? 0 : 1;
    }

    private int vendorCommand(PrintWriter pw) throws RemoteException {
@@ -157,4 +157,37 @@ final class HdmiControlShellCommand extends ShellCommand {
        mBinderService.sendVendorCommand(deviceType, destination, params, hasVendorId);
        return 0;
    }

    private boolean receiveCallback(String command) {
        try {
            if (!mLatch.await(HdmiConfig.TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
                getErrPrintWriter().println(command + " timed out.");
                return false;
            }
        } catch (InterruptedException e) {
            getErrPrintWriter().println("Caught InterruptedException");
            Thread.currentThread().interrupt();
        }
        return true;
    }

    private String getResultString(int result) {
        switch (result) {
            case HdmiControlManager.RESULT_SUCCESS:
                return "Success";
            case HdmiControlManager.RESULT_TIMEOUT:
                return "Timeout";
            case HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE:
                return "Source not available";
            case HdmiControlManager.RESULT_TARGET_NOT_AVAILABLE:
                return "Target not available";
            case HdmiControlManager.RESULT_EXCEPTION:
                return "Exception";
            case HdmiControlManager.RESULT_INCORRECT_MODE:
                return "Incorrect mode";
            case HdmiControlManager.RESULT_COMMUNICATION_FAILED:
                return "Communication Failed";
        }
        return Integer.toString(result);
    }
}