aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGoogler <noreply@google.com>2024-05-07 08:55:04 -0700
committerCopybara-Service <copybara-worker@google.com>2024-05-07 08:56:00 -0700
commit7055db222c512ebb4779b50e6ad0363d7f848f83 (patch)
tree05a67be870f85c8d02197a9fc2612b6a7e84e8ff
parent1e69220999d60b120d5338aff4f5d7121e09d63c (diff)
downloadrobolectric-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.java17
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowTelephonyManager.java19
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();
+ }
}