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

Commit 95d85a07 authored by Bonian Chen's avatar Bonian Chen
Browse files

[Settings] Avoid from EUICC access blocking main thread

Avoid from EUICC accessing form main thread and timeout if API takes too
much time.

Bug: 143996139
Test: manual
Merged-In: Ic1a2bd948b69d40632555d293df6ed56a6b7a712
Change-Id: Ia2a15ee43ce2b49b90c8d0626aee939c536aea56
parent 3e545f2b
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.PersistableBundle;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.provider.Settings;
import android.telecom.PhoneAccountHandle;
@@ -60,9 +61,12 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.graph.SignalDrawable;
import com.android.settingslib.utils.ThreadUtils;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class MobileNetworkUtils {

@@ -290,6 +294,18 @@ public class MobileNetworkUtils {
     * the user has enabled development mode.
     */
    public static boolean showEuiccSettings(Context context) {
        long timeForAccess = SystemClock.elapsedRealtime();
        try {
            return ((Future<Boolean>) ThreadUtils.postOnBackgroundThread(()
                    -> showEuiccSettingsDetecting(context))).get();
        } catch (ExecutionException | InterruptedException exception) {
            timeForAccess = SystemClock.elapsedRealtime() - timeForAccess;
            Log.w(TAG, "Accessing Euicc takes too long: +" + timeForAccess + "ms");
        }
        return false;
    }

    private static Boolean showEuiccSettingsDetecting(Context context) {
        final EuiccManager euiccManager =
                (EuiccManager) context.getSystemService(EuiccManager.class);
        if (!euiccManager.isEnabled()) {