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
8300e096
Commit
8300e096
authored
Mar 06, 2020
by
王宇航
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3-06 登陸UI優化
parent
8dcec7ed
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
537 additions
and
324 deletions
+537
-324
main/src/main/AndroidManifest.xml
+0
-54
print-module/src/main/java/com/joe/print/mvp/contract/PrinterAddContract.java
+3
-2
print-module/src/main/java/com/joe/print/mvp/presenter/PrinterAddPresenter.java
+1
-1
print-module/src/main/java/com/joe/print/mvp/print/SendPrint.java
+256
-3
print-module/src/main/java/com/joe/print/mvp/ui/activity/OldPrintActivity.java
+6
-9
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
+83
-72
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrinterAddActivity.java
+4
-1
public-base/src/main/java/com/gingersoft/gsa/cloud/base/common/bean/mealManage/MyOrderManage.java
+1
-1
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/BaseOrderPresenter.java
+1
-2
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/OrderContentActivity.java
+1
-1
user-login/src/main/AndroidManifest.xml
+0
-1
user-login/src/main/java/com/gingersoft/gsa/cloud/user/login/mvp/ui/activity/LoginActivity.java
+3
-6
user-login/src/main/res/layout/user_login_activity_login.xml
+178
-171
No files found.
main/src/main/AndroidManifest.xml
View file @
8300e096
...
...
@@ -4,60 +4,6 @@
package=
"com.gingersoft.gsa.cloud.main"
>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<supports-screens
android:anyDensity=
"true"
android:largeScreens=
"true"
android:resizeable=
"true"
android:smallScreens=
"true"
/>
<supports-screens
android:anyDensity=
"true"
android:largeScreens=
"true"
android:normalScreens=
"true"
android:smallScreens=
"true"
/>
<uses-feature
android:name=
"android.hardware.camera"
/>
<uses-feature
android:name=
"android.hardware.camera.autofocus"
/>
<uses-permission
android:name=
"android.permission.WAKE_LOCK"
/>
<uses-permission
android:name=
"android.permission.BLUETOOTH"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
/>
<uses-permission
android:name=
"android.permission.ACCESS_MOCK_LOCATION"
tools:ignore=
"MockLocation"
/>
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.RESTART_PACKAGES"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_CONTACTS"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
/>
<!-- <uses-permission android:name="android.permission.RESTART_PACKAGES" /> -->
<!-- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> -->
<uses-permission
android:name=
"android.permission.WRITE_MEDIA_STORAGE"
/>
<uses-permission
android:name=
"android.permission.DISABLE_KEYGUARD"
/>
<!-- <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> -->
<uses-permission
android:name=
"android.permission.SYSTEM_ALERT_WINDOW"
/>
<uses-permission
android:name=
"android.permission.VIBRATE"
/>
<!-- 使用照相机权限 -->
<uses-permission
android:name=
"android.permission.REORDER_TASKS"
/>
<!-- 自动聚焦权限 -->
<uses-permission
android:name=
"android.permission.CAMERA"
/>
<uses-permission
android:name=
"android.permission.READ_LOGS"
/>
<uses-permission
android:name=
"android.permission.GET_TASKS"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<application>
<activity
android:name=
".mvp.ui.activity.NewMainActivity"
/>
<activity
android:name=
".mvp.ui.activity.MainActivity"
/>
...
...
print-module/src/main/java/com/joe/print/mvp/contract/PrinterAddContract.java
View file @
8300e096
package
com
.
joe
.
print
.
mvp
.
contract
;
import
com.gingersoft.gsa.cloud.base.common.bean.BaseResult
;
import
com.
jess.arms.mvp.IView
;
import
com.
gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.jess.arms.mvp.IModel
;
import
com.jess.arms.mvp.IView
;
import
io.reactivex.Observable
;
import
okhttp3.RequestBody
;
...
...
@@ -23,7 +24,7 @@ import okhttp3.RequestBody;
public
interface
PrinterAddContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
void
addPrinterSuccess
();
void
addPrinterSuccess
(
PrinterDeviceBean
printerDeviceBean
);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
...
...
print-module/src/main/java/com/joe/print/mvp/presenter/PrinterAddPresenter.java
View file @
8300e096
...
...
@@ -88,7 +88,7 @@ public class PrinterAddPresenter extends BasePresenter<PrinterAddContract.Model,
@Override
public
void
onNext
(
BaseResult
baseResult
)
{
if
(
baseResult
.
isSuccess
())
{
mRootView
.
addPrinterSuccess
();
mRootView
.
addPrinterSuccess
(
printerDeviceBean
);
}
else
{
mRootView
.
showMessage
(
"保存失敗"
);
}
...
...
print-module/src/main/java/com/joe/print/mvp/print/SendPrint.java
View file @
8300e096
...
...
@@ -2,14 +2,17 @@ package com.joe.print.mvp.print;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.graphics.Matrix
;
import
android.graphics.Rect
;
import
com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
am.util.printer.PrintDataMaker
;
import
am.util.printer.PrinterUtils
;
import
am.util.printer.PrinterWriter
;
import
am.util.printer.PrinterWriter58mm
;
import
am.util.printer.PrinterWriter80mm
;
...
...
@@ -24,7 +27,8 @@ public class SendPrint implements PrintDataMaker {
private
int
parting
=
255
;
//高度分割值,
private
int
width
;
// 打印的圖片寬度,紙張寬度
private
int
printType
;
public
SendPrint
(
Context
context
,
int
parting
,
int
width
,
int
type
)
{
public
SendPrint
(
Context
context
,
int
parting
,
int
width
,
int
type
)
{
this
.
mContext
=
context
;
this
.
parting
=
parting
;
this
.
width
=
width
;
...
...
@@ -33,6 +37,7 @@ public class SendPrint implements PrintDataMaker {
@Override
public
List
<
byte
[]>
getPrintData
(
int
type
)
{
ArrayList
<
byte
[]>
data
=
new
ArrayList
<>();
try
{
PrinterWriter
printer
;
...
...
@@ -46,7 +51,9 @@ public class SendPrint implements PrintDataMaker {
return
null
;
}
for
(
int
i
=
0
;
i
<
bitmaps
.
size
();
i
++)
{
data
.
addAll
(
PrinterUtils
.
decodeBitmapToDataList
(
bitmaps
.
get
(
i
),
parting
));
// printer.getImageByte(bitmaps.get(i));
// data.addAll(PrinterUtils.decodeBitmapToDataList(bitmaps.get(i), parting));
data
.
add
(
draw2PxPoint2
(
bitmaps
.
get
(
i
)));
printer
.
printLineFeed
();
printer
.
printLineFeed
();
printer
.
printLineFeed
();
...
...
@@ -70,4 +77,250 @@ public class SendPrint implements PrintDataMaker {
return
new
ArrayList
<>();
}
}
/*************************************************************************
* 假设一个240*240的图片,分辨率设为24, 共分10行打印
* 每一行,是一个 240*24 的点阵, 每一列有24个点,存储在3个byte里面。
* 每个byte存储8个像素点信息。因为只有黑白两色,所以对应为1的位是黑色,对应为0的位是白色
**************************************************************************/
/**
* 把一张Bitmap图片转化为打印机可以打印的字节流
*
* @param bmp
* @return
*/
public
void
draw2PxPoint
(
Bitmap
bmp
)
throws
IOException
{
//用来存储转换后的 bitmap 数据。为什么要再加1000,这是为了应对当图片高度无法
//整除24时的情况。比如bitmap 分辨率为 240 * 250,占用 7500 byte,
//但是实际上要存储11行数据,每一行需要 24 * 240 / 8 =720byte 的空间。再加上一些指令存储的开销,
//所以多申请 1000byte 的空间是稳妥的,不然运行时会抛出数组访问越界的异常。
int
size
=
bmp
.
getWidth
()
*
bmp
.
getHeight
()
/
8
+
1000
;
byte
[]
data
=
new
byte
[
size
];
int
k
=
0
;
//设置行距为0的指令
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x33
;
data
[
k
++]
=
0x00
;
// 逐行打印
for
(
int
j
=
0
;
j
<
bmp
.
getHeight
()
/
24
f
;
j
++)
{
//打印图片的指令
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
data
[
k
++]
=
(
byte
)
(
bmp
.
getWidth
()
%
256
);
//nL
data
[
k
++]
=
(
byte
)
(
bmp
.
getWidth
()
/
256
);
//nH
//对于每一行,逐列打印
for
(
int
i
=
0
;
i
<
bmp
.
getWidth
();
i
++)
{
//每一列24个像素点,分为3个字节存储
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
//每个字节表示8个像素点,0表示白色,1表示黑色
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
i
,
j
*
24
+
m
*
8
+
n
,
bmp
);
data
[
k
]
+=
data
[
k
]
+
b
;
}
k
++;
}
}
data
[
k
++]
=
10
;
//换行
}
// socketOut.write(data);
// socketOut.flush();
}
/*************************************************************************
* 我们的热敏打印机是RP-POS80S或RP-POS80P或RP-POS80CS或RP-POS80CP打印机
* 360*360的图片,8个字节(8个像素点)是一个二进制,将二进制转化为十进制数值
* y轴:24个像素点为一组,即360就是15组(0-14)
* x轴:360个像素点(0-359)
* 里面的每一组(24*360),每8个像素点为一个二进制,(每组有3个,3*8=24)
**************************************************************************/
/**
* 把一张Bitmap图片转化为打印机可以打印的bit(将图片压缩为360*360)
* 效率很高(相对于下面)
* @param bit
* @return
*/
public
static
byte
[]
draw2PxPoint2
(
Bitmap
bit
)
{
byte
[]
data
=
new
byte
[
16290
];
int
k
=
0
;
for
(
int
j
=
0
;
j
<
15
;
j
++)
{
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
// m=33时,选择24点双密度打印,分辨率达到200DPI。
data
[
k
++]
=
0x68
;
data
[
k
++]
=
0x01
;
for
(
int
i
=
0
;
i
<
360
;
i
++)
{
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
i
,
j
*
24
+
m
*
8
+
n
,
bit
);
data
[
k
]
+=
data
[
k
]
+
b
;
}
k
++;
}
}
data
[
k
++]
=
10
;
}
return
data
;
}
/**
* 把一张Bitmap图片转化为打印机可以打印的bit
* @param bit
* @return
*/
public
static
byte
[]
pic2PxPoint
(
Bitmap
bit
){
long
start
=
System
.
currentTimeMillis
();
byte
[]
data
=
new
byte
[
16290
];
int
k
=
0
;
for
(
int
i
=
0
;
i
<
15
;
i
++)
{
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
// m=33时,选择24点双密度打印,分辨率达到200DPI。
data
[
k
++]
=
0x68
;
data
[
k
++]
=
0x01
;
for
(
int
x
=
0
;
x
<
360
;
x
++)
{
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
byte
[]
by
=
new
byte
[
8
];
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
x
,
i
*
24
+
m
*
8
+
7
-
n
,
bit
);
by
[
n
]
=
b
;
}
data
[
k
]
=
(
byte
)
changePointPx1
(
by
);
k
++;
}
}
data
[
k
++]
=
10
;
}
long
end
=
System
.
currentTimeMillis
();
long
str
=
end
-
start
;
return
data
;
}
/**
* 图片二值化,黑色是1,白色是0
* @param x 横坐标
* @param y 纵坐标
* @param bit 位图
* @return
*/
public
static
byte
px2Byte
(
int
x
,
int
y
,
Bitmap
bit
)
{
byte
b
;
int
pixel
=
bit
.
getPixel
(
x
,
y
);
int
red
=
(
pixel
&
0x00ff0000
)
>>
16
;
// 取高两位
int
green
=
(
pixel
&
0x0000ff00
)
>>
8
;
// 取中两位
int
blue
=
pixel
&
0x000000ff
;
// 取低两位
int
gray
=
RGB2Gray
(
red
,
green
,
blue
);
if
(
gray
<
128
){
b
=
1
;
}
else
{
b
=
0
;
}
return
b
;
}
/**
* 图片灰度的转化
* @param r
* @param g
* @param b
* @return
*/
private
static
int
RGB2Gray
(
int
r
,
int
g
,
int
b
){
int
gray
=
(
int
)
(
0.29900
*
r
+
0.58700
*
g
+
0.11400
*
b
);
//灰度转化公式
return
gray
;
}
/**
* 对图片进行压缩(去除透明度)
* @param bitmapOrg
*/
public
static
Bitmap
compressPic
(
Bitmap
bitmapOrg
)
{
// 获取这个图片的宽和高
int
width
=
bitmapOrg
.
getWidth
();
int
height
=
bitmapOrg
.
getHeight
();
// 定义预转换成的图片的宽度和高度
int
newWidth
=
360
;
int
newHeight
=
360
;
Bitmap
targetBmp
=
Bitmap
.
createBitmap
(
newWidth
,
newHeight
,
Bitmap
.
Config
.
ARGB_8888
);
Canvas
targetCanvas
=
new
Canvas
(
targetBmp
);
targetCanvas
.
drawColor
(
0xffffffff
);
targetCanvas
.
drawBitmap
(
bitmapOrg
,
new
Rect
(
0
,
0
,
width
,
height
),
new
Rect
(
0
,
0
,
newWidth
,
newHeight
),
null
);
return
targetBmp
;
}
/**
* 对图片进行压缩(不去除透明度)
* @param bitmapOrg
*/
public
static
Bitmap
compressBitmap
(
Bitmap
bitmapOrg
)
{
// 加载需要操作的图片,这里是一张图片
// Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.alipay);
// 获取这个图片的宽和高
int
width
=
bitmapOrg
.
getWidth
();
int
height
=
bitmapOrg
.
getHeight
();
// 定义预转换成的图片的宽度和高度
int
newWidth
=
360
;
int
newHeight
=
360
;
// 计算缩放率,新尺寸除原始尺寸
float
scaleWidth
=
((
float
)
newWidth
)
/
width
;
float
scaleHeight
=
((
float
)
newHeight
)
/
height
;
// 创建操作图片用的matrix对象
Matrix
matrix
=
new
Matrix
();
// 缩放图片动作
matrix
.
postScale
(
scaleWidth
,
scaleHeight
);
// 创建新的图片
Bitmap
resizedBitmap
=
Bitmap
.
createBitmap
(
bitmapOrg
,
0
,
0
,
width
,
height
,
matrix
,
true
);
// 将上面创建的Bitmap转换成Drawable对象,使得其可以使用在ImageView, ImageButton中
// BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
return
resizedBitmap
;
}
/**
* 将[1,0,0,1,0,0,0,1]这样的二进制转为化十进制的数值(效率更高)
* @param arry
* @return
*/
public
static
int
changePointPx1
(
byte
[]
arry
){
int
v
=
0
;
for
(
int
j
=
0
;
j
<
arry
.
length
;
j
++)
{
if
(
arry
[
j
]
==
1
)
{
v
=
v
|
1
<<
j
;
}
}
return
v
;
}
/**
* 将[1,0,0,1,0,0,0,1]这样的二进制转为化十进制的数值
* @param arry
* @return
*/
public
byte
changePointPx
(
byte
[]
arry
){
byte
v
=
0
;
for
(
int
i
=
0
;
i
<
8
;
i
++)
{
v
+=
v
+
arry
[
i
];
}
return
v
;
}
/**
* 得到位图的某个点的像素值
* @param bitmap
* @return
*/
public
byte
[]
getPicPx
(
Bitmap
bitmap
){
int
[]
pixels
=
new
int
[
bitmap
.
getWidth
()
*
bitmap
.
getHeight
()];
// 保存所有的像素的数组,图片宽×高
bitmap
.
getPixels
(
pixels
,
0
,
bitmap
.
getWidth
(),
0
,
0
,
bitmap
.
getWidth
(),
bitmap
.
getHeight
());
for
(
int
i
=
0
;
i
<
pixels
.
length
;
i
++)
{
int
clr
=
pixels
[
i
];
int
red
=
(
clr
&
0x00ff0000
)
>>
16
;
// 取高两位
int
green
=
(
clr
&
0x0000ff00
)
>>
8
;
// 取中两位
int
blue
=
clr
&
0x000000ff
;
// 取低两位
System
.
out
.
println
(
"r="
+
red
+
",g="
+
green
+
",b="
+
blue
);
}
return
null
;
}
}
print-module/src/main/java/com/joe/print/mvp/ui/activity/OldPrintActivity.java
View file @
8300e096
...
...
@@ -10,7 +10,6 @@ import android.view.WindowManager;
import
com.billy.cc.core.component.CC
;
import
com.billy.cc.core.component.CCResult
;
import
com.gingersoft.gsa.cloud.base.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog
;
import
com.joe.print.mvp.print.SendPrint
;
...
...
@@ -37,7 +36,7 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
private
boolean
printStatus
=
false
;
private
String
ip
;
private
String
port
;
private
Integer
port
;
private
int
paperType
=
1
;
//打印紙類型 1:58mm,2::80mm
private
int
printWidth
=
560
;
//打印出來的內容寬度
/**
...
...
@@ -48,6 +47,7 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
* 3:廚房單
*/
private
int
type
=
-
1
;
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
...
...
@@ -61,15 +61,12 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
private
void
initIntent
()
{
Intent
intent
=
getIntent
();
ip
=
intent
.
getStringExtra
(
"ip"
);
port
=
intent
.
get
StringExtra
(
"port"
);
port
=
intent
.
get
IntExtra
(
"port"
,
0
);
paperType
=
intent
.
getIntExtra
(
"paperType"
,
1
);
type
=
intent
.
getIntExtra
(
"type"
,
-
1
);
if
(
ip
==
null
||
ip
.
equals
(
""
))
{
ip
=
"192.168.1.217"
;
}
if
(
TextUtil
.
isEmptyOrNullOrUndefined
(
port
)
||
port
.
equals
(
""
))
{
port
=
"0"
;
}
if
(
paperType
==
1
)
{
paperType
=
PrinterWriter58mm
.
TYPE_58
;
printWidth
=
580
-
20
;
//兩邊留20的空隙
...
...
@@ -87,14 +84,14 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
dialog
.
setOnDismissListener
(
dialog
->
dismiss
(
""
));
dialog
.
setOnCancelListener
(
dialog
->
dismiss
(
""
));
if
(
executor
==
null
)
{
executor
=
new
PrintExecutor
(
ip
,
Integer
.
parseInt
(
port
)
,
paperType
);
executor
=
new
PrintExecutor
(
ip
,
port
,
paperType
);
executor
.
setOnStateChangedListener
(
this
);
executor
.
setOnPrintResultListener
(
this
);
}
if
(
maker
==
null
)
{
maker
=
new
SendPrint
(
context
,
255
,
printWidth
,
type
);
}
executor
.
setIp
(
ip
,
Integer
.
parseInt
(
port
)
);
executor
.
setIp
(
ip
,
port
);
executor
.
doPrinterRequestAsync
(
maker
);
executor
.
setReconnectTimes
(
3
);
}
...
...
@@ -156,7 +153,7 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
private
void
dismiss
(
String
msg
)
{
if
(
msg
!=
null
&&
!
msg
.
equals
(
""
))
{
if
(
msg
!=
null
&&
!
msg
.
equals
(
""
))
{
ToastUtils
.
show
(
this
,
msg
);
}
//延遲一秒
...
...
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
View file @
8300e096
...
...
@@ -85,6 +85,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
*/
private
int
type
=
-
1
;
public
final
static
int
ADD_PRINT_CODE
=
1001
;
//添加打印機回調
@Override
public
void
setupActivityComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerPrintComponent
//如找不到该类,请编译一下项目
...
...
@@ -102,29 +104,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
// if (mV2.contains(Build.MODEL)) {
//
// } else if (mN5.contains(Build.MODEL)) {
try
{
//初始化N5打印
int
state
=
PrinterUtil
.
getStatus
();
Log
.
e
(
"error"
,
"打印機狀態:"
+
state
);
}
catch
(
NullPointerException
e
)
{
e
.
printStackTrace
();
//如果是空指針,那麼需要初始化
try
{
PrinterUtil
.
initPrinter
(
this
);
}
catch
(
NoInitPrinterException
|
RemoteException
ex
)
{
ex
.
printStackTrace
();
ToastUtils
.
show
(
mContext
,
"打印初始化失敗"
+
ex
.
getMessage
());
Log
.
e
(
"error"
,
"打印初始化失敗:"
+
ex
.
getMessage
());
}
}
catch
(
RemoteException
e
){
ToastUtils
.
show
(
mContext
,
"獲取狀態失敗:"
+
e
.
getMessage
());
Log
.
e
(
"error"
,
"獲取狀態失敗:"
+
e
.
getMessage
());
}
// }
initPrint
();
//獲取打印類型,根據打印類型生成對應的bitmap
type
=
CCUtil
.
getNavigateParam
(
this
,
"type"
,
1001
);
List
<
Bitmap
>
bitmaps
=
PrintUtils
.
getPrintBitmap
(
mContext
,
type
,
500
);
if
(
bitmaps
.
size
()
<=
0
)
{
...
...
@@ -132,6 +113,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
finish
();
return
;
}
//獲得用戶默認的打印方式
if
(
Objects
.
equals
(
SPUtils
.
get
(
mContext
,
Constans
.
DEFAULT_PRINT_METHOD
,
""
),
""
))
{
//如果沒有默認打印位置
noDefaultPrintMethod
(
bitmaps
);
...
...
@@ -146,6 +128,29 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
private
void
initPrint
()
{
// if (mV2.contains(Build.MODEL)) {
//
// } else if (mN5.contains(Build.MODEL)) {
try
{
//初始化N5打印
int
state
=
PrinterUtil
.
getStatus
();
Log
.
e
(
"error"
,
"打印機狀態:"
+
state
);
}
catch
(
NullPointerException
e
)
{
e
.
printStackTrace
();
//如果是空指針,那麼需要初始化
try
{
PrinterUtil
.
initPrinter
(
this
);
}
catch
(
NoInitPrinterException
|
RemoteException
ex
)
{
ex
.
printStackTrace
();
Log
.
e
(
"error"
,
"打印初始化失敗:"
+
ex
.
getMessage
());
}
}
catch
(
RemoteException
e
)
{
Log
.
e
(
"error"
,
"獲取狀態失敗:"
+
e
.
getMessage
());
}
// }
}
private
void
noDefaultPrintMethod
(
List
<
Bitmap
>
bitmaps
)
{
selectDialog
=
new
DialogUtils
(
mContext
,
R
.
layout
.
print_dialog_select_device
)
{
@Override
...
...
@@ -229,7 +234,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
try
{
PrinterUtil
.
startPrint
(
true
,
new
IOnPrintCallback
.
Stub
()
{
@Override
public
void
onPrintResult
(
int
i
)
throws
RemoteException
{
public
void
onPrintResult
(
int
i
)
{
Log
.
e
(
"error"
,
"打印回調:"
+
i
);
Looper
.
prepare
();
if
(
i
==
0
)
{
...
...
@@ -240,6 +245,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printFile
();
}
}
@Override
public
IBinder
asBinder
()
{
return
this
;
...
...
@@ -249,27 +255,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
e
.
printStackTrace
();
}
}
private
IOnPrintCallback
mIOnPrintCallback
=
new
IOnPrintCallback
()
{
@Override
public
void
onPrintResult
(
int
i
)
{
Log
.
e
(
"error"
,
"打印回調:"
+
i
);
Looper
.
prepare
();
if
(
i
==
0
)
{
//打印成功
ToastUtils
.
show
(
mContext
,
"N5打印結果:成功"
);
printSuccess
();
}
else
{
//打印失敗
ToastUtils
.
show
(
mContext
,
"N5打印結果:失敗"
);
printFile
();
}
}
@Override
public
IBinder
asBinder
()
{
return
null
;
}
};
/**
* 打印失敗
...
...
@@ -352,35 +337,61 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
if
(
selectDialog
!=
null
&&
selectDialog
.
isShowing
())
{
selectDialog
.
dismiss
();
}
//有打印機,彈出彈窗,選擇打印機
new
DialogUtils
(
mContext
,
R
.
layout
.
print_dialog_internet_list
)
{
@Override
public
void
initLayout
(
ViewHepler
hepler
,
Dialog
dialog
)
{
dialogCount
++;
RecyclerView
mRvPrintList
=
hepler
.
getView
(
R
.
id
.
rv_print_list
);
List
<
PrinterDeviceBean
>
deviceBeans
=
PrinterManager
.
getPrinterManager
().
getDeviceBeans
();
DialogPrinterListAdapter
printListAdapter
=
new
DialogPrinterListAdapter
(
deviceBeans
,
mContext
);
mRvPrintList
.
setLayoutManager
(
new
LinearLayoutManager
(
mContext
));
//分割线
mRvPrintList
.
addItemDecoration
(
new
DefaultItemDecoration
(
ContextCompat
.
getColor
(
mContext
,
R
.
color
.
line_color
)));
mRvPrintList
.
setAdapter
(
printListAdapter
);
printListAdapter
.
setOnItemClickListener
((
adapter
,
view
,
position
)
->
{
Intent
intent
=
new
Intent
(
mContext
,
OldPrintActivity
.
class
);
intent
.
putExtra
(
"ip"
,
deviceBeans
.
get
(
position
).
getIp
());
intent
.
putExtra
(
"port"
,
deviceBeans
.
get
(
position
).
getPort
());
intent
.
putExtra
(
"paperType"
,
deviceBeans
.
get
(
position
).
getType
());
intent
.
putExtra
(
"type"
,
type
);
startActivity
(
intent
);
dialog
.
dismiss
();
finish
();
});
dialog
.
setOnDismissListener
(
PrintActivity
.
this
);
dialog
.
setOnCancelListener
(
dialog1
->
finish
());
List
<
PrinterDeviceBean
>
deviceBeans
=
PrinterManager
.
getPrinterManager
().
getDeviceBeans
();
if
(
deviceBeans
!=
null
)
{
if
(
deviceBeans
.
size
()
==
1
)
{
//如果只配置了一個打印機,直接使用這個打印機進行打印
startToIpPrint
(
deviceBeans
.
get
(
0
));
}
else
{
//有打印機,彈出彈窗,選擇打印機
new
DialogUtils
(
mContext
,
R
.
layout
.
print_dialog_internet_list
)
{
@Override
public
void
initLayout
(
ViewHepler
hepler
,
Dialog
dialog
)
{
dialogCount
++;
RecyclerView
mRvPrintList
=
hepler
.
getView
(
R
.
id
.
rv_print_list
);
DialogPrinterListAdapter
printListAdapter
=
new
DialogPrinterListAdapter
(
deviceBeans
,
mContext
);
mRvPrintList
.
setLayoutManager
(
new
LinearLayoutManager
(
mContext
));
//分割线
mRvPrintList
.
addItemDecoration
(
new
DefaultItemDecoration
(
ContextCompat
.
getColor
(
mContext
,
R
.
color
.
line_color
)));
mRvPrintList
.
setAdapter
(
printListAdapter
);
printListAdapter
.
setOnItemClickListener
((
adapter
,
view
,
position
)
->
{
startToIpPrint
(
deviceBeans
.
get
(
position
));
dialog
.
dismiss
();
});
dialog
.
setOnDismissListener
(
PrintActivity
.
this
);
dialog
.
setOnCancelListener
(
dialog1
->
finish
());
}
}
.
setHeight
(
ArmsUtils
.
getScreenHeidth
(
mContext
)
/
2
)
.
createDialogView
()
.
show
();
}
}
else
{
//沒有配置打印機
startActivityForResult
(
new
Intent
(
mContext
,
PrinterAddActivity
.
class
),
ADD_PRINT_CODE
);
}
}
private
void
startToIpPrint
(
PrinterDeviceBean
deviceBean
)
{
Intent
intent
=
new
Intent
(
mContext
,
OldPrintActivity
.
class
);
intent
.
putExtra
(
"ip"
,
deviceBean
.
getIp
());
intent
.
putExtra
(
"port"
,
deviceBean
.
getPort
());
intent
.
putExtra
(
"paperType"
,
deviceBean
.
getType
());
intent
.
putExtra
(
"type"
,
type
);
startActivity
(
intent
);
finish
();
}
@Override
protected
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
@Nullable
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
if
(
requestCode
==
ADD_PRINT_CODE
&&
resultCode
==
PrintActivity
.
ADD_PRINT_CODE
)
{
//添加打印機成功,
if
(
data
!=
null
&&
data
.
getSerializableExtra
(
"printDevice"
)
!=
null
)
{
startToIpPrint
((
PrinterDeviceBean
)
data
.
getSerializableExtra
(
"printDevice"
));
}
}
.
setHeight
(
ArmsUtils
.
getScreenHeidth
(
mContext
)
/
2
)
.
createDialogView
()
.
show
();
}
@Override
...
...
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrinterAddActivity.java
View file @
8300e096
...
...
@@ -204,9 +204,12 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
}
@Override
public
void
addPrinterSuccess
()
{
public
void
addPrinterSuccess
(
PrinterDeviceBean
printerDeviceBean
)
{
//添加或編輯打印機成功
showMessage
(
"保存成功"
);
Intent
data
=
new
Intent
();
data
.
putExtra
(
"printDevice"
,
printerDeviceBean
);
setResult
(
PrintActivity
.
ADD_PRINT_CODE
,
data
);
finish
();
}
...
...
public-base/src/main/java/com/gingersoft/gsa/cloud/base/common/bean/mealManage/MyOrderManage.java
View file @
8300e096
...
...
@@ -88,7 +88,7 @@ public class MyOrderManage {
}
public
Date
getOpenTableTime
()
{
if
(
orderBean
!=
null
)
{
if
(
orderBean
!=
null
&&
orderBean
.
getCreateTime
()
!=
null
)
{
return
new
Date
(
orderBean
.
getCreateTime
());
}
return
new
Date
();
...
...
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/BaseOrderPresenter.java
View file @
8300e096
...
...
@@ -6,11 +6,11 @@ import android.widget.TextView;
import
com.gingersoft.gsa.cloud.base.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.base.common.bean.OrderBean
;
import
com.gingersoft.gsa.cloud.base.common.bean.OrderDetail
;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage
;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.BaseOrderContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.BillOrderMoney
;
import
com.gingersoft.gsa.cloud.base.common.bean.OrderDetail
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.OrderMoneyAdapter
;
...
...
@@ -19,7 +19,6 @@ import com.jess.arms.di.scope.ActivityScope;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
java.util.ArrayList
;
...
...
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/OrderContentActivity.java
View file @
8300e096
...
...
@@ -131,7 +131,7 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
String
openTime
=
String
.
format
(
"%tH:%tM"
,
dd
,
dd
);
String
tableno
=
""
;
if
(!
OpenTableManage
.
getDefault
().
isSplite
())
{
if
(!
OpenTableManage
.
getDefault
().
isSplite
()
&&
OpenTableManage
.
getDefault
().
getTableBean
()
!=
null
)
{
tableno
=
OpenTableManage
.
getDefault
().
getTableBean
().
getTableName
();
}
else
{
//TODO 暫未分檯功能
// tableno = GSAApplication.tableContract.getTableno().trim() + "-" + GSAApplication.tableContract.getTableno_split().trim();
...
...
user-login/src/main/AndroidManifest.xml
View file @
8300e096
...
...
@@ -24,7 +24,6 @@
<activity
android:name=
".mvp.ui.activity.LoginActivity"
android:windowSoftInputMode=
"adjustResize|stateHidden"
android:launchMode=
"singleTop"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
...
...
user-login/src/main/java/com/gingersoft/gsa/cloud/user/login/mvp/ui/activity/LoginActivity.java
View file @
8300e096
...
...
@@ -287,11 +287,8 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
GsaCloudApplication
.
setBrandRestaurantInfos
(
this
,
""
);
if
(
loginBean
.
getData
()
!=
null
)
{
GsaCloudApplication
.
setLoginToken
(
LoginActivity
.
this
,
loginBean
.
getData
().
getToken
());
if
(
loginBean
.
getData
().
getUser
()
!=
null
)
{
GsaCloudApplication
.
setMemberId
(
LoginActivity
.
this
,
loginBean
.
getData
().
getUser
().
getUserId
());
GsaCloudApplication
.
setMemberName
(
LoginActivity
.
this
,
loginBean
.
getData
().
getUser
().
getUserName
());
...
...
@@ -340,9 +337,9 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
protected
void
onDestroy
()
{
super
.
onDestroy
();
Log
.
e
(
"error"
,
"登陸頁面銷毀:onDestroy"
);
// if (dialog
!= null) {
// dialog
.dismiss();
//
}
if
(
dialog1
!=
null
)
{
dialog1
.
dismiss
();
}
}
/**
...
...
user-login/src/main/res/layout/user_login_activity_login.xml
View file @
8300e096
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
ScrollView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/theme_white_color"
android:orientation=
"vertical"
>
android:fillViewport=
"true"
>
<TextView
android:id=
"@+id/login_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"80dp"
android:text=
"@string/user_login_welcome_login"
android:textColor=
"@color/user_login_title_color"
android:textSize=
"@dimen/title_text_size"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<ImageView
android:id=
"@+id/login_icon"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:layout_marginLeft=
"10dp"
android:layout_marginTop=
"100dp"
android:background=
"@color/theme_color"
android:padding=
"8dp"
android:src=
"@mipmap/ic_user"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/login_title"
/>
<EditText
android:id=
"@+id/ed_login_user_account"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:background=
"@null"
android:hint=
"請輸入賬戶"
android:maxLength=
"16"
android:paddingLeft=
"@dimen/dp_10"
android:paddingRight=
"@dimen/dp_10"
android:singleLine=
"true"
android:textColor=
"@color/theme_333_color"
android:textColorHint=
"@color/user_login_edit_color"
android:textSize=
"@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf=
"@id/login_icon"
app:layout_constraintLeft_toRightOf=
"@id/login_icon"
app:layout_constraintRight_toLeftOf=
"@id/iv_clear_account"
app:layout_constraintTop_toTopOf=
"@id/login_icon"
/>
<ImageView
android:id=
"@+id/iv_clear_account"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:padding=
"@dimen/dp_5"
android:src=
"@mipmap/ic_clear_text"
android:visibility=
"gone"
app:layout_constraintBottom_toBottomOf=
"@id/ed_login_user_account"
app:layout_constraintLeft_toRightOf=
"@id/ed_login_user_account"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"@id/ed_login_user_account"
/>
<ImageView
android:id=
"@+id/iv_login_pwd_icon"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:layout_marginLeft=
"10dp"
android:layout_marginTop=
"10dp"
android:background=
"@color/theme_color"
android:padding=
"8dp"
android:src=
"@mipmap/ic_pwd"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/ed_login_user_account"
/>
<EditText
android:id=
"@+id/ed_login_user_pwd"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:background=
"#00000000"
android:gravity=
"center_vertical"
android:hint=
"請輸入密碼"
android:inputType=
"textPassword"
android:maxLength=
"16"
android:paddingLeft=
"@dimen/dp_10"
android:paddingRight=
"@dimen/dp_10"
android:singleLine=
"true"
android:textColor=
"@color/theme_333_color"
android:textColorHint=
"@color/user_login_edit_color"
android:textSize=
"@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf=
"@id/iv_login_pwd_icon"
app:layout_constraintLeft_toRightOf=
"@id/iv_login_pwd_icon"
app:layout_constraintRight_toLeftOf=
"@id/ic_look_pwd"
app:layout_constraintTop_toTopOf=
"@id/iv_login_pwd_icon"
/>
<CheckBox
android:id=
"@+id/rb_remember_password"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:layout_marginTop=
"@dimen/dp_15"
app:layout_constraintLeft_toLeftOf=
"@id/iv_login_pwd_icon"
app:layout_constraintTop_toBottomOf=
"@id/ed_login_user_pwd"
/>
<TextView
android:id=
"@+id/tv_remember_pwd_text"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_5"
android:text=
"記住密碼"
android:textColor=
"@color/theme_333_color"
android:textSize=
"@dimen/sp_14"
app:layout_constraintBottom_toBottomOf=
"@id/rb_remember_password"
app:layout_constraintLeft_toRightOf=
"@id/rb_remember_password"
app:layout_constraintTop_toTopOf=
"@id/rb_remember_password"
/>
<ImageView
android:id=
"@+id/ic_look_pwd"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:padding=
"@dimen/dp_5"
android:visibility=
"gone"
android:src=
"@mipmap/ic_password_hide"
app:layout_constraintBottom_toBottomOf=
"@id/ed_login_user_pwd"
app:layout_constraintRight_toLeftOf=
"@id/iv_clear_pwd"
app:layout_constraintTop_toTopOf=
"@id/ed_login_user_pwd"
/>
<ImageView
android:id=
"@+id/iv_clear_pwd"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:padding=
"@dimen/dp_5"
android:src=
"@mipmap/ic_clear_text"
android:visibility=
"gone"
app:layout_constraintBottom_toBottomOf=
"@id/ed_login_user_pwd"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"@id/ed_login_user_pwd"
/>
<TextView
android:id=
"@+id/tv_forget_pwd"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:text=
"忘記密碼?"
android:textSize=
"14dp"
android:visibility=
"invisible"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/rb_remember_password"
/>
<TextView
android:id=
"@+id/tv_gsa_user_login"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"10dp"
android:layout_marginTop=
"20dp"
android:layout_marginRight=
"10dp"
android:background=
"@drawable/shape_app_btn"
android:gravity=
"center"
android:padding=
"10dp"
android:text=
"登錄"
android:textColor=
"#fff"
android:textSize=
"16dp"
app:layout_constraintTop_toBottomOf=
"@id/tv_forget_pwd"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"v1.0"
android:textSize=
"16dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintVertical_bias=
"0.95"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
android:background=
"@color/theme_white_color"
android:clipChildren=
"true"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/login_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"80dp"
android:text=
"@string/user_login_welcome_login"
android:textColor=
"@color/user_login_title_color"
android:textSize=
"@dimen/title_text_size"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<ImageView
android:id=
"@+id/login_icon"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:layout_marginLeft=
"10dp"
android:layout_marginTop=
"100dp"
android:background=
"@color/theme_color"
android:padding=
"8dp"
android:src=
"@mipmap/ic_user"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/login_title"
/>
<EditText
android:id=
"@+id/ed_login_user_account"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:background=
"@null"
android:hint=
"請輸入賬戶"
android:maxLength=
"16"
android:paddingLeft=
"@dimen/dp_10"
android:paddingRight=
"@dimen/dp_10"
android:singleLine=
"true"
android:textColor=
"@color/theme_333_color"
android:textColorHint=
"@color/user_login_edit_color"
android:textSize=
"@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf=
"@id/login_icon"
app:layout_constraintLeft_toRightOf=
"@id/login_icon"
app:layout_constraintRight_toLeftOf=
"@id/iv_clear_account"
app:layout_constraintTop_toTopOf=
"@id/login_icon"
/>
<ImageView
android:id=
"@+id/iv_clear_account"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:padding=
"@dimen/dp_5"
android:src=
"@mipmap/ic_clear_text"
android:visibility=
"gone"
app:layout_constraintBottom_toBottomOf=
"@id/ed_login_user_account"
app:layout_constraintLeft_toRightOf=
"@id/ed_login_user_account"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"@id/ed_login_user_account"
/>
<ImageView
android:id=
"@+id/iv_login_pwd_icon"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:layout_marginLeft=
"10dp"
android:layout_marginTop=
"10dp"
android:background=
"@color/theme_color"
android:padding=
"8dp"
android:src=
"@mipmap/ic_pwd"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/ed_login_user_account"
/>
<EditText
android:id=
"@+id/ed_login_user_pwd"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:background=
"#00000000"
android:gravity=
"center_vertical"
android:hint=
"請輸入密碼"
android:inputType=
"textPassword"
android:maxLength=
"16"
android:paddingLeft=
"@dimen/dp_10"
android:paddingRight=
"@dimen/dp_10"
android:singleLine=
"true"
android:textColor=
"@color/theme_333_color"
android:textColorHint=
"@color/user_login_edit_color"
android:textSize=
"@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf=
"@id/iv_login_pwd_icon"
app:layout_constraintLeft_toRightOf=
"@id/iv_login_pwd_icon"
app:layout_constraintRight_toLeftOf=
"@id/ic_look_pwd"
app:layout_constraintTop_toTopOf=
"@id/iv_login_pwd_icon"
/>
<CheckBox
android:id=
"@+id/rb_remember_password"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:layout_marginTop=
"@dimen/dp_15"
app:layout_constraintLeft_toLeftOf=
"@id/iv_login_pwd_icon"
app:layout_constraintTop_toBottomOf=
"@id/ed_login_user_pwd"
/>
<TextView
android:id=
"@+id/tv_remember_pwd_text"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_5"
android:text=
"記住密碼"
android:textColor=
"@color/theme_333_color"
android:textSize=
"@dimen/sp_14"
app:layout_constraintBottom_toBottomOf=
"@id/rb_remember_password"
app:layout_constraintLeft_toRightOf=
"@id/rb_remember_password"
app:layout_constraintTop_toTopOf=
"@id/rb_remember_password"
/>
<ImageView
android:id=
"@+id/ic_look_pwd"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:padding=
"@dimen/dp_5"
android:src=
"@mipmap/ic_password_hide"
android:visibility=
"gone"
app:layout_constraintBottom_toBottomOf=
"@id/ed_login_user_pwd"
app:layout_constraintRight_toLeftOf=
"@id/iv_clear_pwd"
app:layout_constraintTop_toTopOf=
"@id/ed_login_user_pwd"
/>
<ImageView
android:id=
"@+id/iv_clear_pwd"
android:layout_width=
"@dimen/dp_30"
android:layout_height=
"@dimen/dp_30"
android:padding=
"@dimen/dp_5"
android:src=
"@mipmap/ic_clear_text"
android:visibility=
"gone"
app:layout_constraintBottom_toBottomOf=
"@id/ed_login_user_pwd"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"@id/ed_login_user_pwd"
/>
<TextView
android:id=
"@+id/tv_forget_pwd"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:text=
"忘記密碼?"
android:textSize=
"14dp"
android:visibility=
"invisible"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/rb_remember_password"
/>
<TextView
android:id=
"@+id/tv_gsa_user_login"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"10dp"
android:layout_marginTop=
"20dp"
android:layout_marginRight=
"10dp"
android:background=
"@drawable/shape_app_btn"
android:gravity=
"center"
android:padding=
"10dp"
android:text=
"登錄"
android:textColor=
"#fff"
android:textSize=
"16dp"
app:layout_constraintTop_toBottomOf=
"@id/tv_forget_pwd"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"v1.0"
android:textSize=
"16dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintLeft_toLeftOf=
"parent"
app:layout_constraintRight_toRightOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintVertical_bias=
"0.95"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
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