Skip to content

Commit

Permalink
Abstract authentication and add some fragments for MainActivity
Browse files Browse the repository at this point in the history
  • Loading branch information
andraantariksa committed Apr 9, 2022
1 parent bb1d83b commit 5e2f6be
Show file tree
Hide file tree
Showing 46 changed files with 814 additions and 260 deletions.
10 changes: 8 additions & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ android {
}

dependencies {
implementation project(":core")

// Lifecycle
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion"
Expand Down
8 changes: 7 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
xmlns:tools="http:https://schemas.android.com/tools"
package="id.shaderboi.koffie">

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:name=".KoffieApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Koffie"
android:theme="@style/Theme.Koffie.SplashScreen"
tools:replace="android:allowBackup">
<activity
android:name=".ui.main.MainActivity"
Expand Down
3 changes: 0 additions & 3 deletions app/src/main/kotlin/id/shaderboi/koffie/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,4 @@ import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
@Singleton
fun provideFirebaseAuth(): FirebaseAuth = FirebaseAuth.getInstance()
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@ package id.shaderboi.koffie.ui.auth
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.databinding.ActivityAuthBinding
import id.shaderboi.koffie.ui.auth.view_model.SignInViewModel
import id.shaderboi.koffie.ui.common.view_model.AuthViewModel
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

@AndroidEntryPoint
class AuthActivity : AppCompatActivity() {
private var _binding: ActivityAuthBinding? = null
val binding get() = _binding!!

private val signInViewModel by viewModels<SignInViewModel>()
private val authViewModel by viewModels<AuthViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down
49 changes: 0 additions & 49 deletions app/src/main/kotlin/id/shaderboi/koffie/ui/auth/VerifyFragment.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package id.shaderboi.koffie.ui.auth
package id.shaderboi.koffie.ui.auth.registration

import android.os.Bundle
import android.view.LayoutInflater
Expand All @@ -7,24 +7,17 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController
import com.google.firebase.auth.FirebaseAuth
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.databinding.FragmentRegistrationBinding
import id.shaderboi.koffie.databinding.FragmentSigninBinding
import id.shaderboi.koffie.databinding.FragmentVerifyBinding
import id.shaderboi.koffie.ui.auth.view_model.SignInEvent
import id.shaderboi.koffie.ui.auth.view_model.SignInViewModel
import javax.inject.Inject
import id.shaderboi.koffie.ui.common.view_model.AuthEvent
import id.shaderboi.koffie.ui.common.view_model.AuthViewModel

@AndroidEntryPoint
class RegistrationFragment : Fragment() {
private var _binding: FragmentRegistrationBinding? = null
val binding get() = _binding!!

@Inject
lateinit var firebaseAuth: FirebaseAuth

private val signInViewModel by activityViewModels<SignInViewModel>()
private val signInViewModel by activityViewModels<AuthViewModel>()

override fun onCreateView(
inflater: LayoutInflater,
Expand All @@ -41,9 +34,9 @@ class RegistrationFragment : Fragment() {
private fun setupView() {
val navController = binding.root.findNavController()

binding.buttonSignIn.setOnClickListener {
val phoneNumber = binding.editTextPhone.text.toString()
signInViewModel.onEvent(SignInEvent.Verify(phoneNumber, requireActivity(), navController))
binding.buttonSignInSignUp.setOnClickListener {
val phoneNumber = binding.editTextVerificationCode1.text.toString()
signInViewModel.onEvent(AuthEvent.Verify(phoneNumber, requireActivity(), navController))
}
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,23 @@
package id.shaderboi.koffie.ui.auth
package id.shaderboi.koffie.ui.auth.signin

import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import com.google.firebase.FirebaseException
import com.google.firebase.auth.*
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.databinding.FragmentSigninBinding
import id.shaderboi.koffie.ui.auth.view_model.SignInEvent
import id.shaderboi.koffie.ui.auth.view_model.SignInViewModel
import id.shaderboi.koffie.ui.main.MainActivity
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import id.shaderboi.koffie.ui.common.view_model.AuthEvent
import id.shaderboi.koffie.ui.common.view_model.AuthViewModel

@AndroidEntryPoint
class SignInFragment : Fragment() {
private var _binding: FragmentSigninBinding? = null
val binding get() = _binding!!

@Inject
lateinit var firebaseAuth: FirebaseAuth

private val signInViewModel by activityViewModels<SignInViewModel>()
private val signInViewModel by activityViewModels<AuthViewModel>()

override fun onCreateView(
inflater: LayoutInflater,
Expand All @@ -43,10 +33,10 @@ class SignInFragment : Fragment() {

private fun setupView() {
val navController = findNavController()
binding.buttonSignIn.setOnClickListener {
val phoneNumber = binding.editTextPhone.text.toString()
binding.buttonSignInSignUp.setOnClickListener {
val phoneNumber = binding.editTextPhoneNumber.text.toString()
signInViewModel.onEvent(
SignInEvent.SignIn(
AuthEvent.Auth(
phoneNumber,
requireActivity()
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package id.shaderboi.koffie.ui.auth.verify

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.databinding.FragmentVerifyBinding
import id.shaderboi.koffie.ui.common.view_model.AuthEvent
import id.shaderboi.koffie.ui.common.view_model.AuthViewModel

@AndroidEntryPoint
class VerifyFragment : Fragment() {
private var _binding: FragmentVerifyBinding? = null
val binding get() = _binding!!

private val signInViewModel by activityViewModels<AuthViewModel>()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentVerifyBinding.inflate(inflater, container, false)

setupView()

return binding.root
}

private fun setupView() {
binding.editTextVerificationCode1.requestFocus()
binding.editTextVerificationCode1.doOnTextChanged { text, start, before, count ->
if (count > 0) {
binding.editTextVerificationCode2.requestFocus()
}
}
binding.editTextVerificationCode2.doOnTextChanged { text, start, before, count ->
if (count == 0) {
binding.editTextVerificationCode1.requestFocus()
} else {
binding.editTextVerificationCode3.requestFocus()
}
}
binding.editTextVerificationCode3.doOnTextChanged { text, start, before, count ->
if (count == 0) {
binding.editTextVerificationCode2.requestFocus()
} else {
binding.editTextVerificationCode4.requestFocus()
}
}
binding.editTextVerificationCode4.doOnTextChanged { text, start, before, count ->
if (count == 0) {
binding.editTextVerificationCode3.requestFocus()
} else {
binding.editTextVerificationCode5.requestFocus()
}
}
binding.editTextVerificationCode5.doOnTextChanged { text, start, before, count ->
if (count == 0) {
binding.editTextVerificationCode4.requestFocus()
} else {
binding.editTextVerificationCode6.requestFocus()
}
}
binding.editTextVerificationCode6.doOnTextChanged { text, start, before, count ->
if (count == 0) {
binding.editTextVerificationCode5.requestFocus()
} else {
verify()
}
}

binding.buttonVerify.setOnClickListener {
verify()
}
}

private fun verify() {
val navController = findNavController()

val verificationCode = binding.editTextVerificationCode1.text.toString() +
binding.editTextVerificationCode2.text.toString() +
binding.editTextVerificationCode3.text.toString() +
binding.editTextVerificationCode4.text.toString() +
binding.editTextVerificationCode5.text.toString() +
binding.editTextVerificationCode6.text.toString()
signInViewModel.onEvent(
AuthEvent.Verify(
verificationCode,
requireActivity(),
navController
)
)
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package id.shaderboi.koffie.ui.common.view_model

import android.app.Activity
import androidx.navigation.NavController

sealed class AuthEvent {
class Auth(val phoneNumber: String, val activity: Activity, val onSent: () -> Unit) :
AuthEvent()

class Verify(
val verificationCode: String,
val activity: Activity,
val navController: NavController
) : AuthEvent()

object SignOut : AuthEvent()
}
Loading

0 comments on commit 5e2f6be

Please sign in to comment.