+ // Check to see if the activity has been restarted.
+ if (savedInstanceState == null) { // The app has not been restarted.
+ // Initially hide the unneeded views.
+ passwordEncryptionTextInputLayout.setVisibility(View.GONE);
+ kitKatPasswordEncryptionTextView.setVisibility(View.GONE);
+ openKeychainRequiredTextView.setVisibility(View.GONE);
+ fileNameLinearLayout.setVisibility(View.GONE);
+ fileDoesNotExistTextView.setVisibility(View.GONE);
+ fileExistsWarningTextView.setVisibility(View.GONE);
+ openKeychainImportInstructionsTextView.setVisibility(View.GONE);
+ importExportButton.setVisibility(View.GONE);
+ } else { // The app has been restarted.
+ // Restore the visibility of the views.
+ passwordEncryptionTextInputLayout.setVisibility(savedInstanceState.getInt(PASSWORD_ENCRYPTED_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));
+ fileDoesNotExistTextView.setVisibility(savedInstanceState.getInt(FILE_DOES_NOT_EXIST_TEXTVIEW_VISIBILITY));
+ fileExistsWarningTextView.setVisibility(savedInstanceState.getInt(FILE_EXISTS_WARNING_TEXTVIEW_VISIBILITY));
+ openKeychainImportInstructionsTextView.setVisibility(savedInstanceState.getInt(OPEN_KEYCHAIN_IMPORT_INSTRUCTIONS_TEXTVIEW_VISIBILITY));
+ importExportButton.setVisibility(savedInstanceState.getInt(IMPORT_EXPORT_BUTTON_VISIBILITY));
+
+ // Restore the text.
+ fileNameEditText.post(() -> fileNameEditText.setText(savedInstanceState.getString(FILE_NAME_TEXT)));
+ importExportButton.setText(savedInstanceState.getString(IMPORT_EXPORT_BUTTON_TEXT));
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState (@NonNull Bundle savedInstanceState) {
+ // Run the default commands.
+ super.onSaveInstanceState(savedInstanceState);
+
+ // Save the visibility of the views.
+ savedInstanceState.putInt(PASSWORD_ENCRYPTED_TEXTINPUTLAYOUT_VISIBILITY, passwordEncryptionTextInputLayout.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());
+ savedInstanceState.putInt(FILE_DOES_NOT_EXIST_TEXTVIEW_VISIBILITY, fileDoesNotExistTextView.getVisibility());
+ savedInstanceState.putInt(FILE_EXISTS_WARNING_TEXTVIEW_VISIBILITY, fileExistsWarningTextView.getVisibility());
+ savedInstanceState.putInt(OPEN_KEYCHAIN_IMPORT_INSTRUCTIONS_TEXTVIEW_VISIBILITY, openKeychainImportInstructionsTextView.getVisibility());
+ savedInstanceState.putInt(IMPORT_EXPORT_BUTTON_VISIBILITY, importExportButton.getVisibility());
+
+ // Save the text.
+ savedInstanceState.putString(FILE_NAME_TEXT, fileNameEditText.getText().toString());
+ savedInstanceState.putString(IMPORT_EXPORT_BUTTON_TEXT, importExportButton.getText().toString());
+ }
+
+ public void onClickRadioButton(View view) {
+ // Get handles for the views.
+ Spinner encryptionSpinner = findViewById(R.id.encryption_spinner);
+ LinearLayout fileNameLinearLayout = findViewById(R.id.file_name_linearlayout);
+ EditText passwordEncryptionEditText = findViewById(R.id.password_encryption_edittext);
+ EditText fileNameEditText = findViewById(R.id.file_name_edittext);
+ TextView fileDoesNotExistTextView = findViewById(R.id.file_does_not_exist_textview);
+ TextView fileExistsWarningTextView = findViewById(R.id.file_exists_warning_textview);
+ TextView openKeychainImportInstructionTextView = findViewById(R.id.openkeychain_import_instructions_textview);
+ Button importExportButton = findViewById(R.id.import_export_button);
+
+ // Get the current file name.
+ String fileNameString = fileNameEditText.getText().toString();
+
+ // Convert the file name string to a file.
+ File file = new File(fileNameString);
+
+ // Check to see if import or export was selected.
+ switch (view.getId()) {
+ case R.id.import_radiobutton:
+ // Check to see if OpenPGP encryption is selected.
+ if (encryptionSpinner.getSelectedItemPosition() == OPENPGP_ENCRYPTION) { // OpenPGP encryption selected.
+ // Show the OpenKeychain import instructions.
+ openKeychainImportInstructionTextView.setVisibility(View.VISIBLE);
+
+ // Set the text on the import/export button to be `Decrypt`.
+ importExportButton.setText(R.string.decrypt);
+ } else { // OpenPGP encryption not selected.
+ // Hide the OpenKeychain import instructions.
+ openKeychainImportInstructionTextView.setVisibility(View.GONE);
+
+ // Set the text on the import/export button to be `Import`.
+ importExportButton.setText(R.string.import_button);
+ }
+
+ // Hide the file exists warning text view.
+ fileExistsWarningTextView.setVisibility(View.GONE);
+
+ // Display the file name views.
+ fileNameLinearLayout.setVisibility(View.VISIBLE);
+ importExportButton.setVisibility(View.VISIBLE);
+
+ // Check to see if the file exists.
+ if (file.exists()) { // The file exists.
+ // Hide the notification that the file does not exist.
+ fileDoesNotExistTextView.setVisibility(View.GONE);
+
+ // Check to see if password encryption is selected.
+ if (encryptionSpinner.getSelectedItemPosition() == PASSWORD_ENCRYPTION) { // Password encryption is selected.
+ // Enable the import button if the encryption password is populated.
+ importExportButton.setEnabled(!passwordEncryptionEditText.getText().toString().isEmpty());
+ } else { // Password encryption is not selected.
+ // Enable the import/decrypt button.
+ importExportButton.setEnabled(true);
+ }
+ } else { // The file does not exist.
+ // Show the notification that the file does not exist.
+ fileDoesNotExistTextView.setVisibility(View.VISIBLE);
+
+ // Disable the import/decrypt button.
+ importExportButton.setEnabled(false);
+ }
+ break;
+
+ case R.id.export_radiobutton:
+ // Hide the OpenKeychain import instructions.
+ openKeychainImportInstructionTextView.setVisibility(View.GONE);
+
+ // Set the text on the import/export button to be `Export`.
+ importExportButton.setText(R.string.export);
+
+ // Show the import/export button.
+ importExportButton.setVisibility(View.VISIBLE);
+
+ // Check to see if OpenPGP encryption is selected.
+ if (encryptionSpinner.getSelectedItemPosition() == OPENPGP_ENCRYPTION) { // OpenPGP encryption is selected.
+ // Hide the file name views.
+ fileNameLinearLayout.setVisibility(View.GONE);
+ fileDoesNotExistTextView.setVisibility(View.GONE);
+ fileExistsWarningTextView.setVisibility(View.GONE);
+
+ // Enable the export button.
+ importExportButton.setEnabled(true);
+ } else { // OpenPGP encryption is not selected.
+ // Show the file name view.
+ fileNameLinearLayout.setVisibility(View.VISIBLE);
+
+ // Hide the notification that the file name does not exist.
+ fileDoesNotExistTextView.setVisibility(View.GONE);
+
+ // Display a warning if the file already exists.
+ if (file.exists()) {
+ fileExistsWarningTextView.setVisibility(View.VISIBLE);
+ } else {
+ fileExistsWarningTextView.setVisibility(View.GONE);
+ }
+
+ // Check the encryption type.
+ if (encryptionSpinner.getSelectedItemPosition() == NO_ENCRYPTION) { // No encryption is selected.
+ // Enable the export button if the file name is populated.
+ importExportButton.setEnabled(!fileNameString.isEmpty());
+ } else { // Password encryption is selected.
+ // Enable the export button if the file name and the password are populated.
+ importExportButton.setEnabled(!fileNameString.isEmpty() && !passwordEncryptionEditText.getText().toString().isEmpty());
+ }
+ }
+ break;