Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace kotlin extension with view bindings in SyncSettingsActivity #1043

Merged
merged 2 commits into from
Oct 12, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import com.infomaniak.drive.data.models.SyncSettings.IntervalType
import com.infomaniak.drive.data.models.SyncSettings.SavePicturesDate
import com.infomaniak.drive.data.models.UploadFile
import com.infomaniak.drive.data.models.UserDrive
import com.infomaniak.drive.databinding.ActivitySyncSettingsBinding
import com.infomaniak.drive.ui.BaseActivity
import com.infomaniak.drive.ui.fileList.SelectFolderActivity
import com.infomaniak.drive.ui.fileList.SelectFolderActivityArgs
Expand All @@ -53,14 +54,15 @@ import com.infomaniak.drive.utils.SyncUtils.activateAutoSync
import com.infomaniak.drive.utils.SyncUtils.disableAutoSync
import com.infomaniak.drive.utils.Utils
import com.infomaniak.lib.core.utils.*
import kotlinx.android.synthetic.main.activity_sync_settings.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.Date
import java.util.TimeZone

class SyncSettingsActivity : BaseActivity() {

private val binding: ActivitySyncSettingsBinding by lazy { ActivitySyncSettingsBinding.inflate(layoutInflater) }

private val syncSettingsViewModel: SyncSettingsViewModel by viewModels()
private val selectDriveViewModel: SelectDriveViewModel by viewModels()
private var oldSyncSettings: SyncSettings? = null
Expand All @@ -74,9 +76,9 @@ class SyncSettingsActivity : BaseActivity() {
}
}

override fun onCreate(savedInstanceState: Bundle?) {
override fun onCreate(savedInstanceState: Bundle?) = with(binding) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sync_settings)
setContentView(root)

setOnBackPressed()

Expand Down Expand Up @@ -106,7 +108,78 @@ class SyncSettingsActivity : BaseActivity() {
saveOldPictures.value = SavePicturesDate.SINCE_NOW
}

AccountUtils.getAllUsers().observe(this) { users ->
observeAllUsers()
observeCustomDate()
observeSelectedDrive()

selectPath.setOnClickListener {
Intent(this@SyncSettingsActivity, SelectFolderActivity::class.java).apply {
putExtras(
SelectFolderActivityArgs(
userId = selectDriveViewModel.selectedUserId.value!!,
driveId = selectDriveViewModel.selectedDrive.value?.id!!,
folderId = syncSettingsViewModel.syncFolder.value ?: -1,
disabledFolderId = Utils.ROOT_ID,
).toBundle()
)
selectFolderResultLauncher.launch(this)
}
}

observeSyncFolder()
observeSaveOldPictures(oldSaveOldPicturesValue)

syncDatePicker.setOnClickListener { showSyncDatePicker() }

observeSyncIntervalType(oldIntervalTypeValue)

syncVideoSwitch.isChecked = oldSyncVideoValue
createDatedSubFoldersSwitch.isChecked = oldCreateDatedSubFoldersValue
deletePicturesAfterSyncSwitch.isChecked = oldDeleteAfterSyncValue

activateSync.setOnClickListener { activateSyncSwitch.isChecked = !activateSyncSwitch.isChecked }
activateSyncSwitch.setOnCheckedChangeListener { _, isChecked ->
saveSettingVisibility(isChecked)
if (AccountUtils.isEnableAppSync() == isChecked) editNumber-- else editNumber++
if (isChecked) permission.checkSyncPermissions()
changeSaveButtonStatus()
}

mediaFolders.setOnClickListener {
SelectMediaFoldersDialog().show(supportFragmentManager, "SyncSettingsSelectMediaFoldersDialog")
}

syncVideoSwitch.setOnCheckedChangeListener { _, isChecked ->
if (oldSyncVideoValue == isChecked) editNumber-- else editNumber++
changeSaveButtonStatus()
}

createDatedSubFoldersSwitch.setOnCheckedChangeListener { _, isChecked ->
if (oldCreateDatedSubFoldersValue == isChecked) editNumber-- else editNumber++
changeSaveButtonStatus()
}

deletePicturesAfterSyncSwitch.setOnCheckedChangeListener { _, isChecked ->
if (oldDeleteAfterSyncValue == isChecked) editNumber-- else editNumber++
changeSaveButtonStatus()
}

syncDate.setOnClickListener {
SelectSaveDateBottomSheetDialog().show(supportFragmentManager, "SyncSettingsSelectSaveDateBottomSheetDialog")
}

syncPeriodicity.setOnClickListener {
SelectIntervalTypeBottomSheetDialog().show(supportFragmentManager, "SyncSettingsSelectIntervalTypeBottomSheetDialog")
}

saveButton.initProgress(this@SyncSettingsActivity)
saveButton.setOnClickListener {
if (permission.checkSyncPermissions()) saveSettings()
}
}

private fun observeAllUsers() {
AccountUtils.getAllUsers().observe(this@SyncSettingsActivity) { users ->
if (users.size > 1) {
activeSelectDrive()
} else {
Expand All @@ -119,22 +192,27 @@ class SyncSettingsActivity : BaseActivity() {
}
}
}
}

syncSettingsViewModel.customDate.observe(this) { date ->
private fun observeCustomDate() = with(binding) {
syncSettingsViewModel.customDate.observe(this@SyncSettingsActivity) { date ->
syncDatePicker.apply {
isGone = date == null
text = date?.format(FORMAT_DATE_CLEAR_MONTH) ?: ""
}
}
}

selectDriveViewModel.selectedDrive.observe(this) {
private fun observeSelectedDrive() = with(binding) {
selectDriveViewModel.selectedDrive.observe(this@SyncSettingsActivity) {
it?.let {
driveIcon.imageTintList = ColorStateList.valueOf(Color.parseColor(it.preferences.color))
driveName.text = it.name
selectDivider.isVisible = true
selectPath.isVisible = true
} ?: run {
driveIcon.imageTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.iconColor))
driveIcon.imageTintList =
ColorStateList.valueOf(ContextCompat.getColor(this@SyncSettingsActivity, R.color.iconColor))
driveName.setText(R.string.selectDriveTitle)
selectDivider.isGone = true
selectPath.isGone = true
Expand All @@ -147,22 +225,10 @@ class SyncSettingsActivity : BaseActivity() {
}
changeSaveButtonStatus()
}
}

selectPath.setOnClickListener {
Intent(this, SelectFolderActivity::class.java).apply {
putExtras(
SelectFolderActivityArgs(
userId = selectDriveViewModel.selectedUserId.value!!,
driveId = selectDriveViewModel.selectedDrive.value?.id!!,
folderId = syncSettingsViewModel.syncFolder.value ?: -1,
disabledFolderId = Utils.ROOT_ID,
).toBundle()
)
selectFolderResultLauncher.launch(this)
}
}

syncSettingsViewModel.syncFolder.observe(this) { syncFolderId ->
private fun observeSyncFolder() = with(binding) {
syncSettingsViewModel.syncFolder.observe(this@SyncSettingsActivity) { syncFolderId ->

val selectedUserId = selectDriveViewModel.selectedUserId.value
val selectedDriveId = selectDriveViewModel.selectedDrive.value?.id
Expand All @@ -176,8 +242,10 @@ class SyncSettingsActivity : BaseActivity() {
}
mediaFoldersSettingsVisibility(syncFolderId != null)
}
}

syncSettingsViewModel.saveOldPictures.observe(this) {
private fun observeSaveOldPictures(oldSaveOldPicturesValue: SavePicturesDate) = with(binding) {
syncSettingsViewModel.saveOldPictures.observe(this@SyncSettingsActivity) {
if (it != oldSaveOldPicturesValue) editNumber++
changeSaveButtonStatus()
syncDateValue.text = getString(it.shortTitle).lowercase()
Expand All @@ -188,58 +256,14 @@ class SyncSettingsActivity : BaseActivity() {
syncSettingsViewModel.customDate.value = null
}
}
}

syncDatePicker.setOnClickListener { showSyncDatePicker() }

syncSettingsViewModel.syncIntervalType.observe(this) {
private fun observeSyncIntervalType(oldIntervalTypeValue: IntervalType) = with(binding) {
syncSettingsViewModel.syncIntervalType.observe(this@SyncSettingsActivity) {
if (syncSettingsViewModel.syncIntervalType.value != oldIntervalTypeValue) editNumber++
changeSaveButtonStatus()
syncPeriodicityValue.text = getString(it.title).lowercase()
}

syncVideoSwitch.isChecked = oldSyncVideoValue
createDatedSubFoldersSwitch.isChecked = oldCreateDatedSubFoldersValue
deletePicturesAfterSyncSwitch.isChecked = oldDeleteAfterSyncValue

activateSync.setOnClickListener { activateSyncSwitch.isChecked = !activateSyncSwitch.isChecked }
activateSyncSwitch.setOnCheckedChangeListener { _, isChecked ->
saveSettingVisibility(isChecked)
if (AccountUtils.isEnableAppSync() == isChecked) editNumber-- else editNumber++
if (isChecked) permission.checkSyncPermissions()
changeSaveButtonStatus()
}

mediaFolders.setOnClickListener {
SelectMediaFoldersDialog().show(supportFragmentManager, "SyncSettingsSelectMediaFoldersDialog")
}

syncVideoSwitch.setOnCheckedChangeListener { _, isChecked ->
if (oldSyncVideoValue == isChecked) editNumber-- else editNumber++
changeSaveButtonStatus()
}

createDatedSubFoldersSwitch.setOnCheckedChangeListener { _, isChecked ->
if (oldCreateDatedSubFoldersValue == isChecked) editNumber-- else editNumber++
changeSaveButtonStatus()
}

deletePicturesAfterSyncSwitch.setOnCheckedChangeListener { _, isChecked ->
if (oldDeleteAfterSyncValue == isChecked) editNumber-- else editNumber++
changeSaveButtonStatus()
}

syncDate.setOnClickListener {
SelectSaveDateBottomSheetDialog().show(supportFragmentManager, "SyncSettingsSelectSaveDateBottomSheetDialog")
}

syncPeriodicity.setOnClickListener {
SelectIntervalTypeBottomSheetDialog().show(supportFragmentManager, "SyncSettingsSelectIntervalTypeBottomSheetDialog")
}

saveButton.initProgress(this)
saveButton.setOnClickListener {
if (permission.checkSyncPermissions()) saveSettings()
}
}

private fun setOnBackPressed() {
Expand All @@ -256,7 +280,7 @@ class SyncSettingsActivity : BaseActivity() {
}
}

toolbar.setNavigationOnClickListener { finishIfPossible() }
binding.toolbar.setNavigationOnClickListener { finishIfPossible() }
onBackPressedDispatcher.addCallback(this) { finishIfPossible() }
}

Expand All @@ -265,29 +289,29 @@ class SyncSettingsActivity : BaseActivity() {
changeSaveButtonStatus()
}

private fun activeSelectDrive() {
private fun activeSelectDrive() = with(binding) {
switchDrive.isVisible = true
selectDrive.setOnClickListener { SelectDriveDialog().show(supportFragmentManager, "SyncSettingsSelectDriveDialog") }
}

private fun saveSettingVisibility(isVisible: Boolean) {
private fun saveSettingVisibility(isVisible: Boolean) = with(binding) {
mediaFoldersSettingsVisibility(isVisible && syncSettingsViewModel.syncFolder.value != null)
saveSettingsTitle.isVisible = isVisible
saveSettingsLayout.isVisible = isVisible
}

private fun mediaFoldersSettingsVisibility(isVisible: Boolean) {
private fun mediaFoldersSettingsVisibility(isVisible: Boolean) = with(binding) {
syncSettingsVisibility(isVisible && MediaFolder.getAllSyncedFoldersCount() > 0)
mediaFoldersSettingsTitle.isVisible = isVisible
mediaFoldersSettingsLayout.isVisible = isVisible
}

private fun syncSettingsVisibility(isVisible: Boolean) {
private fun syncSettingsVisibility(isVisible: Boolean) = with(binding) {
syncSettingsTitle.isVisible = isVisible
syncSettingsLayout.isVisible = isVisible
}

private fun changeSaveButtonStatus() {
private fun changeSaveButtonStatus() = with(binding) {
val allSyncedFoldersCount = MediaFolder.getAllSyncedFoldersCount().toInt()
val isEdited = (editNumber > 0)
|| (selectDriveViewModel.selectedUserId.value != oldSyncSettings?.userId)
Expand Down Expand Up @@ -320,7 +344,7 @@ class SyncSettingsActivity : BaseActivity() {
trackPhotoSyncEvent(dateName)
}

private fun saveSettings() {
private fun saveSettings() = with(binding) {
saveButton.showProgress()
lifecycleScope.launch(Dispatchers.IO) {
val date = when (syncSettingsViewModel.saveOldPictures.value!!) {
Expand Down