X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FLogcatActivity.java;h=c38181a60239d81e190b1274ba8e94422ac73de8;hp=46c0a88a837c86987748dd8938da3cf2589c963f;hb=5d3cafb4a4fbb2bf851d36f973cc1e8b23ecebab;hpb=dc05d774e7b6bc7a1903ecdbacc5b2863e180f4c diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.java index 46c0a88a..c38181a6 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.java @@ -31,7 +31,6 @@ import android.media.MediaScannerConnection; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import android.os.Environment; import android.preference.PreferenceManager; import android.view.Menu; import android.view.MenuItem; @@ -49,9 +48,11 @@ import androidx.fragment.app.DialogFragment; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.google.android.material.snackbar.Snackbar; + import com.stoutner.privacybrowser.R; import com.stoutner.privacybrowser.dialogs.StoragePermissionDialog; import com.stoutner.privacybrowser.dialogs.SaveLogcatDialog; +import com.stoutner.privacybrowser.helpers.FileNameHelper; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -166,7 +167,7 @@ public class LogcatActivity extends AppCompatActivity implements SaveLogcatDialo return true; case R.id.save: - // Get a handle for the save alert dialog. + // Instantiate the save alert dialog. DialogFragment saveDialogFragment = new SaveLogcatDialog(); // Show the save alert dialog. @@ -200,8 +201,14 @@ public class LogcatActivity extends AppCompatActivity implements SaveLogcatDialo @Override public void onSaveLogcat(DialogFragment dialogFragment) { + // Get a handle for the dialog fragment. + Dialog dialog = dialogFragment.getDialog(); + + // Remove the lint warning below that the dialog fragment might be null. + assert dialog != null; + // Get a handle for the file name edit text. - EditText fileNameEditText = dialogFragment.getDialog().findViewById(R.id.file_name_edittext); + EditText fileNameEditText = dialog.findViewById(R.id.file_name_edittext); // Get the file path string. filePathString = fileNameEditText.getText().toString(); @@ -228,12 +235,12 @@ public class LogcatActivity extends AppCompatActivity implements SaveLogcatDialo // Check if the user has previously denied the storage permission. if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // Show a dialog explaining the request first. // Instantiate the storage permission alert dialog. - DialogFragment storagePermissionDialogFragment = new StoragePermissionDialog(); + DialogFragment storagePermissionDialogFragment = StoragePermissionDialog.displayDialog(0); // Show the storage permission alert dialog. The permission will be requested when the dialog is closed. storagePermissionDialogFragment.show(getSupportFragmentManager(), getString(R.string.storage_permission)); } else { // Show the permission request directly. - // Request the storage permission. The logcat will be saved when it finishes. + // Request the write external storage permission. The logcat will be saved when it finishes. ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); } @@ -242,7 +249,7 @@ public class LogcatActivity extends AppCompatActivity implements SaveLogcatDialo } @Override - public void onCloseStoragePermissionDialog() { + public void onCloseStoragePermissionDialog(int type) { // Request the write external storage permission. The logcat will be saved when it finishes. ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); } @@ -312,6 +319,9 @@ public class LogcatActivity extends AppCompatActivity implements SaveLogcatDialo // The activity result is called after browsing for a file in the save alert dialog. @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { + // Run the default commands. + super.onActivityResult(requestCode, resultCode, data); + // Don't do anything if the user pressed back from the file picker. if (resultCode == Activity.RESULT_OK) { // Get a handle for the save dialog fragment. @@ -322,65 +332,25 @@ public class LogcatActivity extends AppCompatActivity implements SaveLogcatDialo // Get a handle for the save dialog. Dialog saveDialog = saveDialogFragment.getDialog(); + // Remove the lint warning below that the save dialog might be null. + assert saveDialog != null; + // Get a handle for the file name edit text. EditText fileNameEditText = saveDialog.findViewById(R.id.file_name_edittext); - // Get the file name URI. - Uri fileNameUri = data.getData(); - - // Remove the incorrect lint warning that the file name URI might be null. - assert fileNameUri != null; - - // Get the raw file name path. - String rawFileNamePath = fileNameUri.getPath(); - - // Remove the incorrect lint warning that the file name path might be null. - assert rawFileNamePath != null; - - // Check to see if the file name Path includes a valid storage location. - if (rawFileNamePath.contains(":")) { // The path is valid. - // Split the path into the initial content uri and the final path information. - String fileNameContentPath = rawFileNamePath.substring(0, rawFileNamePath.indexOf(":")); - String fileNameFinalPath = rawFileNamePath.substring(rawFileNamePath.indexOf(":") + 1); - - // Create the file name path string. - String fileNamePath; - - // Check to see if the current file name final patch is a complete, valid path - if (fileNameFinalPath.startsWith("/storage/emulated/")) { // The existing file name final path is a complete, valid path. - // Use the provided file name path as is. - fileNamePath = fileNameFinalPath; - } else { // The existing file name final path is not a complete, valid path. - // Construct the file name path. - switch (fileNameContentPath) { - // The documents home has a special content path. - case "/document/home": - fileNamePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/" + fileNameFinalPath; - break; - - // Everything else for the primary user should be in `/document/primary`. - case "/document/primary": - fileNamePath = Environment.getExternalStorageDirectory() + "/" + fileNameFinalPath; - break; - - // Just in case, catch everything else and place it in the external storage directory. - default: - fileNamePath = Environment.getExternalStorageDirectory() + "/" + fileNameFinalPath; - break; - } - } + // Instantiate the file name helper. + FileNameHelper fileNameHelper = new FileNameHelper(); - // Set the file name path as the text of the file name edit text. - fileNameEditText.setText(fileNamePath); - } else { // The path is invalid. - // Close the alert dialog. - saveDialog.dismiss(); + // Get the file name URI from the intent. + Uri fileNameUri= data.getData(); - // Get a handle for the logcat text view. - TextView logcatTextView = findViewById(R.id.logcat_textview); + // Process the file name URI if it is not null. + if (fileNameUri != null) { + // Convert the file name URI to a file name path. + String fileNamePath = fileNameHelper.convertUriToFileNamePath(fileNameUri); - // Display a snackbar with the error message. - Snackbar.make(logcatTextView, rawFileNamePath + " " + getString(R.string.invalid_location), Snackbar.LENGTH_INDEFINITE).show(); + // Set the file name path as the text of the file name edit text. + fileNameEditText.setText(fileNamePath); } } }