forked from hardcoresushi/DroidFS
Open default volume on application startup
This commit is contained in:
parent
1d13dfbde3
commit
c521c7f998
@ -33,15 +33,21 @@ import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
|
||||
import sushi.hardcore.droidfs.widgets.EditTextDialog
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import kotlin.NoSuchElementException
|
||||
|
||||
class MainActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
const val DEFAULT_VOLUME_KEY = "default_volume"
|
||||
}
|
||||
|
||||
private lateinit var binding: ActivityMainBinding
|
||||
private lateinit var volumeDatabase: VolumeDatabase
|
||||
private lateinit var volumeAdapter: VolumeAdapter
|
||||
private var fingerprintProtector: FingerprintProtector? = null
|
||||
private var usfFingerprint: Boolean = false
|
||||
private var usfKeepOpen: Boolean = false
|
||||
private var defaultVolumeName: String? = null
|
||||
private var addVolume = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
when (result.resultCode) {
|
||||
AddVolumeActivity.RESULT_VOLUME_ADDED -> onVolumeAdded()
|
||||
@ -116,6 +122,15 @@ class MainActivity : BaseActivity() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
fingerprintProtector = FingerprintProtector.new(this, themeValue, volumeDatabase)
|
||||
}
|
||||
defaultVolumeName = sharedPrefs.getString(DEFAULT_VOLUME_KEY, null)
|
||||
defaultVolumeName?.let { name ->
|
||||
try {
|
||||
val (position, volume) = volumeAdapter.volumes.withIndex().first { it.value.name == name }
|
||||
openVolume(volume, position)
|
||||
} catch (e: NoSuchElementException) {
|
||||
unsetDefaultVolume()
|
||||
}
|
||||
}
|
||||
Intent(this, FileOperationService::class.java).also {
|
||||
bindService(it, object : ServiceConnection {
|
||||
override fun onServiceConnected(className: ComponentName, service: IBinder) {
|
||||
@ -126,6 +141,12 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
// refresh this in case another instance of MainActivity changes its value
|
||||
defaultVolumeName = sharedPrefs.getString(DEFAULT_VOLUME_KEY, null)
|
||||
}
|
||||
|
||||
private fun onVolumeItemClick(volume: Volume, position: Int) {
|
||||
if (volumeAdapter.selectedItems.isEmpty())
|
||||
openVolume(volume, position)
|
||||
@ -206,6 +227,14 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun unsetDefaultVolume() {
|
||||
with (sharedPrefs.edit()) {
|
||||
remove(DEFAULT_VOLUME_KEY)
|
||||
apply()
|
||||
}
|
||||
defaultVolumeName = null
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
@ -243,6 +272,11 @@ class MainActivity : BaseActivity() {
|
||||
})
|
||||
true
|
||||
}
|
||||
R.id.remove_default_open -> {
|
||||
unsetDefaultVolume()
|
||||
unselect(volumeAdapter.selectedItems.first())
|
||||
true
|
||||
}
|
||||
R.id.copy -> {
|
||||
val position = volumeAdapter.selectedItems.elementAt(0)
|
||||
val volume = volumeAdapter.volumes[position]
|
||||
@ -287,24 +321,21 @@ class MainActivity : BaseActivity() {
|
||||
menuInflater.inflate(R.menu.main_activity, menu)
|
||||
menu.findItem(R.id.settings).isVisible = !pickMode && !dropMode
|
||||
val isSelecting = volumeAdapter.selectedItems.isNotEmpty()
|
||||
menu.findItem(R.id.select_all).isVisible = isSelecting && !pickMode && !dropMode
|
||||
menu.findItem(R.id.remove).isVisible = isSelecting && !pickMode && !dropMode
|
||||
var showForgetPassword = isSelecting
|
||||
if (isSelecting) {
|
||||
for (volume in volumeAdapter.selectedItems.map { i -> volumeAdapter.volumes[i] }) {
|
||||
if (volume.encryptedHash == null) {
|
||||
showForgetPassword = false
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
menu.findItem(R.id.forget_password).isVisible = showForgetPassword && !pickMode
|
||||
val onlyOneAndWriteable = !pickMode && !dropMode &&
|
||||
volumeAdapter.selectedItems.size == 1 &&
|
||||
volumeAdapter.volumes[volumeAdapter.selectedItems.elementAt(0)].canWrite(filesDir.path)
|
||||
menu.findItem(R.id.select_all).isVisible = isSelecting
|
||||
menu.findItem(R.id.remove).isVisible = isSelecting
|
||||
menu.findItem(R.id.forget_password).isVisible =
|
||||
isSelecting &&
|
||||
!volumeAdapter.selectedItems.any { i -> volumeAdapter.volumes[i].encryptedHash == null }
|
||||
val onlyOneSelected = volumeAdapter.selectedItems.size == 1
|
||||
val onlyOneAndWriteable =
|
||||
onlyOneSelected &&
|
||||
volumeAdapter.volumes[volumeAdapter.selectedItems.first()].canWrite(filesDir.path)
|
||||
menu.findItem(R.id.change_password).isVisible = onlyOneAndWriteable
|
||||
menu.findItem(R.id.remove_default_open).isVisible =
|
||||
onlyOneSelected &&
|
||||
volumeAdapter.volumes[volumeAdapter.selectedItems.first()].name == defaultVolumeName
|
||||
with(menu.findItem(R.id.copy)) {
|
||||
isVisible = !pickMode && !dropMode && volumeAdapter.selectedItems.size == 1
|
||||
isVisible = onlyOneSelected
|
||||
if (isVisible) {
|
||||
setTitle(if (volumeAdapter.volumes[volumeAdapter.selectedItems.elementAt(0)].isHidden)
|
||||
R.string.copy_hidden_volume
|
||||
@ -390,6 +421,13 @@ class MainActivity : BaseActivity() {
|
||||
if (success) {
|
||||
volumeDatabase.renameVolume(volume.name, newDBName)
|
||||
unselect(position)
|
||||
if (volume.name == defaultVolumeName) {
|
||||
with (sharedPrefs.edit()) {
|
||||
putString(DEFAULT_VOLUME_KEY, newDBName)
|
||||
apply()
|
||||
}
|
||||
defaultVolumeName = newDBName
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(this, R.string.volume_rename_failed, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
@ -441,6 +479,18 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private fun onPasswordSubmitted(volume: Volume, position: Int, dialogBinding: DialogOpenVolumeBinding) {
|
||||
if (dialogBinding.checkboxDefaultOpen.isChecked xor (defaultVolumeName == volume.name)) {
|
||||
with (sharedPrefs.edit()) {
|
||||
defaultVolumeName = if (dialogBinding.checkboxDefaultOpen.isChecked) {
|
||||
putString(DEFAULT_VOLUME_KEY, volume.name)
|
||||
volume.name
|
||||
} else {
|
||||
remove(DEFAULT_VOLUME_KEY)
|
||||
null
|
||||
}
|
||||
apply()
|
||||
}
|
||||
}
|
||||
val password = CharArray(dialogBinding.editPassword.text.length)
|
||||
dialogBinding.editPassword.text.getChars(0, password.size, password, 0)
|
||||
// openVolumeWithPassword is responsible for wiping the password
|
||||
@ -457,8 +507,9 @@ class MainActivity : BaseActivity() {
|
||||
if (!usfFingerprint || fingerprintProtector == null || volume.encryptedHash != null) {
|
||||
dialogBinding.checkboxSavePassword.visibility = View.GONE
|
||||
}
|
||||
dialogBinding.checkboxDefaultOpen.isChecked = defaultVolumeName == volume.name
|
||||
val dialog = CustomAlertDialogBuilder(this, themeValue)
|
||||
.setTitle(R.string.open_dialog_title)
|
||||
.setTitle(getString(R.string.open_dialog_title, volume.shortName))
|
||||
.setView(dialogBinding.root)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.open) { _, _ ->
|
||||
|
@ -12,6 +12,7 @@
|
||||
android:inputType="textPassword"
|
||||
android:maxLines="1"
|
||||
android:autofillHints="password"
|
||||
android:hint="@string/password"
|
||||
android:imeOptions="actionDone">
|
||||
<requestFocus/>
|
||||
</EditText>
|
||||
@ -20,7 +21,12 @@
|
||||
android:id="@+id/checkbox_save_password"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/fingerprint_save_checkbox_text"/>
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkbox_default_open"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/default_open"/>
|
||||
|
||||
</LinearLayout>
|
@ -34,6 +34,12 @@
|
||||
android:visible="false"
|
||||
android:title="@string/change_password"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/remove_default_open"
|
||||
app:showAsAction="never"
|
||||
android:visible="false"
|
||||
android:title="@string/remove_default_open"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/copy"
|
||||
app:showAsAction="never"
|
||||
|
@ -184,7 +184,6 @@
|
||||
<string name="add_volume">Añadir volumen</string>
|
||||
<string name="pick_directory">Selecciona el directorio</string>
|
||||
<string name="volume_alread_saved">Volumen ya guardado</string>
|
||||
<string name="open_dialog_title">Introduce tu contraseña:</string>
|
||||
<string name="remove">Eliminar</string>
|
||||
<string name="settings">Ajustes</string>
|
||||
<string name="select_all">Seleccionar todo</string>
|
||||
|
@ -179,7 +179,6 @@
|
||||
<string name="seek_seconds_forward">+%d segundos</string>
|
||||
<string name="seek_seconds_backward">-%d segundos</string>
|
||||
<string name="volume_alread_saved">O volume já está salvo</string>
|
||||
<string name="open_dialog_title">Digite sua senha:</string>
|
||||
<string name="remove">Remover</string>
|
||||
<string name="settings">Configurações</string>
|
||||
<string name="select_all">Selecionar tudo</string>
|
||||
|
@ -178,7 +178,6 @@
|
||||
<string name="add_volume">Добавить том</string>
|
||||
<string name="pick_directory">Выбрать папку</string>
|
||||
<string name="volume_alread_saved">Том уже сохранён</string>
|
||||
<string name="open_dialog_title">Введите пароль:</string>
|
||||
<string name="remove">Удалить</string>
|
||||
<string name="settings">Настройки</string>
|
||||
<string name="select_all">Выбрать все</string>
|
||||
|
@ -184,7 +184,7 @@
|
||||
<string name="add_volume">Add volume</string>
|
||||
<string name="pick_directory">Pick directory</string>
|
||||
<string name="volume_alread_saved">Volume already saved</string>
|
||||
<string name="open_dialog_title">Enter your password:</string>
|
||||
<string name="open_dialog_title">Opening %s:</string>
|
||||
<string name="remove">Remove</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="select_all">Select All</string>
|
||||
@ -237,4 +237,6 @@
|
||||
<string name="multiple_files">%d files</string>
|
||||
<string name="one_folder">1 folder</string>
|
||||
<string name="multiple_folders">%d folders</string>
|
||||
<string name="default_open">Open this volume when launching the application</string>
|
||||
<string name="remove_default_open">Don\'t open by default</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user