Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
Your Cashier
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ahmad Abi Mulya
Your Cashier
Commits
704c5d53
Commit
704c5d53
authored
Sep 06, 2020
by
Ahmad Abi Mulya
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://git.mdd.co.id:44195/abimulya/your-cashier
parents
53ce4365
352d8b6d
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
481 additions
and
95 deletions
+481
-95
build.gradle
app/build.gradle
+1
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+5
-2
ForgetPassword.java
...om/example/yourcashiertest/activities/ForgetPassword.java
+19
-21
LoginActivity.java
...com/example/yourcashiertest/activities/LoginActivity.java
+5
-1
PrefManager.java
...a/com/example/yourcashiertest/activities/PrefManager.java
+18
-0
VerificationActivity.java
...mple/yourcashiertest/activities/VerificationActivity.java
+67
-0
VerifyMailFragment.java
...xample/yourcashiertest/activities/VerifyMailFragment.java
+97
-0
ForgotPassword.java
...va/com/example/yourcashiertest/models/ForgotPassword.java
+25
-0
NewPassword.java
.../java/com/example/yourcashiertest/models/NewPassword.java
+27
-0
Password.java
...ain/java/com/example/yourcashiertest/models/Password.java
+20
-12
UserService.java
...ava/com/example/yourcashiertest/services/UserService.java
+9
-2
UserViewModel.java
...com/example/yourcashiertest/viewmodels/UserViewModel.java
+36
-5
activity_forget_password.xml
app/src/main/res/layout/activity_forget_password.xml
+15
-52
activity_verification.xml
app/src/main/res/layout/activity_verification.xml
+107
-0
fragment_verify_mail.xml
app/src/main/res/layout/fragment_verify_mail.xml
+28
-0
strings.xml
app/src/main/res/values/strings.xml
+2
-0
No files found.
app/build.gradle
View file @
704c5d53
...
@@ -36,6 +36,7 @@ dependencies {
...
@@ -36,6 +36,7 @@ dependencies {
implementation
'com.google.android.material:material:1.2.0'
implementation
'com.google.android.material:material:1.2.0'
implementation
'androidx.constraintlayout:constraintlayout:1.1.3'
implementation
'androidx.constraintlayout:constraintlayout:1.1.3'
implementation
'androidx.viewpager:viewpager:1.0.0'
implementation
'androidx.viewpager:viewpager:1.0.0'
implementation
'androidx.legacy:legacy-support-v4:1.0.0'
def
room_version
=
"2.2.5"
def
room_version
=
"2.2.5"
...
...
app/src/main/AndroidManifest.xml
View file @
704c5d53
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
package=
"com.example.yourcashiertest"
>
package=
"com.example.yourcashiertest"
>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.WAKE_LOCK"
/>
<uses-permission
android:name=
"android.permission.WAKE_LOCK"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
...
@@ -21,11 +21,14 @@
...
@@ -21,11 +21,14 @@
android:roundIcon=
"@mipmap/ic_launcher_round"
android:roundIcon=
"@mipmap/ic_launcher_round"
android:supportsRtl=
"true"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme2"
>
android:theme=
"@style/AppTheme2"
>
<activity
android:name=
".activities.OrderDetailActivity"
></activity>
<activity
android:name=
".activities.VerificationActivity"
></activity>
<activity
android:name=
".activities.OrderDetailActivity"
/>
<service
<service
android:name=
".services.BackgroundService"
android:name=
".services.BackgroundService"
android:enabled=
"true"
android:enabled=
"true"
android:exported=
"true"
/>
android:exported=
"true"
/>
<receiver
android:name=
".activities.InetChecker"
>
<receiver
android:name=
".activities.InetChecker"
>
<intent-filter>
<intent-filter>
<action
android:name=
"android.net.conn.CONNECTIVITY_CHANGE"
/>
<action
android:name=
"android.net.conn.CONNECTIVITY_CHANGE"
/>
...
...
app/src/main/java/com/example/yourcashiertest/activities/ForgetPassword.java
View file @
704c5d53
...
@@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModelProvider;
...
@@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModelProvider;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.util.Log
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.Toast
;
import
android.widget.Toast
;
...
@@ -14,12 +15,14 @@ import android.widget.Toast;
...
@@ -14,12 +15,14 @@ import android.widget.Toast;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.ActivityForgetPasswordBinding
;
import
com.example.yourcashiertest.databinding.ActivityForgetPasswordBinding
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.utils.ViewUtil
;
import
com.example.yourcashiertest.viewmodels.UserViewModel
;
import
com.example.yourcashiertest.viewmodels.UserViewModel
;
public
class
ForgetPassword
extends
AppCompatActivity
{
public
class
ForgetPassword
extends
AppCompatActivity
{
ActivityForgetPasswordBinding
binding
;
ActivityForgetPasswordBinding
binding
;
UserViewModel
userViewModel
;
UserViewModel
userViewModel
;
PrefManager
prefManager
;
@Override
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
...
@@ -27,30 +30,25 @@ public class ForgetPassword extends AppCompatActivity {
...
@@ -27,30 +30,25 @@ public class ForgetPassword extends AppCompatActivity {
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_forget_password
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_forget_password
);
userViewModel
=
new
ViewModelProvider
(
this
,
new
ViewModelProvider
.
NewInstanceFactory
()).
get
(
UserViewModel
.
class
);
userViewModel
=
new
ViewModelProvider
(
this
,
new
ViewModelProvider
.
NewInstanceFactory
()).
get
(
UserViewModel
.
class
);
userViewModel
.
setListUser
();
binding
.
btnVerifyToken
.
setOnClickListener
(
this
::
SendToken
);
binding
.
btnResetPw
.
setOnClickListener
(
v
->
{
resetPassword
();
binding
.
setLoading
(
true
);
});
}
}
public
void
resetPassword
()
{
private
void
SendToken
(
View
v
){
userViewModel
.
getListUser
().
observe
(
this
,
users
->
{
prefManager
=
new
PrefManager
(
this
);
for
(
int
i
=
0
;
i
<
users
.
size
();
i
++){
String
inputToken
=
binding
.
etToken
.
getText
().
toString
();
if
(
binding
.
etEmail
.
getText
().
toString
().
equals
(
users
.
get
(
i
).
getEmail
())){
binding
.
setLoading
(
false
);
Password
password
=
new
Password
();
if
(!
TextUtils
.
isEmpty
(
inputToken
)){
password
.
setNewPassword
(
binding
.
etNewPw
.
getText
().
toString
());
if
(
prefManager
.
getTokenVerify
().
equals
(
inputToken
)){
userViewModel
.
resetPassword
(
users
.
get
(
i
).
getId
()
,
password
);
binding
.
setLoading
(
true
);
binding
.
setLoading
(
false
);
Toast
.
makeText
(
getApplicationContext
(),
"Successfully validation!"
,
Toast
.
LENGTH_SHORT
).
show
();
Toast
.
makeText
(
ForgetPassword
.
this
,
"Reset Password Success"
,
Toast
.
LENGTH_LONG
).
show
();
startActivity
(
new
Intent
(
this
,
VerificationActivity
.
class
));
startActivity
(
new
Intent
(
ForgetPassword
.
this
,
LoginActivity
.
class
));
}
else
{
finish
();
Toast
.
makeText
(
getApplicationContext
(),
"Your input token is invalid!"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
}
}
}
binding
.
setLoading
(
false
);
}
else
{
Toast
.
makeText
(
ForgetPassword
.
this
,
"User Not Found!"
,
Toast
.
LENGTH_LONG
).
show
(
);
binding
.
etToken
.
setError
(
"Field token cannot be empty"
);
}
);
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/LoginActivity.java
View file @
704c5d53
...
@@ -40,6 +40,9 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -40,6 +40,9 @@ public class LoginActivity extends AppCompatActivity {
UserViewModel
viewModel
;
UserViewModel
viewModel
;
InetChecker
network
=
new
InetChecker
();
InetChecker
network
=
new
InetChecker
();
ViewUtil
utils
=
new
ViewUtil
();
ViewUtil
utils
=
new
ViewUtil
();
VerifyMailFragment
emailFragment
;
@Override
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
...
@@ -68,7 +71,8 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -68,7 +71,8 @@ public class LoginActivity extends AppCompatActivity {
}
}
public
void
tvForgetPassword
(
View
view
)
{
public
void
tvForgetPassword
(
View
view
)
{
startActivity
(
new
Intent
(
LoginActivity
.
this
,
ForgetPassword
.
class
));
emailFragment
=
new
VerifyMailFragment
(
LoginActivity
.
this
,
viewModel
);
emailFragment
.
show
(
getSupportFragmentManager
(),
emailFragment
.
getTag
());
}
}
public
void
tvSignUpHere
(
View
view
)
{
public
void
tvSignUpHere
(
View
view
)
{
...
...
app/src/main/java/com/example/yourcashiertest/activities/PrefManager.java
View file @
704c5d53
...
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
...
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
public
class
PrefManager
{
public
class
PrefManager
{
SharedPreferences
pref
;
SharedPreferences
pref
;
SharedPreferences
.
Editor
editor
;
SharedPreferences
.
Editor
editor
;
Context
_context
;
Context
_context
;
...
@@ -16,6 +17,8 @@ public class PrefManager {
...
@@ -16,6 +17,8 @@ public class PrefManager {
private
static
final
String
IS_FIRST_WELCOME
=
"IsFirstWelcome"
;
private
static
final
String
IS_FIRST_WELCOME
=
"IsFirstWelcome"
;
private
static
final
String
IS_FIRST_LOGIN
=
"IsFirstLogin"
;
private
static
final
String
IS_FIRST_LOGIN
=
"IsFirstLogin"
;
private
static
final
String
DATA_USER
=
"data_user"
;
private
static
final
String
DATA_USER
=
"data_user"
;
private
static
final
String
TOKEN_VERIFY
=
"tokenVerify"
;
private
static
final
String
EMAIL_SESSION
=
"example@example.com"
;
public
PrefManager
(
Context
context
)
{
public
PrefManager
(
Context
context
)
{
this
.
_context
=
context
;
this
.
_context
=
context
;
...
@@ -37,9 +40,24 @@ public class PrefManager {
...
@@ -37,9 +40,24 @@ public class PrefManager {
editor
.
commit
();
editor
.
commit
();
}
}
public
void
setToken
(
String
token
){
editor
.
putString
(
TOKEN_VERIFY
,
token
);
editor
.
commit
();
}
public
void
setEmailSession
(
String
email
){
editor
.
putString
(
EMAIL_SESSION
,
email
);
editor
.
commit
();
}
public
String
getTokenVerify
()
{
return
pref
.
getString
(
TOKEN_VERIFY
,
"token"
);}
public
String
getDataUser
(){
public
String
getDataUser
(){
return
pref
.
getString
(
DATA_USER
,
"User"
);
return
pref
.
getString
(
DATA_USER
,
"User"
);
}
}
public
String
getEmailSession
()
{
return
pref
.
getString
(
EMAIL_SESSION
,
"cek@gmail.com"
);}
public
boolean
isFirstLogin
(){
return
pref
.
getBoolean
(
IS_FIRST_LOGIN
,
true
);}
public
boolean
isFirstLogin
(){
return
pref
.
getBoolean
(
IS_FIRST_LOGIN
,
true
);}
public
boolean
isFirstWelcome
()
{
return
pref
.
getBoolean
(
IS_FIRST_WELCOME
,
true
);
}
public
boolean
isFirstWelcome
()
{
return
pref
.
getBoolean
(
IS_FIRST_WELCOME
,
true
);
}
...
...
app/src/main/java/com/example/yourcashiertest/activities/VerificationActivity.java
0 → 100644
View file @
704c5d53
package
com
.
example
.
yourcashiertest
.
activities
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.databinding.DataBindingUtil
;
import
androidx.lifecycle.ViewModelProvider
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.view.View
;
import
android.widget.EditText
;
import
android.widget.Toast
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.ActivityVerificationBinding
;
import
com.example.yourcashiertest.models.NewPassword
;
import
com.example.yourcashiertest.viewmodels.UserViewModel
;
public
class
VerificationActivity
extends
AppCompatActivity
{
ActivityVerificationBinding
binding
;
NewPassword
newPassword
;
EditText
etEmail
;
UserViewModel
viewModel
;
PrefManager
prefManager
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_verification
);
viewModel
=
new
ViewModelProvider
(
this
,
new
ViewModelProvider
.
NewInstanceFactory
()).
get
(
UserViewModel
.
class
);
etEmail
=
findViewById
(
R
.
id
.
etEmailVerify
);
newPassword
=
new
NewPassword
();
prefManager
=
new
PrefManager
(
this
);
binding
.
btnResetPw
.
setOnClickListener
(
this
::
sendNewPassword
);
}
private
void
sendNewPassword
(
View
view
){
if
(
TextUtils
.
isEmpty
(
binding
.
etNewPw
.
getText
().
toString
())){
binding
.
etNewPw
.
setError
(
"New password cannot be empty"
);
}
else
if
(
TextUtils
.
isEmpty
(
binding
.
etRepeatPw
.
getText
().
toString
())){
binding
.
etRepeatPw
.
setError
(
"Repeat password cannot be empty"
);
}
else
if
(!
binding
.
etNewPw
.
getText
().
toString
().
equals
(
binding
.
etRepeatPw
.
getText
().
toString
())){
binding
.
etRepeatPw
.
setError
(
"Repeat password didn't match !"
);
}
else
{
newPassword
.
setEmail
(
prefManager
.
getEmailSession
());
newPassword
.
setPassword
(
binding
.
etNewPw
.
getText
().
toString
());
viewModel
.
newPassword
(
newPassword
);
binding
.
setLoading
(
true
);
binding
.
btnResetPw
.
setEnabled
(
false
);
Toast
.
makeText
(
this
,
"Password successfully changed!"
,
Toast
.
LENGTH_SHORT
).
show
();
startActivity
(
new
Intent
(
this
,
LoginActivity
.
class
));
}
binding
.
setLoading
(
false
);
}
}
app/src/main/java/com/example/yourcashiertest/activities/VerifyMailFragment.java
0 → 100644
View file @
704c5d53
package
com
.
example
.
yourcashiertest
.
activities
;
import
android.app.Dialog
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.util.Patterns
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.Button
;
import
android.widget.EditText
;
import
android.widget.Toast
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.models.ForgotPassword
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.viewmodels.UserViewModel
;
import
com.google.android.material.bottomsheet.BottomSheetBehavior
;
import
com.google.android.material.bottomsheet.BottomSheetDialog
;
import
com.google.android.material.bottomsheet.BottomSheetDialogFragment
;
import
java.util.Objects
;
import
java.util.regex.Pattern
;
public
class
VerifyMailFragment
extends
BottomSheetDialogFragment
{
ForgotPassword
forgotPassword
;
UserViewModel
userViewModel
;
View
view
;
EditText
etEmail
;
BottomSheetDialog
sheetDialog
;
BottomSheetBehavior
sheetBehavior
;
Button
btnVerify
;
Context
context
;
Pattern
patern
;
Password
password
;
PrefManager
prefManager
;
public
VerifyMailFragment
(
Context
context
,
UserViewModel
model
)
{
this
.
context
=
context
;
this
.
userViewModel
=
model
;
}
@NonNull
@Override
public
Dialog
onCreateDialog
(
@Nullable
Bundle
savedInstanceState
)
{
sheetDialog
=
(
BottomSheetDialog
)
super
.
onCreateDialog
(
savedInstanceState
);
view
=
View
.
inflate
(
getContext
(),
R
.
layout
.
fragment_verify_mail
,
null
);
sheetDialog
.
setContentView
(
view
);
sheetBehavior
=
BottomSheetBehavior
.
from
((
View
)
(
view
.
getParent
()));
etEmail
=
view
.
findViewById
(
R
.
id
.
etEmailVerify
);
btnVerify
=
view
.
findViewById
(
R
.
id
.
btnSendEmail
);
btnVerify
.
setOnClickListener
(
this
::
sendMail
);
return
sheetDialog
;
}
private
void
sendMail
(
View
v
)
{
patern
=
Patterns
.
EMAIL_ADDRESS
;
prefManager
=
new
PrefManager
(
getContext
());
if
(
TextUtils
.
isEmpty
(
etEmail
.
getText
().
toString
()))
{
etEmail
.
setError
(
"Email field cannot be empty"
);
}
else
if
(!(
patern
.
matcher
(
etEmail
.
getText
().
toString
()).
matches
()))
{
etEmail
.
setError
(
"Email is invalid format"
);
}
else
{
forgotPassword
=
new
ForgotPassword
();
forgotPassword
.
setEmail
(
etEmail
.
getText
().
toString
());
userViewModel
.
resetPassword
(
forgotPassword
);
userViewModel
.
getToken
().
observe
(
this
,
userModel
->
{
if
(
userModel
!=
null
){
prefManager
.
setEmailSession
(
etEmail
.
getText
().
toString
());
prefManager
.
setToken
(
userModel
.
getToken
());
Toast
.
makeText
(
getContext
(),
"We has been sent token code, please check your email!"
,
Toast
.
LENGTH_SHORT
).
show
();
this
.
context
.
startActivity
(
new
Intent
(
this
.
context
,
ForgetPassword
.
class
));
}
else
{
etEmail
.
setError
(
"Your mail isn't registed!"
);
}
});
}
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/models/ForgotPassword.java
0 → 100644
View file @
704c5d53
package
com
.
example
.
yourcashiertest
.
models
;
import
com.google.gson.annotations.SerializedName
;
public
class
ForgotPassword
{
@SerializedName
(
"email"
)
private
String
email
;
public
String
getEmail
()
{
return
email
;
}
public
void
setEmail
(
String
email
)
{
this
.
email
=
email
;
}
@Override
public
String
toString
()
{
return
"{"
+
" \"email\" = '\""
+
email
+
'\"'
+
"}"
;
}
}
app/src/main/java/com/example/yourcashiertest/models/NewPassword.java
0 → 100644
View file @
704c5d53
package
com
.
example
.
yourcashiertest
.
models
;
import
com.google.gson.annotations.SerializedName
;
public
class
NewPassword
{
@SerializedName
(
"password"
)
private
String
password
;
@SerializedName
(
"email"
)
private
String
email
;
public
String
getEmail
()
{
return
email
;
}
public
void
setEmail
(
String
email
)
{
this
.
email
=
email
;
}
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/models/Password.java
View file @
704c5d53
...
@@ -3,23 +3,31 @@ package com.example.yourcashiertest.models;
...
@@ -3,23 +3,31 @@ package com.example.yourcashiertest.models;
import
com.google.gson.annotations.SerializedName
;
import
com.google.gson.annotations.SerializedName
;
public
class
Password
{
public
class
Password
{
private
boolean
status
;
private
String
token
;
@SerializedName
(
"new_password"
)
public
String
getToken
()
{
private
String
newPassword
;
return
token
;
}
public
void
setToken
(
String
token
)
{
this
.
token
=
token
;
}
public
void
setNewPassword
(
String
newPassword
)
{
public
boolean
isStatus
(
)
{
this
.
newPassword
=
newPassword
;
return
status
;
}
}
public
String
getNewPassword
()
{
public
void
setStatus
(
boolean
status
)
{
return
newPassword
;
this
.
status
=
status
;
}
}
@Override
@Override
public
String
toString
(){
public
String
toString
(){
return
return
"{"
+
"{"
+
" \"new_password\" = '\""
+
newPassword
+
'\"'
+
" \"status\" = '\""
+
status
+
'\"'
+
" \"token\" = '\""
+
token
+
'\"'
+
"}"
;
"}"
;
}
}
}
}
app/src/main/java/com/example/yourcashiertest/services/UserService.java
View file @
704c5d53
package
com
.
example
.
yourcashiertest
.
services
;
package
com
.
example
.
yourcashiertest
.
services
;
import
com.example.yourcashiertest.models.Data
;
import
com.example.yourcashiertest.models.Data
;
import
com.example.yourcashiertest.models.ForgotPassword
;
import
com.example.yourcashiertest.models.Login
;
import
com.example.yourcashiertest.models.Login
;
import
com.example.yourcashiertest.models.NewPassword
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.models.ResponseLogin
;
import
com.example.yourcashiertest.models.ResponseLogin
;
import
com.example.yourcashiertest.models.ResponseUser
;
import
com.example.yourcashiertest.models.ResponseUser
;
...
@@ -29,8 +31,13 @@ public interface UserService {
...
@@ -29,8 +31,13 @@ public interface UserService {
@POST
(
"v1/login"
)
@POST
(
"v1/login"
)
Call
<
ResponseLogin
>
loginUser
(
@Body
Login
login
);
Call
<
ResponseLogin
>
loginUser
(
@Body
Login
login
);
@Headers
(
"Content-Type: application/json"
)
@POST
(
"v1/reset_password"
)
Call
<
Password
>
editPassword
(
@Body
ForgotPassword
forgotPassword
);
@Headers
(
"Content-Type: application/json"
)
@Headers
(
"Content-Type: application/json"
)
@PUT
(
"v1/change_password
/{id}
"
)
@PUT
(
"v1/change_password"
)
Call
<
Password
>
editPassword
(
@Path
(
"id"
)
int
id
,
@Body
Password
p
assword
);
Call
<
ResponseUser
>
changePassword
(
@Body
NewPassword
newP
assword
);
}
}
app/src/main/java/com/example/yourcashiertest/viewmodels/UserViewModel.java
View file @
704c5d53
...
@@ -8,7 +8,9 @@ import androidx.lifecycle.ViewModel;
...
@@ -8,7 +8,9 @@ import androidx.lifecycle.ViewModel;
import
com.example.yourcashiertest.activities.RegisterActivity
;
import
com.example.yourcashiertest.activities.RegisterActivity
;
import
com.example.yourcashiertest.clients.ApiClient
;
import
com.example.yourcashiertest.clients.ApiClient
;
import
com.example.yourcashiertest.models.ForgotPassword
;
import
com.example.yourcashiertest.models.Login
;
import
com.example.yourcashiertest.models.Login
;
import
com.example.yourcashiertest.models.NewPassword
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.models.Password
;
import
com.example.yourcashiertest.models.ResponseUser
;
import
com.example.yourcashiertest.models.ResponseUser
;
import
com.example.yourcashiertest.models.User
;
import
com.example.yourcashiertest.models.User
;
...
@@ -23,6 +25,7 @@ import retrofit2.Response;
...
@@ -23,6 +25,7 @@ import retrofit2.Response;
public
class
UserViewModel
extends
ViewModel
{
public
class
UserViewModel
extends
ViewModel
{
MutableLiveData
<
List
<
User
>>
listUser
=
new
MutableLiveData
<>();
MutableLiveData
<
List
<
User
>>
listUser
=
new
MutableLiveData
<>();
MutableLiveData
<
Password
>
token
=
new
MutableLiveData
();
public
static
final
String
BASE_URL
=
"https://your-cashier.herokuapp.com/api/"
;
public
static
final
String
BASE_URL
=
"https://your-cashier.herokuapp.com/api/"
;
...
@@ -61,12 +64,18 @@ public class UserViewModel extends ViewModel {
...
@@ -61,12 +64,18 @@ public class UserViewModel extends ViewModel {
}
}
public
void
resetPassword
(
int
id
,
Password
password
){
public
void
resetPassword
(
ForgotPassword
forgotPassword
){
ApiClient
.
client
(
UserService
.
class
,
BASE_URL
)
ApiClient
.
client
(
UserService
.
class
,
BASE_URL
).
editPassword
(
forgotPassword
).
enqueue
(
new
Callback
<
Password
>()
{
.
editPassword
(
id
,
password
).
enqueue
(
new
Callback
<
Password
>()
{
@Override
@Override
public
void
onResponse
(
Call
<
Password
>
call
,
Response
<
Password
>
response
)
{
public
void
onResponse
(
Call
<
Password
>
call
,
Response
<
Password
>
response
)
{
Log
.
d
(
"response"
,
response
.
message
());
if
(
response
.
code
()
<
400
)
{
Log
.
e
(
"data"
,
"data "
+
response
.
body
());
assert
response
.
body
()
!=
null
;
token
.
setValue
(
response
.
body
());
}
else
{
token
.
setValue
(
null
);
Log
.
e
(
"data"
,
"error request"
);
}
}
}
@Override
@Override
...
@@ -76,7 +85,29 @@ public class UserViewModel extends ViewModel {
...
@@ -76,7 +85,29 @@ public class UserViewModel extends ViewModel {
});
});
}
}
// public void login(Login login){
public
MutableLiveData
<
Password
>
getToken
()
{
return
token
;
}
public
void
newPassword
(
NewPassword
newPassword
){
ApiClient
.
client
(
UserService
.
class
,
BASE_URL
).
changePassword
(
newPassword
)
.
enqueue
(
new
Callback
<
ResponseUser
>()
{
@Override
public
void
onResponse
(
Call
<
ResponseUser
>
call
,
Response
<
ResponseUser
>
response
)
{
if
(
response
.
code
()
<
400
)
{
assert
response
.
body
()
!=
null
;
Log
.
e
(
"data"
,
response
.
body
().
toString
());
}
}
@Override
public
void
onFailure
(
Call
<
ResponseUser
>
call
,
Throwable
t
)
{
t
.
printStackTrace
();
}
});
}
// public void login(Login login){
// ApiClient.client(UserService.class, BASE_URL)
// ApiClient.client(UserService.class, BASE_URL)
// .loginUser(login).enqueue(new Callback<Login>() {
// .loginUser(login).enqueue(new Callback<Login>() {
// @Override
// @Override
...
...
app/src/main/res/layout/activity_forget_password.xml
View file @
704c5d53
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
tools:context=
".activities.ForgetPassword"
>
tools:context=
".activities.ForgetPassword"
>
<com.google.android.material.textview.MaterialTextView
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tv
ResetPassword
"
android:id=
"@+id/tv
Token
"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:textSize=
"25dp"
android:textSize=
"25dp"
...
@@ -28,81 +28,44 @@
...
@@ -28,81 +28,44 @@
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
android:textStyle=
"bold"
android:textStyle=
"bold"
android:text=
"
RESET PASSWORD
"
/>
android:text=
"
Verification Token
"
/>
<com.google.android.material.textfield.TextInputLayout
<EditText
android:id=
"@+id/tilEmail"
android:id=
"@+id/etToken"
app:boxBackgroundColor=
"@color/white"
android:textColorHint=
"@color/grey"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/tvResetPassword"
android:hint=
"Token"
android:inputType=
"text"
android:layout_marginTop=
"20dp"
android:layout_marginTop=
"20dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:layout_marginBottom=
"@dimen/space_default"
>
app:layout_constraintTop_toBottomOf=
"@+id/tvToken"
android:imeOptions=
"actionNext"
<com.google.android.material.textfield.TextInputEditText
android:textSize=
"@dimen/text_default"
/>
android:id=
"@+id/etEmail"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"Email"
android:inputType=
"textEmailAddress"
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilNewPw"
app:passwordToggleEnabled=
"true"
app:boxBackgroundColor=
"@color/white"
android:textColorHint=
"@color/grey"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/tilEmail"
android:layout_marginTop=
"20dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:layout_marginBottom=
"@dimen/space_default"
>
<com.google.android.material.textfield.TextInputEditText
android:id=
"@+id/etNewPw"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"New Password"
android:inputType=
"text"
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
<com.google.android.material.button.MaterialButton
android:id=
"@+id/btn
ResetPw
"
android:id=
"@+id/btn
VerifyToken
"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:layout_marginTop=
"20dp"
android:layout_marginEnd=
"4dp"
android:layout_marginEnd=
"4dp"
android:backgroundTint=
"@color/colorPrimary"
android:backgroundTint=
"@color/colorPrimary"
android:padding=
"@dimen/space_default"
android:padding=
"@dimen/space_default"
android:
visibility=
"@{loading ? View.GONE : View.VISIBLE}
"
android:
imeOptions=
"actionDone
"
android:text=
"RESET PASSWORD"
android:text=
"RESET PASSWORD"
app:cornerRadius=
"@dimen/space_default"
app:cornerRadius=
"@dimen/space_default"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/tilNewPw"
app:layout_constraintVertical_bias=
"0.008"
/>
app:layout_constraintVertical_bias=
"0.008"
/>
<ProgressBar
<ProgressBar
android:id=
"@+id/pgLoading"
android:id=
"@+id/pgLoading"
android:layout_width=
"35dp"
android:layout_width=
"35dp"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:visibility=
"@{loading ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toTopOf=
"@+id/btnVerifyToken"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"@+id/btnResetPw"
app:layout_constraintHorizontal_bias=
"0.519"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
a
pp:layout_constraintTop_toBottomOf=
"@+id/tilNewPw
"
a
ndroid:visibility=
"@{loading ? View.GONE : View.VISIBLE}
"
app:layout_constraint
Vertical_bias=
"0.069
"
/>
app:layout_constraint
Top_toBottomOf=
"@+id/etToken
"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
</layout>
\ No newline at end of file
app/src/main/res/layout/activity_verification.xml
0 → 100644
View file @
704c5d53
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<import
type=
"android.view.View"
/>
<variable
name=
"loading"
type=
"boolean"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:paddingHorizontal=
"10dp"
tools:context=
".activities.ForgetPassword"
>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tvResetPassword"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textSize=
"25sp"
android:layout_marginStart=
"10dp"
android:layout_marginTop=
"50dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
android:textStyle=
"bold"
android:text=
"RESET PASSWORD"
/>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilNewPw"
app:passwordToggleEnabled=
"true"
app:boxBackgroundColor=
"@color/white"
android:textColorHint=
"@color/grey"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/tvResetPassword"
android:layout_marginTop=
"20dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:layout_marginBottom=
"@dimen/space_default"
>
<com.google.android.material.textfield.TextInputEditText
android:id=
"@+id/etNewPw"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"New Password"
android:inputType=
"text"
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilRepeatPw"
app:passwordToggleEnabled=
"true"
app:boxBackgroundColor=
"@color/white"
android:textColorHint=
"@color/grey"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/tilNewPw"
android:layout_marginTop=
"30dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:layout_marginBottom=
"@dimen/space_default"
>
<com.google.android.material.textfield.TextInputEditText
android:id=
"@+id/etRepeatPw"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"Repeat new password"
android:inputType=
"text"
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id=
"@+id/btnResetPw"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:layout_marginEnd=
"4dp"
android:backgroundTint=
"@color/colorPrimary"
android:padding=
"@dimen/space_default"
android:visibility=
"@{loading ? View.GONE : View.VISIBLE}"
android:text=
"RESET PASSWORD"
app:cornerRadius=
"@dimen/space_default"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintVertical_bias=
"0.008"
/>
<ProgressBar
android:id=
"@+id/pgLoading"
android:layout_width=
"35dp"
android:layout_height=
"wrap_content"
android:visibility=
"@{loading ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintBottom_toTopOf=
"@+id/btnResetPw"
app:layout_constraintTop_toBottomOf=
"@+id/tilNewPw"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/fragment_verify_mail.xml
0 → 100644
View file @
704c5d53
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:padding=
"20dp"
>
<EditText
android:id=
"@+id/etEmailVerify"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"example@example.com"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<com.google.android.material.button.MaterialButton
android:id=
"@+id/btnSendEmail"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"Continue"
android:padding=
"@dimen/space_default"
app:layout_constraintTop_toBottomOf=
"@+id/etEmailVerify"
app:cornerRadius=
"5dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
704c5d53
...
@@ -47,4 +47,6 @@
...
@@ -47,4 +47,6 @@
<string
name=
"slide_3_title"
>
FUTURE PAYMENT
</string>
<string
name=
"slide_3_title"
>
FUTURE PAYMENT
</string>
<string
name=
"slide_3_desc"
>
Integrated with easy and secure payments
</string>
<string
name=
"slide_3_desc"
>
Integrated with easy and secure payments
</string>
<string
name=
"test"
>
test
</string>
<string
name=
"test"
>
test
</string>
<!-- TODO: Remove or change this placeholder text -->
<string
name=
"hello_blank_fragment"
>
Hello blank fragment
</string>
</resources>
</resources>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment