Remove broadcast of NETWORK_SET_TIMEZONE intent
android.intent.action.NETWORK_SET_TIMEZONE is not used by anything in the platform so it can be removed. It was previously broadcast when telephony made a time zone change, presumably as a way to coordinate time zone detection logic if there were other, lower-priority detection mechanisms on the device. The logic for time zone detection is now centralized in the system server so coordination can be done more directly when needed. All the APK usages appear to be only manifest entries for <protected-broadcast> in apps that don't send the intent themselves, which doesn't make a lot of sense. Note: There is a separate commit to remove the broadcast from the old (disabled) NITZ logic. Bug: 140712361 Test: treehugger Change-Id: Iab629778e45815f4632359e90d920b7751c1a199
This commit is contained in:
@@ -633,10 +633,9 @@
|
||||
|
||||
<protected-broadcast android:name="android.intent.action.DEVICE_CUSTOMIZATION_READY" />
|
||||
|
||||
<!-- NETWORK_SET_TIME / NETWORK_SET_TIMEZONE moved from com.android.phone to system server.
|
||||
They should ultimately be removed. -->
|
||||
<!-- NETWORK_SET_TIME moved from com.android.phone to system server. It should ultimately be
|
||||
removed. -->
|
||||
<protected-broadcast android:name="android.intent.action.NETWORK_SET_TIME" />
|
||||
<protected-broadcast android:name="android.intent.action.NETWORK_SET_TIMEZONE" />
|
||||
|
||||
<!-- For tether entitlement recheck-->
|
||||
<protected-broadcast
|
||||
|
||||
@@ -20,13 +20,9 @@ import android.annotation.Nullable;
|
||||
import android.app.AlarmManager;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.internal.telephony.TelephonyIntents;
|
||||
|
||||
/**
|
||||
* The real implementation of {@link TimeZoneDetectorStrategy.Callback}.
|
||||
*/
|
||||
@@ -66,16 +62,8 @@ public final class TimeZoneDetectorCallbackImpl implements TimeZoneDetectorStrat
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDeviceTimeZone(String zoneId, boolean sendNetworkBroadcast) {
|
||||
public void setDeviceTimeZone(String zoneId) {
|
||||
AlarmManager alarmManager = mContext.getSystemService(AlarmManager.class);
|
||||
alarmManager.setTimeZone(zoneId);
|
||||
|
||||
if (sendNetworkBroadcast) {
|
||||
// TODO Nothing in the platform appears to listen for this. Remove it.
|
||||
Intent intent = new Intent(TelephonyIntents.ACTION_NETWORK_SET_TIMEZONE);
|
||||
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
|
||||
intent.putExtra("time-zone", zoneId);
|
||||
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public class TimeZoneDetectorStrategy {
|
||||
/**
|
||||
* Sets the device's time zone.
|
||||
*/
|
||||
void setDeviceTimeZone(@NonNull String zoneId, boolean sendNetworkBroadcast);
|
||||
void setDeviceTimeZone(@NonNull String zoneId);
|
||||
}
|
||||
|
||||
private static final String LOG_TAG = "TimeZoneDetectorStrategy";
|
||||
@@ -333,7 +333,6 @@ public class TimeZoneDetectorStrategy {
|
||||
Objects.requireNonNull(newZoneId);
|
||||
Objects.requireNonNull(cause);
|
||||
|
||||
boolean sendNetworkBroadcast = (origin == ORIGIN_PHONE);
|
||||
boolean isOriginAutomatic = isOriginAutomatic(origin);
|
||||
if (isOriginAutomatic) {
|
||||
if (!mCallback.isAutoTimeZoneDetectionEnabled()) {
|
||||
@@ -373,12 +372,11 @@ public class TimeZoneDetectorStrategy {
|
||||
return;
|
||||
}
|
||||
|
||||
mCallback.setDeviceTimeZone(newZoneId, sendNetworkBroadcast);
|
||||
mCallback.setDeviceTimeZone(newZoneId);
|
||||
String msg = "Set device time zone."
|
||||
+ " origin=" + origin
|
||||
+ ", currentZoneId=" + currentZoneId
|
||||
+ ", newZoneId=" + newZoneId
|
||||
+ ", sendNetworkBroadcast" + sendNetworkBroadcast
|
||||
+ ", cause=" + cause;
|
||||
if (DBG) {
|
||||
Slog.d(LOG_TAG, msg);
|
||||
|
||||
@@ -50,7 +50,6 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* White-box unit tests for {@link TimeZoneDetectorStrategy}.
|
||||
@@ -445,8 +444,7 @@ public class TimeZoneDetectorStrategyTest {
|
||||
static class FakeTimeZoneDetectorStrategyCallback implements TimeZoneDetectorStrategy.Callback {
|
||||
|
||||
private boolean mAutoTimeZoneDetectionEnabled;
|
||||
private TestState<TimeZoneChange> mTimeZoneChanges = new TestState<>();
|
||||
private String mTimeZoneId;
|
||||
private TestState<String> mTimeZoneId = new TestState<>();
|
||||
|
||||
@Override
|
||||
public boolean isAutoTimeZoneDetectionEnabled() {
|
||||
@@ -460,13 +458,12 @@ public class TimeZoneDetectorStrategyTest {
|
||||
|
||||
@Override
|
||||
public String getDeviceTimeZone() {
|
||||
return mTimeZoneId;
|
||||
return mTimeZoneId.getLatest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDeviceTimeZone(String zoneId, boolean withNetworkBroadcast) {
|
||||
mTimeZoneId = zoneId;
|
||||
mTimeZoneChanges.set(new TimeZoneChange(zoneId, withNetworkBroadcast));
|
||||
public void setDeviceTimeZone(String zoneId) {
|
||||
mTimeZoneId.set(zoneId);
|
||||
}
|
||||
|
||||
void initializeAutoTimeZoneDetection(boolean enabled) {
|
||||
@@ -474,7 +471,7 @@ public class TimeZoneDetectorStrategyTest {
|
||||
}
|
||||
|
||||
void initializeTimeZone(String zoneId) {
|
||||
mTimeZoneId = zoneId;
|
||||
mTimeZoneId.init(zoneId);
|
||||
}
|
||||
|
||||
void setAutoTimeZoneDetectionEnabled(boolean enabled) {
|
||||
@@ -482,46 +479,17 @@ public class TimeZoneDetectorStrategyTest {
|
||||
}
|
||||
|
||||
void assertTimeZoneNotSet() {
|
||||
mTimeZoneChanges.assertHasNotBeenSet();
|
||||
mTimeZoneId.assertHasNotBeenSet();
|
||||
}
|
||||
|
||||
void assertTimeZoneSet(String timeZoneId, boolean withNetworkBroadcast) {
|
||||
mTimeZoneChanges.assertHasBeenSet();
|
||||
mTimeZoneChanges.assertChangeCount(1);
|
||||
TimeZoneChange expectedChange = new TimeZoneChange(timeZoneId, withNetworkBroadcast);
|
||||
mTimeZoneChanges.assertLatestEquals(expectedChange);
|
||||
void assertTimeZoneSet(String timeZoneId) {
|
||||
mTimeZoneId.assertHasBeenSet();
|
||||
mTimeZoneId.assertChangeCount(1);
|
||||
mTimeZoneId.assertLatestEquals(timeZoneId);
|
||||
}
|
||||
|
||||
void commitAllChanges() {
|
||||
mTimeZoneChanges.commitLatest();
|
||||
}
|
||||
}
|
||||
|
||||
private static class TimeZoneChange {
|
||||
private final String mTimeZoneId;
|
||||
private final boolean mWithNetworkBroadcast;
|
||||
|
||||
private TimeZoneChange(String timeZoneId, boolean withNetworkBroadcast) {
|
||||
mTimeZoneId = timeZoneId;
|
||||
mWithNetworkBroadcast = withNetworkBroadcast;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
TimeZoneChange that = (TimeZoneChange) o;
|
||||
return mWithNetworkBroadcast == that.mWithNetworkBroadcast
|
||||
&& mTimeZoneId.equals(that.mTimeZoneId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(mTimeZoneId, mWithNetworkBroadcast);
|
||||
mTimeZoneId.commitLatest();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -614,21 +582,13 @@ public class TimeZoneDetectorStrategyTest {
|
||||
}
|
||||
|
||||
Script verifyTimeZoneSetAndReset(PhoneTimeZoneSuggestion suggestion) {
|
||||
// Phone suggestions should cause a TelephonyIntents.ACTION_NETWORK_SET_TIMEZONE
|
||||
// broadcast.
|
||||
boolean withNetworkBroadcast = true;
|
||||
mFakeTimeZoneDetectorStrategyCallback.assertTimeZoneSet(
|
||||
suggestion.getZoneId(), withNetworkBroadcast);
|
||||
mFakeTimeZoneDetectorStrategyCallback.assertTimeZoneSet(suggestion.getZoneId());
|
||||
mFakeTimeZoneDetectorStrategyCallback.commitAllChanges();
|
||||
return this;
|
||||
}
|
||||
|
||||
Script verifyTimeZoneSetAndReset(ManualTimeZoneSuggestion suggestion) {
|
||||
// Manual suggestions should not cause a TelephonyIntents.ACTION_NETWORK_SET_TIMEZONE
|
||||
// broadcast.
|
||||
boolean withNetworkBroadcast = false;
|
||||
mFakeTimeZoneDetectorStrategyCallback.assertTimeZoneSet(
|
||||
suggestion.getZoneId(), withNetworkBroadcast);
|
||||
mFakeTimeZoneDetectorStrategyCallback.assertTimeZoneSet(suggestion.getZoneId());
|
||||
mFakeTimeZoneDetectorStrategyCallback.commitAllChanges();
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -240,25 +240,6 @@ public class TelephonyIntents {
|
||||
*/
|
||||
public static final String ACTION_NETWORK_SET_TIME = "android.intent.action.NETWORK_SET_TIME";
|
||||
|
||||
|
||||
/**
|
||||
* Broadcast Action: The timezone was set by the carrier (typically by the NITZ string).
|
||||
* This is a sticky broadcast.
|
||||
* The intent will have the following extra values:</p>
|
||||
* <ul>
|
||||
* <li><em>time-zone</em> - The java.util.TimeZone.getID() value identifying the new time
|
||||
* zone.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p class="note">
|
||||
* Requires the READ_PHONE_STATE permission.
|
||||
*
|
||||
* <p class="note">This is a protected intent that can only be sent
|
||||
* by the system.
|
||||
*/
|
||||
public static final String ACTION_NETWORK_SET_TIMEZONE
|
||||
= "android.intent.action.NETWORK_SET_TIMEZONE";
|
||||
|
||||
/**
|
||||
* <p>Broadcast Action: It indicates the Emergency callback mode blocks datacall/sms
|
||||
* <p class="note">.
|
||||
|
||||
Reference in New Issue
Block a user