From 7507a9cf166dc0835519cc50fd51236de36b9f90 Mon Sep 17 00:00:00 2001 From: Adolfo Santiago Date: Sun, 21 Nov 2021 10:21:16 +0100 Subject: [PATCH] Fix NavigationActivity onCreate method Add Splash, Login classes (refactor) --- .../tusky/core/extensions/AlertDialogExt.kt | 18 ++++++++ .../core/navigation/NavigationActivity.kt | 7 +-- .../tusky/core/ui/navigation/BaseKey.kt | 2 +- .../core/ui/navigation/BaseServiceKey.kt | 2 +- .../login/view/fragments/LoginFragment.kt | 44 +++++++++++++++++++ .../login/view/navigation/LoginKey.kt | 21 +++++++++ .../login/view/viewmodel/LoginViewModel.kt | 36 +++++++++++++++ .../view/viewmodel/LoginViewModelKeys.kt | 8 ++++ .../splash/view/fragments/SplashFragment.kt | 14 +++++- .../src/main/res/layout/activity_login.xml | 27 +++++++----- 10 files changed, 158 insertions(+), 21 deletions(-) create mode 100644 husky/app/src/main/java/com/keylesspalace/tusky/core/extensions/AlertDialogExt.kt create mode 100644 husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/fragments/LoginFragment.kt create mode 100644 husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/navigation/LoginKey.kt create mode 100644 husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModel.kt create mode 100644 husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModelKeys.kt diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/core/extensions/AlertDialogExt.kt b/husky/app/src/main/java/com/keylesspalace/tusky/core/extensions/AlertDialogExt.kt new file mode 100644 index 0000000..41a0055 --- /dev/null +++ b/husky/app/src/main/java/com/keylesspalace/tusky/core/extensions/AlertDialogExt.kt @@ -0,0 +1,18 @@ +package com.keylesspalace.tusky.core.extensions + +import android.R.id +import android.text.method.LinkMovementMethod +import android.text.util.Linkify +import android.widget.TextView +import androidx.appcompat.app.AlertDialog + +fun AlertDialog.Builder.dialogWithLink(message: String, positiveButton: String) { + val dialog = AlertDialog.Builder(context) + .setMessage(message) + .setPositiveButton(positiveButton, null) + .show() + + val text = dialog.window?.findViewById(id.message) + text?.autoLinkMask = Linkify.ALL + text?.movementMethod = LinkMovementMethod.getInstance() +} diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/core/navigation/NavigationActivity.kt b/husky/app/src/main/java/com/keylesspalace/tusky/core/navigation/NavigationActivity.kt index 6e4ce73..27ddee0 100644 --- a/husky/app/src/main/java/com/keylesspalace/tusky/core/navigation/NavigationActivity.kt +++ b/husky/app/src/main/java/com/keylesspalace/tusky/core/navigation/NavigationActivity.kt @@ -20,7 +20,6 @@ package com.keylesspalace.tusky.core.navigation import android.os.Bundle -import android.os.PersistableBundle import androidx.appcompat.app.AppCompatActivity import com.keylesspalace.tusky.core.di.HuskyServices import com.keylesspalace.tusky.core.extensions.viewBinding @@ -40,8 +39,8 @@ class NavigationActivity : AppCompatActivity(), SimpleStateChanger.NavigationHan private val binding by viewBinding(ActivityNavigationBinding::inflate) private lateinit var fragmentStateChanger: DefaultFragmentStateChanger - override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { - super.onCreate(savedInstanceState, persistentState) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) setContentView(binding.root) initNavigation() @@ -60,8 +59,6 @@ class NavigationActivity : AppCompatActivity(), SimpleStateChanger.NavigationHan } private fun initNavigation() { - Timber.d("Init setup navigation") - fragmentStateChanger = DefaultFragmentStateChanger( supportFragmentManager, binding.fragmentContainer.id diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseKey.kt b/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseKey.kt index 2edcee4..6713aca 100644 --- a/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseKey.kt +++ b/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseKey.kt @@ -23,5 +23,5 @@ import com.zhuinden.simplestackextensions.fragments.DefaultFragmentKey abstract class BaseKey : DefaultFragmentKey() { - override fun getFragmentTag(): String = this.javaClass.simpleName + override fun getFragmentTag(): String = this.javaClass.name } diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseServiceKey.kt b/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseServiceKey.kt index 46358cb..c7f4845 100644 --- a/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseServiceKey.kt +++ b/husky/app/src/main/java/com/keylesspalace/tusky/core/ui/navigation/BaseServiceKey.kt @@ -23,5 +23,5 @@ import com.zhuinden.simplestackextensions.services.DefaultServiceProvider abstract class BaseServiceKey : BaseKey(), DefaultServiceProvider.HasServices { - override fun getScopeTag(): String = this.javaClass.simpleName + override fun getScopeTag(): String = this.javaClass.name } diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/fragments/LoginFragment.kt b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/fragments/LoginFragment.kt new file mode 100644 index 0000000..dabe354 --- /dev/null +++ b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/fragments/LoginFragment.kt @@ -0,0 +1,44 @@ +package com.keylesspalace.tusky.refactor_features.login.view.fragments + +import android.os.Bundle +import android.view.View +import androidx.appcompat.app.AlertDialog +import com.keylesspalace.tusky.R +import com.keylesspalace.tusky.core.extensions.dialogWithLink +import com.keylesspalace.tusky.core.extensions.viewBinding +import com.keylesspalace.tusky.core.extensions.viewObserve +import com.keylesspalace.tusky.core.ui.fragment.BaseFragment +import com.keylesspalace.tusky.databinding.ActivityLoginBinding +import com.keylesspalace.tusky.refactor_features.login.view.viewmodel.LoginViewModel +import com.zhuinden.simplestackextensions.fragmentsktx.lookup + +class LoginFragment : BaseFragment(R.layout.activity_login) { + + private val binding by viewBinding(ActivityLoginBinding::bind) + private val viewModel by lazy { lookup() } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + initObservers() + initListeners() + } + + private fun initObservers() { + with(viewModel) { + viewObserve(verifyUrl, ::handleVerifyUrl) + } + } + + private fun initListeners() { + binding.whatsAnInstanceTextView.setOnClickListener { + AlertDialog.Builder(requireActivity()).dialogWithLink( + getString(R.string.dialog_whats_an_instance), + getString(R.string.action_close) + ) + } + } + + private fun handleVerifyUrl(isValid: Boolean?) { + } +} diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/navigation/LoginKey.kt b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/navigation/LoginKey.kt new file mode 100644 index 0000000..95c0e92 --- /dev/null +++ b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/navigation/LoginKey.kt @@ -0,0 +1,21 @@ +package com.keylesspalace.tusky.refactor_features.login.view.navigation + +import androidx.fragment.app.Fragment +import com.keylesspalace.tusky.core.ui.navigation.BaseServiceKey +import com.keylesspalace.tusky.refactor_features.login.view.fragments.LoginFragment +import com.keylesspalace.tusky.refactor_features.login.view.viewmodel.LoginViewModel +import com.zhuinden.simplestack.ServiceBinder +import com.zhuinden.simplestackextensions.servicesktx.add +import kotlinx.android.parcel.Parcelize + +@Parcelize +class LoginKey : BaseServiceKey() { + + override fun instantiateFragment(): Fragment { + return LoginFragment() + } + + override fun bindServices(serviceBinder: ServiceBinder) { + serviceBinder.add(LoginViewModel()) + } +} diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModel.kt b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModel.kt new file mode 100644 index 0000000..34647cb --- /dev/null +++ b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModel.kt @@ -0,0 +1,36 @@ +package com.keylesspalace.tusky.refactor_features.login.view.viewmodel + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.keylesspalace.tusky.core.ui.viewmodel.BaseViewModel +import com.zhuinden.statebundle.StateBundle +import timber.log.Timber + +class LoginViewModel : BaseViewModel() { + + private val mVerifyUrl = MutableLiveData() + val verifyUrl: LiveData + get() = mVerifyUrl + + override fun toBundle(): StateBundle { + val stateBundle = StateBundle() + + stateBundle.putBoolean(LoginViewModelKeys.Bundle.VERIFY_URL, mVerifyUrl.value ?: false) + + Timber.d("TO BUNDLE") + + return stateBundle + } + + override fun fromBundle(bundle: StateBundle?) { + bundle?.let { + mVerifyUrl.value = it.getBoolean(LoginViewModelKeys.Bundle.VERIFY_URL) + + Timber.d("FROM BUNDLE") + } + } + + fun verifyUrl(url: String?) { + mVerifyUrl.value = false + } +} diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModelKeys.kt b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModelKeys.kt new file mode 100644 index 0000000..d70576a --- /dev/null +++ b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/login/view/viewmodel/LoginViewModelKeys.kt @@ -0,0 +1,8 @@ +package com.keylesspalace.tusky.refactor_features.login.view.viewmodel + +sealed class LoginViewModelKeys { + + object Bundle { + const val VERIFY_URL = "verifyUrl" + } +} diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/splash/view/fragments/SplashFragment.kt b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/splash/view/fragments/SplashFragment.kt index 5ff33d1..5eabaf8 100644 --- a/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/splash/view/fragments/SplashFragment.kt +++ b/husky/app/src/main/java/com/keylesspalace/tusky/refactor_features/splash/view/fragments/SplashFragment.kt @@ -1,16 +1,26 @@ package com.keylesspalace.tusky.refactor_features.splash.view.fragments +import android.os.Bundle +import android.view.View import com.keylesspalace.tusky.R import com.keylesspalace.tusky.core.extensions.viewBinding import com.keylesspalace.tusky.core.ui.fragment.BaseFragment import com.keylesspalace.tusky.databinding.FragmentSplashBinding +import com.keylesspalace.tusky.refactor_features.login.view.navigation.LoginKey import com.keylesspalace.tusky.refactor_features.splash.view.viewmodel.SplashViewModel +import com.zhuinden.simplestack.History +import com.zhuinden.simplestack.StateChange +import com.zhuinden.simplestackextensions.fragmentsktx.backstack import com.zhuinden.simplestackextensions.fragmentsktx.lookup - class SplashFragment : BaseFragment(R.layout.fragment_splash) { private val binding by viewBinding(FragmentSplashBinding::bind) - private val viewModel: SplashViewModel by lazy { lookup() } + private val viewModel by lazy { lookup() } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + backstack.setHistory(History.single(LoginKey()), StateChange.FORWARD) + } } diff --git a/husky/app/src/main/res/layout/activity_login.xml b/husky/app/src/main/res/layout/activity_login.xml index d2c6ec9..a805a69 100644 --- a/husky/app/src/main/res/layout/activity_login.xml +++ b/husky/app/src/main/res/layout/activity_login.xml @@ -23,11 +23,11 @@ android:padding="16dp"> - + + android:orientation="vertical" + android:visibility="gone"> + - + - + - + - + + - + +