Merge "Add suggestManualTimeZoneSuggestion to the client" am: 63d5f12489
am: 2447fe6f69
Change-Id: I2ecb6991ee2fce6b4d79164f4fd7dd568042db4f
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package android.app.timezonedetector;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SystemService;
|
||||
import android.content.Context;
|
||||
import android.os.RemoteException;
|
||||
@@ -26,10 +27,11 @@ import android.util.Log;
|
||||
|
||||
/**
|
||||
* The interface through which system components can send signals to the TimeZoneDetectorService.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemService(Context.TIME_ZONE_DETECTOR_SERVICE)
|
||||
public final class TimeZoneDetector {
|
||||
public class TimeZoneDetector {
|
||||
private static final String TAG = "timezonedetector.TimeZoneDetector";
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
@@ -41,10 +43,11 @@ public final class TimeZoneDetector {
|
||||
}
|
||||
|
||||
/**
|
||||
* Suggests the current time zone to the detector. The detector may ignore the signal if better
|
||||
* signals are available such as those that come from more reliable sources or were
|
||||
* determined more recently.
|
||||
* Suggests the current time zone, determined using telephony signals, to the detector. The
|
||||
* detector may ignore the signal based on system settings, whether better information is
|
||||
* available, and so on.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.SET_TIME_ZONE)
|
||||
public void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "suggestPhoneTimeZone called: " + timeZoneSuggestion);
|
||||
@@ -56,4 +59,28 @@ public final class TimeZoneDetector {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Suggests the current time zone, determined for the user's manually information, to the
|
||||
* detector. The detector may ignore the signal based on system settings.
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.SET_TIME_ZONE)
|
||||
public void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion timeZoneSuggestion) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "suggestManualTimeZone called: " + timeZoneSuggestion);
|
||||
}
|
||||
try {
|
||||
mITimeZoneDetectorService.suggestManualTimeZone(timeZoneSuggestion);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A shared utility method to create a {@link ManualTimeZoneSuggestion}.
|
||||
*/
|
||||
public static ManualTimeZoneSuggestion createManualTimeZoneSuggestion(String tzId, String why) {
|
||||
ManualTimeZoneSuggestion suggestion = new ManualTimeZoneSuggestion(tzId);
|
||||
suggestion.addDebugInfo(why);
|
||||
return suggestion;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,6 +135,8 @@ import android.app.admin.SystemUpdatePolicy;
|
||||
import android.app.backup.IBackupManager;
|
||||
import android.app.timedetector.ManualTimeSuggestion;
|
||||
import android.app.timedetector.TimeDetector;
|
||||
import android.app.timezonedetector.ManualTimeZoneSuggestion;
|
||||
import android.app.timezonedetector.TimeZoneDetector;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.content.ActivityNotFoundException;
|
||||
@@ -1956,6 +1958,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
return mContext.getSystemService(TimeDetector.class);
|
||||
}
|
||||
|
||||
TimeZoneDetector getTimeZoneDetector() {
|
||||
return mContext.getSystemService(TimeZoneDetector.class);
|
||||
}
|
||||
|
||||
ConnectivityManager getConnectivityManager() {
|
||||
return mContext.getSystemService(ConnectivityManager.class);
|
||||
}
|
||||
@@ -10880,8 +10886,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
if (mInjector.settingsGlobalGetInt(Global.AUTO_TIME_ZONE, 0) == 1) {
|
||||
return false;
|
||||
}
|
||||
ManualTimeZoneSuggestion manualTimeZoneSuggestion =
|
||||
TimeZoneDetector.createManualTimeZoneSuggestion(
|
||||
timeZone, "DevicePolicyManagerService: setTimeZone");
|
||||
mInjector.binderWithCleanCallingIdentity(() ->
|
||||
mInjector.getAlarmManager().setTimeZone(timeZone));
|
||||
mInjector.getTimeZoneDetector().suggestManualTimeZone(manualTimeZoneSuggestion));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.backup.IBackupManager;
|
||||
import android.app.timedetector.TimeDetector;
|
||||
import android.app.timezonedetector.TimeZoneDetector;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -222,6 +223,11 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi
|
||||
return services.timeDetector;
|
||||
}
|
||||
|
||||
@Override
|
||||
TimeZoneDetector getTimeZoneDetector() {
|
||||
return services.timeZoneDetector;
|
||||
}
|
||||
|
||||
@Override
|
||||
LockPatternUtils newLockPatternUtils() {
|
||||
return services.lockPatternUtils;
|
||||
|
||||
@@ -64,6 +64,8 @@ import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.DevicePolicyManagerInternal;
|
||||
import android.app.admin.PasswordMetrics;
|
||||
import android.app.timedetector.ManualTimeSuggestion;
|
||||
import android.app.timezonedetector.ManualTimeZoneSuggestion;
|
||||
import android.app.timezonedetector.TimeZoneDetector;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
@@ -3506,7 +3508,9 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
|
||||
setupDeviceOwner();
|
||||
dpm.setTimeZone(admin1, "Asia/Shanghai");
|
||||
verify(getServices().alarmManager).setTimeZone("Asia/Shanghai");
|
||||
ManualTimeZoneSuggestion suggestion =
|
||||
TimeZoneDetector.createManualTimeZoneSuggestion("Asia/Shanghai", "Test debug info");
|
||||
verify(getServices().timeZoneDetector).suggestManualTimeZone(suggestion);
|
||||
}
|
||||
|
||||
public void testSetTimeZoneFailWithPO() throws Exception {
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.app.IActivityTaskManager;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.backup.IBackupManager;
|
||||
import android.app.timedetector.TimeDetector;
|
||||
import android.app.timezonedetector.TimeZoneDetector;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentValues;
|
||||
@@ -109,6 +110,7 @@ public class MockSystemServices {
|
||||
public final AccountManager accountManager;
|
||||
public final AlarmManager alarmManager;
|
||||
public final TimeDetector timeDetector;
|
||||
public final TimeZoneDetector timeZoneDetector;
|
||||
public final KeyChain.KeyChainConnection keyChainConnection;
|
||||
/** Note this is a partial mock, not a real mock. */
|
||||
public final PackageManager packageManager;
|
||||
@@ -149,6 +151,7 @@ public class MockSystemServices {
|
||||
accountManager = mock(AccountManager.class);
|
||||
alarmManager = mock(AlarmManager.class);
|
||||
timeDetector = mock(TimeDetector.class);
|
||||
timeZoneDetector = mock(TimeZoneDetector.class);
|
||||
keyChainConnection = mock(KeyChain.KeyChainConnection.class, RETURNS_DEEP_STUBS);
|
||||
|
||||
// Package manager is huge, so we use a partial mock instead.
|
||||
|
||||
Reference in New Issue
Block a user