diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java index 53056af..cb10be1 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileAdapter.java @@ -1,6 +1,7 @@ package com.thankvinci.CloudKey.Files; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -8,6 +9,7 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.navigation.Navigation; import androidx.recyclerview.widget.RecyclerView; @@ -19,6 +21,8 @@ import com.thankvinci.CloudKey.R; import com.thankvinci.CloudKey.Utils.FileHandler; import com.thankvinci.CloudKey.Utils.FileThread; +import net.lingala.zip4j.exception.ZipException; + import org.apache.commons.codec.digest.DigestUtils; import java.io.FileInputStream; @@ -85,8 +89,9 @@ public class FileAdapter extends RecyclerView.Adapter { data.putString("srcFile",srcFile); data.putString("desPath",desPath); unzipDialog.setArguments(data); - unzipDialog.show(((MainActivity)v.getContext()).getSupportFragmentManager(),"unzip"); + //Toast.makeText(v.getContext(),""+unzipDialog.getPosiBtn(),Toast.LENGTH_SHORT).show(); + }else{ Toast.makeText(v.getContext(),"压缩包已损坏或者格式不合法",Toast.LENGTH_SHORT).show(); } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java index e7a69b8..6c26edd 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Files/FileUtils.java @@ -35,6 +35,7 @@ public class FileUtils { return 0; } return (f1.getName().toUpperCase()).compareTo((f2.getName().toUpperCase())); + //return (f1.getName().toUpperCase()).compareTo((f2.getName().toUpperCase())); } }); } @@ -70,4 +71,8 @@ public class FileUtils { ZipFile zipFile = new ZipFile(srcFile); return zipFile.isValidZipFile(); } + public static boolean isEncrypted(String srcFile) throws ZipException { + ZipFile zipFile = new ZipFile(srcFile); + return zipFile.isEncrypted(); + } } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/FileManageFragment.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/FileManageFragment.java index df156df..0103e18 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/FileManageFragment.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/FileManageFragment.java @@ -7,6 +7,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; +import android.widget.ProgressBar; import android.widget.Toast; import androidx.annotation.NonNull; diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java index 0968366..ef19af7 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Fragment/UnzipDialogFragment.java @@ -4,14 +4,18 @@ import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.ColorRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -19,6 +23,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import com.thankvinci.CloudKey.Files.FileUtils; import com.thankvinci.CloudKey.NetUtils.NetHandler; import com.thankvinci.CloudKey.NetUtils.NetThread; import com.thankvinci.CloudKey.R; @@ -26,8 +31,16 @@ import com.thankvinci.CloudKey.Utils.FileHandler; import com.thankvinci.CloudKey.Utils.FileThread; import com.thankvinci.CloudKey.Utils.MyUtils; +import net.lingala.zip4j.exception.ZipException; + +import java.lang.reflect.Field; + public class UnzipDialogFragment extends DialogFragment { + // + AlertDialog alertDialog; + AlertDialog.Builder builder; + Button posi_btn; //点击解压的按钮 //用一个fragment来存当前这个fragment对象 Fragment fragment; //点击压缩文件弹出来的Dialog @@ -37,6 +50,8 @@ public class UnzipDialogFragment extends DialogFragment { //用户勾选是否同意将密码上传到数据库 private CheckBox acceptPWD2SQL; //用于判断密码来源是否是数据库,是的话勾选checkbox也不会进行上传操作 + //加载的圈圈 + private ProgressBar progressBar; private boolean fromSQL; //点击该文字就连接数据库查找密码 private TextView getPWD; @@ -57,7 +72,7 @@ public class UnzipDialogFragment extends DialogFragment { fragment = this; //获取MD5码 Handler handler = new FileHandler(getActivity(),fragment); - Toast.makeText(getActivity(),"正在获取文件MD5码,可能需要花点时间,这取决于您手机的性能",Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(),"正在获取文件MD5码,可能需要花点时间",Toast.LENGTH_SHORT).show(); Thread ft = new Thread(new FileThread(handler,srcFile,desPath,null,FileHandler.FUNCTION_GET_MD5)); ft.start(); } @@ -71,7 +86,7 @@ public class UnzipDialogFragment extends DialogFragment { } public AlertDialog onCreateDialog(Bundle savedInstanceState){ - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = requireActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.unzip_dialog,null); @@ -88,10 +103,20 @@ public class UnzipDialogFragment extends DialogFragment { acceptPWD2SQL = view.findViewById(R.id.accept_pwd_2_sql); getPWD = view.findViewById(R.id.getpwd); + progressBar = view.findViewById(R.id.progress_bar); fromSQL = false; successful = false; - + try { + if(!FileUtils.isEncrypted(srcFile)){ + //当文件不是加密文件时 + TextView text = view.findViewById(R.id.pwd_text); + text.setTextColor(getResources().getColor(R.color.grey)); + setNoPWD(); + } + } catch (ZipException e) { + e.printStackTrace(); + } passwd_edit.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.O) @Override @@ -115,10 +140,13 @@ public class UnzipDialogFragment extends DialogFragment { acceptPWD2SQL.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (acceptPWD2SQL.isChecked()){ - //Toast.makeText(getActivity(),"勾选同意",Toast.LENGTH_SHORT).show(); - }else{ - //Toast.makeText(getActivity(),"取消勾选",Toast.LENGTH_SHORT).show(); + try { + if(!FileUtils.isEncrypted(srcFile)){ + acceptPWD2SQL.setChecked(false); + Toast.makeText(getActivity(),"不可勾选",Toast.LENGTH_SHORT).show(); + } + } catch (ZipException e) { + e.printStackTrace(); } } }); @@ -135,7 +163,7 @@ public class UnzipDialogFragment extends DialogFragment { nt.start(); } }); - +/** builder.setView(view).setTitle("解压到当前路径").setPositiveButton("解压", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -143,18 +171,40 @@ public class UnzipDialogFragment extends DialogFragment { Handler fHandler = new FileHandler(getActivity(),fragment); Thread ft = new Thread(new FileThread(fHandler,srcFile,desPath,passwd,FileHandler.FUNCTION_DECOMPRESS)); ft.start(); - if (acceptPWD2SQL.isChecked() && !fromSQL){ + progressBar.setVisibility(View.VISIBLE); + //listener.onDialogUnzipClicked(); - } - listener.onDialogUnzipClicked(); } - }).setNegativeButton("取消", new DialogInterface.OnClickListener() { + }) + **/ + builder.setView(view).setTitle("解压到当前路径").setPositiveButton("解压",null) + .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Toast.makeText(getActivity(),"取消操作",Toast.LENGTH_SHORT).show(); + //Toast.makeText(getActivity(),"取消操作",Toast.LENGTH_SHORT).show(); } });; - return builder.create(); + alertDialog = builder.create(); + return alertDialog; + } + @Override + public void onStart(){ + super.onStart(); + if (alertDialog != null){ + Button pb = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + pb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(v.getContext(),"正在解压,请稍后",Toast.LENGTH_SHORT).show(); + progressBar.setVisibility(View.VISIBLE); + passwd = passwd_edit.getText().toString(); + Handler fHandler = new FileHandler(getActivity(),fragment); + Thread ft = new Thread(new FileThread(fHandler,srcFile,desPath,passwd,FileHandler.FUNCTION_DECOMPRESS)); + ft.start(); + progressBar.setVisibility(View.VISIBLE); + } + }); + } } public void setFromSQL(boolean fromSQL){ this.fromSQL = fromSQL; @@ -191,4 +241,17 @@ public class UnzipDialogFragment extends DialogFragment { public boolean pwdIsEmpty(){ return "".equals(getPasswd()); } + public void setProgressBar(int vis){ + progressBar.setVisibility(vis); + } + public void setNoPWD(){ + getPWD.setClickable(false); + getPWD.setTextColor(getResources().getColor(R.color.grey)); + passwd_edit.setFocusable(false); + passwd_edit.setHint("非加密文件"); + acceptPWD2SQL.setChecked(false); + } + public Button getPosiBtn(){ + return posi_btn; + } } diff --git a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java index 338e82f..81eca8d 100644 --- a/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java +++ b/CloudKey/app/src/main/java/com/thankvinci/CloudKey/Utils/FileHandler.java @@ -3,6 +3,7 @@ package com.thankvinci.CloudKey.Utils; import android.app.Activity; import android.os.Handler; import android.os.Message; +import android.view.View; import android.widget.Toast; import androidx.fragment.app.Fragment; @@ -31,12 +32,17 @@ public class FileHandler extends Handler { switch (msg.what){ case FUNCTION_GET_MD5: ((UnzipDialogFragment)fragment).setMD5(msg.getData().getString("md5")); + ((UnzipDialogFragment)fragment).setProgressBar(View.INVISIBLE); + Toast.makeText(activity,"MD5码加载完成",Toast.LENGTH_SHORT).show(); break; case ERROR: Toast.makeText(activity,msg.getData().getString("error"),Toast.LENGTH_SHORT).show(); break; case FUNCTION_DECOMPRESS: ((UnzipDialogFragment)fragment).setSuccessful(msg.getData().getBoolean("successful")); + ((UnzipDialogFragment)fragment).setProgressBar(View.INVISIBLE); + ((UnzipDialogFragment)fragment).dismiss(); + Toast.makeText(activity,"解压完成",Toast.LENGTH_SHORT).show(); //当dialog的checkbox为选中时并且密码来源不是数据库时再并且解压成功时再并且密码输入框不为空时,即用户同意输入解压密码解压成功后把密码上传到数据库 if(((UnzipDialogFragment)fragment).getCheck() && !((UnzipDialogFragment)fragment).getFromSQL() && ((UnzipDialogFragment)fragment).getSuccessful() && !((UnzipDialogFragment)fragment).pwdIsEmpty()){ StringBuilder builder = new StringBuilder(); diff --git a/CloudKey/app/src/main/res/layout/filemanage_fragment.xml b/CloudKey/app/src/main/res/layout/filemanage_fragment.xml index ae2c4d9..d5c7bea 100644 --- a/CloudKey/app/src/main/res/layout/filemanage_fragment.xml +++ b/CloudKey/app/src/main/res/layout/filemanage_fragment.xml @@ -5,7 +5,14 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".Fragment.FileManageFragment"> - + - +