diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.kt b/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.kt index 877c3a54528d592121bd51a168c57fbe8ed41ce8..ee323adcded0876eace0ee95918496f2d870639a 100644 --- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.kt +++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.kt @@ -55,8 +55,56 @@ class JamiAccountPasswordFragment : BaseSupportFragment<JamiAccountCreationPrese if (savedInstanceState != null && model == null) { model = savedInstanceState.getSerializable(KEY_MODEL) as AccountCreationModelImpl? } - binding = FragAccJamiPasswordBinding.inflate(inflater, container, false) - return binding!!.root + return FragAccJamiPasswordBinding.inflate(inflater, container, false).apply { + createAccount.setOnClickListener { presenter.createAccount() } + ringPasswordSwitch.setOnCheckedChangeListener { buttonView: CompoundButton?, isChecked: Boolean -> + mIsChecked = isChecked + if (isChecked) { + passwordTxtBox.visibility = View.VISIBLE + ringPasswordRepeatTxtBox.visibility = View.VISIBLE + placeholder.visibility = View.GONE + val password: CharSequence? = password.text + presenter.passwordChanged(password.toString(), ringPasswordRepeat.text!!) + } else { + passwordTxtBox.visibility = View.GONE + ringPasswordRepeatTxtBox.visibility = View.GONE + placeholder.visibility = View.VISIBLE + presenter.passwordUnset() + } + } + password.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { + presenter.passwordChanged(s.toString()) + } + + override fun afterTextChanged(s: Editable) {} + }) + ringPasswordRepeat.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { + presenter.passwordConfirmChanged(s.toString()) + } + + override fun afterTextChanged(s: Editable) {} + }) + ringPasswordRepeat.setOnEditorActionListener { v: TextView?, actionId: Int, event: KeyEvent? -> + if (actionId == EditorInfo.IME_ACTION_DONE) { + presenter.createAccount() + } + false + } + ringPasswordRepeat.setOnEditorActionListener { v: TextView, actionId: Int, event: KeyEvent? -> + if (actionId == EditorInfo.IME_ACTION_DONE && binding!!.createAccount.isEnabled) { + val inputMethodManager = v.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager + inputMethodManager.hideSoftInputFromWindow(v.windowToken, 0) + presenter.createAccount() + return@setOnEditorActionListener true + } + false + } + binding = this + }.root } override fun onDestroyView() { @@ -66,53 +114,6 @@ class JamiAccountPasswordFragment : BaseSupportFragment<JamiAccountCreationPrese override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding!!.createAccount.setOnClickListener { presenter.createAccount() } - binding!!.ringPasswordSwitch.setOnCheckedChangeListener { buttonView: CompoundButton?, isChecked: Boolean -> - mIsChecked = isChecked - if (isChecked) { - binding!!.passwordTxtBox.visibility = View.VISIBLE - binding!!.ringPasswordRepeatTxtBox.visibility = View.VISIBLE - binding!!.placeholder.visibility = View.GONE - val password: CharSequence? = binding!!.ringPassword.text - presenter.passwordChanged(password.toString(), binding!!.ringPasswordRepeat.text!!) - } else { - binding!!.passwordTxtBox.visibility = View.GONE - binding!!.ringPasswordRepeatTxtBox.visibility = View.GONE - binding!!.placeholder.visibility = View.VISIBLE - presenter.passwordUnset() - } - } - binding!!.ringPassword.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { - presenter.passwordChanged(s.toString()) - } - - override fun afterTextChanged(s: Editable) {} - }) - binding!!.ringPasswordRepeat.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { - presenter.passwordConfirmChanged(s.toString()) - } - - override fun afterTextChanged(s: Editable) {} - }) - binding!!.ringPasswordRepeat.setOnEditorActionListener { v: TextView?, actionId: Int, event: KeyEvent? -> - if (actionId == EditorInfo.IME_ACTION_DONE) { - presenter.createAccount() - } - false - } - binding!!.ringPasswordRepeat.setOnEditorActionListener { v: TextView, actionId: Int, event: KeyEvent? -> - if (actionId == EditorInfo.IME_ACTION_DONE && binding!!.createAccount.isEnabled) { - val inputMethodManager = v.context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager - inputMethodManager.hideSoftInputFromWindow(v.windowToken, 0) - presenter.createAccount() - return@setOnEditorActionListener true - } - false - } presenter.init(model) } @@ -131,16 +132,12 @@ class JamiAccountPasswordFragment : BaseSupportFragment<JamiAccountCreationPrese } override fun goToAccountCreation(accountCreationModel: AccountCreationModel) { - val wizardActivity: Activity? = activity - if (wizardActivity is AccountWizardActivity) { - wizardActivity.createAccount(accountCreationModel) - val parent = parentFragment as JamiAccountCreationFragment? - if (parent != null) { - parent.scrollPagerFragment(accountCreationModel) - val imm = wizardActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - imm.hideSoftInputFromWindow(binding!!.ringPassword.windowToken, 0) - } - } + val wizardActivity = activity as AccountWizardActivity? ?: return + wizardActivity.createAccount(accountCreationModel) + val parent = parentFragment as JamiAccountCreationFragment? + parent?.scrollPagerFragment(accountCreationModel) + val imm = wizardActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager? + imm?.hideSoftInputFromWindow(binding!!.password.windowToken, 0) } override fun cancel() { diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.kt b/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.kt index f422ac5862782b9a99225053615cb3925b92f77f..7a5600e0aaac05230ec77c9b8438683fe2dd142a 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.kt +++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.kt @@ -42,7 +42,6 @@ import dagger.hilt.android.AndroidEntryPoint import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.disposables.CompositeDisposable import net.jami.model.AccountConfig -import net.jami.model.ConfigKey import net.jami.services.AccountService import javax.inject.Inject @@ -55,26 +54,26 @@ class AccountMigrationFragment : Fragment() { private var mProgress: ProgressDialog? = null private var migratingAccount = false private val mDisposableBag = CompositeDisposable() + override fun onDestroy() { super.onDestroy() mDisposableBag.clear() } - override fun onCreateView(inflater: LayoutInflater, parent: ViewGroup?, savedInstanceState: Bundle?): View { - return FragAccountMigrationBinding.inflate(inflater, parent, false).apply { - ringPassword.setOnEditorActionListener { v: TextView, actionId: Int, event: KeyEvent? -> - actionId == EditorInfo.IME_ACTION_NEXT && checkPassword(v, null) + override fun onCreateView(inflater: LayoutInflater, parent: ViewGroup?, savedInstanceState: Bundle?): View = + FragAccountMigrationBinding.inflate(inflater, parent, false).apply { + password.setOnEditorActionListener { v: TextView, actionId: Int, event: KeyEvent? -> + actionId == EditorInfo.IME_ACTION_NEXT && checkPassword(v) } - ringPassword.onFocusChangeListener = View.OnFocusChangeListener { v: View, hasFocus: Boolean -> + password.onFocusChangeListener = View.OnFocusChangeListener { v: View, hasFocus: Boolean -> if (!hasFocus) { - checkPassword(v as TextView, null) + checkPassword(v as TextView) } } - ringMigrateBtn.setOnClickListener { initAccountMigration(ringPassword.text.toString()) } + migrateBtn.setOnClickListener { initAccountMigration(password.text.toString()) } deleteBtn.setOnClickListener { initAccountDelete() } binding = this }.root - } override fun onResume() { super.onResume() @@ -96,11 +95,15 @@ class AccountMigrationFragment : Fragment() { private fun deleteAccount() { mAccountService.removeAccount(mAccountId!!) + val activity = activity ?: return + activity.setResult(Activity.RESULT_OK, Intent()) + activity.finish() } private fun initAccountMigration(password: String) { if (migratingAccount) return migratingAccount = true + val accountId = mAccountId ?: return //orientation is locked during the migration of account to avoid the destruction of the thread activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED @@ -111,17 +114,12 @@ class AccountMigrationFragment : Fragment() { setCanceledOnTouchOutside(false) show() } - val accountId = mAccountId!! - val account = mAccountService.getAccount(accountId)!! - val details = account.details - details[ConfigKey.ARCHIVE_PASSWORD.key()] = password - mAccountService.setAccountDetails(account.accountId, details) mDisposableBag.add(mAccountService.migrateAccount(accountId, password) .observeOn(AndroidSchedulers.mainThread()) .subscribe { newState: String -> handleMigrationState(newState) }) } - private fun checkPassword(pwd: TextView, confirm: TextView?): Boolean { + private fun checkPassword(pwd: TextView): Boolean { var error = false if (pwd.text.isEmpty()) { error = true @@ -133,15 +131,6 @@ class AccountMigrationFragment : Fragment() { pwd.error = null } } - if (confirm != null) { - if (pwd.text.toString() != confirm.text.toString()) { - confirm.error = getString(R.string.error_passwords_not_equals) - confirm.requestFocus() - error = true - } else { - confirm.error = null - } - } return error } diff --git a/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.kt b/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.kt index d95367f92fc31306f24a75484b7934d07479c67c..d89b334100c8cd581901fef8d2503109dc5bf804 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.kt +++ b/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.kt @@ -68,7 +68,7 @@ class LinkDeviceFragment : BaseBottomSheetFragment<LinkDevicePresenter>(), LinkD } } mBinding!!.btnStartExport.setOnClickListener { onClickStart() } - mBinding!!.ringPassword.setOnEditorActionListener { pwd: TextView, actionId: Int, event: KeyEvent? -> + mBinding!!.password.setOnEditorActionListener { pwd: TextView, actionId: Int, event: KeyEvent? -> onPasswordEditorAction(pwd, actionId, event) } mBinding!!.passwordLayout.visibility = if (mAccountHasPassword) View.VISIBLE else View.GONE @@ -146,7 +146,7 @@ class LinkDeviceFragment : BaseBottomSheetFragment<LinkDevicePresenter>(), LinkD override fun showPasswordError() { mBinding!!.passwordLayout.error = getString(R.string.account_export_end_decryption_message) - mBinding!!.ringPassword.setText("") + mBinding!!.password.setText("") } override fun showGenericError() { @@ -159,7 +159,7 @@ class LinkDeviceFragment : BaseBottomSheetFragment<LinkDevicePresenter>(), LinkD override fun showPIN(pin: String) { dismissExportingProgress() - mBinding!!.ringPassword.setText("") + mBinding!!.password.setText("") mBinding!!.passwordLayout.visibility = View.GONE mBinding!!.btnStartExport.visibility = View.GONE val pined = getString(R.string.account_end_export_infos).replace("%%", pin) @@ -180,7 +180,7 @@ class LinkDeviceFragment : BaseBottomSheetFragment<LinkDevicePresenter>(), LinkD private fun onClickStart() { mBinding!!.passwordLayout.error = null - val password = mBinding!!.ringPassword.text.toString() + val password = mBinding!!.password.text.toString() presenter.startAccountExport(password) } diff --git a/ring-android/app/src/main/res/layout/frag_acc_jami_password.xml b/ring-android/app/src/main/res/layout/frag_acc_jami_password.xml index 77e67edf39639789b3ff85e6aabf5ec47d4a8e00..0dafc7035f6660b184ed8f7a7db77c8448b3d6c3 100644 --- a/ring-android/app/src/main/res/layout/frag_acc_jami_password.xml +++ b/ring-android/app/src/main/res/layout/frag_acc_jami_password.xml @@ -78,7 +78,7 @@ app:startIconDrawable="@drawable/baseline_lock_24"> <com.google.android.material.textfield.TextInputEditText - android:id="@+id/ring_password" + android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:autofillHints="password,newPassword" diff --git a/ring-android/app/src/main/res/layout/frag_account_migration.xml b/ring-android/app/src/main/res/layout/frag_account_migration.xml index e9126516c1d88f6e71b8e9b420127334e35cd3ed..a178458c678888b1a57c112ffc05dc6be22939db 100644 --- a/ring-android/app/src/main/res/layout/frag_account_migration.xml +++ b/ring-android/app/src/main/res/layout/frag_account_migration.xml @@ -35,11 +35,12 @@ along with this program; if not, write to the Free Software android:orientation="vertical" app:bounded_width="380dp"> - <androidx.cardview.widget.CardView + <com.google.android.material.card.MaterialCardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" - android:animateLayoutChanges="false"> + android:animateLayoutChanges="false" + app:cardElevation="4dp"> <RelativeLayout android:layout_width="match_parent" @@ -66,7 +67,7 @@ along with this program; if not, write to the Free Software app:passwordToggleEnabled="true"> <com.google.android.material.textfield.TextInputEditText - android:id="@+id/ring_password" + android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/account_enter_password" @@ -92,7 +93,7 @@ along with this program; if not, write to the Free Software android:textColor="@color/red_800"/> <com.google.android.material.button.MaterialButton - android:id="@+id/ring_migrate_btn" + android:id="@+id/migrate_btn" style="@style/Widget.MaterialComponents.Button.TextButton.Dialog.Flush" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -129,7 +130,7 @@ along with this program; if not, write to the Free Software </RelativeLayout> - </androidx.cardview.widget.CardView> + </com.google.android.material.card.MaterialCardView> </cx.ring.views.BoundedLinearLayout> diff --git a/ring-android/app/src/main/res/layout/frag_link_device.xml b/ring-android/app/src/main/res/layout/frag_link_device.xml index 0a821774d3755a20b6a9ae009ac7d1f0fe766677..a13df597ce9dd967d552a5681ff5b1787d4c39d3 100644 --- a/ring-android/app/src/main/res/layout/frag_link_device.xml +++ b/ring-android/app/src/main/res/layout/frag_link_device.xml @@ -44,7 +44,7 @@ app:passwordToggleTint="@color/colorPrimary"> <com.google.android.material.textfield.TextInputEditText - android:id="@+id/ring_password" + android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/account_enter_password"