Loading services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java +29 −6 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.timezonedetector; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.time.ITimeZoneDetectorListener; import android.app.time.ITimeZoneDetectorListener; import android.app.time.TimeZoneCapabilitiesAndConfig; import android.app.time.TimeZoneCapabilitiesAndConfig; import android.app.time.TimeZoneConfiguration; import android.app.time.TimeZoneConfiguration; Loading @@ -26,12 +28,14 @@ import android.app.timezonedetector.ManualTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.content.Context; import android.content.Context; import android.location.LocationManager; import android.location.LocationManager; import android.os.Binder; import android.os.Handler; import android.os.Handler; import android.os.IBinder; import android.os.IBinder; import android.os.RemoteException; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.ShellCallback; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArrayMap; import android.util.IndentingPrintWriter; import android.util.IndentingPrintWriter; import android.util.Slog; import android.util.Slog; Loading Loading @@ -163,9 +167,13 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub @Override @Override @NonNull @NonNull public TimeZoneCapabilitiesAndConfig getCapabilitiesAndConfig() { public TimeZoneCapabilitiesAndConfig getCapabilitiesAndConfig() { int userId = mCallerIdentityInjector.getCallingUserId(); return getCapabilitiesAndConfig(userId); } TimeZoneCapabilitiesAndConfig getCapabilitiesAndConfig(@UserIdInt int userId) { enforceManageTimeZoneDetectorPermission(); enforceManageTimeZoneDetectorPermission(); int userId = mCallerIdentityInjector.getCallingUserId(); final long token = mCallerIdentityInjector.clearCallingIdentity(); final long token = mCallerIdentityInjector.clearCallingIdentity(); try { try { ConfigurationInternal configurationInternal = ConfigurationInternal configurationInternal = Loading @@ -178,13 +186,22 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub @Override @Override public boolean updateConfiguration(@NonNull TimeZoneConfiguration configuration) { public boolean updateConfiguration(@NonNull TimeZoneConfiguration configuration) { int callingUserId = mCallerIdentityInjector.getCallingUserId(); return updateConfiguration(callingUserId, configuration); } boolean updateConfiguration( @UserIdInt int userId, @NonNull TimeZoneConfiguration configuration) { userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, false, "updateConfiguration", null); enforceManageTimeZoneDetectorPermission(); enforceManageTimeZoneDetectorPermission(); Objects.requireNonNull(configuration); Objects.requireNonNull(configuration); int callingUserId = mCallerIdentityInjector.getCallingUserId(); final long token = mCallerIdentityInjector.clearCallingIdentity(); final long token = mCallerIdentityInjector.clearCallingIdentity(); try { try { return mTimeZoneDetectorStrategy.updateConfiguration(callingUserId, configuration); return mTimeZoneDetectorStrategy.updateConfiguration(userId, configuration); } finally { } finally { mCallerIdentityInjector.restoreCallingIdentity(token); mCallerIdentityInjector.restoreCallingIdentity(token); } } Loading Loading @@ -318,11 +335,17 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub return isGeoLocationTimeZoneDetectionEnabled(mContext); return isGeoLocationTimeZoneDetectionEnabled(mContext); } } boolean isLocationEnabled() { boolean isLocationEnabled(@UserIdInt int userId) { enforceManageTimeZoneDetectorPermission(); enforceManageTimeZoneDetectorPermission(); return mContext.getSystemService(LocationManager.class) final long token = mCallerIdentityInjector.clearCallingIdentity(); .isLocationEnabledForUser(mContext.getUser()); try { UserHandle user = UserHandle.of(userId); LocationManager locationManager = mContext.getSystemService(LocationManager.class); return locationManager.isLocationEnabledForUser(user); } finally { mCallerIdentityInjector.restoreCallingIdentity(token); } } } @Override @Override Loading services/core/java/com/android/server/timezonedetector/TimeZoneDetectorShellCommand.java +11 −5 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.app.time.TimeZoneConfiguration; import android.app.timezonedetector.ManualTimeZoneSuggestion; import android.app.timezonedetector.ManualTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.os.ShellCommand; import android.os.ShellCommand; import android.os.UserHandle; import java.io.PrintWriter; import java.io.PrintWriter; import java.util.function.Consumer; import java.util.function.Consumer; Loading Loading @@ -76,7 +77,8 @@ class TimeZoneDetectorShellCommand extends ShellCommand { private int runIsAutoDetectionEnabled() { private int runIsAutoDetectionEnabled() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); boolean enabled = mInterface.getCapabilitiesAndConfig() int userId = UserHandle.USER_CURRENT; boolean enabled = mInterface.getCapabilitiesAndConfig(userId) .getConfiguration() .getConfiguration() .isAutoDetectionEnabled(); .isAutoDetectionEnabled(); pw.println(enabled); pw.println(enabled); Loading @@ -92,14 +94,16 @@ class TimeZoneDetectorShellCommand extends ShellCommand { private int runIsLocationEnabled() { private int runIsLocationEnabled() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); boolean enabled = mInterface.isLocationEnabled(); int userId = UserHandle.USER_CURRENT; boolean enabled = mInterface.isLocationEnabled(userId); pw.println(enabled); pw.println(enabled); return 0; return 0; } } private int runIsGeoDetectionEnabled() { private int runIsGeoDetectionEnabled() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); boolean enabled = mInterface.getCapabilitiesAndConfig() int userId = UserHandle.USER_CURRENT; boolean enabled = mInterface.getCapabilitiesAndConfig(userId) .getConfiguration() .getConfiguration() .isGeoDetectionEnabled(); .isGeoDetectionEnabled(); pw.println(enabled); pw.println(enabled); Loading @@ -108,18 +112,20 @@ class TimeZoneDetectorShellCommand extends ShellCommand { private int runSetAutoDetectionEnabled() { private int runSetAutoDetectionEnabled() { boolean enabled = Boolean.parseBoolean(getNextArgRequired()); boolean enabled = Boolean.parseBoolean(getNextArgRequired()); int userId = UserHandle.USER_CURRENT; TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setAutoDetectionEnabled(enabled) .setAutoDetectionEnabled(enabled) .build(); .build(); return mInterface.updateConfiguration(configuration) ? 0 : 1; return mInterface.updateConfiguration(userId, configuration) ? 0 : 1; } } private int runSetGeoDetectionEnabled() { private int runSetGeoDetectionEnabled() { boolean enabled = Boolean.parseBoolean(getNextArgRequired()); boolean enabled = Boolean.parseBoolean(getNextArgRequired()); int userId = UserHandle.USER_CURRENT; TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setGeoDetectionEnabled(enabled) .setGeoDetectionEnabled(enabled) .build(); .build(); return mInterface.updateConfiguration(configuration) ? 0 : 1; return mInterface.updateConfiguration(userId, configuration) ? 0 : 1; } } private int runSuggestGeolocationTimeZone() { private int runSuggestGeolocationTimeZone() { Loading Loading
services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java +29 −6 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.timezonedetector; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.time.ITimeZoneDetectorListener; import android.app.time.ITimeZoneDetectorListener; import android.app.time.TimeZoneCapabilitiesAndConfig; import android.app.time.TimeZoneCapabilitiesAndConfig; import android.app.time.TimeZoneConfiguration; import android.app.time.TimeZoneConfiguration; Loading @@ -26,12 +28,14 @@ import android.app.timezonedetector.ManualTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.content.Context; import android.content.Context; import android.location.LocationManager; import android.location.LocationManager; import android.os.Binder; import android.os.Handler; import android.os.Handler; import android.os.IBinder; import android.os.IBinder; import android.os.RemoteException; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.ShellCallback; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArrayMap; import android.util.IndentingPrintWriter; import android.util.IndentingPrintWriter; import android.util.Slog; import android.util.Slog; Loading Loading @@ -163,9 +167,13 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub @Override @Override @NonNull @NonNull public TimeZoneCapabilitiesAndConfig getCapabilitiesAndConfig() { public TimeZoneCapabilitiesAndConfig getCapabilitiesAndConfig() { int userId = mCallerIdentityInjector.getCallingUserId(); return getCapabilitiesAndConfig(userId); } TimeZoneCapabilitiesAndConfig getCapabilitiesAndConfig(@UserIdInt int userId) { enforceManageTimeZoneDetectorPermission(); enforceManageTimeZoneDetectorPermission(); int userId = mCallerIdentityInjector.getCallingUserId(); final long token = mCallerIdentityInjector.clearCallingIdentity(); final long token = mCallerIdentityInjector.clearCallingIdentity(); try { try { ConfigurationInternal configurationInternal = ConfigurationInternal configurationInternal = Loading @@ -178,13 +186,22 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub @Override @Override public boolean updateConfiguration(@NonNull TimeZoneConfiguration configuration) { public boolean updateConfiguration(@NonNull TimeZoneConfiguration configuration) { int callingUserId = mCallerIdentityInjector.getCallingUserId(); return updateConfiguration(callingUserId, configuration); } boolean updateConfiguration( @UserIdInt int userId, @NonNull TimeZoneConfiguration configuration) { userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, false, "updateConfiguration", null); enforceManageTimeZoneDetectorPermission(); enforceManageTimeZoneDetectorPermission(); Objects.requireNonNull(configuration); Objects.requireNonNull(configuration); int callingUserId = mCallerIdentityInjector.getCallingUserId(); final long token = mCallerIdentityInjector.clearCallingIdentity(); final long token = mCallerIdentityInjector.clearCallingIdentity(); try { try { return mTimeZoneDetectorStrategy.updateConfiguration(callingUserId, configuration); return mTimeZoneDetectorStrategy.updateConfiguration(userId, configuration); } finally { } finally { mCallerIdentityInjector.restoreCallingIdentity(token); mCallerIdentityInjector.restoreCallingIdentity(token); } } Loading Loading @@ -318,11 +335,17 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub return isGeoLocationTimeZoneDetectionEnabled(mContext); return isGeoLocationTimeZoneDetectionEnabled(mContext); } } boolean isLocationEnabled() { boolean isLocationEnabled(@UserIdInt int userId) { enforceManageTimeZoneDetectorPermission(); enforceManageTimeZoneDetectorPermission(); return mContext.getSystemService(LocationManager.class) final long token = mCallerIdentityInjector.clearCallingIdentity(); .isLocationEnabledForUser(mContext.getUser()); try { UserHandle user = UserHandle.of(userId); LocationManager locationManager = mContext.getSystemService(LocationManager.class); return locationManager.isLocationEnabledForUser(user); } finally { mCallerIdentityInjector.restoreCallingIdentity(token); } } } @Override @Override Loading
services/core/java/com/android/server/timezonedetector/TimeZoneDetectorShellCommand.java +11 −5 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.app.time.TimeZoneConfiguration; import android.app.timezonedetector.ManualTimeZoneSuggestion; import android.app.timezonedetector.ManualTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.os.ShellCommand; import android.os.ShellCommand; import android.os.UserHandle; import java.io.PrintWriter; import java.io.PrintWriter; import java.util.function.Consumer; import java.util.function.Consumer; Loading Loading @@ -76,7 +77,8 @@ class TimeZoneDetectorShellCommand extends ShellCommand { private int runIsAutoDetectionEnabled() { private int runIsAutoDetectionEnabled() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); boolean enabled = mInterface.getCapabilitiesAndConfig() int userId = UserHandle.USER_CURRENT; boolean enabled = mInterface.getCapabilitiesAndConfig(userId) .getConfiguration() .getConfiguration() .isAutoDetectionEnabled(); .isAutoDetectionEnabled(); pw.println(enabled); pw.println(enabled); Loading @@ -92,14 +94,16 @@ class TimeZoneDetectorShellCommand extends ShellCommand { private int runIsLocationEnabled() { private int runIsLocationEnabled() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); boolean enabled = mInterface.isLocationEnabled(); int userId = UserHandle.USER_CURRENT; boolean enabled = mInterface.isLocationEnabled(userId); pw.println(enabled); pw.println(enabled); return 0; return 0; } } private int runIsGeoDetectionEnabled() { private int runIsGeoDetectionEnabled() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); boolean enabled = mInterface.getCapabilitiesAndConfig() int userId = UserHandle.USER_CURRENT; boolean enabled = mInterface.getCapabilitiesAndConfig(userId) .getConfiguration() .getConfiguration() .isGeoDetectionEnabled(); .isGeoDetectionEnabled(); pw.println(enabled); pw.println(enabled); Loading @@ -108,18 +112,20 @@ class TimeZoneDetectorShellCommand extends ShellCommand { private int runSetAutoDetectionEnabled() { private int runSetAutoDetectionEnabled() { boolean enabled = Boolean.parseBoolean(getNextArgRequired()); boolean enabled = Boolean.parseBoolean(getNextArgRequired()); int userId = UserHandle.USER_CURRENT; TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setAutoDetectionEnabled(enabled) .setAutoDetectionEnabled(enabled) .build(); .build(); return mInterface.updateConfiguration(configuration) ? 0 : 1; return mInterface.updateConfiguration(userId, configuration) ? 0 : 1; } } private int runSetGeoDetectionEnabled() { private int runSetGeoDetectionEnabled() { boolean enabled = Boolean.parseBoolean(getNextArgRequired()); boolean enabled = Boolean.parseBoolean(getNextArgRequired()); int userId = UserHandle.USER_CURRENT; TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setGeoDetectionEnabled(enabled) .setGeoDetectionEnabled(enabled) .build(); .build(); return mInterface.updateConfiguration(configuration) ? 0 : 1; return mInterface.updateConfiguration(userId, configuration) ? 0 : 1; } } private int runSuggestGeolocationTimeZone() { private int runSuggestGeolocationTimeZone() { Loading