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
a28bae52
Commit
a28bae52
authored
Aug 28, 2020
by
Trio Saputra
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://git.mdd.co.id:44195/abimulya/your-cashier
parents
e7f5836c
2a6a2dab
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
1703 additions
and
595 deletions
+1703
-595
build.gradle
app/build.gradle
+5
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+27
-13
CartActivity.java
.../com/example/yourcashiertest/activities/CartActivity.java
+53
-22
LoginActivity.java
...com/example/yourcashiertest/activities/LoginActivity.java
+45
-4
MainActivity.java
.../com/example/yourcashiertest/activities/MainActivity.java
+53
-21
PaymentActivity.java
...m/example/yourcashiertest/activities/PaymentActivity.java
+76
-3
PrefManager.java
...a/com/example/yourcashiertest/activities/PrefManager.java
+15
-9
ProductActivity.java
...m/example/yourcashiertest/activities/ProductActivity.java
+0
-34
RegisterActivity.java
.../example/yourcashiertest/activities/RegisterActivity.java
+36
-1
SkActivity.java
...va/com/example/yourcashiertest/activities/SkActivity.java
+43
-0
StatusPayment.java
...com/example/yourcashiertest/activities/StatusPayment.java
+17
-1
WelcomeActivity.java
...m/example/yourcashiertest/activities/WelcomeActivity.java
+2
-2
CartAdapter.java
...ava/com/example/yourcashiertest/adapters/CartAdapter.java
+19
-6
ApiClient.java
...n/java/com/example/yourcashiertest/clients/ApiClient.java
+21
-0
CartDao.java
...c/main/java/com/example/yourcashiertest/daos/CartDao.java
+3
-0
LocalDatabase.java
.../com/example/yourcashiertest/databases/LocalDatabase.java
+17
-22
Cart.java
.../main/java/com/example/yourcashiertest/entities/Cart.java
+16
-1
CartModel.java
...in/java/com/example/yourcashiertest/models/CartModel.java
+0
-46
ResponseUser.java
...java/com/example/yourcashiertest/models/ResponseUser.java
+40
-0
User.java
...rc/main/java/com/example/yourcashiertest/models/User.java
+89
-0
CartRepository.java
.../example/yourcashiertest/repositories/CartRepository.java
+5
-1
UserService.java
...ava/com/example/yourcashiertest/services/UserService.java
+23
-0
Convert.java
.../main/java/com/example/yourcashiertest/utils/Convert.java
+19
-0
CartVM.java
...n/java/com/example/yourcashiertest/viewmodels/CartVM.java
+0
-19
CartViewModel.java
...com/example/yourcashiertest/viewmodels/CartViewModel.java
+4
-0
UserViewModel.java
...com/example/yourcashiertest/viewmodels/UserViewModel.java
+59
-0
credit_card.png
app/src/main/res/drawable/credit_card.png
+0
-0
ic_undraw_credit_card.xml
app/src/main/res/drawable/ic_undraw_credit_card.xml
+28
-0
ic_undraw_wallet.xml
app/src/main/res/drawable/ic_undraw_wallet.xml
+454
-0
wallet.png
app/src/main/res/drawable/wallet.png
+0
-0
yout_cashier.png
app/src/main/res/drawable/yout_cashier.png
+0
-0
activity_cart.xml
app/src/main/res/layout/activity_cart.xml
+0
-2
activity_forget_password.xml
app/src/main/res/layout/activity_forget_password.xml
+64
-6
activity_login.xml
app/src/main/res/layout/activity_login.xml
+1
-1
activity_payment.xml
app/src/main/res/layout/activity_payment.xml
+171
-159
activity_register.xml
app/src/main/res/layout/activity_register.xml
+172
-126
activity_sk.xml
app/src/main/res/layout/activity_sk.xml
+22
-0
activity_splash.xml
app/src/main/res/layout/activity_splash.xml
+0
-8
activity_status_payment.xml
app/src/main/res/layout/activity_status_payment.xml
+88
-79
cart_item.xml
app/src/main/res/layout/cart_item.xml
+10
-7
slide1.xml
app/src/main/res/layout/slide1.xml
+2
-1
settings_menu.xml
app/src/main/res/menu/settings_menu.xml
+3
-0
strings.xml
app/src/main/res/values/strings.xml
+1
-1
No files found.
app/build.gradle
View file @
a28bae52
...
...
@@ -52,6 +52,11 @@ dependencies {
implementation
"com.github.bumptech.glide:glide:$glide_version"
annotationProcessor
"com.github.bumptech.glide:compiler:$glide_version"
// service
implementation
'com.squareup.retrofit2:retrofit:2.9.0'
implementation
'com.squareup.retrofit2:converter-gson:2.9.0'
implementation
'com.google.code.gson:gson:2.8.6'
testImplementation
'junit:junit:4.13'
androidTestImplementation
'androidx.test.ext:junit:1.1.1'
androidTestImplementation
'androidx.test.espresso:espresso-core:3.2.0'
...
...
app/src/main/AndroidManifest.xml
View file @
a28bae52
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.example.yourcashiertest"
>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_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.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-feature
android:name=
"android.hardware.camera"
android:required=
"true"
/>
...
...
@@ -17,13 +17,25 @@
android:roundIcon=
"@mipmap/ic_launcher_round"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme2"
>
<activity
android:name=
".activities.WelcomeActivity"
></activity>
<activity
android:name=
".activities.ForgetPassword"
/>
<activity
android:name=
".activities.RegisterActivity"
/>
<activity
android:name=
".activities.StatusPayment"
/>
<activity
android:name=
".activities.SkActivity"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.WelcomeActivity"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.ForgetPassword"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.RegisterActivity"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.StatusPayment"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.SplashActivity"
android:theme=
"@style/AppTheme2"
>
android:theme=
"@style/AppTheme2"
android:screenOrientation=
"portrait"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
...
...
@@ -32,17 +44,19 @@
</activity>
<activity
android:name=
".activities.PaymentActivity"
android:
theme=
"@style/AppTheme2"
/>
android:
screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.CartActivity"
android:
theme=
"@style/AppTheme2"
/>
android:
screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.MainActivity"
android:
theme=
"@style/AppTheme2"
/>
android:
screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.ProductActivity"
android:theme=
"@style/AppTheme2"
/>
<activity
android:name=
".activities.LoginActivity"
/>
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".activities.LoginActivity"
android:screenOrientation=
"portrait"
/>
<provider
android:name=
"androidx.core.content.FileProvider"
android:authorities=
"com.example.yourcashiertest.fileprovider"
...
...
app/src/main/java/com/example/yourcashiertest/activities/CartActivity.java
View file @
a28bae52
...
...
@@ -2,53 +2,84 @@ package com.example.yourcashiertest.activities;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.databinding.DataBindingUtil
;
import
androidx.lifecycle.ViewModelProvider
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
android.annotation.SuppressLint
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.adapters.CartAdapter
;
import
com.example.yourcashiertest.databinding.ActivityCartBinding
;
import
com.example.yourcashiertest.entities.Cart
;
import
com.example.yourcashiertest.utils.Convert
;
import
com.example.yourcashiertest.viewmodels.CartViewModel
;
import
java.text.DecimalFormat
;
import
java.text.DecimalFormatSymbols
;
public
class
CartActivity
extends
AppCompatActivity
{
ActivityCartBinding
binding
;
CartAdapter
adapter
;
private
static
int
SUM
=
0
;
public
static
String
PRICE
=
"price"
;
@SuppressLint
(
"SetTextI18n"
)
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_cart
);
//
adapter = new CartAdapter();
//
binding.rvCartList.setLayoutManager(new LinearLayoutManager(this));
//
binding.rvCartList.setAdapter(adapter);
adapter
=
new
CartAdapter
();
binding
.
rvCartList
.
setLayoutManager
(
new
LinearLayoutManager
(
this
));
binding
.
rvCartList
.
setAdapter
(
adapter
);
// CartViewModel cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
// cartViewModel.getCarts().observe(this, carts -> adapter.setCartList(carts));
//
// binding.setViewModelCart(cartViewModel);
CartViewModel
cartViewModel
=
new
ViewModelProvider
(
this
).
get
(
CartViewModel
.
class
);
cartViewModel
.
getCarts
().
observe
(
this
,
carts
->
adapter
.
setCartList
(
carts
));
binding
.
ivBtnBack
.
setOnClickListener
(
view
->
startActivity
(
new
Intent
(
CartActivity
.
this
,
MainActivity
.
class
)));
binding
.
btnCheckout
.
setOnClickListener
(
view
->
{
startActivity
(
new
Intent
(
CartActivity
.
this
,
PaymentActivity
.
class
));
finish
();
}
);
cartViewModel
.
getCarts
().
observe
(
this
,
carts
->
{
int
count
=
0
;
if
(
carts
.
size
()
!=
0
){
for
(
int
i
=
0
;
i
<
carts
.
size
();
i
++){
count
+=
carts
.
get
(
i
).
getPrice
(
);
}
}
else
binding
.
btnCheckout
.
setEnabled
(
false
);
SUM
=
count
;
binding
.
tvTotalPrice
.
setText
(
Convert
.
changeToCurrency
(
SUM
));
binding
.
items
.
setText
(
carts
.
size
()
+
" items"
);
});
adapter
.
setCartListener
(
new
CartAdapter
.
CartListener
()
{
@Override
public
void
onIncrease
(
Cart
cart
)
{
cart
.
setQty
(
cart
.
getQty
()
+
1
);
cart
.
setPrice
(
cart
.
getRealPrice
()
*
cart
.
getQty
());
cartViewModel
.
updateCart
(
cart
);
}
private
String
changeToCurrency
(
int
totalPrice
){
DecimalFormat
decimalFormat
=
(
DecimalFormat
)
DecimalFormat
.
getCurrencyInstance
();
@Override
public
void
onDecrease
(
Cart
cart
)
{
cart
.
setQty
(
cart
.
getQty
()
-
1
);
cart
.
setPrice
(
cart
.
getRealPrice
()
*
cart
.
getQty
());
cartViewModel
.
updateCart
(
cart
);
if
(
cart
.
getQty
()
<=
0
){
cartViewModel
.
deleteCart
(
cart
);
}
}
});
DecimalFormatSymbols
formatSymbols
=
new
DecimalFormatSymbols
();
formatSymbols
.
setCurrencySymbol
(
"Rp. "
);
formatSymbols
.
setMonetaryDecimalSeparator
(
','
);
formatSymbols
.
setGroupingSeparator
(
'.'
);
binding
.
setViewModelCart
(
cartViewModel
);
String
priceRupiah
=
decimalFormat
.
format
(
totalPrice
);
binding
.
ivBtnBack
.
setOnClickListener
(
view
->
startActivity
(
new
Intent
(
CartActivity
.
this
,
MainActivity
.
class
)));
binding
.
btnCheckout
.
setOnClickListener
(
view
->
{
startActivity
(
new
Intent
(
CartActivity
.
this
,
PaymentActivity
.
class
).
putExtra
(
PRICE
,
SUM
));
finish
();
});
}
return
priceRupiah
;
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
binding
=
null
;
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/LoginActivity.java
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
activities
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.lifecycle.Observer
;
import
androidx.lifecycle.ViewModelProvider
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.widget.Toast
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.models.User
;
import
com.example.yourcashiertest.viewmodels.UserViewModel
;
import
com.google.android.material.button.MaterialButton
;
import
com.google.android.material.textfield.TextInputEditText
;
import
java.util.List
;
public
class
LoginActivity
extends
AppCompatActivity
{
TextInputEditText
etUsername
,
etPassword
;
MaterialButton
btnLogin
;
public
static
final
String
DATA_LOGIN
=
"DATA_LOGIN"
;
public
static
Boolean
syarat
;
// SharedPreferences sharedPreferences;
// public static final String SESS_SYARAT = "syarat";
// public static final String my_shared = "session_status";
private
PrefManager
prefManager
;
UserViewModel
viewModel
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_login
);
// sharedPreferences = getSharedPreferences(my_shared, Context.MODE_PRIVATE);
// syarat = sharedPreferences.getBoolean(SESS_SYARAT, false);
prefManager
=
new
PrefManager
(
this
);
if
(!
prefManager
.
isFirstLogin
())
{
launchMain
();
finish
();
}
etPassword
=
findViewById
(
R
.
id
.
etPassword
);
etUsername
=
findViewById
(
R
.
id
.
etUsername
);
btnLogin
=
findViewById
(
R
.
id
.
btnLogin
);
viewModel
=
new
ViewModelProvider
(
this
,
new
ViewModelProvider
.
NewInstanceFactory
()).
get
(
UserViewModel
.
class
);
btnLogin
.
setOnClickListener
(
view
->
{
if
(
etUsername
.
getText
().
toString
().
length
()
==
0
||
etPassword
.
getText
().
toString
().
length
()
==
0
){
...
...
@@ -34,10 +57,23 @@ public class LoginActivity extends AppCompatActivity {
}
else
if
(
etPassword
.
getText
().
toString
().
length
()
<
8
)
{
etPassword
.
setError
(
"Password length cannot be less than 8 characters"
);
}
else
{
viewModel
.
setListUser
();
checkLogin
();
}
});
}
private
void
checkLogin
()
{
viewModel
.
getListUser
().
observe
(
this
,
users
->
{
for
(
int
i
=
0
;
i
<
users
.
size
();
i
++){
if
(
users
.
get
(
i
).
getEmail
().
equals
(
etUsername
.
getText
().
toString
())
&&
users
.
get
(
i
).
getPassword
().
equals
(
etPassword
.
getText
().
toString
())){
startActivity
(
new
Intent
(
LoginActivity
.
this
,
MainActivity
.
class
)
.
putExtra
(
DATA_LOGIN
,
etUsername
.
getText
().
toString
()));
finish
();
.
putExtra
(
DATA_LOGIN
,
users
.
get
(
i
).
getFullName
()));
}
}
// Toast.makeText(getApplication(), "Username or password wrong", Toast.LENGTH_LONG).show();
});
}
...
...
@@ -48,4 +84,9 @@ public class LoginActivity extends AppCompatActivity {
public
void
tvSignUpHere
(
View
view
)
{
startActivity
(
new
Intent
(
LoginActivity
.
this
,
RegisterActivity
.
class
));
}
public
void
launchMain
()
{
prefManager
.
setFirstLogin
(
false
);
startActivity
(
new
Intent
(
LoginActivity
.
this
,
MainActivity
.
class
));
finish
();
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/MainActivity.java
View file @
a28bae52
...
...
@@ -9,28 +9,31 @@ import androidx.lifecycle.ViewModelProvider;
import
android.Manifest
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.os.Bundle
;
import
android.text.Editable
;
import
android.text.TextWatcher
;
import
android.view.Menu
;
import
android.view.View
;
import
android.util.Log
;
import
android.widget.PopupMenu
;
import
android.widget.Toast
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.adapters.ProductAdapter
;
import
com.example.yourcashiertest.databinding.ActivityMainBinding
;
import
com.example.yourcashiertest.entities.Cart
;
import
com.example.yourcashiertest.entities.Product
;
import
com.example.yourcashiertest.models.CartModel
;
import
com.example.yourcashiertest.viewmodels.CartViewModel
;
import
com.example.yourcashiertest.viewmodels.ProductViewModel
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
MainActivity
extends
AppCompatActivity
{
ActivityMainBinding
binding
;
private
PrefManager
prefManager
;
SharedPreferences
sharedPreferences
;
public
static
final
String
DATA_PRODUCT
=
"DATA_PRODUCT"
;
private
static
final
int
REQUEST_PERMISSIONS
=
111
;
...
...
@@ -39,18 +42,24 @@ public class MainActivity extends AppCompatActivity {
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
};
public
static
boolean
visibility
=
false
;
ProductViewModel
viewModel
;
CartViewModel
cartViewModel
;
boolean
added
=
false
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
requestPermissions
(
permissions
,
REQUEST_PERMISSIONS
);
prefManager
=
new
PrefManager
(
this
);
ProductAdapter
adapter
=
new
ProductAdapter
();
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_main
);
// cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
cartViewModel
=
new
ViewModelProvider
(
this
).
get
(
CartViewModel
.
class
);
cartViewModel
.
getCarts
().
observe
(
this
,
carts
->
{
if
(
carts
.
size
()
!=
0
)
binding
.
tvCount
.
setText
(
String
.
valueOf
(
carts
.
size
()));
else
binding
.
tvCount
.
setText
(
String
.
valueOf
(
0
));
});
String
name
=
getIntent
().
getStringExtra
(
LoginActivity
.
DATA_LOGIN
);
binding
.
tvUser
.
setText
(
name
);
// settings menu
...
...
@@ -74,6 +83,11 @@ public class MainActivity extends AppCompatActivity {
startActivity
(
getIntent
());
overridePendingTransition
(
0
,
0
);
return
true
;
case
R
.
id
.
item_three
:
prefManager
.
removeLoginSession
();
startActivity
(
new
Intent
(
MainActivity
.
this
,
LoginActivity
.
class
));
finish
();
break
;
}
return
false
;
});
...
...
@@ -87,7 +101,7 @@ public class MainActivity extends AppCompatActivity {
});
binding
.
rvProducts
.
setAdapter
(
adapter
);
ProductViewModel
viewModel
=
new
ViewModelProvider
(
this
).
get
(
ProductViewModel
.
class
);
viewModel
=
new
ViewModelProvider
(
this
).
get
(
ProductViewModel
.
class
);
viewModel
.
getProducts
().
observe
(
this
,
adapter:
:
setProducts
);
adapter
.
setListener
(
new
ProductAdapter
.
ProductListener
()
{
...
...
@@ -129,22 +143,40 @@ public class MainActivity extends AppCompatActivity {
public
void
addToCart
(
Product
product
){
// Cart cart = new Cart(0,"", "", 0, 0);
// cart.setIdProduct(product.getId());
// cart.setImage(product.getPhoto());
// cart.setNameProduct(product.getName());
// cart.setPrice(product.getPrice());
// cart.setQty(1);
// cartViewModel.insertCart(cart);
List
<
CartModel
>
list
=
new
ArrayList
<>();
CartModel
cart
=
new
CartModel
();
// cek apakah sudah ditambahkan
checkProduct
(
product
);
if
(
added
){
startActivity
(
new
Intent
(
MainActivity
.
this
,
CartActivity
.
class
));
finish
();
}
else
{
product
.
setQuantity
(
product
.
getQuantity
()
-
1
);
viewModel
.
updateProduct
(
product
);
Cart
cart
=
new
Cart
(
0
,
""
,
""
,
0
,
0
,
0
);
cart
.
setIdProduct
(
product
.
getId
());
cart
.
setNameProduct
(
product
.
getName
());
cart
.
setImage
(
product
.
getPhoto
());
cart
.
setNameProduct
(
product
.
getName
());
cart
.
setPrice
(
product
.
getPrice
());
cart
.
setQty
(
product
.
getQuantity
());
cart
.
setQty
(
1
);
cart
.
setRealPrice
(
product
.
getPrice
());
cartViewModel
.
insertCart
(
cart
);
Toast
.
makeText
(
MainActivity
.
this
,
"Produk berhasil ditambahkan ke keranjang"
,
Toast
.
LENGTH_LONG
).
show
();
}
}
public
void
checkProduct
(
Product
product
){
cartViewModel
.
getCarts
().
observe
(
this
,
new
Observer
<
List
<
Cart
>>()
{
@Override
public
void
onChanged
(
List
<
Cart
>
carts
)
{
for
(
int
i
=
0
;
i
<
carts
.
size
();
i
++){
if
(
carts
.
get
(
i
).
getNameProduct
().
equals
(
product
.
getName
())){
added
=
true
;
break
;
}
}
}
});
}
@Override
public
void
onBackPressed
()
{
...
...
app/src/main/java/com/example/yourcashiertest/activities/PaymentActivity.java
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
activities
;
import
androidx.annotation.RequiresApi
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.cardview.widget.CardView
;
import
androidx.databinding.DataBindingUtil
;
import
androidx.lifecycle.ViewModelProvider
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.ActivityPaymentBinding
;
import
com.example.yourcashiertest.utils.Convert
;
import
com.example.yourcashiertest.utils.ViewUtil
;
import
com.example.yourcashiertest.viewmodels.CartViewModel
;
public
class
PaymentActivity
extends
AppCompatActivity
{
ActivityPaymentBinding
binding
;
public
static
String
REFUND
=
"refund"
;
public
int
refund
;
public
int
amount
;
CartViewModel
cartViewModel
;
public
boolean
change
=
false
;
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
N
)
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_payment
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_payment
);
cartViewModel
=
new
ViewModelProvider
(
this
).
get
(
CartViewModel
.
class
);
amount
=
getIntent
().
getIntExtra
(
CartActivity
.
PRICE
,
0
);
binding
.
setAmount
(
Convert
.
changeToCurrency
(
amount
));
binding
.
cvCash
.
setOnTouchListener
((
view
,
event
)
->
{
changeCvColor
(
event
,
binding
.
cvCash
);
return
true
;
});
binding
.
cvCard
.
setOnTouchListener
((
view
,
event
)
->
{
changeCvColor
(
event
,
binding
.
cvCard
);
return
true
;
});
}
public
void
btnPay
(
View
view
)
{
startActivity
(
new
Intent
(
PaymentActivity
.
this
,
StatusPayment
.
class
));
if
(
TextUtils
.
isEmpty
(
binding
.
etAmountPaid
.
getText
().
toString
())){
ViewUtil
.
showMessage
(
view
,
"Amount paid not empty"
);
}
else
{
int
amountPaid
=
Integer
.
parseInt
(
binding
.
etAmountPaid
.
getText
().
toString
());
refund
=
amountPaid
-
amount
;
startActivity
(
new
Intent
(
PaymentActivity
.
this
,
StatusPayment
.
class
).
putExtra
(
REFUND
,
refund
));
cartViewModel
.
clear
();
finish
();
}
}
public
void
changeCvColor
(
MotionEvent
event
,
CardView
cv
){
if
(
change
)
{
change
=
false
;
switch
(
event
.
getAction
())
{
case
MotionEvent
.
ACTION_DOWN
:
cv
.
setCardBackgroundColor
(
getResources
().
getColor
(
R
.
color
.
colorPrimary
));
break
;
case
MotionEvent
.
ACTION_UP
:
cv
.
setCardBackgroundColor
(
getResources
().
getColor
(
R
.
color
.
white
));
}
}
else
{
change
=
true
;
switch
(
event
.
getAction
())
{
case
MotionEvent
.
ACTION_DOWN
:
cv
.
setCardBackgroundColor
(
getResources
().
getColor
(
R
.
color
.
white
));
break
;
case
MotionEvent
.
ACTION_UP
:
cv
.
setCardBackgroundColor
(
getResources
().
getColor
(
R
.
color
.
colorPrimary
));
}
}
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
binding
=
null
;
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/PrefManager.java
View file @
a28bae52
...
...
@@ -8,14 +8,13 @@ public class PrefManager {
SharedPreferences
pref
;
SharedPreferences
.
Editor
editor
;
Context
_context
;
// shared pref mode
int
PRIVATE_MODE
=
0
;
// Shared preferences file name
private
static
final
String
PREF_NAME
=
"
introslider
"
;
private
static
final
String
IS_FIRST_
TIME_LAUNCH
=
"IsFirstTimeLaunch
"
;
private
static
final
String
PREF_NAME
=
"
preferences
"
;
private
static
final
String
IS_FIRST_WELCOME
=
"IsFirstWelcome"
;
private
static
final
String
IS_FIRST_
LOGIN
=
"IsFirstLogin
"
;
public
PrefManager
(
Context
context
)
{
this
.
_context
=
context
;
...
...
@@ -23,13 +22,20 @@ public class PrefManager {
editor
=
pref
.
edit
();
}
public
void
setFirst
TimeLaunch
(
boolean
isFirstTime
)
{
editor
.
putBoolean
(
IS_FIRST_
TIME_LAUNCH
,
isFirstTime
);
public
void
setFirst
Welcome
(
boolean
isFirstTime
)
{
editor
.
putBoolean
(
IS_FIRST_
WELCOME
,
isFirstTime
);
editor
.
commit
();
}
public
boolean
isFirstTimeLaunch
()
{
return
pref
.
getBoolean
(
IS_FIRST_TIME_LAUNCH
,
true
);
public
void
setFirstLogin
(
boolean
isFirstTime
)
{
editor
.
putBoolean
(
IS_FIRST_LOGIN
,
isFirstTime
);
editor
.
commit
(
);
}
public
boolean
isFirstLogin
(){
return
pref
.
getBoolean
(
IS_FIRST_LOGIN
,
true
);}
public
boolean
isFirstWelcome
()
{
return
pref
.
getBoolean
(
IS_FIRST_WELCOME
,
true
);
}
public
void
removeLoginSession
(){
// loginActivity.launchMain(true);
editor
.
remove
(
IS_FIRST_LOGIN
);
editor
.
apply
();
}
}
app/src/main/java/com/example/yourcashiertest/activities/ProductActivity.java
View file @
a28bae52
...
...
@@ -14,17 +14,14 @@ import android.os.Bundle;
import
android.os.Environment
;
import
android.provider.MediaStore
;
import
android.text.TextUtils
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.ActivityProductBinding
;
import
com.example.yourcashiertest.entities.Product
;
import
com.example.yourcashiertest.utils.ViewUtil
;
import
com.example.yourcashiertest.viewmodels.ProductViewModel
;
import
java.io.File
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
public
class
ProductActivity
extends
AppCompatActivity
{
private
static
final
int
PICK_IMAGE
=
123
;
ActivityProductBinding
binding
;
...
...
@@ -32,36 +29,27 @@ public class ProductActivity extends AppCompatActivity{
private
static
final
int
REQUEST_IMAGE_CAPTURE
=
1
;
private
File
file
;
private
ProductViewModel
viewModel
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
viewModel
=
new
ViewModelProvider
(
this
).
get
(
ProductViewModel
.
class
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_product
);
Product
product
=
getIntent
().
getParcelableExtra
(
MainActivity
.
DATA_PRODUCT
);
if
(
getSupportActionBar
()
!=
null
)
{
getSupportActionBar
().
setHomeButtonEnabled
(
true
);
getSupportActionBar
().
setDisplayHomeAsUpEnabled
(
true
);
}
if
(
product
!=
null
){
isUpdate
=
true
;
viewModel
.
setPhoto
(
product
.
getPhoto
());
viewModel
.
setProduct
(
product
);
binding
.
btnSubmit
.
setText
(
R
.
string
.
btn_edit
);
binding
.
tvHeadProduct
.
setText
(
"UPDATE PRODUCT"
);
}
else
{
product
=
new
Product
(
""
,
""
,
0
,
0
,
""
,
""
);
}
binding
.
cvProduct
.
setOnClickListener
(
v
->
selectAction
(
this
));
Product
fixProduct
=
product
;
binding
.
btnSubmit
.
setOnClickListener
(
v
->
{
try
{
...
...
@@ -73,38 +61,31 @@ public class ProductActivity extends AppCompatActivity{
ViewUtil
.
showMessage
(
binding
.
getRoot
(),
getString
(
R
.
string
.
form_error_message
));
return
;
}
if
(
file
!=
null
){
fixProduct
.
setPhoto
(
file
.
getAbsolutePath
());
}
fixProduct
.
setName
(
binding
.
etProduct
.
getText
().
toString
());
fixProduct
.
setCategory
(
binding
.
etCategory
.
getText
().
toString
());
fixProduct
.
setDescription
(
binding
.
etDescription
.
getText
().
toString
());
fixProduct
.
setPrice
(
Long
.
parseLong
(
binding
.
etPrice
.
getText
().
toString
()));
fixProduct
.
setQuantity
(
Long
.
parseLong
(
binding
.
etQuantity
.
getText
().
toString
()));
if
(
isUpdate
){
viewModel
.
updateProduct
(
fixProduct
);
}
else
{
viewModel
.
insertProduct
(
fixProduct
);
}
finish
();
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
});
binding
.
setViewModel
(
viewModel
);
}
private
void
takePhoto
()
{
Intent
takePictureIntent
=
new
Intent
(
MediaStore
.
ACTION_IMAGE_CAPTURE
);
if
(
takePictureIntent
.
resolveActivity
(
getPackageManager
())
!=
null
)
{
File
photoFile
=
createImageFile
();
if
(
photoFile
!=
null
)
{
Uri
photoURI
=
FileProvider
.
getUriForFile
(
this
,
"com.example.yourcashiertest.fileprovider"
,
...
...
@@ -114,18 +95,13 @@ public class ProductActivity extends AppCompatActivity{
}
}
}
private
void
selectAction
(
Context
context
){
final
CharSequence
[]
options
=
{
"Take Photo"
,
"Choose from Gallery"
,
"Cancel"
};
AlertDialog
.
Builder
builder
=
new
AlertDialog
.
Builder
(
context
);
builder
.
setTitle
(
"Choose your profile picture"
);
builder
.
setItems
(
options
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
item
)
{
if
(
options
[
item
].
equals
(
"Take Photo"
))
{
takePhoto
();
}
else
if
(
options
[
item
].
equals
(
"Choose from Gallery"
))
{
...
...
@@ -137,14 +113,11 @@ public class ProductActivity extends AppCompatActivity{
});
builder
.
show
();
}
private
void
openGallery
(){
Intent
intent
=
new
Intent
(
Intent
.
ACTION_PICK
);
intent
.
setType
(
"image/*"
);
startActivityForResult
(
intent
,
PICK_IMAGE
);
}
private
File
createImageFile
()
{
try
{
String
timeStamp
=
new
SimpleDateFormat
(
"yyyyMMdd_HHmmss"
).
format
(
new
Date
());
...
...
@@ -157,16 +130,13 @@ public class ProductActivity extends AppCompatActivity{
return
image
;
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
return
null
;
}
}
@Override
protected
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
Uri
imageUri
;
if
(
resultCode
==
RESULT_OK
&&
requestCode
==
PICK_IMAGE
){
//set image to image view
binding
.
ivProduct
.
setImageURI
(
data
.
getData
());
...
...
@@ -178,7 +148,6 @@ public class ProductActivity extends AppCompatActivity{
}
}
}
public
String
getPath
(
Uri
uri
)
{
String
[]
projection
=
{
MediaStore
.
Images
.
Media
.
DATA
};
...
...
@@ -190,17 +159,14 @@ public class ProductActivity extends AppCompatActivity{
cursor
.
close
();
return
s
;
}
@Override
public
boolean
onSupportNavigateUp
()
{
onBackPressed
();
return
super
.
onSupportNavigateUp
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
binding
=
null
;
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/RegisterActivity.java
View file @
a28bae52
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.view.View
;
import
android.webkit.WebView
;
import
android.widget.ProgressBar
;
import
android.widget.Toast
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.ActivityRegisterBinding
;
import
com.example.yourcashiertest.models.User
;
import
com.example.yourcashiertest.viewmodels.UserViewModel
;
public
class
RegisterActivity
extends
AppCompatActivity
{
WebView
wbCompany
;
ProgressBar
pbLoading
;
private
static
final
String
urLCompany
=
"http://multidaya.id/"
;
ActivityRegisterBinding
binding
;
User
user
;
UserViewModel
viewModel
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_register
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_register
);
user
=
new
User
();
viewModel
=
new
ViewModelProvider
(
this
,
new
ViewModelProvider
.
NewInstanceFactory
()).
get
(
UserViewModel
.
class
);
binding
.
btnRegister
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
user
.
setEmail
(
binding
.
etEmail
.
getText
().
toString
());
user
.
setFullName
(
binding
.
etUsername
.
getText
().
toString
());
user
.
setPassword
(
binding
.
etPassword
.
getText
().
toString
());
user
.
setPhoneNumber
(
binding
.
etPhoneNumber
.
getText
().
toString
());
viewModel
.
registrasi
(
user
);
Toast
.
makeText
(
getApplicationContext
(),
"Register berhasil"
,
Toast
.
LENGTH_LONG
).
show
();
startActivity
(
new
Intent
(
getApplicationContext
(),
LoginActivity
.
class
));
}
});
}
public
void
tvSignInHere
(
View
view
)
{
startActivity
(
new
Intent
(
RegisterActivity
.
this
,
LoginActivity
.
class
));
finish
();
}
public
void
tvSK
(
View
view
)
{
startActivity
(
new
Intent
(
RegisterActivity
.
this
,
SkActivity
.
class
));
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/SkActivity.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
activities
;
import
androidx.appcompat.app.AppCompatActivity
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.webkit.WebView
;
import
android.webkit.WebViewClient
;
import
android.widget.ProgressBar
;
import
com.example.yourcashiertest.R
;
public
class
SkActivity
extends
AppCompatActivity
{
WebView
wbCompany
;
ProgressBar
pbLoading
;
private
static
final
String
urLCompany
=
"http://multidaya.id/"
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_sk
);
pbLoading
=
findViewById
(
R
.
id
.
pbLoading
);
wbCompany
=
findViewById
(
R
.
id
.
wbCompany
);
wbCompany
.
getSettings
().
setLoadsImagesAutomatically
(
true
);
wbCompany
.
getSettings
().
setJavaScriptEnabled
(
true
);
wbCompany
.
setScrollBarStyle
(
View
.
SCROLLBARS_INSIDE_OVERLAY
);
wbCompany
.
setWebViewClient
(
new
WebViewClient
()
{
@Override
public
void
onPageFinished
(
WebView
view
,
String
url
)
{
wbCompany
.
setVisibility
(
View
.
VISIBLE
);
pbLoading
.
setVisibility
(
View
.
GONE
);
if
(
getSupportActionBar
()
!=
null
)
getSupportActionBar
().
setTitle
(
"Multidaya Dinamika"
);
}
});
wbCompany
.
loadUrl
(
urLCompany
);
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/StatusPayment.java
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
activities
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.databinding.DataBindingUtil
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.util.Log
;
import
android.view.View
;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.ActivityStatusPaymentBinding
;
import
com.example.yourcashiertest.utils.Convert
;
public
class
StatusPayment
extends
AppCompatActivity
{
ActivityStatusPaymentBinding
binding
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_status_payment
);
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_status_payment
);
int
refund
=
getIntent
().
getIntExtra
(
PaymentActivity
.
REFUND
,
0
);
Log
.
d
(
"Tag"
,
String
.
valueOf
(
refund
));
binding
.
setRefund
(
Convert
.
changeToCurrency
(
refund
));
}
public
void
btnFinish
(
View
view
)
{
startActivity
(
new
Intent
(
StatusPayment
.
this
,
MainActivity
.
class
));
finish
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
binding
=
null
;
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/activities/WelcomeActivity.java
View file @
a28bae52
...
...
@@ -36,7 +36,7 @@ public class WelcomeActivity extends AppCompatActivity {
// mengecek lauch activity - sebelum memanggil setContentView()
prefManager
=
new
PrefManager
(
this
);
if
(!
prefManager
.
isFirst
TimeLaunch
())
{
if
(!
prefManager
.
isFirst
Welcome
())
{
launchHomeScreen
();
finish
();
}
...
...
@@ -118,7 +118,7 @@ public class WelcomeActivity extends AppCompatActivity {
}
private
void
launchHomeScreen
()
{
prefManager
.
setFirst
TimeLaunch
(
false
);
prefManager
.
setFirst
Welcome
(
false
);
startActivity
(
new
Intent
(
WelcomeActivity
.
this
,
LoginActivity
.
class
));
finish
();
}
...
...
app/src/main/java/com/example/yourcashiertest/adapters/CartAdapter.java
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
adapters
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
androidx.annotation.NonNull
;
...
...
@@ -11,9 +10,9 @@ import androidx.recyclerview.widget.RecyclerView;
import
com.example.yourcashiertest.R
;
import
com.example.yourcashiertest.databinding.CartItemBinding
;
import
com.example.yourcashiertest.entities.Cart
;
import
com.example.yourcashiertest.entities.Product
;
import
com.example.yourcashiertest.models.CartModel
;
import
java.text.DecimalFormat
;
import
java.text.DecimalFormatSymbols
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -22,8 +21,8 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
private
List
<
Cart
>
carts
=
new
ArrayList
<>();
public
interface
CartListener
{
void
onIncrease
();
void
onDecrease
();
void
onIncrease
(
Cart
cart
);
void
onDecrease
(
Cart
cart
);
}
private
CartListener
listener
;
...
...
@@ -56,7 +55,8 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
@Override
public
int
getItemCount
()
{
return
carts
.
size
();
if
(
carts
.
size
()
!=
0
)
return
carts
.
size
();
else
return
0
;
}
public
class
ViewHolder
extends
RecyclerView
.
ViewHolder
{
...
...
@@ -72,6 +72,19 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
public
void
bindData
(
Cart
cart
,
CartListener
listener
)
{
cartItemBinding
.
setCartProduct
(
cart
);
DecimalFormat
rupiah
=
(
DecimalFormat
)
DecimalFormat
.
getCurrencyInstance
();
DecimalFormatSymbols
format
=
new
DecimalFormatSymbols
();
format
.
setCurrencySymbol
(
"Rp. "
);
format
.
setMonetaryDecimalSeparator
(
','
);
format
.
setGroupingSeparator
(
'.'
);
rupiah
.
setDecimalFormatSymbols
(
format
);
cartItemBinding
.
setPrice
(
rupiah
.
format
(
cart
.
getPrice
()));
cartItemBinding
.
btnAdd
.
setOnClickListener
(
view
->
listener
.
onIncrease
(
cart
));
cartItemBinding
.
btnMin
.
setOnClickListener
(
view
->
listener
.
onDecrease
(
cart
));
}
}
}
app/src/main/java/com/example/yourcashiertest/clients/ApiClient.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
clients
;
import
com.google.gson.GsonBuilder
;
import
retrofit2.Retrofit
;
import
retrofit2.converter.gson.GsonConverterFactory
;
public
class
ApiClient
{
public
static
<
T
>
T
client
(
Class
<
T
>
service
,
String
url
)
{
Retrofit
retrofit
=
new
Retrofit
.
Builder
()
.
baseUrl
(
url
)
.
addConverterFactory
(
GsonConverterFactory
.
create
(
new
GsonBuilder
().
setLenient
().
create
()
)
)
.
build
();
return
retrofit
.
create
(
service
);
}
}
app/src/main/java/com/example/yourcashiertest/daos/CartDao.java
View file @
a28bae52
...
...
@@ -25,4 +25,7 @@ public interface CartDao {
@Delete
public
void
deleteCart
(
Cart
cart
);
@Query
(
"DELETE FROM Cart"
)
public
void
deletAll
();
}
app/src/main/java/com/example/yourcashiertest/databases/LocalDatabase.java
View file @
a28bae52
...
...
@@ -20,11 +20,11 @@ import com.example.yourcashiertest.entities.Product;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
@Database
(
entities
=
{
Product
.
class
},
version
=
1
,
exportSchema
=
false
)
@Database
(
entities
=
{
Product
.
class
,
Cart
.
class
},
version
=
3
,
exportSchema
=
false
)
public
abstract
class
LocalDatabase
extends
RoomDatabase
{
public
abstract
ProductDao
productDao
();
//
public abstract CartDao cartDao();
public
abstract
CartDao
cartDao
();
private
static
volatile
LocalDatabase
INSTANCE
;
private
static
final
int
NUMBER_OF_THREADS
=
4
;
...
...
@@ -32,26 +32,20 @@ public abstract class LocalDatabase extends RoomDatabase {
public
static
final
ExecutorService
databaseWriteExecutor
=
Executors
.
newFixedThreadPool
(
NUMBER_OF_THREADS
);
// public static final Migration MIGRATION_1_2 = new Migration(1,2) {
// @Override
// public void migrate(@NonNull SupportSQLiteDatabase database) {
// database.execSQL("CREATE TABLE IF NOT EXISTS Cart (id INTEGER, idProduct INTEGER,price INTEGER, qty INTEGER,nameProduct TEXT, image TEXT)");
// }
// };
//
// public static final Migration MIGRATION_1_3 = new Migration(1,3) {
// @Override
// public void migrate(@NonNull SupportSQLiteDatabase database) {
// database.execSQL("DROP TABLE Cart");
// }
// };
//
// public static final Migration MIGRATION_1_4 = new Migration(1,4) {
// @Override
// public void migrate(@NonNull SupportSQLiteDatabase database) {
// database.execSQL("CREATE TABLE IF NOT EXISTS Cart (id INTEGER, idProduct INTEGER,price INTEGER, qty INTEGER,nameProduct TEXT, image TEXT)");
// }
// };
public
static
final
Migration
MIGRATION_1_2
=
new
Migration
(
1
,
2
)
{
@Override
public
void
migrate
(
@NonNull
SupportSQLiteDatabase
database
)
{
database
.
execSQL
(
"CREATE TABLE IF NOT EXISTS Cart (id INTEGER NOT NULL, idProduct INTEGER NOT NULL,"
+
"price INTEGER NOT NULL, qty INTEGER NOT NULL, nameProduct TEXT NOT NULL, image TEXT NOT NULL, PRIMARY KEY(id))"
);
}
};
public
static
final
Migration
MIGRATION_2_3
=
new
Migration
(
2
,
3
)
{
@Override
public
void
migrate
(
@NonNull
SupportSQLiteDatabase
database
)
{
database
.
execSQL
(
"ALTER TABLE Cart ADD COLUMN realPrice INTEGER NOT NULL DEFAULT 0"
);
}
};
public
static
LocalDatabase
getDatabase
(
Context
context
)
{
if
(
INSTANCE
==
null
)
{
...
...
@@ -59,6 +53,7 @@ public abstract class LocalDatabase extends RoomDatabase {
if
(
INSTANCE
==
null
)
{
INSTANCE
=
Room
.
databaseBuilder
(
context
.
getApplicationContext
(),
LocalDatabase
.
class
,
"yourcashier_database"
)
.
addMigrations
(
MIGRATION_1_2
,
MIGRATION_2_3
)
.
build
();
}
}
...
...
app/src/main/java/com/example/yourcashiertest/entities/Cart.java
View file @
a28bae52
...
...
@@ -35,6 +35,10 @@ public class Cart implements Parcelable {
@ColumnInfo
(
name
=
"image"
)
String
image
;
@NonNull
@ColumnInfo
(
name
=
"realPrice"
)
long
realPrice
=
0
;
protected
Cart
(
Parcel
in
)
{
id
=
in
.
readLong
();
idProduct
=
in
.
readLong
();
...
...
@@ -42,6 +46,7 @@ public class Cart implements Parcelable {
image
=
in
.
readString
();
price
=
in
.
readLong
();
qty
=
in
.
readLong
();
price
=
in
.
readLong
();
}
public
static
final
Creator
<
Cart
>
CREATOR
=
new
Creator
<
Cart
>()
{
...
...
@@ -56,12 +61,13 @@ public class Cart implements Parcelable {
}
};
public
Cart
(
long
idProduct
,
String
nameProduct
,
String
image
,
long
price
,
long
qty
){
public
Cart
(
long
idProduct
,
String
nameProduct
,
String
image
,
long
price
,
long
qty
,
long
realPrice
){
this
.
idProduct
=
idProduct
;
this
.
nameProduct
=
nameProduct
;
this
.
image
=
image
;
this
.
price
=
price
;
this
.
qty
=
qty
;
this
.
realPrice
=
realPrice
;
}
public
long
getId
()
{
...
...
@@ -112,6 +118,14 @@ public class Cart implements Parcelable {
this
.
qty
=
qty
;
}
public
Long
getRealPrice
()
{
return
realPrice
;
}
public
void
setRealPrice
(
Long
realPrice
)
{
this
.
realPrice
=
realPrice
;
}
@Override
public
int
describeContents
()
{
return
0
;
...
...
@@ -125,5 +139,6 @@ public class Cart implements Parcelable {
dest
.
writeString
(
image
);
dest
.
writeLong
(
price
);
dest
.
writeLong
(
qty
);
dest
.
writeLong
(
realPrice
);
}
}
app/src/main/java/com/example/yourcashiertest/models/CartModel.java
deleted
100644 → 0
View file @
e7f5836c
package
com
.
example
.
yourcashiertest
.
models
;
public
class
CartModel
{
long
price
,
qty
,
idProduct
;
String
nameProduct
,
image
;
public
long
getPrice
()
{
return
price
;
}
public
void
setPrice
(
long
price
)
{
this
.
price
=
price
;
}
public
long
getQty
()
{
return
qty
;
}
public
void
setQty
(
long
qty
)
{
this
.
qty
=
qty
;
}
public
long
getIdProduct
()
{
return
idProduct
;
}
public
void
setIdProduct
(
long
idProduct
)
{
this
.
idProduct
=
idProduct
;
}
public
String
getNameProduct
()
{
return
nameProduct
;
}
public
void
setNameProduct
(
String
nameProduct
)
{
this
.
nameProduct
=
nameProduct
;
}
public
String
getImage
()
{
return
image
;
}
public
void
setImage
(
String
image
)
{
this
.
image
=
image
;
}
}
app/src/main/java/com/example/yourcashiertest/models/ResponseUser.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
models
;
import
java.util.List
;
import
com.google.gson.annotations.SerializedName
;
public
class
ResponseUser
{
@SerializedName
(
"data"
)
private
List
<
User
>
user
;
@SerializedName
(
"message"
)
private
String
message
;
@SerializedName
(
"status"
)
private
boolean
status
;
public
void
setData
(
List
<
User
>
data
){
this
.
user
=
data
;
}
public
List
<
User
>
getData
(){
return
user
;
}
public
void
setMessage
(
String
message
){
this
.
message
=
message
;
}
public
String
getMessage
(){
return
message
;
}
public
void
setStatus
(
boolean
status
){
this
.
status
=
status
;
}
public
boolean
isStatus
(){
return
status
;
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/models/User.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
models
;
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
com.google.gson.annotations.SerializedName
;
public
class
User
implements
Parcelable
{
@SerializedName
(
"password"
)
private
String
password
;
@SerializedName
(
"full_name"
)
private
String
fullName
;
@SerializedName
(
"phone_number"
)
private
String
phoneNumber
;
@SerializedName
(
"email"
)
private
String
email
;
public
User
(
Parcel
in
)
{
password
=
in
.
readString
();
fullName
=
in
.
readString
();
phoneNumber
=
in
.
readString
();
email
=
in
.
readString
();
}
public
static
final
Creator
<
User
>
CREATOR
=
new
Creator
<
User
>()
{
@Override
public
User
createFromParcel
(
Parcel
in
)
{
return
new
User
(
in
);
}
@Override
public
User
[]
newArray
(
int
size
)
{
return
new
User
[
size
];
}
};
public
User
()
{
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
void
setFullName
(
String
fullName
)
{
this
.
fullName
=
fullName
;
}
public
void
setPhoneNumber
(
String
phoneNumber
)
{
this
.
phoneNumber
=
phoneNumber
;
}
public
void
setEmail
(
String
email
)
{
this
.
email
=
email
;
}
public
String
getPassword
(){
return
password
;
}
public
String
getFullName
(){
return
fullName
;
}
public
String
getPhoneNumber
(){
return
phoneNumber
;
}
public
String
getEmail
(){
return
email
;
}
@Override
public
int
describeContents
()
{
return
0
;
}
@Override
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
dest
.
writeString
(
password
);
dest
.
writeString
(
fullName
);
dest
.
writeString
(
phoneNumber
);
dest
.
writeString
(
email
);
}
}
\ No newline at end of file
app/src/main/java/com/example/yourcashiertest/repositories/CartRepository.java
View file @
a28bae52
...
...
@@ -16,7 +16,7 @@ public class CartRepository {
public
CartRepository
(
Application
application
){
LocalDatabase
db
=
LocalDatabase
.
getDatabase
(
application
);
//
cartDao = db.cartDao();
cartDao
=
db
.
cartDao
();
carts
=
cartDao
.
getCarts
();
}
...
...
@@ -32,6 +32,10 @@ public class CartRepository {
LocalDatabase
.
databaseWriteExecutor
.
execute
(()
->
cartDao
.
deleteCart
(
cart
));
}
public
void
clear
(){
LocalDatabase
.
databaseWriteExecutor
.
execute
(()
->
cartDao
.
deletAll
());
}
public
LiveData
<
List
<
Cart
>>
getAllCart
(){
return
this
.
carts
;
}
...
...
app/src/main/java/com/example/yourcashiertest/services/UserService.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
services
;
import
com.example.yourcashiertest.models.ResponseUser
;
import
com.example.yourcashiertest.models.User
;
import
java.util.List
;
import
retrofit2.Call
;
import
retrofit2.http.Body
;
import
retrofit2.http.GET
;
import
retrofit2.http.Headers
;
import
retrofit2.http.POST
;
public
interface
UserService
{
@GET
(
"v1/customer"
)
Call
<
ResponseUser
>
getAllUser
();
@Headers
(
"Content-Type: application/json"
)
@POST
(
"v1/customer"
)
Call
<
User
>
registerUser
(
@Body
User
user
);
}
app/src/main/java/com/example/yourcashiertest/utils/Convert.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
utils
;
import
java.text.DecimalFormat
;
import
java.text.DecimalFormatSymbols
;
public
class
Convert
{
public
static
String
changeToCurrency
(
long
totalPrice
){
DecimalFormat
decimalFormat
=
(
DecimalFormat
)
DecimalFormat
.
getCurrencyInstance
();
DecimalFormatSymbols
formatSymbols
=
new
DecimalFormatSymbols
();
formatSymbols
.
setCurrencySymbol
(
"Rp. "
);
formatSymbols
.
setMonetaryDecimalSeparator
(
','
);
formatSymbols
.
setGroupingSeparator
(
'.'
);
String
priceRupiah
=
decimalFormat
.
format
(
totalPrice
);
return
priceRupiah
;
}
}
app/src/main/java/com/example/yourcashiertest/viewmodels/CartVM.java
deleted
100644 → 0
View file @
e7f5836c
package
com
.
example
.
yourcashiertest
.
viewmodels
;
import
androidx.lifecycle.MutableLiveData
;
import
androidx.lifecycle.ViewModel
;
import
com.example.yourcashiertest.models.CartModel
;
import
java.util.List
;
public
class
CartVM
extends
ViewModel
{
public
MutableLiveData
<
List
<
CartModel
>>
allCart
;
public
MutableLiveData
<
List
<
CartModel
>>
getAllCart
()
{
return
allCart
;
}
public
void
setAllCart
(
List
<
CartModel
>
cart
)
{
this
.
allCart
.
postValue
(
cart
);
}
}
app/src/main/java/com/example/yourcashiertest/viewmodels/CartViewModel.java
View file @
a28bae52
...
...
@@ -40,6 +40,10 @@ public class CartViewModel extends AndroidViewModel {
repository
.
delete
(
cart
);
}
public
void
clear
(){
repository
.
clear
();
}
public
MutableLiveData
<
Cart
>
getCart
(){
return
this
.
cart
;
}
...
...
app/src/main/java/com/example/yourcashiertest/viewmodels/UserViewModel.java
0 → 100644
View file @
a28bae52
package
com
.
example
.
yourcashiertest
.
viewmodels
;
import
android.util.Log
;
import
androidx.lifecycle.MutableLiveData
;
import
androidx.lifecycle.ViewModel
;
import
com.example.yourcashiertest.clients.ApiClient
;
import
com.example.yourcashiertest.models.ResponseUser
;
import
com.example.yourcashiertest.models.User
;
import
com.example.yourcashiertest.services.UserService
;
import
java.util.List
;
import
retrofit2.Call
;
import
retrofit2.Callback
;
import
retrofit2.Response
;
public
class
UserViewModel
extends
ViewModel
{
MutableLiveData
<
List
<
User
>>
listUser
=
new
MutableLiveData
<>();
public
final
String
BASE_URL
=
"https://your-cashier.herokuapp.com/api/"
;
public
MutableLiveData
<
List
<
User
>>
getListUser
(){
return
this
.
listUser
;
}
public
void
registrasi
(
User
user
){
ApiClient
.
client
(
UserService
.
class
,
BASE_URL
).
registerUser
(
user
)
.
enqueue
(
new
Callback
<
User
>()
{
@Override
public
void
onResponse
(
Call
<
User
>
call
,
Response
<
User
>
response
)
{
}
@Override
public
void
onFailure
(
Call
<
User
>
call
,
Throwable
t
)
{
}
});
}
public
void
setListUser
(){
ApiClient
.
client
(
UserService
.
class
,
BASE_URL
).
getAllUser
().
enqueue
(
new
Callback
<
ResponseUser
>()
{
@Override
public
void
onResponse
(
Call
<
ResponseUser
>
call
,
Response
<
ResponseUser
>
response
)
{
listUser
.
setValue
(
response
.
body
().
getData
());
Log
.
d
(
"user"
,
String
.
valueOf
(
response
.
body
().
getData
()));
}
@Override
public
void
onFailure
(
Call
<
ResponseUser
>
call
,
Throwable
t
)
{
}
});
}
}
app/src/main/res/drawable/credit_card.png
deleted
100644 → 0
View file @
e7f5836c
18.2 KB
app/src/main/res/drawable/ic_undraw_credit_card.xml
0 → 100644
View file @
a28bae52
<vector
android:height=
"511.68176dp"
android:viewportHeight=
"517.3097"
android:viewportWidth=
"567.1704"
android:width=
"561dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<path
android:fillColor=
"#3f3d56"
android:pathData=
"M13.551,186.032l475.239,-138.465l12.588,43.204l-475.239,138.465z"
/>
<path
android:fillColor=
"#3f3d56"
android:pathData=
"M70.329,384.481 L0.283,144.068a7,7 0,0 1,4.763 -8.679L468.764,0.281a7.006,7.006 0,0 1,8.679 4.762l62.056,212.989 -1.92,0.56L475.522,5.603a5.009,5.009 0,0 0,-6.199 -3.402L5.605,137.309a5,5 0,0 0,-3.402 6.199l70.047,240.413Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M436.862,219.022a6.512,6.512 0,0 1,-6.243 -4.683l-11.749,-40.323a6.507,6.507 0,0 1,4.422 -8.059l40.323,-11.749a6.507,6.507 0,0 1,8.059 4.423L483.423,198.955a6.507,6.507 0,0 1,-4.422 8.059l-40.323,11.749A6.479,6.479 0,0 1,436.862 219.022Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M69.246,144.812a11.691,11.691 0,0 0,-0.43 -1.22,12 12,0 0,0 -22.91,6.67 11.38,11.38 0,0 0,0.29 1.26,12.019 12.019,0 0,0 11.53,8.64 11.749,11.749 0,0 0,3.35 -0.48A12.013,12.013 0,0 0,69.246 144.812ZM60.516,157.762a10.013,10.013 0,0 1,-12.4 -6.8,11.435 11.435,0 0,1 -0.28,-1.26 9.997,9.997 0,0 1,19.04 -5.54,8.338 8.338,0 0,1 0.45,1.21A10.004,10.004 0,0 1,60.516 157.762Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M39.814,153.382a11.002,11.002 0,0 1,4.208 -12.057,11 11,0 1,0 5.818,19.967A11.002,11.002 0,0 1,39.814 153.382Z"
/>
<path
android:fillColor=
"#ccc"
android:pathData=
"M350.676,202.942a6.042,6.042 0,0 0,-7.45 -4.2L276.836,217.312l-7.15,2h44.9l7.15,-2 24.75,-6.92A6.049,6.049 0,0 0,350.676 202.942Z"
/>
<path
android:fillColor=
"#ccc"
android:pathData=
"M303.706,189.072a6.045,6.045 0,0 0,-7.45 -4.19l-99.62,27.86a6.068,6.068 0,0 0,-4.37 6.57h25.79l7.16,-2 74.3,-20.78A6.055,6.055 0,0 0,303.706 189.072Z"
/>
<path
android:fillColor=
"#3f3d56"
android:pathData=
"M560.17,217.31L77.17,217.31a7.008,7.008 0,0 0,-7 7v286a7.008,7.008 0,0 0,7 7L560.17,517.31a7.008,7.008 0,0 0,7 -7v-286A7.008,7.008 0,0 0,560.17 217.31ZM565.17,510.31a5.002,5.002 0,0 1,-5 5L77.17,515.31a5.002,5.002 0,0 1,-5 -5v-286a5.002,5.002 0,0 1,5 -5L560.17,219.31a5.002,5.002 0,0 1,5 5Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M124.166,256.312a12,12 0,1 1,12 -12A12.014,12.014 0,0 1,124.166 256.312ZM124.166,234.312a10,10 0,1 0,10 10A10.011,10.011 0,0 0,124.166 234.312Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M105.514,244.312a11.002,11.002 0,0 1,7.413 -10.399,11 11,0 1,0 0,20.797A11.002,11.002 0,0 1,105.514 244.312Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M172.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,172.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M196.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,196.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M220.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,220.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M257.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,257.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M281.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,281.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M305.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,305.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M342.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,342.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M366.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,366.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M390.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,390.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M427.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,427.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M451.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,451.81 386.09Z"
/>
<path
android:fillColor=
"#E0A240"
android:pathData=
"M475.81,386.09a9.01,9.01 0,0 1,-9 -9v-27a9,9 0,0 1,18 0v27A9.01,9.01 0,0 1,475.81 386.09Z"
/>
<path
android:fillColor=
"#e6e6e6"
android:pathData=
"M233.828,486.257L104.388,486.257a6.047,6.047 0,1 1,0 -12.095L233.828,474.162a6.047,6.047 0,1 1,0 12.095Z"
/>
<path
android:fillColor=
"#e6e6e6"
android:pathData=
"M192.328,460.257L145.888,460.257a6.047,6.047 0,1 1,0 -12.095h46.44a6.047,6.047 0,1 1,0 12.095Z"
/>
<path
android:fillColor=
"#3f3d56"
android:pathData=
"M71.81,277.09h493v2h-493z"
/>
</vector>
app/src/main/res/drawable/ic_undraw_wallet.xml
0 → 100644
View file @
a28bae52
This diff is collapsed.
Click to expand it.
app/src/main/res/drawable/wallet.png
deleted
100644 → 0
View file @
e7f5836c
56.7 KB
app/src/main/res/drawable/yout_cashier.png
0 → 100644
View file @
a28bae52
5.65 KB
app/src/main/res/layout/activity_cart.xml
View file @
a28bae52
...
...
@@ -55,7 +55,6 @@
android:layout_height=
"21dp"
android:layout_marginEnd=
"5dp"
android:gravity=
"top"
tools:text=
"$342424"
app:layout_constraintBottom_toBottomOf=
"@+id/cart"
app:layout_constraintStart_toEndOf=
"@+id/cart"
app:layout_constraintEnd_toStartOf=
"@+id/amount"
...
...
@@ -79,7 +78,6 @@
android:layout_height=
"20dp"
android:gravity=
"top"
android:textColor=
"#fff"
android:text=
""
android:textAppearance=
"@style/some_id"
app:layout_constraintBottom_toBottomOf=
"@+id/amount"
app:layout_constraintEnd_toEndOf=
"@+id/amount"
...
...
app/src/main/res/layout/activity_forget_password.xml
View file @
a28bae52
...
...
@@ -6,15 +6,25 @@
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=
"25dp"
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/tilEmail"
app:boxBackgroundColor=
"@color/white"
android:textColorHint=
"@color/grey"
app:boxStrokeColor=
"@color/black"
style=
"@style/Widget.MaterialComponents.TextInputLayout.FilledBox.Dense"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_to
TopOf=
"parent
"
app:layout_constraintTop_to
BottomOf=
"@id/tvResetPassword
"
android:layout_marginTop=
"20dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
...
...
@@ -29,17 +39,65 @@
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id=
"@+id/btnResetPw"
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilCrPw"
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/etCrPw"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"Current Password"
android:imeOptions=
"actionNext"
android:inputType=
"text"
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/tilCrPw"
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
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:text=
"RESET PASSWORD"
app:cornerRadius=
"@dimen/space_default"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/tilEmail"
/>
app:layout_constraintTop_toBottomOf=
"@+id/tilNewPw"
app:layout_constraintVertical_bias=
"0.008"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/activity_login.xml
View file @
a28bae52
...
...
@@ -17,7 +17,7 @@
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
android:textStyle=
"bold"
android:text=
"L
ogin
"
/>
android:text=
"L
OGIN
"
/>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilUsername"
...
...
app/src/main/res/layout/activity_payment.xml
View file @
a28bae52
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.ConstraintL
ayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
l
ayout
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"
xmlns:tools=
"http://schemas.android.com/tools"
>
<data>
<variable
name=
"amount"
type=
"String"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:padding=
"12dp"
...
...
@@ -28,13 +37,14 @@
android:layout_height=
"wrap_content"
android:elegantTextHeight=
"true"
android:gravity=
"center"
android:text=
"Rp. 500.000
"
android:text=
"@{amount}
"
android:textSize=
"24dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.902"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/tvPayment"
app:layout_constraintVertical_bias=
"0.0"
/>
<com.google.android.material.card.MaterialCardView
android:id=
"@+id/cvCash"
android:layout_width=
"match_parent"
...
...
@@ -53,7 +63,7 @@
android:id=
"@+id/iv_cash"
android:layout_width=
"200dp"
android:layout_height=
"wrap_content"
android:src=
"@drawable/
wallet"
android:src=
"@drawable/ic_undraw_
wallet"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.0"
...
...
@@ -79,6 +89,7 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id=
"@+id/cvCard"
android:layout_width=
"match_parent"
...
...
@@ -98,7 +109,7 @@
android:id=
"@+id/iv_card"
android:layout_width=
"200dp"
android:layout_height=
"wrap_content"
android:src=
"@drawable/
credit_card"
android:src=
"@drawable/ic_undraw_
credit_card"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.0"
...
...
@@ -161,4 +172,5 @@
app:layout_constraintBottom_toBottomOf=
"parent"
tools:layout_editor_absoluteX=
"16dp"
tools:layout_editor_absoluteY=
"654dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/activity_register.xml
View file @
a28bae52
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.ConstraintL
ayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
l
ayout
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"
xmlns:tools=
"http://schemas.android.com/tools"
>
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".activities.RegisterActivity"
>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tvRegister"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textSize=
"25dp"
android:layout_marginTop=
"8
0dp"
android:layout_marginTop=
"5
0dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
android:textStyle=
"bold"
android:text=
"Register Account"
/>
android:text=
"REGISTER ACCOUNT"
/>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilUsername"
...
...
@@ -23,7 +30,7 @@
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@+id/tvRegister"
android:layout_marginTop=
"6
0dp"
android:layout_marginTop=
"4
0dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:layout_marginBottom=
"@dimen/space_default"
>
...
...
@@ -37,6 +44,7 @@
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilEmail"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
...
...
@@ -57,6 +65,7 @@
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilPhoneNumber"
style=
"@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
...
...
@@ -77,6 +86,7 @@
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id=
"@+id/tilPassword"
app:passwordToggleEnabled=
"true"
...
...
@@ -98,11 +108,46 @@
android:imeOptions=
"actionNext"
android:textSize=
"@dimen/text_default"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tvDescSk"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"10dp"
android:layout_marginTop=
"15dp"
android:text=
"By registering you have agreed to the"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/tilPassword"
/>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tvSK"
android:onClick=
"tvSK"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"75dp"
android:layout_marginTop=
"10dp"
android:text=
"Terms and Conditions"
android:textColor=
"@color/blue"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/tvDescSk"
/>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tvYourCashier"
android:onClick=
"tvSignInHere"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"2dp"
android:layout_marginTop=
"10dp"
android:text=
"Your Cashier"
app:layout_constraintStart_toEndOf=
"@id/tvSK"
app:layout_constraintTop_toBottomOf=
"@id/tvDescSk"
/>
<com.google.android.material.button.MaterialButton
android:id=
"@+id/btnRegister"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20
dp"
android:layout_marginTop=
"15
dp"
android:layout_marginStart=
"@dimen/space_default"
android:layout_marginEnd=
"@dimen/space_default"
android:backgroundTint=
"@color/colorPrimary"
...
...
@@ -110,13 +155,13 @@
android:text=
"Register My Account"
app:cornerRadius=
"@dimen/space_default"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/tilPassword
"
/>
app:layout_constraintTop_toBottomOf=
"@+id/tvSK
"
/>
<com.google.android.material.textview.MaterialTextView
android:id=
"@+id/tvDontHaveAnAccount"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"60
dp"
android:layout_marginStart=
"75
dp"
android:layout_marginTop=
"15dp"
android:text=
"@string/dont_have_an_account"
app:layout_constraintEnd_toStartOf=
"@id/tvSignInHere"
...
...
@@ -134,4 +179,5 @@
android:textColor=
"@color/blue"
app:layout_constraintStart_toEndOf=
"@id/tvDontHaveAnAccount"
app:layout_constraintTop_toBottomOf=
"@id/btnRegister"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/activity_sk.xml
0 → 100644
View file @
a28bae52
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
tools:context=
".activities.SkActivity"
>
<WebView
android:id=
"@+id/wbCompany"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:visibility=
"gone"
tools:context=
".materials.designs.webview.CompanyActivity"
/>
<ProgressBar
android:id=
"@+id/pbLoading"
android:layout_width=
"128dp"
android:layout_height=
"128dp"
android:layout_centerInParent=
"true"
/>
</RelativeLayout>
\ No newline at end of file
app/src/main/res/layout/activity_splash.xml
View file @
a28bae52
...
...
@@ -17,12 +17,4 @@
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<ProgressBar
android:id=
"@+id/pbLoading"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/ivLogo"
app:layout_constraintBottom_toBottomOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/activity_status_payment.xml
View file @
a28bae52
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.ConstraintL
ayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
l
ayout
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"
xmlns:tools=
"http://schemas.android.com/tools"
>
<data>
<variable
name=
"refund"
type=
"String"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:padding=
"10dp"
...
...
@@ -64,7 +72,7 @@
android:layout_height=
"wrap_content"
android:layout_marginTop=
"28dp"
android:gravity=
"center"
android:text=
"Rp. 44000
"
android:text=
"@{refund}
"
android:textSize=
"45dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.0"
...
...
@@ -85,4 +93,5 @@
app:layout_constraintTop_toBottomOf=
"@+id/tvNominalRefund"
app:layout_constraintVertical_bias=
"1.0"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/cart_item.xml
View file @
a28bae52
...
...
@@ -7,14 +7,19 @@
<variable
name=
"cartProduct"
type=
"com.example.yourcashiertest.entities.Cart"
/>
<variable
name=
"qty"
type=
"String"
/>
<variable
name=
"price"
type=
"String"
/>
</data>
<com.google.android.material.card.MaterialCardView
android:layout_width=
"match_parent"
android:layout_height=
"
match_par
ent"
>
android:layout_height=
"
wrap_cont
ent"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
...
...
@@ -27,6 +32,7 @@
android:id=
"@+id/imageView"
android:layout_width=
"107dp"
android:layout_height=
"110dp"
app:file=
"@{cartProduct.image}"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.003"
...
...
@@ -42,7 +48,7 @@
android:layout_alignParentLeft=
"true"
android:layout_alignParentTop=
"true"
android:gravity=
"top"
android:text=
"@
string/burger_medi
"
android:text=
"@
{cartProduct.nameProduct}
"
android:textAppearance=
"@style/burger_medi"
app:layout_constraintBottom_toBottomOf=
"@+id/imageView"
app:layout_constraintEnd_toEndOf=
"parent"
...
...
@@ -59,9 +65,7 @@
android:layout_alignParentTop=
"true"
android:gravity=
"top"
android:text=
""
tools:text=
"$6000"
android:layout_marginStart=
"20dp"
android:layout_marginBottom=
"20dp"
tools:text=
"@{price}"
android:textAppearance=
"@style/some_id"
app:layout_constraintBottom_toBottomOf=
"@+id/imageView"
app:layout_constraintHorizontal_bias=
"0.106"
...
...
@@ -113,8 +117,7 @@
android:id=
"@+id/tv_qty"
android:layout_width=
"10dp"
android:layout_height=
"wrap_content"
android:text=
"@{qty}"
tools:text=
"4"
android:text=
"@{cartProduct.qty + ``}"
app:layout_constraintBottom_toBottomOf=
"@+id/v_add"
app:layout_constraintEnd_toStartOf=
"@+id/btn_add"
app:layout_constraintStart_toEndOf=
"@+id/btn_min"
...
...
app/src/main/res/layout/slide1.xml
View file @
a28bae52
...
...
@@ -13,7 +13,8 @@
<ImageView
android:layout_width=
"250dp"
android:layout_height=
"200dp"
/>
android:layout_height=
"200dp"
android:src=
"@drawable/yout_cashier"
/>
<TextView
android:layout_width=
"wrap_content"
...
...
app/src/main/res/menu/settings_menu.xml
View file @
a28bae52
...
...
@@ -6,4 +6,7 @@
<item
android:id=
"@+id/item_two"
android:title=
"Update / Delete Product"
/>
<item
android:id=
"@+id/item_three"
android:title=
"Log Out"
/>
</menu>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
a28bae52
...
...
@@ -27,7 +27,7 @@
<string
name=
"payment_by_cash_was_successful"
>
Payment by Cash was successful
</string>
<string
name=
"refund"
>
Refund
</string>
<string
name=
"payment_status"
>
Payment Status
</string>
<string
name=
"lupa_password"
>
Forg
e
t Password?
</string>
<string
name=
"lupa_password"
>
Forg
o
t Password?
</string>
<string
name=
"dont_have_an_account"
>
Dont have an Account?
</string>
<string
name=
"sign_up_here"
>
Sign Up Here
</string>
<string
name=
"sign_in_here"
>
Sign In Here
</string>
...
...
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