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

Commit 2a1e41fc authored by Ling Ma's avatar Ling Ma Committed by Android (Google) Code Review
Browse files

Merge "Add feature flag for old change" into main

parents 9f79f97d fd7d6a15
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
package: "com.android.internal.telephony.flags"

flag {
  name: "use_alarm_callback"
  namespace: "telephony"
  description: "Use alarm callback instead of broadcast."
  bug: "311476875"
}

flag {
  name: "refine_preferred_data_profile_selection"
  namespace: "telephony"
  description: "Upon internet network connect, refine selection of preferred data profile."
  bug: "311476883"
}

flag {
  name: "unthrottle_check_transport"
  namespace: "telephony"
+30 −12
Original line number Diff line number Diff line
@@ -419,10 +419,12 @@ public class DataProfileManager extends Handler {
     * @param internetNetworks The connected internet data networks.
     */
    private void onInternetDataNetworkConnected(@NonNull Set<DataNetwork> internetNetworks) {
        DataProfile defaultProfile = null;
        if (mFeatureFlags.refinePreferredDataProfileSelection()) {
            // Most of the cases there should be only one.
            // but in case there are multiple, find the default internet network, and choose the
            // one which has longest life cycle.
        DataProfile defaultProfile = internetNetworks.stream()
            defaultProfile = internetNetworks.stream()
                    .filter(network -> mPreferredDataProfile == null
                            // Find the one most resembles the current preferred profile,
                            // avoiding e.g. DUN default network.
@@ -431,6 +433,22 @@ public class DataProfileManager extends Handler {
                    .map(DataNetwork::getDataProfile)
                    .min(Comparator.comparingLong(DataProfile::getLastSetupTimestamp))
                    .orElse(null);
        } else {
            if (internetNetworks.size() == 1) {
                // Most of the cases there should be only one.
                defaultProfile = internetNetworks.stream().findFirst().get().getDataProfile();
            } else if (internetNetworks.size() > 1) {
                // but in case there are multiple, find the default internet network, and choose the
                // one which has longest life cycle.
                defaultProfile = internetNetworks.stream()
                        .filter(network -> mPreferredDataProfile == null
                                || canPreferredDataProfileSatisfy(
                                network.getAttachedNetworkRequestList()))
                        .map(DataNetwork::getDataProfile)
                        .min(Comparator.comparingLong(DataProfile::getLastSetupTimestamp))
                        .orElse(null);
            }
        }

        // Update a working internet data profile as a future candidate for preferred data profile
        // after APNs are reset to default
+68 −13
Original line number Diff line number Diff line
@@ -22,6 +22,11 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.NetworkCapabilities;
import android.os.AsyncResult;
import android.os.Handler;
@@ -74,6 +79,11 @@ import java.util.stream.Stream;
public class DataRetryManager extends Handler {
    private static final boolean VDBG = false;

    /** Intent of Alarm Manager for long retry timer. */
    private static final String ACTION_RETRY = "com.android.internal.telephony.data.ACTION_RETRY";
    /** The extra key for the hashcode of the retry entry for Alarm Manager. */
    private static final String ACTION_RETRY_EXTRA_HASHCODE = "extra_retry_hashcode";

    /** Event for data setup retry. */
    private static final int EVENT_DATA_SETUP_RETRY = 3;

@@ -1014,6 +1024,22 @@ public class DataRetryManager extends Handler {
        mRil.registerForOn(this, EVENT_RADIO_ON, null);
        mRil.registerForModemReset(this, EVENT_MODEM_RESET, null);

        if (!mFlags.useAlarmCallback()) {
            // Register intent of alarm manager for long retry timer
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(ACTION_RETRY);
            mPhone.getContext().registerReceiver(new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    if (ACTION_RETRY.equals(intent.getAction())) {
                        DataRetryManager.this.onAlarmIntentRetry(
                                intent.getIntExtra(ACTION_RETRY_EXTRA_HASHCODE,
                                        -1 /*Bad hashcode*/));
                    }
                }
            }, intentFilter);
        }

        if (mDataConfigManager.shouldResetDataThrottlingWhenTacChanges()) {
            mPhone.getServiceStateTracker().registerForAreaCodeChanged(this, EVENT_TAC_CHANGED,
                    null);
@@ -1449,8 +1475,9 @@ public class DataRetryManager extends Handler {
                            ? EVENT_DATA_SETUP_RETRY : EVENT_DATA_HANDOVER_RETRY, dataRetryEntry),
                    dataRetryEntry.retryDelayMillis);
        } else {
            // No need to wake up the device, the retry can wait util next time the device wake up
            // to save power.
            if (mFlags.useAlarmCallback()) {
                // No need to wake up the device, the retry can wait util next time the device wake
                // up to save power.
                mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME,
                        dataRetryEntry.retryElapsedTime,
                        "dataRetryHash-" + dataRetryEntry.hashCode() /*debug tag*/,
@@ -1462,6 +1489,34 @@ public class DataRetryManager extends Handler {
                                            ? EVENT_DATA_SETUP_RETRY : EVENT_DATA_HANDOVER_RETRY,
                                    dataRetryEntry));
                        });
            } else {
                Intent intent = new Intent(ACTION_RETRY);
                intent.putExtra(ACTION_RETRY_EXTRA_HASHCODE, dataRetryEntry.hashCode());
                // No need to wake up the device, the retry can wait util next time the device wake
                // up  to save power.
                mAlarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME,
                        dataRetryEntry.retryElapsedTime,
                        PendingIntent.getBroadcast(mPhone.getContext(),
                                dataRetryEntry.hashCode()/*Unique identifier of the retry attempt*/,
                                intent,
                                PendingIntent.FLAG_IMMUTABLE));
            }
        }
    }

    /**
     * Called when it's time to retry scheduled by Alarm Manager.
     * @param retryHashcode The hashcode is the unique identifier of which retry entry to retry.
     */
    private void onAlarmIntentRetry(int retryHashcode) {
        DataRetryEntry dataRetryEntry = mDataRetryEntries.stream()
                .filter(entry -> entry.hashCode() == retryHashcode)
                .findAny()
                .orElse(null);
        logl("onAlarmIntentRetry: found " + dataRetryEntry + " with hashcode " + retryHashcode);
        if (dataRetryEntry != null) {
            sendMessage(obtainMessage(dataRetryEntry instanceof DataSetupRetryEntry
                    ? EVENT_DATA_SETUP_RETRY : EVENT_DATA_HANDOVER_RETRY, dataRetryEntry));
        }
    }

