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

Commit f82b1643 authored by Tyler Gunn's avatar Tyler Gunn Committed by Automerger Merge Worker
Browse files

Merge "Wait for IPv4 before sending VVM requests." am: 787c53e1

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Dialer/+/1724610

Change-Id: I678654bfa7e16fe3a28119bf2a8b6e13b5f683c1
parents 38216704 787c53e1
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");