diff options
author | Googler <noreply@google.com> | 2024-05-07 08:55:04 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-05-07 08:56:00 -0700 |
commit | 7055db222c512ebb4779b50e6ad0363d7f848f83 (patch) | |
tree | 05a67be870f85c8d02197a9fc2612b6a7e84e8ff | |
parent | 1e69220999d60b120d5338aff4f5d7121e09d63c (diff) | |
download | robolectric-7055db222c512ebb4779b50e6ad0363d7f848f83.tar.gz |
Add shadow method for TelephonyManager.rebootModem
Also add a public shadow API to keep track of the reboot
count.
PiperOrigin-RevId: 631439597
-rw-r--r-- | robolectric/src/test/java/org/robolectric/shadows/ShadowTelephonyManagerTest.java | 17 | ||||
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ShadowTelephonyManager.java | 19 |
2 files changed, 36 insertions, 0 deletions
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowTelephonyManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowTelephonyManagerTest.java index c3535c043..ead36aeea 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowTelephonyManagerTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowTelephonyManagerTest.java @@ -1530,4 +1530,21 @@ public class ShadowTelephonyManagerTest { IllegalStateException.class, () -> shadowTelephonyManager.setCarrierRestrictionRules(new Object())); } + + @Test + @Config(minSdk = Q) + public void rebootModem_rebootsModem() { + shadowOf((Application) ApplicationProvider.getApplicationContext()) + .grantPermissions(permission.MODIFY_PHONE_STATE); + + shadowTelephonyManager.rebootModem(); + + assertThat(shadowTelephonyManager.getModemRebootCount()).isEqualTo(1); + } + + @Test() + @Config(minSdk = Q) + public void rebootModem_noModifyPhoneStatePermission_throwsSecurityException() { + assertThrows(SecurityException.class, () -> shadowTelephonyManager.rebootModem()); + } } diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTelephonyManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTelephonyManager.java index b9f9a949f..02aa751c3 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTelephonyManager.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTelephonyManager.java @@ -68,6 +68,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicInteger; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.HiddenApi; import org.robolectric.annotation.Implementation; @@ -180,6 +181,7 @@ public class ShadowTelephonyManager { private static Map<Integer, List<EmergencyNumber>> emergencyNumbersList; private static volatile boolean isDataRoamingEnabled; private /*CarrierRestrictionRules*/ Object carrierRestrictionRules; + private final AtomicInteger modemRebootCount = new AtomicInteger(); /** * Should be {@link TelephonyManager.BootstrapAuthenticationCallback} but this object was @@ -680,6 +682,12 @@ public class ShadowTelephonyManager { } } + private void checkModifyPhoneStatePermission() { + if (!checkPermission(permission.MODIFY_PHONE_STATE)) { + throw new SecurityException(); + } + } + static ShadowInstrumentation getShadowInstrumentation() { ActivityThread activityThread = (ActivityThread) RuntimeEnvironment.getActivityThread(); return Shadow.extract(activityThread.getInstrumentation()); @@ -1683,4 +1691,15 @@ public class ShadowTelephonyManager { protected /*CarrierRestrictionRules*/ Object getCarrierRestrictionRules() { return carrierRestrictionRules; } + + /** Implementation for {@link TelephonyManager#rebootModem} */ + @Implementation(minSdk = Build.VERSION_CODES.TIRAMISU) + protected void rebootModem() { + checkModifyPhoneStatePermission(); + modemRebootCount.incrementAndGet(); + } + + public int getModemRebootCount() { + return modemRebootCount.get(); + } } |