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
36db1aef
Commit
36db1aef
authored
Feb 24, 2021
by
宁斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、增加打印埋点 2、餐台模式禅道bug处理 3、新增打印流程可视化dialog
parent
f410baeb
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
1869 additions
and
143 deletions
+1869
-143
component-download/src/main/java/com/gingersoft/gsa/cloud/download/mvp/presenter/DownloadPresenter.java
+83
-11
component-print/src/main/java/com/joe/print/mvp/print/EpsonPrint.java
+18
-9
component-print/src/main/java/com/joe/print/mvp/print/PrinterRoot.java
+6
-3
component-print/src/main/java/com/joe/print/mvp/print/service/PrjService.java
+3
-2
component-print/src/main/java/com/joe/print/mvp/print/usb/UsbPrint.java
+9
-4
component-print/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
+64
-14
component-print/src/main/java/com/joe/print/mvp/ui/view/PrinterLoadingDialog.java
+181
-0
component-print/src/main/res/drawable/print_green_point.xml
+12
-0
component-print/src/main/res/drawable/print_grey_point.xml
+11
-0
component-print/src/main/res/drawable/print_red_point.xml
+12
-0
component-print/src/main/res/layout/print_dialog_loading.xml
+81
-0
component-print/src/main/res/raw/printer_loading.json
+0
-0
component-print/src/main/res/raw/printer_loading2.json
+1209
-0
component-print/src/main/res/raw/printer_loading3.json
+2
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
+10
-9
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/MealStandActivity.java
+12
-3
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/SoldoutCtrlActivity.java
+4
-4
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/TableActivity.java
+2
-2
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/BillItemAdapter.java
+10
-9
component-table/src/main/res/layout/activitiy_coordinator.xml
+70
-29
config.gradle
+4
-3
library-common/build.gradle
+2
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/app/GsaCloudApplication.java
+12
-5
library-common/src/main/java/com/gingersoft/gsa/cloud/common/config/LoganConfig.java
+2
-2
library-common/src/main/java/com/gingersoft/gsa/cloud/common/constans/ExpandConstant.java
+1
-1
library-common/src/main/java/com/gingersoft/gsa/cloud/common/core/restaurant/utils/RestaurantExpandInfoUtils.java
+0
-1
library-common/src/main/java/com/gingersoft/gsa/cloud/common/printer/PrinterFileUtils.java
+1
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/printer/plugins/PrinterFlowListener.java
+2
-2
library-common/src/main/java/com/gingersoft/gsa/cloud/common/service/GetInfoUpdateService.kt
+11
-3
library-common/src/main/res/drawable/base_grey_point.xml
+0
-0
library-common/src/main/res/drawable/base_red_point.xml
+0
-0
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintSocketHolder.java
+12
-5
library-ui/src/main/java/com/gingersoft/gsa/cloud/ui/view/OrderPayView.java
+23
-22
No files found.
component-download/src/main/java/com/gingersoft/gsa/cloud/download/mvp/presenter/DownloadPresenter.java
View file @
36db1aef
package
com
.
gingersoft
.
gsa
.
cloud
.
download
.
mvp
.
presenter
;
package
com
.
gingersoft
.
gsa
.
cloud
.
download
.
mvp
.
presenter
;
import
android.app.Application
;
import
android.app.Application
;
import
android.text.TextUtils
;
import
com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
;
import
com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
;
import
com.billy.cc.core.component.CC
;
import
com.billy.cc.core.component.CC
;
...
@@ -55,7 +56,15 @@ import com.jess.arms.utils.DeviceUtils;
...
@@ -55,7 +56,15 @@ import com.jess.arms.utils.DeviceUtils;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Queue
;
import
java.util.concurrent.ArrayBlockingQueue
;
import
java.util.concurrent.BlockingQueue
;
import
java.util.concurrent.LinkedBlockingQueue
;
import
javax.inject.Inject
;
import
javax.inject.Inject
;
...
@@ -119,6 +128,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -119,6 +128,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
//當前下載進度
//當前下載進度
private
float
currentProgress
=
0
;
private
float
currentProgress
=
0
;
//响应数据保存到本地库的数量
private
int
saveSuccessCount
;
private
Map
<
Integer
,
Object
>
responseDataMaps
=
new
HashMap
<>();
private
List
<
Observable
>
mRequestObservables
=
new
ArrayList
<>();
private
List
<
Observable
>
mRequestObservables
=
new
ArrayList
<>();
private
List
<
Disposable
>
mDownDisposable
=
new
ArrayList
<>();
private
List
<
Disposable
>
mDownDisposable
=
new
ArrayList
<>();
...
@@ -155,6 +168,7 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -155,6 +168,7 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
}
}
requestCount
=
urlList
.
length
;
requestCount
=
urlList
.
length
;
saveSuccessCount
=
0
;
responseSuccessCount
=
0
;
responseSuccessCount
=
0
;
currentProgress
=
0
;
currentProgress
=
0
;
IActivity
.
setTvProgress
(
0
);
IActivity
.
setTvProgress
(
0
);
...
@@ -193,6 +207,7 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -193,6 +207,7 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
private
void
downDataRequest
(
Observable
observable
,
int
downIndex
)
{
private
void
downDataRequest
(
Observable
observable
,
int
downIndex
)
{
observable
observable
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
AndroidSchedulers
.
mainThread
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
subscribe
(
new
ErrorHandleSubscriber
<
BaseResult
>(
mErrorHandler
)
{
.
subscribe
(
new
ErrorHandleSubscriber
<
BaseResult
>(
mErrorHandler
)
{
...
@@ -204,10 +219,25 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -204,10 +219,25 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
}
}
@Override
@Override
public
void
onComplete
()
{
if
(
responseSuccessCount
==
requestCount
)
{
saveToDatabase
(
0
,
new
OnSaveDownDataListener
()
{
@Override
public
void
onComplete
(
int
nextIndex
)
{
boolean
end
=
saveToDatabase
(
nextIndex
,
this
);
if
(
end
&&
saveSuccessCount
==
requestCount
)
{
endDownReturn
();
}
}
});
}
}
@Override
public
void
onNext
(
@NonNull
BaseResult
result
)
{
public
void
onNext
(
@NonNull
BaseResult
result
)
{
if
(
result
.
isSuccess
())
{
if
(
result
.
isSuccess
())
{
saveToDatabase
(
result
.
getData
(),
downIndex
);
responseDataMaps
.
put
(
downIndex
,
result
.
getData
()
);
DataDownLoadState
loadState
=
mList
.
get
(
downIndex
);
DataDownLoadState
loadState
=
mList
.
get
(
downIndex
);
loadState
.
setState
(
2
);
loadState
.
setState
(
2
);
...
@@ -215,10 +245,8 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -215,10 +245,8 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
currentProgress
+=
loadState
.
getRatio
();
currentProgress
+=
loadState
.
getRatio
();
IActivity
.
setTvProgress
(
currentProgress
);
IActivity
.
setTvProgress
(
currentProgress
);
responseSuccessCount
++;
responseSuccessCount
++;
if
(
responseSuccessCount
==
requestCount
)
{
endDownReturn
();
}
}
}
}
}
...
@@ -232,8 +260,12 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -232,8 +260,12 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
});
});
}
}
private
void
saveToDatabase
(
Object
data
,
int
downIndex
)
{
private
boolean
saveToDatabase
(
int
downIndex
,
OnSaveDownDataListener
saveDownDataListener
)
{
try
{
Object
data
=
responseDataMaps
.
get
(
downIndex
);
if
(
data
==
null
)
{
return
true
;
}
int
nextIndex
=
downIndex
+
1
;
switch
(
downIndex
)
{
switch
(
downIndex
)
{
case
0
:
case
0
:
List
<
Function
>
functionList
=
GsonUtils
.
jsonToList
(
data
,
Function
.
class
);
List
<
Function
>
functionList
=
GsonUtils
.
jsonToList
(
data
,
Function
.
class
);
...
@@ -246,6 +278,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -246,6 +278,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
FunctionDaoUtils
functionDao
=
new
FunctionDaoUtils
(
IActivity
);
FunctionDaoUtils
functionDao
=
new
FunctionDaoUtils
(
IActivity
);
functionDao
.
deleteAll
();
functionDao
.
deleteAll
();
functionDao
.
insertMultFunction
(
functionList
);
functionDao
.
insertMultFunction
(
functionList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
XFunctionManager
.
newInstance
().
updateFunctions
(
functionList
);
XFunctionManager
.
newInstance
().
updateFunctions
(
functionList
);
...
@@ -262,6 +298,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -262,6 +298,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
FoodDaoUtils
foodDao
=
new
FoodDaoUtils
(
IActivity
);
FoodDaoUtils
foodDao
=
new
FoodDaoUtils
(
IActivity
);
foodDao
.
deleteAll
();
foodDao
.
deleteAll
();
foodDao
.
insertMultFood
(
foodList
);
foodDao
.
insertMultFood
(
foodList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -278,6 +318,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -278,6 +318,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
modifierDao
.
deleteAll
();
modifierDao
.
deleteAll
();
modifierDao
.
insertMultModifier
(
modifierList
);
modifierDao
.
insertMultModifier
(
modifierList
);
CommonConfiguration
.
getInstance
().
saveModifierTopIdConfiguration
(
modifierList
);
CommonConfiguration
.
getInstance
().
saveModifierTopIdConfiguration
(
modifierList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -294,6 +338,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -294,6 +338,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
comboDao
.
deleteAll
();
comboDao
.
deleteAll
();
comboDao
.
insertMultCombo
(
foodComboList
);
comboDao
.
insertMultCombo
(
foodComboList
);
CommonConfiguration
.
getInstance
().
saveComboIdConfiguration
(
foodComboList
);
CommonConfiguration
.
getInstance
().
saveComboIdConfiguration
(
foodComboList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -309,6 +357,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -309,6 +357,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
ComboItemDaoUtils
comboDao
=
new
ComboItemDaoUtils
(
IActivity
);
ComboItemDaoUtils
comboDao
=
new
ComboItemDaoUtils
(
IActivity
);
comboDao
.
deleteAll
();
comboDao
.
deleteAll
();
comboDao
.
insertMultCombo
(
comboItemList
);
comboDao
.
insertMultCombo
(
comboItemList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -324,6 +376,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -324,6 +376,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
FoodModifierDaoUtils
foodModifierDao
=
new
FoodModifierDaoUtils
(
IActivity
);
FoodModifierDaoUtils
foodModifierDao
=
new
FoodModifierDaoUtils
(
IActivity
);
foodModifierDao
.
deleteAll
();
foodModifierDao
.
deleteAll
();
foodModifierDao
.
insertMultFoodModifier
(
foodModifierList
);
foodModifierDao
.
insertMultFoodModifier
(
foodModifierList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -339,6 +395,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -339,6 +395,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
DiscountDaoUtils
discountDaoUtils
=
new
DiscountDaoUtils
(
IActivity
);
DiscountDaoUtils
discountDaoUtils
=
new
DiscountDaoUtils
(
IActivity
);
discountDaoUtils
.
deleteAll
();
discountDaoUtils
.
deleteAll
();
discountDaoUtils
.
insertMultDiscount
(
discountList
);
discountDaoUtils
.
insertMultDiscount
(
discountList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -355,6 +415,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -355,6 +415,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
expandInfoDaoUtils
.
deleteAll
();
expandInfoDaoUtils
.
deleteAll
();
expandInfoDaoUtils
.
insertMultExpandInfo
(
expandInfoList
);
expandInfoDaoUtils
.
insertMultExpandInfo
(
expandInfoList
);
RestaurantExpandInfoUtils
.
setCommonExpandInfo
(
expandInfoList
);
RestaurantExpandInfoUtils
.
setCommonExpandInfo
(
expandInfoList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -370,6 +434,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -370,6 +434,10 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
PrinterDeviceDaoUtils
printerDeviceDaoUtils
=
new
PrinterDeviceDaoUtils
(
IActivity
);
PrinterDeviceDaoUtils
printerDeviceDaoUtils
=
new
PrinterDeviceDaoUtils
(
IActivity
);
printerDeviceDaoUtils
.
deleteAll
();
printerDeviceDaoUtils
.
deleteAll
();
printerDeviceDaoUtils
.
insertMultPrinterDeviceBean
(
printerListBean
.
getList
());
printerDeviceDaoUtils
.
insertMultPrinterDeviceBean
(
printerListBean
.
getList
());
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
...
@@ -385,16 +453,16 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -385,16 +453,16 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
ColorDaoUtils
colorDaoUtils
=
new
ColorDaoUtils
(
IActivity
);
ColorDaoUtils
colorDaoUtils
=
new
ColorDaoUtils
(
IActivity
);
colorDaoUtils
.
deleteAll
();
colorDaoUtils
.
deleteAll
();
colorDaoUtils
.
insertMultColorBean
(
colorBeanList
);
colorDaoUtils
.
insertMultColorBean
(
colorBeanList
);
saveSuccessCount
++;
if
(
saveDownDataListener
!=
null
)
{
saveDownDataListener
.
onComplete
(
nextIndex
);
}
}
}
});
});
}
}
break
;
break
;
}
}
}
catch
(
Exception
e
)
{
return
false
;
LoganManager
.
w_code
(
TAG
,
"下載異常="
+
e
.
getMessage
());
}
finally
{
}
}
}
private
void
initDownState
()
{
private
void
initDownState
()
{
...
@@ -471,4 +539,8 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
...
@@ -471,4 +539,8 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
}
}
mDownDisposable
.
clear
();
mDownDisposable
.
clear
();
}
}
public
interface
OnSaveDownDataListener
{
void
onComplete
(
int
nextIndex
);
}
}
}
component-print/src/main/java/com/joe/print/mvp/print/EpsonPrint.java
View file @
36db1aef
...
@@ -8,6 +8,8 @@ import com.epson.epos2.Epos2Exception;
...
@@ -8,6 +8,8 @@ import com.epson.epos2.Epos2Exception;
import
com.epson.epos2.printer.Printer
;
import
com.epson.epos2.printer.Printer
;
import
com.epson.epos2.printer.PrinterStatusInfo
;
import
com.epson.epos2.printer.PrinterStatusInfo
;
import
com.epson.epos2.printer.ReceiveListener
;
import
com.epson.epos2.printer.ReceiveListener
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins
;
import
com.gingersoft.gsa.cloud.print.PrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintSocketHolder
;
import
com.gingersoft.gsa.cloud.print.PrintSocketHolder
;
import
com.joe.print.mvp.model.bean.PrintInfoBean
;
import
com.joe.print.mvp.model.bean.PrintInfoBean
;
...
@@ -42,7 +44,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -42,7 +44,7 @@ public class EpsonPrint implements ReceiveListener {
*
*
* @return
* @return
*/
*/
public
boolean
initializeObject
(
Context
context
,
ReceiveListener
receiveListener
,
PrintExecutor
.
OnPrintResultListener
resultListener
)
{
public
boolean
initializeObject
(
Context
context
,
ReceiveListener
receiveListener
,
PrintExecutor
.
OnPrintResultListener
resultListener
)
{
try
{
try
{
this
.
resultListener
=
resultListener
;
this
.
resultListener
=
resultListener
;
this
.
receiveListener
=
receiveListener
;
this
.
receiveListener
=
receiveListener
;
...
@@ -50,6 +52,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -50,6 +52,7 @@ public class EpsonPrint implements ReceiveListener {
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_TAIWAN
,
context
);
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_TAIWAN
,
context
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
LoganManager
.
w_printer
(
TAG
,
"初始化针式打印机失败:"
+
e
.
getMessage
());
return
false
;
return
false
;
}
}
mPrinter
.
setReceiveEventListener
(
this
);
mPrinter
.
setReceiveEventListener
(
this
);
...
@@ -65,10 +68,11 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -65,10 +68,11 @@ public class EpsonPrint implements ReceiveListener {
}
}
while
(
true
)
{
while
(
true
)
{
try
{
try
{
LoganManager
.
w_printer
(
TAG
,
"斷開連接"
);
mPrinter
.
disconnect
();
mPrinter
.
disconnect
();
break
;
break
;
}
catch
(
final
Exception
e
)
{
}
catch
(
final
Exception
e
)
{
Log
.
e
(
TAG
,
"斷開連接報錯"
+
e
.
getMessage
()
+
e
.
getClass
().
getNam
e
());
Log
anManager
.
w_printer
(
TAG
,
"斷開連接報錯:"
+
e
.
getMessag
e
());
if
(
e
instanceof
Epos2Exception
)
{
if
(
e
instanceof
Epos2Exception
)
{
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
if
(((
Epos2Exception
)
e
).
getErrorStatus
()
==
Epos2Exception
.
ERR_PROCESSING
)
{
if
(((
Epos2Exception
)
e
).
getErrorStatus
()
==
Epos2Exception
.
ERR_PROCESSING
)
{
...
@@ -116,8 +120,10 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -116,8 +120,10 @@ public class EpsonPrint implements ReceiveListener {
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
mPrinter
.
clearCommandBuffer
();
mPrinter
.
clearCommandBuffer
();
LoganManager
.
w_printer
(
TAG
,
"創建打印數據失败:"
+
e
.
getMessage
());
return
false
;
return
false
;
}
}
// PrinterPlugins.getOnPrinterFlowHandler().onPrinterBitmapBefore();
return
true
;
return
true
;
}
}
...
@@ -266,6 +272,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -266,6 +272,7 @@ public class EpsonPrint implements ReceiveListener {
//重試次數5次
//重試次數5次
private
int
resetCount
=
5
;
private
int
resetCount
=
5
;
private
void
printData
(
String
ip
,
Bitmap
bitmap
)
{
private
void
printData
(
String
ip
,
Bitmap
bitmap
)
{
mPrinter
.
clearCommandBuffer
();
mPrinter
.
clearCommandBuffer
();
if
(!
createPrintData
(
bitmap
))
{
if
(!
createPrintData
(
bitmap
))
{
...
@@ -282,7 +289,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -282,7 +289,7 @@ public class EpsonPrint implements ReceiveListener {
//沒紙了
//沒紙了
updatePrintState
(
PrintSocketHolder
.
ERROR_2
);
updatePrintState
(
PrintSocketHolder
.
ERROR_2
);
return
;
return
;
}
else
if
(
statusInfo
.
getConnection
()
!=
1
)
{
}
else
if
(
statusInfo
.
getConnection
()
!=
1
)
{
//未連接到打印機
//未連接到打印機
updatePrintState
(
PrintSocketHolder
.
ERROR_2
);
updatePrintState
(
PrintSocketHolder
.
ERROR_2
);
}
}
...
@@ -298,7 +305,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -298,7 +305,7 @@ public class EpsonPrint implements ReceiveListener {
private
void
connectByIp
(
String
ip
,
PrinterStatusInfo
statusInfo
)
{
private
void
connectByIp
(
String
ip
,
PrinterStatusInfo
statusInfo
)
{
if
(
statusInfo
!=
null
)
{
if
(
statusInfo
!=
null
)
{
Log
.
e
(
TAG
,
"連接狀態1111:"
+
statusInfo
.
getConnection
());
Log
anManager
.
w_printer
(
TAG
,
"連接狀態1111:"
+
statusInfo
.
getConnection
());
if
(
statusInfo
.
getConnection
()
!=
1
)
{
if
(
statusInfo
.
getConnection
()
!=
1
)
{
//未連接
//未連接
if
(
connectPrinter
(
ip
))
{
if
(
connectPrinter
(
ip
))
{
...
@@ -307,7 +314,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -307,7 +314,7 @@ public class EpsonPrint implements ReceiveListener {
}
else
{
}
else
{
//已連接,判斷這次是否是上次的ip,如果不是,斷開連這個ip
//已連接,判斷這次是否是上次的ip,如果不是,斷開連這個ip
if
(
ipAddress
!=
null
&&
!
ipAddress
.
equals
(
ip
))
{
if
(
ipAddress
!=
null
&&
!
ipAddress
.
equals
(
ip
))
{
Log
.
e
(
TAG
,
"不是上次的ip,斷開重連"
);
Log
anManager
.
w_printer
(
TAG
,
"不是上次的ip,斷開重連:"
+
ip
);
disconnectPrinter
();
disconnectPrinter
();
if
(
connectPrinter
(
ip
))
{
if
(
connectPrinter
(
ip
))
{
ipAddress
=
ip
;
ipAddress
=
ip
;
...
@@ -319,7 +326,7 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -319,7 +326,7 @@ public class EpsonPrint implements ReceiveListener {
ipAddress
=
ip
;
ipAddress
=
ip
;
}
}
}
}
Log
.
e
(
TAG
,
"連接狀態222:"
+
statusInfo
.
getConnection
());
Log
anManager
.
w_printer
(
TAG
,
"連接狀態222:"
+
statusInfo
.
getConnection
());
}
}
private
void
loginfo
(
PrinterStatusInfo
statusInfo
)
{
private
void
loginfo
(
PrinterStatusInfo
statusInfo
)
{
...
@@ -346,17 +353,19 @@ public class EpsonPrint implements ReceiveListener {
...
@@ -346,17 +353,19 @@ public class EpsonPrint implements ReceiveListener {
try
{
try
{
mPrinter
.
connect
(
"TCP:"
+
ip
,
Printer
.
PARAM_DEFAULT
);
mPrinter
.
connect
(
"TCP:"
+
ip
,
Printer
.
PARAM_DEFAULT
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
Log
.
e
(
TAG
,
"連接打印機報錯"
+
e
.
getMessage
()
+
e
.
getClass
().
getName
());
e
.
printStackTrace
();
e
.
printStackTrace
();
LoganManager
.
w_printer
(
TAG
,
"連接打印機報錯:"
+
e
.
getMessage
());
disconnectPrinter
();
disconnectPrinter
();
finalizeObject
();
finalizeObject
();
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionError
(
e
);
return
false
;
return
false
;
}
}
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionSuccess
();
return
true
;
return
true
;
}
}
private
void
updatePrintState
(
int
code
){
private
void
updatePrintState
(
int
code
)
{
if
(
resultListener
!=
null
)
{
if
(
resultListener
!=
null
)
{
resultListener
.
onResult
(
code
);
resultListener
.
onResult
(
code
);
}
}
}
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/PrinterRoot.java
View file @
36db1aef
...
@@ -468,7 +468,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
...
@@ -468,7 +468,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
LoganManager
.
w_printer
(
TAG
,
"打印失败"
);
LoganManager
.
w_printer
(
TAG
,
"打印失败"
);
break
;
break
;
}
}
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
errorCode
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
null
,
errorCode
);
setPrintState
(
errorCode
);
setPrintState
(
errorCode
);
}
}
...
@@ -653,10 +653,10 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
...
@@ -653,10 +653,10 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
ll_member_info
.
setVisibility
(
View
.
GONE
);
ll_member_info
.
setVisibility
(
View
.
GONE
);
}
}
//生成積分QRCode碼(飯糰APP掃碼獲得積分)
//生成積分QRCode碼(飯糰APP掃碼獲得積分)
if
(
TextUtils
.
isEmpty
(
integralQrcode
)
||
if
((
boolean
)
RestaurantExpandInfoUtils
.
getValue
(
ExpandConstant
.
ToPrintQRCode
,
false
)
==
false
)
{
(
boolean
)
RestaurantExpandInfoUtils
.
getValue
(
ExpandConstant
.
ToPrintQRCode
,
false
)
==
false
)
{
llIntegralQrcode
.
setVisibility
(
View
.
GONE
);
llIntegralQrcode
.
setVisibility
(
View
.
GONE
);
}
else
{
}
else
{
if
(!
TextUtils
.
isEmpty
(
integralQrcode
))
{
llIntegralQrcode
.
setVisibility
(
View
.
VISIBLE
);
llIntegralQrcode
.
setVisibility
(
View
.
VISIBLE
);
Bitmap
QRImage
=
null
;
Bitmap
QRImage
=
null
;
try
{
try
{
...
@@ -665,6 +665,9 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
...
@@ -665,6 +665,9 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
ivIntegralQrcode
.
setImageBitmap
(
QRImage
);
ivIntegralQrcode
.
setImageBitmap
(
QRImage
);
}
else
{
llIntegralQrcode
.
setVisibility
(
View
.
GONE
);
}
}
}
return
view
;
return
view
;
}
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/service/PrjService.java
View file @
36db1aef
...
@@ -229,6 +229,7 @@ public class PrjService extends Service implements ReceiveListener {
...
@@ -229,6 +229,7 @@ public class PrjService extends Service implements ReceiveListener {
private
int
totalPrj
;
private
int
totalPrj
;
private
int
currentIndex
;
private
int
currentIndex
;
private
String
prjJson
=
""
;
private
String
prjJson
=
""
;
private
void
newPrint
(
String
json
)
{
private
void
newPrint
(
String
json
)
{
// json = prjJson;
// json = prjJson;
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
listMap
=
new
HashMap
<>();
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
listMap
=
new
HashMap
<>();
...
@@ -589,7 +590,7 @@ public class PrjService extends Service implements ReceiveListener {
...
@@ -589,7 +590,7 @@ public class PrjService extends Service implements ReceiveListener {
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
();
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
();
updatePrjSuccess
(
key
);
updatePrjSuccess
(
key
);
}
else
if
(
code
==
SendResultCode
.
SEND_FAILED
)
{
}
else
if
(
code
==
SendResultCode
.
SEND_FAILED
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
code
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
null
,
code
);
updatePrjFailure
(
key
);
updatePrjFailure
(
key
);
}
}
});
});
...
@@ -877,7 +878,7 @@ public class PrjService extends Service implements ReceiveListener {
...
@@ -877,7 +878,7 @@ public class PrjService extends Service implements ReceiveListener {
//打印成功
//打印成功
updatePrjSuccess
(
EpsIds
);
updatePrjSuccess
(
EpsIds
);
}
else
{
}
else
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
i
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
null
,
i
);
//打印失敗
//打印失敗
updatePrjFailure
(
EpsIds
);
updatePrjFailure
(
EpsIds
);
}
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/usb/UsbPrint.java
View file @
36db1aef
...
@@ -5,6 +5,7 @@ import android.hardware.usb.UsbDeviceConnection;
...
@@ -5,6 +5,7 @@ import android.hardware.usb.UsbDeviceConnection;
import
android.hardware.usb.UsbManager
;
import
android.hardware.usb.UsbManager
;
import
android.util.Log
;
import
android.util.Log
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.joe.print.mvp.print.common.SendCallback
;
import
com.joe.print.mvp.print.common.SendCallback
;
import
com.joe.print.mvp.print.common.SendResultCode
;
import
com.joe.print.mvp.print.common.SendResultCode
;
...
@@ -13,7 +14,10 @@ import java.util.concurrent.ExecutorService;
...
@@ -13,7 +14,10 @@ import java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Executors
;
public
class
UsbPrint
{
public
class
UsbPrint
{
// private UsbPrint INSTANCE;
private
final
String
TAG
=
"UsbPrint"
;
// private UsbPrint INSTANCE;
private
final
UsbManager
usbManager
;
private
final
UsbManager
usbManager
;
private
SendCallback
sendCallback
;
private
SendCallback
sendCallback
;
private
final
ExecutorService
threadPool
;
private
final
ExecutorService
threadPool
;
...
@@ -66,13 +70,14 @@ public class UsbPrint {
...
@@ -66,13 +70,14 @@ public class UsbPrint {
connection
.
close
();
connection
.
close
();
int
sendResultCode
=
result
>
0
?
SendResultCode
.
SEND_SUCCESS
:
SendResultCode
.
SEND_FAILED
;
int
sendResultCode
=
result
>
0
?
SendResultCode
.
SEND_SUCCESS
:
SendResultCode
.
SEND_FAILED
;
Log
.
e
(
"ddd"
,
"發送結果"
+
sendResultCode
);
if
(
usbPrinter
!=
null
&&
sendCallback
!=
null
)
{
LoganManager
.
w_printer
(
TAG
,
"發送結果"
+
sendResultCode
);
if
(
usbPrinter
!=
null
&&
sendCallback
!=
null
)
{
sendCallback
.
onCallback
(
sendResultCode
,
usbPrinter
.
getPrinterName
());
sendCallback
.
onCallback
(
sendResultCode
,
usbPrinter
.
getPrinterName
());
}
}
}
else
{
}
else
{
Log
.
e
(
"ddd"
,
"連接失敗"
);
Log
anManager
.
w_printer
(
TAG
,
"連接失敗"
);
}
}
}
}
}
}
...
...
component-print/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
View file @
36db1aef
...
@@ -31,9 +31,9 @@ import com.chad.library.adapter.base.listener.OnItemClickListener;
...
@@ -31,9 +31,9 @@ import com.chad.library.adapter.base.listener.OnItemClickListener;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.common.constans.PrintConstans
;
import
com.gingersoft.gsa.cloud.common.constans.PrintConstans
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.printer.plugins.PrinterFlowListener
;
import
com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins
;
import
com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins
;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.print.NewPrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintSocketHolder
;
import
com.gingersoft.gsa.cloud.print.PrintSocketHolder
;
import
com.gingersoft.gsa.cloud.print.bean.PrintContent
;
import
com.gingersoft.gsa.cloud.print.bean.PrintContent
;
...
@@ -60,6 +60,7 @@ import com.joe.print.mvp.print.PrinterRoot;
...
@@ -60,6 +60,7 @@ import com.joe.print.mvp.print.PrinterRoot;
import
com.joe.print.mvp.print.utils.MyPrintUtils
;
import
com.joe.print.mvp.print.utils.MyPrintUtils
;
import
com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter
;
import
com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter
;
import
com.joe.print.mvp.ui.adapter.PrintProgressAdapter
;
import
com.joe.print.mvp.ui.adapter.PrintProgressAdapter
;
import
com.joe.print.mvp.ui.view.PrinterLoadingDialog
;
import
com.joe.print.mvp.ui.view.SelectPrintDevicePopup
;
import
com.joe.print.mvp.ui.view.SelectPrintDevicePopup
;
import
com.lxj.xpopup.XPopup
;
import
com.lxj.xpopup.XPopup
;
import
com.lxj.xpopup.core.CenterPopupView
;
import
com.lxj.xpopup.core.CenterPopupView
;
...
@@ -130,7 +131,9 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -130,7 +131,9 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
/**
/**
* 打印進度
* 打印進度
*/
*/
private
LoadingPopupView
loadingPopup
;
// private LoadingPopupView loadingPopup;
private
PrinterLoadingDialog
printerLoadingDialog
;
@Override
@Override
public
void
setupActivityComponent
(
@NonNull
AppComponent
appComponent
)
{
public
void
setupActivityComponent
(
@NonNull
AppComponent
appComponent
)
{
...
@@ -151,10 +154,14 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -151,10 +154,14 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
loadingPopup
=
new
XPopup
.
Builder
(
mContext
)
// loadingPopup = new XPopup.Builder(mContext)
.
popupAnimation
(
PopupAnimation
.
ScaleAlphaFromCenter
)
// .popupAnimation(PopupAnimation.ScaleAlphaFromCenter)
.
asLoading
(
"加载中..."
);
// .asLoading("加载中...");
loadingPopup
.
show
();
// loadingPopup.show();
printerLoadingDialog
=
new
PrinterLoadingDialog
(
mContext
).
build
();
printerLoadingDialog
.
show
();
callId
=
CCUtil
.
getNavigateCallId
(
this
);
callId
=
CCUtil
.
getNavigateCallId
(
this
);
//獲取打印類型,根據打印類型生成對應的bitmap
//獲取打印類型,根據打印類型生成對應的bitmap
type
=
CCUtil
.
getNavigateParam
(
this
,
PrintConstans
.
PRINT_TYPE
,
PrintConstans
.
PRINT_TEST
);
type
=
CCUtil
.
getNavigateParam
(
this
,
PrintConstans
.
PRINT_TYPE
,
PrintConstans
.
PRINT_TEST
);
...
@@ -169,6 +176,49 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -169,6 +176,49 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
//初始化打印配置
//初始化打印配置
initPrintConfig
(
printContent
);
initPrintConfig
(
printContent
);
PrinterPlugins
.
setOnPrinterFlowHandler
(
new
PrinterFlowListener
()
{
@Override
public
void
connectionBefore
(
String
deviceName
,
String
IP
,
int
port
,
long
ioTimeout
,
long
printTimeout
)
{
}
@Override
public
void
connectionSuccess
()
{
printerLoadingDialog
.
setStep
(
2
,
PrinterLoadingDialog
.
status_success
);
}
@Override
public
void
connectionError
(
Exception
e
)
{
printerLoadingDialog
.
setStep
(
2
,
PrinterLoadingDialog
.
status_error
);
}
@Override
public
void
disconnect
()
{
printerLoadingDialog
.
setStep
(
4
,
PrinterLoadingDialog
.
status_success
);
}
@Override
public
void
onPrinterDataBefore
(
int
orderType
,
int
printType
,
String
printerData
,
String
printerDeviceInfo
)
{
printerLoadingDialog
.
setStep
(
1
,
PrinterLoadingDialog
.
status_default
);
}
@Override
public
void
onPrinterBitmapBefore
(
int
orderType
,
int
printType
,
String
directoryName
,
List
<
Bitmap
>
bitmaps
)
{
printerLoadingDialog
.
setStep
(
1
,
PrinterLoadingDialog
.
status_success
);
}
@Override
public
void
onPrintSuccess
()
{
printerLoadingDialog
.
setStep
(
3
,
PrinterLoadingDialog
.
status_success
);
}
@Override
public
void
onPrintError
(
Exception
e
,
int
errorCode
)
{
printerLoadingDialog
.
setStep
(
3
,
PrinterLoadingDialog
.
status_error
);
}
});
}
}
/**
/**
...
@@ -215,7 +265,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -215,7 +265,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
//如果彈窗已經關閉,打印機還是為空,說明用戶沒有選擇打印機
//如果彈窗已經關閉,打印機還是為空,說明用戶沒有選擇打印機
if
(
this
.
defaultPrint
==
null
)
{
if
(
this
.
defaultPrint
==
null
)
{
printFailure
(
"沒有找到打印機,無法打印"
);
printFailure
(
"沒有找到打印機,無法打印"
);
finish
();
killMyself
();
}
}
});
});
new
XPopup
.
Builder
(
mContext
).
asCustom
(
selectPrintDevicePopup
).
show
();
new
XPopup
.
Builder
(
mContext
).
asCustom
(
selectPrintDevicePopup
).
show
();
...
@@ -348,13 +398,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -348,13 +398,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
private
void
addPrintProgress
(
String
printState
)
{
private
void
addPrintProgress
(
String
printState
)
{
loadingPopup
.
setTitle
(
printState
);
printerLoadingDialog
.
setTitle
(
printState
);
}
}
@Override
@Override
public
boolean
dispatchTouchEvent
(
MotionEvent
ev
)
{
public
boolean
dispatchTouchEvent
(
MotionEvent
ev
)
{
//doSomeTing,點擊當前頁面任意地方自動關閉
//doSomeTing,點擊當前頁面任意地方自動關閉
finish
();
killMyself
();
return
true
;
return
true
;
}
}
...
@@ -391,10 +441,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -391,10 +441,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
break
;
break
;
case
PrintSocketHolder
.
STATE_4
:
case
PrintSocketHolder
.
STATE_4
:
tip
=
"關閉中"
;
tip
=
"關閉中"
;
finish
();
killMyself
();
break
;
break
;
case
FINISH:
case
FINISH:
finish
();
killMyself
();
break
;
break
;
case
ADD_PRINT_DEVICE:
case
ADD_PRINT_DEVICE:
addPrintDevice
();
addPrintDevice
();
...
@@ -418,7 +468,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -418,7 +468,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
public
void
printSuccess
()
{
public
void
printSuccess
()
{
LoganManager
.
w_printer
(
TAG
,
"printFailure 打印成功"
);
LoganManager
.
w_printer
(
TAG
,
"printFailure 打印成功"
);
CC
.
sendCCResult
(
callId
,
CCResult
.
success
());
CC
.
sendCCResult
(
callId
,
CCResult
.
success
());
finish
();
killMyself
();
}
}
@Override
@Override
...
@@ -429,7 +479,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -429,7 +479,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
else
{
}
else
{
CC
.
sendCCResult
(
callId
,
CCResult
.
error
(
"print error"
));
CC
.
sendCCResult
(
callId
,
CCResult
.
error
(
"print error"
));
}
}
finish
();
killMyself
();
}
}
@Override
@Override
...
@@ -522,13 +572,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
...
@@ -522,13 +572,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
@Override
protected
void
onDestroy
()
{
protected
void
onDestroy
()
{
super
.
onDestroy
();
super
.
onDestroy
();
loadingPopup
.
dismiss
();
//關閉打印頁面時,關閉所有打印連接
//關閉打印頁面時,關閉所有打印連接
//關閉ip打印連接
//關閉ip打印連接
PrintSocketHolder
.
getInstance
().
closeSocket
();
PrintSocketHolder
.
getInstance
().
closeSocket
();
//關閉針式打印連接
//關閉針式打印連接
EpsonPrint
.
getInstance
().
disconnectPrinter
();
EpsonPrint
.
getInstance
().
disconnectPrinter
();
EpsonPrint
.
getInstance
().
finalizeObject
();
EpsonPrint
.
getInstance
().
finalizeObject
();
printerLoadingDialog
.
dismiss
();
}
}
@Override
@Override
...
...
component-print/src/main/java/com/joe/print/mvp/ui/view/PrinterLoadingDialog.java
0 → 100644
View file @
36db1aef
package
com
.
joe
.
print
.
mvp
.
ui
.
view
;
import
android.animation.ValueAnimator
;
import
android.content.Context
;
import
android.graphics.drawable.Drawable
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Looper
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
com.airbnb.lottie.LottieAnimationView
;
import
com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.HywebActionStatusCode
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog
;
import
com.joe.print.R
;
import
com.qmuiteam.qmui.layout.QMUILinearLayout
;
import
com.qmuiteam.qmui.util.QMUIDisplayHelper
;
import
butterknife.BindDrawable
;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-03-28
* 修订历史:2020-03-28
* 描述:
*/
public
class
PrinterLoadingDialog
extends
BaseRetryDialog
{
private
static
final
String
TAG
=
"PrinterLoadingDialog"
;
private
Context
mContext
;
private
TextView
tv_generate_print_data
,
tv_connecting
,
tv_printing
,
tv_print_result
;
// @BindDrawable(R.drawable.print_grey_point)
// Drawable mGreyDrawable;
// @BindDrawable(R.drawable.print_green_point)
// Drawable mGreedDrawable;
// @BindDrawable(R.drawable.print_red_point)
// Drawable mReaDrawable;
public
static
final
byte
status_default
=
0
;
public
static
final
byte
status_success
=
1
;
public
static
final
byte
status_error
=
2
;
private
int
mRadius
;
private
float
mShadowAlpha
=
0.25f
;
private
int
mShadowElevationDp
=
14
;
public
PrinterLoadingDialog
(
@NonNull
Context
context
)
{
super
(
context
,
R
.
style
.
MyDialogTheme2
);
mContext
=
context
;
mRadius
=
QMUIDisplayHelper
.
dp2px
(
mContext
,
8
);
}
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setCanceledOnTouchOutside
(
true
);
}
@Override
public
void
show
()
{
super
.
show
();
}
@Override
public
void
dismiss
()
{
super
.
dismiss
();
}
public
PrinterLoadingDialog
build
()
{
View
contentView
=
buildViews
();
int
screenWidth
=
(
int
)
(
QMUIDisplayHelper
.
getScreenWidth
(
mContext
)
*
0.9
);
int
screenHeight
=
(
int
)
(
QMUIDisplayHelper
.
getScreenHeight
(
mContext
)
*
0.5
);
setContentView
(
contentView
,
new
LinearLayout
.
LayoutParams
(
screenWidth
,
screenHeight
));
return
this
;
}
private
View
buildViews
()
{
View
view
=
View
.
inflate
(
mContext
,
getContentViewLayoutId
(),
null
);
QMUILinearLayout
ll_container
=
view
.
findViewById
(
R
.
id
.
ll_container
);
LottieAnimationView
printLottieView
=
view
.
findViewById
(
R
.
id
.
lottieAnimationView
);
tv_generate_print_data
=
view
.
findViewById
(
R
.
id
.
tv_generate_print_data
);
tv_connecting
=
view
.
findViewById
(
R
.
id
.
tv_connecting
);
tv_printing
=
view
.
findViewById
(
R
.
id
.
tv_printing
);
tv_print_result
=
view
.
findViewById
(
R
.
id
.
tv_print_result
);
ll_container
.
setRadiusAndShadow
(
mRadius
,
QMUIDisplayHelper
.
dp2px
(
mContext
,
mShadowElevationDp
),
mShadowAlpha
);
printLottieView
.
setAnimation
(
R
.
raw
.
printer_loading3
);
printLottieView
.
loop
(
true
);
// printLottieView.addAnimatorUpdateListener((animation) -> {
// // Do something.动画状态监听回调
//
// });
printLottieView
.
playAnimation
();
//播放动画
// //progress范围0~1f,设置动画进度
// printLottieView.setProgress(0.5f);
// // 自定义动画时长,此处利用ValueAnimator值动画来实时更新AnimationView的进度来达到控制动画时长。
// ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f).setDuration(500);
// animator.start();//启动动画
return
view
;
}
public
void
setStep
(
int
step
,
int
status
)
{
tv_generate_print_data
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
switch
(
step
)
{
case
1
:
if
(
status
==
PrinterLoadingDialog
.
status_success
)
{
tv_generate_print_data
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_green_point
),
null
,
null
);
}
else
if
(
status
==
PrinterLoadingDialog
.
status_error
)
{
tv_generate_print_data
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_red_point
),
null
,
null
);
}
else
{
tv_generate_print_data
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_grey_point
),
null
,
null
);
}
break
;
case
2
:
if
(
status
==
PrinterLoadingDialog
.
status_success
)
{
tv_connecting
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_green_point
),
null
,
null
);
}
else
if
(
status
==
PrinterLoadingDialog
.
status_error
)
{
tv_connecting
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_red_point
),
null
,
null
);
}
else
{
tv_connecting
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_grey_point
),
null
,
null
);
}
break
;
case
3
:
if
(
status
==
PrinterLoadingDialog
.
status_success
)
{
tv_printing
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_green_point
),
null
,
null
);
}
else
if
(
status
==
PrinterLoadingDialog
.
status_error
)
{
tv_printing
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_red_point
),
null
,
null
);
}
else
{
tv_printing
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_grey_point
),
null
,
null
);
}
break
;
case
4
:
if
(
status
==
PrinterLoadingDialog
.
status_success
)
{
tv_print_result
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_green_point
),
null
,
null
);
}
else
if
(
status
==
PrinterLoadingDialog
.
status_error
)
{
tv_print_result
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_red_point
),
null
,
null
);
}
else
{
tv_print_result
.
setCompoundDrawables
(
null
,
getDrawableByResId
(
R
.
drawable
.
print_grey_point
),
null
,
null
);
}
break
;
default
:
break
;
}
}
});
}
private
Drawable
getDrawableByResId
(
int
resId
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
return
mContext
.
getDrawable
(
resId
);
}
return
mContext
.
getResources
().
getDrawable
(
resId
);
}
protected
int
getContentViewLayoutId
()
{
return
R
.
layout
.
print_dialog_loading
;
}
private
OnClickListener
onClickListener
;
public
void
setOnClickListener
(
OnClickListener
onClickListener
)
{
this
.
onClickListener
=
onClickListener
;
}
public
interface
OnClickListener
{
// void onItemClick(FoodReason item, int position, int deleteNumber);
}
}
component-print/src/main/res/drawable/print_green_point.xml
0 → 100644
View file @
36db1aef
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/green"
/>
<size
android:width=
"@dimen/dp_10"
android:height=
"@dimen/dp_10"
/>
</shape>
\ No newline at end of file
component-print/src/main/res/drawable/print_grey_point.xml
0 → 100644
View file @
36db1aef
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/theme_grey_color"
/>
<size
android:width=
"@dimen/dp_10"
android:height=
"@dimen/dp_10"
/>
</shape>
\ No newline at end of file
component-print/src/main/res/drawable/print_red_point.xml
0 → 100644
View file @
36db1aef
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/red"
/>
<size
android:width=
"@dimen/dp_10"
android:height=
"@dimen/dp_10"
/>
</shape>
\ No newline at end of file
component-print/src/main/res/layout/print_dialog_loading.xml
0 → 100644
View file @
36db1aef
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.layout.QMUILinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/ll_container"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:background=
"@color/theme_white_color"
android:orientation=
"vertical"
>
<com.airbnb.lottie.LottieAnimationView
android:id=
"@+id/lottieAnimationView"
android:layout_width=
"@dimen/dp_150"
android:layout_height=
"@dimen/dp_150"
android:layout_gravity=
"center_horizontal"
app:lottie_autoPlay=
"true"
app:lottie_loop=
"true"
/>
<!-- 打印前數據信息,圖片->連接成功(失敗)->打印中->打印成功(失敗)->斷開連接-->
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/tv_generate_print_data"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawableTop=
"@drawable/print_grey_point"
android:text=
"生成打印數據"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_10"
/>
<View
android:layout_width=
"@dimen/dp_50"
android:layout_height=
"1px"
android:background=
"@color/black"
/>
<TextView
android:id=
"@+id/tv_connecting"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawableTop=
"@drawable/print_grey_point"
android:text=
"連接中"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_10"
/>
<View
android:layout_width=
"@dimen/dp_50"
android:layout_height=
"1px"
android:background=
"@color/black"
/>
<TextView
android:id=
"@+id/tv_printing"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawableTop=
"@drawable/print_grey_point"
android:text=
"打印中"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_10"
/>
<View
android:layout_width=
"@dimen/dp_50"
android:layout_height=
"1px"
android:background=
"@color/black"
/>
<TextView
android:id=
"@+id/tv_print_result"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawableTop=
"@drawable/print_grey_point"
android:text=
"結果"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_10"
/>
</LinearLayout>
</com.qmuiteam.qmui.layout.QMUILinearLayout>
\ No newline at end of file
component-print/src/main/res/raw/printer_loading.json
0 → 100644
View file @
36db1aef
This source diff could not be displayed because it is too large. You can
view the blob
instead.
component-print/src/main/res/raw/printer_loading2.json
0 → 100644
View file @
36db1aef
{
"v"
:
"5.5.7"
,
"meta"
:
{
"g"
:
"LottieFiles AE 0.1.20"
,
"a"
:
""
,
"k"
:
""
,
"d"
:
""
,
"tc"
:
"#FFFFFF"
},
"fr"
:
60
,
"ip"
:
0
,
"op"
:
70
,
"w"
:
1920
,
"h"
:
1080
,
"nm"
:
"Printer1"
,
"ddd"
:
0
,
"assets"
:
[
{
"id"
:
"image_0"
,
"w"
:
971
,
"h"
:
803
,
"u"
:
""
,
"p"
:
"data:image/png;base64,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"
,
"e"
:
1
},
{
"id"
:
"image_1"
,
"w"
:
511
,
"h"
:
330
,
"u"
:
""
,
"p"
:
"data:image/png;base64,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"
,
"e"
:
1
},
{
"id"
:
"image_2"
,
"w"
:
511
,
"h"
:
260
,
"u"
:
""
,
"p"
:
"data:image/png;base64,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"
,
"e"
:
1
},
{
"id"
:
"comp_0"
,
"layers"
:
[
{
"ddd"
:
0
,
"ind"
:
1
,
"ty"
:
4
,
"nm"
:
"Layer 2 Outlines"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
0
,
"k"
:
[
982.613
,
813.599
,
0
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
27.446
,
27.451
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"shapes"
:
[
{
"ty"
:
"gr"
,
"it"
:
[
{
"ind"
:
0
,
"ty"
:
"sh"
,
"ix"
:
1
,
"ks"
:
{
"a"
:
0
,
"k"
:
{
"i"
:
[
[
0
,
-15.021
],
[
-15.021
,
0
],
[
0
,
15.024
],
[
15.019
,
0
]
],
"o"
:
[
[
0
,
15.024
],
[
15.019
,
0
],
[
0
,
-15.021
],
[
-15.021
,
0
]
],
"v"
:
[
[
-27.196
,
-0.014
],
[
-0.016
,
27.201
],
[
27.196
,
-0.014
],
[
-0.016
,
-27.201
]
],
"c"
:
true
},
"ix"
:
2
},
"nm"
:
"Path 1"
,
"mn"
:
"ADBE Vector Shape - Group"
,
"hd"
:
false
},
{
"ty"
:
"fl"
,
"c"
:
{
"a"
:
1
,
"k"
:
[
{
"i"
:
{
"x"
:
[
0.667
],
"y"
:
[
1
]
},
"o"
:
{
"x"
:
[
0.333
],
"y"
:
[
0
]
},
"t"
:
0
,
"s"
:
[
0.239215686275
,
0.901960784314
,
0.713725490196
,
1
]
},
{
"i"
:
{
"x"
:
[
0.667
],
"y"
:
[
1
]
},
"o"
:
{
"x"
:
[
0.333
],
"y"
:
[
0
]
},
"t"
:
30
,
"s"
:
[
1
,
1
,
1
,
1
]
},
{
"t"
:
60
,
"s"
:
[
0.239215686917
,
0.901960790157
,
0.713725507259
,
1
]
}
],
"ix"
:
4
},
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"Fill 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},
{
"ty"
:
"tr"
,
"p"
:
{
"a"
:
0
,
"k"
:
[
27.446
,
27.451
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
0
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
],
"ix"
:
3
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
},
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
7
},
"sk"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
},
"sa"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
},
"nm"
:
"Transform"
}
],
"nm"
:
"Group 1"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}
],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
},
{
"ddd"
:
0
,
"ind"
:
2
,
"ty"
:
4
,
"nm"
:
"Layer 3 Outlines"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
0
,
"k"
:
[
982.613
,
737.809
,
0
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
27.446
,
27.455
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"shapes"
:
[
{
"ty"
:
"gr"
,
"it"
:
[
{
"ind"
:
0
,
"ty"
:
"sh"
,
"ix"
:
1
,
"ks"
:
{
"a"
:
0
,
"k"
:
{
"i"
:
[
[
0
,
-15.037
],
[
-15.021
,
0
],
[
0
,
15.008
],
[
15.019
,
0
]
],
"o"
:
[
[
0
,
15.008
],
[
15.019
,
0
],
[
0
,
-15.037
],
[
-15.021
,
0
]
],
"v"
:
[
[
-27.196
,
0.013
],
[
-0.016
,
27.205
],
[
27.196
,
0.013
],
[
-0.016
,
-27.205
]
],
"c"
:
true
},
"ix"
:
2
},
"nm"
:
"Path 1"
,
"mn"
:
"ADBE Vector Shape - Group"
,
"hd"
:
false
},
{
"ty"
:
"fl"
,
"c"
:
{
"a"
:
1
,
"k"
:
[
{
"i"
:
{
"x"
:
[
0.667
],
"y"
:
[
1
]
},
"o"
:
{
"x"
:
[
0.333
],
"y"
:
[
0
]
},
"t"
:
0
,
"s"
:
[
1
,
1
,
1
,
1
]
},
{
"i"
:
{
"x"
:
[
0.667
],
"y"
:
[
1
]
},
"o"
:
{
"x"
:
[
0.333
],
"y"
:
[
0
]
},
"t"
:
30
,
"s"
:
[
0.241020619869
,
0.901176571846
,
0.712560653687
,
1
]
},
{
"t"
:
60
,
"s"
:
[
1
,
1
,
1
,
1
]
}
],
"ix"
:
4
},
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"Fill 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},
{
"ty"
:
"tr"
,
"p"
:
{
"a"
:
0
,
"k"
:
[
27.446
,
27.455
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
0
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
],
"ix"
:
3
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
},
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
7
},
"sk"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
},
"sa"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
},
"nm"
:
"Transform"
}
],
"nm"
:
"Group 1"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}
],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
},
{
"ddd"
:
0
,
"ind"
:
3
,
"ty"
:
2
,
"nm"
:
"MainPRinter"
,
"refId"
:
"image_0"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
0
,
"k"
:
[
561
,
529.497
,
0
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
485.229
,
401.141
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
},
{
"ddd"
:
0
,
"ind"
:
4
,
"ty"
:
2
,
"nm"
:
"Layer 5"
,
"refId"
:
"image_1"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
1
,
"k"
:
[
{
"i"
:
{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:
{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
25
,
"s"
:
[
560.992
,
555.489
,
0
],
"to"
:
[
0
,
51
,
0
],
"ti"
:
[
0
,
-51
,
0
]
},
{
"t"
:
55
,
"s"
:
[
560.992
,
861.489
,
0
]
}
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
255.107
,
164.761
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"ef"
:
[
{
"ty"
:
21
,
"nm"
:
"Fill"
,
"np"
:
9
,
"mn"
:
"ADBE Fill"
,
"ix"
:
1
,
"en"
:
1
,
"ef"
:
[
{
"ty"
:
10
,
"nm"
:
"Fill Mask"
,
"mn"
:
"ADBE Fill-0001"
,
"ix"
:
1
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
1
}
},
{
"ty"
:
7
,
"nm"
:
"All Masks"
,
"mn"
:
"ADBE Fill-0007"
,
"ix"
:
2
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
2
}
},
{
"ty"
:
2
,
"nm"
:
"Color"
,
"mn"
:
"ADBE Fill-0002"
,
"ix"
:
3
,
"v"
:
{
"a"
:
0
,
"k"
:
[
0.239215686917
,
0.901960790157
,
0.713725507259
,
1
],
"ix"
:
3
}
},
{
"ty"
:
7
,
"nm"
:
"Invert"
,
"mn"
:
"ADBE Fill-0006"
,
"ix"
:
4
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
}
},
{
"ty"
:
0
,
"nm"
:
"Horizontal Feather"
,
"mn"
:
"ADBE Fill-0003"
,
"ix"
:
5
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
}
},
{
"ty"
:
0
,
"nm"
:
"Vertical Feather"
,
"mn"
:
"ADBE Fill-0004"
,
"ix"
:
6
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
}
},
{
"ty"
:
0
,
"nm"
:
"Opacity"
,
"mn"
:
"ADBE Fill-0005"
,
"ix"
:
7
,
"v"
:
{
"a"
:
0
,
"k"
:
1
,
"ix"
:
7
}
}
]
}
],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
},
{
"ddd"
:
0
,
"ind"
:
5
,
"ty"
:
2
,
"nm"
:
"Layer 6"
,
"refId"
:
"image_2"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
1
,
"k"
:
[
{
"i"
:
{
"x"
:
0.667
,
"y"
:
1
},
"o"
:
{
"x"
:
0.333
,
"y"
:
0
},
"t"
:
0
,
"s"
:
[
560.991
,
-72.462
,
0
],
"to"
:
[
0
,
45.667
,
0
],
"ti"
:
[
0
,
-45.667
,
0
]
},
{
"t"
:
31
,
"s"
:
[
560.991
,
201.538
,
0
]
}
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
255.107
,
129.788
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"ef"
:
[
{
"ty"
:
21
,
"nm"
:
"Fill"
,
"np"
:
9
,
"mn"
:
"ADBE Fill"
,
"ix"
:
1
,
"en"
:
1
,
"ef"
:
[
{
"ty"
:
10
,
"nm"
:
"Fill Mask"
,
"mn"
:
"ADBE Fill-0001"
,
"ix"
:
1
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
1
}
},
{
"ty"
:
7
,
"nm"
:
"All Masks"
,
"mn"
:
"ADBE Fill-0007"
,
"ix"
:
2
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
2
}
},
{
"ty"
:
2
,
"nm"
:
"Color"
,
"mn"
:
"ADBE Fill-0002"
,
"ix"
:
3
,
"v"
:
{
"a"
:
0
,
"k"
:
[
0.239215686917
,
0.901960790157
,
0.713725507259
,
1
],
"ix"
:
3
}
},
{
"ty"
:
7
,
"nm"
:
"Invert"
,
"mn"
:
"ADBE Fill-0006"
,
"ix"
:
4
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
}
},
{
"ty"
:
0
,
"nm"
:
"Horizontal Feather"
,
"mn"
:
"ADBE Fill-0003"
,
"ix"
:
5
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
}
},
{
"ty"
:
0
,
"nm"
:
"Vertical Feather"
,
"mn"
:
"ADBE Fill-0004"
,
"ix"
:
6
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
}
},
{
"ty"
:
0
,
"nm"
:
"Opacity"
,
"mn"
:
"ADBE Fill-0005"
,
"ix"
:
7
,
"v"
:
{
"a"
:
0
,
"k"
:
1
,
"ix"
:
7
}
}
]
}
],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
},
{
"ddd"
:
0
,
"ind"
:
6
,
"ty"
:
2
,
"nm"
:
"Layer 4"
,
"refId"
:
"image_2"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
1
,
"k"
:
[
{
"i"
:
{
"x"
:
0.667
,
"y"
:
1
},
"o"
:
{
"x"
:
0.333
,
"y"
:
0
},
"t"
:
0
,
"s"
:
[
560.991
,
201.538
,
0
],
"to"
:
[
0
,
48.833
,
0
],
"ti"
:
[
0
,
-48.833
,
0
]
},
{
"t"
:
31
,
"s"
:
[
560.991
,
494.538
,
0
]
}
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
255.107
,
129.788
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"ef"
:
[
{
"ty"
:
21
,
"nm"
:
"Fill"
,
"np"
:
9
,
"mn"
:
"ADBE Fill"
,
"ix"
:
1
,
"en"
:
1
,
"ef"
:
[
{
"ty"
:
10
,
"nm"
:
"Fill Mask"
,
"mn"
:
"ADBE Fill-0001"
,
"ix"
:
1
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
1
}
},
{
"ty"
:
7
,
"nm"
:
"All Masks"
,
"mn"
:
"ADBE Fill-0007"
,
"ix"
:
2
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
2
}
},
{
"ty"
:
2
,
"nm"
:
"Color"
,
"mn"
:
"ADBE Fill-0002"
,
"ix"
:
3
,
"v"
:
{
"a"
:
0
,
"k"
:
[
0.239215686917
,
0.901960790157
,
0.713725507259
,
1
],
"ix"
:
3
}
},
{
"ty"
:
7
,
"nm"
:
"Invert"
,
"mn"
:
"ADBE Fill-0006"
,
"ix"
:
4
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
}
},
{
"ty"
:
0
,
"nm"
:
"Horizontal Feather"
,
"mn"
:
"ADBE Fill-0003"
,
"ix"
:
5
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
}
},
{
"ty"
:
0
,
"nm"
:
"Vertical Feather"
,
"mn"
:
"ADBE Fill-0004"
,
"ix"
:
6
,
"v"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
}
},
{
"ty"
:
0
,
"nm"
:
"Opacity"
,
"mn"
:
"ADBE Fill-0005"
,
"ix"
:
7
,
"v"
:
{
"a"
:
0
,
"k"
:
1
,
"ix"
:
7
}
}
]
}
],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
}
]
}
],
"layers"
:
[
{
"ddd"
:
0
,
"ind"
:
1
,
"ty"
:
0
,
"nm"
:
"5572 [Converted]"
,
"refId"
:
"comp_0"
,
"sr"
:
1
,
"ks"
:
{
"o"
:
{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:
{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:
{
"a"
:
0
,
"k"
:
[
960
,
540
,
0
],
"ix"
:
2
},
"a"
:
{
"a"
:
0
,
"k"
:
[
561
,
561
,
0
],
"ix"
:
1
},
"s"
:
{
"a"
:
0
,
"k"
:
[
100
,
100
,
100
],
"ix"
:
6
}
},
"ao"
:
0
,
"w"
:
1122
,
"h"
:
1122
,
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
}
],
"markers"
:
[]
}
\ No newline at end of file
component-print/src/main/res/raw/printer_loading3.json
0 → 100644
View file @
36db1aef
{
"v"
:
"5.5.10"
,
"fr"
:
30
,
"ip"
:
0
,
"op"
:
90
,
"w"
:
300
,
"h"
:
300
,
"nm"
:
"sec2-02"
,
"ddd"
:
0
,
"assets"
:[],
"layers"
:[{
"ddd"
:
0
,
"ind"
:
1
,
"ty"
:
4
,
"nm"
:
"Shape Layer 1"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
0
,
"k"
:[
150
,
150
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"ind"
:
0
,
"ty"
:
"sh"
,
"ix"
:
1
,
"ks"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
20
,
"s"
:[{
"i"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
-60.812
,
22.5
],[
-60.75
,
52.75
],[
63.75
,
53.25
],[
63.625
,
21.5
]],
"c"
:
false
}]},{
"i"
:{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
25
,
"s"
:[{
"i"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
-60.812
,
22.5
],[
-60.725
,
60.15
],[
63.775
,
60.55
],[
63.625
,
21.5
]],
"c"
:
false
}]},{
"i"
:{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
35
,
"s"
:[{
"i"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
-60.812
,
22.5
],[
-60.725
,
60.15
],[
63.775
,
60.55
],[
63.625
,
21.5
]],
"c"
:
false
}]},{
"i"
:{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
51
,
"s"
:[{
"i"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
-60.812
,
22.5
],[
-60.725
,
60.15
],[
63.775
,
60.55
],[
63.625
,
21.5
]],
"c"
:
false
}]},{
"i"
:{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
55
,
"s"
:[{
"i"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
-60.812
,
22.5
],[
-60.667
,
77.417
],[
63.833
,
77.583
],[
63.625
,
21.5
]],
"c"
:
false
}]},{
"t"
:
60
,
"s"
:[{
"i"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
-60.812
,
22.5
],[
-60.625
,
89.75
],[
63.875
,
89.75
],[
63.625
,
21.5
]],
"c"
:
false
}]}],
"ix"
:
2
},
"nm"
:
"Path 1"
,
"mn"
:
"ADBE Vector Shape - Group"
,
"hd"
:
false
},{
"ty"
:
"st"
,
"c"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
,
1
],
"ix"
:
3
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
4
},
"w"
:{
"a"
:
0
,
"k"
:
12
,
"ix"
:
5
},
"lc"
:
1
,
"lj"
:
1
,
"ml"
:
4
,
"bm"
:
0
,
"nm"
:
"Stroke 1"
,
"mn"
:
"ADBE Vector Graphic - Stroke"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
],
"ix"
:
3
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
7
},
"sk"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
},
"sa"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
},
"nm"
:
"Transform"
}],
"nm"
:
"Shape 1"
,
"np"
:
3
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
},{
"ty"
:
"tm"
,
"s"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
1
},
"e"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.5
],
"y"
:[
1
]},
"o"
:{
"x"
:[
0.167
],
"y"
:[
0.167
]},
"t"
:
0
,
"s"
:[
0
]},{
"t"
:
15
,
"s"
:[
100
]}],
"ix"
:
2
},
"o"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
3
},
"m"
:
1
,
"ix"
:
2
,
"nm"
:
"Trim In Path"
,
"mn"
:
"ADBE Vector Filter - Trim"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
2
,
"ty"
:
4
,
"nm"
:
"Layer 7 Outlines"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
0
,
"k"
:[
150
,
122.333
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
125
,
110.667
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"ind"
:
0
,
"ty"
:
"sh"
,
"ix"
:
1
,
"ks"
:{
"a"
:
0
,
"k"
:{
"i"
:[[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
0
]],
"v"
:[[
192
,
94.333
],[
162
,
94.333
]],
"c"
:
false
},
"ix"
:
2
},
"nm"
:
"Path 1"
,
"mn"
:
"ADBE Vector Shape - Group"
,
"hd"
:
false
},{
"ty"
:
"st"
,
"c"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
,
1
],
"ix"
:
3
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
4
},
"w"
:{
"a"
:
0
,
"k"
:
12
,
"ix"
:
5
},
"lc"
:
2
,
"lj"
:
1
,
"ml"
:
10
,
"bm"
:
0
,
"nm"
:
"Stroke 1"
,
"mn"
:
"ADBE Vector Graphic - Stroke"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
],
"ix"
:
3
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
7
},
"sk"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
},
"sa"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
},
"nm"
:
"Transform"
}],
"nm"
:
"Group 1"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
},{
"ty"
:
"gr"
,
"it"
:[{
"ind"
:
0
,
"ty"
:
"sh"
,
"ix"
:
1
,
"ks"
:{
"a"
:
0
,
"k"
:{
"i"
:[[
0
,
0
],[
0
,
0
],[
8.187
,
0
],[
0
,
0
],[
0
,
-8.187
],[
0
,
0
],[
-8.187
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
8.188
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
0
,
-8.187
],[
0
,
0
],[
-8.187
,
0
],[
0
,
0
],[
0
,
8.188
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
8.187
,
0
],[
0
,
0
],[
0
,
0
]],
"v"
:[[
95
,
-17.5
],[
95
,
-45.86
],[
80.11
,
-60.5
],[
-80.11
,
-60.5
],[
-95
,
-45.86
],[
-95
,
45.368
],[
-80.11
,
60.5
],[
-61
,
60.5
],[
-61
,
29.5
],[
64
,
29.5
],[
64
,
60.5
],[
80.11
,
60.5
],[
95
,
45.368
],[
95
,
6.5
]],
"c"
:
false
},
"ix"
:
2
},
"nm"
:
"Path 1"
,
"mn"
:
"ADBE Vector Shape - Group"
,
"hd"
:
false
},{
"ty"
:
"st"
,
"c"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
,
1
],
"ix"
:
3
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
4
},
"w"
:{
"a"
:
0
,
"k"
:
12
,
"ix"
:
5
},
"lc"
:
2
,
"lj"
:
1
,
"ml"
:
10
,
"bm"
:
0
,
"nm"
:
"Stroke 1"
,
"mn"
:
"ADBE Vector Graphic - Stroke"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
125
,
130.833
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
],
"ix"
:
3
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
7
},
"sk"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
},
"sa"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
},
"nm"
:
"Transform"
}],
"nm"
:
"Group 2"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
2
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
},{
"ty"
:
"gr"
,
"it"
:[{
"ind"
:
0
,
"ty"
:
"sh"
,
"ix"
:
1
,
"ks"
:{
"a"
:
0
,
"k"
:{
"i"
:[[
14.8
,
0
],[
0
,
0
],[
0
,
-14.8
],[
0
,
0
],[
0
,
0
],[
0
,
0
]],
"o"
:[[
0
,
0
],[
-14.801
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
0
],[
0
,
-14.8
]],
"v"
:[[
39.974
,
-20.241
],[
-39.972
,
-20.241
],[
-66.771
,
6.557
],[
-66.771
,
20.241
],[
66.772
,
20.241
],[
66.772
,
6.557
]],
"c"
:
true
},
"ix"
:
2
},
"nm"
:
"Path 1"
,
"mn"
:
"ADBE Vector Shape - Group"
,
"hd"
:
false
},{
"ty"
:
"st"
,
"c"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
,
1
],
"ix"
:
3
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
4
},
"w"
:{
"a"
:
0
,
"k"
:
12
,
"ix"
:
5
},
"lc"
:
2
,
"lj"
:
1
,
"ml"
:
10
,
"bm"
:
0
,
"nm"
:
"Stroke 1"
,
"mn"
:
"ADBE Vector Graphic - Stroke"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
125
,
50.241
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
],
"ix"
:
3
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
6
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
7
},
"sk"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
4
},
"sa"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
5
},
"nm"
:
"Transform"
}],
"nm"
:
"Group 3"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
3
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
},{
"ty"
:
"tm"
,
"s"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
1
},
"e"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.5
],
"y"
:[
1
]},
"o"
:{
"x"
:[
0.167
],
"y"
:[
0.167
]},
"t"
:
0
,
"s"
:[
0
]},{
"t"
:
15
,
"s"
:[
100
]}],
"ix"
:
2
},
"o"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
3
},
"m"
:
1
,
"ix"
:
4
,
"nm"
:
"Trim In Path"
,
"mn"
:
"ADBE Vector Filter - Trim"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
90
,
"st"
:
0
,
"bm"
:
0
}],
"markers"
:[]}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
View file @
36db1aef
...
@@ -288,6 +288,8 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
...
@@ -288,6 +288,8 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
return
;
return
;
}
}
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_SELECTED
,
"食品【"
+
datasBean
.
getProductName
()
+
"】"
);
RvMealClicked
=
true
;
RvMealClicked
=
true
;
//设置当前操作的食品
//设置当前操作的食品
mCurrentOrderDetailBean
=
datasBean
;
mCurrentOrderDetailBean
=
datasBean
;
...
@@ -895,17 +897,16 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
...
@@ -895,17 +897,16 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
* @param initTable 是否是開台
* @param initTable 是否是開台
*/
*/
private
void
printSendOrder
(
boolean
initTable
)
{
private
void
printSendOrder
(
boolean
initTable
)
{
if
(
RestaurantExpandInfoUtils
.
getValue
(
ExpandConstant
.
AutoPrinterPaper
,
true
))
{
if
(
RestaurantExpandInfoUtils
.
getValue
(
ExpandConstant
.
MergeSendFood
,
true
))
{
//合并主食品
mergeMainFoodNumber
(
mOrderMealList
);
}
//餐檯送單
if
(
DoshokuOrder
.
getInstance
().
getNewFoodList
()
==
null
||
DoshokuOrder
.
getInstance
().
getNewFoodList
().
size
()
<=
0
)
{
if
(
DoshokuOrder
.
getInstance
().
getNewFoodList
()
==
null
||
DoshokuOrder
.
getInstance
().
getNewFoodList
().
size
()
<=
0
)
{
//沒有新的食品時,不打印送單
//沒有新的食品時,不打印送單
IActivity
.
returnBeforeActivity
(
initTable
);
IActivity
.
returnBeforeActivity
(
initTable
);
return
;
return
;
}
}
if
(
RestaurantExpandInfoUtils
.
getValue
(
ExpandConstant
.
AutoPrinterPaper
,
true
))
{
if
(
RestaurantExpandInfoUtils
.
getValue
(
ExpandConstant
.
MergeSendFood
,
true
))
{
//合并主食品
mergeMainFoodNumber
(
mOrderMealList
);
}
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationSendOrderPaperContent
(
DoshokuOrder
.
getInstance
(),
mTableInfo
);
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationSendOrderPaperContent
(
DoshokuOrder
.
getInstance
(),
mTableInfo
);
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_PRINT
)
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_PRINT
)
...
@@ -1131,15 +1132,15 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
...
@@ -1131,15 +1132,15 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
if
(!
deleteFood
.
isNew
())
{
if
(!
deleteFood
.
isNew
())
{
//TODO 刪除已下單食品
//TODO 刪除已下單食品
if
(!
deleteFood
.
isModify
())
{
if
(!
deleteFood
.
isModify
())
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
+
"
刪除已下單食品【"
+
deleteFood
.
getRemark
()
+
"】"
);
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
+
"
已下單食品【"
+
deleteFood
.
getProductName
()
+
"】"
);
deleteWithOrderedFood
(
deleteFood
);
deleteWithOrderedFood
(
deleteFood
);
}
}
}
else
{
}
else
{
if
(
deleteStyle
==
2
)
{
if
(
deleteStyle
==
2
)
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_
LONG_CLICK
+
"刪除【"
+
deleteFood
.
getRemark
()
+
"】"
);
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_
DELETE
+
"食品【"
+
deleteFood
.
getProductName
()
+
"】"
);
mSelectMealAdapter
.
removeAllNewFoodItem
();
mSelectMealAdapter
.
removeAllNewFoodItem
();
}
else
{
}
else
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_
CLICK
+
"刪除【"
+
deleteFood
.
getRemark
()
+
"】"
);
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_
DELETE
+
"食品【"
+
deleteFood
.
getProductName
()
+
"】"
);
int
deletePosition
=
mSelectMealAdapter
.
removeFoodItem
();
int
deletePosition
=
mSelectMealAdapter
.
removeFoodItem
();
mRootView
.
setMealRvScrollToPosition
(
deletePosition
);
mRootView
.
setMealRvScrollToPosition
(
deletePosition
);
//更新最大可選數
//更新最大可選數
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/MealStandActivity.java
View file @
36db1aef
...
@@ -100,6 +100,7 @@ import butterknife.BindView;
...
@@ -100,6 +100,7 @@ import butterknife.BindView;
import
butterknife.OnClick
;
import
butterknife.OnClick
;
import
butterknife.OnLongClick
;
import
butterknife.OnLongClick
;
import
static
com
.
gingersoft
.
gsa
.
cloud
.
common
.
utils
.
log
.
LogUtil
.
v
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
...
@@ -722,12 +723,20 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
...
@@ -722,12 +723,20 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
}
}
@OnClick
({
R2
.
id
.
btn_key1
,
R2
.
id
.
btn_key2
,
R2
.
id
.
btn_key3
,
R2
.
id
.
btn_key4
,
R2
.
id
.
btn_key5
,
R2
.
id
.
btn_keys
,
@OnClick
({
R2
.
id
.
btn_key1
,
R2
.
id
.
btn_key2
,
R2
.
id
.
btn_key3
,
R2
.
id
.
btn_key4
,
R2
.
id
.
btn_key5
,
R2
.
id
.
btn_keys
,
R2
.
id
.
btn_numberman
,
R2
.
id
.
btn_fid
,
R2
.
id
.
btn_meal_delete
,
R2
.
id
.
btn_meal_modify_restore
,
R2
.
id
.
btn_send_order
,
R2
.
id
.
tv_no_save_return
,
R2
.
id
.
fl
_order_content
,
R2
.
id
.
btn_numberman
,
R2
.
id
.
btn_fid
,
R2
.
id
.
btn_meal_delete
,
R2
.
id
.
btn_meal_modify_restore
,
R2
.
id
.
btn_send_order
,
R2
.
id
.
tv_no_save_return
,
R2
.
id
.
tv
_order_content
,
R2
.
id
.
btn_taste
,
R2
.
id
.
btn_msg
,
R2
.
id
.
btn_delete
,
R2
.
id
.
btn_end
,
R2
.
id
.
iv_fine_back
})
R2
.
id
.
btn_taste
,
R2
.
id
.
btn_msg
,
R2
.
id
.
btn_delete
,
R2
.
id
.
btn_end
,
R2
.
id
.
iv_fine_back
})
public
void
onClick
(
View
v
)
{
public
void
onClick
(
View
v
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
,
v
.
getTransitionName
());
String
text
=
null
;
if
(
v
instanceof
Button
)
{
Button
button
=
(
Button
)
v
;
text
=
button
.
getText
().
toString
();
}
else
if
(
v
instanceof
TextView
)
{
TextView
textView
=
(
TextView
)
v
;
text
=
textView
.
getText
().
toString
();
}
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
,
text
);
}
}
recordOperat
(
true
);
recordOperat
(
true
);
...
@@ -776,7 +785,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
...
@@ -776,7 +785,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
mPresenter
.
sendOrder
(
false
,
null
);
mPresenter
.
sendOrder
(
false
,
null
);
// }
// }
// });
// });
}
else
if
(
id
==
R
.
id
.
fl
_order_content
)
{
}
else
if
(
id
==
R
.
id
.
tv
_order_content
)
{
//如果打印成功會回調
//如果打印成功會回調
Intent
intent
=
new
Intent
(
mContext
,
OrderContentActivity
.
class
);
Intent
intent
=
new
Intent
(
mContext
,
OrderContentActivity
.
class
);
startActivityForResult
(
intent
,
ORDER_CONTENT_CODE
);
startActivityForResult
(
intent
,
ORDER_CONTENT_CODE
);
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/SoldoutCtrlActivity.java
View file @
36db1aef
...
@@ -315,9 +315,9 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
...
@@ -315,9 +315,9 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
//循坏加入点点图片组
//循坏加入点点图片组
ivPoints
[
i
]
=
new
ImageView
(
this
);
ivPoints
[
i
]
=
new
ImageView
(
this
);
if
(
i
==
0
)
{
if
(
i
==
0
)
{
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_re
cycle_bottom_point_focuese
);
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_re
d_point
);
}
else
{
}
else
{
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_
recycle_bottom_point_unfocused
);
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_
grey_point
);
}
}
ivPoints
[
i
].
setPadding
(
0
,
0
,
0
,
0
);
ivPoints
[
i
].
setPadding
(
0
,
0
,
0
,
0
);
ll_food_group_point
.
addView
(
ivPoints
[
i
]);
ll_food_group_point
.
addView
(
ivPoints
[
i
]);
...
@@ -714,9 +714,9 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
...
@@ -714,9 +714,9 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
mPageIndex
=
pageIndex
;
mPageIndex
=
pageIndex
;
for
(
int
i
=
0
;
i
<
totalPage
;
i
++)
{
for
(
int
i
=
0
;
i
<
totalPage
;
i
++)
{
if
(
i
==
pageIndex
)
{
if
(
i
==
pageIndex
)
{
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_re
cycle_bottom_point_focuese
);
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_re
d_point
);
}
else
{
}
else
{
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_
recycle_bottom_point_unfocused
);
ivPoints
[
i
].
setImageResource
(
R
.
drawable
.
base_
grey_point
);
}
}
}
}
}
}
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/TableActivity.java
View file @
36db1aef
...
@@ -217,8 +217,8 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
...
@@ -217,8 +217,8 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
@Override
@Override
public
void
onClick
(
View
v
)
{
public
void
onClick
(
View
v
)
{
LoganManager
.
w_tableMode
(
TAG
,
"手動刷新餐檯數據"
);
LoganManager
.
w_tableMode
(
TAG
,
"手動刷新餐檯數據"
);
launchActivity
(
new
Intent
(
mContext
,
CoordinatorlayoutActivity
.
class
));
//
launchActivity(new Intent(mContext, CoordinatorlayoutActivity.class));
//
getTables(true, null);
getTables
(
true
,
null
);
}
}
});
});
rightButton2
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
rightButton2
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/BillItemAdapter.java
View file @
36db1aef
...
@@ -97,16 +97,14 @@ public class BillItemAdapter extends DefaultAdapter<BillItem> {
...
@@ -97,16 +97,14 @@ public class BillItemAdapter extends DefaultAdapter<BillItem> {
tv_money
.
setText
(
cashStr
+
datasBean
.
getMoney
());
tv_money
.
setText
(
cashStr
+
datasBean
.
getMoney
());
}
}
if
(
datasBean
instanceof
ServiceChargeItem
)
{
// 默认没有划线
if
(
isUseFreeServicePayMethod
)
{
tv_title
.
getPaint
().
setFlags
(
0
);
tv_money
.
getPaint
().
setFlags
(
0
);
if
(
datasBean
instanceof
ServiceChargeItem
&&
isUseFreeServicePayMethod
)
{
// 中划线
// 中划线
tv_title
.
getPaint
().
setFlags
(
Paint
.
STRIKE_THRU_TEXT_FLAG
|
Paint
.
ANTI_ALIAS_FLAG
);
tv_title
.
getPaint
().
setFlags
(
Paint
.
STRIKE_THRU_TEXT_FLAG
|
Paint
.
ANTI_ALIAS_FLAG
);
tv_money
.
getPaint
().
setFlags
(
Paint
.
STRIKE_THRU_TEXT_FLAG
|
Paint
.
ANTI_ALIAS_FLAG
);
tv_money
.
getPaint
().
setFlags
(
Paint
.
STRIKE_THRU_TEXT_FLAG
|
Paint
.
ANTI_ALIAS_FLAG
);
}
else
{
// 取消设置的的划线
tv_title
.
getPaint
().
setFlags
(
0
);
tv_money
.
getPaint
().
setFlags
(
0
);
}
}
}
tv_title
.
setTextSize
(
BillTotalFontSize
);
tv_title
.
setTextSize
(
BillTotalFontSize
);
...
@@ -115,10 +113,13 @@ public class BillItemAdapter extends DefaultAdapter<BillItem> {
...
@@ -115,10 +113,13 @@ public class BillItemAdapter extends DefaultAdapter<BillItem> {
tv_title
.
setTextColor
(
datasBean
.
getTextColor
());
tv_title
.
setTextColor
(
datasBean
.
getTextColor
());
tv_money
.
setTextColor
(
datasBean
.
getTextColor
());
tv_money
.
setTextColor
(
datasBean
.
getTextColor
());
// if (mContext instanceof OrderContentActivity &&
// (datasBean.getType() == BillOrderMoney.NOMAL_DISCOUNT_TYPE || datasBean.getType() == BillOrderMoney.COUPON_DISCOUNT_TYPE) &&
// datasBean.getType() != BillOrderMoney.MEMBER_DISCOUNT_TYPE &&
// datasBean.getStatus() == 0) {
if
(
mContext
instanceof
OrderContentActivity
&&
if
(
mContext
instanceof
OrderContentActivity
&&
(
datasBean
.
getType
()
==
BillOrderMoney
.
NOMAL_DISCOUNT_TYPE
||
datasBean
.
getType
()
==
BillOrderMoney
.
COUPON_DISCOUNT_TYPE
)
&&
(
datasBean
.
getType
()
==
BillOrderMoney
.
NOMAL_DISCOUNT_TYPE
||
datasBean
.
getType
()
==
BillOrderMoney
.
COUPON_DISCOUNT_TYPE
)
&&
datasBean
.
getType
()
!=
BillOrderMoney
.
MEMBER_DISCOUNT_TYPE
&&
datasBean
.
getType
()
!=
BillOrderMoney
.
MEMBER_DISCOUNT_TYPE
)
{
datasBean
.
getStatus
()
==
0
)
{
iv_delete
.
setVisibility
(
View
.
VISIBLE
);
iv_delete
.
setVisibility
(
View
.
VISIBLE
);
iv_delete
.
setOnClickListener
(
v
->
{
iv_delete
.
setOnClickListener
(
v
->
{
if
(
mOnItemClickListener
!=
null
)
{
if
(
mOnItemClickListener
!=
null
)
{
...
...
component-table/src/main/res/layout/activitiy_coordinator.xml
View file @
36db1aef
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!--<androidx.coordinatorlayout.widget.CoordinatorLayout-->
<androidx.coordinatorlayout.widget.CoordinatorLayout
<!-- xmlns:android="http://schemas.android.com/apk/res/android"-->
xmlns:android=
"http://schemas.android.com/apk/res/android"
<!-- xmlns:app="http://schemas.android.com/apk/res-auto"-->
xmlns:app=
"http://schemas.android.com/apk/res-auto"
<!-- android:id="@+id/coordinator_layout"-->
android:id=
"@+id/coordinator_layout"
<!-- android:layout_width="match_parent"-->
android:layout_width=
"match_parent"
<!-- android:layout_height="match_parent">-->
android:layout_height=
"match_parent"
>
<com.google.android.material.appbar.AppBarLayout
<!-- <com.google.android.material.appbar.AppBarLayout-->
android:layout_width=
"match_parent"
<!-- android:layout_width="match_parent"-->
android:layout_height=
"wrap_content"
>
<!-- android:layout_height="wrap_content">--
>
<TextView
<!-- <TextView-->
android:layout_width=
"match_parent"
<!-- android:layout_width="match_parent"-->
android:layout_height=
"100dp"
<!-- android:layout_height="100dp"-->
android:background=
"#222222"
<!-- android:background="#222222"-->
android:gravity=
"center"
<!-- android:gravity="center"-->
android:text=
"该区域可折叠"
<!-- android:text="该区域可折叠"-->
android:textColor=
"@android:color/white"
<!-- android:textColor="@android:color/white"-->
android:textSize=
"30sp"
<!-- android:textSize="30sp"-->
app:layout_scrollFlags=
"scroll"
/
>
<!-- app:layout_scrollFlags="scroll" />--
>
<TextView
<!-- <TextView-->
android:layout_width=
"match_parent"
<!-- android:layout_width="match_parent"-->
android:layout_height=
"50dp"
<!-- android:layout_height="50dp"-->
android:background=
"#DD012D"
<!-- android:background="#DD012D"-->
android:gravity=
"center"
<!-- android:gravity="center"-->
android:text=
"该区域为上滑至头部固定区域"
<!-- android:text="该区域为上滑至头部固定区域"-->
android:textColor=
"@android:color/white"
<!-- android:textColor="@android:color/white"-->
android:textSize=
"20sp"
/
>
<!-- android:textSize="20sp" />--
>
</com.google.android.material.appbar.AppBarLayout
>
<!-- </com.google.android.material.appbar.AppBarLayout>--
>
<!-- <com.google.android.material.bottomappbar.BottomAppBar-->
<!-- <com.google.android.material.bottomappbar.BottomAppBar-->
<!-- android:id="@+id/bar"-->
<!-- android:id="@+id/bar"-->
...
@@ -58,4 +57,45 @@
...
@@ -58,4 +57,45 @@
<!-- android:layout_height="wrap_content" />-->
<!-- android:layout_height="wrap_content" />-->
<!-- </FrameLayout>-->
<!-- </FrameLayout>-->
<!--</androidx.coordinatorlayout.widget.CoordinatorLayout>-->
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/coordinator_layout"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
android:background=
"@color/green_400"
>
<!-- <include layout="@layout/cat_bottomappbar_content"/>-->
<com.google.android.material.bottomappbar.BottomAppBar
android:id=
"@+id/bar"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
android:fitsSystemWindows=
"true"
/>
<!-- <com.google.android.material.floatingactionbutton.FloatingActionButton-->
<!-- android:id="@+id/fab"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:layout_anchor="@+id/bar"-->
<!-- app:srcCompat="@drawable/ic_account" />-->
<!-- <FrameLayout-->
<!-- android:id="@+id/bottom_drawer"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:elevation="16dp"-->
<!-- app:behavior_hideable="true"-->
<!-- app:layout_behavior="@string/bottom_sheet_behavior">-->
<!-- <com.google.android.material.navigation.NavigationView-->
<!-- android:id="@+id/navigation_view"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:menu="@menu/table_function_menu" />-->
<!-- </FrameLayout>-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
config.gradle
View file @
36db1aef
...
@@ -7,8 +7,8 @@ ext {
...
@@ -7,8 +7,8 @@ ext {
targetSdkVersion
:
29
,
targetSdkVersion
:
29
,
//正式版: 1.0.3 3
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
//內部測試版:1.2.0 20
versionCode
:
2
4
,
versionCode
:
2
5
,
versionName
:
"1.2.
4
"
versionName
:
"1.2.
5
"
]
]
version
=
[
version
=
[
...
@@ -46,7 +46,7 @@ ext {
...
@@ -46,7 +46,7 @@ ext {
"retrofit"
:
"com.squareup.retrofit2:retrofit:${version["
retrofitSdkVersion
"]}"
,
"retrofit"
:
"com.squareup.retrofit2:retrofit:${version["
retrofitSdkVersion
"]}"
,
"retrofit-converter-gson"
:
"com.squareup.retrofit2:converter-gson:${version["
retrofitSdkVersion
"]}"
,
"retrofit-converter-gson"
:
"com.squareup.retrofit2:converter-gson:${version["
retrofitSdkVersion
"]}"
,
"retrofit-adapter-rxjava"
:
"com.squareup.retrofit2:adapter-rxjava:${version["
retrofitSdkVersion
"]}"
,
"retrofit-adapter-rxjava"
:
"com.squareup.retrofit2:adapter-rxjava:${version["
retrofitSdkVersion
"]}"
,
"retrofit-adapter-rxjava2"
:
"com.squareup.retrofit2:adapter-rxjava2:${version["
retrofitSdkVersion
"]}"
,
"retrofit-adapter-rxjava2"
:
"com.squareup.retrofit2:adapter-rxjava2:${version["
retrofitSdkVersion
"]}"
,
"okhttp3"
:
"com.squareup.okhttp3:okhttp:3.8.1"
,
"okhttp3"
:
"com.squareup.okhttp3:okhttp:3.8.1"
,
"okhttp-urlconnection"
:
"com.squareup.okhttp:okhttp-urlconnection:2.0.0"
,
"okhttp-urlconnection"
:
"com.squareup.okhttp:okhttp-urlconnection:2.0.0"
,
"glide"
:
"com.github.bumptech.glide:glide:${version["
glideSdkVersion
"]}"
,
"glide"
:
"com.github.bumptech.glide:glide:${version["
glideSdkVersion
"]}"
,
...
@@ -66,6 +66,7 @@ ext {
...
@@ -66,6 +66,7 @@ ext {
"paginate"
:
"com.github.markomilos:paginate:0.5.1"
,
"paginate"
:
"com.github.markomilos:paginate:0.5.1"
,
"vlayout"
:
"com.alibaba.android:vlayout:1.1.0@aar"
,
"vlayout"
:
"com.alibaba.android:vlayout:1.1.0@aar"
,
"loadsir"
:
"com.kingja.loadsir:loadsir:1.3.8"
,
"loadsir"
:
"com.kingja.loadsir:loadsir:1.3.8"
,
"lottie"
:
"com.airbnb.android:lottie:2.7.0"
,
//rx1
//rx1
"rxandroid"
:
"io.reactivex:rxandroid:1.2.1"
,
"rxandroid"
:
"io.reactivex:rxandroid:1.2.1"
,
...
...
library-common/build.gradle
View file @
36db1aef
...
@@ -150,6 +150,8 @@ dependencies {
...
@@ -150,6 +150,8 @@ dependencies {
api
rootProject
.
ext
.
dependencies
[
"pickerview"
]
api
rootProject
.
ext
.
dependencies
[
"pickerview"
]
//底部功能導航view
//底部功能導航view
api
'com.github.ittianyu:BottomNavigationViewEx:2.0.4'
api
'com.github.ittianyu:BottomNavigationViewEx:2.0.4'
//lottie
api
rootProject
.
ext
.
dependencies
[
"lottie"
]
//滴滴開源 哆啦A夢:辅助开发工具、测试效率工具、视觉辅助工具
//滴滴開源 哆啦A夢:辅助开发工具、测试效率工具、视觉辅助工具
debugImplementation
'com.didichuxing.doraemonkit:dokitx:3.3.3'
debugImplementation
'com.didichuxing.doraemonkit:dokitx:3.3.3'
releaseImplementation
'com.didichuxing.doraemonkit:dokitx-no-op:3.3.3'
releaseImplementation
'com.didichuxing.doraemonkit:dokitx-no-op:3.3.3'
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/app/GsaCloudApplication.java
View file @
36db1aef
...
@@ -143,7 +143,7 @@ public class GsaCloudApplication extends BaseApplication {
...
@@ -143,7 +143,7 @@ public class GsaCloudApplication extends BaseApplication {
//初始化QMUI相关
//初始化QMUI相关
initQMUI
();
initQMUI
();
//初始化哆啦A夢
//初始化哆啦A夢
//
initDoraemonKit();
initDoraemonKit
();
//初始化上下拉刷新
//初始化上下拉刷新
initRefresh
();
initRefresh
();
//初始化加载反馈页管理框架
//初始化加载反馈页管理框架
...
@@ -166,7 +166,6 @@ public class GsaCloudApplication extends BaseApplication {
...
@@ -166,7 +166,6 @@ public class GsaCloudApplication extends BaseApplication {
//上傳餐廳擴展信息
//上傳餐廳擴展信息
ExpandInfoSetting
.
initUpdateExtendedConfiguration
(
uiStyleConfiguration
,
functionConfiguration
);
ExpandInfoSetting
.
initUpdateExtendedConfiguration
(
uiStyleConfiguration
,
functionConfiguration
);
LoganManager
.
w_action
(
TAG
,
TAG
+
": onCreate end....."
);
LoganManager
.
w_action
(
TAG
,
TAG
+
": onCreate end....."
);
}
}
...
@@ -202,7 +201,7 @@ public class GsaCloudApplication extends BaseApplication {
...
@@ -202,7 +201,7 @@ public class GsaCloudApplication extends BaseApplication {
* 初始化滴滴開發,測試輔助工具哆啦A夢
* 初始化滴滴開發,測試輔助工具哆啦A夢
*/
*/
private
void
initDoraemonKit
()
{
private
void
initDoraemonKit
()
{
DoraemonKit
.
install
(
getAppContext
(),
DoraemonKitConfig
.
PRODUCE_ID
);
//
DoraemonKit.install(getAppContext(), DoraemonKitConfig.PRODUCE_ID);
}
}
/**
/**
...
@@ -363,9 +362,13 @@ public class GsaCloudApplication extends BaseApplication {
...
@@ -363,9 +362,13 @@ public class GsaCloudApplication extends BaseApplication {
}
}
@Override
@Override
public
void
onPrintError
(
int
errorCode
)
{
public
void
onPrintError
(
Exception
e
,
int
errorCode
)
{
if
(
e
!=
null
)
{
LoganManager
.
w_printer
(
TAG
,
"打印失敗:"
+
e
.
getMessage
());
}
else
{
LoganManager
.
w_printer
(
TAG
,
"打印失敗:"
+
errorCode
);
LoganManager
.
w_printer
(
TAG
,
"打印失敗:"
+
errorCode
);
}
}
}
@Override
@Override
public
void
connectionBefore
(
String
deviceName
,
String
ip
,
int
port
,
long
ioTimeout
,
long
printTimeout
)
{
public
void
connectionBefore
(
String
deviceName
,
String
ip
,
int
port
,
long
ioTimeout
,
long
printTimeout
)
{
...
@@ -380,7 +383,11 @@ public class GsaCloudApplication extends BaseApplication {
...
@@ -380,7 +383,11 @@ public class GsaCloudApplication extends BaseApplication {
@Override
@Override
public
void
connectionError
(
Exception
e
)
{
public
void
connectionError
(
Exception
e
)
{
LoganManager
.
w_printer
(
TAG
,
"連接打印機失敗"
);
if
(
e
!=
null
)
{
LoganManager
.
w_printer
(
TAG
,
"連接打印機失敗:"
+
e
.
getMessage
());
}
else
{
LoganManager
.
w_printer
(
TAG
,
"連接打印機失敗"
);
}
}
}
@Override
@Override
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/config/LoganConfig.java
View file @
36db1aef
...
@@ -14,8 +14,8 @@ public class LoganConfig {
...
@@ -14,8 +14,8 @@ public class LoganConfig {
public
static
final
String
EncryptKey16
=
"0123456789012345"
;
public
static
final
String
EncryptKey16
=
"0123456789012345"
;
public
static
final
String
EncryptIV16
=
"0123456789012345"
;
public
static
final
String
EncryptIV16
=
"0123456789012345"
;
public
static
final
String
APP_ID
=
"gingersoft1008611"
;
public
static
final
String
APP_ID
=
"gingersoft1008611"
;
public
static
final
String
UPLOAD_LOG_URL
=
HttpsConstans
.
HTTP_ADDRESS_URL_HK
+
"/logan-web/logan/upload.json"
;
//
public static final String UPLOAD_LOG_URL = HttpsConstans.HTTP_ADDRESS_URL_HK+ "/logan-web/logan/upload.json";
//
public static final String UPLOAD_LOG_URL = "http://192.168.1.131:8080/logan-web/logan/upload.json";
public
static
final
String
UPLOAD_LOG_URL
=
"http://192.168.1.131:8080/logan-web/logan/upload.json"
;
/**
/**
* 日誌保留天數
* 日誌保留天數
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/constans/ExpandConstant.java
View file @
36db1aef
...
@@ -25,7 +25,7 @@ public class ExpandConstant {
...
@@ -25,7 +25,7 @@ public class ExpandConstant {
public
final
static
String
ItemDecimals
=
"ItemDecimals"
;
public
final
static
String
ItemDecimals
=
"ItemDecimals"
;
public
final
static
String
MergeSendFood
=
"MergeSendFood"
;
public
final
static
String
MergeSendFood
=
"MergeSendFood"
;
/**送單自動打印上菜紙*/
/**送單自動打印上菜紙*/
public
final
static
String
AutoPrinterPaper
=
"AutoPrinterPa
r
per"
;
public
final
static
String
AutoPrinterPaper
=
"AutoPrinterPaper"
;
/**結賬是否打印積分二維碼*/
/**結賬是否打印積分二維碼*/
public
final
static
String
ToPrintQRCode
=
"ToPrintQRCode"
;
public
final
static
String
ToPrintQRCode
=
"ToPrintQRCode"
;
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/core/restaurant/utils/RestaurantExpandInfoUtils.java
View file @
36db1aef
...
@@ -155,7 +155,6 @@ public class RestaurantExpandInfoUtils {
...
@@ -155,7 +155,6 @@ public class RestaurantExpandInfoUtils {
}
}
}
}
}
}
int
i
=
100
;
}
}
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/printer/PrinterFileUtils.java
View file @
36db1aef
...
@@ -62,6 +62,7 @@ public class PrinterFileUtils {
...
@@ -62,6 +62,7 @@ public class PrinterFileUtils {
public
static
void
savePrinterBitmapByType
(
int
orderType
,
int
printType
,
String
directoryName
,
List
<
Bitmap
>
bitmaps
)
{
public
static
void
savePrinterBitmapByType
(
int
orderType
,
int
printType
,
String
directoryName
,
List
<
Bitmap
>
bitmaps
)
{
RxIOTask
rxIOTask
=
new
RxIOTask
(
0
)
{
RxIOTask
rxIOTask
=
new
RxIOTask
(
0
)
{
@Override
@Override
public
Object
doInIOThread
(
Object
o
)
{
public
Object
doInIOThread
(
Object
o
)
{
String
savePath
=
getPathByPrintType
(
printType
);
String
savePath
=
getPathByPrintType
(
printType
);
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/printer/plugins/PrinterFlowListener.java
View file @
36db1aef
...
@@ -11,7 +11,7 @@ import java.util.Map;
...
@@ -11,7 +11,7 @@ import java.util.Map;
* @作者: bin
* @作者: bin
* @創建時間: 2021-01-25 10:19
* @創建時間: 2021-01-25 10:19
* @更新時間: 2021-01-25 10:19
* @更新時間: 2021-01-25 10:19
* @描述:打印整體
打印
流程(打印前數據信息,圖片->連接成功(失敗)->打印成功(失敗)->斷開連接)
* @描述:打印整體流程(打印前數據信息,圖片->連接成功(失敗)->打印成功(失敗)->斷開連接)
*/
*/
public
interface
PrinterFlowListener
extends
ExternalPrinterConnection
{
public
interface
PrinterFlowListener
extends
ExternalPrinterConnection
{
...
@@ -21,5 +21,5 @@ public interface PrinterFlowListener extends ExternalPrinterConnection {
...
@@ -21,5 +21,5 @@ public interface PrinterFlowListener extends ExternalPrinterConnection {
void
onPrintSuccess
();
void
onPrintSuccess
();
void
onPrintError
(
int
errorCode
);
void
onPrintError
(
Exception
e
,
int
errorCode
);
}
}
library-common/src/main/java/com/gingersoft/gsa/cloud/common/service/GetInfoUpdateService.kt
View file @
36db1aef
...
@@ -222,9 +222,17 @@ class GetInfoUpdateService : Service() {
...
@@ -222,9 +222,17 @@ class GetInfoUpdateService : Service() {
if
(
postCallBack
!=
null
)
{
if
(
postCallBack
!=
null
)
{
postCallBack
!!
.
callBack
(
type
)
postCallBack
!!
.
callBack
(
type
)
}
}
//-1斷開連接,\n-2:消息傳輸錯誤,\n0:連接消息,\n1:登錄通知,\n2:登出通知,\n3:外賣送單通知,\n4:自取送單通知,\n5:歷史訂單通知,\n6:修改訂單狀態通知,\n7:支付成功通知"
//-1斷開連接,
if
(
type
==
3
||
type
==
4
||
type
==
5
// \n-2:消息傳輸錯誤,
||
type
==
7
)
{
// \n0:連接消息,
// \n1:登錄通知,
// \n2:登出通知,
// \n3:外賣送單通知,
// \n4:自取送單通知,
// \n5:歷史訂單通知,
// \n6:修改訂單狀態通知,
// \n7:支付成功通知"
if
(
type
==
3
||
type
==
4
||
type
==
5
||
type
==
7
)
{
//播放提示音
//播放提示音
initSoundPool
(
R
.
raw
.
newordervocal
)
initSoundPool
(
R
.
raw
.
newordervocal
)
}
else
if
(
type
==
8
)
{
}
else
if
(
type
==
8
)
{
...
...
library-common/src/main/res/drawable/base_
recycle_bottom_point_unfocused
.xml
→
library-common/src/main/res/drawable/base_
grey_point
.xml
View file @
36db1aef
File moved
library-common/src/main/res/drawable/base_re
cycle_bottom_point_focuese
.xml
→
library-common/src/main/res/drawable/base_re
d_point
.xml
View file @
36db1aef
File moved
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintSocketHolder.java
View file @
36db1aef
...
@@ -14,6 +14,7 @@ import java.io.OutputStream;
...
@@ -14,6 +14,7 @@ import java.io.OutputStream;
import
java.lang.ref.WeakReference
;
import
java.lang.ref.WeakReference
;
import
java.net.InetSocketAddress
;
import
java.net.InetSocketAddress
;
import
java.net.Socket
;
import
java.net.Socket
;
import
java.net.SocketException
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -48,6 +49,7 @@ public class PrintSocketHolder {
...
@@ -48,6 +49,7 @@ public class PrintSocketHolder {
private
Socket
socket
;
private
Socket
socket
;
private
OutputStream
out
;
private
OutputStream
out
;
private
WeakReference
<
OnStateChangedListener
>
mListener
;
private
WeakReference
<
OnStateChangedListener
>
mListener
;
private
PrintSocketHolder
()
{
private
PrintSocketHolder
()
{
}
}
...
@@ -63,10 +65,15 @@ public class PrintSocketHolder {
...
@@ -63,10 +65,15 @@ public class PrintSocketHolder {
InetSocketAddress
socketAddress
=
new
InetSocketAddress
(
ip
,
port
);
InetSocketAddress
socketAddress
=
new
InetSocketAddress
(
ip
,
port
);
//设置超时时间
//设置超时时间
socket
.
setSoTimeout
(
PrintConstans
.
SO_TIMEOUT
);
socket
.
setSoTimeout
(
PrintConstans
.
SO_TIMEOUT
);
socket
.
connect
(
socketAddress
,
PrintConstans
.
PRINT_TIMEOUT
);
//开始连接ip
//开始连接ip
}
catch
(
Exception
e
)
{
socket
.
connect
(
socketAddress
,
PrintConstans
.
PRINT_TIMEOUT
);
closeSocket
();
}
catch
(
SocketException
e
)
{
e
.
printStackTrace
();
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionError
(
e
);
return
ERROR_2
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionError
(
e
);
return
ERROR_2
;
return
ERROR_2
;
}
}
return
ERROR_0
;
return
ERROR_0
;
...
@@ -78,6 +85,7 @@ public class PrintSocketHolder {
...
@@ -78,6 +85,7 @@ public class PrintSocketHolder {
out
=
socket
.
getOutputStream
();
out
=
socket
.
getOutputStream
();
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
closeSocket
();
closeSocket
();
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionError
(
e
);
return
ERROR_3
;
return
ERROR_3
;
}
}
return
ERROR_0
;
return
ERROR_0
;
...
@@ -106,6 +114,7 @@ public class PrintSocketHolder {
...
@@ -106,6 +114,7 @@ public class PrintSocketHolder {
out
.
write
(
item
);
out
.
write
(
item
);
out
.
flush
();
out
.
flush
();
}
catch
(
IOException
|
NullPointerException
e
)
{
}
catch
(
IOException
|
NullPointerException
e
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
e
,
ERROR_4
);
LoganManager
.
w_printer
(
TAG
,
"打印异常: "
+
e
.
getMessage
());
LoganManager
.
w_printer
(
TAG
,
"打印异常: "
+
e
.
getMessage
());
closeSocket
();
closeSocket
();
return
ERROR_4
;
return
ERROR_4
;
...
@@ -127,8 +136,6 @@ public class PrintSocketHolder {
...
@@ -127,8 +136,6 @@ public class PrintSocketHolder {
int
result
=
getOutputStream
();
int
result
=
getOutputStream
();
if
(
result
==
ERROR_0
)
{
if
(
result
==
ERROR_0
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionSuccess
();
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionSuccess
();
}
else
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionError
(
new
Exception
(
"失敗"
));
}
}
return
result
;
return
result
;
}
}
...
...
library-ui/src/main/java/com/gingersoft/gsa/cloud/ui/view/OrderPayView.java
View file @
36db1aef
...
@@ -149,7 +149,23 @@ public class OrderPayView extends LinearLayout {
...
@@ -149,7 +149,23 @@ public class OrderPayView extends LinearLayout {
return
;
return
;
}
}
boolean
useFreeServicePayMethod
=
isUseFreeServicePayMethod
(
method
);
if
(
mBillMoneyList
.
size
()
>
0
&&
PayMethodUtils
.
withHywebPayMethod
(
method
))
{
int
hywebPayMethodIndex
=
PayMethodUtils
.
hasHywebPayMethod
(
mBillMoneyList
);
if
(
hywebPayMethodIndex
!=
-
1
)
{
//只允許存在一個hyweb支付
mBillMoneyList
.
remove
(
hywebPayMethodIndex
);
}
}
if
(
mBillMoneyList
.
size
()
>=
MAX_COUNT_PAY_MEMBER
)
{
//替换掉第一个
mBillMoneyList
.
remove
(
0
);
mBillMoneyList
.
add
(
method
);
}
else
{
mBillMoneyList
.
add
(
method
);
}
boolean
useFreeServicePayMethod
=
hasUseFreeServicePayMethod
(
method
);
if
(
useFreeServicePayMethod
)
{
if
(
useFreeServicePayMethod
)
{
//有使用免服務費支付方式 重新獲取一遍尚欠金額
//有使用免服務費支付方式 重新獲取一遍尚欠金額
paymentDifference
=
getPaymentDifference
();
paymentDifference
=
getPaymentDifference
();
...
@@ -181,21 +197,6 @@ public class OrderPayView extends LinearLayout {
...
@@ -181,21 +197,6 @@ public class OrderPayView extends LinearLayout {
}
}
}
}
}
}
if
(
mBillMoneyList
.
size
()
>
0
&&
PayMethodUtils
.
withHywebPayMethod
(
method
))
{
int
hywebPayMethodIndex
=
PayMethodUtils
.
hasHywebPayMethod
(
mBillMoneyList
);
if
(
hywebPayMethodIndex
!=
-
1
)
{
//只允許存在一個hyweb支付
mBillMoneyList
.
remove
(
hywebPayMethodIndex
);
}
}
if
(
mBillMoneyList
.
size
()
>=
MAX_COUNT_PAY_MEMBER
)
{
//替换掉第一个
mBillMoneyList
.
remove
(
0
);
mBillMoneyList
.
add
(
method
);
}
else
{
mBillMoneyList
.
add
(
method
);
}
int
notifyPosition
=
mBillMoneyList
.
size
()
-
1
;
int
notifyPosition
=
mBillMoneyList
.
size
()
-
1
;
mBillMoneyAdapter
.
setSelect_position
(
notifyPosition
);
mBillMoneyAdapter
.
setSelect_position
(
notifyPosition
);
...
@@ -235,7 +236,7 @@ public class OrderPayView extends LinearLayout {
...
@@ -235,7 +236,7 @@ public class OrderPayView extends LinearLayout {
//設置差額狀態
//設置差額狀態
setDifferenceText
(
context
);
setDifferenceText
(
context
);
setWhetherFreeServiceCallback
(
i
sUseFreeServicePayMethod
(
null
));
setWhetherFreeServiceCallback
(
ha
sUseFreeServicePayMethod
(
null
));
if
(
onSelectPayClickLisenter
!=
null
)
{
if
(
onSelectPayClickLisenter
!=
null
)
{
onSelectPayClickLisenter
.
delClick
(
datasBean
);
onSelectPayClickLisenter
.
delClick
(
datasBean
);
...
@@ -255,7 +256,7 @@ public class OrderPayView extends LinearLayout {
...
@@ -255,7 +256,7 @@ public class OrderPayView extends LinearLayout {
ToastUtils
.
show
(
context
,
"請選擇支付方式"
);
ToastUtils
.
show
(
context
,
"請選擇支付方式"
);
return
;
return
;
}
}
boolean
useFreeServicePayMethod
=
i
sUseFreeServicePayMethod
(
selectPayMethod
);
boolean
useFreeServicePayMethod
=
ha
sUseFreeServicePayMethod
(
selectPayMethod
);
setWhetherFreeServiceCallback
(
useFreeServicePayMethod
);
setWhetherFreeServiceCallback
(
useFreeServicePayMethod
);
pressExact
();
pressExact
();
...
@@ -316,9 +317,9 @@ public class OrderPayView extends LinearLayout {
...
@@ -316,9 +317,9 @@ public class OrderPayView extends LinearLayout {
/**
/**
* 設置是否免服務費回調
* 設置是否免服務費回調
*/
*/
public
void
setWhetherFreeServiceCallback
(
boolean
i
sUseFreeServicePayMethod
)
{
public
void
setWhetherFreeServiceCallback
(
boolean
ha
sUseFreeServicePayMethod
)
{
if
(
onFreeServiceStatusChangeLisenter
!=
null
)
{
if
(
onFreeServiceStatusChangeLisenter
!=
null
)
{
onFreeServiceStatusChangeLisenter
.
onFreeServiceStautsChange
(
i
sUseFreeServicePayMethod
);
onFreeServiceStatusChangeLisenter
.
onFreeServiceStautsChange
(
ha
sUseFreeServicePayMethod
);
}
}
}
}
...
@@ -328,7 +329,7 @@ public class OrderPayView extends LinearLayout {
...
@@ -328,7 +329,7 @@ public class OrderPayView extends LinearLayout {
* @param method
* @param method
* @return
* @return
*/
*/
private
boolean
i
sUseFreeServicePayMethod
(
PayMethod
method
)
{
private
boolean
ha
sUseFreeServicePayMethod
(
PayMethod
method
)
{
boolean
freeServiceStatus
=
false
;
boolean
freeServiceStatus
=
false
;
if
(
method
!=
null
)
{
if
(
method
!=
null
)
{
if
(
method
.
getWhetherFreeService
()
==
1
)
{
if
(
method
.
getWhetherFreeService
()
==
1
)
{
...
@@ -731,7 +732,7 @@ public class OrderPayView extends LinearLayout {
...
@@ -731,7 +732,7 @@ public class OrderPayView extends LinearLayout {
}
}
public
interface
OnFreeServiceStatusChangeLisenter
{
public
interface
OnFreeServiceStatusChangeLisenter
{
void
onFreeServiceStautsChange
(
boolean
i
sUseFreeServicePayMethod
);
void
onFreeServiceStautsChange
(
boolean
ha
sUseFreeServicePayMethod
);
}
}
public
interface
OnSelectPayClickLisenter
{
public
interface
OnSelectPayClickLisenter
{
...
...
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