Disable auto time zone on non-telephony devices

Disable auto time zone detection explicitly based on device
capabilities.

The TimeZoneDetector now enforces that the time zone cannot be set
manually when "auto_zone" is 1 (on). On devices without a telephony
network (the only devices that support auto time zone currently),
nothing explicitly sets the "auto_zone" value to 0 leading to problems
when the user tries to manually set the time zone. Therefore, to retain
the check, the code needs to ignore the auto_zone setting for devices
that inherently cannot support auto time zone detection.

Bug: 150583524
Bug: 150156441
Test: treehugger
Merged-In: Iea9c9e04c5617ccf0ba20511344884d3d88f2a9b
Change-Id: Iea9c9e04c5617ccf0ba20511344884d3d88f2a9b
(cherry picked from commit 2c6c3c3daf)
This commit is contained in:
Neil Fuller
2020-03-02 10:12:26 +00:00
parent 920105c38b
commit 5d50bfe4b3

View File

@@ -20,6 +20,7 @@ import android.annotation.Nullable;
import android.app.AlarmManager;
import android.content.ContentResolver;
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.SystemProperties;
import android.provider.Settings;
@@ -40,7 +41,20 @@ public final class TimeZoneDetectorCallbackImpl implements TimeZoneDetectorStrat
@Override
public boolean isAutoTimeZoneDetectionEnabled() {
return Settings.Global.getInt(mCr, Settings.Global.AUTO_TIME_ZONE, 1 /* default */) > 0;
if (isAutoTimeZoneDetectionSupported()) {
return Settings.Global.getInt(mCr, Settings.Global.AUTO_TIME_ZONE, 1 /* default */) > 0;
}
return false;
}
private boolean isAutoTimeZoneDetectionSupported() {
return deviceHasTelephonyNetwork();
}
private boolean deviceHasTelephonyNetwork() {
// TODO b/150583524 Avoid the use of a deprecated API.
return mContext.getSystemService(ConnectivityManager.class)
.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
}
@Override