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

Commit 1ff77669 authored by Jason Monk's avatar Jason Monk
Browse files

Don't show no sim when a sim has been detected.

Instead indicate a lack of signal until we have a subscription to
tell us what to show.

Test: updated existing tests
Change-Id: I170f3782597584e5e761b5c9f9fce3cdbdc26a4f
Fixes: 65744290
parent 6e326268
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -263,7 +263,7 @@ public class CellularTile extends QSTileImpl<SignalState> {
        }

        @Override
        public void setNoSims(boolean show) {
        public void setNoSims(boolean show, boolean simDetected) {
            mInfo.noSim = show;
            if (mInfo.noSim) {
                // Make sure signal gets cleared out when no sims.
+21 −3
Original line number Diff line number Diff line
@@ -22,8 +22,6 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.telephony.SubscriptionInfo;
import android.util.ArraySet;
@@ -53,6 +51,7 @@ import com.android.systemui.tuner.TunerService.Tunable;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

// Intimately tied to the design of res/layout/signal_cluster_view.xml
public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback,
@@ -73,6 +72,7 @@ public class SignalClusterView extends LinearLayout implements NetworkController

    private boolean mNoSimsVisible = false;
    private boolean mVpnVisible = false;
    private boolean mSimDetected;
    private int mVpnIconId = 0;
    private int mLastVpnIconId = -1;
    private boolean mEthernetVisible = false;
@@ -327,8 +327,9 @@ public class SignalClusterView extends LinearLayout implements NetworkController
    }

    @Override
    public void setNoSims(boolean show) {
    public void setNoSims(boolean show, boolean simDetected) {
        mNoSimsVisible = show && !mBlockMobile;
        mSimDetected = simDetected;
        apply();
    }

@@ -548,6 +549,23 @@ public class SignalClusterView extends LinearLayout implements NetworkController
        if (mNoSimsVisible) {
            mIconLogger.onIconShown(SLOT_MOBILE);
            mNoSimsCombo.setVisibility(View.VISIBLE);
            if (!Objects.equals(mSimDetected, mNoSimsCombo.getTag())) {
                mNoSimsCombo.setTag(mSimDetected);
                if (mSimDetected) {
                    SignalDrawable d = new SignalDrawable(mNoSims.getContext());
                    d.setDarkIntensity(0);
                    mNoSims.setImageDrawable(d);
                    mNoSims.setImageLevel(SignalDrawable.getEmptyState(4));

                    SignalDrawable dark = new SignalDrawable(mNoSims.getContext());
                    dark.setDarkIntensity(1);
                    mNoSimsDark.setImageDrawable(dark);
                    mNoSimsDark.setImageLevel(SignalDrawable.getEmptyState(4));
                } else {
                    mNoSims.setImageResource(R.drawable.stat_sys_no_sims);
                    mNoSimsDark.setImageResource(R.drawable.stat_sys_no_sims);
                }
            }
        } else {
            mIconLogger.onIconHidden(SLOT_MOBILE);
            mNoSimsCombo.setVisibility(View.GONE);
+3 −3
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa
                break;
            case MSG_NO_SIM_VISIBLE_CHANGED:
                for (SignalCallback signalCluster : mSignalCallbacks) {
                    signalCluster.setNoSims(msg.arg1 != 0);
                    signalCluster.setNoSims(msg.arg1 != 0, msg.arg2 != 0);
                }
                break;
            case MSG_ETHERNET_CHANGED:
@@ -144,8 +144,8 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa
    }

    @Override
    public void setNoSims(boolean show) {
        obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, 0).sendToTarget();
    public void setNoSims(boolean show, boolean simDetected) {
        obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, simDetected ? 1 : 0).sendToTarget();
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ public interface NetworkController extends CallbackController<SignalCallback>, D
                int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
                String description, boolean isWide, int subId, boolean roaming) {}
        default void setSubs(List<SubscriptionInfo> subs) {}
        default void setNoSims(boolean show) {}
        default void setNoSims(boolean show, boolean simDetected) {}

        default void setEthernetIndicators(IconState icon) {}

+24 −11
Original line number Diff line number Diff line
@@ -58,10 +58,8 @@ import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;

@@ -116,7 +114,7 @@ public class NetworkControllerImpl extends BroadcastReceiver

    // States that don't belong to a subcontroller.
    private boolean mAirplaneMode = false;
    private boolean mHasNoSims;
    private boolean mHasNoSubs;
    private Locale mLocale = null;
    // This list holds our ordering.
    private List<SubscriptionInfo> mCurrentSubscriptions = new ArrayList<>();
@@ -140,6 +138,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
    @VisibleForTesting
    ServiceState mLastServiceState;
    private boolean mUserSetup;
    private boolean mSimDetected;

    /**
     * Construct this controller object and register for updates.
@@ -363,7 +362,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
        cb.setSubs(mCurrentSubscriptions);
        cb.setIsAirplaneMode(new IconState(mAirplaneMode,
                TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
        cb.setNoSims(mHasNoSims);
        cb.setNoSims(mHasNoSubs, mSimDetected);
        mWifiSignalController.notifyListeners(cb);
        mEthernetSignalController.notifyListeners(cb);
        for (int i = 0; i < mMobileSignalControllers.size(); i++) {
@@ -498,13 +497,27 @@ public class NetworkControllerImpl extends BroadcastReceiver

    @VisibleForTesting
    protected void updateNoSims() {
        boolean hasNoSims = mHasMobileDataFeature && mMobileSignalControllers.size() == 0;
        if (hasNoSims != mHasNoSims) {
            mHasNoSims = hasNoSims;
            mCallbackHandler.setNoSims(mHasNoSims);
        boolean hasNoSubs = mHasMobileDataFeature && mMobileSignalControllers.size() == 0;
        boolean simDetected = hasAnySim();
        if (hasNoSubs != mHasNoSubs || simDetected != mSimDetected) {
            mHasNoSubs = hasNoSubs;
            mSimDetected = simDetected;
            mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
        }
    }

    private boolean hasAnySim() {
        int simCount = mPhone.getSimCount();
        for (int i = 0; i < simCount; i++) {
            int state = mPhone.getSimState(i);
            if (state != TelephonyManager.SIM_STATE_ABSENT
                    && state != TelephonyManager.SIM_STATE_UNKNOWN) {
                return true;
            }
        }
        return false;
    }

    @VisibleForTesting
    void setCurrentSubscriptions(List<SubscriptionInfo> subscriptions) {
        Collections.sort(subscriptions, new Comparator<SubscriptionInfo>() {
@@ -631,7 +644,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
    private void notifyListeners() {
        mCallbackHandler.setIsAirplaneMode(new IconState(mAirplaneMode,
                TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
        mCallbackHandler.setNoSims(mHasNoSims);
        mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
    }

    /**
@@ -822,8 +835,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
            }
            String nosim = args.getString("nosim");
            if (nosim != null) {
                mHasNoSims = nosim.equals("show");
                mCallbackHandler.setNoSims(mHasNoSims);
                mHasNoSubs = nosim.equals("show");
                mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
            }
            String mobile = args.getString("mobile");
            if (mobile != null) {
Loading