@@ -3,13 +3,16 @@ package com.example.cryptoapp
33import android.app.Activity
44import android.content.Intent
55import android.net.Uri
6+ import android.os.Build
67import androidx.appcompat.app.AppCompatActivity
78import android.os.Bundle
89import android.os.Handler
910import android.os.Message
11+ import android.util.Log
1012import android.view.Menu
1113import android.view.MenuItem
1214import android.view.View
15+ import androidx.annotation.RequiresApi
1316import androidx.core.view.GravityCompat
1417import com.google.android.material.snackbar.Snackbar
1518import kotlinx.android.synthetic.main.activity_file.*
@@ -19,6 +22,7 @@ import kotlinx.android.synthetic.main.activity_file.passwordEditText
1922import kotlinx.android.synthetic.main.activity_main.drawerLayout
2023import kotlinx.android.synthetic.main.activity_main.navView
2124import kotlinx.android.synthetic.main.activity_main.toolbar
25+ import kotlinx.android.synthetic.main.activity_text.*
2226import java.io.*
2327import java.lang.ref.WeakReference
2428import kotlin.concurrent.thread
@@ -90,6 +94,7 @@ class FileActivity : AppCompatActivity(), View.OnClickListener {
9094 decryptButton.setOnClickListener(this )
9195 }
9296
97+ @RequiresApi(Build .VERSION_CODES .O )
9398 override fun onClick (v : View ? ) {
9499 when (v?.id) {
95100 R .id.readFileButton -> {
@@ -141,11 +146,21 @@ class FileActivity : AppCompatActivity(), View.OnClickListener {
141146
142147 }
143148
149+ @RequiresApi(Build .VERSION_CODES .O )
144150 private fun setToFileUri () {
151+ val password = passwordEditText.text.toString()
152+ val readName = readPathEditText.text.toString()
153+ // 通过输入文件名是否包含特殊后缀来判断输出文件名默认值是加密还是解密后的字符串
154+ val outputName = if (readName.contains(" .cf" , ignoreCase = true )) {
155+ fileNameHandle(readName.substring(0 , readName.lastIndexOf(' .' )), password, " DECRYPT" )
156+ } else {
157+ fileNameHandle(readName, password, " ENCRYPT" ) + " .cf"
158+ }
159+
145160 val intent = Intent (Intent .ACTION_CREATE_DOCUMENT )
146161 intent.addCategory(Intent .CATEGORY_OPENABLE )
147162 intent.type = " */*"
148- intent.putExtra(Intent .EXTRA_TITLE ," OutPutName " )
163+ intent.putExtra(Intent .EXTRA_TITLE , outputName )
149164 startActivityForResult(intent, REQUEST_CODE_FOR_CREATE_FILE )
150165 }
151166
@@ -172,6 +187,29 @@ class FileActivity : AppCompatActivity(), View.OnClickListener {
172187 }
173188 }
174189
190+ @RequiresApi(Build .VERSION_CODES .O )
191+ fun fileNameHandle (inputName : String , password : String , option : String ): String {
192+ var outputName = " "
193+ if (option == " ENCRYPT" ) {
194+ outputName = try {
195+ StringCrypto (password).encrypt(inputName)
196+ } catch (e: Exception ) {
197+ Log .d(" Encrypt Error" , " Encrypt input name exception!" )
198+ " EncryptNameError"
199+ }
200+ } else if (option == " DECRYPT" ){
201+ outputName = try {
202+ StringCrypto (password).decrypt(inputName)
203+ } catch (e: Exception ) {
204+ Log .d(" Decrypt Error" , " Decrypt input name exception!" )
205+ " DecryptNameError"
206+ }
207+ } else {
208+ outputName = " "
209+ }
210+ return outputName
211+ }
212+
175213 private fun fileHandle (uri : Uri , option : String ): Boolean {
176214 val inputFileResolver = contentResolver.openFileDescriptor(uri, " r" )
177215 val outputFileResolver = contentResolver.openFileDescriptor(toFileUri!! , " w" )
0 commit comments