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

Commit 787c53e1 authored by Tyler Gunn's avatar Tyler Gunn Committed by Gerrit Code Review
Browse files

Merge "Wait for IPv4 before sending VVM requests."

parents 36af0d96 63465138
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -202,6 +202,9 @@ public class FetchVoicemailReceiver extends BroadcastReceiver {
        new Runnable() {
          @Override
          public void run() {
            if (networkCallback != null) {
                networkCallback.waitForIpv4();
            }
            try {
              while (retryCount > 0) {
                VvmLog.i(TAG, "fetching voicemail, retry count=" + retryCount);
+5 −1
Original line number Diff line number Diff line
@@ -77,7 +77,11 @@ public class VvmNetworkRequest {
        new FutureNetworkRequestCallback(config, handle, status);
    callback.requestNetwork();
    try {
      return callback.getFuture().get();
      NetworkWrapper ret = callback.getFuture().get();
      if (ret != null) {
          callback.waitForIpv4();
      }
      return ret;
    } catch (InterruptedException | ExecutionException e) {
      callback.releaseNetwork();
      VvmLog.e(TAG, "can't get future network", e);
+19 −0
Original line number Diff line number Diff line
@@ -18,9 +18,12 @@ package com.android.voicemail.impl.sync;
import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.InetAddresses;
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.ConditionVariable;
import android.os.Build.VERSION_CODES;
import android.os.Handler;
import android.os.Looper;
@@ -125,6 +128,22 @@ public abstract class VvmNetworkRequestCallback extends ConnectivityManager.Netw
    resultReceived = true;
  }

  private static final int DEFAULT_IPV4_WAIT_DELAY_MS = 500; // in milliseconds
  private final ConditionVariable mWaitV4Cv = new ConditionVariable();
  @Override
  @CallSuper
  public void onLinkPropertiesChanged(Network network, LinkProperties lp) {
    boolean hasIPv4 = (lp != null) &&
            (lp.isReachable(InetAddresses.parseNumericAddress("8.8.8.8")));
    if(hasIPv4) {
        mWaitV4Cv.open();
    }
  }
  public void waitForIpv4() {
    VvmLog.w(TAG, "Waiting for IPV4 address...");
    mWaitV4Cv.block(DEFAULT_IPV4_WAIT_DELAY_MS);
  }

  @CallSuper
  public void onUnavailable() {
    VvmLog.i(TAG, "onUnavailable");