X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FImportExportActivity.java;h=4c48b42631d560c606e53e655861b028a27d0532;hp=c1b3891d3fe248fdcbd951ed80b78f0cd0fad494;hb=59c4102ba387c8a4104923eba9c90124c3e9e481;hpb=ab11ca2de00c56982e46627c8e7fc670462b0b3c diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.java index c1b3891d..4c48b426 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.java @@ -1,20 +1,20 @@ /* - * Copyright © 2018-2021 Soren Stoutner . + * Copyright 2018-2022 Soren Stoutner . * - * This file is part of Privacy Browser . + * This file is part of Privacy Browser Android . * - * Privacy Browser is free software: you can redistribute it and/or modify + * Privacy Browser Android is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Privacy Browser is distributed in the hope that it will be useful, + * Privacy Browser Android is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with Privacy Browser. If not, see . + * along with Privacy Browser Android. If not, see . */ package com.stoutner.privacybrowser.activities; @@ -84,7 +84,6 @@ public class ImportExportActivity extends AppCompatActivity { // Define the saved instance state constants. private final String ENCRYPTION_PASSWORD_TEXTINPUTLAYOUT_VISIBILITY = "encryption_password_textinputlayout_visibility"; - private final String KITKAT_PASSWORD_ENCRYPTED_TEXTVIEW_VISIBILITY = "kitkat_password_encrypted_textview_visibility"; private final String OPEN_KEYCHAIN_REQUIRED_TEXTVIEW_VISIBILITY = "open_keychain_required_textview_visibility"; private final String FILE_LOCATION_CARD_VIEW = "file_location_card_view"; private final String FILE_NAME_LINEARLAYOUT_VISIBILITY = "file_name_linearlayout_visibility"; @@ -97,7 +96,6 @@ public class ImportExportActivity extends AppCompatActivity { Spinner encryptionSpinner; TextInputLayout encryptionPasswordTextInputLayout; EditText encryptionPasswordEditText; - TextView kitKatPasswordEncryptionTextView; TextView openKeychainRequiredTextView; CardView fileLocationCardView; RadioButton importRadioButton; @@ -107,6 +105,7 @@ public class ImportExportActivity extends AppCompatActivity { Button importExportButton; // Define the class variables. + private File fileProviderDirectory; private boolean openKeychainInstalled; private File temporaryPgpEncryptedImportFile; private File temporaryPreEncryptedExportFile; @@ -125,9 +124,6 @@ public class ImportExportActivity extends AppCompatActivity { getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); } - // Set the theme. - setTheme(R.style.PrivacyBrowser); - // Run the default commands. super.onCreate(savedInstanceState); @@ -190,7 +186,6 @@ public class ImportExportActivity extends AppCompatActivity { case NO_ENCRYPTION: // Hide the unneeded layout items. encryptionPasswordTextInputLayout.setVisibility(View.GONE); - kitKatPasswordEncryptionTextView.setVisibility(View.GONE); openKeychainRequiredTextView.setVisibility(View.GONE); openKeychainImportInstructionsTextView.setVisibility(View.GONE); @@ -239,7 +234,6 @@ public class ImportExportActivity extends AppCompatActivity { case OPENPGP_ENCRYPTION: // Hide the password encryption layout items. encryptionPasswordTextInputLayout.setVisibility(View.GONE); - kitKatPasswordEncryptionTextView.setVisibility(View.GONE); // Updated items based on the installation status of OpenKeychain. if (openKeychainInstalled) { // OpenKeychain is installed. @@ -329,7 +323,6 @@ public class ImportExportActivity extends AppCompatActivity { if (savedInstanceState == null) { // The app has not been restarted. // Initially hide the unneeded views. encryptionPasswordTextInputLayout.setVisibility(View.GONE); - kitKatPasswordEncryptionTextView.setVisibility(View.GONE); openKeychainRequiredTextView.setVisibility(View.GONE); fileNameLinearLayout.setVisibility(View.GONE); openKeychainImportInstructionsTextView.setVisibility(View.GONE); @@ -337,7 +330,6 @@ public class ImportExportActivity extends AppCompatActivity { } else { // The app has been restarted. // Restore the visibility of the views. encryptionPasswordTextInputLayout.setVisibility(savedInstanceState.getInt(ENCRYPTION_PASSWORD_TEXTINPUTLAYOUT_VISIBILITY)); - kitKatPasswordEncryptionTextView.setVisibility(savedInstanceState.getInt(KITKAT_PASSWORD_ENCRYPTED_TEXTVIEW_VISIBILITY)); openKeychainRequiredTextView.setVisibility(savedInstanceState.getInt(OPEN_KEYCHAIN_REQUIRED_TEXTVIEW_VISIBILITY)); fileLocationCardView.setVisibility(savedInstanceState.getInt(FILE_LOCATION_CARD_VIEW)); fileNameLinearLayout.setVisibility(savedInstanceState.getInt(FILE_NAME_LINEARLAYOUT_VISIBILITY)); @@ -357,7 +349,6 @@ public class ImportExportActivity extends AppCompatActivity { // Save the visibility of the views. savedInstanceState.putInt(ENCRYPTION_PASSWORD_TEXTINPUTLAYOUT_VISIBILITY, encryptionPasswordTextInputLayout.getVisibility()); - savedInstanceState.putInt(KITKAT_PASSWORD_ENCRYPTED_TEXTVIEW_VISIBILITY, kitKatPasswordEncryptionTextView.getVisibility()); savedInstanceState.putInt(OPEN_KEYCHAIN_REQUIRED_TEXTVIEW_VISIBILITY, openKeychainRequiredTextView.getVisibility()); savedInstanceState.putInt(FILE_LOCATION_CARD_VIEW, fileLocationCardView.getVisibility()); savedInstanceState.putInt(FILE_NAME_LINEARLAYOUT_VISIBILITY, fileNameLinearLayout.getVisibility()); @@ -509,6 +500,13 @@ public class ImportExportActivity extends AppCompatActivity { //noinspection ResultOfMethodCallIgnored temporaryPgpEncryptedImportFile.delete(); } + + // Delete the file provider directory if it exists. + if (fileProviderDirectory.exists()) { + //noinspection ResultOfMethodCallIgnored + fileProviderDirectory.delete(); + } + break; case OPENPGP_EXPORT_RESULT_CODE: @@ -517,6 +515,13 @@ public class ImportExportActivity extends AppCompatActivity { //noinspection ResultOfMethodCallIgnored temporaryPreEncryptedExportFile.delete(); } + + // Delete the file provider directory if it exists. + if (fileProviderDirectory.exists()) { + //noinspection ResultOfMethodCallIgnored + fileProviderDirectory.delete(); + } + break; } } @@ -538,6 +543,7 @@ public class ImportExportActivity extends AppCompatActivity { case NO_ENCRYPTION: try { // Get an input stream for the file name. + // A file may be opened directly once the minimum API >= 29. InputStream inputStream = getContentResolver().openInputStream(Uri.parse(fileNameString)); // Import the unencrypted file. @@ -666,8 +672,15 @@ public class ImportExportActivity extends AppCompatActivity { case OPENPGP_ENCRYPTION: try { + // Get a handle for the file provider directory. + fileProviderDirectory = new File(getApplicationContext().getCacheDir() + "/" + getString(R.string.file_provider_directory)); + + // Create the file provider directory. Any errors will be handled by the catch statement below. + //noinspection ResultOfMethodCallIgnored + fileProviderDirectory.mkdir(); + // Set the temporary PGP encrypted import file. - temporaryPgpEncryptedImportFile = File.createTempFile("temporary_pgp_encrypted_import_file", null, getApplicationContext().getCacheDir()); + temporaryPgpEncryptedImportFile = File.createTempFile("temporary_pgp_encrypted_import_file", null, fileProviderDirectory); // Create a temporary PGP encrypted import file output stream. FileOutputStream temporaryPgpEncryptedImportFileOutputStream = new FileOutputStream(temporaryPgpEncryptedImportFile); @@ -731,6 +744,7 @@ public class ImportExportActivity extends AppCompatActivity { try { // Get the export file output stream. + // A file may be opened directly once the minimum API >= 29. OutputStream exportFileOutputStream = getContentResolver().openOutputStream(Uri.parse(noEncryptionFileNameString)); // Export the unencrypted file. @@ -866,8 +880,15 @@ public class ImportExportActivity extends AppCompatActivity { case OPENPGP_ENCRYPTION: try { + // Get a handle for the file provider directory. + fileProviderDirectory = new File(getApplicationContext().getCacheDir() + "/" + getString(R.string.file_provider_directory)); + + // Create the file provider directory. Any errors will be handled by the catch statement below. + //noinspection ResultOfMethodCallIgnored + fileProviderDirectory.mkdir(); + // Set the temporary pre-encrypted export file. - temporaryPreEncryptedExportFile = new File(getApplicationContext().getCacheDir() + "/" + getString(R.string.settings) + " " + BuildConfig.VERSION_NAME + ".pbs"); + temporaryPreEncryptedExportFile = new File(fileProviderDirectory + "/" + getString(R.string.settings) + " " + BuildConfig.VERSION_NAME + ".pbs"); // Delete the temporary pre-encrypted export file if it already exists. if (temporaryPreEncryptedExportFile.exists()) { @@ -940,4 +961,4 @@ public class ImportExportActivity extends AppCompatActivity { // Restart Privacy Browser after 150 milliseconds to allow enough time for the preferences to be saved. restartHandler.postDelayed(restartRunnable, 150); } -} \ No newline at end of file +}