From 08698a666bc644931baa08f367005419dbb53701 Mon Sep 17 00:00:00 2001 From: cebgcontract <99630598+cebgcontract@users.noreply.github.com> Date: Thu, 10 Nov 2022 18:14:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84android10=E4=BB=A5=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E5=A4=87=E4=BB=BD=E5=92=8C=E5=9B=9E=E5=A4=8D=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cege/games/release/MainActivity.java | 15 ++++ .../games/release/dialog/QRCodeActivity.java | 81 ++++++++++++++----- app/src/com/jc/jcfw/util/FileUtils.java | 22 +++-- 3 files changed, 88 insertions(+), 30 deletions(-) diff --git a/app/src/com/cege/games/release/MainActivity.java b/app/src/com/cege/games/release/MainActivity.java index 952f54a..9b2bf81 100644 --- a/app/src/com/cege/games/release/MainActivity.java +++ b/app/src/com/cege/games/release/MainActivity.java @@ -73,6 +73,8 @@ import androidx.core.app.ActivityOptionsCompat; import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.EasyPermissions; +import static com.cege.games.release.dialog.QRCodeActivity.RC_SAVE_QR; + public class MainActivity extends Activity implements Cocos2dxHelper.Cocos2dxHelperListener, EasyPermissions.PermissionCallbacks { @@ -414,6 +416,19 @@ public class MainActivity extends Activity 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 diff --git a/app/src/com/cege/games/release/dialog/QRCodeActivity.java b/app/src/com/cege/games/release/dialog/QRCodeActivity.java index 6d8be20..7923adb 100644 --- a/app/src/com/cege/games/release/dialog/QRCodeActivity.java +++ b/app/src/com/cege/games/release/dialog/QRCodeActivity.java @@ -1,8 +1,10 @@ package com.cege.games.release.dialog; +import android.Manifest; import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Button; @@ -14,7 +16,13 @@ import com.cege.games.release.R; import com.jc.jcfw.util.FileUtils; 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 TextView titleLabel; @@ -23,6 +31,7 @@ public class QRCodeActivity extends Dialog { private Bitmap bitmap; private Button localBtn; private boolean imgSaved = false; + public static final int RC_SAVE_QR = 0X111; public QRCodeActivity(Context context) { @@ -56,25 +65,23 @@ public class QRCodeActivity extends Dialog { titleLabel.setText(title); ivCode.setImageBitmap(bitmap); }); - String uri = FileUtils.saveBitmap(baseContent, oid, bitmap); - MainActivity.app.runOnUiThread(()->{ - if (uri != null && !"".equals(uri)) { - MainActivity.app.showToast("Wallet restore key had save to System Album"); - titleLabel.setText("Wallet Restore Key"); - localBtn.setText("Close"); - imgSaved = true; - } else { - MainActivity.app.showToast("Wallet restore key save fail"); - } - }); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + String uri = FileUtils.saveBitmap(baseContent, oid, bitmap); + MainActivity.app.runOnUiThread(()->{ + if (uri != null && !"".equals(uri)) { + MainActivity.app.showToast("Wallet restore key had save to System Album"); + titleLabel.setText("Wallet Restore Key"); + localBtn.setText("Close"); + imgSaved = true; + } else { + MainActivity.app.showToast("Wallet restore key save fail"); + } + }); + } + }).start(); } - - protected void onClickSaveImg(){ - if (imgSaved) { - dismiss(); - return; - } + public void saveAndClose() { new Thread(() -> { String uri = FileUtils.saveBitmap(baseContent, oid, bitmap); MainActivity.app.runOnUiThread(()->{ @@ -87,4 +94,42 @@ public class QRCodeActivity extends Dialog { }); }).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 perms) { + + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List 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); + } + } } diff --git a/app/src/com/jc/jcfw/util/FileUtils.java b/app/src/com/jc/jcfw/util/FileUtils.java index 6dfca32..e15cefd 100644 --- a/app/src/com/jc/jcfw/util/FileUtils.java +++ b/app/src/com/jc/jcfw/util/FileUtils.java @@ -66,7 +66,8 @@ public class FileUtils { 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(); values.put(MediaStore.Images.Media.TITLE, title); values.put(MediaStore.Images.Media.DISPLAY_NAME, title); @@ -98,15 +99,15 @@ public class FileUtils { } } else { cr.delete(url, null, null); - return storeToAlternateSd(source, filename); + return storeToAlternateSd(activity, source, filename); // url = null; } } catch (Exception e) { if (url != null) { cr.delete(url, null, null); - return storeToAlternateSd(source, filename); // url = null; } + return storeToAlternateSd(activity, source, filename); } if (url != null) { stringUrl = url.toString(); @@ -123,14 +124,11 @@ public class FileUtils { * @param src * @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) return null; - File sdCardDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "My Cards"); - if(!sdCardDirectory.exists()) - sdCardDirectory.mkdir(); - + String sdCardDirectory = getPath(activity); File image = new File(sdCardDirectory, filename + ".jpg"); try { FileOutputStream imageOut = new FileOutputStream(image); @@ -148,7 +146,7 @@ public class FileUtils { public static String saveBitmap(Context activity, String oid, Bitmap bitmap) { String title = "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); return uri; } @@ -160,13 +158,13 @@ public class FileUtils { try { data = MediaStore.Images.Media.getBitmap(activity.getContentResolver(),uri); } catch (IOException e) { - data = readImageFromExt(oid); + data = readImageFromExt(activity, oid); } return data; } - public static Bitmap readImageFromExt(String oid) { - File sdCardDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "My Cards"); + public static Bitmap readImageFromExt(Context activity, String oid) { + String sdCardDirectory = getPath(activity); String imageName = "wallet_key_" + oid; File file = new File(sdCardDirectory, imageName + ".jpg"); if (!file.exists()) {