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

Commit 3a025393 authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android (Google) Code Review
Browse files

Merge "Make sure events handled on same looper"

parents cdc3a47d 2c9f5475
Loading
Loading
Loading
Loading
+99 −65
Original line number Original line Diff line number Diff line
@@ -153,7 +153,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     */
     */
    private NativeDaemonConnector mConnector;
    private NativeDaemonConnector mConnector;


    private final Handler mMainHandler = new Handler();
    private final Handler mFgHandler;


    private IBatteryStats mBatteryStats;
    private IBatteryStats mBatteryStats;


@@ -203,6 +203,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub
    private NetworkManagementService(Context context, String socket) {
    private NetworkManagementService(Context context, String socket) {
        mContext = context;
        mContext = context;


        // make sure this is on the same looper as our NativeDaemonConnector for sync purposes
        mFgHandler = new Handler(FgThread.get().getLooper());

        if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
        if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
            return;
            return;
        }
        }
@@ -271,6 +274,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     */
     */
    private void notifyInterfaceStatusChanged(String iface, boolean up) {
    private void notifyInterfaceStatusChanged(String iface, boolean up) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).interfaceStatusChanged(iface, up);
                    mObservers.getBroadcastItem(i).interfaceStatusChanged(iface, up);
@@ -278,8 +282,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of an interface link state change
     * Notify our observers of an interface link state change
@@ -287,6 +293,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     */
     */
    private void notifyInterfaceLinkStateChanged(String iface, boolean up) {
    private void notifyInterfaceLinkStateChanged(String iface, boolean up) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).interfaceLinkStateChanged(iface, up);
                    mObservers.getBroadcastItem(i).interfaceLinkStateChanged(iface, up);
@@ -294,14 +301,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of an interface addition.
     * Notify our observers of an interface addition.
     */
     */
    private void notifyInterfaceAdded(String iface) {
    private void notifyInterfaceAdded(String iface) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).interfaceAdded(iface);
                    mObservers.getBroadcastItem(i).interfaceAdded(iface);
@@ -309,8 +319,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of an interface removal.
     * Notify our observers of an interface removal.
@@ -322,6 +334,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
        mActiveQuotas.remove(iface);
        mActiveQuotas.remove(iface);


        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).interfaceRemoved(iface);
                    mObservers.getBroadcastItem(i).interfaceRemoved(iface);
@@ -329,14 +342,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of a limit reached.
     * Notify our observers of a limit reached.
     */
     */
    private void notifyLimitReached(String limitName, String iface) {
    private void notifyLimitReached(String limitName, String iface) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).limitReached(limitName, iface);
                    mObservers.getBroadcastItem(i).limitReached(limitName, iface);
@@ -344,8 +360,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of a change in the data activity state of the interface
     * Notify our observers of a change in the data activity state of the interface
@@ -357,6 +375,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
        }
        }


        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(
                    mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(
@@ -365,7 +384,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }


        boolean report = false;
        boolean report = false;
        synchronized (mIdleTimerLock) {
        synchronized (mIdleTimerLock) {
@@ -456,6 +477,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     */
     */
    private void notifyAddressUpdated(String iface, LinkAddress address) {
    private void notifyAddressUpdated(String iface, LinkAddress address) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).addressUpdated(iface, address);
                    mObservers.getBroadcastItem(i).addressUpdated(iface, address);
@@ -463,14 +485,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of a deleted interface address.
     * Notify our observers of a deleted interface address.
     */
     */
    private void notifyAddressRemoved(String iface, LinkAddress address) {
    private void notifyAddressRemoved(String iface, LinkAddress address) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mObservers.getBroadcastItem(i).addressRemoved(iface, address);
                    mObservers.getBroadcastItem(i).addressRemoved(iface, address);
@@ -478,23 +503,29 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    /**
    /**
     * Notify our observers of DNS server information received.
     * Notify our observers of DNS server information received.
     */
     */
    private void notifyInterfaceDnsServerInfo(String iface, long lifetime, String[] addresses) {
    private void notifyInterfaceDnsServerInfo(String iface, long lifetime, String[] addresses) {
        final int length = mObservers.beginBroadcast();
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                mObservers.getBroadcastItem(i).interfaceDnsServerInfo(iface, lifetime, addresses);
                    mObservers.getBroadcastItem(i).interfaceDnsServerInfo(iface, lifetime,
                        addresses);
                } catch (RemoteException e) {
                } catch (RemoteException e) {
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mObservers.finishBroadcast();
            mObservers.finishBroadcast();
        }
        }
    }


    //
    //
    // Netd Callback handling
    // Netd Callback handling
@@ -509,7 +540,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                mConnectedSignal.countDown();
                mConnectedSignal.countDown();
                mConnectedSignal = null;
                mConnectedSignal = null;
            } else {
            } else {
                mMainHandler.post(new Runnable() {
                mFgHandler.post(new Runnable() {
                    @Override
                    @Override
                    public void run() {
                    public void run() {
                        prepareNativeDaemon();
                        prepareNativeDaemon();
@@ -1270,7 +1301,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
            if (ConnectivityManager.isNetworkTypeMobile(type)) {
            if (ConnectivityManager.isNetworkTypeMobile(type)) {
                mNetworkActive = false;
                mNetworkActive = false;
            }
            }
            mMainHandler.post(new Runnable() {
            mFgHandler.post(new Runnable() {
                @Override public void run() {
                @Override public void run() {
                    notifyInterfaceClassActivity(type, true, SystemClock.elapsedRealtimeNanos());
                    notifyInterfaceClassActivity(type, true, SystemClock.elapsedRealtimeNanos());
                }
                }
@@ -1297,7 +1328,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                throw e.rethrowAsParcelableException();
                throw e.rethrowAsParcelableException();
            }
            }
            mActiveIdleTimers.remove(iface);
            mActiveIdleTimers.remove(iface);
            mMainHandler.post(new Runnable() {
            mFgHandler.post(new Runnable() {
                @Override public void run() {
                @Override public void run() {
                    notifyInterfaceClassActivity(params.type, false,
                    notifyInterfaceClassActivity(params.type, false,
                            SystemClock.elapsedRealtimeNanos());
                            SystemClock.elapsedRealtimeNanos());
@@ -1880,6 +1911,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub


    private void reportNetworkActive() {
    private void reportNetworkActive() {
        final int length = mNetworkActivityListeners.beginBroadcast();
        final int length = mNetworkActivityListeners.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
                try {
                try {
                    mNetworkActivityListeners.getBroadcastItem(i).onNetworkActive();
                    mNetworkActivityListeners.getBroadcastItem(i).onNetworkActive();
@@ -1887,8 +1919,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                } catch (RuntimeException e) {
                }
                }
            }
            }
        } finally {
            mNetworkActivityListeners.finishBroadcast();
            mNetworkActivityListeners.finishBroadcast();
        }
        }
    }


    /** {@inheritDoc} */
    /** {@inheritDoc} */
    @Override
    @Override