Merge "[Settings] Avoid from EUICC access blocking main thread"

This commit is contained in:
Bonian Chen
2020-08-06 06:05:35 +00:00
committed by Gerrit Code Review

View File

@@ -29,6 +29,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import android.os.SystemClock;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.provider.Settings; import android.provider.Settings;
import android.telecom.PhoneAccountHandle; 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.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.graph.SignalDrawable;
import com.android.settingslib.utils.ThreadUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class MobileNetworkUtils { public class MobileNetworkUtils {
@@ -290,6 +294,18 @@ public class MobileNetworkUtils {
* the user has enabled development mode. * the user has enabled development mode.
*/ */
public static boolean showEuiccSettings(Context context) { 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 = final EuiccManager euiccManager =
(EuiccManager) context.getSystemService(EuiccManager.class); (EuiccManager) context.getSystemService(EuiccManager.class);
if (!euiccManager.isEnabled()) { if (!euiccManager.isEnabled()) {