Merge "Removing all dependencies of launcher code on wallpaper-picker" into ub-launcher3-burnaby
This commit is contained in:
+1
-1
@@ -128,7 +128,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="com.android.launcher3.LauncherWallpaperPickerActivity"
|
android:name="com.android.launcher3.WallpaperPickerActivity"
|
||||||
android:theme="@style/Theme.WallpaperPicker"
|
android:theme="@style/Theme.WallpaperPicker"
|
||||||
android:label="@string/pick_wallpaper"
|
android:label="@string/pick_wallpaper"
|
||||||
android:icon="@mipmap/ic_launcher_wallpaper"
|
android:icon="@mipmap/ic_launcher_wallpaper"
|
||||||
|
|||||||
@@ -16,20 +16,12 @@
|
|||||||
|
|
||||||
package com.android.gallery3d.common;
|
package com.android.gallery3d.common;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.Point;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.WindowManager;
|
|
||||||
|
|
||||||
import com.android.gallery3d.exif.ExifInterface;
|
import com.android.gallery3d.exif.ExifInterface;
|
||||||
import com.android.launcher3.WallpaperCropActivity;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -49,92 +41,6 @@ public class BitmapUtils {
|
|||||||
: initialSize / 8 * 8;
|
: initialSize / 8 * 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Bitmap resizeBitmapByScale(
|
|
||||||
Bitmap bitmap, float scale, boolean recycle) {
|
|
||||||
int width = Math.round(bitmap.getWidth() * scale);
|
|
||||||
int height = Math.round(bitmap.getHeight() * scale);
|
|
||||||
if (width == bitmap.getWidth()
|
|
||||||
&& height == bitmap.getHeight()) return bitmap;
|
|
||||||
Bitmap target = Bitmap.createBitmap(width, height, getConfig(bitmap));
|
|
||||||
Canvas canvas = new Canvas(target);
|
|
||||||
canvas.scale(scale, scale);
|
|
||||||
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);
|
|
||||||
canvas.drawBitmap(bitmap, 0, 0, paint);
|
|
||||||
if (recycle) bitmap.recycle();
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Bitmap.Config getConfig(Bitmap bitmap) {
|
|
||||||
Bitmap.Config config = bitmap.getConfig();
|
|
||||||
if (config == null) {
|
|
||||||
config = Bitmap.Config.ARGB_8888;
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* As a ratio of screen height, the total distance we want the parallax effect to span
|
|
||||||
* horizontally
|
|
||||||
*/
|
|
||||||
public static float wallpaperTravelToScreenWidthRatio(int width, int height) {
|
|
||||||
float aspectRatio = width / (float) height;
|
|
||||||
|
|
||||||
// At an aspect ratio of 16/10, the wallpaper parallax effect should span 1.5 * screen width
|
|
||||||
// At an aspect ratio of 10/16, the wallpaper parallax effect should span 1.2 * screen width
|
|
||||||
// We will use these two data points to extrapolate how much the wallpaper parallax effect
|
|
||||||
// to span (ie travel) at any aspect ratio:
|
|
||||||
|
|
||||||
final float ASPECT_RATIO_LANDSCAPE = 16/10f;
|
|
||||||
final float ASPECT_RATIO_PORTRAIT = 10/16f;
|
|
||||||
final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE = 1.5f;
|
|
||||||
final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT = 1.2f;
|
|
||||||
|
|
||||||
// To find out the desired width at different aspect ratios, we use the following two
|
|
||||||
// formulas, where the coefficient on x is the aspect ratio (width/height):
|
|
||||||
// (16/10)x + y = 1.5
|
|
||||||
// (10/16)x + y = 1.2
|
|
||||||
// We solve for x and y and end up with a final formula:
|
|
||||||
final float x =
|
|
||||||
(WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE - WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT) /
|
|
||||||
(ASPECT_RATIO_LANDSCAPE - ASPECT_RATIO_PORTRAIT);
|
|
||||||
final float y = WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT - x * ASPECT_RATIO_PORTRAIT;
|
|
||||||
return x * aspectRatio + y;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Point sDefaultWallpaperSize;
|
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
|
|
||||||
public static Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) {
|
|
||||||
if (sDefaultWallpaperSize == null) {
|
|
||||||
Point minDims = new Point();
|
|
||||||
Point maxDims = new Point();
|
|
||||||
windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims);
|
|
||||||
|
|
||||||
int maxDim = Math.max(maxDims.x, maxDims.y);
|
|
||||||
int minDim = Math.max(minDims.x, minDims.y);
|
|
||||||
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
|
||||||
Point realSize = new Point();
|
|
||||||
windowManager.getDefaultDisplay().getRealSize(realSize);
|
|
||||||
maxDim = Math.max(realSize.x, realSize.y);
|
|
||||||
minDim = Math.min(realSize.x, realSize.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
// We need to ensure that there is enough extra space in the wallpaper
|
|
||||||
// for the intended parallax effects
|
|
||||||
final int defaultWidth, defaultHeight;
|
|
||||||
if (res.getConfiguration().smallestScreenWidthDp >= 720) {
|
|
||||||
defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim));
|
|
||||||
defaultHeight = maxDim;
|
|
||||||
} else {
|
|
||||||
defaultWidth = Math.max((int) (minDim * WallpaperCropActivity.WALLPAPER_SCREENS_SPAN), maxDim);
|
|
||||||
defaultHeight = maxDim;
|
|
||||||
}
|
|
||||||
sDefaultWallpaperSize = new Point(defaultWidth, defaultHeight);
|
|
||||||
}
|
|
||||||
return sDefaultWallpaperSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getRotationFromExif(Context context, Uri uri) {
|
public static int getRotationFromExif(Context context, Uri uri) {
|
||||||
return BitmapUtils.getRotationFromExifHelper(null, 0, context, uri);
|
return BitmapUtils.getRotationFromExifHelper(null, 0, context, uri);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-11
@@ -16,15 +16,6 @@
|
|||||||
|
|
||||||
package com.android.launcher3;
|
package com.android.launcher3;
|
||||||
|
|
||||||
import android.content.Intent;
|
// TODO: Remove this class
|
||||||
|
|
||||||
public class LauncherWallpaperPickerActivity extends WallpaperPickerActivity {
|
public class LauncherWallpaperPickerActivity extends WallpaperPickerActivity {
|
||||||
@Override
|
}
|
||||||
public void startActivityForResultSafely(Intent intent, int requestCode) {
|
|
||||||
Utilities.startActivityForResultSafely(this, intent, requestCode);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public boolean enableRotation() {
|
|
||||||
return Utilities.isRotationEnabled(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -38,13 +38,13 @@ import android.os.Message;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.android.gallery3d.common.BitmapCropTask;
|
import com.android.gallery3d.common.BitmapCropTask;
|
||||||
import com.android.gallery3d.common.BitmapUtils;
|
import com.android.gallery3d.common.BitmapUtils;
|
||||||
import com.android.gallery3d.common.Utils;
|
import com.android.gallery3d.common.Utils;
|
||||||
import com.android.launcher3.util.Thunk;
|
import com.android.launcher3.util.Thunk;
|
||||||
|
import com.android.launcher3.util.WallpaperUtils;
|
||||||
import com.android.photos.BitmapRegionTileSource;
|
import com.android.photos.BitmapRegionTileSource;
|
||||||
import com.android.photos.BitmapRegionTileSource.BitmapSource;
|
import com.android.photos.BitmapRegionTileSource.BitmapSource;
|
||||||
import com.android.photos.BitmapRegionTileSource.BitmapSource.InBitmapProvider;
|
import com.android.photos.BitmapRegionTileSource.BitmapSource.InBitmapProvider;
|
||||||
@@ -57,8 +57,8 @@ import java.util.WeakHashMap;
|
|||||||
public class WallpaperCropActivity extends Activity implements Handler.Callback {
|
public class WallpaperCropActivity extends Activity implements Handler.Callback {
|
||||||
private static final String LOGTAG = "Launcher3.CropActivity";
|
private static final String LOGTAG = "Launcher3.CropActivity";
|
||||||
|
|
||||||
protected static final String WALLPAPER_WIDTH_KEY = "wallpaper.width";
|
protected static final String WALLPAPER_WIDTH_KEY = WallpaperUtils.WALLPAPER_WIDTH_KEY;
|
||||||
protected static final String WALLPAPER_HEIGHT_KEY = "wallpaper.height";
|
protected static final String WALLPAPER_HEIGHT_KEY = WallpaperUtils.WALLPAPER_HEIGHT_KEY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum bitmap size we allow to be returned through the intent.
|
* The maximum bitmap size we allow to be returned through the intent.
|
||||||
@@ -68,7 +68,7 @@ public class WallpaperCropActivity extends Activity implements Handler.Callback
|
|||||||
* array instead of a Bitmap instance to avoid overhead.
|
* array instead of a Bitmap instance to avoid overhead.
|
||||||
*/
|
*/
|
||||||
public static final int MAX_BMAP_IN_INTENT = 750000;
|
public static final int MAX_BMAP_IN_INTENT = 750000;
|
||||||
public static final float WALLPAPER_SCREENS_SPAN = 2f;
|
public static final float WALLPAPER_SCREENS_SPAN = WallpaperUtils.WALLPAPER_SCREENS_SPAN;
|
||||||
|
|
||||||
private static final int MSG_LOAD_IMAGE = 1;
|
private static final int MSG_LOAD_IMAGE = 1;
|
||||||
|
|
||||||
@@ -290,10 +290,6 @@ public class WallpaperCropActivity extends Activity implements Handler.Callback
|
|||||||
return getResources().getBoolean(R.bool.allow_rotation);
|
return getResources().getBoolean(R.bool.allow_rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getSharedPreferencesKey() {
|
|
||||||
return LauncherFiles.WALLPAPER_CROP_PREFERENCES_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone) {
|
protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone) {
|
||||||
int rotation = BitmapUtils.getRotationFromExif(this, uri);
|
int rotation = BitmapUtils.getRotationFromExif(this, uri);
|
||||||
BitmapCropTask cropTask = new BitmapCropTask(
|
BitmapCropTask cropTask = new BitmapCropTask(
|
||||||
@@ -319,7 +315,7 @@ public class WallpaperCropActivity extends Activity implements Handler.Callback
|
|||||||
// this device
|
// this device
|
||||||
int rotation = BitmapUtils.getRotationFromExif(res, resId);
|
int rotation = BitmapUtils.getRotationFromExif(res, resId);
|
||||||
Point inSize = mCropView.getSourceDimensions();
|
Point inSize = mCropView.getSourceDimensions();
|
||||||
Point outSize = BitmapUtils.getDefaultWallpaperSize(getResources(),
|
Point outSize = WallpaperUtils.getDefaultWallpaperSize(getResources(),
|
||||||
getWindowManager());
|
getWindowManager());
|
||||||
RectF crop = Utils.getMaxCropRect(
|
RectF crop = Utils.getMaxCropRect(
|
||||||
inSize.x, inSize.y, outSize.x, outSize.y, false);
|
inSize.x, inSize.y, outSize.x, outSize.y, false);
|
||||||
@@ -352,7 +348,7 @@ public class WallpaperCropActivity extends Activity implements Handler.Callback
|
|||||||
d.getSize(displaySize);
|
d.getSize(displaySize);
|
||||||
boolean isPortrait = displaySize.x < displaySize.y;
|
boolean isPortrait = displaySize.x < displaySize.y;
|
||||||
|
|
||||||
Point defaultWallpaperSize = BitmapUtils.getDefaultWallpaperSize(getResources(),
|
Point defaultWallpaperSize = WallpaperUtils.getDefaultWallpaperSize(getResources(),
|
||||||
getWindowManager());
|
getWindowManager());
|
||||||
// Get the crop
|
// Get the crop
|
||||||
RectF cropRect = mCropView.getCrop();
|
RectF cropRect = mCropView.getCrop();
|
||||||
@@ -435,7 +431,7 @@ public class WallpaperCropActivity extends Activity implements Handler.Callback
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void updateWallpaperDimensions(int width, int height) {
|
protected void updateWallpaperDimensions(int width, int height) {
|
||||||
String spKey = getSharedPreferencesKey();
|
String spKey = LauncherFiles.WALLPAPER_CROP_PREFERENCES_KEY;
|
||||||
SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS);
|
SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS);
|
||||||
SharedPreferences.Editor editor = sp.edit();
|
SharedPreferences.Editor editor = sp.edit();
|
||||||
if (width != 0 && height != 0) {
|
if (width != 0 && height != 0) {
|
||||||
@@ -446,36 +442,10 @@ public class WallpaperCropActivity extends Activity implements Handler.Callback
|
|||||||
editor.remove(WALLPAPER_HEIGHT_KEY);
|
editor.remove(WALLPAPER_HEIGHT_KEY);
|
||||||
}
|
}
|
||||||
editor.commit();
|
editor.commit();
|
||||||
|
WallpaperUtils.suggestWallpaperDimension(getResources(),
|
||||||
suggestWallpaperDimension(getResources(),
|
|
||||||
sp, getWindowManager(), WallpaperManager.getInstance(this), true);
|
sp, getWindowManager(), WallpaperManager.getInstance(this), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void suggestWallpaperDimension(Resources res,
|
|
||||||
final SharedPreferences sharedPrefs,
|
|
||||||
WindowManager windowManager,
|
|
||||||
final WallpaperManager wallpaperManager, boolean fallBackToDefaults) {
|
|
||||||
final Point defaultWallpaperSize = BitmapUtils.getDefaultWallpaperSize(res, windowManager);
|
|
||||||
// If we have saved a wallpaper width/height, use that instead
|
|
||||||
|
|
||||||
int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, -1);
|
|
||||||
int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, -1);
|
|
||||||
|
|
||||||
if (savedWidth == -1 || savedHeight == -1) {
|
|
||||||
if (!fallBackToDefaults) {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
savedWidth = defaultWallpaperSize.x;
|
|
||||||
savedHeight = defaultWallpaperSize.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (savedWidth != wallpaperManager.getDesiredMinimumWidth() ||
|
|
||||||
savedHeight != wallpaperManager.getDesiredMinimumHeight()) {
|
|
||||||
wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static class LoadRequest {
|
static class LoadRequest {
|
||||||
BitmapSource src;
|
BitmapSource src;
|
||||||
boolean touchEnabled;
|
boolean touchEnabled;
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ import com.android.gallery3d.common.BitmapCropTask;
|
|||||||
import com.android.gallery3d.common.BitmapUtils;
|
import com.android.gallery3d.common.BitmapUtils;
|
||||||
import com.android.gallery3d.common.Utils;
|
import com.android.gallery3d.common.Utils;
|
||||||
import com.android.launcher3.util.Thunk;
|
import com.android.launcher3.util.Thunk;
|
||||||
|
import com.android.launcher3.util.WallpaperUtils;
|
||||||
import com.android.photos.BitmapRegionTileSource;
|
import com.android.photos.BitmapRegionTileSource;
|
||||||
import com.android.photos.BitmapRegionTileSource.BitmapSource;
|
import com.android.photos.BitmapRegionTileSource.BitmapSource;
|
||||||
import com.android.photos.views.TiledImageRenderer.TileSource;
|
import com.android.photos.views.TiledImageRenderer.TileSource;
|
||||||
@@ -239,7 +240,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getScale(TileSource src) {
|
public float getScale(TileSource src) {
|
||||||
Point wallpaperSize = BitmapUtils.getDefaultWallpaperSize(
|
Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize(
|
||||||
a.getResources(), a.getWindowManager());
|
a.getResources(), a.getWindowManager());
|
||||||
RectF crop = Utils.getMaxCropRect(
|
RectF crop = Utils.getMaxCropRect(
|
||||||
src.getImageWidth(), src.getImageHeight(),
|
src.getImageWidth(), src.getImageHeight(),
|
||||||
@@ -1109,9 +1110,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In Launcher3, we override this with a method that catches exceptions
|
|
||||||
// from starting activities; didn't want to copy and paste code into here
|
|
||||||
public void startActivityForResultSafely(Intent intent, int requestCode) {
|
public void startActivityForResultSafely(Intent intent, int requestCode) {
|
||||||
startActivityForResult(intent, requestCode);
|
Utilities.startActivityForResultSafely(this, intent, requestCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean enableRotation() {
|
||||||
|
return Utilities.isRotationEnabled(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2409,13 +2409,6 @@ public class Launcher extends Activity
|
|||||||
sFolders.remove(folder.id);
|
sFolders.remove(folder.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ComponentName getWallpaperPickerComponent() {
|
|
||||||
if (mLauncherCallbacks != null) {
|
|
||||||
return mLauncherCallbacks.getWallpaperPickerComponent();
|
|
||||||
}
|
|
||||||
return new ComponentName(getPackageName(), LauncherWallpaperPickerActivity.class.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers various content observers. The current implementation registers
|
* Registers various content observers. The current implementation registers
|
||||||
* only a favorites observer to keep track of the favorites applications.
|
* only a favorites observer to keep track of the favorites applications.
|
||||||
@@ -2780,9 +2773,8 @@ public class Launcher extends Activity
|
|||||||
*/
|
*/
|
||||||
protected void onClickWallpaperPicker(View v) {
|
protected void onClickWallpaperPicker(View v) {
|
||||||
if (LOGD) Log.d(TAG, "onClickWallpaperPicker");
|
if (LOGD) Log.d(TAG, "onClickWallpaperPicker");
|
||||||
final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
|
startActivityForResult(new Intent(Intent.ACTION_SET_WALLPAPER).setPackage(getPackageName()),
|
||||||
pickWallpaper.setComponent(getWallpaperPickerComponent());
|
REQUEST_PICK_WALLPAPER);
|
||||||
startActivityForResult(pickWallpaper, REQUEST_PICK_WALLPAPER);
|
|
||||||
|
|
||||||
if (mLauncherCallbacks != null) {
|
if (mLauncherCallbacks != null) {
|
||||||
mLauncherCallbacks.onClickWallpaperPicker(v);
|
mLauncherCallbacks.onClickWallpaperPicker(v);
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ public class LauncherFiles {
|
|||||||
public static final String LAUNCHER_PREFERENCES = "launcher.preferences";
|
public static final String LAUNCHER_PREFERENCES = "launcher.preferences";
|
||||||
public static final String SHARED_PREFERENCES_KEY = "com.android.launcher3.prefs";
|
public static final String SHARED_PREFERENCES_KEY = "com.android.launcher3.prefs";
|
||||||
public static final String WALLPAPER_CROP_PREFERENCES_KEY =
|
public static final String WALLPAPER_CROP_PREFERENCES_KEY =
|
||||||
WallpaperCropActivity.class.getName();
|
"com.android.launcher3.WallpaperCropActivity";
|
||||||
|
|
||||||
public static final String WALLPAPER_IMAGES_DB = "saved_wallpaper_images.db";
|
public static final String WALLPAPER_IMAGES_DB = "saved_wallpaper_images.db";
|
||||||
public static final String WIDGET_PREVIEWS_DB = "widgetpreviews.db";
|
public static final String WIDGET_PREVIEWS_DB = "widgetpreviews.db";
|
||||||
public static final String APP_ICONS_DB = "app_icons.db";
|
public static final String APP_ICONS_DB = "app_icons.db";
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ import com.android.launcher3.compat.PackageInstallerCompat;
|
|||||||
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;
|
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;
|
||||||
import com.android.launcher3.compat.UserHandleCompat;
|
import com.android.launcher3.compat.UserHandleCompat;
|
||||||
import com.android.launcher3.util.Thunk;
|
import com.android.launcher3.util.Thunk;
|
||||||
|
import com.android.launcher3.util.WallpaperUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -1314,10 +1315,10 @@ public class Workspace extends SmoothPagedView
|
|||||||
protected void setWallpaperDimension() {
|
protected void setWallpaperDimension() {
|
||||||
new AsyncTask<Void, Void, Void>() {
|
new AsyncTask<Void, Void, Void>() {
|
||||||
public Void doInBackground(Void ... args) {
|
public Void doInBackground(Void ... args) {
|
||||||
String spKey = WallpaperCropActivity.getSharedPreferencesKey();
|
String spKey = LauncherFiles.WALLPAPER_CROP_PREFERENCES_KEY;
|
||||||
SharedPreferences sp =
|
SharedPreferences sp =
|
||||||
mLauncher.getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS);
|
mLauncher.getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS);
|
||||||
LauncherWallpaperPickerActivity.suggestWallpaperDimension(mLauncher.getResources(),
|
WallpaperUtils.suggestWallpaperDimension(mLauncher.getResources(),
|
||||||
sp, mLauncher.getWindowManager(), mWallpaperManager,
|
sp, mLauncher.getWindowManager(), mWallpaperManager,
|
||||||
mLauncher.overrideWallpaperDimensions());
|
mLauncher.overrideWallpaperDimensions());
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 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.launcher3.util;
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.app.WallpaperManager;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Point;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility methods for wallpaper management.
|
||||||
|
*/
|
||||||
|
public final class WallpaperUtils {
|
||||||
|
|
||||||
|
public static final String WALLPAPER_WIDTH_KEY = "wallpaper.width";
|
||||||
|
public static final String WALLPAPER_HEIGHT_KEY = "wallpaper.height";
|
||||||
|
public static final float WALLPAPER_SCREENS_SPAN = 2f;
|
||||||
|
|
||||||
|
public static void suggestWallpaperDimension(Resources res,
|
||||||
|
final SharedPreferences sharedPrefs,
|
||||||
|
WindowManager windowManager,
|
||||||
|
final WallpaperManager wallpaperManager, boolean fallBackToDefaults) {
|
||||||
|
final Point defaultWallpaperSize = WallpaperUtils.getDefaultWallpaperSize(res, windowManager);
|
||||||
|
// If we have saved a wallpaper width/height, use that instead
|
||||||
|
|
||||||
|
int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, -1);
|
||||||
|
int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, -1);
|
||||||
|
|
||||||
|
if (savedWidth == -1 || savedHeight == -1) {
|
||||||
|
if (!fallBackToDefaults) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
savedWidth = defaultWallpaperSize.x;
|
||||||
|
savedHeight = defaultWallpaperSize.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (savedWidth != wallpaperManager.getDesiredMinimumWidth() ||
|
||||||
|
savedHeight != wallpaperManager.getDesiredMinimumHeight()) {
|
||||||
|
wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a ratio of screen height, the total distance we want the parallax effect to span
|
||||||
|
* horizontally
|
||||||
|
*/
|
||||||
|
public static float wallpaperTravelToScreenWidthRatio(int width, int height) {
|
||||||
|
float aspectRatio = width / (float) height;
|
||||||
|
|
||||||
|
// At an aspect ratio of 16/10, the wallpaper parallax effect should span 1.5 * screen width
|
||||||
|
// At an aspect ratio of 10/16, the wallpaper parallax effect should span 1.2 * screen width
|
||||||
|
// We will use these two data points to extrapolate how much the wallpaper parallax effect
|
||||||
|
// to span (ie travel) at any aspect ratio:
|
||||||
|
|
||||||
|
final float ASPECT_RATIO_LANDSCAPE = 16/10f;
|
||||||
|
final float ASPECT_RATIO_PORTRAIT = 10/16f;
|
||||||
|
final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE = 1.5f;
|
||||||
|
final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT = 1.2f;
|
||||||
|
|
||||||
|
// To find out the desired width at different aspect ratios, we use the following two
|
||||||
|
// formulas, where the coefficient on x is the aspect ratio (width/height):
|
||||||
|
// (16/10)x + y = 1.5
|
||||||
|
// (10/16)x + y = 1.2
|
||||||
|
// We solve for x and y and end up with a final formula:
|
||||||
|
final float x =
|
||||||
|
(WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE - WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT) /
|
||||||
|
(ASPECT_RATIO_LANDSCAPE - ASPECT_RATIO_PORTRAIT);
|
||||||
|
final float y = WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT - x * ASPECT_RATIO_PORTRAIT;
|
||||||
|
return x * aspectRatio + y;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Point sDefaultWallpaperSize;
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
|
||||||
|
public static Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) {
|
||||||
|
if (sDefaultWallpaperSize == null) {
|
||||||
|
Point minDims = new Point();
|
||||||
|
Point maxDims = new Point();
|
||||||
|
windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims);
|
||||||
|
|
||||||
|
int maxDim = Math.max(maxDims.x, maxDims.y);
|
||||||
|
int minDim = Math.max(minDims.x, minDims.y);
|
||||||
|
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||||
|
Point realSize = new Point();
|
||||||
|
windowManager.getDefaultDisplay().getRealSize(realSize);
|
||||||
|
maxDim = Math.max(realSize.x, realSize.y);
|
||||||
|
minDim = Math.min(realSize.x, realSize.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to ensure that there is enough extra space in the wallpaper
|
||||||
|
// for the intended parallax effects
|
||||||
|
final int defaultWidth, defaultHeight;
|
||||||
|
if (res.getConfiguration().smallestScreenWidthDp >= 720) {
|
||||||
|
defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim));
|
||||||
|
defaultHeight = maxDim;
|
||||||
|
} else {
|
||||||
|
defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim);
|
||||||
|
defaultHeight = maxDim;
|
||||||
|
}
|
||||||
|
sDefaultWallpaperSize = new Point(defaultWidth, defaultHeight);
|
||||||
|
}
|
||||||
|
return sDefaultWallpaperSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user