Improved generics on AbstractMasterSystemService / AbstractPerUserSystemService.
Bug: 117779333
Test: atest CtsAutoFillServiceTestCases
Change-Id: I777fbe44aa395372eba3c97a1c18c2de4c771dd4
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
index 31238df..17d8ea7 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
@@ -89,7 +89,7 @@
* {@link AutofillManagerServiceImpl} itself.
*/
public final class AutofillManagerService
- extends AbstractMasterSystemService<AutofillManagerServiceImpl> {
+ extends AbstractMasterSystemService<AutofillManagerService, AutofillManagerServiceImpl> {
private static final String TAG = "AutofillManagerService";
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index 4810355..67ccc9b 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -86,7 +86,7 @@
*
*/
final class AutofillManagerServiceImpl
- extends AbstractPerUserSystemService<AutofillManagerServiceImpl> {
+ extends AbstractPerUserSystemService<AutofillManagerServiceImpl, AutofillManagerService> {
private static final String TAG = "AutofillManagerServiceImpl";
private static final int MAX_SESSION_ID_CREATE_TRIES = 2048;
diff --git a/services/core/java/com/android/server/AbstractMasterSystemService.java b/services/core/java/com/android/server/AbstractMasterSystemService.java
index 6cae887..9c1e3cd 100644
--- a/services/core/java/com/android/server/AbstractMasterSystemService.java
+++ b/services/core/java/com/android/server/AbstractMasterSystemService.java
@@ -62,13 +62,14 @@
* <p>See {@code com.android.server.autofill.AutofillManagerService} for a concrete
* (no pun intended) example of how to use it.
*
+ * @param <M> "master" service class.
* @param <S> "real" service class.
*
* @hide
*/
// TODO(b/117779333): improve javadoc above instead of using Autofill as an example
-public abstract class AbstractMasterSystemService<S extends AbstractPerUserSystemService<S>>
- extends SystemService {
+public abstract class AbstractMasterSystemService<M extends AbstractMasterSystemService<M, S>,
+ S extends AbstractPerUserSystemService<S, M>> extends SystemService {
/**
* Log tag
diff --git a/services/core/java/com/android/server/AbstractPerUserSystemService.java b/services/core/java/com/android/server/AbstractPerUserSystemService.java
index 97977df..b37888f 100644
--- a/services/core/java/com/android/server/AbstractPerUserSystemService.java
+++ b/services/core/java/com/android/server/AbstractPerUserSystemService.java
@@ -41,17 +41,19 @@
* Companion for {@link AbstractMasterSystemService}, it's the base class for the "real" service
* implementation.
*
- * @param <S> itself
+ * @param <M> "master" service class.
+ * @param <S> "real" service class.
*
* @hide
*/
-public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSystemService<S>> {
+public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSystemService<S, M>,
+ M extends AbstractMasterSystemService<M, S>> {
protected final @UserIdInt int mUserId;
protected final Object mLock;
protected final String mTag = getClass().getSimpleName();
- protected final AbstractMasterSystemService<S> mMaster;
+ protected final M mMaster;
/**
* Whether service was disabled for user due to {@link UserManager} restrictions.
@@ -68,8 +70,8 @@
@GuardedBy("mLock")
private ServiceInfo mServiceInfo;
- protected AbstractPerUserSystemService(@NonNull AbstractMasterSystemService<S> master,
- @NonNull Object lock, @UserIdInt int userId) {
+ protected AbstractPerUserSystemService(@NonNull M master, @NonNull Object lock,
+ @UserIdInt int userId) {
mMaster = master;
mLock = lock;
mUserId = userId;
diff --git a/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java b/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java
index fcfd246..3d13570 100644
--- a/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java
+++ b/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java
@@ -46,8 +46,8 @@
* <p>The data collected by this service can be analyzed and combined with other sources to provide
* contextual data in other areas of the system such as Autofill.
*/
-public final class IntelligenceManagerService
- extends AbstractMasterSystemService<IntelligencePerUserService> {
+public final class IntelligenceManagerService extends
+ AbstractMasterSystemService<IntelligenceManagerService, IntelligencePerUserService> {
private static final String TAG = "IntelligenceManagerService";
diff --git a/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java b/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java
index 471b40f..3b9c4e2 100644
--- a/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java
+++ b/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java
@@ -42,7 +42,8 @@
* Per-user instance of {@link IntelligenceManagerService}.
*/
final class IntelligencePerUserService
- extends AbstractPerUserSystemService<IntelligencePerUserService> {
+ extends AbstractPerUserSystemService<IntelligencePerUserService,
+ IntelligenceManagerService> {
private static final String TAG = "IntelligencePerUserService";