Merge "Use actual lockscreen wallpaper" into nyc-dev

am: 6e99febd18

* commit '6e99febd180a72536a08cf4c0456d852a47e9b2f':
  Use actual lockscreen wallpaper
This commit is contained in:
Adrian Roos
2016-02-19 19:59:53 +00:00
committed by android-build-merger
2 changed files with 134 additions and 12 deletions

View File

@@ -0,0 +1,124 @@
/*
* Copyright (C) 2016 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.systemui.statusbar.phone;
import android.app.ActivityManager;
import android.app.IWallpaperManager;
import android.app.IWallpaperManagerCallback;
import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
import libcore.io.IoUtils;
/**
* Manages the lockscreen wallpaper.
*/
public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implements Runnable {
private static final String TAG = "LockscreenWallpaper";
private final Context mContext;
private final PhoneStatusBar mBar;
private final IWallpaperManager mService;
private final Handler mH;
private boolean mCached;
private Bitmap mCache;
private int mUserId;
public LockscreenWallpaper(Context ctx, PhoneStatusBar bar, Handler h) {
mContext = ctx;
mBar = bar;
mH = h;
mService = IWallpaperManager.Stub.asInterface(
ServiceManager.getService(Context.WALLPAPER_SERVICE));
mUserId = ActivityManager.getCurrentUser();
try {
mService.setLockWallpaperCallback(this);
} catch (RemoteException e) {
Log.e(TAG, "System dead?" + e);
}
}
public Bitmap getBitmap() {
try {
if (mCached) {
return mCache;
}
if (!mService.isWallpaperSupported(mContext.getOpPackageName())) {
mCached = true;
mCache = null;
return null;
}
ParcelFileDescriptor fd = mService.getWallpaper(null, WallpaperManager.FLAG_SET_LOCK,
new Bundle(), mUserId);
if (fd != null) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
mCache = BitmapFactory.decodeFileDescriptor(
fd.getFileDescriptor(), null, options);
mCached = true;
return mCache;
} catch (OutOfMemoryError e) {
Log.w(TAG, "Can't decode file", e);
return null;
} finally {
IoUtils.closeQuietly(fd);
}
} else {
mCached = true;
mCache = null;
return null;
}
} catch (RemoteException e) {
Log.e(TAG, "System dead?" + e);
return null;
}
}
public void setUser(int user) {
if (user != mUserId) {
mCached = false;
mUserId = user;
}
}
@Override
public void onWallpaperChanged() {
// Called on Binder thread.
mH.removeCallbacks(this);
mH.post(this);
}
@Override
public void run() {
// Called in response to onWallpaperChanged on the main thread.
mCached = false;
mCache = null;
getBitmap();
mBar.updateMediaMetaData(true /* metaDataChanged */, true /* allowEnterAnimation */);
}
}

View File

@@ -23,6 +23,7 @@ import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.IWallpaperManagerCallback;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.StatusBarManager;
@@ -248,9 +249,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private static final boolean ONLY_CORE_APPS;
/** If true, the lockscreen will show a distinct wallpaper */
private static final boolean ENABLE_LOCKSCREEN_WALLPAPER =
!ActivityManager.isLowRamDeviceStatic()
&& SystemProperties.getBoolean("debug.lockscreen_wallpaper", false);
private static final boolean ENABLE_LOCKSCREEN_WALLPAPER = true;
/* If true, the device supports freeform window management.
* This affects the status bar UI. */
@@ -296,6 +295,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
AccessibilityController mAccessibilityController;
FingerprintUnlockController mFingerprintUnlockController;
LightStatusBarController mLightStatusBarController;
private LockscreenWallpaper mLockscreenWallpaper;
int mNaturalBarHeight = -1;
@@ -792,6 +792,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mKeyguardBottomArea.getLockIcon());
mKeyguardBottomArea.setKeyguardIndicationController(mKeyguardIndicationController);
if (ENABLE_LOCKSCREEN_WALLPAPER) {
mLockscreenWallpaper = new LockscreenWallpaper(mContext, this, mHandler);
}
// set the initial view visibility
setAreThereNotifications();
@@ -1819,7 +1823,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
};
/**
* Refresh or remove lockscreen artwork from media metadata.
* Refresh or remove lockscreen artwork from media metadata or the lockscreen wallpaper.
*/
public void updateMediaMetaData(boolean metaDataChanged, boolean allowEnterAnimation) {
if (!SHOW_LOCKSCREEN_MEDIA_ARTWORK) return;
@@ -1847,10 +1851,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
}
if (ENABLE_LOCKSCREEN_WALLPAPER && artworkBitmap == null) {
// TODO: use real lockscreen wallpaper.
WallpaperManager wallpaperManager = mContext
.getSystemService(WallpaperManager.class);
artworkBitmap = wallpaperManager.getBitmap();
artworkBitmap = mLockscreenWallpaper.getBitmap();
}
final boolean hasArtwork = artworkBitmap != null;
@@ -3084,10 +3085,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
else if (Intent.ACTION_SCREEN_ON.equals(action)) {
notifyNavigationBarScreenOn(true);
}
else if (ENABLE_LOCKSCREEN_WALLPAPER
&& Intent.ACTION_WALLPAPER_CHANGED.equals(action)) {
updateMediaMetaData(true, true);
}
}
};
@@ -3173,6 +3170,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
resetUserSetupObserver();
setControllerUsers();
clearCurrentMediaNotification();
mLockscreenWallpaper.setUser(newUserId);
updateMediaMetaData(true, false);
}