Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
supplier
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王宇航
supplier
Commits
525c4def
Commit
525c4def
authored
Oct 28, 2020
by
宁斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
折扣增加:上限,獨佔,暫停,只一次,最小賬單金額邏輯
parent
aa04da1b
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
2006 additions
and
268 deletions
+2006
-268
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/dialog/CommonTipDialog.java
+26
-1
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/KeyBoardAdapter.java
+83
-0
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/OnPasswordInputFinish.java
+9
-0
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/PasswordView.java
+184
-0
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/PopEnterPassword.java
+105
-0
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/VirtualKeyboardView.java
+89
-0
base-module/src/main/res/anim/psw_input_area_bg.xml
+9
-0
base-module/src/main/res/anim/push_bottom_in.xml
+14
-0
base-module/src/main/res/anim/push_bottom_out.xml
+16
-0
base-module/src/main/res/anim/selector_keyboard_gird_item.xml
+19
-0
base-module/src/main/res/drawable/img_psw_bg.xml
+12
-0
base-module/src/main/res/drawable/psw_input_area_bg.xml
+9
-0
base-module/src/main/res/layout/item_grid_virtual_keyboard.xml
+32
-0
base-module/src/main/res/layout/layout_popup_bottom.xml
+355
-0
base-module/src/main/res/layout/layout_virtual_keyboard.xml
+49
-0
base-module/src/main/res/layout/pop_enter_password.xml
+21
-0
base-module/src/main/res/mipmap-xxhdpi/ahn.png
+0
-0
base-module/src/main/res/mipmap-xxhdpi/default_nor_avatar.png
+0
-0
base-module/src/main/res/mipmap-xxhdpi/keyboard_back_img.png
+0
-0
base-module/src/main/res/mipmap-xxhdpi/keyboard_delete_img.png
+0
-0
base-module/src/main/res/values/styles.xml
+5
-0
database-module/src/main/java/com/gingersoft/gsa/cloud/database/bean/Discount.java
+35
-83
database-module/src/main/java/com/gingersoft/gsa/cloud/database/greendao/DiscountDao.java
+6
-6
order-base/src/main/java/com/gingersoft/gsa/cloud/base/order/cart/ShoppingCart.java
+27
-0
order-base/src/main/java/com/gingersoft/gsa/cloud/base/order/discount/NomalDiscount.java
+6
-0
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/discount/BillDiscountAction.java
+179
-0
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/discount/MealDiscountAction.java
+167
-0
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/discount/NomalDiscountAction.java
+0
-82
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/BaseOrderPresenter.java
+18
-2
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
+50
-39
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderContentPresenter.java
+22
-13
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/OrderContentActivity.java
+1
-0
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/meal/DiscountAdapter.java
+22
-4
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/meal/SelectMealAdapter.java
+0
-1
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/widget/KeyboardDialog.java
+312
-0
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/widget/UseMemberDialog.java
+6
-15
table-module/src/main/res/layout/meal_item_discount.xml
+33
-11
table-module/src/main/res/layout/meal_item_food.xml
+0
-11
table-module/src/main/res/layout/table_dialog_keyboard.xml
+85
-0
No files found.
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/dialog/CommonTipDialog.java
View file @
525c4def
...
...
@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.ui.widget.dialog;
import
android.app.Activity
;
import
android.text.InputType
;
import
android.text.TextUtils
;
import
android.widget.EditText
;
import
com.gingersoft.gsa.cloud.base.R
;
import
com.qmuiteam.qmui.widget.dialog.QMUIDialog
;
...
...
@@ -59,6 +60,20 @@ public class CommonTipDialog {
dialogBuilder
.
create
(
R
.
style
.
MyDialogTheme2
).
show
();
}
public
static
void
showDoubtDialog2
(
Activity
context
,
String
msg
,
OnCallbackListener
listener
)
{
QMUIDialog
.
MessageDialogBuilder
dialogBuilder
=
new
QMUIDialog
.
MessageDialogBuilder
(
context
);
dialogBuilder
.
setTitleIcon
(
R
.
drawable
.
qmui_icon_dialog_doubt
);
dialogBuilder
.
setMessage
(
msg
);
dialogBuilder
.
addAction
(
R
.
drawable
.
shape_red_five_radius_bg
,
"確認"
,
QMUIDialogAction
.
ACTION_PROP_NEGATIVE
,
(
dialog
,
index
)
->
{
dialog
.
dismiss
();
if
(
listener
!=
null
)
{
listener
.
onSure
();
}
});
dialogBuilder
.
addAction
(
R
.
drawable
.
shape_3c_cancel_btn_bg
,
"取消"
,
(
dialog
,
index
)
->
dialog
.
dismiss
());
dialogBuilder
.
create
(
R
.
style
.
MyDialogTheme2
).
show
();
}
/**
* 危險警示dialog 確認后執行對應方法
*
...
...
@@ -190,7 +205,7 @@ public class CommonTipDialog {
* @param title
* @param placeholder
*/
public
static
void
showEditDialog
(
Activity
context
,
String
title
,
String
placeholder
,
int
inputType
,
OnEditTextListener
onEditTextListener
)
{
public
static
EditText
showEditDialog
(
Activity
context
,
String
title
,
String
placeholder
,
int
inputType
,
OnEditTextListener
onEditTextListener
)
{
final
QMUIDialog
.
EditTextDialogBuilder
dialogBuilder
=
new
QMUIDialog
.
EditTextDialogBuilder
(
context
);
dialogBuilder
.
setTitle
(
title
);
dialogBuilder
.
setPlaceholder
(
placeholder
);
...
...
@@ -204,15 +219,25 @@ public class CommonTipDialog {
});
dialogBuilder
.
addAction
(
"取消"
,
(
dialog
,
index
)
->
dialog
.
dismiss
());
dialogBuilder
.
create
(
R
.
style
.
MyEditDialogTheme
).
show
();
return
dialogBuilder
.
getEditText
();
}
private
OnEditTextListener
onEditTextListener
;
private
OnCallbackListener
onCallbackListener
;
public
void
setOnEditTextListener
(
OnEditTextListener
onEditTextListener
)
{
this
.
onEditTextListener
=
onEditTextListener
;
}
public
void
setOnCallbackListener
(
OnCallbackListener
onCallbackListener
)
{
this
.
onCallbackListener
=
onCallbackListener
;
}
public
interface
OnEditTextListener
{
void
inputText
(
String
text
);
}
public
interface
OnCallbackListener
{
void
onSure
();
}
}
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/KeyBoardAdapter.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
widget
.
keyboard
;
import
android.content.Context
;
import
android.graphics.Color
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.BaseAdapter
;
import
android.widget.RelativeLayout
;
import
android.widget.TextView
;
import
com.gingersoft.gsa.cloud.base.R
;
import
java.util.ArrayList
;
import
java.util.Map
;
/**
* 九宫格键盘适配器
*/
public
class
KeyBoardAdapter
extends
BaseAdapter
{
private
Context
mContext
;
private
ArrayList
<
Map
<
String
,
String
>>
valueList
;
public
KeyBoardAdapter
(
Context
mContext
,
ArrayList
<
Map
<
String
,
String
>>
valueList
)
{
this
.
mContext
=
mContext
;
this
.
valueList
=
valueList
;
}
@Override
public
int
getCount
()
{
return
valueList
.
size
();
}
@Override
public
Object
getItem
(
int
position
)
{
return
valueList
.
get
(
position
);
}
@Override
public
long
getItemId
(
int
position
)
{
return
position
;
}
@Override
public
View
getView
(
int
position
,
View
convertView
,
ViewGroup
parent
)
{
ViewHolder
viewHolder
;
if
(
convertView
==
null
)
{
convertView
=
View
.
inflate
(
mContext
,
R
.
layout
.
item_grid_virtual_keyboard
,
null
);
viewHolder
=
new
ViewHolder
();
viewHolder
.
btnKey
=
(
TextView
)
convertView
.
findViewById
(
R
.
id
.
btn_keys
);
viewHolder
.
imgDelete
=
(
RelativeLayout
)
convertView
.
findViewById
(
R
.
id
.
imgDelete
);
convertView
.
setTag
(
viewHolder
);
}
else
{
viewHolder
=
(
ViewHolder
)
convertView
.
getTag
();
}
if
(
position
==
9
)
{
viewHolder
.
imgDelete
.
setVisibility
(
View
.
INVISIBLE
);
viewHolder
.
btnKey
.
setVisibility
(
View
.
VISIBLE
);
viewHolder
.
btnKey
.
setText
(
valueList
.
get
(
position
).
get
(
"name"
));
viewHolder
.
btnKey
.
setBackgroundColor
(
Color
.
parseColor
(
"#e0e0e0"
));
}
else
if
(
position
==
11
)
{
viewHolder
.
btnKey
.
setBackgroundResource
(
R
.
mipmap
.
keyboard_delete_img
);
viewHolder
.
imgDelete
.
setVisibility
(
View
.
VISIBLE
);
viewHolder
.
btnKey
.
setVisibility
(
View
.
INVISIBLE
);
}
else
{
viewHolder
.
imgDelete
.
setVisibility
(
View
.
INVISIBLE
);
viewHolder
.
btnKey
.
setVisibility
(
View
.
VISIBLE
);
viewHolder
.
btnKey
.
setText
(
valueList
.
get
(
position
).
get
(
"name"
));
}
return
convertView
;
}
/**
* 存放控件
*/
public
final
class
ViewHolder
{
public
TextView
btnKey
;
public
RelativeLayout
imgDelete
;
}
}
\ No newline at end of file
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/OnPasswordInputFinish.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
widget
.
keyboard
;
/**
* 自定义接口,用于给密码输入完成添加回掉事件
*/
public
interface
OnPasswordInputFinish
{
void
inputFinish
(
String
password
);
}
\ No newline at end of file
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/PasswordView.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
widget
.
keyboard
;
import
android.content.Context
;
import
android.text.Editable
;
import
android.text.TextWatcher
;
import
android.util.AttributeSet
;
import
android.view.View
;
import
android.widget.AdapterView
;
import
android.widget.GridView
;
import
android.widget.ImageView
;
import
android.widget.RelativeLayout
;
import
android.widget.TextView
;
import
com.gingersoft.gsa.cloud.base.R
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 弹框里面的View
*/
public
class
PasswordView
extends
RelativeLayout
{
Context
mContext
;
private
VirtualKeyboardView
virtualKeyboardView
;
private
TextView
[]
tvList
;
//用数组保存6个TextView,为什么用数组?
private
ImageView
[]
imgList
;
//用数组保存6个TextView,为什么用数组?
private
GridView
gridView
;
private
ImageView
imgCancel
;
private
ArrayList
<
Map
<
String
,
String
>>
valueList
;
private
int
currentIndex
=
-
1
;
//用于记录当前输入密码格位置
public
PasswordView
(
Context
context
)
{
this
(
context
,
null
);
}
public
PasswordView
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
this
.
mContext
=
context
;
View
view
=
View
.
inflate
(
context
,
R
.
layout
.
layout_popup_bottom
,
null
);
virtualKeyboardView
=
(
VirtualKeyboardView
)
view
.
findViewById
(
R
.
id
.
virtualKeyboardView
);
imgCancel
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_cancel
);
gridView
=
virtualKeyboardView
.
getGridView
();
initValueList
();
initView
(
view
);
setupView
();
addView
(
view
);
}
private
void
initView
(
View
view
)
{
tvList
=
new
TextView
[
6
];
imgList
=
new
ImageView
[
6
];
tvList
[
0
]
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_pass1
);
tvList
[
1
]
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_pass2
);
tvList
[
2
]
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_pass3
);
tvList
[
3
]
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_pass4
);
tvList
[
4
]
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_pass5
);
tvList
[
5
]
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_pass6
);
imgList
[
0
]
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_pass1
);
imgList
[
1
]
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_pass2
);
imgList
[
2
]
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_pass3
);
imgList
[
3
]
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_pass4
);
imgList
[
4
]
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_pass5
);
imgList
[
5
]
=
(
ImageView
)
view
.
findViewById
(
R
.
id
.
img_pass6
);
}
// 这里,我们没有使用默认的数字键盘,因为第10个数字不显示.而是空白
private
void
initValueList
()
{
valueList
=
new
ArrayList
<>();
// 初始化按钮上应该显示的数字
for
(
int
i
=
1
;
i
<
13
;
i
++)
{
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
if
(
i
<
10
)
{
map
.
put
(
"name"
,
String
.
valueOf
(
i
));
}
else
if
(
i
==
10
)
{
map
.
put
(
"name"
,
""
);
}
else
if
(
i
==
11
)
{
map
.
put
(
"name"
,
String
.
valueOf
(
0
));
}
else
if
(
i
==
12
)
{
map
.
put
(
"name"
,
""
);
}
valueList
.
add
(
map
);
}
}
private
void
setupView
()
{
// 这里、重新为数字键盘gridView设置了Adapter
KeyBoardAdapter
keyBoardAdapter
=
new
KeyBoardAdapter
(
mContext
,
valueList
);
gridView
.
setAdapter
(
keyBoardAdapter
);
gridView
.
setOnItemClickListener
(
new
AdapterView
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
AdapterView
<?>
parent
,
View
view
,
int
position
,
long
id
)
{
if
(
position
<
11
&&
position
!=
9
)
{
//点击0~9按钮
if
(
currentIndex
>=
-
1
&&
currentIndex
<
5
)
{
//判断输入位置————要小心数组越界
;
++
currentIndex
;
tvList
[
currentIndex
].
setText
(
valueList
.
get
(
position
).
get
(
"name"
));
tvList
[
currentIndex
].
setVisibility
(
View
.
INVISIBLE
);
imgList
[
currentIndex
].
setVisibility
(
View
.
VISIBLE
);
}
}
else
{
if
(
position
==
11
)
{
//点击退格键
if
(
currentIndex
-
1
>=
-
1
)
{
//判断是否删除完毕————要小心数组越界
tvList
[
currentIndex
].
setText
(
""
);
tvList
[
currentIndex
].
setVisibility
(
View
.
VISIBLE
);
imgList
[
currentIndex
].
setVisibility
(
View
.
INVISIBLE
);
currentIndex
--;
}
}
}
}
});
}
//设置监听方法,在第6位输入完成后触发
public
void
setOnFinishInput
(
final
OnPasswordInputFinish
pass
)
{
tvList
[
5
].
addTextChangedListener
(
new
TextWatcher
()
{
@Override
public
void
beforeTextChanged
(
CharSequence
s
,
int
start
,
int
count
,
int
after
)
{
}
@Override
public
void
onTextChanged
(
CharSequence
s
,
int
start
,
int
before
,
int
count
)
{
}
@Override
public
void
afterTextChanged
(
Editable
s
)
{
if
(
s
.
toString
().
length
()
==
1
)
{
String
strPassword
=
""
;
//每次触发都要先将strPassword置空,再重新获取,避免由于输入删除再输入造成混乱
for
(
int
i
=
0
;
i
<
6
;
i
++)
{
strPassword
+=
tvList
[
i
].
getText
().
toString
().
trim
();
}
pass
.
inputFinish
(
strPassword
);
//接口中要实现的方法,完成密码输入完成后的响应逻辑
}
}
});
}
public
VirtualKeyboardView
getVirtualKeyboardView
()
{
return
virtualKeyboardView
;
}
public
ImageView
getImgCancel
()
{
return
imgCancel
;
}
}
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/PopEnterPassword.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
widget
.
keyboard
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.graphics.drawable.ColorDrawable
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup.LayoutParams
;
import
android.widget.PopupWindow
;
import
android.widget.Toast
;
import
com.gingersoft.gsa.cloud.base.R
;
/**
* 输入支付密码
*
* @author lining
*/
public
class
PopEnterPassword
extends
PopupWindow
{
private
PasswordView
pwdView
;
private
View
mMenuView
;
private
Activity
mContext
;
public
PopEnterPassword
(
final
Activity
context
)
{
super
(
context
);
this
.
mContext
=
context
;
LayoutInflater
inflater
=
(
LayoutInflater
)
mContext
.
getSystemService
(
Context
.
LAYOUT_INFLATER_SERVICE
);
mMenuView
=
inflater
.
inflate
(
R
.
layout
.
pop_enter_password
,
null
);
pwdView
=
(
PasswordView
)
mMenuView
.
findViewById
(
R
.
id
.
pwd_view
);
//添加密码输入完成的响应
pwdView
.
setOnFinishInput
(
new
OnPasswordInputFinish
()
{
@Override
public
void
inputFinish
(
final
String
password
)
{
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
// 模拟耗时的操作。
try
{
Thread
.
sleep
(
500
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
mContext
.
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
dismiss
();
Toast
.
makeText
(
mContext
,
"支付成功,密码为:"
+
password
,
Toast
.
LENGTH_SHORT
).
show
();
}
});
}
}).
start
();
}
});
// 监听X关闭按钮
pwdView
.
getImgCancel
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
});
// 监听键盘上方的返回
pwdView
.
getVirtualKeyboardView
().
getLayoutBack
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
});
// 设置SelectPicPopupWindow的View
this
.
setContentView
(
mMenuView
);
// 设置SelectPicPopupWindow弹出窗体的宽
this
.
setWidth
(
LayoutParams
.
MATCH_PARENT
);
// 设置SelectPicPopupWindow弹出窗体的高
this
.
setHeight
(
LayoutParams
.
WRAP_CONTENT
);
// 设置SelectPicPopupWindow弹出窗体可点击
this
.
setFocusable
(
true
);
// 设置SelectPicPopupWindow弹出窗体动画效果
this
.
setAnimationStyle
(
R
.
style
.
pop_add_ainm
);
// 实例化一个ColorDrawable颜色为半透明
ColorDrawable
dw
=
new
ColorDrawable
(
0x66000000
);
// 设置SelectPicPopupWindow弹出窗体的背景
this
.
setBackgroundDrawable
(
dw
);
}
}
base-module/src/main/java/com/gingersoft/gsa/cloud/ui/widget/keyboard/VirtualKeyboardView.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
widget
.
keyboard
;
import
android.content.Context
;
import
android.util.AttributeSet
;
import
android.view.View
;
import
android.widget.GridView
;
import
android.widget.RelativeLayout
;
import
com.gingersoft.gsa.cloud.base.R
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @author : bin
* @create date: 2020-10-28
* @update date: 2020-10-28
* @description:
*/
public
class
VirtualKeyboardView
extends
RelativeLayout
implements
View
.
OnClickListener
{
private
Context
context
;
private
GridView
gridView
;
private
RelativeLayout
layoutBack
;
private
ArrayList
<
Map
<
String
,
String
>>
valueList
;
public
VirtualKeyboardView
(
Context
context
)
{
this
(
context
,
null
);
}
public
VirtualKeyboardView
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
this
.
context
=
context
;
View
view
=
View
.
inflate
(
context
,
R
.
layout
.
layout_virtual_keyboard
,
null
);
valueList
=
new
ArrayList
<>();
layoutBack
=
(
RelativeLayout
)
view
.
findViewById
(
R
.
id
.
layoutBack
);
layoutBack
.
setOnClickListener
(
this
);
gridView
=
(
GridView
)
view
.
findViewById
(
R
.
id
.
gv_keybord
);
setView
();
addView
(
view
);
}
public
RelativeLayout
getLayoutBack
()
{
return
layoutBack
;
}
public
ArrayList
<
Map
<
String
,
String
>>
getValueList
()
{
return
valueList
;
}
public
GridView
getGridView
()
{
return
gridView
;
}
private
void
setView
()
{
/* 初始化按钮上应该显示的数字 */
for
(
int
i
=
1
;
i
<
13
;
i
++)
{
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
if
(
i
<
10
)
{
map
.
put
(
"name"
,
String
.
valueOf
(
i
));
}
else
if
(
i
==
10
)
{
map
.
put
(
"name"
,
"."
);
}
else
if
(
i
==
11
)
{
map
.
put
(
"name"
,
String
.
valueOf
(
0
));
}
else
if
(
i
==
12
)
{
map
.
put
(
"name"
,
""
);
}
valueList
.
add
(
map
);
}
KeyBoardAdapter
keyBoardAdapter
=
new
KeyBoardAdapter
(
context
,
valueList
);
gridView
.
setAdapter
(
keyBoardAdapter
);
}
@Override
public
void
onClick
(
View
v
)
{
}
}
base-module/src/main/res/anim/psw_input_area_bg.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"0dp"
/>
<stroke
android:width=
"0.66dp"
android:color=
"#bfbfbf"
/>
<solid
android:color=
"@android:color/white"
/>
</shape>
\ No newline at end of file
base-module/src/main/res/anim/push_bottom_in.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:duration=
"300"
android:fromYDelta=
"100%p"
android:toYDelta=
"0"
/>
<alpha
android:fromAlpha=
"0.0"
android:toAlpha=
"1.0"
android:duration=
"300"
/>
</set>
\ No newline at end of file
base-module/src/main/res/anim/push_bottom_out.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:duration=
"300"
android:fromYDelta=
"0"
android:toYDelta=
"50%p"
/>
<alpha
android:fromAlpha=
"1.0"
android:toAlpha=
"0.0"
android:duration=
"300"
/>
</set>
\ No newline at end of file
base-module/src/main/res/anim/selector_keyboard_gird_item.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:state_enabled=
"false"
>
<shape>
<solid
android:color=
"#C0C4C7"
/>
</shape>
</item>
<item
android:state_enabled=
"true"
android:state_pressed=
"false"
>
<shape>
<solid
android:color=
"#F5F5F5"
/>
</shape>
</item>
<item
android:state_enabled=
"true"
android:state_pressed=
"true"
>
<shape>
<solid
android:color=
"#C0C4C7"
/>
</shape>
</item>
</selector>
\ No newline at end of file
base-module/src/main/res/drawable/img_psw_bg.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
android:useLevel=
"false"
>
<solid
android:color=
"#000000"
/>
<size
android:width=
"20dp"
android:height=
"20dp"
/>
</shape>
\ No newline at end of file
base-module/src/main/res/drawable/psw_input_area_bg.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"0dp"
/>
<stroke
android:width=
"0.66dp"
android:color=
"#bfbfbf"
/>
<solid
android:color=
"@android:color/white"
/>
</shape>
\ No newline at end of file
base-module/src/main/res/layout/item_grid_virtual_keyboard.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"#e0e0e0"
>
<TextView
android:id=
"@+id/btn_keys"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_60"
android:layout_centerInParent=
"true"
android:background=
"@drawable/ui_selector_item_background"
android:gravity=
"center"
android:includeFontPadding=
"false"
android:textColor=
"#333333"
android:textSize=
"@dimen/sp_26"
/>
<RelativeLayout
android:id=
"@+id/imgDelete"
android:layout_width=
"wrap_content"
android:layout_height=
"@dimen/dp_60"
android:layout_centerInParent=
"true"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:src=
"@mipmap/keyboard_delete_img"
/>
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
base-module/src/main/res/layout/layout_popup_bottom.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"#8C000000"
>
<LinearLayout
android:id=
"@+id/linear_pass"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"20dp"
android:background=
"#FFFFFF"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:padding=
"10dp"
>
<!-- 取消按钮 -->
<ImageView
android:id=
"@+id/img_cancel"
android:layout_width=
"13dp"
android:layout_height=
"13dp"
android:layout_gravity=
"center_vertical"
android:layout_marginRight=
"8dp"
android:src=
"@mipmap/ahn"
/>
<ImageView
android:id=
"@+id/imgUserHead"
android:layout_width=
"30dp"
android:layout_height=
"30dp"
android:scaleType=
"fitXY"
android:src=
"@mipmap/default_nor_avatar"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginLeft=
"5dp"
android:text=
"请输入支付密码"
android:textColor=
"#000000"
android:textSize=
"18sp"
/>
</LinearLayout>
<View
android:layout_width=
"match_parent"
android:layout_height=
"0.74dp"
android:background=
"#B2E2B4"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"10dp"
android:text=
"零钱提现"
android:textColor=
"#000000"
android:textSize=
"14sp"
/>
<TextView
android:id=
"@+id/textAmount"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"5dp"
android:text=
"¥35.55"
android:textColor=
"#000000"
android:textSize=
"30sp"
/>
<TextView
android:id=
"@+id/textShouxuFei"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"6dp"
android:text=
"额外扣除¥35.55手续费"
android:textColor=
"#888888"
android:textSize=
"14sp"
/>
<!-- 6位密码框布局,需要一个圆角边框的shape作为layout的背景 -->
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"46dp"
android:layout_marginBottom=
"16dp"
android:layout_marginLeft=
"18dp"
android:layout_marginRight=
"18dp"
android:layout_marginTop=
"10dp"
android:background=
"@drawable/psw_input_area_bg"
android:orientation=
"horizontal"
>
<!-- inputType设置隐藏密码明文
textSize设置大一点,否则“点”太小了,不美观 -->
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:id=
"@+id/tv_pass1"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:inputType=
"numberPassword"
android:text=
""
android:textColor=
"#000000"
android:textSize=
"36sp"
/>
<ImageView
android:id=
"@+id/img_pass1"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_gravity=
"center"
android:src=
"@drawable/img_psw_bg"
android:visibility=
"invisible"
/>
</FrameLayout>
<View
android:layout_width=
"0.66dp"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"0.66dp"
android:layout_marginTop=
"0.66dp"
android:background=
"#eeeeee"
/>
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:id=
"@+id/tv_pass2"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:inputType=
"numberPassword"
android:text=
""
android:textColor=
"#000000"
android:textSize=
"36sp"
/>
<ImageView
android:id=
"@+id/img_pass2"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_gravity=
"center"
android:src=
"@drawable/img_psw_bg"
android:visibility=
"invisible"
/>
</FrameLayout>
<View
android:layout_width=
"0.66dp"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"0.66dp"
android:layout_marginTop=
"0.66dp"
android:background=
"#eeeeee"
/>
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:id=
"@+id/tv_pass3"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:inputType=
"numberPassword"
android:text=
""
android:textColor=
"#000000"
android:textSize=
"36sp"
/>
<ImageView
android:id=
"@+id/img_pass3"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_gravity=
"center"
android:src=
"@drawable/img_psw_bg"
android:visibility=
"invisible"
/>
</FrameLayout>
<View
android:layout_width=
"0.66dp"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"0.66dp"
android:layout_marginTop=
"0.66dp"
android:background=
"#eeeeee"
/>
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:id=
"@+id/tv_pass4"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:inputType=
"numberPassword"
android:text=
""
android:textColor=
"#000000"
android:textSize=
"36sp"
/>
<ImageView
android:id=
"@+id/img_pass4"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_gravity=
"center"
android:src=
"@drawable/img_psw_bg"
android:visibility=
"invisible"
/>
</FrameLayout>
<View
android:layout_width=
"0.66dp"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"0.66dp"
android:layout_marginTop=
"0.66dp"
android:background=
"#eeeeee"
/>
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:id=
"@+id/tv_pass5"
android:layout_width=
"match_parent"
android:layout_height=
"46dp"
android:gravity=
"center"
android:inputType=
"numberPassword"
android:text=
""
android:textColor=
"#000000"
android:textSize=
"36sp"
/>
<ImageView
android:id=
"@+id/img_pass5"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_gravity=
"center"
android:src=
"@drawable/img_psw_bg"
android:visibility=
"invisible"
/>
</FrameLayout>
<View
android:layout_width=
"0.66dp"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"0.66dp"
android:layout_marginTop=
"0.66dp"
android:background=
"#eeeeee"
/>
<FrameLayout
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:id=
"@+id/tv_pass6"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:inputType=
"numberPassword"
android:text=
""
android:textColor=
"#000000"
android:textSize=
"36sp"
/>
<ImageView
android:id=
"@+id/img_pass6"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_gravity=
"center"
android:src=
"@drawable/img_psw_bg"
android:visibility=
"invisible"
/>
</FrameLayout>
</LinearLayout>
<TextView
android:id=
"@+id/tv_forgetPwd"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"right"
android:layout_margin=
"15dp"
android:text=
"忘记密码?"
android:textColor=
"#354EEF"
android:visibility=
"gone"
/>
</LinearLayout>
<com.lnyp.pswkeyboard.widget.VirtualKeyboardView
android:id=
"@+id/virtualKeyboardView"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:layout_gravity=
"bottom"
/>
<!-- <!– 输入键盘 –>
<GridView
android:id="@+id/gv_keybord"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#bdbdbd"
android:horizontalSpacing="1px"
android:numColumns="3"
android:verticalSpacing="1px" />
<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_above="@id/gv_keybord"
android:background="#bdbdbd" />
<RelativeLayout
android:id="@+id/layoutBack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/line"
android:background="#f5f5f5"
android:padding="9.5dp">
<ImageView
android:id="@+id/imgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@mipmap/keyboard_back_img" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_above="@id/layoutBack"
android:layout_marginTop="1dp"
android:background="#bdbdbd" />-->
</RelativeLayout>
\ No newline at end of file
base-module/src/main/res/layout/layout_virtual_keyboard.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<!-- 输入键盘 -->
<GridView
android:id=
"@+id/gv_keybord"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:background=
"#bdbdbd"
android:horizontalSpacing=
"1px"
android:numColumns=
"3"
android:verticalSpacing=
"1px"
/>
<View
android:id=
"@+id/line"
android:layout_width=
"match_parent"
android:layout_height=
"1px"
android:layout_above=
"@id/gv_keybord"
android:background=
"#bdbdbd"
/>
<RelativeLayout
android:id=
"@+id/layoutBack"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@id/line"
android:background=
"#f5f5f5"
android:padding=
"@dimen/dp_10"
>
<ImageView
android:id=
"@+id/imgBack"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:src=
"@mipmap/keyboard_back_img"
/>
</RelativeLayout>
<View
android:layout_width=
"match_parent"
android:layout_height=
"1px"
android:layout_above=
"@id/layoutBack"
android:layout_marginTop=
"@dimen/dp_1"
android:background=
"#bdbdbd"
/>
</RelativeLayout>
\ No newline at end of file
base-module/src/main/res/layout/pop_enter_password.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
>
<RelativeLayout
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center_horizontal"
android:orientation=
"vertical"
>
<com.gingersoft.gsa.cloud.ui.widget.keyboard.PasswordView
android:id=
"@+id/pwd_view"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
/>
</RelativeLayout>
</FrameLayout>
\ No newline at end of file
base-module/src/main/res/mipmap-xxhdpi/ahn.png
0 → 100644
View file @
525c4def
316 Bytes
base-module/src/main/res/mipmap-xxhdpi/default_nor_avatar.png
0 → 100644
View file @
525c4def
1.94 KB
base-module/src/main/res/mipmap-xxhdpi/keyboard_back_img.png
0 → 100644
View file @
525c4def
869 Bytes
base-module/src/main/res/mipmap-xxhdpi/keyboard_delete_img.png
0 → 100644
View file @
525c4def
1.24 KB
base-module/src/main/res/values/styles.xml
View file @
525c4def
...
...
@@ -89,6 +89,11 @@
<item
name=
"android:textSize"
>
16sp
</item>
</style>
<style
name=
"pop_add_ainm"
parent=
"android:Animation"
>
<item
name=
"android:windowEnterAnimation"
>
@anim/push_bottom_in
</item>
<item
name=
"android:windowExitAnimation"
>
@anim/push_bottom_out
</item>
</style>
<!-- **************************QMUI 相关*******************************-->
<style
name=
"QDtextAppearanceListItem"
>
...
...
database-module/src/main/java/com/gingersoft/gsa/cloud/database/bean/Discount.java
View file @
525c4def
...
...
@@ -129,16 +129,15 @@ public class Discount {
@Transient
private
long
memberId
=
-
1
;
@Generated
(
hash
=
637151409
)
@Generated
(
hash
=
1938515536
)
public
Discount
(
Long
id
,
int
restaurantId
,
double
amount
,
int
discountValue
,
int
type
,
String
discountType
,
int
status
,
String
remark
,
byte
freeServiceCharge
,
byte
managerApproval
,
String
color
,
String
placeOrderType
,
double
discountCap
,
double
salesAmount
,
byte
taxFree
,
byte
exclusive
,
byte
pause
,
byte
additionalDiscount
,
byte
onlyOnce
,
double
minBillAmount
,
byte
pointsDeduction
,
byte
wholeFreePoints
,
byte
amountTypeMin
,
String
beginTime
,
String
endTime
)
{
int
type
,
String
discountType
,
int
status
,
String
remark
,
byte
freeServiceCharge
,
byte
managerApproval
,
String
color
,
String
placeOrderType
,
double
discountCap
,
double
salesAmount
,
byte
taxFree
,
byte
exclusive
,
byte
pause
,
byte
additionalDiscount
,
byte
onlyOnce
,
double
minBillAmount
,
byte
pointsDeduction
,
byte
wholeFreePoints
,
byte
amountTypeMin
,
String
beginTime
,
String
endTime
)
{
this
.
id
=
id
;
this
.
restaurantId
=
restaurantId
;
this
.
amount
=
amount
;
...
...
@@ -170,7 +169,6 @@ public class Discount {
public
Discount
()
{
}
public
Long
getId
()
{
return
this
.
id
;
}
...
...
@@ -235,19 +233,19 @@ public class Discount {
this
.
remark
=
remark
;
}
public
B
yte
getFreeServiceCharge
()
{
public
b
yte
getFreeServiceCharge
()
{
return
this
.
freeServiceCharge
;
}
public
void
setFreeServiceCharge
(
B
yte
freeServiceCharge
)
{
public
void
setFreeServiceCharge
(
b
yte
freeServiceCharge
)
{
this
.
freeServiceCharge
=
freeServiceCharge
;
}
public
B
yte
getManagerApproval
()
{
public
b
yte
getManagerApproval
()
{
return
this
.
managerApproval
;
}
public
void
setManagerApproval
(
B
yte
managerApproval
)
{
public
void
setManagerApproval
(
b
yte
managerApproval
)
{
this
.
managerApproval
=
managerApproval
;
}
...
...
@@ -275,83 +273,83 @@ public class Discount {
this
.
discountCap
=
discountCap
;
}
public
D
ouble
getSalesAmount
()
{
public
d
ouble
getSalesAmount
()
{
return
this
.
salesAmount
;
}
public
void
setSalesAmount
(
D
ouble
salesAmount
)
{
public
void
setSalesAmount
(
d
ouble
salesAmount
)
{
this
.
salesAmount
=
salesAmount
;
}
public
B
yte
getTaxFree
()
{
public
b
yte
getTaxFree
()
{
return
this
.
taxFree
;
}
public
void
setTaxFree
(
B
yte
taxFree
)
{
public
void
setTaxFree
(
b
yte
taxFree
)
{
this
.
taxFree
=
taxFree
;
}
public
B
yte
getExclusive
()
{
public
b
yte
getExclusive
()
{
return
this
.
exclusive
;
}
public
void
setExclusive
(
B
yte
exclusive
)
{
public
void
setExclusive
(
b
yte
exclusive
)
{
this
.
exclusive
=
exclusive
;
}
public
Byte
get
Pause
()
{
return
this
.
pause
;
public
boolean
is
Pause
()
{
return
pause
==
1
;
}
public
void
setPause
(
B
yte
pause
)
{
public
void
setPause
(
b
yte
pause
)
{
this
.
pause
=
pause
;
}
public
B
yte
getAdditionalDiscount
()
{
public
b
yte
getAdditionalDiscount
()
{
return
this
.
additionalDiscount
;
}
public
void
setAdditionalDiscount
(
B
yte
additionalDiscount
)
{
public
void
setAdditionalDiscount
(
b
yte
additionalDiscount
)
{
this
.
additionalDiscount
=
additionalDiscount
;
}
public
B
yte
getOnlyOnce
()
{
public
b
yte
getOnlyOnce
()
{
return
this
.
onlyOnce
;
}
public
void
setOnlyOnce
(
B
yte
onlyOnce
)
{
public
void
setOnlyOnce
(
b
yte
onlyOnce
)
{
this
.
onlyOnce
=
onlyOnce
;
}
public
D
ouble
getMinBillAmount
()
{
public
d
ouble
getMinBillAmount
()
{
return
this
.
minBillAmount
;
}
public
void
setMinBillAmount
(
D
ouble
minBillAmount
)
{
public
void
setMinBillAmount
(
d
ouble
minBillAmount
)
{
this
.
minBillAmount
=
minBillAmount
;
}
public
B
yte
getPointsDeduction
()
{
public
b
yte
getPointsDeduction
()
{
return
this
.
pointsDeduction
;
}
public
void
setPointsDeduction
(
B
yte
pointsDeduction
)
{
public
void
setPointsDeduction
(
b
yte
pointsDeduction
)
{
this
.
pointsDeduction
=
pointsDeduction
;
}
public
B
yte
getWholeFreePoints
()
{
public
b
yte
getWholeFreePoints
()
{
return
this
.
wholeFreePoints
;
}
public
void
setWholeFreePoints
(
B
yte
wholeFreePoints
)
{
public
void
setWholeFreePoints
(
b
yte
wholeFreePoints
)
{
this
.
wholeFreePoints
=
wholeFreePoints
;
}
public
B
yte
getAmountTypeMin
()
{
public
b
yte
getAmountTypeMin
()
{
return
this
.
amountTypeMin
;
}
public
void
setAmountTypeMin
(
B
yte
amountTypeMin
)
{
public
void
setAmountTypeMin
(
b
yte
amountTypeMin
)
{
this
.
amountTypeMin
=
amountTypeMin
;
}
...
...
@@ -371,57 +369,11 @@ public class Discount {
this
.
endTime
=
endTime
;
}
public
void
setFreeServiceCharge
(
byte
freeServiceCharge
)
{
this
.
freeServiceCharge
=
freeServiceCharge
;
}
public
void
setManagerApproval
(
byte
managerApproval
)
{
this
.
managerApproval
=
managerApproval
;
}
public
void
setDiscountCap
(
long
discountCap
)
{
this
.
discountCap
=
discountCap
;
}
public
void
setSalesAmount
(
double
salesAmount
)
{
this
.
salesAmount
=
salesAmount
;
}
public
void
setTaxFree
(
byte
taxFree
)
{
this
.
taxFree
=
taxFree
;
}
public
void
setExclusive
(
byte
exclusive
)
{
this
.
exclusive
=
exclusive
;
}
public
void
setPause
(
byte
pause
)
{
this
.
pause
=
pause
;
}
public
void
setAdditionalDiscount
(
byte
additionalDiscount
)
{
this
.
additionalDiscount
=
additionalDiscount
;
}
public
void
setOnlyOnce
(
byte
onlyOnce
)
{
this
.
onlyOnce
=
onlyOnce
;
}
public
void
setMinBillAmount
(
double
minBillAmount
)
{
this
.
minBillAmount
=
minBillAmount
;
}
public
void
setPointsDeduction
(
byte
pointsDeduction
)
{
this
.
pointsDeduction
=
pointsDeduction
;
public
byte
getPause
()
{
return
this
.
pause
;
}
public
void
setWholeFreePoints
(
byte
wholeFreePoints
)
{
this
.
wholeFreePoints
=
wholeFreePoints
;
}
public
void
setAmountTypeMin
(
byte
amountTypeMin
)
{
this
.
amountTypeMin
=
amountTypeMin
;
}
}
database-module/src/main/java/com/gingersoft/gsa/cloud/database/greendao/DiscountDao.java
View file @
525c4def
...
...
@@ -36,7 +36,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
public
final
static
Property
ManagerApproval
=
new
Property
(
9
,
byte
.
class
,
"managerApproval"
,
false
,
"MANAGER_APPROVAL"
);
public
final
static
Property
Color
=
new
Property
(
10
,
String
.
class
,
"color"
,
false
,
"COLOR"
);
public
final
static
Property
PlaceOrderType
=
new
Property
(
11
,
String
.
class
,
"placeOrderType"
,
false
,
"PLACE_ORDER_TYPE"
);
public
final
static
Property
DiscountCap
=
new
Property
(
12
,
long
.
class
,
"discountCap"
,
false
,
"DISCOUNT_CAP"
);
public
final
static
Property
DiscountCap
=
new
Property
(
12
,
double
.
class
,
"discountCap"
,
false
,
"DISCOUNT_CAP"
);
public
final
static
Property
SalesAmount
=
new
Property
(
13
,
double
.
class
,
"salesAmount"
,
false
,
"SALES_AMOUNT"
);
public
final
static
Property
TaxFree
=
new
Property
(
14
,
byte
.
class
,
"taxFree"
,
false
,
"TAX_FREE"
);
public
final
static
Property
Exclusive
=
new
Property
(
15
,
byte
.
class
,
"exclusive"
,
false
,
"EXCLUSIVE"
);
...
...
@@ -76,7 +76,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
"\"MANAGER_APPROVAL\" INTEGER NOT NULL ,"
+
// 9: managerApproval
"\"COLOR\" TEXT,"
+
// 10: color
"\"PLACE_ORDER_TYPE\" TEXT,"
+
// 11: placeOrderType
"\"DISCOUNT_CAP\"
INTEGER
NOT NULL ,"
+
// 12: discountCap
"\"DISCOUNT_CAP\"
REAL
NOT NULL ,"
+
// 12: discountCap
"\"SALES_AMOUNT\" REAL NOT NULL ,"
+
// 13: salesAmount
"\"TAX_FREE\" INTEGER NOT NULL ,"
+
// 14: taxFree
"\"EXCLUSIVE\" INTEGER NOT NULL ,"
+
// 15: exclusive
...
...
@@ -132,7 +132,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
if
(
placeOrderType
!=
null
)
{
stmt
.
bindString
(
12
,
placeOrderType
);
}
stmt
.
bind
Long
(
13
,
entity
.
getDiscountCap
());
stmt
.
bind
Double
(
13
,
entity
.
getDiscountCap
());
stmt
.
bindDouble
(
14
,
entity
.
getSalesAmount
());
stmt
.
bindLong
(
15
,
entity
.
getTaxFree
());
stmt
.
bindLong
(
16
,
entity
.
getExclusive
());
...
...
@@ -190,7 +190,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
if
(
placeOrderType
!=
null
)
{
stmt
.
bindString
(
12
,
placeOrderType
);
}
stmt
.
bind
Long
(
13
,
entity
.
getDiscountCap
());
stmt
.
bind
Double
(
13
,
entity
.
getDiscountCap
());
stmt
.
bindDouble
(
14
,
entity
.
getSalesAmount
());
stmt
.
bindLong
(
15
,
entity
.
getTaxFree
());
stmt
.
bindLong
(
16
,
entity
.
getExclusive
());
...
...
@@ -233,7 +233,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
(
byte
)
cursor
.
getShort
(
offset
+
9
),
// managerApproval
cursor
.
isNull
(
offset
+
10
)
?
null
:
cursor
.
getString
(
offset
+
10
),
// color
cursor
.
isNull
(
offset
+
11
)
?
null
:
cursor
.
getString
(
offset
+
11
),
// placeOrderType
cursor
.
get
Long
(
offset
+
12
),
// discountCap
cursor
.
get
Double
(
offset
+
12
),
// discountCap
cursor
.
getDouble
(
offset
+
13
),
// salesAmount
(
byte
)
cursor
.
getShort
(
offset
+
14
),
// taxFree
(
byte
)
cursor
.
getShort
(
offset
+
15
),
// exclusive
...
...
@@ -264,7 +264,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
entity
.
setManagerApproval
((
byte
)
cursor
.
getShort
(
offset
+
9
));
entity
.
setColor
(
cursor
.
isNull
(
offset
+
10
)
?
null
:
cursor
.
getString
(
offset
+
10
));
entity
.
setPlaceOrderType
(
cursor
.
isNull
(
offset
+
11
)
?
null
:
cursor
.
getString
(
offset
+
11
));
entity
.
setDiscountCap
(
cursor
.
get
Long
(
offset
+
12
));
entity
.
setDiscountCap
(
cursor
.
get
Double
(
offset
+
12
));
entity
.
setSalesAmount
(
cursor
.
getDouble
(
offset
+
13
));
entity
.
setTaxFree
((
byte
)
cursor
.
getShort
(
offset
+
14
));
entity
.
setExclusive
((
byte
)
cursor
.
getShort
(
offset
+
15
));
...
...
order-base/src/main/java/com/gingersoft/gsa/cloud/base/order/cart/ShoppingCart.java
View file @
525c4def
...
...
@@ -49,6 +49,7 @@ public class ShoppingCart {
protected
List
<
OrderDetail
>
orderCommodityList
=
new
ArrayList
<>();
/**
* 賬單項列表
*
* @see CopyOnWriteArrayList 賬單計算放在子線程中保證同步問題使用CopyOnWriteArrayList
*/
protected
List
<
BillItem
>
billItemList
=
new
ArrayList
<>();
...
...
@@ -174,6 +175,17 @@ public class ShoppingCart {
}
/**
* 刪除所有折扣
*/
public
void
delAllMultyDiscount
()
{
List
<
MultyDiscount
>
multyDiscountList
=
getMultyDiscountList
();
// for (MultyDiscount multyDiscount: multyDiscountList) {
// multyDiscountList.remove(multyDiscount);
// }
multyDiscountList
.
removeAll
(
multyDiscountList
);
}
/**
* 將普通折扣添加到鏈條中
*
* @param discount
...
...
@@ -267,6 +279,21 @@ public class ShoppingCart {
}
}
/**
* 獲取普通折扣
*
* @return
*/
public
List
<
NomalDiscount
>
getNomalDiscoutByMultyDiscountList
()
{
List
<
NomalDiscount
>
nomalDiscountList
=
new
ArrayList
<>();
for
(
MultyDiscount
multyDiscount
:
getMultyDiscountList
())
{
if
(
multyDiscount
instanceof
NomalDiscount
)
{
nomalDiscountList
.
add
((
NomalDiscount
)
multyDiscount
);
}
}
return
nomalDiscountList
;
}
public
List
<
MultyDiscount
>
getMultyDiscountList
()
{
if
(
multyDiscountList
==
null
)
{
multyDiscountList
=
new
ArrayList
<>();
...
...
order-base/src/main/java/com/gingersoft/gsa/cloud/base/order/discount/NomalDiscount.java
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
base
.
order
.
discount
;
import
com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.base.utils.MoneyUtil
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.order.base.BuildConfig
;
import
com.jess.arms.utils.ArmsUtils
;
import
lombok.Getter
;
...
...
@@ -50,6 +53,9 @@ public class NomalDiscount extends MultyDiscount {
if
(
Double
.
doubleToLongBits
(
discount
.
getDiscountCap
())
!=
0
&&
discount
.
getDiscountCap
()
<
discountMoney
)
{
//不能大於折扣上限
discountMoney
=
discount
.
getDiscountCap
();
if
(
BuildConfig
.
DEBUG
)
{
ArmsUtils
.
makeText
(
GsaCloudApplication
.
getAppContext
(),
"此折扣上限為:"
+
discountMoney
);
}
}
if
(
sourceMoney
<
discountMoney
)
{
//折扣金額不能超出總額
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/discount/BillDiscountAction.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
model
.
discount
;
import
android.app.Activity
;
import
android.text.Editable
;
import
android.text.InputType
;
import
android.view.View
;
import
android.view.WindowManager
;
import
android.view.animation.Animation
;
import
android.view.animation.AnimationUtils
;
import
android.widget.AdapterView
;
import
android.widget.EditText
;
import
android.widget.GridView
;
import
com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount
;
import
com.gingersoft.gsa.cloud.base.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.patterns.Strategy
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.widget.KeyboardDialog
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog
;
import
com.gingersoft.gsa.cloud.ui.widget.keyboard.VirtualKeyboardView
;
import
com.jess.arms.utils.DeviceUtils
;
import
java.lang.reflect.Method
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
butterknife.BindView
;
import
butterknife.BindViews
;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:賬單折扣邏輯
*/
public
class
BillDiscountAction
implements
Strategy
<
Discount
>
{
private
Activity
mContext
;
private
List
<
NomalDiscount
>
mNomalDiscountList
;
private
OnCallBackListener
mListener
;
public
BillDiscountAction
(
Activity
context
,
List
<
NomalDiscount
>
nomalDiscountList
,
OnCallBackListener
listener
)
{
this
.
mContext
=
context
;
this
.
mNomalDiscountList
=
nomalDiscountList
;
this
.
mListener
=
listener
;
}
@Override
public
void
action
(
Discount
discount
)
{
if
(
isOnlyOnce
(
discount
))
{
//此折扣只一次
return
;
}
boolean
hasExclusive
=
hasExclusiveDiscount
()
||
discount
.
getExclusive
()
==
1
;
if
(
hasExclusive
)
{
//有獨佔折扣
exclusiveDiscount
(
discount
);
return
;
}
switch
(
discount
.
getType
())
{
case
Discount
.
DISCOUNT_TYPE_AMOUNT
:
case
Discount
.
DISCOUNT_TYPE_RATE
:
break
;
case
Discount
.
DISCOUNT_TYPE_CUSTOM_AMOUNT
:
showCustomAmountDialog
(
discount
);
break
;
case
Discount
.
DISCOUNT_TYPE_KEYBOARD
:
showKeyboardDialog
(
discount
);
break
;
case
Discount
.
DISCOUNT_TYPE_FREE_SERVICE_CHARGE
:
break
;
default
:
break
;
}
}
private
void
exclusiveDiscount
(
Discount
discount
)
{
if
(
mListener
!=
null
)
{
showExclusiveTipDialog
(
discount
);
}
}
/**
* 是否有獨佔折扣
*
* @return
*/
private
boolean
hasExclusiveDiscount
()
{
for
(
NomalDiscount
nomalDiscount
:
mNomalDiscountList
)
{
if
(
nomalDiscount
.
getDiscount
().
getExclusive
()
==
1
)
{
return
true
;
}
}
return
false
;
}
/**
* 此折扣是否只一次
*
* @param discount
* @return
*/
private
boolean
isOnlyOnce
(
Discount
discount
)
{
if
(
discount
.
getOnlyOnce
()
==
1
)
{
for
(
NomalDiscount
nomalDiscount
:
mNomalDiscountList
)
{
Discount
item
=
nomalDiscount
.
getDiscount
();
if
(
discount
.
getId
().
longValue
()
==
item
.
getId
().
longValue
())
{
return
true
;
}
}
}
return
false
;
}
/**
* 顯示自定義金額彈窗
* @param discount
*/
private
void
showCustomAmountDialog
(
Discount
discount
)
{
CommonTipDialog
.
showEditDialog
(
mContext
,
discount
.
getRemark
(),
"請輸入折扣金額"
,
InputType
.
TYPE_CLASS_NUMBER
|
InputType
.
TYPE_NUMBER_FLAG_DECIMAL
,
new
CommonTipDialog
.
OnEditTextListener
()
{
@Override
public
void
inputText
(
String
text
)
{
discount
.
setAmount
(
Double
.
parseDouble
(
text
));
if
(
mListener
!=
null
)
{
mListener
.
preformAddDiscount
(
discount
);
}
}
});
}
/**
* 顯示子弟你金額彈窗 鍵盤
* @param discount
*/
private
void
showKeyboardDialog
(
Discount
discount
)
{
new
KeyboardDialog
(
mContext
)
.
build
()
.
setOnCallBackListener
(
new
KeyboardDialog
.
OnCallBackListener
()
{
@Override
public
void
onSure
(
String
number
)
{
discount
.
setAmount
(
Double
.
parseDouble
(
number
));
if
(
mListener
!=
null
)
{
mListener
.
preformAddDiscount
(
discount
);
}
}
})
.
show
();
}
/**
* 提示有獨佔折扣是否替換
* @param discount
*/
private
void
showExclusiveTipDialog
(
Discount
discount
)
{
CommonTipDialog
.
showDoubtDialog2
(
mContext
,
"有獨佔折扣,是否替換"
,
new
CommonTipDialog
.
OnCallbackListener
()
{
@Override
public
void
onSure
()
{
mListener
.
exclusiveRemoveOther
();
mListener
.
preformAddDiscount
(
discount
);
}
});
}
public
interface
OnCallBackListener
{
void
exclusiveRemoveOther
();
void
preformAddDiscount
(
Discount
discount
);
}
}
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/discount/MealDiscountAction.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
model
.
discount
;
import
android.app.Activity
;
import
android.text.InputType
;
import
com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.patterns.Strategy
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.widget.KeyboardDialog
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author : bin
* @create date: 2020-10-28
* @update date: 2020-10-28
* @description:美食折扣邏輯
*/
public
class
MealDiscountAction
implements
Strategy
<
Discount
>
{
private
Activity
mContext
;
private
List
<
OrderDetail
>
mOrderMealList
;
private
MealDiscountAction
.
OnCallBackListener
mListener
;
public
MealDiscountAction
(
Activity
context
,
List
<
OrderDetail
>
orderMealList
,
MealDiscountAction
.
OnCallBackListener
listener
)
{
this
.
mContext
=
context
;
this
.
mOrderMealList
=
orderMealList
;
this
.
mListener
=
listener
;
}
@Override
public
void
action
(
Discount
discount
)
{
if
(
isOnlyOnce
(
discount
))
{
//此折扣只一次
return
;
}
boolean
hasExclusive
=
hasExclusiveDiscount
()
||
discount
.
getExclusive
()
==
1
;
if
(
hasExclusive
)
{
//有獨佔折扣
exclusiveDiscount
(
discount
);
return
;
}
switch
(
discount
.
getType
())
{
case
Discount
.
DISCOUNT_TYPE_AMOUNT
:
case
Discount
.
DISCOUNT_TYPE_RATE
:
break
;
case
Discount
.
DISCOUNT_TYPE_CUSTOM_AMOUNT
:
showCustomAmountDialog
(
discount
);
break
;
case
Discount
.
DISCOUNT_TYPE_KEYBOARD
:
showKeyboardDialog
(
discount
);
break
;
case
Discount
.
DISCOUNT_TYPE_FREE_SERVICE_CHARGE
:
break
;
default
:
break
;
}
}
private
void
exclusiveDiscount
(
Discount
discount
)
{
if
(
mListener
!=
null
)
{
showExclusiveTipDialog
(
discount
);
}
}
/**
* 食品是否有獨佔折扣
*
* @return
*/
private
boolean
hasExclusiveDiscount
()
{
for
(
NomalDiscount
nomalDiscount
:
mNomalDiscountList
)
{
if
(
nomalDiscount
.
getDiscount
().
getExclusive
()
==
1
)
{
return
true
;
}
}
return
false
;
}
/**
* 此折扣是否只一次
*
* @param discount
* @return
*/
private
boolean
isOnlyOnce
(
Discount
discount
)
{
if
(
discount
.
getOnlyOnce
()
==
1
)
{
for
(
NomalDiscount
nomalDiscount
:
mNomalDiscountList
)
{
Discount
item
=
nomalDiscount
.
getDiscount
();
if
(
discount
.
getId
().
longValue
()
==
item
.
getId
().
longValue
())
{
return
true
;
}
}
}
return
false
;
}
/**
* 顯示自定義金額彈窗
*
* @param discount
*/
private
void
showCustomAmountDialog
(
Discount
discount
)
{
CommonTipDialog
.
showEditDialog
(
mContext
,
discount
.
getRemark
(),
"請輸入折扣金額"
,
InputType
.
TYPE_CLASS_NUMBER
|
InputType
.
TYPE_NUMBER_FLAG_DECIMAL
,
new
CommonTipDialog
.
OnEditTextListener
()
{
@Override
public
void
inputText
(
String
text
)
{
discount
.
setAmount
(
Double
.
parseDouble
(
text
));
if
(
mListener
!=
null
)
{
mListener
.
preformAddDiscount
(
discount
);
}
}
});
}
/**
* 顯示子弟你金額彈窗 鍵盤
*
* @param discount
*/
private
void
showKeyboardDialog
(
Discount
discount
)
{
new
KeyboardDialog
(
mContext
)
.
build
()
.
setOnCallBackListener
(
new
KeyboardDialog
.
OnCallBackListener
()
{
@Override
public
void
onSure
(
String
number
)
{
discount
.
setAmount
(
Double
.
parseDouble
(
number
));
if
(
mListener
!=
null
)
{
mListener
.
preformAddDiscount
(
discount
);
}
}
})
.
show
();
}
/**
* 提示有獨佔折扣是否替換
*
* @param discount
*/
private
void
showExclusiveTipDialog
(
Discount
discount
)
{
CommonTipDialog
.
showDoubtDialog2
(
mContext
,
"有獨佔折扣,是否替換"
,
new
CommonTipDialog
.
OnCallbackListener
()
{
@Override
public
void
onSure
()
{
mListener
.
exclusiveRemoveOther
();
mListener
.
preformAddDiscount
(
discount
);
}
});
}
public
interface
OnCallBackListener
{
void
exclusiveRemoveOther
();
void
preformAddDiscount
(
Discount
discount
);
}
}
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/discount/NomalDiscountAction.java
deleted
100644 → 0
View file @
aa04da1b
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
model
.
discount
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.text.InputType
;
import
com.gingersoft.gsa.cloud.base.order.discount.MultyDiscount
;
import
com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.patterns.Strategy
;
import
com.gingersoft.gsa.cloud.table.mvp.model.table.action.TableAction
;
import
com.gingersoft.gsa.cloud.ui.view.AddKeyBoard
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog
;
import
java.util.List
;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public
class
NomalDiscountAction
implements
Strategy
<
Discount
>
{
public
Context
mContext
;
private
List
<
NomalDiscount
>
mNomalDiscountList
;
public
NomalDiscountAction
(
Context
context
,
List
<
NomalDiscount
>
nomalDiscountList
)
{
this
.
mContext
=
context
;
this
.
mNomalDiscountList
=
nomalDiscountList
;
}
@Override
public
void
action
(
Discount
discount
)
{
for
(
NomalDiscount
nomalDiscount
:
mNomalDiscountList
)
{
Discount
item
=
nomalDiscount
.
getDiscount
();
if
()
{
}
}
if
(
discount
.
getOnlyOnce
()
==
1
)
{
//此折扣只一次
return
;
}
if
(
discount
.
getExclusive
()
==
1
)
{
//獨佔折扣
}
switch
(
discount
.
getType
())
{
case
Discount
.
DISCOUNT_TYPE_AMOUNT
:
case
Discount
.
DISCOUNT_TYPE_RATE
:
break
;
case
Discount
.
DISCOUNT_TYPE_CUSTOM_AMOUNT
:
showCustomAmountDialog
(
discount
);
break
;
case
Discount
.
DISCOUNT_TYPE_KEYBOARD
:
showKeyboardDialog
(
discount
);
break
;
case
Discount
.
DISCOUNT_TYPE_FREE_SERVICE_CHARGE
:
break
;
default
:
break
;
}
}
private
void
showCustomAmountDialog
(
Discount
discount
)
{
CommonTipDialog
.
showEditDialog
((
Activity
)
mContext
,
discount
.
getRemark
(),
"請輸入折扣金額"
,
InputType
.
TYPE_CLASS_NUMBER
|
InputType
.
TYPE_NUMBER_FLAG_DECIMAL
,
new
CommonTipDialog
.
OnEditTextListener
()
{
@Override
public
void
inputText
(
String
text
)
{
}
});
}
private
void
showKeyboardDialog
(
Discount
discount
)
{
}
}
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/BaseOrderPresenter.java
View file @
525c4def
...
...
@@ -141,7 +141,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
*/
private
OrderBean
orderPlaced
;
//币種
protected
String
cashStr
=
"$"
;
protected
String
serviceChargeStr
=
"服務費"
;
protected
String
roundingStr
=
"賬單小數"
;
...
...
@@ -161,7 +160,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
mDoshokuOrder
.
getOpenTableInfo
().
setCreateTime
(
TimeUtils
.
getTime
(
createTime
,
TimeUtils
.
DEFAULT_DATE_FORMAT
));
}
public
BaseOrderPresenter
(
BaseOrderContract
.
Model
model
,
BaseOrderContract
.
View
rootView
)
{
super
(
model
,
rootView
);
this
.
mModel
=
(
M
)
model
;
...
...
@@ -363,6 +361,21 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
return
billItem
;
}
/**
* 是否大於最小賬單金額
* @param discount
* @param sourceMoney
* @return
*/
protected
boolean
greaterThanMinimumBill
(
Discount
discount
,
double
sourceMoney
)
{
double
discountMoney
=
NomalDiscount
.
calculationDiscount
(
discount
,
sourceMoney
);
double
wholeAmount
=
mShoppingCart
.
getWholeAmount
();
if
(
discountMoney
>
wholeAmount
)
{
return
false
;
}
return
true
;
}
private
void
initOrderAdapter
()
{
if
(
mSelectMealAdapter
==
null
)
{
mSelectMealAdapter
=
new
SelectMealAdapter
(
IActivity
,
mOrderMealList
,
this
);
...
...
@@ -1181,6 +1194,9 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
protected
List
<
Discount
>
filterDiscountByType
(
List
<
Discount
>
discountList
,
String
discountType
)
{
for
(
int
i
=
discountList
.
size
()
-
1
;
i
>=
0
;
i
--)
{
Discount
discount
=
discountList
.
get
(
i
);
if
(
discount
.
getDiscountType
().
equals
(
"2"
)){
continue
;
}
if
(
TextUtils
.
isEmpty
(
discount
.
getDiscountType
())
||
!
discount
.
getDiscountType
().
contains
(
discountType
))
{
discountList
.
remove
(
i
);
}
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
View file @
525c4def
...
...
@@ -12,28 +12,22 @@ import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import
com.gingersoft.gsa.cloud.base.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.base.common.bean.MemberInfo
;
import
com.gingersoft.gsa.cloud.base.order.bean.DeleteOrderRequest
;
import
com.gingersoft.gsa.cloud.base.order.billItem.BillItem
;
import
com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.base.order.bean.discount.CouponDiscountBean
;
import
com.gingersoft.gsa.cloud.base.order.bean.discount.OrderDiscount
;
import
com.gingersoft.gsa.cloud.base.order.billItem.DiscountItem
;
import
com.gingersoft.gsa.cloud.base.order.billItem.ServiceChargeItem
;
import
com.gingersoft.gsa.cloud.base.order.discount.MultyDiscount
;
import
com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount
;
import
com.gingersoft.gsa.cloud.base.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.base.utils.JsonUtils
;
import
com.gingersoft.gsa.cloud.base.utils.LanguageUtils
;
import
com.gingersoft.gsa.cloud.base.utils.MoneyUtil
;
import
com.gingersoft.gsa.cloud.base.utils.RestaurantExpandInfoUtils
;
import
com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.patterns.Strategy
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodReason
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.discount.NomalDiscountAction
;
import
com.gingersoft.gsa.cloud.table.mvp.model.discount.BillDiscountAction
;
import
com.gingersoft.gsa.cloud.table.mvp.model.discount.MealDiscountAction
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter
;
...
...
@@ -61,7 +55,6 @@ import com.jess.arms.integration.AppManager;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
com.qmuiteam.qmui.widget.dialog.QMUIDialog
;
import
com.qmuiteam.qmui.widget.dialog.QMUIDialogAction
;
import
com.qmuiteam.qmui.widget.dialog.QMUIDialogBuilder
;
import
org.simple.eventbus.Subscriber
;
...
...
@@ -144,7 +137,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
*/
private
List
<
SoldoutCtrFood
>
mSoldoutCtrList
=
new
ArrayList
<>();
private
NomalDiscountAction
mNom
alDiscountAction
;
private
MealDiscountAction
mMe
alDiscountAction
;
private
OrderDetail
mCurrentOrderDetailBean
;
private
boolean
RvMealClicked
;
...
...
@@ -154,7 +147,46 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public
MealStandPresenter
(
MealStandContract
.
Model
model
,
MealStandContract
.
View
rootView
)
{
super
(
model
,
rootView
);
this
.
IActivity
=
(
MealStandActivity
)
rootView
;
this
.
mNomalDiscountAction
=
new
NomalDiscountAction
(
IActivity
,
mShoppingCart
.
getMultyDiscountList
());
mMealDiscountAction
=
new
MealDiscountAction
(
IActivity
,
getMixOrderMealList
(),
new
MealDiscountAction
.
OnCallBackListener
()
{
@Override
public
void
exclusiveRemoveOther
()
{
}
@Override
public
void
preformAddDiscount
(
Discount
discount
)
{
}
});
}
/**
* 獲取當前選中的套餐食品組
* @return
*/
private
List
<
OrderDetail
>
getMixOrderMealList
()
{
List
<
OrderDetail
>
mixOrderMealList
=
new
ArrayList
<>();
for
(
int
i
=
mSelectMealAdapter
.
getSelect_full_start_position
();
mSelectMealAdapter
.
getSelect_full_end_position
()
<
mOrderMealList
.
size
();
i
++)
{
mixOrderMealList
.
add
(
mOrderMealList
.
get
(
i
));
}
return
mixOrderMealList
;
}
/**
* 獲取套餐總金額
* @param mixOrderMealList
* @return
*/
private
double
getMixTotalAomout
(
List
<
OrderDetail
>
mixOrderMealList
){
double
mixTotalAomout
=
0.0
;
for
(
OrderDetail
orderDetail:
mixOrderMealList
)
{
mixTotalAomout
=
MoneyUtil
.
sum
(
mixTotalAomout
,
orderDetail
.
getPrice
());
}
return
mixTotalAomout
;
}
@Override
...
...
@@ -365,19 +397,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
if
(
cutOutDiscount
()
==
-
100
)
{
return
;
}
if
(
discountBean
.
getType
()
==
Discount
.
DISCOUNT_TYPE_CUSTOM_AMOUNT
)
{
showCustomAmountDialog
(
discountBean
);
}
else
{
addDiscountItem
(
discountBean
);
}
// mNomalDiscountAction.action(discountBean, new Strategy.CallBackListener() {
//
// @Override
// public void callBack(Object o) {
// addDiscountItem((Discount) o);
// }
// });
// new NomalDiscountAction().
// if (discountBean.getType() == Discount.DISCOUNT_TYPE_CUSTOM_AMOUNT) {
// showCustomAmountDialog(discountBean);
// } else {
// addDiscountItem(discountBean);
// }
mNomalDiscountAction
.
action
(
discountBean
);
}
});
}
...
...
@@ -1948,8 +1973,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
return
addPosition
;
}
private
int
getEndInsertPosition
(
List
<
OrderDetail
>
newOrderList
,
OrderDetail
orderDetail
,
int
currentI
)
{
private
int
getEndInsertPosition
(
List
<
OrderDetail
>
newOrderList
,
OrderDetail
orderDetail
,
int
currentI
)
{
boolean
hasChildFood
=
false
;
for
(
int
i
=
currentI
;
i
<
newOrderList
.
size
();
i
++)
{
OrderDetail
item
=
newOrderList
.
get
(
i
);
...
...
@@ -2031,19 +2055,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
}
/**
* 刪除會員折扣,會員優惠券
*/
// public void removeMemberDiscountItem() {
// for (int i = mBillItemList.size() - 1; i >= 0; i--) {
// BillItem billItem = mBillItemList.get(i);
// if (billItem.getType() == BillItem.MEMBER_DISCOUNT_TYPE || billItem.getType() == BillItem.COUPON_DISCOUNT_TYPE) {
// mBillItemList.remove(i);
// mOrderMoneyAdapter.notifyItemChanged(i);
// }
// }
// }
/**
* 加載折扣數據
*/
public
void
loadDiscountData
()
{
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderContentPresenter.java
View file @
525c4def
...
...
@@ -18,7 +18,6 @@ import com.gingersoft.gsa.cloud.base.order.billItem.DiscountItem;
import
com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.base.order.bean.discount.CouponDiscountBean
;
import
com.gingersoft.gsa.cloud.base.order.bean.discount.CouponDiscountResult
;
import
com.gingersoft.gsa.cloud.base.order.discount.MultyDiscount
;
import
com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount
;
import
com.gingersoft.gsa.cloud.base.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.base.order.order.DoshokuOrder
;
...
...
@@ -42,6 +41,7 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseOrderRespose;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.TableDetail
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.discount.BillDiscountAction
;
import
com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity
;
...
...
@@ -118,7 +118,10 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
*/
private
SplitTableDialog
mSplitTableDialog
;
private
DiscountDialog
.
Builder
mDiscountDialog
;
/**
* 整單折扣邏輯
*/
private
BillDiscountAction
mNomalDiscountAction
;
@Inject
public
OrderContentPresenter
(
OrderContentContract
.
Model
model
,
OrderContentContract
.
View
rootView
)
{
...
...
@@ -128,6 +131,19 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
//转移食品可多选
mSelectMealAdapter
.
setSelectedMode
(
SelectMealAdapter
.
MULTIPLE_SELECTED
);
}
mNomalDiscountAction
=
new
BillDiscountAction
(
IActivity
,
mShoppingCart
.
getNomalDiscoutByMultyDiscountList
(),
new
BillDiscountAction
.
OnCallBackListener
()
{
@Override
public
void
exclusiveRemoveOther
()
{
mShoppingCart
.
delAllMultyDiscount
();
}
@Override
public
void
preformAddDiscount
(
Discount
discount
)
{
mShoppingCart
.
addMultyDiscount
(
mShoppingCart
.
createNomalDiscount
(
discount
,
BillItem
.
BILL_ITEM_NO_ORDER_STATUS
));
updateBillInfo
();
}
});
}
@Override
...
...
@@ -747,18 +763,12 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mDiscountDialog
.
setOnClickListener
(
new
DiscountDialog
.
Builder
.
OnClickListener
()
{
@Override
public
void
onItemClick
(
Discount
item
,
int
position
)
{
if
(
item
.
get
OnlyOnce
()
==
1
)
{
//
此折扣只一次
if
(
item
.
get
MinBillAmount
()
>
mShoppingCart
.
getWholeAmount
()
)
{
//
小於最小賬單金額 直接提示
mRootView
.
showMessage
(
"食品總計金額小於"
+
cashStr
+
item
.
getMinBillAmount
());
return
;
}
if
(
item
.
getExclusive
()
==
1
)
{
//獨佔折扣
}
MultyDiscount
nomalDiscount
=
mShoppingCart
.
createNomalDiscount
(
item
,
BillItem
.
BILL_ITEM_NO_ORDER_STATUS
);
mShoppingCart
.
addMultyDiscount
(
nomalDiscount
);
updateBillInfo
();
mNomalDiscountAction
.
action
(
item
);
}
@Override
...
...
@@ -772,7 +782,6 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mDiscountDialog
.
build
().
show
();
}
/**
* 更新訂單詳情
*
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/OrderContentActivity.java
View file @
525c4def
...
...
@@ -40,6 +40,7 @@ import com.gingersoft.gsa.cloud.table.mvp.presenter.OrderContentPresenter;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllTableFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.InputTableFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.widget.KeyboardDialog
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog
;
import
com.gingersoft.gsa.cloud.zxing.MipcaCaptureActivity
;
import
com.jess.arms.base.BaseFragmentActivity
;
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/meal/DiscountAdapter.java
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
adapter
.
meal
;
import
android.content.Context
;
import
android.graphics.Color
;
import
android.text.TextUtils
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.TextView
;
...
...
@@ -9,6 +11,7 @@ import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
import
com.gingersoft.gsa.cloud.ui.view.BeveLabelView
;
import
com.jess.arms.base.BaseHolder
;
import
com.jess.arms.base.DefaultAdapter
;
import
com.jess.arms.utils.ArmsUtils
;
...
...
@@ -58,6 +61,8 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
@BindView
(
R2
.
id
.
tv_name
)
TextView
tv_name
;
@BindView
(
R2
.
id
.
blv_soldout
)
BeveLabelView
blv_soldout
;
public
DiscountItemHolder
(
View
itemView
)
{
super
(
itemView
);
...
...
@@ -68,6 +73,7 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
initLayoutParams
();
initName
(
datasBean
);
initSoldoutStatus
(
datasBean
);
setColor
(
datasBean
);
}
...
...
@@ -77,12 +83,24 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
tv_name
.
setTextSize
(
fontSize
);
}
private
void
setColor
(
Discount
datasBean
)
{
private
void
initSoldoutStatus
(
Discount
datasBean
)
{
if
(
datasBean
.
isPause
())
{
blv_soldout
.
setLableText
(
"暫停"
);
blv_soldout
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
blv_soldout
.
setVisibility
(
View
.
GONE
);
}
}
int
color
=
ArmsUtils
.
getColor
(
mContext
,
R
.
color
.
light_blue_900
);
private
void
setColor
(
Discount
datasBean
)
{
String
colorRes
=
datasBean
.
getColor
();
if
(!
TextUtils
.
isEmpty
(
colorRes
)
&&
colorRes
.
startsWith
(
"#"
))
{
tv_name
.
setBackgroundColor
(
Color
.
parseColor
(
colorRes
));
}
else
{
int
color
=
ArmsUtils
.
getColor
(
mContext
,
R
.
color
.
light_blue_900
);
tv_name
.
setBackgroundColor
(
color
);
}
int
fontColor
=
ArmsUtils
.
getColor
(
mContext
,
R
.
color
.
theme_white_color
);
tv_name
.
setBackgroundColor
(
color
);
tv_name
.
setTextColor
(
fontColor
);
}
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/meal/SelectMealAdapter.java
View file @
525c4def
...
...
@@ -75,7 +75,6 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
this
.
mContext
=
context
;
this
.
BillListFontSize
=
GsaCloudApplication
.
uiStyleConfiguration
.
getBillListFontSizeValue
();
if
(
presenter
instanceof
MealStandPresenter
)
{
// this.mMealStandPresenter = (MealStandPresenter) presenter;
this
.
mMealStandActivity
=
(
MealStandActivity
)
context
;
}
else
if
(
presenter
instanceof
OrderContentPresenter
)
{
this
.
mOrderContentPresenter
=
(
OrderContentPresenter
)
presenter
;
...
...
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/widget/KeyboardDialog.java
0 → 100644
View file @
525c4def
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
widget
;
import
android.app.Activity
;
import
android.app.Dialog
;
import
android.os.Bundle
;
import
android.text.Editable
;
import
android.text.InputType
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.view.Gravity
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.WindowManager
;
import
android.view.animation.Animation
;
import
android.view.animation.AnimationUtils
;
import
android.widget.AdapterView
;
import
android.widget.EditText
;
import
android.widget.GridView
;
import
android.widget.LinearLayout
;
import
androidx.annotation.NonNull
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.ui.widget.keyboard.VirtualKeyboardView
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.jess.arms.utils.DeviceUtils
;
import
com.qmuiteam.qmui.QMUILog
;
import
com.qmuiteam.qmui.alpha.QMUIAlphaTextView
;
import
com.qmuiteam.qmui.util.QMUIDisplayHelper
;
import
com.rengwuxian.materialedittext.MaterialEditText
;
import
java.lang.reflect.Method
;
import
java.util.ArrayList
;
import
java.util.Map
;
/**
* @author : bin
* @create date: 2020-10-28
* @update date: 2020-10-28
* @description:
*/
public
class
KeyboardDialog
extends
Dialog
{
private
static
final
String
TAG
=
"KeyboardDialog"
;
private
Activity
mContext
;
private
VirtualKeyboardView
virtualKeyboardView
;
private
GridView
mGridView
;
private
MaterialEditText
ed_text
;
private
Animation
enterAnim
,
exitAnim
;
private
ArrayList
<
Map
<
String
,
String
>>
keyboardValueList
;
// 动画时长
private
final
static
int
mAnimationDuration
=
300
;
// 持有 ContentView,为了做动画
private
View
mContentView
;
private
boolean
mIsAnimating
=
false
;
public
KeyboardDialog
(
Activity
context
)
{
super
(
context
,
R
.
style
.
QMUI_BottomSheet
);
this
.
mContext
=
context
;
initAnim
();
}
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
//noinspection ConstantConditions
getWindow
().
getDecorView
().
setPadding
(
0
,
0
,
0
,
0
);
// 在底部,宽度撑满
WindowManager
.
LayoutParams
params
=
getWindow
().
getAttributes
();
params
.
height
=
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
;
params
.
gravity
=
Gravity
.
BOTTOM
|
Gravity
.
CENTER
;
int
screenWidth
=
QMUIDisplayHelper
.
getScreenWidth
(
getContext
());
int
screenHeight
=
QMUIDisplayHelper
.
getScreenHeight
(
getContext
());
params
.
width
=
screenWidth
<
screenHeight
?
screenWidth
:
screenHeight
;
getWindow
().
setAttributes
(
params
);
setCanceledOnTouchOutside
(
false
);
}
@Override
public
void
setContentView
(
int
layoutResID
)
{
mContentView
=
LayoutInflater
.
from
(
getContext
()).
inflate
(
layoutResID
,
null
);
super
.
setContentView
(
mContentView
);
}
@Override
public
void
setContentView
(
@NonNull
View
view
,
ViewGroup
.
LayoutParams
params
)
{
mContentView
=
view
;
super
.
setContentView
(
view
,
params
);
}
public
View
getContentView
()
{
return
mContentView
;
}
@Override
public
void
setContentView
(
@NonNull
View
view
)
{
mContentView
=
view
;
super
.
setContentView
(
view
);
}
/**
* BottomSheet升起动画
*/
private
void
animateUp
()
{
if
(
mContentView
==
null
)
{
return
;
}
mContentView
.
startAnimation
(
enterAnim
);
}
/**
* BottomSheet降下动画
*/
private
void
animateDown
()
{
if
(
mContentView
==
null
)
{
return
;
}
exitAnim
.
setAnimationListener
(
new
Animation
.
AnimationListener
()
{
@Override
public
void
onAnimationStart
(
Animation
animation
)
{
mIsAnimating
=
true
;
}
@Override
public
void
onAnimationEnd
(
Animation
animation
)
{
mIsAnimating
=
false
;
/**
* Bugfix: Attempting to destroy the window while drawing!
*/
mContentView
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
// java.lang.IllegalArgumentException: View=com.android.internal.policy.PhoneWindow$DecorView{22dbf5b V.E...... R......D 0,0-1080,1083} not attached to window manager
// 在dismiss的时候可能已经detach了,简单try-catch一下
try
{
KeyboardDialog
.
super
.
dismiss
();
}
catch
(
Exception
e
)
{
QMUILog
.
w
(
TAG
,
"dismiss error\n"
+
Log
.
getStackTraceString
(
e
));
}
}
});
}
@Override
public
void
onAnimationRepeat
(
Animation
animation
)
{
}
});
mContentView
.
startAnimation
(
exitAnim
);
}
@Override
public
void
show
()
{
super
.
show
();
animateUp
();
}
@Override
public
void
dismiss
()
{
super
.
dismiss
();
if
(
mIsAnimating
)
{
return
;
}
animateDown
();
}
public
KeyboardDialog
build
()
{
View
contentView
=
buildViews
();
setContentView
(
contentView
,
new
LinearLayout
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
(
int
)
(
QMUIDisplayHelper
.
getScreenHeight
(
mContext
)
*
0.7
)));
return
this
;
}
private
View
buildViews
()
{
View
view
=
View
.
inflate
(
mContext
,
getContentViewLayoutId
(),
null
);
ed_text
=
view
.
findViewById
(
R
.
id
.
ed_text
);
QMUIAlphaTextView
tv_sure
=
view
.
findViewById
(
R
.
id
.
tv_sure
);
QMUIAlphaTextView
tv_cancel
=
view
.
findViewById
(
R
.
id
.
tv_cancel
);
virtualKeyboardView
=
view
.
findViewById
(
R
.
id
.
virtualKeyboardView
);
// 设置不调用系统键盘
if
(
android
.
os
.
Build
.
VERSION
.
SDK_INT
<=
10
)
{
ed_text
.
setInputType
(
InputType
.
TYPE_NULL
);
}
else
{
mContext
.
getWindow
().
setSoftInputMode
(
WindowManager
.
LayoutParams
.
SOFT_INPUT_STATE_ALWAYS_HIDDEN
);
try
{
Class
<
EditText
>
cls
=
EditText
.
class
;
Method
setShowSoftInputOnFocus
;
setShowSoftInputOnFocus
=
cls
.
getMethod
(
"setShowSoftInputOnFocus"
,
boolean
.
class
);
setShowSoftInputOnFocus
.
setAccessible
(
true
);
setShowSoftInputOnFocus
.
invoke
(
ed_text
,
false
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
virtualKeyboardView
.
setFocusable
(
true
);
virtualKeyboardView
.
setFocusableInTouchMode
(
true
);
virtualKeyboardView
.
startAnimation
(
enterAnim
);
virtualKeyboardView
.
setVisibility
(
View
.
VISIBLE
);
keyboardValueList
=
virtualKeyboardView
.
getValueList
();
virtualKeyboardView
.
getLayoutBack
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
});
mGridView
=
virtualKeyboardView
.
getGridView
();
mGridView
.
setOnItemClickListener
(
onItemClickListener
);
tv_sure
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
String
text
=
getText
();
if
(
onCallBackListener
!=
null
&&
!
TextUtils
.
isEmpty
(
text
))
{
if
(
Double
.
parseDouble
(
text
)
>
0
)
{
onCallBackListener
.
onSure
(
text
);
}
else
{
ArmsUtils
.
makeText
(
mContext
,
"自定義金額必須>0"
);
}
}
dismiss
();
}
});
tv_cancel
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
dismiss
();
}
});
return
view
;
}
private
String
getText
()
{
return
ed_text
.
getText
().
toString
();
}
private
AdapterView
.
OnItemClickListener
onItemClickListener
=
new
AdapterView
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
AdapterView
<?>
adapterView
,
View
view
,
int
position
,
long
l
)
{
if
(
position
<
11
&&
position
!=
9
)
{
//点击0~9按钮
String
amount
=
ed_text
.
getText
().
toString
().
trim
();
amount
=
amount
+
keyboardValueList
.
get
(
position
).
get
(
"name"
);
ed_text
.
setText
(
amount
);
Editable
ea
=
ed_text
.
getText
();
ed_text
.
setSelection
(
ea
.
length
());
}
else
{
if
(
position
==
9
)
{
//点击退格键
String
amount
=
ed_text
.
getText
().
toString
().
trim
();
if
(!
amount
.
contains
(
"."
))
{
amount
=
amount
+
keyboardValueList
.
get
(
position
).
get
(
"name"
);
ed_text
.
setText
(
amount
);
Editable
ea
=
ed_text
.
getText
();
ed_text
.
setSelection
(
ea
.
length
());
}
}
if
(
position
==
11
)
{
//点击退格键
String
amount
=
ed_text
.
getText
().
toString
().
trim
();
if
(
amount
.
length
()
>
0
)
{
amount
=
amount
.
substring
(
0
,
amount
.
length
()
-
1
);
ed_text
.
setText
(
amount
);
Editable
ea
=
ed_text
.
getText
();
ed_text
.
setSelection
(
ea
.
length
());
}
}
}
}
};
/**
* 数字键盘显示动画
*/
private
void
initAnim
()
{
enterAnim
=
AnimationUtils
.
loadAnimation
(
mContext
,
com
.
gingersoft
.
gsa
.
cloud
.
table
.
R
.
anim
.
push_bottom_in
);
exitAnim
=
AnimationUtils
.
loadAnimation
(
mContext
,
com
.
gingersoft
.
gsa
.
cloud
.
table
.
R
.
anim
.
push_bottom_out
);
}
protected
int
getContentViewLayoutId
()
{
return
R
.
layout
.
table_dialog_keyboard
;
}
private
OnCallBackListener
onCallBackListener
;
public
KeyboardDialog
setOnCallBackListener
(
OnCallBackListener
onCallBackListener
)
{
this
.
onCallBackListener
=
onCallBackListener
;
return
this
;
}
public
interface
OnCallBackListener
{
void
onSure
(
String
number
);
}
}
table-module/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/widget/UseMemberDialog.java
View file @
525c4def
...
...
@@ -49,7 +49,6 @@ public class UseMemberDialog extends Dialog {
private
static
final
String
TAG
=
"UseMemberDialog"
;
private
Context
mContext
;
private
UseMemberDialog
mDialog
;
// 动画时长
private
final
static
int
mAnimationDuration
=
300
;
...
...
@@ -111,10 +110,6 @@ public class UseMemberDialog extends Dialog {
super
.
setContentView
(
view
,
params
);
}
public
View
getContentView
()
{
return
mContentView
;
}
@Override
public
void
setContentView
(
@NonNull
View
view
)
{
mContentView
=
view
;
...
...
@@ -209,14 +204,10 @@ public class UseMemberDialog extends Dialog {
}
public
UseMemberDialog
build
()
{
if
(
mDialog
!=
null
)
{
return
mDialog
;
}
mDialog
=
new
UseMemberDialog
(
mContext
);
View
contentView
=
buildViews
();
mDialog
.
setContentView
(
contentView
,
new
LinearLayout
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
(
int
)
(
QMUIDisplayHelper
.
getScreenHeight
(
mContext
)
*
0.65
)));
setContentView
(
contentView
,
new
LinearLayout
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
(
int
)
(
QMUIDisplayHelper
.
getScreenHeight
(
mContext
)
*
0.65
)));
updateMemberInfo
(
memberInfo
);
return
mDialog
;
return
this
;
}
private
View
buildViews
()
{
...
...
@@ -242,7 +233,7 @@ public class UseMemberDialog extends Dialog {
return
;
}
if
(
onLayoutClickListener
!=
null
)
{
onLayoutClickListener
.
onInputPhone
(
mDialog
,
getTvPhone
());
onLayoutClickListener
.
onInputPhone
(
UseMemberDialog
.
this
,
getTvPhone
());
}
}
});
...
...
@@ -250,7 +241,7 @@ public class UseMemberDialog extends Dialog {
@Override
public
void
onClick
(
View
v
)
{
if
(
onLayoutClickListener
!=
null
)
{
onLayoutClickListener
.
onScanAction
(
mDialog
);
onLayoutClickListener
.
onScanAction
(
UseMemberDialog
.
this
);
}
}
});
...
...
@@ -258,7 +249,7 @@ public class UseMemberDialog extends Dialog {
@Override
public
void
onClick
(
View
v
)
{
if
(
onLayoutClickListener
!=
null
)
{
onLayoutClickListener
.
onUseMember
(
mDialog
);
onLayoutClickListener
.
onUseMember
(
UseMemberDialog
.
this
);
}
}
});
...
...
@@ -280,7 +271,7 @@ public class UseMemberDialog extends Dialog {
@Override
public
void
onClick
(
View
v
)
{
mDialog
.
dismiss
();
UseMemberDialog
.
this
.
dismiss
();
}
});
mTopBar
.
setTitle
(
"使用會員"
);
...
...
table-module/src/main/res/layout/meal_item_discount.xml
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/tv_name"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/rl_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginRight=
"1px"
android:layout_marginTop=
"1px"
android:gravity=
"center"
android:padding=
"@dimen/dp_2"
android:text=
"food"
android:textAppearance=
"?android:attr/textAppearanceLarge"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_16"
/>
android:layout_height=
"wrap_content"
>
<com.gingersoft.gsa.cloud.ui.view.BeveLabelView
android:id=
"@+id/blv_soldout"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
app:label_bg_color=
"#D10035"
app:label_corner=
"10dp"
app:label_length=
"23dp"
app:label_mode=
"left_top"
app:label_text=
"暫停"
app:label_text_color=
"@color/theme_white_color"
app:label_text_size=
"@dimen/sp_10"
android:visibility=
"gone"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/tv_name"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"1px"
android:layout_marginRight=
"1px"
android:gravity=
"center"
android:padding=
"@dimen/dp_2"
android:text=
"food"
android:textAppearance=
"?android:attr/textAppearanceLarge"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_16"
/>
</FrameLayout>
table-module/src/main/res/layout/meal_item_food.xml
View file @
525c4def
...
...
@@ -59,17 +59,6 @@
app:label_text_color=
"@color/theme_white_color"
app:label_text_size=
"@dimen/sp_10"
/>
<!--<TextView-->
<!--android:id="@+id/tv_status"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_alignParentRight="true"-->
<!--android:layout_gravity="right"-->
<!--android:layout_marginRight="3px"-->
<!--android:layout_marginTop="2px"-->
<!--android:background="@drawable/selector_white_rect"-->
<!--android:text="sold" />-->
<ImageView
android:id=
"@+id/iv_qtySold"
android:layout_width=
"@dimen/dp_40"
...
...
table-module/src/main/res/layout/table_dialog_keyboard.xml
0 → 100644
View file @
525c4def
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:paddingTop=
"@dimen/dp_25"
android:paddingBottom=
"@dimen/dp_10"
android:paddingStart=
"@dimen/dp_20"
android:paddingEnd=
"@dimen/dp_20"
android:background=
"@drawable/shape_rect_fillet_white_5"
>
<com.rengwuxian.materialedittext.MaterialEditText
android:id=
"@+id/ed_text"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:background=
"@null"
android:hint=
"請輸入自定義金額"
android:paddingLeft=
"@dimen/dp_10"
android:paddingRight=
"@dimen/dp_10"
android:singleLine=
"true"
android:textColor=
"@color/normal_color"
android:textColorHint=
"@color/hint_color"
android:textSize=
"@dimen/sp_16"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:met_autoValidate=
"true"
app:met_baseColor=
"@color/theme_black"
app:met_clearButton=
"true"
app:met_floatingLabel=
"highlight"
app:met_iconPadding=
"2dp"
app:met_primaryColor=
"@color/theme_color"
app:met_singleLineEllipsis=
"false"
app:met_bottomTextSize=
"@dimen/sp_16"
app:met_floatingLabelTextSize=
"@dimen/sp_16"
/>
<View
android:layout_width=
"1px"
android:layout_height=
"@dimen/dp_30"
android:background=
"@color/theme_grey_color"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/tv_sure"
android:layout_width=
"@dimen/dp_70"
android:layout_height=
"@dimen/dp_40"
android:gravity=
"center"
android:textSize=
"@dimen/sp_14"
android:textColor=
"@color/theme_red_color"
android:text=
"確認"
android:layout_marginTop=
"@dimen/dp_10"
app:layout_constraintTop_toBottomOf=
"@+id/ed_text"
app:layout_constraintLeft_toLeftOf=
"@+id/ed_text"
app:qmui_borderColor=
"@color/trans"
app:qmui_radius=
"@dimen/dp_5"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/tv_cancel"
android:layout_width=
"@dimen/dp_70"
android:layout_height=
"@dimen/dp_40"
android:gravity=
"center"
android:textSize=
"@dimen/sp_14"
android:textColor=
"@color/theme_grey_color"
android:text=
"取消"
android:layout_marginTop=
"@dimen/dp_10"
app:layout_constraintTop_toBottomOf=
"@+id/ed_text"
app:layout_constraintRight_toRightOf=
"@+id/ed_text"
app:qmui_borderColor=
"@color/trans"
app:qmui_radius=
"@dimen/dp_5"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.gingersoft.gsa.cloud.ui.widget.keyboard.VirtualKeyboardView
android:id=
"@+id/virtualKeyboardView"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
/>
</FrameLayout>
\ 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