Loading services/core/java/com/android/server/accounts/AccountManagerService.java +32 −5 Original line number Diff line number Diff line Loading @@ -91,6 +91,8 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.SystemService; import com.google.android.collect.Lists; import com.google.android.collect.Sets; Loading Loading @@ -127,9 +129,34 @@ import java.util.concurrent.atomic.AtomicReference; public class AccountManagerService extends IAccountManager.Stub implements RegisteredServicesCacheListener<AuthenticatorDescription> { private static final String TAG = "AccountManagerService"; public static class Lifecycle extends SystemService { private AccountManagerService mService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mService = new AccountManagerService(getContext()); publishBinderService(Context.ACCOUNT_SERVICE, mService); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mService.systemReady(); } } @Override public void onUnlockUser(int userHandle) { mService.onUnlockUser(userHandle); } } private static final String DATABASE_NAME = "accounts.db"; private static final int PRE_N_DATABASE_VERSION = 9; private static final int CE_DATABASE_VERSION = 10; Loading Loading @@ -340,15 +367,12 @@ public class AccountManagerService IntentFilter userFilter = new IntentFilter(); userFilter.addAction(Intent.ACTION_USER_REMOVED); userFilter.addAction(Intent.ACTION_USER_UNLOCKED); mContext.registerReceiverAsUser(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_USER_REMOVED.equals(action)) { onUserRemoved(intent); } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) { onUserUnlocked(intent); } } }, UserHandle.ALL, userFilter, null, null); Loading Loading @@ -654,7 +678,10 @@ public class AccountManagerService @VisibleForTesting void onUserUnlocked(Intent intent) { int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); onUnlockUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)); } void onUnlockUser(int userId) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "onUserUnlocked " + userId); } Loading services/core/java/com/android/server/content/ContentService.java +13 −6 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ public final class ContentService extends IContentService.Stub { static final boolean DEBUG = false; public static class Lifecycle extends SystemService { private ContentService mContentService; private ContentService mService; public Lifecycle(Context context) { super(context); Loading @@ -87,14 +87,21 @@ public final class ContentService extends IContentService.Stub { public void onStart() { final boolean factoryTest = (FactoryTest .getMode() == FactoryTest.FACTORY_TEST_LOW_LEVEL); mContentService = new ContentService(getContext(), factoryTest); publishBinderService(ContentResolver.CONTENT_SERVICE_NAME, mContentService); mService = new ContentService(getContext(), factoryTest); publishBinderService(ContentResolver.CONTENT_SERVICE_NAME, mService); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mService.systemReady(); } } @Override public void onCleanupUser(int userHandle) { synchronized (mContentService.mCache) { mContentService.mCache.remove(userHandle); synchronized (mService.mCache) { mService.mCache.remove(userHandle); } } } Loading Loading @@ -265,7 +272,7 @@ public final class ContentService extends IContentService.Stub { localeFilter, null, null); } public void systemReady() { void systemReady() { getSyncManager(); } Loading services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +94 −38 Original line number Diff line number Diff line Loading @@ -16,9 +16,12 @@ package com.android.server.wallpaper; import static android.app.WallpaperManager.FLAG_SYSTEM; import static android.app.WallpaperManager.FLAG_LOCK; import static android.os.ParcelFileDescriptor.*; import static android.app.WallpaperManager.FLAG_SYSTEM; import static android.os.ParcelFileDescriptor.MODE_CREATE; import static android.os.ParcelFileDescriptor.MODE_READ_ONLY; import static android.os.ParcelFileDescriptor.MODE_READ_WRITE; import static android.os.ParcelFileDescriptor.MODE_TRUNCATE; import android.app.ActivityManager; import android.app.ActivityManagerNative; Loading @@ -41,27 +44,26 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Matrix; import android.graphics.Point; import android.graphics.Rect; import android.os.Binder; import android.os.Bundle; import android.os.Environment; import android.os.FileObserver; import android.os.FileUtils; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.FileObserver; import android.os.ParcelFileDescriptor; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SELinux; import android.os.ServiceManager; import android.os.SystemClock; Loading @@ -79,35 +81,62 @@ import android.view.Display; import android.view.IWindowManager; import android.view.WindowManager; import com.android.internal.R; import com.android.internal.content.PackageMonitor; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; import com.android.server.EventLogTags; import com.android.server.SystemService; import libcore.io.IoUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.BufferedOutputStream; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import com.android.internal.content.PackageMonitor; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; import com.android.internal.R; import com.android.server.EventLogTags; import libcore.io.IoUtils; public class WallpaperManagerService extends IWallpaperManager.Stub { static final String TAG = "WallpaperManagerService"; static final boolean DEBUG = false; public static class Lifecycle extends SystemService { private WallpaperManagerService mService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mService = new WallpaperManagerService(getContext()); publishBinderService(Context.WALLPAPER_SERVICE, mService); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mService.systemReady(); } } @Override public void onUnlockUser(int userHandle) { mService.onUnlockUser(userHandle); } } final Object mLock = new Object(); /** Loading Loading @@ -417,6 +446,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { final AppOpsManager mAppOpsManager; WallpaperData mLastWallpaper; IWallpaperManagerCallback mKeyguardListener; boolean mWaitingForUnlock; /** * ID of the current wallpaper, changed every time anything sets a wallpaper. Loading Loading @@ -744,8 +774,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { if (wallpaper.wallpaperComponent != null && isPackageModified(wallpaper.wallpaperComponent.getPackageName())) { try { mContext.getPackageManager().getServiceInfo( wallpaper.wallpaperComponent, 0); mContext.getPackageManager().getServiceInfo(wallpaper.wallpaperComponent, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); } catch (NameNotFoundException e) { Slog.w(TAG, "Wallpaper component gone, removing: " + wallpaper.wallpaperComponent); Loading @@ -755,8 +786,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { if (wallpaper.nextWallpaperComponent != null && isPackageModified(wallpaper.nextWallpaperComponent.getPackageName())) { try { mContext.getPackageManager().getServiceInfo( wallpaper.nextWallpaperComponent, 0); mContext.getPackageManager().getServiceInfo(wallpaper.nextWallpaperComponent, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); } catch (NameNotFoundException e) { wallpaper.nextWallpaperComponent = null; } Loading Loading @@ -793,7 +825,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { } } public void systemRunning() { void systemReady() { if (DEBUG) Slog.v(TAG, "systemReady"); WallpaperData wallpaper = mWallpaperMap.get(UserHandle.USER_SYSTEM); // If we think we're going to be using the system image wallpaper imagery, make Loading Loading @@ -828,7 +860,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { mContext.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); final String action = intent.getAction(); if (Intent.ACTION_USER_REMOVED.equals(action)) { onRemoveUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL)); Loading Loading @@ -892,6 +924,14 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { mLockWallpaperMap.remove(userId); } void onUnlockUser(int userId) { synchronized (mLock) { if (mCurrentUserId == userId && mWaitingForUnlock) { switchUser(userId, null); } } } void onRemoveUser(int userId) { if (userId < 1) return; Loading Loading @@ -919,18 +959,34 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { void switchWallpaper(WallpaperData wallpaper, IRemoteCallback reply) { synchronized (mLock) { RuntimeException e = null; try { ComponentName cname = wallpaper.wallpaperComponent != null ? mWaitingForUnlock = false; final ComponentName cname = wallpaper.wallpaperComponent != null ? wallpaper.wallpaperComponent : wallpaper.nextWallpaperComponent; if (bindWallpaperComponentLocked(cname, true, false, wallpaper, reply)) { return; } } catch (RuntimeException e1) { e = e1; if (!bindWallpaperComponentLocked(cname, true, false, wallpaper, reply)) { // We failed to bind the desired wallpaper, but that might // happen if the wallpaper isn't direct-boot aware ServiceInfo si = null; try { si = mIPackageManager.getServiceInfo(cname, PackageManager.MATCH_DIRECT_BOOT_UNAWARE, wallpaper.userId); } catch (RemoteException ignored) { } Slog.w(TAG, "Failure starting previous wallpaper", e); if (si == null) { Slog.w(TAG, "Failure starting previous wallpaper; clearing"); clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, reply); } else { Slog.w(TAG, "Wallpaper isn't direct boot aware; using fallback until unlocked"); // We might end up persisting the current wallpaper data // while locked, so pretend like the component was actually // bound into place wallpaper.wallpaperComponent = wallpaper.nextWallpaperComponent; final WallpaperData fallback = new WallpaperData(wallpaper.userId, WALLPAPER_LOCK_ORIG, WALLPAPER_LOCK_CROP); bindWallpaperComponentLocked(mImageWallpaper, true, false, fallback, reply); mWaitingForUnlock = true; } } } } Loading services/java/com/android/server/SystemServer.java +10 −51 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server; import android.app.ActivityManagerNative; import android.app.ActivityThread; import android.app.IAlarmManager; import android.app.INotificationManager; import android.app.usage.UsageStatsManagerInternal; import android.content.ComponentName; Loading Loading @@ -55,13 +54,11 @@ import com.android.internal.os.SamplingProfilerIntegration; import com.android.internal.os.ZygoteInit; import com.android.internal.widget.ILockSettings; import com.android.server.accessibility.AccessibilityManagerService; import com.android.server.accounts.AccountManagerService; import com.android.server.am.ActivityManagerService; import com.android.server.audio.AudioService; import com.android.server.camera.CameraService; import com.android.server.clipboard.ClipboardService; import com.android.server.connectivity.MetricsLoggerService; import com.android.server.content.ContentService; import com.android.server.devicepolicy.DevicePolicyManagerService; import com.android.server.display.DisplayManagerService; import com.android.server.dreams.DreamManagerService; Loading Loading @@ -97,7 +94,6 @@ import com.android.server.tv.TvInputManagerService; import com.android.server.twilight.TwilightService; import com.android.server.usage.UsageStatsService; import com.android.server.vr.VrManagerService; import com.android.server.wallpaper.WallpaperManagerService; import com.android.server.webkit.WebViewUpdateService; import com.android.server.wm.WindowManagerService; Loading Loading @@ -157,8 +153,12 @@ public final class SystemServer { "com.google.android.clockwork.ThermalObserver"; private static final String WEAR_BLUETOOTH_SERVICE_CLASS = "com.google.android.clockwork.bluetooth.WearBluetoothService"; private static final String ACCOUNT_SERVICE_CLASS = "com.android.server.accounts.AccountManagerService$Lifecycle"; private static final String CONTENT_SERVICE_CLASS = "com.android.server.content.ContentService$Lifecycle"; private static final String WALLPAPER_SERVICE_CLASS = "com.android.server.wallpaper.WallpaperManagerService$Lifecycle"; private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst"; Loading Loading @@ -187,6 +187,7 @@ public final class SystemServer { private PackageManagerService mPackageManagerService; private PackageManager mPackageManager; private ContentResolver mContentResolver; private EntropyMixer mEntropyMixer; private boolean mOnlyCore; private boolean mFirstBoot; Loading Loading @@ -497,10 +498,7 @@ public final class SystemServer { */ private void startOtherServices() { final Context context = mSystemContext; AccountManagerService accountManager = null; ContentService contentService = null; VibratorService vibrator = null; IAlarmManager alarm = null; IMountService mountService = null; NetworkManagementService networkManagement = null; NetworkStatsService networkStats = null; Loading @@ -516,8 +514,6 @@ public final class SystemServer { TelephonyRegistry telephonyRegistry = null; ConsumerIrService consumerIr = null; MmsServiceBroker mmsService = null; EntropyMixer entropyMixer = null; VrManagerService vrManagerService = null; HardwarePropertiesManagerService hardwarePropertiesService = null; boolean disableStorage = SystemProperties.getBoolean("config.disable_storage", false); Loading Loading @@ -556,7 +552,7 @@ public final class SystemServer { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("StartEntropyMixer"); entropyMixer = new EntropyMixer(context); mEntropyMixer = new EntropyMixer(context); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); mContentResolver = context.getContentResolver(); Loading @@ -566,13 +562,7 @@ public final class SystemServer { // The AccountManager must come before the ContentService traceBeginAndSlog("StartAccountManagerService"); try { // TODO: seems like this should be disable-able, but req'd by ContentService accountManager = new AccountManagerService(context); ServiceManager.addService(Context.ACCOUNT_SERVICE, accountManager); } catch (Throwable e) { Slog.e(TAG, "Failure starting Account Manager", e); } mSystemServiceManager.startService(ACCOUNT_SERVICE_CLASS); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("StartContentService"); Loading @@ -593,9 +583,9 @@ public final class SystemServer { ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("StartAlarmManagerService"); mSystemServiceManager.startService(AlarmManagerService.class); alarm = IAlarmManager.Stub.asInterface( ServiceManager.getService(Context.ALARM_SERVICE)); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("InitWatchdog"); final Watchdog watchdog = Watchdog.getInstance(); Loading Loading @@ -652,7 +642,6 @@ public final class SystemServer { StatusBarManagerService statusBar = null; INotificationManager notification = null; WallpaperManagerService wallpaper = null; LocationManagerService location = null; CountryDetectorService countryDetector = null; ILockSettings lockSettings = null; Loading Loading @@ -886,24 +875,6 @@ public final class SystemServer { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeAccountManagerServiceReady"); try { if (accountManager != null) accountManager.systemReady(); } catch (Throwable e) { reportWtf("making Account Manager Service ready", e); } Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeContentServiceReady"); try { if (contentService != null) contentService.systemReady(); } catch (Throwable e) { reportWtf("making Content Service ready", e); } Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); mSystemServiceManager.startService(NotificationManagerService.class); notification = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); Loading Loading @@ -946,12 +917,7 @@ public final class SystemServer { if (!disableNonCoreServices && context.getResources().getBoolean( R.bool.config_enableWallpaperService)) { traceBeginAndSlog("StartWallpaperManagerService"); try { wallpaper = new WallpaperManagerService(context); ServiceManager.addService(Context.WALLPAPER_SERVICE, wallpaper); } catch (Throwable e) { reportWtf("starting Wallpaper Service", e); } mSystemServiceManager.startService(WALLPAPER_SERVICE_CLASS); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } Loading Loading @@ -1278,12 +1244,10 @@ public final class SystemServer { final NetworkPolicyManagerService networkPolicyF = networkPolicy; final ConnectivityService connectivityF = connectivity; final NetworkScoreService networkScoreF = networkScore; final WallpaperManagerService wallpaperF = wallpaper; final LocationManagerService locationF = location; final CountryDetectorService countryDetectorF = countryDetector; final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater; final CommonTimeManagementService commonTimeMgmtServiceF = commonTimeMgmtService; final StatusBarManagerService statusBarF = statusBar; final AssetAtlasService atlasF = atlas; final InputManagerService inputManagerF = inputManager; final TelephonyRegistry telephonyRegistryF = telephonyRegistry; Loading Loading @@ -1370,11 +1334,6 @@ public final class SystemServer { mSystemServiceManager.startBootPhase( SystemService.PHASE_THIRD_PARTY_APPS_CAN_START); try { if (wallpaperF != null) wallpaperF.systemRunning(); } catch (Throwable e) { reportWtf("Notifying WallpaperService running", e); } try { if (locationF != null) locationF.systemRunning(); } catch (Throwable e) { Loading Loading
services/core/java/com/android/server/accounts/AccountManagerService.java +32 −5 Original line number Diff line number Diff line Loading @@ -91,6 +91,8 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.SystemService; import com.google.android.collect.Lists; import com.google.android.collect.Sets; Loading Loading @@ -127,9 +129,34 @@ import java.util.concurrent.atomic.AtomicReference; public class AccountManagerService extends IAccountManager.Stub implements RegisteredServicesCacheListener<AuthenticatorDescription> { private static final String TAG = "AccountManagerService"; public static class Lifecycle extends SystemService { private AccountManagerService mService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mService = new AccountManagerService(getContext()); publishBinderService(Context.ACCOUNT_SERVICE, mService); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mService.systemReady(); } } @Override public void onUnlockUser(int userHandle) { mService.onUnlockUser(userHandle); } } private static final String DATABASE_NAME = "accounts.db"; private static final int PRE_N_DATABASE_VERSION = 9; private static final int CE_DATABASE_VERSION = 10; Loading Loading @@ -340,15 +367,12 @@ public class AccountManagerService IntentFilter userFilter = new IntentFilter(); userFilter.addAction(Intent.ACTION_USER_REMOVED); userFilter.addAction(Intent.ACTION_USER_UNLOCKED); mContext.registerReceiverAsUser(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_USER_REMOVED.equals(action)) { onUserRemoved(intent); } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) { onUserUnlocked(intent); } } }, UserHandle.ALL, userFilter, null, null); Loading Loading @@ -654,7 +678,10 @@ public class AccountManagerService @VisibleForTesting void onUserUnlocked(Intent intent) { int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); onUnlockUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)); } void onUnlockUser(int userId) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "onUserUnlocked " + userId); } Loading
services/core/java/com/android/server/content/ContentService.java +13 −6 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ public final class ContentService extends IContentService.Stub { static final boolean DEBUG = false; public static class Lifecycle extends SystemService { private ContentService mContentService; private ContentService mService; public Lifecycle(Context context) { super(context); Loading @@ -87,14 +87,21 @@ public final class ContentService extends IContentService.Stub { public void onStart() { final boolean factoryTest = (FactoryTest .getMode() == FactoryTest.FACTORY_TEST_LOW_LEVEL); mContentService = new ContentService(getContext(), factoryTest); publishBinderService(ContentResolver.CONTENT_SERVICE_NAME, mContentService); mService = new ContentService(getContext(), factoryTest); publishBinderService(ContentResolver.CONTENT_SERVICE_NAME, mService); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mService.systemReady(); } } @Override public void onCleanupUser(int userHandle) { synchronized (mContentService.mCache) { mContentService.mCache.remove(userHandle); synchronized (mService.mCache) { mService.mCache.remove(userHandle); } } } Loading Loading @@ -265,7 +272,7 @@ public final class ContentService extends IContentService.Stub { localeFilter, null, null); } public void systemReady() { void systemReady() { getSyncManager(); } Loading
services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +94 −38 Original line number Diff line number Diff line Loading @@ -16,9 +16,12 @@ package com.android.server.wallpaper; import static android.app.WallpaperManager.FLAG_SYSTEM; import static android.app.WallpaperManager.FLAG_LOCK; import static android.os.ParcelFileDescriptor.*; import static android.app.WallpaperManager.FLAG_SYSTEM; import static android.os.ParcelFileDescriptor.MODE_CREATE; import static android.os.ParcelFileDescriptor.MODE_READ_ONLY; import static android.os.ParcelFileDescriptor.MODE_READ_WRITE; import static android.os.ParcelFileDescriptor.MODE_TRUNCATE; import android.app.ActivityManager; import android.app.ActivityManagerNative; Loading @@ -41,27 +44,26 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Matrix; import android.graphics.Point; import android.graphics.Rect; import android.os.Binder; import android.os.Bundle; import android.os.Environment; import android.os.FileObserver; import android.os.FileUtils; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.FileObserver; import android.os.ParcelFileDescriptor; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SELinux; import android.os.ServiceManager; import android.os.SystemClock; Loading @@ -79,35 +81,62 @@ import android.view.Display; import android.view.IWindowManager; import android.view.WindowManager; import com.android.internal.R; import com.android.internal.content.PackageMonitor; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; import com.android.server.EventLogTags; import com.android.server.SystemService; import libcore.io.IoUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.BufferedOutputStream; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import com.android.internal.content.PackageMonitor; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; import com.android.internal.R; import com.android.server.EventLogTags; import libcore.io.IoUtils; public class WallpaperManagerService extends IWallpaperManager.Stub { static final String TAG = "WallpaperManagerService"; static final boolean DEBUG = false; public static class Lifecycle extends SystemService { private WallpaperManagerService mService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mService = new WallpaperManagerService(getContext()); publishBinderService(Context.WALLPAPER_SERVICE, mService); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mService.systemReady(); } } @Override public void onUnlockUser(int userHandle) { mService.onUnlockUser(userHandle); } } final Object mLock = new Object(); /** Loading Loading @@ -417,6 +446,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { final AppOpsManager mAppOpsManager; WallpaperData mLastWallpaper; IWallpaperManagerCallback mKeyguardListener; boolean mWaitingForUnlock; /** * ID of the current wallpaper, changed every time anything sets a wallpaper. Loading Loading @@ -744,8 +774,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { if (wallpaper.wallpaperComponent != null && isPackageModified(wallpaper.wallpaperComponent.getPackageName())) { try { mContext.getPackageManager().getServiceInfo( wallpaper.wallpaperComponent, 0); mContext.getPackageManager().getServiceInfo(wallpaper.wallpaperComponent, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); } catch (NameNotFoundException e) { Slog.w(TAG, "Wallpaper component gone, removing: " + wallpaper.wallpaperComponent); Loading @@ -755,8 +786,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { if (wallpaper.nextWallpaperComponent != null && isPackageModified(wallpaper.nextWallpaperComponent.getPackageName())) { try { mContext.getPackageManager().getServiceInfo( wallpaper.nextWallpaperComponent, 0); mContext.getPackageManager().getServiceInfo(wallpaper.nextWallpaperComponent, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); } catch (NameNotFoundException e) { wallpaper.nextWallpaperComponent = null; } Loading Loading @@ -793,7 +825,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { } } public void systemRunning() { void systemReady() { if (DEBUG) Slog.v(TAG, "systemReady"); WallpaperData wallpaper = mWallpaperMap.get(UserHandle.USER_SYSTEM); // If we think we're going to be using the system image wallpaper imagery, make Loading Loading @@ -828,7 +860,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { mContext.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); final String action = intent.getAction(); if (Intent.ACTION_USER_REMOVED.equals(action)) { onRemoveUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL)); Loading Loading @@ -892,6 +924,14 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { mLockWallpaperMap.remove(userId); } void onUnlockUser(int userId) { synchronized (mLock) { if (mCurrentUserId == userId && mWaitingForUnlock) { switchUser(userId, null); } } } void onRemoveUser(int userId) { if (userId < 1) return; Loading Loading @@ -919,18 +959,34 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { void switchWallpaper(WallpaperData wallpaper, IRemoteCallback reply) { synchronized (mLock) { RuntimeException e = null; try { ComponentName cname = wallpaper.wallpaperComponent != null ? mWaitingForUnlock = false; final ComponentName cname = wallpaper.wallpaperComponent != null ? wallpaper.wallpaperComponent : wallpaper.nextWallpaperComponent; if (bindWallpaperComponentLocked(cname, true, false, wallpaper, reply)) { return; } } catch (RuntimeException e1) { e = e1; if (!bindWallpaperComponentLocked(cname, true, false, wallpaper, reply)) { // We failed to bind the desired wallpaper, but that might // happen if the wallpaper isn't direct-boot aware ServiceInfo si = null; try { si = mIPackageManager.getServiceInfo(cname, PackageManager.MATCH_DIRECT_BOOT_UNAWARE, wallpaper.userId); } catch (RemoteException ignored) { } Slog.w(TAG, "Failure starting previous wallpaper", e); if (si == null) { Slog.w(TAG, "Failure starting previous wallpaper; clearing"); clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, reply); } else { Slog.w(TAG, "Wallpaper isn't direct boot aware; using fallback until unlocked"); // We might end up persisting the current wallpaper data // while locked, so pretend like the component was actually // bound into place wallpaper.wallpaperComponent = wallpaper.nextWallpaperComponent; final WallpaperData fallback = new WallpaperData(wallpaper.userId, WALLPAPER_LOCK_ORIG, WALLPAPER_LOCK_CROP); bindWallpaperComponentLocked(mImageWallpaper, true, false, fallback, reply); mWaitingForUnlock = true; } } } } Loading
services/java/com/android/server/SystemServer.java +10 −51 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server; import android.app.ActivityManagerNative; import android.app.ActivityThread; import android.app.IAlarmManager; import android.app.INotificationManager; import android.app.usage.UsageStatsManagerInternal; import android.content.ComponentName; Loading Loading @@ -55,13 +54,11 @@ import com.android.internal.os.SamplingProfilerIntegration; import com.android.internal.os.ZygoteInit; import com.android.internal.widget.ILockSettings; import com.android.server.accessibility.AccessibilityManagerService; import com.android.server.accounts.AccountManagerService; import com.android.server.am.ActivityManagerService; import com.android.server.audio.AudioService; import com.android.server.camera.CameraService; import com.android.server.clipboard.ClipboardService; import com.android.server.connectivity.MetricsLoggerService; import com.android.server.content.ContentService; import com.android.server.devicepolicy.DevicePolicyManagerService; import com.android.server.display.DisplayManagerService; import com.android.server.dreams.DreamManagerService; Loading Loading @@ -97,7 +94,6 @@ import com.android.server.tv.TvInputManagerService; import com.android.server.twilight.TwilightService; import com.android.server.usage.UsageStatsService; import com.android.server.vr.VrManagerService; import com.android.server.wallpaper.WallpaperManagerService; import com.android.server.webkit.WebViewUpdateService; import com.android.server.wm.WindowManagerService; Loading Loading @@ -157,8 +153,12 @@ public final class SystemServer { "com.google.android.clockwork.ThermalObserver"; private static final String WEAR_BLUETOOTH_SERVICE_CLASS = "com.google.android.clockwork.bluetooth.WearBluetoothService"; private static final String ACCOUNT_SERVICE_CLASS = "com.android.server.accounts.AccountManagerService$Lifecycle"; private static final String CONTENT_SERVICE_CLASS = "com.android.server.content.ContentService$Lifecycle"; private static final String WALLPAPER_SERVICE_CLASS = "com.android.server.wallpaper.WallpaperManagerService$Lifecycle"; private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst"; Loading Loading @@ -187,6 +187,7 @@ public final class SystemServer { private PackageManagerService mPackageManagerService; private PackageManager mPackageManager; private ContentResolver mContentResolver; private EntropyMixer mEntropyMixer; private boolean mOnlyCore; private boolean mFirstBoot; Loading Loading @@ -497,10 +498,7 @@ public final class SystemServer { */ private void startOtherServices() { final Context context = mSystemContext; AccountManagerService accountManager = null; ContentService contentService = null; VibratorService vibrator = null; IAlarmManager alarm = null; IMountService mountService = null; NetworkManagementService networkManagement = null; NetworkStatsService networkStats = null; Loading @@ -516,8 +514,6 @@ public final class SystemServer { TelephonyRegistry telephonyRegistry = null; ConsumerIrService consumerIr = null; MmsServiceBroker mmsService = null; EntropyMixer entropyMixer = null; VrManagerService vrManagerService = null; HardwarePropertiesManagerService hardwarePropertiesService = null; boolean disableStorage = SystemProperties.getBoolean("config.disable_storage", false); Loading Loading @@ -556,7 +552,7 @@ public final class SystemServer { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("StartEntropyMixer"); entropyMixer = new EntropyMixer(context); mEntropyMixer = new EntropyMixer(context); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); mContentResolver = context.getContentResolver(); Loading @@ -566,13 +562,7 @@ public final class SystemServer { // The AccountManager must come before the ContentService traceBeginAndSlog("StartAccountManagerService"); try { // TODO: seems like this should be disable-able, but req'd by ContentService accountManager = new AccountManagerService(context); ServiceManager.addService(Context.ACCOUNT_SERVICE, accountManager); } catch (Throwable e) { Slog.e(TAG, "Failure starting Account Manager", e); } mSystemServiceManager.startService(ACCOUNT_SERVICE_CLASS); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("StartContentService"); Loading @@ -593,9 +583,9 @@ public final class SystemServer { ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("StartAlarmManagerService"); mSystemServiceManager.startService(AlarmManagerService.class); alarm = IAlarmManager.Stub.asInterface( ServiceManager.getService(Context.ALARM_SERVICE)); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); traceBeginAndSlog("InitWatchdog"); final Watchdog watchdog = Watchdog.getInstance(); Loading Loading @@ -652,7 +642,6 @@ public final class SystemServer { StatusBarManagerService statusBar = null; INotificationManager notification = null; WallpaperManagerService wallpaper = null; LocationManagerService location = null; CountryDetectorService countryDetector = null; ILockSettings lockSettings = null; Loading Loading @@ -886,24 +875,6 @@ public final class SystemServer { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeAccountManagerServiceReady"); try { if (accountManager != null) accountManager.systemReady(); } catch (Throwable e) { reportWtf("making Account Manager Service ready", e); } Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "MakeContentServiceReady"); try { if (contentService != null) contentService.systemReady(); } catch (Throwable e) { reportWtf("making Content Service ready", e); } Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); mSystemServiceManager.startService(NotificationManagerService.class); notification = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); Loading Loading @@ -946,12 +917,7 @@ public final class SystemServer { if (!disableNonCoreServices && context.getResources().getBoolean( R.bool.config_enableWallpaperService)) { traceBeginAndSlog("StartWallpaperManagerService"); try { wallpaper = new WallpaperManagerService(context); ServiceManager.addService(Context.WALLPAPER_SERVICE, wallpaper); } catch (Throwable e) { reportWtf("starting Wallpaper Service", e); } mSystemServiceManager.startService(WALLPAPER_SERVICE_CLASS); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } Loading Loading @@ -1278,12 +1244,10 @@ public final class SystemServer { final NetworkPolicyManagerService networkPolicyF = networkPolicy; final ConnectivityService connectivityF = connectivity; final NetworkScoreService networkScoreF = networkScore; final WallpaperManagerService wallpaperF = wallpaper; final LocationManagerService locationF = location; final CountryDetectorService countryDetectorF = countryDetector; final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater; final CommonTimeManagementService commonTimeMgmtServiceF = commonTimeMgmtService; final StatusBarManagerService statusBarF = statusBar; final AssetAtlasService atlasF = atlas; final InputManagerService inputManagerF = inputManager; final TelephonyRegistry telephonyRegistryF = telephonyRegistry; Loading Loading @@ -1370,11 +1334,6 @@ public final class SystemServer { mSystemServiceManager.startBootPhase( SystemService.PHASE_THIRD_PARTY_APPS_CAN_START); try { if (wallpaperF != null) wallpaperF.systemRunning(); } catch (Throwable e) { reportWtf("Notifying WallpaperService running", e); } try { if (locationF != null) locationF.systemRunning(); } catch (Throwable e) { Loading