Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/gradle.xml

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

12 changes: 12 additions & 0 deletions .idea/misc.xml

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

6 changes: 6 additions & 0 deletions .idea/vcs.xml

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

8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# AndroidD20
![image](https://user-images.githubusercontent.com/90551685/181299623-4ea34eef-fab2-4ed8-b627-c5c51091cc0e.png)
Lúc này chưa có cái gì cả, nhập kiểu gì cũng báo lỗi sau do không có tài khoản nào đã đăng kí. Ấn textview sign up sẽ chuyển sang fragment đăng kí
![image](https://user-images.githubusercontent.com/90551685/181590987-43e0b46d-5dbc-460a-bb78-ba4071d79acc.png)
Đã đăng kí thành công tài khoản và mât khẩu là 123 lưu vào list, sau đó truyền data vào fragment đăng nhập
![image](https://user-images.githubusercontent.com/90551685/181300481-dd9f0ea1-d55c-414d-80b2-509a335743cf.png)
sau khi đăng nhâp thì đã thành côgn trong việc truyền data tài khoản chính xác vào trong activity thứ 2
Nút logout để quay lại activity 1
7 changes: 6 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id("kotlin-parcelize")
}

android {
compileSdk 32

compileSdk 33

defaultConfig {
applicationId "com.sudo.androidd20"
Expand All @@ -22,6 +24,9 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
buildFeatures {
viewBinding = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.AndroidD20"
tools:targetApi="31">
<activity
android:name=".MainActivity2"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
Expand Down
87 changes: 87 additions & 0 deletions app/src/main/java/com/sudo/androidd20/LoginFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.sudo.androidd20

import android.content.Intent
import android.graphics.Paint
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.View.inflate
import android.view.ViewGroup
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.content.res.ComplexColorCompat.inflate
import androidx.fragment.app.FragmentTransaction
import com.sudo.androidd20.databinding.ActivityMainBinding.inflate
import com.sudo.androidd20.databinding.FragmentLoginBinding
import com.sudo.androidd20.databinding.FragmentLoginBinding.inflate
import com.sudo.androidd20.databinding.FragmentSignUpBinding
import com.sudo.androidd20.databinding.FragmentSignUpBinding.inflate

class LoginFragment : Fragment() {
private var _binding: FragmentLoginBinding? = null
private val binding get() = _binding!!
private var accounts: ArrayList<User> = arrayListOf()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentLoginBinding.inflate(inflater, container, false)
binding.tvSignUp.paintFlags = Paint.UNDERLINE_TEXT_FLAG
//getting data
arguments?.let {
accounts = it.getSerializable("acc") as ArrayList<User>
}
binding.btnLogin.setOnClickListener {
val email = binding.etEmail.text.toString()
val password = binding.etPassword.text.toString()
if (!isEmailValid(email)) Toast.makeText(
context,
"You did not enter email in the right way!",
Toast.LENGTH_LONG
).show()
else if (email.isEmpty()) Toast.makeText(
context,
"Email must not be empty",
Toast.LENGTH_SHORT
).show()
else if (password.isEmpty()) Toast.makeText(
context,
"Password must not be empty",
Toast.LENGTH_LONG
).show()
val loginUser = User(email, password)
if (accounts.contains(loginUser)) {
val intent = Intent(context, MainActivity2::class.java)
//passing infor to the other activity
intent.putExtra("name", loginUser.email.toString())
intent.putExtra("password", loginUser.password.toString())
startActivity(intent)
} else {
Toast.makeText(context, "Incorrect password or account", Toast.LENGTH_SHORT).show()
}

}

binding.tvSignUp.setOnClickListener {
val fragmentSignUp = SignUpFragment()
val transaction = requireActivity().supportFragmentManager.beginTransaction()
transaction.apply {
replace(R.id.fragment_menu, fragmentSignUp)
commit()
}
}





return binding.root
}

private fun isEmailValid(email: String): Boolean {
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()
}

}
9 changes: 9 additions & 0 deletions app/src/main/java/com/sudo/androidd20/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,19 @@ package com.sudo.androidd20

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager

class MainActivity : AppCompatActivity() {
private val loginInFragment = LoginFragment()
// val signUpFragment= SignUpFragment()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportFragmentManager.beginTransaction().apply {
replace(R.id.fragment_menu, loginInFragment)
commit()
}
}
}
31 changes: 31 additions & 0 deletions app/src/main/java/com/sudo/androidd20/MainActivity2.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.sudo.androidd20

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View.inflate
import androidx.appcompat.resources.Compatibility.Api21Impl.inflate
import androidx.core.content.res.ColorStateListInflaterCompat.inflate
import androidx.core.content.res.ComplexColorCompat.inflate
import androidx.core.graphics.drawable.DrawableCompat.inflate
import com.sudo.androidd20.databinding.ActivityMain2Binding
import com.sudo.androidd20.databinding.ActivityMain2Binding.inflate
import com.sudo.androidd20.databinding.ActivityMainBinding.inflate
import com.sudo.androidd20.databinding.FragmentLoginBinding.inflate
import com.sudo.androidd20.databinding.FragmentSignUpBinding.inflate

class MainActivity2 : AppCompatActivity() {
private lateinit var binding: ActivityMain2Binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding=ActivityMain2Binding.inflate(layoutInflater)
setContentView(binding.root)
binding.tvName.text = intent?.getStringExtra("name").toString()
binding.tvPass.text = intent?.getStringExtra("password").toString()
binding.btnLogout.setOnClickListener {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}

}
}
74 changes: 74 additions & 0 deletions app/src/main/java/com/sudo/androidd20/SignUpFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.sudo.androidd20

import android.graphics.Paint
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import com.sudo.androidd20.databinding.FragmentSignUpBinding


class SignUpFragment : Fragment() {

private var _binding: FragmentSignUpBinding? = null
private val binding get() = _binding!!
private val accounts: ArrayList<User> = arrayListOf()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentSignUpBinding.inflate(inflater, container, false)
binding.tvLogin.paintFlags = Paint.UNDERLINE_TEXT_FLAG
binding.btnSignup.setOnClickListener {
val email = binding.etEmail.text.toString()
val password = binding.etPassword.text.toString()
val confirmPassword = binding.etConfirmPassword.text.toString()
if (!isEmailValid(email)) Toast.makeText(
context,
"You did not enter email in the right way!",
Toast.LENGTH_LONG
).show()
else if (email.isEmpty()) Toast.makeText(
context,
"Email must not be empty",
Toast.LENGTH_SHORT
).show()
else if (confirmPassword != password) Toast.makeText(
context,
"Confirm password is not correct!",
Toast.LENGTH_LONG
).show()
else if (password.isEmpty()) Toast.makeText(
context,
"Password must not be empty",
Toast.LENGTH_LONG
).show()
else {
accounts.add(User(email, password))
Toast.makeText(context, "$email has just been created", Toast.LENGTH_SHORT).show()
}

}
binding.tvLogin.setOnClickListener {
val fragmentLogin = LoginFragment()
//passing data
val bundle = Bundle()
fragmentLogin.arguments = bundle
bundle.putSerializable("acc", accounts)
//transition
val transaction = requireActivity().supportFragmentManager.beginTransaction()
transaction.apply {
replace(R.id.fragment_menu, fragmentLogin)
commit()
}
}
return binding.root
}

private fun isEmailValid(email: String): Boolean {
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()
}
}
7 changes: 7 additions & 0 deletions app/src/main/java/com/sudo/androidd20/User.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.sudo.androidd20

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class User(val email: String?, val password: String?) : Parcelable
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/bg_gradient_khongxau.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<gradient
android:angle="-90"
android:endColor="@color/white"
android:startColor="#00e9fa"
android:type="linear" />
</shape>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/rounded_button.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#eeffffff" />
<corners android:bottomRightRadius="8dp"
android:bottomLeftRadius="8dp"
android:topRightRadius="8dp"
android:topLeftRadius="8dp"/>
</shape>
17 changes: 12 additions & 5 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,22 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_gradient_khongxau"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"

<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_menu"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBaseline_toBottomOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />


</androidx.constraintlayout.widget.ConstraintLayout>
42 changes: 42 additions & 0 deletions app/src/main/res/layout/activity_main2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<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="@drawable/bg_gradient_khongxau"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity2">

<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:text="1"
android:textAlignment="center"
android:textColor="#ffffff"
android:textSize="60dp" />

<TextView
android:id="@+id/tvPass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:text="1"
android:textAlignment="center"
android:textColor="#ffffff"
android:textSize="60dp" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnLogout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:background="@drawable/rounded_button"
android:backgroundTint="#00affa"
android:text="Logout" />


</LinearLayout>
Loading