DO NOT MERGE: Move AlarmManager to apex

Mechanical refactoring to move all except native code to the apex
directory. Accesses across the jar boundary will be cleaned up in
follow-ups.
Also, moved alarm manager code into its own package for better
organization.

Test: Buids, boots. Existing tests:
atest FrameworksMockingServicesTests:AlarmManagerServiceTest
atest CtsAlarmManagerTestCases

Bug: 181724498
Change-Id: Ida46491c1f1dff02dce4c50d3fafd4efbf977766
Merged-In: Ida46491c1f1dff02dce4c50d3fafd4efbf977766
This commit is contained in:
Suprabh Shukla
2020-05-06 17:55:31 -07:00
committed by Julien Desprez
parent ae64e2b7e9
commit 7c0ee35b1e
18 changed files with 88 additions and 69 deletions

View File

@@ -2,10 +2,7 @@ filegroup {
name: "framework-jobscheduler-sources",
srcs: [
"java/**/*.java",
"java/android/app/job/IJobCallback.aidl",
"java/android/app/job/IJobScheduler.aidl",
"java/android/app/job/IJobService.aidl",
"java/android/os/IDeviceIdleController.aidl",
"java/**/*.aidl",
],
path: "java",
visibility: ["//frameworks/base"],

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.server;
package com.android.server.alarm;
import static android.app.AlarmManager.ELAPSED_REALTIME;
import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP;
@@ -97,7 +97,14 @@ import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.LocalLog;
import com.android.internal.util.StatLogger;
import com.android.server.AlarmManagerInternal;
import com.android.server.AppStateTracker;
import com.android.server.AppStateTracker.Listener;
import com.android.server.DeviceIdleInternal;
import com.android.server.EventLogTags;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.SystemServiceManager;
import com.android.server.usage.AppStandbyInternal;
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
@@ -127,7 +134,7 @@ import java.util.function.Predicate;
* Unit test:
atest $ANDROID_BUILD_TOP/frameworks/base/services/tests/servicestests/src/com/android/server/AlarmManagerServiceTest.java
*/
class AlarmManagerService extends SystemService {
public class AlarmManagerService extends SystemService {
private static final int RTC_WAKEUP_MASK = 1 << RTC_WAKEUP;
private static final int RTC_MASK = 1 << RTC;
private static final int ELAPSED_REALTIME_WAKEUP_MASK = 1 << ELAPSED_REALTIME_WAKEUP;
@@ -920,7 +927,7 @@ class AlarmManagerService extends SystemService {
mInjector = injector;
}
AlarmManagerService(Context context) {
public AlarmManagerService(Context context) {
this(context, new Injector(context));
}

View File

@@ -0,0 +1,24 @@
{
"presubmit": [
{
"name": "FrameworksMockingServicesTests",
"options": [
{
"include-filter": "com.android.server.alarm"
},
{
"include-annotation": "android.platform.test.annotations.Presubmit"
},
{
"exclude-annotation": "androidx.test.filters.FlakyTest"
}
]
}
],
"postsubmit": [
{
"name": "CtsAlarmManagerTestCases"
}
]
}

View File

@@ -34,7 +34,7 @@ import "frameworks/base/core/proto/android/os/statsdata.proto";
import "frameworks/base/core/proto/android/os/system_properties.proto";
import "frameworks/base/core/proto/android/providers/settings.proto";
import "frameworks/base/core/proto/android/server/activitymanagerservice.proto";
import "frameworks/base/core/proto/android/server/alarmmanagerservice.proto";
import "frameworks/base/core/proto/android/server/alarm/alarmmanagerservice.proto";
import "frameworks/base/core/proto/android/server/bluetooth_manager_service.proto";
import "frameworks/base/core/proto/android/server/fingerprint.proto";
import "frameworks/base/core/proto/android/server/jobscheduler.proto";
@@ -317,7 +317,7 @@ message IncidentProto {
(section).args = "activity --proto processes"
];
optional com.android.server.AlarmManagerServiceDumpProto alarm = 3016 [
optional com.android.server.alarm.AlarmManagerServiceDumpProto alarm = 3016 [
(section).type = SECTION_DUMPSYS,
(section).args = "alarm --proto"
];

View File

@@ -23,7 +23,7 @@ import "frameworks/base/core/proto/android/os/worksource.proto";
import "frameworks/base/core/proto/android/server/appstatetracker.proto";
import "frameworks/base/core/proto/android/privacy.proto";
package com.android.server;
package com.android.server.alarm;
option java_multiple_files = true;

View File

@@ -23,7 +23,6 @@ import android.app.AppOpsManager.PackageOps;
import android.app.IActivityManager;
import android.app.IUidObserver;
import android.app.usage.UsageStatsManager;
import android.app.usage.UsageStatsManagerInternal;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -53,7 +52,6 @@ import com.android.internal.app.IAppOpsCallback;
import com.android.internal.app.IAppOpsService;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
import com.android.internal.util.StatLogger;
import com.android.server.AppStateTrackerProto.ExemptedPackage;
import com.android.server.AppStateTrackerProto.RunAnyInBackgroundRestrictedPackages;
@@ -1181,7 +1179,7 @@ public class AppStateTracker {
* @return whether force all apps standby is enabled or not.
*
*/
boolean isForceAllAppsStandbyEnabled() {
public boolean isForceAllAppsStandbyEnabled() {
synchronized (mLock) {
return mForceAllAppsStandby;
}

View File

@@ -1,20 +1,5 @@
{
"presubmit": [
{
"name": "FrameworksMockingServicesTests",
"file_patterns": ["AlarmManagerService\\.java"],
"options": [
{
"include-filter": "com.android.server."
},
{
"include-annotation": "android.platform.test.annotations.Presubmit"
},
{
"exclude-annotation": "androidx.test.filters.FlakyTest"
}
]
},
{
"name": "CtsLocationFineTestCases"
},

View File

@@ -76,7 +76,7 @@ cc_library_static {
product_variables: {
arc: {
exclude_srcs: [
"com_android_server_AlarmManagerService.cpp",
"com_android_server_alarm_AlarmManagerService.cpp",
],
srcs: [
":arctimersrcs",
@@ -197,6 +197,6 @@ filegroup {
filegroup {
name: "lib_alarmManagerService_native",
srcs: [
"com_android_server_AlarmManagerService.cpp",
"com_android_server_alarm_AlarmManagerService.cpp",
],
}

View File

@@ -210,7 +210,7 @@ int AlarmImpl::waitForAlarm()
return result;
}
static jint android_server_AlarmManagerService_setKernelTime(JNIEnv*, jobject, jlong nativeData, jlong millis)
static jint android_server_alarm_AlarmManagerService_setKernelTime(JNIEnv*, jobject, jlong nativeData, jlong millis)
{
AlarmImpl *impl = reinterpret_cast<AlarmImpl *>(nativeData);
struct timeval tv;
@@ -234,7 +234,7 @@ static jint android_server_AlarmManagerService_setKernelTime(JNIEnv*, jobject, j
return ret;
}
static jint android_server_AlarmManagerService_setKernelTimezone(JNIEnv*, jobject, jlong, jint minswest)
static jint android_server_alarm_AlarmManagerService_setKernelTimezone(JNIEnv*, jobject, jlong, jint minswest)
{
struct timezone tz;
@@ -337,7 +337,7 @@ static void log_timerfd_create_error(clockid_t id)
ALOGE("timerfd_create(%u) failed: %s", id, strerror(errno));
}
static jlong android_server_AlarmManagerService_init(JNIEnv*, jobject)
static jlong android_server_alarm_AlarmManagerService_init(JNIEnv*, jobject)
{
int epollfd;
TimerFds fds;
@@ -392,7 +392,7 @@ static jlong android_server_AlarmManagerService_init(JNIEnv*, jobject)
return reinterpret_cast<jlong>(ret);
}
static jlong android_server_AlarmManagerService_getNextAlarm(JNIEnv*, jobject, jlong nativeData, jint type)
static jlong android_server_alarm_AlarmManagerService_getNextAlarm(JNIEnv*, jobject, jlong nativeData, jint type)
{
AlarmImpl *impl = reinterpret_cast<AlarmImpl *>(nativeData);
struct itimerspec spec;
@@ -409,13 +409,13 @@ static jlong android_server_AlarmManagerService_getNextAlarm(JNIEnv*, jobject, j
return static_cast<jlong>(millis);
}
static void android_server_AlarmManagerService_close(JNIEnv*, jobject, jlong nativeData)
static void android_server_alarm_AlarmManagerService_close(JNIEnv*, jobject, jlong nativeData)
{
AlarmImpl *impl = reinterpret_cast<AlarmImpl *>(nativeData);
delete impl;
}
static jint android_server_AlarmManagerService_set(JNIEnv*, jobject, jlong nativeData, jint type, jlong seconds, jlong nanoseconds)
static jint android_server_alarm_AlarmManagerService_set(JNIEnv*, jobject, jlong nativeData, jint type, jlong seconds, jlong nanoseconds)
{
AlarmImpl *impl = reinterpret_cast<AlarmImpl *>(nativeData);
struct timespec ts;
@@ -432,7 +432,7 @@ static jint android_server_AlarmManagerService_set(JNIEnv*, jobject, jlong nativ
return result >= 0 ? 0 : errno;
}
static jint android_server_AlarmManagerService_waitForAlarm(JNIEnv*, jobject, jlong nativeData)
static jint android_server_alarm_AlarmManagerService_waitForAlarm(JNIEnv*, jobject, jlong nativeData)
{
AlarmImpl *impl = reinterpret_cast<AlarmImpl *>(nativeData);
int result = 0;
@@ -453,18 +453,18 @@ static jint android_server_AlarmManagerService_waitForAlarm(JNIEnv*, jobject, jl
static const JNINativeMethod sMethods[] = {
/* name, signature, funcPtr */
{"init", "()J", (void*)android_server_AlarmManagerService_init},
{"close", "(J)V", (void*)android_server_AlarmManagerService_close},
{"set", "(JIJJ)I", (void*)android_server_AlarmManagerService_set},
{"waitForAlarm", "(J)I", (void*)android_server_AlarmManagerService_waitForAlarm},
{"setKernelTime", "(JJ)I", (void*)android_server_AlarmManagerService_setKernelTime},
{"setKernelTimezone", "(JI)I", (void*)android_server_AlarmManagerService_setKernelTimezone},
{"getNextAlarm", "(JI)J", (void*)android_server_AlarmManagerService_getNextAlarm},
{"init", "()J", (void*)android_server_alarm_AlarmManagerService_init},
{"close", "(J)V", (void*)android_server_alarm_AlarmManagerService_close},
{"set", "(JIJJ)I", (void*)android_server_alarm_AlarmManagerService_set},
{"waitForAlarm", "(J)I", (void*)android_server_alarm_AlarmManagerService_waitForAlarm},
{"setKernelTime", "(JJ)I", (void*)android_server_alarm_AlarmManagerService_setKernelTime},
{"setKernelTimezone", "(JI)I", (void*)android_server_alarm_AlarmManagerService_setKernelTimezone},
{"getNextAlarm", "(JI)J", (void*)android_server_alarm_AlarmManagerService_getNextAlarm},
};
int register_android_server_AlarmManagerService(JNIEnv* env)
int register_android_server_alarm_AlarmManagerService(JNIEnv* env)
{
return jniRegisterNativeMethods(env, "com/android/server/AlarmManagerService",
return jniRegisterNativeMethods(env, "com/android/server/alarm/AlarmManagerService",
sMethods, NELEM(sMethods));
}

View File

@@ -24,7 +24,7 @@
#include "BroadcastRadio/Tuner.h"
namespace android {
int register_android_server_AlarmManagerService(JNIEnv* env);
int register_android_server_alarm_AlarmManagerService(JNIEnv* env);
int register_android_server_BatteryStatsService(JNIEnv* env);
int register_android_server_ConsumerIrService(JNIEnv *env);
int register_android_server_InputManager(JNIEnv* env);
@@ -85,7 +85,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
register_android_server_SerialService(env);
register_android_server_InputManager(env);
register_android_server_LightsService(env);
register_android_server_AlarmManagerService(env);
register_android_server_alarm_AlarmManagerService(env);
register_android_server_UsbDeviceManager(env);
register_android_server_UsbMidiDevice(env);
register_android_server_UsbAlsaJackDetector(env);

View File

@@ -306,6 +306,8 @@ public final class SystemServer {
"com.android.server.blob.BlobStoreManagerService";
private static final String ROLLBACK_MANAGER_SERVICE_CLASS =
"com.android.server.rollback.RollbackManagerService";
private static final String ALARM_MANAGER_SERVICE_CLASS =
"com.android.server.alarm.AlarmManagerService";
private static final String TETHERING_CONNECTOR_CLASS = "android.net.ITetheringConnector";
@@ -1143,7 +1145,7 @@ public final class SystemServer {
}
t.traceBegin("StartAlarmManagerService");
mSystemServiceManager.startService(new AlarmManagerService(context));
mSystemServiceManager.startService(ALARM_MANAGER_SERVICE_CLASS);
t.traceEnd();
t.traceBegin("StartInputManagerService");

View File

@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server;
package com.android.server.alarm;
import static android.app.AlarmManager.ELAPSED_REALTIME;
import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP;
@@ -26,7 +26,6 @@ import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doCallRealMethod;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doThrow;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
@@ -34,20 +33,20 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSess
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
import static com.android.server.AlarmManagerService.ACTIVE_INDEX;
import static com.android.server.AlarmManagerService.AlarmHandler.APP_STANDBY_BUCKET_CHANGED;
import static com.android.server.AlarmManagerService.AlarmHandler.CHARGING_STATUS_CHANGED;
import static com.android.server.AlarmManagerService.AlarmHandler.REMOVE_FOR_CANCELED;
import static com.android.server.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_LONG_TIME;
import static com.android.server.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_SHORT_TIME;
import static com.android.server.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_WHITELIST_DURATION;
import static com.android.server.AlarmManagerService.Constants.KEY_LISTENER_TIMEOUT;
import static com.android.server.AlarmManagerService.Constants.KEY_MAX_INTERVAL;
import static com.android.server.AlarmManagerService.Constants.KEY_MIN_FUTURITY;
import static com.android.server.AlarmManagerService.Constants.KEY_MIN_INTERVAL;
import static com.android.server.AlarmManagerService.IS_WAKEUP_MASK;
import static com.android.server.AlarmManagerService.TIME_CHANGED_MASK;
import static com.android.server.AlarmManagerService.WORKING_INDEX;
import static com.android.server.alarm.AlarmManagerService.ACTIVE_INDEX;
import static com.android.server.alarm.AlarmManagerService.AlarmHandler.APP_STANDBY_BUCKET_CHANGED;
import static com.android.server.alarm.AlarmManagerService.AlarmHandler.CHARGING_STATUS_CHANGED;
import static com.android.server.alarm.AlarmManagerService.AlarmHandler.REMOVE_FOR_CANCELED;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_LONG_TIME;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_SHORT_TIME;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_ALLOW_WHILE_IDLE_WHITELIST_DURATION;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_LISTENER_TIMEOUT;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_MAX_INTERVAL;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_MIN_FUTURITY;
import static com.android.server.alarm.AlarmManagerService.Constants.KEY_MIN_INTERVAL;
import static com.android.server.alarm.AlarmManagerService.IS_WAKEUP_MASK;
import static com.android.server.alarm.AlarmManagerService.TIME_CHANGED_MASK;
import static com.android.server.alarm.AlarmManagerService.WORKING_INDEX;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -77,6 +76,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.platform.test.annotations.Presubmit;
import android.provider.Settings;
@@ -87,6 +87,10 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.dx.mockito.inline.extended.MockedVoidMethod;
import com.android.internal.annotations.GuardedBy;
import com.android.server.AlarmManagerInternal;
import com.android.server.AppStateTracker;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.usage.AppStandbyInternal;
import org.junit.After;
@@ -255,7 +259,8 @@ public class AlarmManagerServiceTest {
.spyStatic(ActivityManager.class)
.mockStatic(LocalServices.class)
.spyStatic(Looper.class)
.spyStatic(Settings.Global.class)
.mockStatic(Settings.Global.class)
.mockStatic(ServiceManager.class)
.spyStatic(UserHandle.class)
.strictness(Strictness.WARN)
.startMocking();
@@ -280,7 +285,6 @@ public class AlarmManagerServiceTest {
mInjector = new Injector(mMockContext);
mService = new AlarmManagerService(mMockContext, mInjector);
spyOn(mService);
doNothing().when(mService).publishBinderService(any(), any());
mService.onStart();
spyOn(mService.mHandler);

View File

@@ -13,26 +13,28 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server;
package com.android.server.alarm;
import static android.app.AlarmManager.RTC;
import static android.app.AlarmManager.RTC_WAKEUP;
import static org.junit.Assert.assertEquals;
import android.platform.test.annotations.Presubmit;
import android.util.SparseArray;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.ObjectUtils;
import com.android.server.AlarmManagerService.Alarm;
import com.android.server.alarm.AlarmManagerService.Alarm;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BackgroundRestrictedAlarmsTest {