完善android10以下的备份和回复流程

This commit is contained in:
cebgcontract 2022-11-10 18:14:05 +08:00
parent 537302a0ef
commit 08698a666b
3 changed files with 88 additions and 30 deletions

View File

@ -73,6 +73,8 @@ import androidx.core.app.ActivityOptionsCompat;
import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.EasyPermissions; import pub.devrel.easypermissions.EasyPermissions;
import static com.cege.games.release.dialog.QRCodeActivity.RC_SAVE_QR;
public class MainActivity extends Activity public class MainActivity extends Activity
implements Cocos2dxHelper.Cocos2dxHelperListener, EasyPermissions.PermissionCallbacks { implements Cocos2dxHelper.Cocos2dxHelperListener, EasyPermissions.PermissionCallbacks {
@ -414,6 +416,19 @@ public class MainActivity extends Activity
RC_LOAD_KEY, perms); RC_LOAD_KEY, perms);
} }
} }
@AfterPermissionGranted(RC_SAVE_QR)
private void checkSavePermissions(){
String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(this, perms)) {
if (qrCodeActivity != null) {
qrCodeActivity.saveAndClose();
}
} else {
// Do not have permissions, request them now
EasyPermissions.requestPermissions(MainActivity.app, "We need Write WRITE_EXTERNAL_STORAGE for backup Wallet Restore Key",
RC_SAVE_QR, perms);
}
}
/** /**
* scan qrcode * scan qrcode

View File

@ -1,8 +1,10 @@
package com.cege.games.release.dialog; package com.cege.games.release.dialog;
import android.Manifest;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
@ -14,7 +16,13 @@ import com.cege.games.release.R;
import com.jc.jcfw.util.FileUtils; import com.jc.jcfw.util.FileUtils;
import com.king.zxing.util.CodeUtils; import com.king.zxing.util.CodeUtils;
public class QRCodeActivity extends Dialog { import java.util.List;
import androidx.annotation.NonNull;
import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.EasyPermissions;
public class QRCodeActivity extends Dialog implements EasyPermissions.PermissionCallbacks{
private final Context baseContent; private final Context baseContent;
private TextView titleLabel; private TextView titleLabel;
@ -23,6 +31,7 @@ public class QRCodeActivity extends Dialog {
private Bitmap bitmap; private Bitmap bitmap;
private Button localBtn; private Button localBtn;
private boolean imgSaved = false; private boolean imgSaved = false;
public static final int RC_SAVE_QR = 0X111;
public QRCodeActivity(Context context) { public QRCodeActivity(Context context) {
@ -56,25 +65,23 @@ public class QRCodeActivity extends Dialog {
titleLabel.setText(title); titleLabel.setText(title);
ivCode.setImageBitmap(bitmap); ivCode.setImageBitmap(bitmap);
}); });
String uri = FileUtils.saveBitmap(baseContent, oid, bitmap); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MainActivity.app.runOnUiThread(()->{ String uri = FileUtils.saveBitmap(baseContent, oid, bitmap);
if (uri != null && !"".equals(uri)) { MainActivity.app.runOnUiThread(()->{
MainActivity.app.showToast("Wallet restore key had save to System Album"); if (uri != null && !"".equals(uri)) {
titleLabel.setText("Wallet Restore Key"); MainActivity.app.showToast("Wallet restore key had save to System Album");
localBtn.setText("Close"); titleLabel.setText("Wallet Restore Key");
imgSaved = true; localBtn.setText("Close");
} else { imgSaved = true;
MainActivity.app.showToast("Wallet restore key save fail"); } else {
} MainActivity.app.showToast("Wallet restore key save fail");
}); }
});
}
}).start(); }).start();
} }
public void saveAndClose() {
protected void onClickSaveImg(){
if (imgSaved) {
dismiss();
return;
}
new Thread(() -> { new Thread(() -> {
String uri = FileUtils.saveBitmap(baseContent, oid, bitmap); String uri = FileUtils.saveBitmap(baseContent, oid, bitmap);
MainActivity.app.runOnUiThread(()->{ MainActivity.app.runOnUiThread(()->{
@ -87,4 +94,42 @@ public class QRCodeActivity extends Dialog {
}); });
}).start(); }).start();
} }
protected void onClickSaveImg(){
if (imgSaved) {
dismiss();
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
saveAndClose();
} else {
checkCameraPermissions();
}
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
MainActivity.app.showToast("We need Write WRITE_EXTERNAL_STORAGE for backup Wallet Restore Key");
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
}
@AfterPermissionGranted(RC_SAVE_QR)
private void checkCameraPermissions(){
String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(this.baseContent, perms)) {
saveAndClose();
} else {
// Do not have permissions, request them now
EasyPermissions.requestPermissions(MainActivity.app, "We need Write WRITE_EXTERNAL_STORAGE for backup Wallet Restore Key",
RC_SAVE_QR, perms);
}
}
} }

View File

@ -66,7 +66,8 @@ public class FileUtils {
return fileName; return fileName;
} }
public static String insertImageIntoGallery(ContentResolver cr, Bitmap source, String filename, String title) { public static String insertImageIntoGallery(Context activity, Bitmap source, String filename, String title) {
ContentResolver cr = activity.getContentResolver();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, title); values.put(MediaStore.Images.Media.TITLE, title);
values.put(MediaStore.Images.Media.DISPLAY_NAME, title); values.put(MediaStore.Images.Media.DISPLAY_NAME, title);
@ -98,15 +99,15 @@ public class FileUtils {
} }
} else { } else {
cr.delete(url, null, null); cr.delete(url, null, null);
return storeToAlternateSd(source, filename); return storeToAlternateSd(activity, source, filename);
// url = null; // url = null;
} }
} catch (Exception e) { } catch (Exception e) {
if (url != null) { if (url != null) {
cr.delete(url, null, null); cr.delete(url, null, null);
return storeToAlternateSd(source, filename);
// url = null; // url = null;
} }
return storeToAlternateSd(activity, source, filename);
} }
if (url != null) { if (url != null) {
stringUrl = url.toString(); stringUrl = url.toString();
@ -123,14 +124,11 @@ public class FileUtils {
* @param src * @param src
* @return - the file's path * @return - the file's path
*/ */
private static String storeToAlternateSd(Bitmap src, String filename){ private static String storeToAlternateSd(Context activity, Bitmap src, String filename){
if(src == null) if(src == null)
return null; return null;
File sdCardDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "My Cards"); String sdCardDirectory = getPath(activity);
if(!sdCardDirectory.exists())
sdCardDirectory.mkdir();
File image = new File(sdCardDirectory, filename + ".jpg"); File image = new File(sdCardDirectory, filename + ".jpg");
try { try {
FileOutputStream imageOut = new FileOutputStream(image); FileOutputStream imageOut = new FileOutputStream(image);
@ -148,7 +146,7 @@ public class FileUtils {
public static String saveBitmap(Context activity, String oid, Bitmap bitmap) { public static String saveBitmap(Context activity, String oid, Bitmap bitmap) {
String title = "wallet_key_" + oid; String title = "wallet_key_" + oid;
String imageName = "wallet_key_" + oid; String imageName = "wallet_key_" + oid;
String uri = insertImageIntoGallery(activity.getContentResolver(), bitmap, imageName, title); String uri = insertImageIntoGallery(activity, bitmap, imageName, title);
Log.i(TAG, "save image success: " + uri); Log.i(TAG, "save image success: " + uri);
return uri; return uri;
} }
@ -160,13 +158,13 @@ public class FileUtils {
try { try {
data = MediaStore.Images.Media.getBitmap(activity.getContentResolver(),uri); data = MediaStore.Images.Media.getBitmap(activity.getContentResolver(),uri);
} catch (IOException e) { } catch (IOException e) {
data = readImageFromExt(oid); data = readImageFromExt(activity, oid);
} }
return data; return data;
} }
public static Bitmap readImageFromExt(String oid) { public static Bitmap readImageFromExt(Context activity, String oid) {
File sdCardDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "My Cards"); String sdCardDirectory = getPath(activity);
String imageName = "wallet_key_" + oid; String imageName = "wallet_key_" + oid;
File file = new File(sdCardDirectory, imageName + ".jpg"); File file = new File(sdCardDirectory, imageName + ".jpg");
if (!file.exists()) { if (!file.exists()) {