+1 −4
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback;
import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback;
import com.android.internal.telephony.data.DataProfileManager.DataProfileManagerCallback;
import com.android.internal.telephony.flags.FeatureFlags;

import org.junit.After;
import org.junit.Before;
@@ -100,8 +99,6 @@ public class DataProfileManagerTest extends TelephonyTest {

    private DataProfileManager mDataProfileManagerUT;

    private FeatureFlags mFeatureFlags;

    private final ApnSettingContentProvider mApnSettingContentProvider =
            new ApnSettingContentProvider();

@@ -835,7 +832,6 @@ public class DataProfileManagerTest extends TelephonyTest {
        logd("DataProfileManagerTest +Setup!");
        super.setUp(getClass().getSimpleName());
        mDataProfileManagerCallback = Mockito.mock(DataProfileManagerCallback.class);
        mFeatureFlags = Mockito.mock(FeatureFlags.class);
        ((MockContentResolver) mContext.getContentResolver()).addProvider(
                Telephony.Carriers.CONTENT_URI.getAuthority(), mApnSettingContentProvider);

@@ -1035,6 +1031,7 @@ public class DataProfileManagerTest extends TelephonyTest {

    @Test
    public void testSetPreferredDataProfile() {
        doReturn(true).when(mFeatureFlags).refinePreferredDataProfileSelection();
        TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(
                new NetworkRequest.Builder()
                        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+1 −0
Original line number Diff line number Diff line
@@ -786,6 +786,7 @@ public class DataRetryManagerTest extends TelephonyTest {

    @Test
    public void testDataRetryLongTimer() {
        doReturn(true).when(mFeatureFlags).useAlarmCallback();
        // Rule requires a long timer
        DataSetupRetryRule retryRule = new DataSetupRetryRule(
                "capabilities=internet, retry_interval=120000, maximum_retries=2");