Loading src/java/com/android/internal/telephony/SignalStrengthController.java +17 −3 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.subscription.SubscriptionManagerService; import com.android.internal.telephony.util.ArrayUtils; import com.android.internal.telephony.util.TelephonyUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.telephony.Rlog; Loading @@ -60,6 +61,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.UUID; Loading Loading @@ -101,7 +103,7 @@ public class SignalStrengthController extends Handler { private static final int EVENT_GET_SIGNAL_STRENGTH = 6; private static final int EVENT_POLL_SIGNAL_STRENGTH = 7; private static final int EVENT_SIGNAL_STRENGTH_UPDATE = 8; private static final int EVENT_POLL_SIGNAL_STRENGTH_DONE = 9; public static final int EVENT_POLL_SIGNAL_STRENGTH_DONE = 9; private static final int EVENT_SERVICE_STATE_CHANGED = 10; @NonNull Loading Loading @@ -330,7 +332,7 @@ public class SignalStrengthController extends Handler { * @param signalStrength The new SignalStrength used for updating {@code mSignalStrength}. */ private void updateSignalStrength(@NonNull SignalStrength signalStrength) { mSignalStrength = signalStrength; mSignalStrength = maybeOverrideSignalStrengthForTest(signalStrength); ServiceStateTracker serviceStateTracker = mPhone.getServiceStateTracker(); if (serviceStateTracker != null) { mSignalStrength.updateLevel(mCarrierConfig, serviceStateTracker.mSS); Loading @@ -341,6 +343,18 @@ public class SignalStrengthController extends Handler { notifySignalStrength(); } /** * For debug test build, override signal strength for testing. * @param original The real signal strength to use if not in testing mode. * @return The signal strength to broadcast to the external. */ @NonNull private SignalStrength maybeOverrideSignalStrengthForTest( @NonNull SignalStrength original) { return TelephonyUtils.IS_DEBUGGABLE && mPhone.getTelephonyTester() != null ? Objects.requireNonNullElse(mPhone.getTelephonyTester() .getOverriddenSignalStrength(), original) : original; } /** * @return signal strength */ Loading Loading @@ -750,7 +764,7 @@ public class SignalStrengthController extends Handler { } void setSignalStrengthDefaultValues() { mSignalStrength = new SignalStrength(); mSignalStrength = maybeOverrideSignalStrengthForTest(new SignalStrength()); mSignalStrengthUpdatedTime = System.currentTimeMillis(); } Loading src/java/com/android/internal/telephony/TelephonyTester.java +64 −4 Original line number Diff line number Diff line Loading @@ -17,16 +17,21 @@ package com.android.internal.telephony; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.AsyncResult; import android.os.BadParcelableException; import android.os.Bundle; import android.os.PersistableBundle; import android.telephony.AccessNetworkConstants; import android.telephony.CellSignalStrengthLte; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.telephony.ims.ImsCallProfile; import android.telephony.ims.ImsConferenceState; Loading @@ -46,6 +51,7 @@ import com.android.telephony.Rlog; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading Loading @@ -163,6 +169,7 @@ public class TelephonyTester { private static List<ImsExternalCallState> mImsExternalCallStates = null; private Intent mServiceStateTestIntent; private SignalStrengthTestable mSignalStrengthTest; private Phone mPhone; Loading Loading @@ -385,12 +392,69 @@ public class TelephonyTester { } } /** * Testable signal strength that mocks its fields. */ private class SignalStrengthTestable extends SignalStrength { private SignalStrengthTestable() { super(); } public void mockLevel(int level) { try { Field lteField = SignalStrength.class.getDeclaredField("mLte"); lteField.setAccessible(true); CellSignalStrengthLte lte = (CellSignalStrengthLte) lteField.get(this); Field lvlField = CellSignalStrengthLte.class.getDeclaredField("mLevel"); lvlField.setAccessible(true); lvlField.set(lte, level); } catch (Exception e) { log("SignalStrengthTestable: mockLevel " + e); } } @Override public void updateLevel(PersistableBundle cc, ServiceState ss) { log("SignalStrengthTestable: updateLevel: do nothing "); } @Override public String toString() { return "SignalStrengthTestable-" + getLevel(); } } /** {@link android.telephony.SignalStrength} */ public void setSignalStrength(int level) { if (level > -1) { log("setSignalStrength: level " + level); mSignalStrengthTest = new SignalStrengthTestable(); mSignalStrengthTest.mockLevel(level); AsyncResult ar = new AsyncResult(null, mSignalStrengthTest, null); mPhone.getSignalStrengthController().sendMessage(mPhone.getSignalStrengthController() .obtainMessage(SignalStrengthController.EVENT_POLL_SIGNAL_STRENGTH_DONE, ar)); } else { log("setSignalStrength: clear mock"); mSignalStrengthTest = null; mPhone.getSignalStrengthController().getSignalStrengthFromCi(); } } /** {@link android.telephony.SignalStrength} */ @Nullable public SignalStrength getOverriddenSignalStrength() { return mSignalStrengthTest; } /** * Set the service state test intent. * * @param intent The service state test intent. */ public void setServiceStateTestIntent(@NonNull Intent intent) { // Don't process if the intent is not prepared for this phone slot. if (mPhone.getPhoneId() != intent.getIntExtra(EXTRA_PHONE_ID, mPhone.getPhoneId())) return; mServiceStateTestIntent = intent; // Trigger the service state update. The replacement will be done in // overrideServiceState(). Loading @@ -400,10 +464,6 @@ public class TelephonyTester { void overrideServiceState(ServiceState ss) { if (mServiceStateTestIntent == null || ss == null) return; if (mPhone.getPhoneId() != mServiceStateTestIntent.getIntExtra( EXTRA_PHONE_ID, mPhone.getPhoneId())) { return; } if (mServiceStateTestIntent.hasExtra(EXTRA_ACTION) && ACTION_RESET.equals(mServiceStateTestIntent.getStringExtra(EXTRA_ACTION))) { log("Service state override reset"); Loading Loading
src/java/com/android/internal/telephony/SignalStrengthController.java +17 −3 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.subscription.SubscriptionManagerService; import com.android.internal.telephony.util.ArrayUtils; import com.android.internal.telephony.util.TelephonyUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.telephony.Rlog; Loading @@ -60,6 +61,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.UUID; Loading Loading @@ -101,7 +103,7 @@ public class SignalStrengthController extends Handler { private static final int EVENT_GET_SIGNAL_STRENGTH = 6; private static final int EVENT_POLL_SIGNAL_STRENGTH = 7; private static final int EVENT_SIGNAL_STRENGTH_UPDATE = 8; private static final int EVENT_POLL_SIGNAL_STRENGTH_DONE = 9; public static final int EVENT_POLL_SIGNAL_STRENGTH_DONE = 9; private static final int EVENT_SERVICE_STATE_CHANGED = 10; @NonNull Loading Loading @@ -330,7 +332,7 @@ public class SignalStrengthController extends Handler { * @param signalStrength The new SignalStrength used for updating {@code mSignalStrength}. */ private void updateSignalStrength(@NonNull SignalStrength signalStrength) { mSignalStrength = signalStrength; mSignalStrength = maybeOverrideSignalStrengthForTest(signalStrength); ServiceStateTracker serviceStateTracker = mPhone.getServiceStateTracker(); if (serviceStateTracker != null) { mSignalStrength.updateLevel(mCarrierConfig, serviceStateTracker.mSS); Loading @@ -341,6 +343,18 @@ public class SignalStrengthController extends Handler { notifySignalStrength(); } /** * For debug test build, override signal strength for testing. * @param original The real signal strength to use if not in testing mode. * @return The signal strength to broadcast to the external. */ @NonNull private SignalStrength maybeOverrideSignalStrengthForTest( @NonNull SignalStrength original) { return TelephonyUtils.IS_DEBUGGABLE && mPhone.getTelephonyTester() != null ? Objects.requireNonNullElse(mPhone.getTelephonyTester() .getOverriddenSignalStrength(), original) : original; } /** * @return signal strength */ Loading Loading @@ -750,7 +764,7 @@ public class SignalStrengthController extends Handler { } void setSignalStrengthDefaultValues() { mSignalStrength = new SignalStrength(); mSignalStrength = maybeOverrideSignalStrengthForTest(new SignalStrength()); mSignalStrengthUpdatedTime = System.currentTimeMillis(); } Loading
src/java/com/android/internal/telephony/TelephonyTester.java +64 −4 Original line number Diff line number Diff line Loading @@ -17,16 +17,21 @@ package com.android.internal.telephony; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.AsyncResult; import android.os.BadParcelableException; import android.os.Bundle; import android.os.PersistableBundle; import android.telephony.AccessNetworkConstants; import android.telephony.CellSignalStrengthLte; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.telephony.ims.ImsCallProfile; import android.telephony.ims.ImsConferenceState; Loading @@ -46,6 +51,7 @@ import com.android.telephony.Rlog; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading Loading @@ -163,6 +169,7 @@ public class TelephonyTester { private static List<ImsExternalCallState> mImsExternalCallStates = null; private Intent mServiceStateTestIntent; private SignalStrengthTestable mSignalStrengthTest; private Phone mPhone; Loading Loading @@ -385,12 +392,69 @@ public class TelephonyTester { } } /** * Testable signal strength that mocks its fields. */ private class SignalStrengthTestable extends SignalStrength { private SignalStrengthTestable() { super(); } public void mockLevel(int level) { try { Field lteField = SignalStrength.class.getDeclaredField("mLte"); lteField.setAccessible(true); CellSignalStrengthLte lte = (CellSignalStrengthLte) lteField.get(this); Field lvlField = CellSignalStrengthLte.class.getDeclaredField("mLevel"); lvlField.setAccessible(true); lvlField.set(lte, level); } catch (Exception e) { log("SignalStrengthTestable: mockLevel " + e); } } @Override public void updateLevel(PersistableBundle cc, ServiceState ss) { log("SignalStrengthTestable: updateLevel: do nothing "); } @Override public String toString() { return "SignalStrengthTestable-" + getLevel(); } } /** {@link android.telephony.SignalStrength} */ public void setSignalStrength(int level) { if (level > -1) { log("setSignalStrength: level " + level); mSignalStrengthTest = new SignalStrengthTestable(); mSignalStrengthTest.mockLevel(level); AsyncResult ar = new AsyncResult(null, mSignalStrengthTest, null); mPhone.getSignalStrengthController().sendMessage(mPhone.getSignalStrengthController() .obtainMessage(SignalStrengthController.EVENT_POLL_SIGNAL_STRENGTH_DONE, ar)); } else { log("setSignalStrength: clear mock"); mSignalStrengthTest = null; mPhone.getSignalStrengthController().getSignalStrengthFromCi(); } } /** {@link android.telephony.SignalStrength} */ @Nullable public SignalStrength getOverriddenSignalStrength() { return mSignalStrengthTest; } /** * Set the service state test intent. * * @param intent The service state test intent. */ public void setServiceStateTestIntent(@NonNull Intent intent) { // Don't process if the intent is not prepared for this phone slot. if (mPhone.getPhoneId() != intent.getIntExtra(EXTRA_PHONE_ID, mPhone.getPhoneId())) return; mServiceStateTestIntent = intent; // Trigger the service state update. The replacement will be done in // overrideServiceState(). Loading @@ -400,10 +464,6 @@ public class TelephonyTester { void overrideServiceState(ServiceState ss) { if (mServiceStateTestIntent == null || ss == null) return; if (mPhone.getPhoneId() != mServiceStateTestIntent.getIntExtra( EXTRA_PHONE_ID, mPhone.getPhoneId())) { return; } if (mServiceStateTestIntent.hasExtra(EXTRA_ACTION) && ACTION_RESET.equals(mServiceStateTestIntent.getStringExtra(EXTRA_ACTION))) { log("Service state override reset"); Loading