Bug 1368969 - Disconnect socket when Leanplum stop. WIP draft
authorNevin Chen <cnevinchen@gmail.com>
Wed, 31 May 2017 18:18:34 +0800
changeset 586976 e62b0e1422cdad53a5e99c0444d7ec222a3ec61d
parent 586536 39d5cc0fda5e16c49a59d29d4ca186a5534cc88b
child 631160 aa48f19574dd506cad1a5bfa41baba15118960c2
push id61588
push userbmo:cnevinchen@gmail.com
push dateWed, 31 May 2017 10:19:12 +0000
bugs1368969
milestone55.0a1
Bug 1368969 - Disconnect socket when Leanplum stop. WIP MozReview-Commit-ID: 9TT5Iahr95O
mobile/android/base/java/org/mozilla/gecko/mma/MmaLeanplumImp.java
mobile/android/thirdparty/com/leanplum/Leanplum.java
mobile/android/thirdparty/com/leanplum/internal/Socket.java
mobile/android/thirdparty/com/leanplum/internal/SocketIOClient.java
--- a/mobile/android/base/java/org/mozilla/gecko/mma/MmaLeanplumImp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/mma/MmaLeanplumImp.java
@@ -75,16 +75,18 @@ public class MmaLeanplumImp implements M
     @Override
     public void track(String leanplumEvent, double value) {
         Leanplum.track(leanplumEvent, value);
 
     }
 
     @Override
     public void stop() {
+
+        Leanplum.enableTestMode();
         Leanplum.stop();
     }
 
     private static boolean isPackageInstalled(final Context context, String packageName) {
         try {
             PackageManager pm = context.getPackageManager();
             pm.getPackageInfo(packageName, 0);
             return true;
--- a/mobile/android/thirdparty/com/leanplum/Leanplum.java
+++ b/mobile/android/thirdparty/com/leanplum/Leanplum.java
@@ -42,16 +42,17 @@ import com.leanplum.internal.FileManager
 import com.leanplum.internal.JsonConverter;
 import com.leanplum.internal.LeanplumInternal;
 import com.leanplum.internal.LeanplumMessageMatchFilter;
 import com.leanplum.internal.LeanplumUIEditorWrapper;
 import com.leanplum.internal.Log;
 import com.leanplum.internal.OsHandler;
 import com.leanplum.internal.Registration;
 import com.leanplum.internal.Request;
+import com.leanplum.internal.Socket;
 import com.leanplum.internal.Util;
 import com.leanplum.internal.Util.DeviceIdInfo;
 import com.leanplum.internal.VarCache;
 import com.leanplum.messagetemplates.MessageTemplates;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
@@ -1042,16 +1043,17 @@ public class Leanplum {
             Util.handleException(t);
           }
         }
       });
     }
   }
 
   private static void stopInternal() {
+    Socket.getInstance().disconnect();
     Request.post(Constants.Methods.STOP, null).sendIfConnected();
   }
 
   /**
    * Whether or not Leanplum has finished starting.
    */
   public static boolean hasStarted() {
     return LeanplumInternal.hasStarted();
--- a/mobile/android/thirdparty/com/leanplum/internal/Socket.java
+++ b/mobile/android/thirdparty/com/leanplum/internal/Socket.java
@@ -146,16 +146,17 @@ public class Socket {
     };
 
     try {
       sio = new SocketIOClient(new URI("http://" + Constants.SOCKET_HOST + ":" +
           Constants.SOCKET_PORT), socketIOClientHandler);
     } catch (URISyntaxException e) {
       Log.e(e.getMessage());
     }
+
     connect();
     Timer reconnectTimer = new Timer();
     reconnectTimer.schedule(new TimerTask() {
       @Override
       public void run() {
         try {
           reconnect();
         } catch (Throwable t) {
@@ -168,16 +169,21 @@ public class Socket {
   /**
    * Connect to the remote socket.
    */
   private void connect() {
     connecting = true;
     sio.connect();
   }
 
+  public void disconnect() {
+    connecting = false;
+    sio.disconnect();
+  }
+
   /**
    * Disconnect from the remote socket.
    */
   private void reconnect() {
     if (!connected && !connecting) {
       connect();
     }
   }
--- a/mobile/android/thirdparty/com/leanplum/internal/SocketIOClient.java
+++ b/mobile/android/thirdparty/com/leanplum/internal/SocketIOClient.java
@@ -223,21 +223,21 @@ class SocketIOClient {
               }
             }, mHeartbeat);
             mHandler.onConnect();
           }
         }, null);
     mClient.connect();
   }
 
-  public void disconnect() throws IOException {
+  public void disconnect() {
     cleanup();
   }
 
-  private void cleanup() {
+  public void cleanup() {
     if (mClient != null) {
       mClient.disconnect();
       mClient = null;
     }
 
     if (mSendLooper != null) {
       mSendLooper.quit();
     }