summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/wallpaperpicker/common/DialogUtils.java21
-rw-r--r--src/com/android/wallpaperpicker/common/WallpaperManagerCompat.java4
-rw-r--r--src/com/android/wallpaperpicker/common/WallpaperManagerCompatV16.java7
-rw-r--r--src/com/android/wallpaperpicker/common/WallpaperManagerCompatVN.java29
-rw-r--r--src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java37
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