Merge "Don't show no sim when a sim has been detected." into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-09-29 18:08:10 +00:00
committed by Android (Google) Code Review
7 changed files with 55 additions and 29 deletions

View File

@@ -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.

View File

@@ -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);

View File

@@ -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

View File

@@ -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) {}

View File

@@ -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) {

View File

@@ -161,12 +161,11 @@ public class CallbackHandlerTest extends SysuiTestCase {
@Test
public void testSignalCallback_setNoSims() {
boolean noSims = true;
mHandler.setNoSims(noSims);
boolean simDetected = false;
mHandler.setNoSims(noSims, simDetected);
waitForCallbacks();
ArgumentCaptor<Boolean> noSimsArg = ArgumentCaptor.forClass(Boolean.class);
Mockito.verify(mSignalCallback).setNoSims(noSimsArg.capture());
assertEquals(noSims, (boolean) noSimsArg.getValue());
Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected));
}
@Test

View File

@@ -46,8 +46,6 @@ import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -292,10 +290,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
}
protected void verifyHasNoSims(boolean hasNoSimsVisible) {
ArgumentCaptor<Boolean> hasNoSimsArg = ArgumentCaptor.forClass(Boolean.class);
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setNoSims(hasNoSimsArg.capture());
assertEquals("No sims", hasNoSimsVisible, (boolean) hasNoSimsArg.getValue());
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setNoSims(
eq(hasNoSimsVisible), eq(false));
}
protected void verifyLastQsMobileDataIndicators(boolean visible, int icon, int typeIcon,