HDMICEC: Set common callback logic for shell cmd am: 571f0de1ff
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1555094 Change-Id: I21369f60791fc65b79a54241693d83d4eac6e1db
This commit is contained in:
committed by
Automerger Merge Worker
commit
9289aeed8c
@@ -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.");
|
||||
return 1;
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
getErrPrintWriter().println("Caught InterruptedException");
|
||||
Thread.currentThread().interrupt();
|
||||
if (!receiveCallback("One Touch Play")) {
|
||||
return 1;
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user