@Override protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) { AbstractInputMethodService target = mTarget.get(); if (target == null) { return; } if (target.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) { fout.println( "Permission Denial: can't dump InputMethodManager from from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); return; } CountDownLatch latch = new CountDownLatch(1); mCaller.executeOrSendMessage(mCaller.obtainMessageOOOO(DO_DUMP, fd, fout, args, latch)); try { if (!latch.await(5, TimeUnit.SECONDS)) { fout.println("Timeout waiting for dump"); } } catch (InterruptedException e) { fout.println("Interrupted waiting for dump"); } }
@Override public IVoiceInteractorRequest startCommand( String callingPackage, IVoiceInteractorCallback callback, String command, Bundle extras) { Request request = newRequest(callback); mHandlerCaller.sendMessage( mHandlerCaller.obtainMessageOOOO( MSG_START_COMMAND, new Caller(callingPackage, Binder.getCallingUid()), request, command, extras)); return request.mInterface; }
@Override public IVoiceInteractorRequest startConfirmation( String callingPackage, IVoiceInteractorCallback callback, CharSequence prompt, Bundle extras) { Request request = newRequest(callback); mHandlerCaller.sendMessage( mHandlerCaller.obtainMessageOOOO( MSG_START_CONFIRMATION, new Caller(callingPackage, Binder.getCallingUid()), request, prompt, extras)); return request.mInterface; }
@Override public IVoiceInteractorRequest startAbortVoice( String callingPackage, IVoiceInteractorCallback callback, CharSequence message, Bundle extras) { Request request = newRequest(callback); mHandlerCaller.sendMessage( mHandlerCaller.obtainMessageOOOO( MSG_START_ABORT_VOICE, new Caller(callingPackage, Binder.getCallingUid()), request, message, extras)); return request.mInterface; }