diff options
| author | Wilson Wu <wilsonwu@google.com> | 2020-11-12 17:28:58 +0800 |
|---|---|---|
| committer | Wilson Wu <wilsonwu@google.com> | 2021-06-16 18:10:34 +0800 |
| commit | 34091a5066f3a4f2d90b3f49f3e0ab63972d45bd (patch) | |
| tree | f1c621194df8a854ec5a2ae4173e069f9ac1ae46 /core/java/android/inputmethodservice/MultiClientInputMethodServiceDelegateImpl.java | |
| parent | b6766392b83df270c642ac6f3332e6ea0ecd8856 (diff) | |
Remove multi-client IME
Design doc: go/multi-session-ime-removal
We no longer require this mechanism to support
multi-clients IME, remove it completely.
Bug: 173341412
Test: atest CtsInputMethodTestCases
Change-Id: I0bdc8fe3d32ccabc8ea7996fc689543c3f99331a
Diffstat (limited to 'core/java/android/inputmethodservice/MultiClientInputMethodServiceDelegateImpl.java')
| -rw-r--r-- | core/java/android/inputmethodservice/MultiClientInputMethodServiceDelegateImpl.java | 197 |
1 files changed, 0 insertions, 197 deletions
diff --git a/core/java/android/inputmethodservice/MultiClientInputMethodServiceDelegateImpl.java b/core/java/android/inputmethodservice/MultiClientInputMethodServiceDelegateImpl.java deleted file mode 100644 index 04db8d625806..000000000000 --- a/core/java/android/inputmethodservice/MultiClientInputMethodServiceDelegateImpl.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.inputmethodservice; - -import static java.lang.annotation.RetentionPolicy.SOURCE; - -import android.annotation.IntDef; -import android.content.Context; -import android.content.Intent; -import android.os.IBinder; -import android.os.Looper; -import android.util.Log; -import android.view.InputChannel; -import android.view.KeyEvent; - -import com.android.internal.annotations.GuardedBy; -import com.android.internal.inputmethod.IMultiClientInputMethod; -import com.android.internal.inputmethod.IMultiClientInputMethodPrivilegedOperations; -import com.android.internal.inputmethod.MultiClientInputMethodPrivilegedOperations; - -import java.lang.annotation.Retention; -import java.lang.ref.WeakReference; - -final class MultiClientInputMethodServiceDelegateImpl { - private static final String TAG = "MultiClientInputMethodServiceDelegateImpl"; - - private final Object mLock = new Object(); - - @Retention(SOURCE) - @IntDef({InitializationPhase.INSTANTIATED, - InitializationPhase.ON_BIND_CALLED, - InitializationPhase.INITIALIZE_CALLED, - InitializationPhase.ON_UNBIND_CALLED, - InitializationPhase.ON_DESTROY_CALLED}) - private @interface InitializationPhase { - int INSTANTIATED = 1; - int ON_BIND_CALLED = 2; - int INITIALIZE_CALLED = 3; - int ON_UNBIND_CALLED = 4; - int ON_DESTROY_CALLED = 5; - } - - @GuardedBy("mLock") - @InitializationPhase - private int mInitializationPhase; - - private final MultiClientInputMethodPrivilegedOperations mPrivOps = - new MultiClientInputMethodPrivilegedOperations(); - - private final MultiClientInputMethodServiceDelegate.ServiceCallback mServiceCallback; - - private final Context mContext; - - MultiClientInputMethodServiceDelegateImpl(Context context, - MultiClientInputMethodServiceDelegate.ServiceCallback serviceCallback) { - mInitializationPhase = InitializationPhase.INSTANTIATED; - mContext = context; - mServiceCallback = serviceCallback; - } - - void onDestroy() { - synchronized (mLock) { - switch (mInitializationPhase) { - case InitializationPhase.INSTANTIATED: - case InitializationPhase.ON_UNBIND_CALLED: - mInitializationPhase = InitializationPhase.ON_DESTROY_CALLED; - break; - default: - Log.e(TAG, "unexpected state=" + mInitializationPhase); - break; - } - } - } - - private static final class ServiceImpl extends IMultiClientInputMethod.Stub { - private final WeakReference<MultiClientInputMethodServiceDelegateImpl> mImpl; - - ServiceImpl(MultiClientInputMethodServiceDelegateImpl service) { - mImpl = new WeakReference<>(service); - } - - @Override - public void initialize(IMultiClientInputMethodPrivilegedOperations privOps) { - final MultiClientInputMethodServiceDelegateImpl service = mImpl.get(); - if (service == null) { - return; - } - synchronized (service.mLock) { - switch (service.mInitializationPhase) { - case InitializationPhase.ON_BIND_CALLED: - service.mPrivOps.set(privOps); - service.mInitializationPhase = InitializationPhase.INITIALIZE_CALLED; - service.mServiceCallback.initialized(); - break; - default: - Log.e(TAG, "unexpected state=" + service.mInitializationPhase); - break; - } - } - } - - @Override - public void addClient(int clientId, int uid, int pid, int selfReportedDisplayId) { - final MultiClientInputMethodServiceDelegateImpl service = mImpl.get(); - if (service == null) { - return; - } - service.mServiceCallback.addClient(clientId, uid, pid, selfReportedDisplayId); - } - - @Override - public void removeClient(int clientId) { - final MultiClientInputMethodServiceDelegateImpl service = mImpl.get(); - if (service == null) { - return; - } - service.mServiceCallback.removeClient(clientId); - } - } - - IBinder onBind(Intent intent) { - synchronized (mLock) { - switch (mInitializationPhase) { - case InitializationPhase.INSTANTIATED: - mInitializationPhase = InitializationPhase.ON_BIND_CALLED; - return new ServiceImpl(this); - default: - Log.e(TAG, "unexpected state=" + mInitializationPhase); - break; - } - } - return null; - } - - boolean onUnbind(Intent intent) { - synchronized (mLock) { - switch (mInitializationPhase) { - case InitializationPhase.ON_BIND_CALLED: - case InitializationPhase.INITIALIZE_CALLED: - mInitializationPhase = InitializationPhase.ON_UNBIND_CALLED; - mPrivOps.dispose(); - break; - default: - Log.e(TAG, "unexpected state=" + mInitializationPhase); - break; - } - } - return false; - } - - IBinder createInputMethodWindowToken(int displayId) { - return mPrivOps.createInputMethodWindowToken(displayId); - } - - void acceptClient(int clientId, - MultiClientInputMethodServiceDelegate.ClientCallback clientCallback, - KeyEvent.DispatcherState dispatcherState, Looper looper) { - final InputChannel[] channels = InputChannel.openInputChannelPair("MSIMS-session"); - final InputChannel writeChannel = channels[0]; - final InputChannel readChannel = channels[1]; - try { - final MultiClientInputMethodClientCallbackAdaptor callbackAdaptor = - new MultiClientInputMethodClientCallbackAdaptor(clientCallback, looper, - dispatcherState, readChannel); - mPrivOps.acceptClient(clientId, callbackAdaptor.createIInputMethodSession(), - callbackAdaptor.createIMultiClientInputMethodSession(), writeChannel); - } finally { - writeChannel.dispose(); - } - } - - void reportImeWindowTarget(int clientId, int targetWindowHandle, IBinder imeWindowToken) { - mPrivOps.reportImeWindowTarget(clientId, targetWindowHandle, imeWindowToken); - } - - boolean isUidAllowedOnDisplay(int displayId, int uid) { - return mPrivOps.isUidAllowedOnDisplay(displayId, uid); - } - - void setActive(int clientId, boolean active) { - mPrivOps.setActive(clientId, active); - } -} |
