Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
meser
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
Muhammad Suryono
meser
Commits
e23f08f8
Commit
e23f08f8
authored
Aug 24, 2020
by
iman Fauzi
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' into cart
parents
c7eb6f42
1507ff21
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
155 additions
and
72 deletions
+155
-72
LoginActivity.java
app/src/main/java/com/yono/messeripos/LoginActivity.java
+8
-0
MainActivity.java
app/src/main/java/com/yono/messeripos/MainActivity.java
+3
-2
SplashScreen.java
app/src/main/java/com/yono/messeripos/SplashScreen.java
+15
-3
ProductAdapter.java
...main/java/com/yono/messeripos/adapter/ProductAdapter.java
+14
-4
ApiHelper.java
app/src/main/java/com/yono/messeripos/api/ApiHelper.java
+1
-0
ProductModels.java
...c/main/java/com/yono/messeripos/models/ProductModels.java
+27
-0
ic_baseline_delete_24.xml
app/src/main/res/drawable/ic_baseline_delete_24.xml
+1
-1
ic_baseline_edit_24.xml
app/src/main/res/drawable/ic_baseline_edit_24.xml
+5
-0
item_list.xml
app/src/main/res/layout/item_list.xml
+81
-62
No files found.
app/src/main/java/com/yono/messeripos/LoginActivity.java
View file @
e23f08f8
...
@@ -4,8 +4,10 @@ import androidx.appcompat.app.AppCompatActivity;
...
@@ -4,8 +4,10 @@ import androidx.appcompat.app.AppCompatActivity;
import
androidx.lifecycle.Observer
;
import
androidx.lifecycle.Observer
;
import
androidx.lifecycle.ViewModelProviders
;
import
androidx.lifecycle.ViewModelProviders
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Build
;
import
android.content.SharedPreferences
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.util.Log
;
...
@@ -28,6 +30,7 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -28,6 +30,7 @@ public class LoginActivity extends AppCompatActivity {
MaterialButton
btnLogin
;
MaterialButton
btnLogin
;
MainViewModels
mainViewModels
;
MainViewModels
mainViewModels
;
ProgressBar
progressBar
;
ProgressBar
progressBar
;
SharedPreferences
sharedPreferences
;
@Override
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
...
@@ -46,6 +49,7 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -46,6 +49,7 @@ public class LoginActivity extends AppCompatActivity {
progressBar
.
setVisibility
(
View
.
GONE
);
progressBar
.
setVisibility
(
View
.
GONE
);
mainViewModels
=
ViewModelProviders
.
of
(
this
).
get
(
MainViewModels
.
class
);
mainViewModels
=
ViewModelProviders
.
of
(
this
).
get
(
MainViewModels
.
class
);
sharedPreferences
=
getSharedPreferences
(
SplashScreen
.
MY_SHARED_PREFERENCES
,
Context
.
MODE_PRIVATE
);
btnLogin
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
btnLogin
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
@Override
...
@@ -72,6 +76,9 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -72,6 +76,9 @@ public class LoginActivity extends AppCompatActivity {
Log
.
d
(
"Status"
,
usersModelsDataResponse
.
getMessageData
());
Log
.
d
(
"Status"
,
usersModelsDataResponse
.
getMessageData
());
if
(!
usersModelsDataResponse
.
getMessageData
().
equals
(
"Login Failed"
)){
if
(!
usersModelsDataResponse
.
getMessageData
().
equals
(
"Login Failed"
)){
SharedPreferences
.
Editor
editor
=
sharedPreferences
.
edit
();
editor
.
putBoolean
(
SplashScreen
.
SESSION
,
true
);
editor
.
commit
();
startActivity
(
new
Intent
(
LoginActivity
.
this
,
MainActivity
.
class
));
startActivity
(
new
Intent
(
LoginActivity
.
this
,
MainActivity
.
class
));
progressBar
.
setVisibility
(
View
.
GONE
);
progressBar
.
setVisibility
(
View
.
GONE
);
...
@@ -84,6 +91,7 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -84,6 +91,7 @@ public class LoginActivity extends AppCompatActivity {
username
.
setEnabled
(
true
);
username
.
setEnabled
(
true
);
password
.
setEnabled
(
true
);
password
.
setEnabled
(
true
);
btnLogin
.
setEnabled
(
true
);
btnLogin
.
setEnabled
(
true
);
finish
();
}
}
}
}
...
...
app/src/main/java/com/yono/messeripos/MainActivity.java
View file @
e23f08f8
...
@@ -19,6 +19,7 @@ import androidx.lifecycle.ViewModelProvider;
...
@@ -19,6 +19,7 @@ import androidx.lifecycle.ViewModelProvider;
import
androidx.lifecycle.Observer
;
import
androidx.lifecycle.Observer
;
import
androidx.lifecycle.ViewModelProviders
;
import
androidx.lifecycle.ViewModelProviders
;
import
androidx.recyclerview.widget.GridLayoutManager
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
com.google.android.material.appbar.MaterialToolbar
;
import
com.google.android.material.appbar.MaterialToolbar
;
...
@@ -110,8 +111,8 @@ public class MainActivity extends AppCompatActivity {
...
@@ -110,8 +111,8 @@ public class MainActivity extends AppCompatActivity {
productModelsArrayList
.
addAll
(
productModels
);
productModelsArrayList
.
addAll
(
productModels
);
productAdapter
.
setProduct
(
MainActivity
.
this
,
productModelsArrayList
);
productAdapter
.
setProduct
(
MainActivity
.
this
,
productModelsArrayList
);
binding
.
rv
Category
.
setLayoutManager
(
new
LinearLayoutManager
(
MainActivity
.
this
,
LinearLayoutManager
.
HORIZONTAL
,
false
));
binding
.
rv
Product
.
setLayoutManager
(
new
GridLayoutManager
(
MainActivity
.
this
,
2
));
binding
.
rv
Category
.
setAdapter
(
category
Adapter
);
binding
.
rv
Product
.
setAdapter
(
product
Adapter
);
}
}
...
...
app/src/main/java/com/yono/messeripos/SplashScreen.java
View file @
e23f08f8
package
com
.
yono
.
messeripos
;
package
com
.
yono
.
messeripos
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Looper
;
...
@@ -12,6 +14,10 @@ import androidx.appcompat.app.AppCompatActivity;
...
@@ -12,6 +14,10 @@ import androidx.appcompat.app.AppCompatActivity;
public
class
SplashScreen
extends
AppCompatActivity
{
public
class
SplashScreen
extends
AppCompatActivity
{
ImageView
img
;
ImageView
img
;
SharedPreferences
sharedPreferences
;
public
static
final
String
MY_SHARED_PREFERENCES
=
"my_shared_preferences"
;
public
static
final
String
SESSION
=
"session"
;
public
static
Boolean
session
;
@Override
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
public
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
...
@@ -20,12 +26,18 @@ public class SplashScreen extends AppCompatActivity {
...
@@ -20,12 +26,18 @@ public class SplashScreen extends AppCompatActivity {
// Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.zoom_in);
// Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.zoom_in);
// img.startAnimation(animation);
// img.startAnimation(animation);
sharedPreferences
=
getSharedPreferences
(
MY_SHARED_PREFERENCES
,
Context
.
MODE_PRIVATE
);
session
=
sharedPreferences
.
getBoolean
(
SESSION
,
false
);
new
Handler
(
Looper
.
getMainLooper
()).
postDelayed
(()->{
new
Handler
(
Looper
.
getMainLooper
()).
postDelayed
(()->{
startActivity
(
new
Intent
(
SplashScreen
.
this
,
LoginActivity
.
class
));
if
(
session
){
finish
();
startActivity
(
new
Intent
(
SplashScreen
.
this
,
MainActivity
.
class
));
finish
();
}
else
{
startActivity
(
new
Intent
(
SplashScreen
.
this
,
LoginActivity
.
class
));
finish
();
}
},
3000
);
},
3000
);
}
}
}
}
app/src/main/java/com/yono/messeripos/adapter/ProductAdapter.java
View file @
e23f08f8
...
@@ -2,7 +2,6 @@ package com.yono.messeripos.adapter;
...
@@ -2,7 +2,6 @@ package com.yono.messeripos.adapter;
import
android.content.Context
;
import
android.content.Context
;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.NonNull
;
...
@@ -10,13 +9,12 @@ import androidx.databinding.DataBindingUtil;
...
@@ -10,13 +9,12 @@ import androidx.databinding.DataBindingUtil;
import
androidx.recyclerview.widget.RecyclerView
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.yono.messeripos.R
;
import
com.yono.messeripos.R
;
import
com.yono.messeripos.databinding.ItemCategoryBinding
;
import
com.yono.messeripos.databinding.ItemListBinding
;
import
com.yono.messeripos.databinding.ItemListBinding
;
import
com.yono.messeripos.models.CategoryModels
;
import
com.yono.messeripos.models.ProductModels
;
import
com.yono.messeripos.models.ProductModels
;
import
java.text.DecimalFormat
;
import
java.text.DecimalFormatSymbols
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
ProductAdapter
extends
RecyclerView
.
Adapter
<
ProductAdapter
.
MyViewHolder
>
{
public
class
ProductAdapter
extends
RecyclerView
.
Adapter
<
ProductAdapter
.
MyViewHolder
>
{
private
ArrayList
<
ProductModels
>
productModels
;
private
ArrayList
<
ProductModels
>
productModels
;
...
@@ -63,6 +61,18 @@ public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHo
...
@@ -63,6 +61,18 @@ public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHo
public
void
bindData
(
ProductModels
products
)
{
public
void
bindData
(
ProductModels
products
)
{
binding
.
setProducts
(
products
);
binding
.
setProducts
(
products
);
DecimalFormat
rupiah
=
(
DecimalFormat
)
DecimalFormat
.
getCurrencyInstance
();
DecimalFormatSymbols
format
=
new
DecimalFormatSymbols
();
format
.
setCurrencySymbol
(
"Rp. "
);
format
.
setMonetaryDecimalSeparator
(
','
);
format
.
setGroupingSeparator
(
'.'
);
rupiah
.
setDecimalFormatSymbols
(
format
);
binding
.
setPrice
(
rupiah
.
format
(
products
.
getPriceProduct
()));
binding
.
setImage
(
products
.
getImageProduct
());
}
}
}
}
}
}
app/src/main/java/com/yono/messeripos/api/ApiHelper.java
View file @
e23f08f8
...
@@ -6,6 +6,7 @@ import retrofit2.converter.gson.GsonConverterFactory;
...
@@ -6,6 +6,7 @@ import retrofit2.converter.gson.GsonConverterFactory;
public
class
ApiHelper
{
public
class
ApiHelper
{
public
static
final
String
BASE_URL
=
"https://rest-api-meser.herokuapp.com/"
;
public
static
final
String
BASE_URL
=
"https://rest-api-meser.herokuapp.com/"
;
public
static
final
String
VERSI_API_1
=
"api/v1/"
;
public
static
final
String
VERSI_API_1
=
"api/v1/"
;
public
static
final
String
BASE_URL_IMAGE
=
"https://storage.googleapis.com/rest-api-meser.appspot.com/images/"
;
public
static
Retrofit
request
(
String
baseUrl
){
public
static
Retrofit
request
(
String
baseUrl
){
Retrofit
retrofit
=
new
Retrofit
.
Builder
()
Retrofit
retrofit
=
new
Retrofit
.
Builder
()
...
...
app/src/main/java/com/yono/messeripos/models/ProductModels.java
View file @
e23f08f8
package
com
.
yono
.
messeripos
.
models
;
package
com
.
yono
.
messeripos
.
models
;
import
android.widget.ImageView
;
import
androidx.databinding.BindingAdapter
;
import
com.bumptech.glide.Glide
;
import
com.google.gson.annotations.SerializedName
;
import
com.google.gson.annotations.SerializedName
;
import
com.yono.messeripos.R
;
import
com.yono.messeripos.api.ApiHelper
;
public
class
ProductModels
<
T
>
{
public
class
ProductModels
<
T
>
{
@SerializedName
(
"id"
)
@SerializedName
(
"id"
)
...
@@ -15,6 +22,9 @@ public class ProductModels<T> {
...
@@ -15,6 +22,9 @@ public class ProductModels<T> {
@SerializedName
(
"stock"
)
@SerializedName
(
"stock"
)
private
int
stockProduct
;
private
int
stockProduct
;
@SerializedName
(
"image"
)
private
String
imageProduct
;
@SerializedName
(
"category"
)
@SerializedName
(
"category"
)
private
T
categoryProduct
;
private
T
categoryProduct
;
...
@@ -57,4 +67,21 @@ public class ProductModels<T> {
...
@@ -57,4 +67,21 @@ public class ProductModels<T> {
public
void
setCategoryProduct
(
T
categoryProduct
)
{
public
void
setCategoryProduct
(
T
categoryProduct
)
{
this
.
categoryProduct
=
categoryProduct
;
this
.
categoryProduct
=
categoryProduct
;
}
}
public
String
getImageProduct
()
{
return
imageProduct
;
}
public
void
setImageProduct
(
String
imageProduct
)
{
this
.
imageProduct
=
imageProduct
;
}
@BindingAdapter
(
"url"
)
public
static
void
setImage
(
ImageView
view
,
String
url
){
if
(
ApiHelper
.
BASE_URL_IMAGE
+
url
==
null
){
view
.
setImageResource
(
R
.
drawable
.
ic_meser
);
}
else
{
Glide
.
with
(
view
).
load
(
ApiHelper
.
BASE_URL_IMAGE
+
url
).
into
(
view
);
}
}
}
}
app/src/main/res/drawable/ic_baseline_delete_24.xml
View file @
e23f08f8
<vector
android:height=
"24dp"
android:tint=
"#F
F4A50
"
<vector
android:height=
"24dp"
android:tint=
"#F
C151B
"
android:viewportHeight=
"24"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
android:viewportWidth=
"24"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<path
android:fillColor=
"@android:color/white"
android:pathData=
"M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"
/>
<path
android:fillColor=
"@android:color/white"
android:pathData=
"M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"
/>
...
...
app/src/main/res/drawable/ic_baseline_edit_24.xml
0 → 100644
View file @
e23f08f8
<vector
android:height=
"24dp"
android:tint=
"#34C25B"
android:viewportHeight=
"24"
android:viewportWidth=
"24"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<path
android:fillColor=
"@android:color/white"
android:pathData=
"M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"
/>
</vector>
app/src/main/res/layout/item_list.xml
View file @
e23f08f8
...
@@ -7,79 +7,98 @@
...
@@ -7,79 +7,98 @@
<variable
<variable
name=
"products"
name=
"products"
type=
"com.yono.messeripos.models.ProductModels"
/>
type=
"com.yono.messeripos.models.ProductModels"
/>
<variable
name=
"price"
type=
"String"
/>
<variable
name=
"image"
type=
"String"
/>
</data>
</data>
<
com.google.android.material.card.MaterialCardView
<
androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"300dp"
android:layout_margin=
"@dimen/cardview_default_radius"
android:layout_marginEnd=
"10dp"
android:padding=
"@dimen/cardview_default_elevation"
android:layout_marginBottom=
"10dp"
>
app:cardCornerRadius=
"@dimen/cardview_default_radius"
>
<
RelativeLayout
<
com.google.android.material.card.MaterialCardView
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"match_parent"
app:cardElevation=
"0dp"
app:strokeWidth=
"1dp"
app:strokeColor=
"#3CB3B3B3"
app:cardCornerRadius=
"10dp"
>
<ImageView
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/ivMeser"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"match_parent"
>
android:adjustViewBounds=
"true"
tools:src=
"@tools:sample/avatars"
/>
<com.google.android.material.textview.MaterialTextView
<ImageView
android:id=
"@+id/tvQuantity"
android:id=
"@+id/image_product"
android:layout_width=
"wrap_content"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"200dp"
android:layout_above=
"@id/tvProduct"
android:src=
"@mipmap/ic_launcher_round"
android:layout_alignParentEnd=
"true"
app:layout_constraintTop_toTopOf=
"parent"
android:background=
"#fff"
app:url=
"@{image}"
android:fontFamily=
"monospace"
android:scaleType=
"fitXY"
/>
android:padding=
"@dimen/material_emphasis_medium"
android:textColor=
"@android:color/white"
android:textSize=
"12sp"
android:textStyle=
"bold"
tools:text=
"10"
/>
<com.google.android.material.textview.MaterialTextView
<ImageView
android:id=
"@+id/tvProduct"
android:id=
"@+id/btnDelete"
android:layout_width=
"match_parent"
android:layout_width=
"30dp"
android:layout_height=
"wrap_content"
android:layout_height=
"30dp"
android:layout_below=
"@id/ivMeser"
app:layout_constraintEnd_toEndOf=
"parent"
android:fontFamily=
"@font/roboto"
app:layout_constraintTop_toTopOf=
"parent"
android:gravity=
"center"
android:src=
"@drawable/ic_baseline_delete_24"
/>
android:padding=
"@dimen/material_emphasis_high_type"
android:textAllCaps=
"true"
android:textColor=
"@color/ic_launcher_background"
android:textSize=
"12sp"
android:textStyle=
"bold"
tools:text=
"@tools:sample/full_names"
/>
<com.google.android.material.textview.MaterialTextView
<ImageView
android:id=
"@+id/tvPrice"
android:id=
"@+id/btnEdit"
android:layout_width=
"match_parent"
android:layout_width=
"30dp"
android:layout_height=
"wrap_content"
android:layout_height=
"30dp"
android:layout_below=
"@id/tvProduct"
app:layout_constraintTop_toTopOf=
"parent"
android:fontFamily=
"@font/roboto"
app:layout_constraintEnd_toStartOf=
"@id/btnDelete"
android:gravity=
"end"
android:src=
"@drawable/ic_baseline_edit_24"
/>
android:paddingStart=
"@dimen/material_emphasis_medium"
android:paddingEnd=
"@dimen/material_emphasis_disabled"
android:textColor=
"@color/colorPrimary"
android:textSize=
"12sp"
/>
<com.google.android.material.textview.MaterialTextView
<TextView
android:id=
"@+id/tvDescription"
android:id=
"@+id/title_product"
android:layout_width=
"match_parent"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_below=
"@id/tvPrice"
app:layout_constraintTop_toBottomOf=
"@id/image_product"
android:fontFamily=
"@font/roboto"
app:layout_constraintStart_toStartOf=
"parent"
android:padding=
"@dimen/material_emphasis_high_type"
tools:text=
"@tools:sample/full_names"
android:textColor=
"@android:color/darker_gray"
android:textColor=
"@android:color/black"
android:textSize=
"12sp"
android:layout_marginStart=
"10dp"
tools:text=
"@tools:sample/lorem"
/>
android:layout_marginTop=
"5dp"
android:textSize=
"18sp"
android:lines=
"1"
android:textStyle=
"bold"
android:text=
"@{products.productName}"
android:maxLength=
"25"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/title_product"
app:layout_constraintStart_toStartOf=
"parent"
tools:text=
"@tools:sample/full_names"
android:textColor=
"@android:color/black"
android:layout_marginStart=
"10dp"
android:layout_marginTop=
"5dp"
android:textSize=
"18sp"
android:lines=
"1"
android:text=
"@{price}"
android:maxLength=
"25"
/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.button.MaterialButton
android:layout_width=
"match_parent"
android:layout_height=
"35dp"
android:layout_gravity=
"bottom"
android:layout_marginStart=
"10dp"
android:layout_marginEnd=
"10dp"
android:text=
"Add To Cart"
/>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.card.MaterialCardView
>
</androidx.constraintlayout.widget.ConstraintLayout
>
</layout>
</layout>
\ No newline at end of file
\ 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