diff options
Diffstat (limited to 'src')
5 files changed, 78 insertions, 20 deletions
diff --git a/src/com/android/wallpaperpicker/common/DialogUtils.java b/src/com/android/wallpaperpicker/common/DialogUtils.java index c1f0e63..c24d430 100644 --- a/src/com/android/wallpaperpicker/common/DialogUtils.java +++ b/src/com/android/wallpaperpicker/common/DialogUtils.java @@ -26,6 +26,21 @@ public class DialogUtils { .show(); } + //TODO: @TargetApi(Build.VERSION_CODES.N) + /** + * Prompts user to select "Home screen" or "Home screen and lock screen." + * + * Note: This method must be called from the UI thread. + */ + public static void showWhichWallpaperHomeOrBothDialog(Context context, + DialogInterface.OnClickListener onClickListener) { + new AlertDialog.Builder(context) + .setTitle(R.string.which_wallpaper_title) + .setCancelable(false) + .setItems(R.array.which_wallpaper_options_home_or_both, onClickListener) + .show(); + } + /** * Calls cropTask.execute(), once the user has selected which wallpaper to set. On pre-N * devices, the prompt is not displayed since there is no API to set the lockscreen wallpaper. @@ -36,11 +51,11 @@ public class DialogUtils { if (Utilities.isAtLeastN()) { showWhichWallpaperDialog(context, new DialogInterface.OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { + public void onClick(DialogInterface dialog, int selectedItemIndex) { int whichWallpaper; - if (which == 0) { + if (selectedItemIndex == 0) { whichWallpaper = WallpaperManagerCompat.FLAG_SET_SYSTEM; - } else if (which == 1) { + } else if (selectedItemIndex == 1) { whichWallpaper = WallpaperManagerCompat.FLAG_SET_LOCK; } else { whichWallpaper = WallpaperManagerCompat.FLAG_SET_SYSTEM diff --git a/src/com/android/wallpaperpicker/common/WallpaperManagerCompat.java b/src/com/android/wallpaperpicker/common/WallpaperManagerCompat.java index d2dc3de..96df749 100644 --- a/src/com/android/wallpaperpicker/common/WallpaperManagerCompat.java +++ b/src/com/android/wallpaperpicker/common/WallpaperManagerCompat.java @@ -27,5 +27,7 @@ public abstract class WallpaperManagerCompat { } public abstract void setStream(InputStream stream, Rect visibleCropHint, boolean allowBackup, - int which) throws IOException; + int whichWallpaper) throws IOException; + + public abstract void clear(int whichWallpaper) throws IOException; } diff --git a/src/com/android/wallpaperpicker/common/WallpaperManagerCompatV16.java b/src/com/android/wallpaperpicker/common/WallpaperManagerCompatV16.java index 773e99d..a320beb 100644 --- a/src/com/android/wallpaperpicker/common/WallpaperManagerCompatV16.java +++ b/src/com/android/wallpaperpicker/common/WallpaperManagerCompatV16.java @@ -16,7 +16,12 @@ public class WallpaperManagerCompatV16 extends WallpaperManagerCompat { @Override public void setStream(InputStream data, Rect visibleCropHint, boolean allowBackup, - int which) throws IOException { + int whichWallpaper) throws IOException { mWallpaperManager.setStream(data); } + + @Override + public void clear(int whichWallpaper) throws IOException { + mWallpaperManager.clear(); + } } diff --git a/src/com/android/wallpaperpicker/common/WallpaperManagerCompatVN.java b/src/com/android/wallpaperpicker/common/WallpaperManagerCompatVN.java index e9160ee..2eb9c51 100644 --- a/src/com/android/wallpaperpicker/common/WallpaperManagerCompatVN.java +++ b/src/com/android/wallpaperpicker/common/WallpaperManagerCompatVN.java @@ -1,10 +1,13 @@ package com.android.wallpaperpicker.common; +import android.app.WallpaperManager; import android.content.Context; import android.graphics.Rect; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; public class WallpaperManagerCompatVN extends WallpaperManagerCompatV16 { public WallpaperManagerCompatVN(Context context) { @@ -13,8 +16,28 @@ public class WallpaperManagerCompatVN extends WallpaperManagerCompatV16 { @Override public void setStream(final InputStream data, Rect visibleCropHint, boolean allowBackup, - int which) throws IOException { - //TODO: mWallpaperManager.setStream(data, visibleCropHint, allowBackup, which); - mWallpaperManager.setStream(data); + int whichWallpaper) throws IOException { + try { + // TODO: use mWallpaperManager.setStream(data, visibleCropHint, allowBackup, which) + // without needing reflection. + Method setStream = WallpaperManager.class.getMethod("setStream", InputStream.class, + Rect.class, boolean.class, int.class); + setStream.invoke(mWallpaperManager, data, visibleCropHint, allowBackup, whichWallpaper); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + // Fall back to previous implementation (set both) + super.setStream(data, visibleCropHint, allowBackup, whichWallpaper); + } + } + + @Override + public void clear(int whichWallpaper) throws IOException { + try { + // TODO: use mWallpaperManager.clear(whichWallpaper) without needing reflection. + Method clear = WallpaperManager.class.getMethod("clear", int.class); + clear.invoke(mWallpaperManager, whichWallpaper); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + // Fall back to previous implementation (set both) + super.clear(whichWallpaper); + } } } diff --git a/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java b/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java index 0550e43..e4349ab 100644 --- a/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java +++ b/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java @@ -21,6 +21,8 @@ import com.android.wallpaperpicker.WallpaperCropActivity.CropViewScaleAndOffsetP import com.android.wallpaperpicker.WallpaperFiles; import com.android.wallpaperpicker.WallpaperPickerActivity; import com.android.wallpaperpicker.common.DialogUtils; +import com.android.wallpaperpicker.common.Utilities; +import com.android.wallpaperpicker.common.WallpaperManagerCompat; import java.io.File; import java.io.FileOutputStream; @@ -52,19 +54,30 @@ public class DefaultWallpaperInfo extends DrawableThumbWallpaperInfo { @Override public void onSave(final WallpaperPickerActivity a) { - DialogUtils.showWhichWallpaperDialog(a, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - try { - // TODO: Set based on which wallpaper user selected, in WallpaperManagerCompat. - WallpaperManager.getInstance(a.getApplicationContext()).clear(); - a.setResult(Activity.RESULT_OK); - } catch (IOException e) { - Log.w(TAG, "Setting wallpaper to default threw exception", e); + if (Utilities.isAtLeastN()) { + DialogUtils.showWhichWallpaperHomeOrBothDialog(a, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int selectedItemIndex) { + int whichWallpaper = WallpaperManagerCompat.FLAG_SET_SYSTEM; + if (selectedItemIndex == 1 /* "home screen and lock screen" */) { + whichWallpaper |= WallpaperManagerCompat.FLAG_SET_LOCK; + } + clearWallpaperAndFinish(a, whichWallpaper); } - a.finish(); - } - }); + }); + } else { + clearWallpaperAndFinish(a, WallpaperManagerCompat.FLAG_SET_SYSTEM); + } + } + + private void clearWallpaperAndFinish(WallpaperPickerActivity a, int whichWallpaper) { + try { + WallpaperManagerCompat.getInstance(a.getApplicationContext()).clear(whichWallpaper); + a.setResult(Activity.RESULT_OK); + } catch (IOException e) { + Log.w(TAG, "Setting wallpaper to default threw exception", e); + } + a.finish(); } @Override |