fix renaming files from the viewpager
This commit is contained in:
parent
251ccd8078
commit
7ba442e32e
2 changed files with 64 additions and 5 deletions
|
@ -11,12 +11,14 @@ import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.support.v4.content.ContextCompat
|
import android.support.v4.content.ContextCompat
|
||||||
|
import android.support.v4.provider.DocumentFile
|
||||||
import android.support.v7.app.ActionBar
|
import android.support.v7.app.ActionBar
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.webkit.MimeTypeMap
|
import android.webkit.MimeTypeMap
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.simplemobiletools.filepicker.extensions.getSDCardPath
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
@ -135,5 +137,25 @@ class Utils {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun needsStupidWritePermissions(context: Context, path: String) = isPathOnSD(context, path) && isKitkat()
|
||||||
|
|
||||||
|
fun isPathOnSD(context: Context, path: String): Boolean {
|
||||||
|
return path.startsWith(context.getSDCardPath())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isKitkat() = Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT
|
||||||
|
|
||||||
|
fun getFileDocument(context: Context, path: String): DocumentFile {
|
||||||
|
val relativePath = path.substring(context.getSDCardPath().length + 1)
|
||||||
|
var document = DocumentFile.fromTreeUri(context, Uri.parse(Config.newInstance(context).treeUri))
|
||||||
|
val parts = relativePath.split("/")
|
||||||
|
for (part in parts) {
|
||||||
|
val currDocument = document.findFile(part)
|
||||||
|
if (currDocument != null)
|
||||||
|
document = currDocument
|
||||||
|
}
|
||||||
|
return document
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
package com.simplemobiletools.gallery.activities;
|
package com.simplemobiletools.gallery.activities;
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.media.MediaScannerConnection;
|
import android.media.MediaScannerConnection;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.support.v4.provider.DocumentFile;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
|
@ -25,6 +29,7 @@ import com.simplemobiletools.gallery.MyViewPager;
|
||||||
import com.simplemobiletools.gallery.R;
|
import com.simplemobiletools.gallery.R;
|
||||||
import com.simplemobiletools.gallery.Utils;
|
import com.simplemobiletools.gallery.Utils;
|
||||||
import com.simplemobiletools.gallery.adapters.MyPagerAdapter;
|
import com.simplemobiletools.gallery.adapters.MyPagerAdapter;
|
||||||
|
import com.simplemobiletools.gallery.dialogs.WritePermissionDialog;
|
||||||
import com.simplemobiletools.gallery.fragments.ViewPagerFragment;
|
import com.simplemobiletools.gallery.fragments.ViewPagerFragment;
|
||||||
import com.simplemobiletools.gallery.models.Medium;
|
import com.simplemobiletools.gallery.models.Medium;
|
||||||
|
|
||||||
|
@ -46,6 +51,7 @@ public class ViewPagerActivity extends SimpleActivity
|
||||||
|
|
||||||
private static final int EDIT_IMAGE = 1;
|
private static final int EDIT_IMAGE = 1;
|
||||||
private static final int SET_WALLPAPER = 2;
|
private static final int SET_WALLPAPER = 2;
|
||||||
|
private static final int OPEN_DOCUMENT_TREE = 3;
|
||||||
private static ActionBar mActionbar;
|
private static ActionBar mActionbar;
|
||||||
private static List<Medium> mMedia;
|
private static List<Medium> mMedia;
|
||||||
private static String mPath;
|
private static String mPath;
|
||||||
|
@ -231,10 +237,21 @@ public class ViewPagerActivity extends SimpleActivity
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
Utils.Companion.showToast(getApplicationContext(), R.string.wallpaper_set_successfully);
|
Utils.Companion.showToast(getApplicationContext(), R.string.wallpaper_set_successfully);
|
||||||
}
|
}
|
||||||
|
} else if (requestCode == OPEN_DOCUMENT_TREE && resultCode == Activity.RESULT_OK && data != null) {
|
||||||
|
saveTreeUri(data);
|
||||||
}
|
}
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||||
|
private void saveTreeUri(Intent resultData) {
|
||||||
|
Uri treeUri = resultData.getData();
|
||||||
|
mConfig.setTreeUri(resultData.getData().toString());
|
||||||
|
|
||||||
|
int takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
|
||||||
|
getContentResolver().takePersistableUriPermission(treeUri, takeFlags);
|
||||||
|
}
|
||||||
|
|
||||||
private void shareMedium() {
|
private void shareMedium() {
|
||||||
final Medium medium = getCurrentMedium();
|
final Medium medium = getCurrentMedium();
|
||||||
Utils.Companion.shareMedium(medium, this);
|
Utils.Companion.shareMedium(medium, this);
|
||||||
|
@ -326,13 +343,26 @@ public class ViewPagerActivity extends SimpleActivity
|
||||||
|
|
||||||
final File newFile = new File(file.getParent(), fileName + "." + extension);
|
final File newFile = new File(file.getParent(), fileName + "." + extension);
|
||||||
|
|
||||||
if (file.renameTo(newFile)) {
|
if (Utils.Companion.needsStupidWritePermissions(getApplicationContext(), file.getAbsolutePath())) {
|
||||||
|
if (!file.canWrite() && mConfig.getTreeUri().isEmpty()) {
|
||||||
|
new WritePermissionDialog(ViewPagerActivity.this, new WritePermissionDialog.OnWritePermissionListener() {
|
||||||
|
@Override
|
||||||
|
public void onConfirmed() {
|
||||||
|
final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||||
|
startActivityForResult(intent, OPEN_DOCUMENT_TREE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final DocumentFile document = Utils.Companion.getFileDocument(getApplicationContext(), file.getAbsolutePath());
|
||||||
|
if (document.canWrite())
|
||||||
|
document.renameTo(newFile.getName());
|
||||||
|
sendSuccess(file, newFile);
|
||||||
|
alertDialog.dismiss();
|
||||||
|
} else if (file.renameTo(newFile)) {
|
||||||
final int currItem = mPager.getCurrentItem();
|
final int currItem = mPager.getCurrentItem();
|
||||||
mMedia.set(currItem, new Medium(newFile.getAbsolutePath(), mMedia.get(currItem).getIsVideo(), 0, file.length()));
|
mMedia.set(currItem, new Medium(newFile.getAbsolutePath(), mMedia.get(currItem).getIsVideo(), 0, file.length()));
|
||||||
|
sendSuccess(file, newFile);
|
||||||
final String[] changedFiles = {file.getAbsolutePath(), newFile.getAbsolutePath()};
|
|
||||||
MediaScannerConnection.scanFile(getApplicationContext(), changedFiles, null, null);
|
|
||||||
updateActionbarTitle();
|
|
||||||
alertDialog.dismiss();
|
alertDialog.dismiss();
|
||||||
} else {
|
} else {
|
||||||
Utils.Companion.showToast(getApplicationContext(), R.string.rename_file_error);
|
Utils.Companion.showToast(getApplicationContext(), R.string.rename_file_error);
|
||||||
|
@ -341,6 +371,13 @@ public class ViewPagerActivity extends SimpleActivity
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendSuccess(File currFile, File newFile) {
|
||||||
|
final String[] changedFiles = {currFile.getAbsolutePath(), newFile.getAbsolutePath()};
|
||||||
|
MediaScannerConnection.scanFile(getApplicationContext(), changedFiles, null, null);
|
||||||
|
mMedia.get(mPager.getCurrentItem()).setPath(newFile.getAbsolutePath());
|
||||||
|
updateActionbarTitle();
|
||||||
|
}
|
||||||
|
|
||||||
private void reloadViewPager() {
|
private void reloadViewPager() {
|
||||||
final MyPagerAdapter adapter = (MyPagerAdapter) mPager.getAdapter();
|
final MyPagerAdapter adapter = (MyPagerAdapter) mPager.getAdapter();
|
||||||
final int curPos = mPager.getCurrentItem();
|
final int curPos = mPager.getCurrentItem();
|
||||||
|
|
Loading…
Reference in a new issue