-
Notifications
You must be signed in to change notification settings - Fork 1
Lq dung #5
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
base: master
Are you sure you want to change the base?
Lq dung #5
Changes from all commits
f1307e5
41b35ac
58f2a3a
facfe8d
a441833
ae04ea4
e46cf36
46a206b
fc59feb
86f2ab9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # AndroidD20 | ||
| ## Màn hình khi mở App - LoginFragment (thuộc LoginActivity) | ||
|
|
||
|  | ||
|
|
||
|
|
||
| ## Màn hình SignUp - SignUpFragment (Thuộc LoginActivity) | ||
|  | ||
|
|
||
| ## Màn hình sau khi đăng ký thành công - LoginFragment (thuộc LoginActivity) | ||
|  | ||
|
|
||
| ## Màn hình sau khi đăng nhập thành công - MainActivity: | ||
|  | ||
|
|
||
| //Sau khi đăng nhập thành công sẽ gọi `finish()` của `LoginActivity` để khi nhấn back không quay trở lại màn hình Login. | ||
|
|
||
| //Bấm `Logout` sẽ gọi `finish()` đóng App. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| package com.sudo.androidd20 | ||
|
|
||
| import androidx.appcompat.app.AppCompatActivity | ||
| import android.os.Bundle | ||
| import android.util.Log | ||
| import androidx.fragment.app.add | ||
| import androidx.fragment.app.commit | ||
| import com.sudo.androidd20.data.User | ||
| import com.sudo.androidd20.fragment.LogInFragment | ||
|
|
||
| class LoginActivity : AppCompatActivity()/*, LogInFragment.GetUsersListListener, | ||
| SignUpFragment.UpdateUsersListListener*/ { | ||
| //private val loginModel: LoginModel by viewModels() | ||
| private lateinit var listUser: MutableList<User> | ||
|
|
||
| override fun onCreate(savedInstanceState: Bundle?) { | ||
| super.onCreate(savedInstanceState) | ||
| setContentView(R.layout.activity_login) | ||
|
|
||
| linkToLoginFragment() | ||
| loadUsersData() | ||
| } | ||
|
|
||
| private fun linkToLoginFragment() { | ||
| supportFragmentManager.commit { | ||
| add<LogInFragment>(R.id.fragment_container) | ||
| } | ||
| } | ||
|
|
||
| //mục đích chính là load dữ liệu người dùng từ database nên em đặt tên thế này | ||
| private fun loadUsersData() { | ||
| // loginModel.add( | ||
| // User( | ||
| // email = "admin", | ||
| // userName = "admin", | ||
| // password = "admin" | ||
| // ) | ||
| // ) | ||
|
|
||
| listUser = mutableListOf( | ||
| User( | ||
| email = "admin", | ||
| userName = "admin", | ||
| password = "admin" | ||
| ) | ||
| ) | ||
|
|
||
| Log.i("LoginModel", "add S4ltF1sh!") | ||
| } | ||
|
|
||
| // override fun getUsersList(): MutableList<User> { | ||
| // return listUser | ||
| // } | ||
| // | ||
| // override fun addUser(user: User) { | ||
| // listUser.add(user) | ||
| // } | ||
|
|
||
| public fun getUsersList(): MutableList<User> { | ||
| return listUser | ||
| } | ||
|
|
||
| public fun updateUsersList(user: User) { | ||
| listUser.add(user) | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| package com.sudo.androidd20.data | ||
|
|
||
| import java.io.Serializable | ||
|
|
||
| data class User( | ||
| var email: String, | ||
| var userName: String, | ||
| var password: String, | ||
| val name: String = "Lê Quang Dũng", | ||
| var age: Int = 19, | ||
| ) : Serializable |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| package com.sudo.androidd20.data | ||
|
|
||
| import androidx.room.Dao | ||
| import androidx.room.Insert | ||
| import androidx.room.Query | ||
|
|
||
| @Dao | ||
| interface UserDao { | ||
| @Insert | ||
| fun insertUser(vararg user: User) | ||
|
|
||
| @Query("SELECT * FROM User ") | ||
| fun getAllUsers(): List<User> | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| package com.sudo.androidd20.data | ||
|
|
||
| import android.content.Context | ||
| import androidx.room.Database | ||
| import androidx.room.Room | ||
| import androidx.room.RoomDatabase | ||
|
|
||
| @Database(entities = [User::class], version = 1) | ||
| abstract class UserDataBase : RoomDatabase() { | ||
| abstract fun userDao(): UserDao | ||
|
|
||
| companion object { | ||
| // Singleton prevents multiple instances of database opening at the | ||
| // same time. | ||
| @Volatile | ||
| private var INSTANCE: UserDataBase? = null | ||
|
|
||
| fun getDatabase(context: Context): UserDataBase { | ||
| // if the INSTANCE is not null, then return it, | ||
| // if it is, then create the database | ||
| return INSTANCE ?: synchronized(this) { | ||
| val instance = Room.databaseBuilder( | ||
| context.applicationContext, | ||
| UserDataBase::class.java, | ||
| "word_database" | ||
| ).build() | ||
| INSTANCE = instance | ||
| // return instance | ||
| instance | ||
| } | ||
| } | ||
| } | ||
| } | ||
Sudo248 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| package com.sudo.androidd20.fragment | ||
|
|
||
| import android.content.Intent | ||
| import android.os.Bundle | ||
| import androidx.fragment.app.Fragment | ||
| import android.view.LayoutInflater | ||
| import android.view.View | ||
| import android.view.ViewGroup | ||
| import androidx.fragment.app.setFragmentResultListener | ||
| import com.sudo.androidd20.LoginActivity | ||
| import com.sudo.androidd20.MainActivity | ||
| import com.sudo.androidd20.R | ||
| import com.sudo.androidd20.data.User | ||
| import com.sudo.androidd20.databinding.FragmentLoginBinding | ||
|
|
||
| class LogInFragment : Fragment() { | ||
| private lateinit var binding: FragmentLoginBinding | ||
|
|
||
| // private val loginModel: LoginModel by activityViewModels() | ||
| private lateinit var listUser: MutableList<User> | ||
|
|
||
| // interface GetUsersListListener { | ||
| // fun getUsersList(): MutableList<User> | ||
| // } | ||
| // | ||
| // private lateinit var getUsersListListener: GetUsersListListener | ||
| // | ||
| // override fun onAttach(context: Context) { | ||
| // super.onAttach(context) | ||
| // getUsersListListener = context as GetUsersListListener | ||
| // } | ||
|
|
||
| override fun onCreateView( | ||
| inflater: LayoutInflater, container: ViewGroup?, | ||
| savedInstanceState: Bundle? | ||
| ): View? { | ||
| binding = FragmentLoginBinding.inflate(inflater, container, false) | ||
|
|
||
| //tạo setFragmentResultListener để lắng nghe kết quả trả về (dưới dạng Bundle) | ||
| setFragmentResultListener("result_to_fragment_login") { _, bundle -> | ||
| //Sau khi lấy được dữ liệu trả về sẽ xử lý và gán username cho phần ô nhập | ||
| val result = bundle.get("userName") | ||
| binding.edtEnterEmail.setText(result.toString()) | ||
| } | ||
|
|
||
| setOnClick() | ||
|
|
||
| return binding.root | ||
| } | ||
|
|
||
| private fun setOnClick() { | ||
| binding.apply { | ||
| tvSignUp.setOnClickListener { | ||
| changeToSignUpFragment() | ||
| } | ||
|
|
||
| btnLogin.setOnClickListener { | ||
| login() | ||
| } | ||
| } | ||
| } | ||
|
|
||
| private fun changeToSignUpFragment() { | ||
| //với transaction | ||
| parentFragmentManager.apply { | ||
| beginTransaction() | ||
| .replace(R.id.fragment_container, SignUpFragment()) | ||
| .addToBackStack(null) | ||
| .commit() | ||
| } | ||
|
|
||
| //Với nav graph | ||
| //findNavController().navigate(R.id.action_logInFragment_to_signUpFragment) | ||
| } | ||
|
|
||
| private fun login() { | ||
| // loginModel.users.observe(viewLifecycleOwner, Observer<MutableList<User>> { | ||
| // listUser = it | ||
| // Log.i("LoginModel", "$it") | ||
| // }) | ||
|
|
||
| // listUser = getUsersListListener.getUsersList() | ||
| listUser = (activity as LoginActivity).getUsersList() | ||
|
|
||
| val enteredEmail = binding.edtEnterEmail.text.toString() | ||
| val enteredPassword = binding.edtEnterPassword.text.toString() | ||
|
|
||
| if (enteredEmail != "" && enteredPassword != "") { | ||
| for (user in listUser) { | ||
| try { | ||
| if ((user.userName == enteredEmail || user.email == enteredEmail) && user.password == enteredPassword) { | ||
| val intent = Intent(context, MainActivity::class.java) | ||
| val bundle = Bundle() | ||
|
|
||
| bundle.putSerializable("userData", user) | ||
| intent.putExtras(bundle) | ||
|
|
||
| startActivity(intent) | ||
|
|
||
| activity?.finish() | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Biết dùng activity để finish mà k biết biết dùng activity để lấy dữ liệu từ activity cha à? |
||
| } | ||
| } catch (e: Exception) { | ||
| throw e | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nên tách hàm riêng, có thể dùng with(binding) hoặc binding.apply