allow setting Wallpaper with the app

This commit is contained in:
tibbi 2016-06-26 22:38:25 +02:00
parent fee7704dae
commit 8d63aedf2a
5 changed files with 80 additions and 13 deletions

View File

@ -4,6 +4,7 @@
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<application
android:allowBackup="true"
@ -30,6 +31,11 @@
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.dir/video"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SET_WALLPAPER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity

View File

@ -5,4 +5,5 @@ public class Constants {
public static final String MEDIUM = "medium";
public static final String PICK_IMAGE_INTENT = "is_image_pick_intent";
public static final String PICK_VIDEO_INTENT = "is_video_pick_intent";
public static final String SET_WALLPAPER_INTENT = "is_set_wallpaper_intent";
}

View File

@ -50,6 +50,7 @@ public class MainActivity extends AppCompatActivity
private static final int STORAGE_PERMISSION = 1;
private static final int PICK_MEDIA = 2;
private static final int PICK_WALLPAPER = 3;
private static List<Directory> mDirs;
private static Snackbar mSnackbar;
@ -60,6 +61,7 @@ public class MainActivity extends AppCompatActivity
private static boolean mIsSnackbarShown;
private static boolean mIsPickImageIntent;
private static boolean mIsPickVideoIntent;
private static boolean mIsSetWallpaperIntent;
private static int mSelectedItemsCnt;
@Override
@ -67,12 +69,18 @@ public class MainActivity extends AppCompatActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
mIsPickImageIntent = isPickImageIntent(getIntent());
mIsPickVideoIntent = isPickVideoIntent(getIntent());
final Intent intent = getIntent();
mIsPickImageIntent = isPickImageIntent(intent);
mIsPickVideoIntent = isPickVideoIntent(intent);
mIsSetWallpaperIntent = isSetWallpaperIntent(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (mIsSetWallpaperIntent)
return false;
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@ -352,13 +360,22 @@ public class MainActivity extends AppCompatActivity
return intent != null && intent.getAction() != null && intent.getAction().equals(Intent.ACTION_PICK) && intent.getData() != null;
}
private boolean isSetWallpaperIntent(Intent intent) {
return intent != null && intent.getAction() != null && intent.getAction().equals(Intent.ACTION_SET_WALLPAPER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_MEDIA && resultCode == RESULT_OK && data != null) {
final Intent result = new Intent();
result.setData(data.getData());
setResult(RESULT_OK, result);
finish();
if (resultCode == RESULT_OK) {
if (requestCode == PICK_MEDIA && data != null) {
final Intent result = new Intent();
result.setData(data.getData());
setResult(RESULT_OK, result);
finish();
} else if (requestCode == PICK_WALLPAPER) {
setResult(RESULT_OK);
finish();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@ -367,9 +384,15 @@ public class MainActivity extends AppCompatActivity
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Intent intent = new Intent(this, MediaActivity.class);
intent.putExtra(Constants.DIRECTORY, mDirs.get(position).getPath());
intent.putExtra(Constants.PICK_IMAGE_INTENT, mIsPickImageIntent);
intent.putExtra(Constants.PICK_VIDEO_INTENT, mIsPickVideoIntent);
startActivityForResult(intent, PICK_MEDIA);
if (mIsSetWallpaperIntent) {
intent.putExtra(Constants.SET_WALLPAPER_INTENT, true);
startActivityForResult(intent, PICK_WALLPAPER);
} else {
intent.putExtra(Constants.PICK_IMAGE_INTENT, mIsPickImageIntent);
intent.putExtra(Constants.PICK_VIDEO_INTENT, mIsPickVideoIntent);
startActivityForResult(intent, PICK_MEDIA);
}
}
@Override

View File

@ -1,8 +1,10 @@
package com.simplemobiletools.gallery.activities;
import android.app.WallpaperManager;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.media.MediaScannerConnection;
import android.net.Uri;
@ -12,6 +14,7 @@ import android.provider.MediaStore;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.ActionMode;
import android.view.Menu;
@ -22,6 +25,9 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.simplemobiletools.gallery.Constants;
import com.simplemobiletools.gallery.R;
import com.simplemobiletools.gallery.Utils;
@ -29,6 +35,7 @@ import com.simplemobiletools.gallery.adapters.MediaAdapter;
import com.simplemobiletools.gallery.models.Medium;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -39,6 +46,7 @@ import butterknife.ButterKnife;
public class MediaActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener, GridView.MultiChoiceModeListener, GridView.OnTouchListener {
private static final String TAG = MediaActivity.class.getSimpleName();
@BindView(R.id.media_grid) GridView mGridView;
private static List<Medium> mMedia;
@ -247,16 +255,44 @@ public class MediaActivity extends AppCompatActivity
}
}
private boolean isSetWallpaperIntent() {
return getIntent().getBooleanExtra(Constants.SET_WALLPAPER_INTENT, false);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mIsPickImageIntent || mIsPickVideoIntent) {
final String curItemPath = mMedia.get(position).getPath();
if (isSetWallpaperIntent()) {
Utils.showToast(this, R.string.setting_wallpaper);
final int wantedWidth = getWallpaperDesiredMinimumWidth();
final int wantedHeight = getWallpaperDesiredMinimumHeight();
final float ratio = (float) wantedWidth / wantedHeight;
Glide.with(this)
.load(new File(curItemPath))
.asBitmap()
.override((int) (wantedWidth * ratio), wantedHeight)
.fitCenter()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
try {
WallpaperManager.getInstance(getApplicationContext()).setBitmap(bitmap);
setResult(RESULT_OK);
} catch (IOException e) {
Log.e(TAG, "item click " + e.getMessage());
}
finish();
}
});
} else if (mIsPickImageIntent || mIsPickVideoIntent) {
final Intent result = new Intent();
result.setData(Uri.parse(mMedia.get(position).getPath()));
result.setData(Uri.parse(curItemPath));
setResult(RESULT_OK, result);
finish();
} else {
final Intent intent = new Intent(this, ViewPagerActivity.class);
intent.putExtra(Constants.MEDIUM, mMedia.get(position).getPath());
intent.putExtra(Constants.MEDIUM, curItemPath);
startActivity(intent);
}
}

View File

@ -17,6 +17,7 @@
<string name="renaming_folder">Renaming folder</string>
<string name="extension">Extension</string>
<string name="file_deleted">File deleted</string>
<string name="setting_wallpaper">Setting wallpaper</string>
<plurals name="folders_deleted">
<item quantity="one">1 folder deleted</item>