diff --git a/jami-android/app/src/main/java/cx/ring/account/AccountWizardActivity.kt b/jami-android/app/src/main/java/cx/ring/account/AccountWizardActivity.kt index 1125763f01365ec9e0e9aea1e9c6120e7eed9182..551b980462c379f5f64741d3023f670ae2f14956 100644 --- a/jami-android/app/src/main/java/cx/ring/account/AccountWizardActivity.kt +++ b/jami-android/app/src/main/java/cx/ring/account/AccountWizardActivity.kt @@ -110,8 +110,8 @@ class AccountWizardActivity : BaseActivity<AccountWizardPresenter>(), AccountWiz val model = viewModel.model if (!TextUtils.isEmpty(model.managementServer)) { presenter.initJamiAccountConnect(model, getText(R.string.ring_account_default_name).toString()) - } else if (model.isLink) { - presenter.initJamiAccountLink(model, getText(R.string.ring_account_default_name).toString()) + } else if (model.archive != null) { + presenter.initJamiAccountBackup(model, getText(R.string.ring_account_default_name).toString()) } else { presenter.initJamiAccountCreation(model, getText(R.string.ring_account_default_name).toString()) } @@ -154,7 +154,7 @@ class AccountWizardActivity : BaseActivity<AccountWizardPresenter>(), AccountWiz val fragments = supportFragmentManager.fragments if (fragments.size > 0) { val fragment = fragments[0] - if (fragment is JamiLinkAccountFragment || fragment is JamiAccountConnectFragment) { + if (fragment is JamiAccountConnectFragment || fragment is JamiImportBackupFragment) { profileCreated(false) } } diff --git a/jami-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt b/jami-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt index 27e7ef37357d8b3b5642d3a9c90c215849ed70e5..08d7e0b586f2034f5476b6709b7c1574f8979212 100644 --- a/jami-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt @@ -60,8 +60,8 @@ class HomeAccountCreationFragment : archive = file } replaceFragmentWithSlide( - fragment = JamiLinkAccountFragment(), - tag = JamiLinkAccountFragment.TAG, + fragment = JamiImportBackupFragment(), + tag = JamiImportBackupFragment.TAG, containerID = R.id.wizard_container ) }) { e: Throwable -> diff --git a/jami-android/app/src/main/java/cx/ring/account/JamiImportBackupFragment.kt b/jami-android/app/src/main/java/cx/ring/account/JamiImportBackupFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..27c2a4ed0068f6098570f0d025b3f5731f74a04c --- /dev/null +++ b/jami-android/app/src/main/java/cx/ring/account/JamiImportBackupFragment.kt @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2004-2024 Savoir-faire Linux Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ +package cx.ring.account + +import android.content.Context +import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.inputmethod.InputMethodManager +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import cx.ring.databinding.FragAccJamiBackupBinding +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class JamiImportBackupFragment : Fragment() { + private val model: AccountCreationViewModel by activityViewModels() + private var binding: FragAccJamiBackupBinding? = null + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View = FragAccJamiBackupBinding.inflate(inflater, container, false).apply { + + linkButton.setOnClickListener { createAccount() } + existingPassword.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) {} + override fun afterTextChanged(s: Editable) { + model.model.password = s.toString() + } + }) + + binding = this + }.root + + override fun onDestroyView() { + super.onDestroyView() + binding = null + } + + +// override fun showPin(show: Boolean) { +// val binding = binding ?: return +// binding.linkButton.setText(if (show) R.string.account_link_device else R.string.account_link_archive_button) +// binding!!.linkButton.isEnabled = enable +// } + + fun createAccount() { + (activity as AccountWizardActivity?)?.createAccount() + val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager + imm?.hideSoftInputFromWindow(binding!!.existingPassword.windowToken, 0) + } + + companion object { + val TAG = JamiImportBackupFragment::class.simpleName!! + } +} \ No newline at end of file diff --git a/jami-android/app/src/main/res/layout/frag_acc_jami_backup.xml b/jami-android/app/src/main/res/layout/frag_acc_jami_backup.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9f7e0957a5eec1b9eb862baf552fe1b156b68b6 --- /dev/null +++ b/jami-android/app/src/main/res/layout/frag_acc_jami_backup.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Todo: Legacy --> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/color_primary_dark" + android:gravity="center" + android:orientation="vertical" + android:paddingVertical="16dp"> + + <RelativeLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:text="@string/account_link_archive_button" + android:textAlignment="center" + android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5" + android:textColor="@color/color_primary_light" + android:textStyle="bold" /> + + <ImageView + android:id="@+id/background" + android:layout_width="@dimen/wizard_image_background" + android:layout_height="@dimen/wizard_image_background" + android:layout_centerHorizontal="true" + android:alpha="0.1" + android:contentDescription="@null" + android:src="@drawable/baseline_devices_24" + app:tint="@color/white" /> + </RelativeLayout> + + <ScrollView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:background="@drawable/background_rounded_12" + android:backgroundTint="@color/white"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingHorizontal="16dp"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:text="@string/help_password_enter" + android:textAlignment="center" + android:paddingBottom="12dp" + android:textStyle="bold" /> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/password_txt_box" + style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:passwordToggleEnabled="true"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/existing_password" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:drawableStart="@drawable/baseline_lock_24" + android:drawablePadding="5dp" + android:hint="@string/prompt_password" + android:imeOptions="actionNext" + android:inputType="textPassword" /> + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.button.MaterialButton + android:id="@+id/link_button" + style="@style/ButtonColored" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginVertical="16dp" + android:text="@string/account_link_archive_button" + android:textSize="12sp" + android:theme="@style/ButtonColoredInverse" /> + + </LinearLayout> + + </ScrollView> + +</LinearLayout> \ No newline at end of file diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/account/AccountWizardPresenter.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/account/AccountWizardPresenter.kt index 35a2c957cd3e047f7e764c20dd288a5865d55f70..586762e83ad100a021d9c89f8b25d8fd1134e9ad 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/account/AccountWizardPresenter.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/account/AccountWizardPresenter.kt @@ -127,7 +127,8 @@ class AccountWizardPresenter @Inject constructor( .observeOn(mUiScheduler) .subscribe({ account: Account -> accountCreationModel.newAccount = account }) { e -> Log.e(TAG, "Can't create account", e) }) - if (accountCreationModel.isLink) { + + if (accountCreationModel.archive != null) { view!!.displayProgress(true) mCompositeDisposable.add(newAccount .filter { a: Account -> a.registrationState != AccountConfig.RegistrationState.INITIALIZING } @@ -189,7 +190,7 @@ class AccountWizardPresenter @Inject constructor( .filter { a: Account -> a.registrationState != AccountConfig.RegistrationState.INITIALIZING } .firstElement() .subscribe { a: Account -> - if (!model.isLink && a.isJami && model.username.isNotEmpty()) + if (model.archive == null && a.isJami && model.username.isNotEmpty()) mAccountService.registerName(a, model.username, AccountService.ACCOUNT_SCHEME_PASSWORD, model.password) mAccountService.currentAccount = a if (model.isPush) {