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

Commit 361e0a91 authored by Aaron Huang's avatar Aaron Huang Committed by Gerrit Code Review
Browse files

Merge "Refactor setCurrentProxyScriptUrl to a void method"

parents 6423b430 20384eea
Loading
Loading
Loading
Loading
+41 −35
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.connectivity;

import android.annotation.NonNull;
import android.annotation.WorkerThread;
import android.app.AlarmManager;
import android.app.PendingIntent;
@@ -71,10 +72,6 @@ public class PacProxyInstaller {
    private static final int DELAY_LONG = 4;
    private static final long MAX_PAC_SIZE = 20 * 1000 * 1000;

    // Return values for #setCurrentProxyScriptUrl
    public static final boolean DONT_SEND_BROADCAST = false;
    public static final boolean DO_SEND_BROADCAST = true;

    private String mCurrentPac;
    @GuardedBy("mProxyLock")
    private volatile Uri mPacUrl = Uri.EMPTY;
@@ -93,7 +90,7 @@ public class PacProxyInstaller {
    private volatile boolean mHasSentBroadcast;
    private volatile boolean mHasDownloaded;

    private Handler mConnectivityHandler;
    private final Handler mConnectivityHandler;
    private final int mProxyMessage;

    /**
@@ -101,6 +98,13 @@ public class PacProxyInstaller {
     */
    private final Object mProxyLock = new Object();

    /**
     * Lock ensuring consistency between the values of mHasSentBroadcast, mHasDownloaded, the
     * last URL and port, and the broadcast message being sent with the correct arguments.
     * TODO : this should probably protect all instances of these variables
     */
    private final Object mBroadcastStateLock = new Object();

    /**
     * Runnable to download PAC script.
     * The behavior relies on the assumption it always runs on mNetThread to guarantee that the
@@ -146,7 +150,7 @@ public class PacProxyInstaller {
        }
    }

    public PacProxyInstaller(Context context, Handler handler, int proxyMessage) {
    public PacProxyInstaller(@NonNull Context context, @NonNull Handler handler, int proxyMessage) {
        mContext = context;
        mLastPort = -1;
        final HandlerThread netThread = new HandlerThread("android.pacproxyinstaller",
@@ -176,21 +180,17 @@ public class PacProxyInstaller {
     * PacProxyInstaller will trigger a new broadcast when it is ready.
     *
     * @param proxy Proxy information that is about to be broadcast.
     * @return Returns whether the broadcast should be sent : either DO_ or DONT_SEND_BROADCAST
     */
    public synchronized boolean setCurrentProxyScriptUrl(ProxyInfo proxy) {
    public void setCurrentProxyScriptUrl(@NonNull ProxyInfo proxy) {
        synchronized (mBroadcastStateLock) {
            if (!Uri.EMPTY.equals(proxy.getPacFileUrl())) {
            if (proxy.getPacFileUrl().equals(mPacUrl) && (proxy.getPort() > 0)) {
                // Allow to send broadcast, nothing to do.
                return DO_SEND_BROADCAST;
            }
                if (proxy.getPacFileUrl().equals(mPacUrl) && (proxy.getPort() > 0)) return;
                mPacUrl = proxy.getPacFileUrl();
                mCurrentDelay = DELAY_1;
                mHasSentBroadcast = false;
                mHasDownloaded = false;
                getAlarmManager().cancel(mPacRefreshIntent);
                bind();
            return DONT_SEND_BROADCAST;
            } else {
                getAlarmManager().cancel(mPacRefreshIntent);
                synchronized (mProxyLock) {
@@ -200,7 +200,7 @@ public class PacProxyInstaller {
                        unbind();
                    }
                }
            return DO_SEND_BROADCAST;
            }
        }
    }

@@ -275,6 +275,7 @@ public class PacProxyInstaller {
        getAlarmManager().set(AlarmManager.ELAPSED_REALTIME, timeTillTrigger, mPacRefreshIntent);
    }

    @GuardedBy("mProxyLock")
    private void setCurrentProxyScript(String script) {
        if (mProxyService == null) {
            Log.e(TAG, "setCurrentProxyScript: no proxy service");
@@ -347,6 +348,9 @@ public class PacProxyInstaller {
                            public void setProxyPort(int port) {
                                if (mLastPort != -1) {
                                    // Always need to send if port changed
                                    // TODO: Here lacks synchronization because this write cannot
                                    // guarantee that it's visible from sendProxyIfNeeded() when
                                    // it's called by a Runnable which is post by mNetThread.
                                    mHasSentBroadcast = false;
                                }
                                mLastPort = port;
@@ -386,7 +390,8 @@ public class PacProxyInstaller {
        mConnectivityHandler.sendMessage(mConnectivityHandler.obtainMessage(mProxyMessage, proxy));
    }

    private synchronized void sendProxyIfNeeded() {
    private void sendProxyIfNeeded() {
        synchronized (mBroadcastStateLock) {
            if (!mHasDownloaded || (mLastPort == -1)) {
                return;
            }
@@ -396,3 +401,4 @@ public class PacProxyInstaller {
            }
        }
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -226,9 +226,9 @@ public class ProxyTracker {
        final ProxyInfo defaultProxy = getDefaultProxy();
        final ProxyInfo proxyInfo = null != defaultProxy ?
                defaultProxy : ProxyInfo.buildDirectProxy("", 0, Collections.emptyList());
        mPacProxyInstaller.setCurrentProxyScriptUrl(proxyInfo);

        if (mPacProxyInstaller.setCurrentProxyScriptUrl(proxyInfo)
                == PacProxyInstaller.DONT_SEND_BROADCAST) {
        if (!shouldSendBroadcast(proxyInfo)) {
            return;
        }
        if (DBG) Log.d(TAG, "sending Proxy Broadcast for " + proxyInfo);
@@ -244,6 +244,13 @@ public class ProxyTracker {
        }
    }

    private boolean shouldSendBroadcast(ProxyInfo proxy) {
        if (Uri.EMPTY.equals(proxy.getPacFileUrl())) return false;
        if (proxy.getPacFileUrl().equals(proxy.getPacFileUrl())
                && (proxy.getPort() > 0)) return true;
        return true;
    }

    /**
     * Sets the global proxy in memory. Also writes the values to the global settings of the device.
     *