Add config resource specifying WallpaperManagerService

The config resource can be used by a vendor to override
WallpaperManagerService.

Bug: 69299523
Test: WallpaperServiceTests, WallpaperManagerTest, WallpaperColorTest,
      WallpaperInfoTest.

Change-Id: I9a38117c5b6fdc01aabb8293cde75485023970cd
This commit is contained in:
Daichi Hirono
2017-12-06 10:34:18 +09:00
parent 3952e25663
commit 4bbf8524ed
4 changed files with 70 additions and 10 deletions

View File

@@ -1387,6 +1387,9 @@
<!-- True if WallpaperService is enabled -->
<bool name="config_enableWallpaperService">true</bool>
<!-- Class name of WallpaperManagerService. -->
<string name="config_wallpaperManagerServiceName">com.android.server.wallpaper.WallpaperManagerService</string>
<!-- Enables the TimeZoneRuleManager service. This is the master switch for the updateable time
zone update mechanism. -->
<bool name="config_enableUpdateableTimeZoneRules">false</bool>

View File

@@ -287,6 +287,7 @@
<java-symbol type="bool" name="split_action_bar_is_narrow" />
<java-symbol type="bool" name="config_useVolumeKeySounds" />
<java-symbol type="bool" name="config_enableWallpaperService" />
<java-symbol type="string" name="config_wallpaperManagerServiceName" />
<java-symbol type="bool" name="config_enableUpdateableTimeZoneRules" />
<java-symbol type="bool" name="config_timeZoneRulesUpdateTrackingEnabled" />
<java-symbol type="string" name="config_timeZoneRulesUpdaterPackage" />

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2017 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 com.android.server.wallpaper;
import android.app.IWallpaperManager;
import android.os.IBinder;
/**
* Extended IWallpaperManager which can receive SystemService's lifetime events.
*/
interface IWallpaperManagerService extends IWallpaperManager, IBinder {
/**
* @see com.android.server.SystemService#onBootPhase(int)
*/
void onBootPhase(int phase);
/**
* @see com.android.server.SystemService#onUnlockUser(int)
*/
void onUnlockUser(final int userId);
}

View File

@@ -99,6 +99,7 @@ import com.android.server.EventLogTags;
import com.android.server.FgThread;
import com.android.server.SystemService;
import java.lang.reflect.InvocationTargetException;
import libcore.io.IoUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -119,14 +120,16 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import com.android.internal.R;
public class WallpaperManagerService extends IWallpaperManager.Stub {
public class WallpaperManagerService extends IWallpaperManager.Stub
implements IWallpaperManagerService {
static final String TAG = "WallpaperManagerService";
static final boolean DEBUG = false;
static final boolean DEBUG_LIVE = DEBUG || true;
public static class Lifecycle extends SystemService {
private WallpaperManagerService mService;
private IWallpaperManagerService mService;
public Lifecycle(Context context) {
super(context);
@@ -134,22 +137,30 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
@Override
public void onStart() {
mService = new WallpaperManagerService(getContext());
publishBinderService(Context.WALLPAPER_SERVICE, mService);
try {
final Class<? extends IWallpaperManagerService> klass =
(Class<? extends IWallpaperManagerService>)Class.forName(
getContext().getResources().getString(
R.string.config_wallpaperManagerServiceName));
mService = klass.getConstructor(Context.class).newInstance(getContext());
publishBinderService(Context.WALLPAPER_SERVICE, mService);
} catch (Exception exp) {
Slog.wtf(TAG, "Failed to instantiate WallpaperManagerService", exp);
}
}
@Override
public void onBootPhase(int phase) {
if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
mService.systemReady();
} else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
mService.switchUser(UserHandle.USER_SYSTEM, null);
if (mService != null) {
mService.onBootPhase(phase);
}
}
@Override
public void onUnlockUser(int userHandle) {
mService.onUnlockUser(userHandle);
if (mService != null) {
mService.onUnlockUser(userHandle);
}
}
}
@@ -1255,7 +1266,17 @@ public class WallpaperManagerService extends IWallpaperManager.Stub {
mLockWallpaperMap.remove(userId);
}
void onUnlockUser(final int userId) {
@Override
public void onBootPhase(int phase) {
if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
systemReady();
} else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
switchUser(UserHandle.USER_SYSTEM, null);
}
}
@Override
public void onUnlockUser(final int userId) {
synchronized (mLock) {
if (mCurrentUserId == userId) {
if (mWaitingForUnlock) {