Merge "Extract TimeDetector/TimeZoneDetector interfaces"

This commit is contained in:
Neil Fuller
2020-01-29 09:57:55 +00:00
committed by Gerrit Code Review
6 changed files with 179 additions and 110 deletions

View File

@@ -19,7 +19,7 @@ package android.app.timedetector {
method @NonNull public android.app.timedetector.PhoneTimeSuggestion.Builder setUtcTime(@Nullable android.os.TimestampedValue<java.lang.Long>);
}
public class TimeDetector {
public interface TimeDetector {
method @RequiresPermission("android.permission.SUGGEST_PHONE_TIME_AND_ZONE") public void suggestPhoneTime(@NonNull android.app.timedetector.PhoneTimeSuggestion);
}
@@ -59,7 +59,7 @@ package android.app.timezonedetector {
method @NonNull public android.app.timezonedetector.PhoneTimeZoneSuggestion.Builder setZoneId(@Nullable String);
}
public class TimeZoneDetector {
public interface TimeZoneDetector {
method @RequiresPermission("android.permission.SUGGEST_PHONE_TIME_AND_ZONE") public void suggestPhoneTimeZone(@NonNull android.app.timezonedetector.PhoneTimeZoneSuggestion);
}

View File

@@ -30,8 +30,10 @@ import android.app.role.RoleControllerManager;
import android.app.role.RoleManager;
import android.app.slice.SliceManager;
import android.app.timedetector.TimeDetector;
import android.app.timedetector.TimeDetectorImpl;
import android.app.timezone.RulesManager;
import android.app.timezonedetector.TimeZoneDetector;
import android.app.timezonedetector.TimeZoneDetectorImpl;
import android.app.trust.TrustManager;
import android.app.usage.IStorageStatsManager;
import android.app.usage.IUsageStatsManager;
@@ -1277,7 +1279,7 @@ final class SystemServiceRegistry {
@Override
public TimeDetector createService(ContextImpl ctx)
throws ServiceNotFoundException {
return new TimeDetector();
return new TimeDetectorImpl();
}});
registerService(Context.TIME_ZONE_DETECTOR_SERVICE, TimeZoneDetector.class,
@@ -1285,7 +1287,7 @@ final class SystemServiceRegistry {
@Override
public TimeZoneDetector createService(ContextImpl ctx)
throws ServiceNotFoundException {
return new TimeZoneDetector();
return new TimeZoneDetectorImpl();
}});
registerService(Context.TELEPHONY_IMS_SERVICE, android.telephony.ims.ImsManager.class,

View File

@@ -21,73 +21,24 @@ import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemClock;
import android.os.TimestampedValue;
import android.util.Log;
/**
* The interface through which system components can send signals to the TimeDetectorService.
*
* <p>This class is marked non-final for mockito.
* @hide
*/
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
@SystemService(Context.TIME_DETECTOR_SERVICE)
public class TimeDetector {
private static final String TAG = "timedetector.TimeDetector";
private static final boolean DEBUG = false;
private final ITimeDetectorService mITimeDetectorService;
/** @hide */
public TimeDetector() throws ServiceNotFoundException {
mITimeDetectorService = ITimeDetectorService.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.TIME_DETECTOR_SERVICE));
}
/**
* Suggests the current phone-signal derived time 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.
*/
@RequiresPermission(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE)
public void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestPhoneTime called: " + timeSuggestion);
}
try {
mITimeDetectorService.suggestPhoneTime(timeSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* Suggests the user's manually entered current time to the detector.
*
* @hide
*/
@RequiresPermission(android.Manifest.permission.SUGGEST_MANUAL_TIME_AND_ZONE)
public void suggestManualTime(@NonNull ManualTimeSuggestion timeSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestManualTime called: " + timeSuggestion);
}
try {
mITimeDetectorService.suggestManualTime(timeSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
public interface TimeDetector {
/**
* A shared utility method to create a {@link ManualTimeSuggestion}.
*
* @hide
*/
public static ManualTimeSuggestion createManualTimeSuggestion(long when, String why) {
static ManualTimeSuggestion createManualTimeSuggestion(long when, String why) {
TimestampedValue<Long> utcTime =
new TimestampedValue<>(SystemClock.elapsedRealtime(), when);
ManualTimeSuggestion manualTimeSuggestion = new ManualTimeSuggestion(utcTime);
@@ -95,20 +46,27 @@ public class TimeDetector {
return manualTimeSuggestion;
}
/**
* Suggests the current phone-signal derived time 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.
*/
@RequiresPermission(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE)
void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion);
/**
* Suggests the user's manually entered current time to the detector.
*
* @hide
*/
@RequiresPermission(android.Manifest.permission.SUGGEST_MANUAL_TIME_AND_ZONE)
void suggestManualTime(@NonNull ManualTimeSuggestion timeSuggestion);
/**
* Suggests the time according to a network time source like NTP.
*
* @hide
*/
@RequiresPermission(android.Manifest.permission.SET_TIME)
public void suggestNetworkTime(NetworkTimeSuggestion timeSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestNetworkTime called: " + timeSuggestion);
}
try {
mITimeDetectorService.suggestNetworkTime(timeSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
void suggestNetworkTime(NetworkTimeSuggestion timeSuggestion);
}

View File

@@ -0,0 +1,77 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app.timedetector;
import android.annotation.NonNull;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
/**
* The real implementation of {@link TimeDetector}.
*
* @hide
*/
public final class TimeDetectorImpl implements TimeDetector {
private static final String TAG = "timedetector.TimeDetector";
private static final boolean DEBUG = false;
private final ITimeDetectorService mITimeDetectorService;
public TimeDetectorImpl() throws ServiceNotFoundException {
mITimeDetectorService = ITimeDetectorService.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.TIME_DETECTOR_SERVICE));
}
@Override
public void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestPhoneTime called: " + timeSuggestion);
}
try {
mITimeDetectorService.suggestPhoneTime(timeSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
@Override
public void suggestManualTime(@NonNull ManualTimeSuggestion timeSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestManualTime called: " + timeSuggestion);
}
try {
mITimeDetectorService.suggestManualTime(timeSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
@Override
public void suggestNetworkTime(NetworkTimeSuggestion timeSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestNetworkTime called: " + timeSuggestion);
}
try {
mITimeDetectorService.suggestNetworkTime(timeSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}

View File

@@ -21,29 +21,25 @@ import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
/**
* The interface through which system components can send signals to the TimeZoneDetectorService.
*
* <p>This class is non-final for mockito.
* @hide
*/
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
@SystemService(Context.TIME_ZONE_DETECTOR_SERVICE)
public class TimeZoneDetector {
private static final String TAG = "timezonedetector.TimeZoneDetector";
private static final boolean DEBUG = false;
public interface TimeZoneDetector {
private final ITimeZoneDetectorService mITimeZoneDetectorService;
/** @hide */
public TimeZoneDetector() throws ServiceNotFoundException {
mITimeZoneDetectorService = ITimeZoneDetectorService.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.TIME_ZONE_DETECTOR_SERVICE));
/**
* A shared utility method to create a {@link ManualTimeZoneSuggestion}.
*
* @hide
*/
static ManualTimeZoneSuggestion createManualTimeZoneSuggestion(String tzId, String debugInfo) {
ManualTimeZoneSuggestion suggestion = new ManualTimeZoneSuggestion(tzId);
suggestion.addDebugInfo(debugInfo);
return suggestion;
}
/**
@@ -55,16 +51,7 @@ public class TimeZoneDetector {
*/
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
@RequiresPermission(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE)
public void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestPhoneTimeZone called: " + timeZoneSuggestion);
}
try {
mITimeZoneDetectorService.suggestPhoneTimeZone(timeZoneSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion);
/**
* Suggests the current time zone, determined for the user's manually information, to the
@@ -73,25 +60,5 @@ public class TimeZoneDetector {
* @hide
*/
@RequiresPermission(android.Manifest.permission.SUGGEST_MANUAL_TIME_AND_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}.
*
* @hide
*/
public static ManualTimeZoneSuggestion createManualTimeZoneSuggestion(String tzId, String why) {
ManualTimeZoneSuggestion suggestion = new ManualTimeZoneSuggestion(tzId);
suggestion.addDebugInfo(why);
return suggestion;
}
void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion timeZoneSuggestion);
}

View File

@@ -0,0 +1,65 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app.timezonedetector;
import android.annotation.NonNull;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
/**
* The real implementation of {@link TimeZoneDetector}.
*
* @hide
*/
public final class TimeZoneDetectorImpl implements TimeZoneDetector {
private static final String TAG = "timezonedetector.TimeZoneDetector";
private static final boolean DEBUG = false;
private final ITimeZoneDetectorService mITimeZoneDetectorService;
public TimeZoneDetectorImpl() throws ServiceNotFoundException {
mITimeZoneDetectorService = ITimeZoneDetectorService.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.TIME_ZONE_DETECTOR_SERVICE));
}
@Override
public void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestPhoneTimeZone called: " + timeZoneSuggestion);
}
try {
mITimeZoneDetectorService.suggestPhoneTimeZone(timeZoneSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
@Override
public void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion timeZoneSuggestion) {
if (DEBUG) {
Log.d(TAG, "suggestManualTimeZone called: " + timeZoneSuggestion);
}
try {
mITimeZoneDetectorService.suggestManualTimeZone(timeZoneSuggestion);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}