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 Diff line number Diff line
@@ -153,7 +153,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     */
    private NativeDaemonConnector mConnector;

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

    private IBatteryStats mBatteryStats;

@@ -203,6 +203,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub
    private NetworkManagementService(Context context, String socket) {
        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"))) {
            return;
        }
@@ -271,6 +274,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     */
    private void notifyInterfaceStatusChanged(String iface, boolean up) {
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
                try {
                    mObservers.getBroadcastItem(i).interfaceStatusChanged(iface, up);
@@ -278,8 +282,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                }
            }
        } finally {
            mObservers.finishBroadcast();
        }
    }

    /**
     * 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) {
        final int length = mObservers.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
                try {
                    mObservers.getBroadcastItem(i).interfaceLinkStateChanged(iface, up);
@@ -294,14 +301,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                } catch (RuntimeException e) {
                }
            }
        } finally {
            mObservers.finishBroadcast();
        }
    }

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

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

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

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

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

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

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

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

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

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

    /** {@inheritDoc} */
    @Override