diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index c929a3c0..3a0f36a0 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -70,8 +70,6 @@ public class MainActivity extends AppCompatActivity { private static int bluetoothStatusIcon = R.drawable.ic_bluetooth_disabled; private static MenuItem bluetoothStatus; - private boolean permGrantedCoarseLocation; - private Fragment currentFragment; private DrawerLayout drawerLayout; private Toolbar toolbar; @@ -96,7 +94,6 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); currentFragment = null; - permGrantedCoarseLocation = false; // Set a Toolbar to replace the ActionBar. toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -387,6 +384,8 @@ public class MainActivity extends AppCompatActivity { String deviceName = prefs.getString("btDeviceName", "-"); + boolean permGrantedCoarseLocation = false; + // Check if Bluetooth 4.x is available if (deviceName != "openScale_MCU") { permGrantedCoarseLocation = PermissionHelper.requestBluetoothPermission(this, false); @@ -407,9 +406,6 @@ public class MainActivity extends AppCompatActivity { if (!OpenScale.getInstance(getApplicationContext()).startSearchingForBluetooth(deviceName, callbackBtHandler)) { Toast.makeText(getApplicationContext(), deviceName + " " + getResources().getString(R.string.label_bt_device_no_support), Toast.LENGTH_SHORT).show(); } - } else { - setBluetoothStatusIcon(R.drawable.ic_bluetooth_disabled); - Toast.makeText(getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } } @@ -467,15 +463,17 @@ public class MainActivity extends AppCompatActivity { @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: { + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - permGrantedCoarseLocation = true; + invokeSearchBluetoothDevice(); } else { - permGrantedCoarseLocation = false; + setBluetoothStatusIcon(R.drawable.ic_bluetooth_disabled); + Toast.makeText(getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } - return; - } + break; } + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java index 434d9d5f..493771de 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/fragments/TableFragment.java @@ -87,9 +87,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private SharedPreferences prefs; private LinearLayout subpageView; - private boolean permGrantedReadAccess; - private boolean permGrantedWriteAccess; - private ArrayList measurementsList; private int selectedSubpageNr; @@ -143,9 +140,6 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { selectedSubpageNr = savedInstanceState.getInt(SELECTED_SUBPAGE_NR_KEY); } - permGrantedReadAccess = false; - permGrantedWriteAccess = false; - OpenScale.getInstance(getContext()).registerFragment(this); return tableView; @@ -297,115 +291,50 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { private class onClickListenerImport implements View.OnClickListener { @Override public void onClick(View v) { - - permGrantedReadAccess = PermissionHelper.requestReadPermission(getActivity()); - - if (!permGrantedReadAccess) { - Toast.makeText(getContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); - return; + if (PermissionHelper.requestReadPermission(getActivity())) { + importTable(); } - - int selectedUserId = OpenScale.getInstance(getContext()).getSelectedScaleUserId(); - - if (selectedUserId == -1) - { - AlertDialog.Builder infoDialog = new AlertDialog.Builder(v.getContext()); - - infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user)); - - infoDialog.setPositiveButton(getResources().getString(R.string.label_ok), null); - - infoDialog.show(); - } - else - { - AlertDialog.Builder filenameDialog = new AlertDialog.Builder(getActivity()); - - filenameDialog.setTitle(getResources().getString(R.string.info_set_filename) + " /sdcard ..."); - - String exportFilename = prefs.getString("exportFilename", "/openScale_data_" + OpenScale.getInstance(getContext()).getSelectedScaleUser().getUserName() + ".csv"); - - final EditText txtFilename = new EditText(tableView.getContext()); - txtFilename.setText(exportFilename); - - filenameDialog.setView(txtFilename); - - filenameDialog.setPositiveButton(getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - OpenScale.getInstance(getContext()).importData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString()); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); - prefs.edit().putString("exportFilename", txtFilename.getText().toString()).commit(); - updateOnView(OpenScale.getInstance(getContext()).getScaleMeasurementList()); - } - }); - - filenameDialog.setNegativeButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - } - }); - - - filenameDialog.show(); - } } } - private class onClickListenerExport implements View.OnClickListener { - @Override - public void onClick(View v) { + private void importTable() { + int selectedUserId = OpenScale.getInstance(getContext()).getSelectedScaleUserId(); - permGrantedWriteAccess = PermissionHelper.requestWritePermission(getActivity()); + if (selectedUserId == -1) + { + AlertDialog.Builder infoDialog = new AlertDialog.Builder(getContext()); - if (!permGrantedWriteAccess) { - Toast.makeText(getContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); - return; - } + infoDialog.setMessage(getResources().getString(R.string.info_no_selected_user)); + infoDialog.setPositiveButton(getResources().getString(R.string.label_ok), null); + + infoDialog.show(); + } + else + { AlertDialog.Builder filenameDialog = new AlertDialog.Builder(getActivity()); - filenameDialog.setTitle(getResources().getString(R.string.info_set_filename) + " " + Environment.getExternalStorageDirectory().getPath()); + filenameDialog.setTitle(getResources().getString(R.string.info_set_filename) + " /sdcard ..."); - final ScaleUser selectedScaleUser = OpenScale.getInstance(getContext()).getSelectedScaleUser(); - String exportFilename = prefs.getString("exportFilename" + selectedScaleUser.getId(), "openScale_data_" + selectedScaleUser.getUserName() + ".csv"); + String exportFilename = prefs.getString("exportFilename", "/openScale_data_" + OpenScale.getInstance(getContext()).getSelectedScaleUser().getUserName() + ".csv"); final EditText txtFilename = new EditText(tableView.getContext()); txtFilename.setText(exportFilename); filenameDialog.setView(txtFilename); - filenameDialog.setPositiveButton(getResources().getString(R.string.label_export), new DialogInterface.OnClickListener() { + filenameDialog.setPositiveButton(getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - String fullPath = Environment.getExternalStorageDirectory().getPath() + "/" + txtFilename.getText().toString(); - - if (OpenScale.getInstance(getContext()).exportData(fullPath)) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); - prefs.edit().putString("exportFilename" + selectedScaleUser.getId(), txtFilename.getText().toString()).commit(); - Toast.makeText(getContext(), getResources().getString(R.string.info_data_exported) + " " + fullPath, Toast.LENGTH_SHORT).show(); - } + OpenScale.getInstance(getContext()).importData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString()); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); + prefs.edit().putString("exportFilename", txtFilename.getText().toString()).commit(); + updateOnView(OpenScale.getInstance(getContext()).getScaleMeasurementList()); } }); - filenameDialog.setNeutralButton(getResources().getString(R.string.label_share), new DialogInterface.OnClickListener() { + filenameDialog.setNegativeButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - String fullPath = Environment.getExternalStorageDirectory().getPath() + "/tmp/" + txtFilename.getText().toString(); - - if (!OpenScale.getInstance(getContext()).exportData(fullPath)) { - return; - } - - Intent intentShareFile = new Intent(Intent.ACTION_SEND); - File shareFile = new File(fullPath); - - if(shareFile.exists()) { - intentShareFile.setType("text/comma-separated-values"); - intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+fullPath)); - - intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "openScale export csv file"); - intentShareFile.putExtra(Intent.EXTRA_TEXT, txtFilename.getText().toString()); - - startActivity(Intent.createChooser(intentShareFile, getResources().getString(R.string.label_share))); - } + dialog.dismiss(); } }); @@ -414,26 +343,87 @@ public class TableFragment extends Fragment implements FragmentUpdateListener { } } + private class onClickListenerExport implements View.OnClickListener { + @Override + public void onClick(View v) { + if (PermissionHelper.requestWritePermission(getActivity())) { + exportTable(); + } + } + } + + private void exportTable() { + AlertDialog.Builder filenameDialog = new AlertDialog.Builder(getActivity()); + + filenameDialog.setTitle(getResources().getString(R.string.info_set_filename) + " " + Environment.getExternalStorageDirectory().getPath()); + + final ScaleUser selectedScaleUser = OpenScale.getInstance(getContext()).getSelectedScaleUser(); + String exportFilename = prefs.getString("exportFilename" + selectedScaleUser.getId(), "openScale_data_" + selectedScaleUser.getUserName() + ".csv"); + + final EditText txtFilename = new EditText(tableView.getContext()); + txtFilename.setText(exportFilename); + + filenameDialog.setView(txtFilename); + + filenameDialog.setPositiveButton(getResources().getString(R.string.label_export), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + String fullPath = Environment.getExternalStorageDirectory().getPath() + "/" + txtFilename.getText().toString(); + + if (OpenScale.getInstance(getContext()).exportData(fullPath)) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(tableView.getContext()); + prefs.edit().putString("exportFilename" + selectedScaleUser.getId(), txtFilename.getText().toString()).commit(); + Toast.makeText(getContext(), getResources().getString(R.string.info_data_exported) + " " + fullPath, Toast.LENGTH_SHORT).show(); + } + } + }); + + filenameDialog.setNeutralButton(getResources().getString(R.string.label_share), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + String fullPath = Environment.getExternalStorageDirectory().getPath() + "/tmp/" + txtFilename.getText().toString(); + + if (!OpenScale.getInstance(getContext()).exportData(fullPath)) { + return; + } + + Intent intentShareFile = new Intent(Intent.ACTION_SEND); + File shareFile = new File(fullPath); + + if(shareFile.exists()) { + intentShareFile.setType("text/comma-separated-values"); + intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+fullPath)); + + intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "openScale export csv file"); + intentShareFile.putExtra(Intent.EXTRA_TEXT, txtFilename.getText().toString()); + + startActivity(Intent.createChooser(intentShareFile, getResources().getString(R.string.label_share))); + } + } + }); + + + filenameDialog.show(); + } + @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: { + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - permGrantedReadAccess = true; + importTable(); } else { - permGrantedReadAccess = false; + Toast.makeText(getContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } - return; - } - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: { + break; + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - permGrantedWriteAccess = true; + exportTable(); } else { - permGrantedWriteAccess = false; + Toast.makeText(getContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } - return; - } + break; } + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); } private class onClickListenerMoveSubpageLeft implements View.OnClickListener { diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java index 94e54b87..a9166538 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BackupPreferences.java @@ -45,9 +45,6 @@ public class BackupPreferences extends PreferenceFragment { private static final String PREFERENCE_KEY_IMPORT_BACKUP = "importBackup"; private static final String PREFERENCE_KEY_EXPORT_BACKUP = "exportBackup"; - private boolean permGrantedReadAccess; - private boolean permGrantedWriteAccess; - private Preference importBackup; private Preference exportBackup; @@ -63,9 +60,6 @@ public class BackupPreferences extends PreferenceFragment { exportBackup = (Preference) findPreference(PREFERENCE_KEY_EXPORT_BACKUP); exportBackup.setOnPreferenceClickListener(new onClickListenerExportBackup()); - permGrantedReadAccess = false; - permGrantedWriteAccess = false; - initSummary(getPreferenceScreen()); } @@ -122,18 +116,8 @@ public class BackupPreferences extends PreferenceFragment { private class onClickListenerImportBackup implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { - File exportDir = new File(Environment.getExternalStorageDirectory(), PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("exportDir", "openScale Backup")); - - importBackup("openScale.db", exportDir); - - OpenScale openScale = OpenScale.getInstance(getActivity().getApplicationContext()); - openScale.reopenDatabase(); - - List scaleUserList = openScale.getScaleUserList(); - - if (!scaleUserList.isEmpty()) { - openScale.selectScaleUser(scaleUserList.get(0).getId()); - openScale.updateScaleData(); + if (PermissionHelper.requestReadPermission(getActivity())) { + importBackup(); } return true; @@ -143,21 +127,18 @@ public class BackupPreferences extends PreferenceFragment { private class onClickListenerExportBackup implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { - File exportDir = new File(Environment.getExternalStorageDirectory(), PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("exportDir", "openScale Backup")); - - exportBackup("openScale.db", exportDir); + if (PermissionHelper.requestWritePermission(getActivity())) { + exportBackup(); + } return true; } } - private boolean importBackup(String databaseName, File exportDir) { - permGrantedReadAccess = PermissionHelper.requestReadPermission(getActivity()); + private boolean importBackup() { + File exportDir = new File(Environment.getExternalStorageDirectory(), PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("exportDir", "openScale Backup")); - if (!permGrantedReadAccess) { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); - return false; - } + String databaseName = "openScale.db"; if (!isExternalStoragePresent()) return false; @@ -179,16 +160,23 @@ public class BackupPreferences extends PreferenceFragment { return false; } + OpenScale openScale = OpenScale.getInstance(getActivity().getApplicationContext()); + openScale.reopenDatabase(); + + List scaleUserList = openScale.getScaleUserList(); + + if (!scaleUserList.isEmpty()) { + openScale.selectScaleUser(scaleUserList.get(0).getId()); + openScale.updateScaleData(); + } + return true; } - private boolean exportBackup(String databaseName, File exportDir) { - permGrantedWriteAccess = PermissionHelper.requestWritePermission(getActivity()); + private boolean exportBackup() { + File exportDir = new File(Environment.getExternalStorageDirectory(), PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("exportDir", "openScale Backup")); - if (!permGrantedWriteAccess) { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); - return false; - } + String databaseName = "openScale.db"; if (!isExternalStoragePresent()) return false; @@ -233,22 +221,22 @@ public class BackupPreferences extends PreferenceFragment { @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: { + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_READ_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - permGrantedReadAccess = true; + importBackup(); } else { - permGrantedReadAccess = false; + Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } - return; - } - case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: { + break; + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - permGrantedWriteAccess = true; + exportBackup(); } else { - permGrantedWriteAccess = false; + Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } - return; - } + break; } + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java index 3528e8cb..26acfa8b 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java @@ -51,8 +51,6 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr private static final String PREFERENCE_KEY_BLUETOOTH_IGNOREOUTOFRANGE = "ignoreOutOfRange"; private static final String PREFERENCE_KEY_BLUETOOTH_SCANNER = "btScanner"; - private boolean permGrantedCoarseLocation; - private CheckBoxPreference smartAssignEnable; private CheckBoxPreference ignoreOutOfRangeEnable; private PreferenceScreen btScanner; @@ -136,8 +134,6 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - permGrantedCoarseLocation = false; - btAdapter = BluetoothAdapter.getDefaultAdapter(); addPreferencesFromResource(R.xml.bluetooth_preferences); @@ -226,14 +222,9 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr private class onClickListenerScannerSelect implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { - permGrantedCoarseLocation = PermissionHelper.requestBluetoothPermission(getActivity(), true); - - if (permGrantedCoarseLocation) { + if (PermissionHelper.requestBluetoothPermission(getActivity(), true)) { startSearching(); - } else { - Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); - } - + } return true; } } @@ -259,9 +250,9 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr switch (requestCode) { case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - permGrantedCoarseLocation = true; + startSearching(); } else { - permGrantedCoarseLocation = false; + Toast.makeText(getActivity().getApplicationContext(), getResources().getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show(); } return; } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java b/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java index 052fe278..54aabb5e 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java @@ -25,7 +25,6 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; import android.widget.Toast; import com.health.openscale.R; @@ -56,7 +55,7 @@ public class PermissionHelper { } } - if (ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage(R.string.permission_bluetooth_info) @@ -79,7 +78,7 @@ public class PermissionHelper { } public static boolean requestReadPermission(final Activity activity) { - if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_READ_STORAGE); } else { return true; @@ -89,7 +88,7 @@ public class PermissionHelper { } public static boolean requestWritePermission(final Activity activity) { - if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE); } else { return true;