mirror of
https://github.com/android-password-store/Android-Password-Store
synced 2025-09-01 14:55:19 +00:00
Fix directory selection in onboarding if storage permissions are granted (#1090)
* OnboardingActivity: fix directory change option Add an else clause to cover the case when storage permission is granted already Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * all: rename permission grant method The new name is a bit more explicit about its purpose Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * UserPreference: add static method for external directory selection intent Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
@@ -21,7 +21,7 @@ import com.zeapo.pwdstore.git.BaseGitActivity
|
|||||||
import com.zeapo.pwdstore.git.GitServerConfigActivity
|
import com.zeapo.pwdstore.git.GitServerConfigActivity
|
||||||
import com.zeapo.pwdstore.utils.PasswordRepository
|
import com.zeapo.pwdstore.utils.PasswordRepository
|
||||||
import com.zeapo.pwdstore.utils.PreferenceKeys
|
import com.zeapo.pwdstore.utils.PreferenceKeys
|
||||||
import com.zeapo.pwdstore.utils.checkRuntimePermission
|
import com.zeapo.pwdstore.utils.isPermissionGranted
|
||||||
import com.zeapo.pwdstore.utils.getString
|
import com.zeapo.pwdstore.utils.getString
|
||||||
import com.zeapo.pwdstore.utils.listFilesRecursively
|
import com.zeapo.pwdstore.utils.listFilesRecursively
|
||||||
import com.zeapo.pwdstore.utils.sharedPrefs
|
import com.zeapo.pwdstore.utils.sharedPrefs
|
||||||
@@ -116,12 +116,10 @@ class OnboardingActivity : AppCompatActivity() {
|
|||||||
settings.edit { putBoolean(PreferenceKeys.GIT_EXTERNAL, true) }
|
settings.edit { putBoolean(PreferenceKeys.GIT_EXTERNAL, true) }
|
||||||
val externalRepo = settings.getString(PreferenceKeys.GIT_EXTERNAL_REPO)
|
val externalRepo = settings.getString(PreferenceKeys.GIT_EXTERNAL_REPO)
|
||||||
if (externalRepo == null) {
|
if (externalRepo == null) {
|
||||||
if (!checkRuntimePermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
if (!isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
registerForActivityResult(RequestPermission()) { granted ->
|
registerForActivityResult(RequestPermission()) { granted ->
|
||||||
if (granted) {
|
if (granted) {
|
||||||
externalDirectorySelectAction.launch(Intent(this, UserPreference::class.java).apply {
|
externalDirectorySelectAction.launch(UserPreference.createDirectorySelectionIntent(this))
|
||||||
putExtra("operation", "git_external")
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
}.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
}
|
}
|
||||||
@@ -130,7 +128,7 @@ class OnboardingActivity : AppCompatActivity() {
|
|||||||
.setTitle(resources.getString(R.string.directory_selected_title))
|
.setTitle(resources.getString(R.string.directory_selected_title))
|
||||||
.setMessage(resources.getString(R.string.directory_selected_message, externalRepo))
|
.setMessage(resources.getString(R.string.directory_selected_message, externalRepo))
|
||||||
.setPositiveButton(resources.getString(R.string.use)) { _, _ ->
|
.setPositiveButton(resources.getString(R.string.use)) { _, _ ->
|
||||||
if (!checkRuntimePermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
if (!isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
registerForActivityResult(RequestPermission()) { granted ->
|
registerForActivityResult(RequestPermission()) { granted ->
|
||||||
if (granted) {
|
if (granted) {
|
||||||
initializeRepositoryInfo()
|
initializeRepositoryInfo()
|
||||||
@@ -141,14 +139,14 @@ class OnboardingActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.setNegativeButton(resources.getString(R.string.change)) { _, _ ->
|
.setNegativeButton(resources.getString(R.string.change)) { _, _ ->
|
||||||
if (!checkRuntimePermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
if (!isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
registerForActivityResult(RequestPermission()) { granted ->
|
registerForActivityResult(RequestPermission()) { granted ->
|
||||||
if (granted) {
|
if (granted) {
|
||||||
repositoryInitAction.launch(Intent(this, UserPreference::class.java).apply {
|
repositoryInitAction.launch(UserPreference.createDirectorySelectionIntent(this))
|
||||||
putExtra("operation", "git_external")
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
}.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
|
} else {
|
||||||
|
repositoryInitAction.launch(UserPreference.createDirectorySelectionIntent(this))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.show()
|
.show()
|
||||||
@@ -198,7 +196,7 @@ class OnboardingActivity : AppCompatActivity() {
|
|||||||
private fun initializeRepositoryInfo() {
|
private fun initializeRepositoryInfo() {
|
||||||
val externalRepo = settings.getBoolean(PreferenceKeys.GIT_EXTERNAL, false)
|
val externalRepo = settings.getBoolean(PreferenceKeys.GIT_EXTERNAL, false)
|
||||||
val externalRepoPath = settings.getString(PreferenceKeys.GIT_EXTERNAL_REPO)
|
val externalRepoPath = settings.getString(PreferenceKeys.GIT_EXTERNAL_REPO)
|
||||||
if (externalRepo && !checkRuntimePermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
if (externalRepo && !isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (externalRepo && externalRepoPath != null) {
|
if (externalRepo && externalRepoPath != null) {
|
||||||
|
@@ -60,7 +60,7 @@ import com.zeapo.pwdstore.utils.PasswordRepository.Companion.initialize
|
|||||||
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.isInitialized
|
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.isInitialized
|
||||||
import com.zeapo.pwdstore.utils.PreferenceKeys
|
import com.zeapo.pwdstore.utils.PreferenceKeys
|
||||||
import com.zeapo.pwdstore.utils.base64
|
import com.zeapo.pwdstore.utils.base64
|
||||||
import com.zeapo.pwdstore.utils.checkRuntimePermission
|
import com.zeapo.pwdstore.utils.isPermissionGranted
|
||||||
import com.zeapo.pwdstore.utils.commitChange
|
import com.zeapo.pwdstore.utils.commitChange
|
||||||
import com.zeapo.pwdstore.utils.contains
|
import com.zeapo.pwdstore.utils.contains
|
||||||
import com.zeapo.pwdstore.utils.getString
|
import com.zeapo.pwdstore.utils.getString
|
||||||
@@ -115,7 +115,7 @@ class PasswordStore : BaseGitActivity() {
|
|||||||
// prevent attempt to create password list fragment
|
// prevent attempt to create password list fragment
|
||||||
var savedInstance = savedInstanceState
|
var savedInstance = savedInstanceState
|
||||||
if (savedInstanceState != null && (!settings.getBoolean(PreferenceKeys.GIT_EXTERNAL, false) ||
|
if (savedInstanceState != null && (!settings.getBoolean(PreferenceKeys.GIT_EXTERNAL, false) ||
|
||||||
!checkRuntimePermission(Manifest.permission.WRITE_EXTERNAL_STORAGE))) {
|
!isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE))) {
|
||||||
savedInstance = null
|
savedInstance = null
|
||||||
}
|
}
|
||||||
super.onCreate(savedInstance)
|
super.onCreate(savedInstance)
|
||||||
@@ -324,7 +324,7 @@ class PasswordStore : BaseGitActivity() {
|
|||||||
* is true if the permission has been granted.
|
* is true if the permission has been granted.
|
||||||
*/
|
*/
|
||||||
private fun hasRequiredStoragePermissions(): Boolean {
|
private fun hasRequiredStoragePermissions(): Boolean {
|
||||||
return if (!checkRuntimePermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
return if (!isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
Snackbar.make(
|
Snackbar.make(
|
||||||
findViewById(R.id.main_layout),
|
findViewById(R.id.main_layout),
|
||||||
getString(R.string.access_sdcard_text),
|
getString(R.string.access_sdcard_text),
|
||||||
@@ -348,13 +348,11 @@ class PasswordStore : BaseGitActivity() {
|
|||||||
private fun checkLocalRepository() {
|
private fun checkLocalRepository() {
|
||||||
val repo = initialize()
|
val repo = initialize()
|
||||||
if (repo == null) {
|
if (repo == null) {
|
||||||
val intent = Intent(activity, UserPreference::class.java)
|
|
||||||
intent.putExtra("operation", "git_external")
|
|
||||||
registerForActivityResult(StartActivityForResult()) { result ->
|
registerForActivityResult(StartActivityForResult()) { result ->
|
||||||
if (result.resultCode == RESULT_OK) {
|
if (result.resultCode == RESULT_OK) {
|
||||||
checkLocalRepository()
|
checkLocalRepository()
|
||||||
}
|
}
|
||||||
}.launch(intent)
|
}.launch(UserPreference.createDirectorySelectionIntent(this))
|
||||||
} else {
|
} else {
|
||||||
checkLocalRepository(getRepositoryDirectory())
|
checkLocalRepository(getRepositoryDirectory())
|
||||||
}
|
}
|
||||||
|
@@ -678,6 +678,12 @@ class UserPreference : AppCompatActivity() {
|
|||||||
|
|
||||||
private const val TAG = "UserPreference"
|
private const val TAG = "UserPreference"
|
||||||
|
|
||||||
|
fun createDirectorySelectionIntent(context: Context): Intent {
|
||||||
|
return Intent(context, UserPreference::class.java).run {
|
||||||
|
putExtra("operation", "git_external")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set custom dictionary summary
|
* Set custom dictionary summary
|
||||||
*/
|
*/
|
||||||
|
@@ -135,7 +135,7 @@ suspend fun FragmentActivity.commitChange(
|
|||||||
}.execute()
|
}.execute()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FragmentActivity.checkRuntimePermission(permission: String): Boolean {
|
fun FragmentActivity.isPermissionGranted(permission: String): Boolean {
|
||||||
return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
|
return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user