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

Commit 9769f3bf authored by Tom Macieszczak's avatar Tom Macieszczak Committed by Sergej Salnikov
Browse files

Close virtual keyboards when their client dies.

Test: manual - force-stopped the TvRemoteService.

Change-Id: I7a44737c4dc494272f75e0e6b839d4332326a77d
parent f70fb1be
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.tv;
import android.content.Context;
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.Looper;
import android.os.Message;
import android.util.ArrayMap;
@@ -91,7 +92,7 @@ public class TvRemoteService extends SystemService implements Watchdog.Monitor {
    }

    // Incoming calls.
    private void openInputBridgeInternalLocked(TvRemoteProviderProxy provider, IBinder token,
    private void openInputBridgeInternalLocked(TvRemoteProviderProxy provider, final IBinder token,
                                               String name, int width, int height,
                                               int maxPointers) {
        if (DEBUG) {
@@ -113,6 +114,21 @@ public class TvRemoteService extends SystemService implements Watchdog.Monitor {
            mBridgeMap.put(token, inputBridge);
            mProviderMap.put(token, provider);

            try {
                token.linkToDeath(new IBinder.DeathRecipient() {
                    @Override
                    public void binderDied() {
                        synchronized (mLock) {
                            closeInputBridgeInternalLocked(token);
                        }
                    }
                }, 0);
            } catch (RemoteException e) {
                if (DEBUG) Slog.d(TAG, "Token is already dead");
                closeInputBridgeInternalLocked(token);
                return;
            }

            // Respond back with success.
            informInputBridgeConnected(token);

@@ -133,9 +149,9 @@ public class TvRemoteService extends SystemService implements Watchdog.Monitor {
        }

        mBridgeMap.remove(token);
        mProviderMap.remove(token);
    }


    private void clearInputBridgeInternalLocked(IBinder token) {
        if (DEBUG) {
            Slog.d(TAG, "clearInputBridgeInternalLocked(), token: " + token);
@@ -275,7 +291,6 @@ public class TvRemoteService extends SystemService implements Watchdog.Monitor {
            synchronized (mLock) {
                if (mProviderList.contains(provider)) {
                    mService.closeInputBridgeInternalLocked(token);
                    mProviderMap.remove(token);
                }
            }
        }