Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
android
/
dayu
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
f0593799
authored
Jun 05, 2024
by
xuxuan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
打卡
parent
40422755
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
470 additions
and
47 deletions
.idea/gradle.xml
.idea/misc.xml
app/src/main/java/com/dayu/bigfish/ui/MainActivity.java
baseSDK/src/main/java/com/dayu/base/api/APIService.java
baseSDK/src/main/java/com/dayu/base/api/BaseApiFactory.java
baseSDK/src/main/java/com/dayu/utils/PictrueUtils.java
baseSDK/src/main/res/drawable-xhdpi/btn_close_black.png
baseSDK/src/main/res/values/strings.xml
orderCenter/src/main/java/com/dayu/order/presenter/checkintakephoto/CheckInTakePhotoContract.java
orderCenter/src/main/java/com/dayu/order/presenter/checkintakephoto/CheckInTakePhotoPresenter.java
orderCenter/src/main/java/com/dayu/order/presenter/orderdetail/OrderDetailClockContract.java
orderCenter/src/main/java/com/dayu/order/presenter/orderdetail/OrderDetailClockPresenter.java
orderCenter/src/main/java/com/dayu/order/presenter/orderdoing/OrderDoingPresenter.java
orderCenter/src/main/java/com/dayu/order/presenter/receivingorder/ReceivingPresenter.java
orderCenter/src/main/java/com/dayu/order/ui/activity/CheckInTakePhotoActivity.java
orderCenter/src/main/java/com/dayu/order/ui/activity/OrderDetailsClockActivity.java
orderCenter/src/main/java/com/dayu/order/ui/adapter/OrderAdapter.java
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderFirstTabFragment.java
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderFourTabFragment.java
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderReceivingFragment.java
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderSecondTabFragment.java
orderCenter/src/main/release/AndroidManifest.xml
orderCenter/src/main/res/drawable-xhdpi/photo_default.png
orderCenter/src/main/res/layout/activity_check_in_take_photo_layout.xml
.idea/gradle.xml
View file @
f0593799
...
...
@@ -5,7 +5,7 @@
<option
name=
"linkedExternalProjectsSettings"
>
<GradleProjectSettings>
<option
name=
"externalProjectPath"
value=
"$PROJECT_DIR$"
/>
<option
name=
"gradleJvm"
value=
"
jbr-17
"
/>
<option
name=
"gradleJvm"
value=
"
#GRADLE_LOCAL_JAVA_HOME
"
/>
<option
name=
"modules"
>
<set>
<option
value=
"$PROJECT_DIR$"
/>
...
...
.idea/misc.xml
100755 → 100644
View file @
f0593799
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"DesignSurface"
>
<option
name=
"filePathToZoomLevelMap"
>
...
...
@@ -23,7 +24,7 @@
<option
name=
"myDefaultNotNull"
value=
"android.support.annotation.NonNull"
/>
<option
name=
"myNullables"
>
<value>
<list
size=
"1
4
"
>
<list
size=
"1
6
"
>
<item
index=
"0"
class=
"java.lang.String"
itemvalue=
"org.jetbrains.annotations.Nullable"
/>
<item
index=
"1"
class=
"java.lang.String"
itemvalue=
"javax.annotation.Nullable"
/>
<item
index=
"2"
class=
"java.lang.String"
itemvalue=
"javax.annotation.CheckForNull"
/>
...
...
@@ -38,12 +39,14 @@
<item
index=
"11"
class=
"java.lang.String"
itemvalue=
"org.eclipse.jdt.annotation.Nullable"
/>
<item
index=
"12"
class=
"java.lang.String"
itemvalue=
"io.reactivex.annotations.Nullable"
/>
<item
index=
"13"
class=
"java.lang.String"
itemvalue=
"io.reactivex.rxjava3.annotations.Nullable"
/>
<item
index=
"14"
class=
"java.lang.String"
itemvalue=
"org.jspecify.nullness.Nullable"
/>
<item
index=
"15"
class=
"java.lang.String"
itemvalue=
"jakarta.annotation.Nullable"
/>
</list>
</value>
</option>
<option
name=
"myNotNulls"
>
<value>
<list
size=
"1
4
"
>
<list
size=
"1
6
"
>
<item
index=
"0"
class=
"java.lang.String"
itemvalue=
"org.jetbrains.annotations.NotNull"
/>
<item
index=
"1"
class=
"java.lang.String"
itemvalue=
"javax.annotation.Nonnull"
/>
<item
index=
"2"
class=
"java.lang.String"
itemvalue=
"edu.umd.cs.findbugs.annotations.NonNull"
/>
...
...
@@ -58,11 +61,13 @@
<item
index=
"11"
class=
"java.lang.String"
itemvalue=
"io.reactivex.annotations.NonNull"
/>
<item
index=
"12"
class=
"java.lang.String"
itemvalue=
"io.reactivex.rxjava3.annotations.NonNull"
/>
<item
index=
"13"
class=
"java.lang.String"
itemvalue=
"lombok.NonNull"
/>
<item
index=
"14"
class=
"java.lang.String"
itemvalue=
"jakarta.annotation.Nonnull"
/>
<item
index=
"15"
class=
"java.lang.String"
itemvalue=
"org.jspecify.nullness.NonNull"
/>
</list>
</value>
</option>
</component>
<component
name=
"ProjectRootManager"
version=
"2"
languageLevel=
"JDK_1
_8"
default=
"true"
project-jdk-name=
"1.8
"
project-jdk-type=
"JavaSDK"
>
<component
name=
"ProjectRootManager"
version=
"2"
languageLevel=
"JDK_1
1"
default=
"true"
project-jdk-name=
"corretto-11
"
project-jdk-type=
"JavaSDK"
>
<output
url=
"file://$PROJECT_DIR$/build/classes"
/>
</component>
<component
name=
"ProjectType"
>
...
...
app/src/main/java/com/dayu/bigfish/ui/MainActivity.java
View file @
f0593799
...
...
@@ -52,6 +52,7 @@ import com.dayu.learncenter.ui.fragment.HomeLearnFragment;
import
com.dayu.livemodule.LiveUtils
;
import
com.dayu.livemodule.event.UserKickOutEvent
;
import
com.dayu.order.common.TabNumEvent
;
import
com.dayu.order.ui.activity.CheckInTakePhotoActivity
;
import
com.dayu.order.ui.activity.OrderDetailsActivity
;
import
com.dayu.order.ui.activity.ReceivingActivity
;
import
com.dayu.order.ui.fragment.HomeOrderFragment
;
...
...
@@ -719,6 +720,14 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
protected
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
UMShareAPI
.
get
(
this
).
onActivityResult
(
requestCode
,
resultCode
,
data
);
if
(
requestCode
==
CheckInTakePhotoActivity
.
TAKE_PHOTO_CODE
&&
resultCode
==
RESULT_OK
){
//按天用工打卡上传图片成功,通知fragment调用打卡接口并刷新页面
Intent
intent
=
new
Intent
();
intent
.
putExtra
(
"photoUrl"
,
data
.
getStringExtra
(
"photoUrl"
));
intent
.
setAction
(
CheckInTakePhotoActivity
.
TAKE_PHOTO_FINISH_BROADCAST
);
sendBroadcast
(
intent
);
}
}
@Override
...
...
baseSDK/src/main/java/com/dayu/base/api/APIService.java
View file @
f0593799
...
...
@@ -87,6 +87,12 @@ public interface APIService {
Observable
<
BaseResponse
<
List
<
String
>>>
uploadPhotoNew
(
@Part
MultipartBody
.
Part
part
,
@Query
(
"targetPath"
)
String
path
,
@Query
(
"pathDateFmt"
)
String
pathDateFmt
);
@Multipart
@POST
(
"/file/uploadOne"
)
Observable
<
BaseResponse
<
String
>>
uploadPhotoOne
(
@Part
MultipartBody
.
Part
part
,
@Query
(
"targetPath"
)
String
path
,
@Query
(
"pathDateFmt"
)
String
pathDateFmt
);
/**
* 上传单个视频.
*
...
...
baseSDK/src/main/java/com/dayu/base/api/BaseApiFactory.java
View file @
f0593799
...
...
@@ -33,6 +33,10 @@ public class BaseApiFactory {
return
Api
.
getService
(
APIService
.
class
).
uploadPhotoNew
(
part
,
path
,
pathDateFmt
).
compose
(
Api
.
applySchedulers
());
}
public
static
Observable
<
String
>
uploadPhotoOne
(
MultipartBody
.
Part
part
,
String
path
,
String
pathDateFmt
)
{
return
Api
.
getService
(
APIService
.
class
).
uploadPhotoOne
(
part
,
path
,
pathDateFmt
).
compose
(
Api
.
applySchedulers
());
}
public
static
Observable
<
String
>
uploadVideo
(
MultipartBody
.
Part
part
)
{
return
Api
.
getService
(
APIService
.
class
).
uploadVideo
(
part
).
compose
(
Api
.
applySchedulers
());
}
...
...
baseSDK/src/main/java/com/dayu/utils/PictrueUtils.java
View file @
f0593799
...
...
@@ -134,6 +134,26 @@ public class PictrueUtils {
});
}
public
static
void
showOriginPicDialog
(
Activity
activity
)
{
String
[]
mPerArr
=
new
String
[]{
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
};
MPermissionUtils
.
requestPermissionsResult
(
activity
,
1
,
mPerArr
,
new
MPermissionUtils
.
OnPermissionListener
()
{
@SuppressLint
(
"CheckResult"
)
@Override
public
void
onPermissionGranted
()
{
PictureSelectionModel
selector
=
PictureSelector
.
create
(
activity
)
.
openGallery
(
SelectMimeType
.
ofImage
())
//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()
.
setImageEngine
(
GlideEngine
.
createGlideEngine
())
.
setImageSpanCount
(
4
)
.
setSelectionMode
(
SelectModeConfig
.
MULTIPLE
);
selector
.
forResult
(
PictureConfig
.
CHOOSE_REQUEST
);
}
@Override
public
void
onPermissionDenied
()
{
}
});
}
public
static
void
showPicDialogs
(
Activity
activity
,
int
maxImgCout
)
{
PictureSelectionModel
selector
=
PictureSelector
.
create
(
activity
)
.
openGallery
(
SelectMimeType
.
ofImage
())
//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()
...
...
@@ -177,4 +197,5 @@ public class PictrueUtils {
}
return
path
;
}
}
baseSDK/src/main/res/drawable-xhdpi/btn_close_black.png
0 → 100644
View file @
f0593799
1.25 KB
baseSDK/src/main/res/values/strings.xml
View file @
f0593799
...
...
@@ -223,6 +223,7 @@
<string
name=
"modify_appointment_time"
>
修改预约时间
</string>
<string
name=
"have_go_on"
>
我已出发
</string>
<string
name=
"begain_server"
>
开始服务
</string>
<string
name=
"receive_now"
>
马上接单
</string>
<string
name=
"process_order"
>
处理工单
</string>
<string
name=
"check_upon_delivery"
>
等待验收
</string>
<string
name=
"order_finish"
>
已完成
</string>
...
...
orderCenter/src/main/java/com/dayu/order/presenter/checkintakephoto/CheckInTakePhotoContract.java
0 → 100644
View file @
f0593799
package
com
.
dayu
.
order
.
presenter
.
checkintakephoto
;
import
com.dayu.base.ui.presenter.BasePresenter
;
import
com.dayu.common.BaseView
;
public
interface
CheckInTakePhotoContract
{
interface
View
extends
BaseView
{
void
selectPhoto
();
String
getPhotoPath
();
void
uploadPhotoSuccess
(
String
photoUrl
);
}
abstract
class
Presenter
extends
BasePresenter
<
CheckInTakePhotoContract
.
View
>
{
public
abstract
void
selectPhoto
();
public
abstract
void
submit
();
}
}
orderCenter/src/main/java/com/dayu/order/presenter/checkintakephoto/CheckInTakePhotoPresenter.java
0 → 100644
View file @
f0593799
package
com
.
dayu
.
order
.
presenter
.
checkintakephoto
;
import
android.text.TextUtils
;
import
com.dayu.base.api.BaseApiFactory
;
import
com.dayu.common.Constants
;
public
class
CheckInTakePhotoPresenter
extends
CheckInTakePhotoContract
.
Presenter
{
@Override
public
void
onAttached
()
{
}
@Override
public
void
selectPhoto
(){
mView
.
selectPhoto
();
}
@Override
public
void
submit
(){
BaseApiFactory
.
uploadPhotoOne
(
BaseApiFactory
.
packPhoto
(
mView
.
getPhotoPath
()),
Constants
.
PHOTO
+
"/order/clockIn"
,
"yyMM"
)
.
subscribe
(
this
.
baseObserver
(
img
->
{
String
photoUrl
=
img
;
mView
.
uploadPhotoSuccess
(
photoUrl
);
}));
}
}
orderCenter/src/main/java/com/dayu/order/presenter/orderdetail/OrderDetailClockContract.java
View file @
f0593799
...
...
@@ -29,6 +29,10 @@ public interface OrderDetailClockContract {
void
setDatas
(
OrderDetail
detail
);
void
setOrderPhoneNum
(
List
<
String
>
info
);
void
showVerifyDialog
(
String
code
,
String
message
,
String
data
);
void
showNoCashDialog
(
String
message
);
}
abstract
class
Presenter
extends
BaseListPresenter
<
OrderDetailClockContract
.
View
>
{
...
...
orderCenter/src/main/java/com/dayu/order/presenter/orderdetail/OrderDetailClockPresenter.java
View file @
f0593799
...
...
@@ -19,11 +19,21 @@ import com.dayu.order.common.OrderConstant;
import
com.dayu.order.ui.activity.CheckContentActivity
;
import
com.dayu.order.ui.activity.LogisticsInfoActivity
;
import
com.dayu.order.ui.activity.SopWebViewActivity
;
import
com.dayu.provider.event.RefreshApoiment
;
import
com.dayu.provider.event.RefreshTab
;
import
com.dayu.provider.event.SwtichOrderFragment
;
import
com.dayu.utils.ToastUtils
;
import
com.dayu.utils.UIUtils
;
import
com.dayu.utils.UserManager
;
import
org.greenrobot.eventbus.EventBus
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
io.reactivex.Observable
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.disposables.Disposable
;
/**
* Created by luofan
...
...
@@ -38,6 +48,11 @@ public class OrderDetailClockPresenter extends OrderDetailClockContract.Presente
private
OrderDetail
mDetails
;
private
Disposable
mDisPosable
;
public
int
getmUserId
()
{
return
mUserId
;
}
@Override
...
...
@@ -174,4 +189,56 @@ public class OrderDetailClockPresenter extends OrderDetailClockContract.Presente
public
boolean
getIsShowBtn
()
{
return
isShowBtn
;
}
public
void
receiveOrder
(
int
orders
,
int
engineer
,
String
appointmentTime
,
int
createdSource
)
{
mView
.
showDialog
();
OrderApiFactory
.
verifyOrder
(
orders
+
""
,
mUserId
).
subscribe
(
baseObserver
(
data
->
{
if
(
data
.
isSuccess
())
{
receive
(
orders
,
engineer
,
appointmentTime
,
createdSource
);
}
else
{
mView
.
showVerifyDialog
(
data
.
getSubCode
(),
data
.
getMsg
(),
data
.
getData
());
}
},
responeThrowable
->
{
}));
}
public
void
receive
(
int
orders
,
int
engineer
,
String
appointmentTime
,
int
createdSource
)
{
OrderApiFactory
.
receiveOrder
(
orders
,
engineer
).
subscribe
(
baseObserverByU
(
aBoolean
->
{
// MobclickAgent.onEvent(BaseApplication.getContext(), "get_serviceOrder");
mView
.
showToast
(
R
.
string
.
receive_order_success
);
receiveOrderSuccess
(
orders
,
appointmentTime
,
createdSource
);
},
responeThrowable
->
{
if
(
"ORDER0002"
.
equals
(
responeThrowable
.
subCode
)
||
"ORDER0003"
.
equals
(
responeThrowable
.
subCode
))
{
refresh
();
}
else
if
(
"ORDER0042"
.
equals
(
responeThrowable
.
subCode
))
{
mView
.
showNoCashDialog
(
responeThrowable
.
message
);
}
else
if
(
"ORDER0046"
.
equals
(
responeThrowable
.
subCode
))
{
mView
.
showNoCashDialog
(
responeThrowable
.
message
);
}
}));
}
public
void
receiveOrderSuccess
(
int
orders
,
String
appointmentTime
,
int
createdSource
)
{
mDisPosable
=
Observable
.
timer
(
300
,
TimeUnit
.
MILLISECONDS
).
observeOn
(
AndroidSchedulers
.
mainThread
()).
subscribe
(
aLong
->
{
if
(
createdSource
==
7
||
createdSource
==
8
){
//按天用工单马上接单,跳转到待服务列表,不提示【马上预约】弹窗
EventBus
.
getDefault
().
post
(
new
SwtichOrderFragment
(
2
));
}
else
{
EventBus
.
getDefault
().
post
(
new
SwtichOrderFragment
(
1
));
}
EventBus
.
getDefault
().
post
(
new
RefreshTab
(
0
));
// EventBus.getDefault().post(new RefreshReceivingNum(num < 0 ? 0 : num));
EventBus
.
getDefault
().
post
(
new
RefreshApoiment
(-
1
));
// if (!TextUtils.isEmpty(appointmentTime) && createdSource != 7 && createdSource != 8) { //订单详情页接单则不弹框提示.
// mView.showOrderDialog(orders, appointmentTime);
// }
mDisPosable
.
dispose
();
mView
.
dumpBack
();
});
}
}
orderCenter/src/main/java/com/dayu/order/presenter/orderdoing/OrderDoingPresenter.java
View file @
f0593799
...
...
@@ -2,11 +2,18 @@ package com.dayu.order.presenter.orderdoing;
import
static
com
.
dayu
.
utils
.
UIUtils
.
getString
;
import
android.app.Activity
;
import
android.app.Fragment
;
import
android.content.BroadcastReceiver
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.IntentFilter
;
import
android.os.Bundle
;
import
androidx.databinding.ObservableField
;
import
com.dayu.base.api.Api
;
import
com.dayu.common.BaseApplication
;
import
com.dayu.common.Constants
;
import
com.dayu.event.UserInfo
;
import
com.dayu.order.R
;
...
...
@@ -16,6 +23,7 @@ import com.dayu.order.api.protocol.Order;
import
com.dayu.order.api.protocol.Spu
;
import
com.dayu.order.api.protocol.data.AddDialRecordData
;
import
com.dayu.order.common.OrderConstant
;
import
com.dayu.order.ui.activity.CheckInTakePhotoActivity
;
import
com.dayu.order.ui.activity.MultiProcessOrderActivity
;
import
com.dayu.order.ui.activity.OrderDetailsActivity
;
import
com.dayu.order.ui.activity.OrderDetailsClockActivity
;
...
...
@@ -23,8 +31,10 @@ import com.dayu.order.ui.activity.SopWebViewActivity;
import
com.dayu.order.ui.fragment.OrderDoneFragment
;
import
com.dayu.order.ui.fragment.OrderSecondTabFragment
;
import
com.dayu.order.ui.fragment.OrderThreeTabFragment
;
import
com.dayu.provider.event.RefreshServe
;
import
com.dayu.provider.event.RefreshTab
;
import
com.dayu.utils.AppManager
;
import
com.dayu.utils.ToastUtils
;
import
com.dayu.utils.UserManager
;
import
com.dayu.utils.UtilsDate
;
import
com.dayu.widgets.CustomDialog
;
...
...
@@ -36,6 +46,7 @@ import java.util.ArrayList;
import
java.util.HashMap
;
import
io.reactivex.Observable
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
okhttp3.MediaType
;
import
okhttp3.RequestBody
;
...
...
@@ -53,13 +64,35 @@ public class OrderDoingPresenter extends orderDoingContract.Presenter {
UserInfo
userInfo
;
public
int
sopOrderVersion
;
private
int
position
=
0
;
private
int
checkInPosition
;
private
int
checkinOrderId
;
private
BroadcastReceiver
receiver
=
new
BroadcastReceiver
()
{
@Override
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
if
(
intent
.
getAction
().
equals
(
CheckInTakePhotoActivity
.
TAKE_PHOTO_FINISH_BROADCAST
))
{
clockIn
(
checkinOrderId
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
baseObserver
(
aBoolean
->
{
ToastUtils
.
showShortToast
(
"打卡成功"
);
setPosition
(
position
);
EventBus
.
getDefault
().
post
(
new
RefreshServe
(
1
));
},
responeThrowable
->
{
}));
}
}
};
@Override
public
void
onAttached
()
{
userInfo
=
UserManager
.
getInstance
().
getUser
();
mUserId
=
Integer
.
parseInt
(
userInfo
.
getAccountId
());
mSiteId
=
userInfo
.
getSiteId
();
mState
=
mView
.
getState
();
BaseApplication
.
getContext
().
registerReceiver
(
receiver
,
new
IntentFilter
(
CheckInTakePhotoActivity
.
TAKE_PHOTO_FINISH_BROADCAST
));
}
@Override
...
...
@@ -250,6 +283,13 @@ public class OrderDoingPresenter extends orderDoingContract.Presenter {
}
public
void
takePhoto
(
int
orderId
,
int
position
){
checkinOrderId
=
orderId
;
checkInPosition
=
position
;
Bundle
bundle
=
new
Bundle
();
mView
.
startActivityForReult
(
CheckInTakePhotoActivity
.
class
,
bundle
,
CheckInTakePhotoActivity
.
TAKE_PHOTO_CODE
);
}
public
Observable
<
Boolean
>
clockIn
(
int
id
)
{
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"orderId"
,
id
);
...
...
orderCenter/src/main/java/com/dayu/order/presenter/receivingorder/ReceivingPresenter.java
View file @
f0593799
...
...
@@ -205,6 +205,7 @@ public class ReceivingPresenter extends ReceivingContract.Presenter {
public
void
dumpDetailClock
(
int
orderId
)
{
Bundle
bundle
=
new
Bundle
();
bundle
.
putInt
(
Constants
.
ORDER_ID
,
orderId
);
bundle
.
putBoolean
(
Constants
.
IS_SHOW_BTN
,
true
);
mView
.
startActivity
(
OrderDetailsClockActivity
.
class
,
bundle
);
}
}
orderCenter/src/main/java/com/dayu/order/ui/activity/CheckInTakePhotoActivity.java
0 → 100644
View file @
f0593799
package
com
.
dayu
.
order
.
ui
.
activity
;
import
android.Manifest
;
import
android.annotation.SuppressLint
;
import
android.content.Intent
;
import
android.text.TextUtils
;
import
com.dayu.base.ui.activity.BaseActivity
;
import
com.dayu.order.R
;
import
com.dayu.order.databinding.ActivityCheckInTakePhotoLayoutBinding
;
import
com.dayu.order.presenter.checkintakephoto.CheckInTakePhotoContract
;
import
com.dayu.order.presenter.checkintakephoto.CheckInTakePhotoPresenter
;
import
com.dayu.utils.GlideImageLoader
;
import
com.dayu.utils.MPermissionUtils
;
import
com.dayu.utils.PictrueUtils
;
import
com.luck.picture.lib.basic.PictureSelector
;
import
com.luck.picture.lib.config.PictureConfig
;
import
com.luck.picture.lib.entity.LocalMedia
;
import
java.util.List
;
public
class
CheckInTakePhotoActivity
extends
BaseActivity
<
CheckInTakePhotoPresenter
,
ActivityCheckInTakePhotoLayoutBinding
>
implements
CheckInTakePhotoContract
.
View
{
public
String
photoPath
;
public
static
final
int
TAKE_PHOTO_CODE
=
700
;
public
static
final
String
TAKE_PHOTO_FINISH_BROADCAST
=
"TAKE_PHOTO_FINISH_BROADCAST"
;
@Override
protected
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
if
(
resultCode
==
RESULT_OK
)
{
switch
(
requestCode
)
{
case
PictureConfig
.
CHOOSE_REQUEST
:
List
<
LocalMedia
>
mSelectList
=
PictureSelector
.
obtainSelectorList
(
data
);
if
(
mSelectList
!=
null
)
{
photoPath
=
mSelectList
.
get
(
0
).
getRealPath
();
GlideImageLoader
.
loadDrawable
(
this
,
photoPath
,
mBind
.
photo
);
}
break
;
}
}
}
public
void
selectPhoto
(){
String
[]
mPerArr
=
new
String
[]{
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
};
MPermissionUtils
.
requestPermissionsResult
(
mActivity
,
1
,
mPerArr
,
new
MPermissionUtils
.
OnPermissionListener
()
{
@SuppressLint
(
"CheckResult"
)
@Override
public
void
onPermissionGranted
()
{
PictrueUtils
.
showOriginPicDialog
(
CheckInTakePhotoActivity
.
this
);
}
@Override
public
void
onPermissionDenied
()
{
}
});
}
public
void
uploadPhotoSuccess
(
String
photoUrl
){
//照片上传成功,返回上一页面调打卡接口
if
(!
TextUtils
.
isEmpty
(
photoUrl
)){
Intent
intent
=
new
Intent
();
intent
.
putExtra
(
"photoUrl"
,
photoUrl
);
setResult
(
RESULT_OK
,
intent
);
finish
();
}
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
activity_check_in_take_photo_layout
;
}
@Override
public
void
initView
()
{
mBind
.
titleClose
.
setOnClickListener
(
v
->
onBackPressed
());
}
@Override
public
void
setPresenter
()
{
mBind
.
setPresenter
(
mPresenter
);
}
@Override
public
String
getPhotoPath
()
{
return
photoPath
;
}
}
orderCenter/src/main/java/com/dayu/order/ui/activity/OrderDetailsClockActivity.java
View file @
f0593799
This diff is collapsed.
Click to expand it.
orderCenter/src/main/java/com/dayu/order/ui/adapter/OrderAdapter.java
View file @
f0593799
...
...
@@ -6,7 +6,10 @@ import static com.dayu.utils.UtilsDate.MON_DAY_FORMAT;
import
android.Manifest
;
import
android.app.Activity
;
import
android.content.BroadcastReceiver
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.IntentFilter
;
import
android.graphics.Color
;
import
android.graphics.Typeface
;
import
android.location.Address
;
...
...
@@ -22,6 +25,7 @@ import com.alibaba.android.arouter.launcher.ARouter;
import
com.bigkoo.pickerview.builder.OptionsPickerBuilder
;
import
com.bigkoo.pickerview.view.OptionsPickerView
;
import
com.dayu.base.ui.adapter.CoreAdapter
;
import
com.dayu.common.BaseApplication
;
import
com.dayu.common.Constants
;
import
com.dayu.event.UserInfo
;
import
com.dayu.location.base.LocationUtils
;
...
...
@@ -32,6 +36,7 @@ import com.dayu.order.api.protocol.Spu;
import
com.dayu.order.common.OrderConstant
;
import
com.dayu.order.databinding.FragmentOrderdoingItemBinding
;
import
com.dayu.order.presenter.orderdoing.OrderDoingPresenter
;
import
com.dayu.order.ui.activity.CheckInTakePhotoActivity
;
import
com.dayu.order.ui.activity.ProcessOrderActivity
;
import
com.dayu.order.ui.activity.ServerInfoActivity
;
import
com.dayu.order.ui.activity.ServerListActivity
;
...
...
@@ -177,7 +182,7 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
LinearLayout
.
LayoutParams
params
=
(
LinearLayout
.
LayoutParams
)
holder
.
tvOrderTime
.
getLayoutParams
();
params
.
topMargin
+=
20
;
holder
.
tvOrderTime
.
setLayoutParams
(
params
);
holder
.
tvCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvCount
.
setVisibility
(
holder
.
tvPrice
.
getVisibility
()
);
holder
.
tvDaysCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvDaysCount
.
setText
(
item
.
getReferenceTime
()
+
"天"
);
}
...
...
@@ -215,12 +220,13 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
}
holder
.
itemUpdataTime
.
setText
(
mContext
.
getString
(
R
.
string
.
modify_appointment_time
));
int
source
=
item
.
getSource
();
if
(
7
==
source
){
if
(
7
==
source
||
8
==
source
){
if
(
3
==
item
.
getStatus
()){
holder
.
tvItemEnd
.
setText
(
mContext
.
getString
(
R
.
string
.
begain_server
));
}
else
if
(
4
==
item
.
getStatus
()){
if
(
7
!=
item
.
getSubStatus
()){
holder
.
tvItemEnd
.
setText
(
"第"
+
item
.
getFinishedDays
()
+
"天打卡"
);
// holder.tvItemEnd.setText("第"+item.getFinishedDays() +"天打卡");
holder
.
tvItemEnd
.
setText
(
Integer
.
parseInt
(
item
.
getFinishedDays
())%
2
==
0
?
"下班打卡"
:
"上班打卡"
);
}
else
{
holder
.
tvItemEnd
.
setText
(
mContext
.
getString
(
R
.
string
.
submit_order
));
}
...
...
@@ -261,6 +267,15 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
// holder.orderLineTwo.setVisibility(View.VISIBLE);
}
//按天用工单
holder
.
tvOrderTime
.
setText
(
R
.
string
.
start_day
);
LinearLayout
.
LayoutParams
params
=
(
LinearLayout
.
LayoutParams
)
holder
.
tvOrderTime
.
getLayoutParams
();
params
.
topMargin
+=
20
;
holder
.
tvOrderTime
.
setLayoutParams
(
params
);
holder
.
tvCount
.
setVisibility
(
holder
.
tvPrice
.
getVisibility
());
holder
.
tvDaysCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvDaysCount
.
setText
(
item
.
getReferenceTime
()
+
"天"
);
}
else
{
holder
.
itemTextPhone
.
setVisibility
(
View
.
VISIBLE
);
holder
.
orderLineOne
.
setVisibility
(
View
.
VISIBLE
);
...
...
@@ -313,7 +328,7 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
LinearLayout
.
LayoutParams
params
=
(
LinearLayout
.
LayoutParams
)
holder
.
tvOrderTime
.
getLayoutParams
();
params
.
topMargin
+=
20
;
holder
.
tvOrderTime
.
setLayoutParams
(
params
);
holder
.
tvCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvCount
.
setVisibility
(
holder
.
tvPrice
.
getVisibility
()
);
holder
.
tvDaysCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvDaysCount
.
setText
(
item
.
getReferenceTime
()
+
"天"
);
}
...
...
@@ -323,12 +338,13 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
holder
.
tvItemEnd
.
setVisibility
(
View
.
VISIBLE
);
int
source1
=
item
.
getSource
();
if
(
7
==
source1
){
if
(
7
==
source1
||
8
==
source1
){
if
(
3
==
item
.
getStatus
()){
holder
.
tvItemEnd
.
setText
(
mContext
.
getString
(
R
.
string
.
begain_server
));
}
else
if
(
4
==
item
.
getStatus
()){
if
(
7
!=
item
.
getSubStatus
()){
holder
.
tvItemEnd
.
setText
(
"第"
+
item
.
getFinishedDays
()
+
"天打卡"
);
// holder.tvItemEnd.setText("第"+item.getFinishedDays() +"天打卡");
holder
.
tvItemEnd
.
setText
(
Integer
.
parseInt
(
item
.
getFinishedDays
())%
2
==
0
?
"下班打卡"
:
"上班打卡"
);
}
else
{
holder
.
tvItemEnd
.
setText
(
mContext
.
getString
(
R
.
string
.
submit_order
));
}
...
...
@@ -339,6 +355,15 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
holder
.
rlItemMid
.
setVisibility
(
View
.
GONE
);
holder
.
orderLineTwo
.
setVisibility
(
View
.
GONE
);
//按天用工单
holder
.
tvOrderTime
.
setText
(
R
.
string
.
start_day
);
LinearLayout
.
LayoutParams
params
=
(
LinearLayout
.
LayoutParams
)
holder
.
tvOrderTime
.
getLayoutParams
();
params
.
topMargin
+=
20
;
holder
.
tvOrderTime
.
setLayoutParams
(
params
);
holder
.
tvCount
.
setVisibility
(
holder
.
tvPrice
.
getVisibility
());
holder
.
tvDaysCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvDaysCount
.
setText
(
item
.
getReferenceTime
()
+
"天"
);
if
(
item
.
getSubStatus
()
==
6
)
{
holder
.
tvErrorState
.
setText
(
mContext
.
getString
(
R
.
string
.
check_upon_delivery
));
holder
.
tvErrorState
.
setTextColor
(
mContext
.
getResources
().
getColor
(
R
.
color
.
cl_tab_line
));
...
...
@@ -465,7 +490,7 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
LinearLayout
.
LayoutParams
params
=
(
LinearLayout
.
LayoutParams
)
holder
.
tvOrderTime
.
getLayoutParams
();
params
.
topMargin
+=
20
;
holder
.
tvOrderTime
.
setLayoutParams
(
params
);
holder
.
tvCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvCount
.
setVisibility
(
holder
.
tvPrice
.
getVisibility
()
);
holder
.
tvDaysCount
.
setVisibility
(
View
.
VISIBLE
);
holder
.
tvDaysCount
.
setText
(
item
.
getReferenceTime
()
+
"天"
);
}
...
...
@@ -630,20 +655,21 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
mBind
=
h
;
if
(
7
==
it
.
getSource
()){
if
(
7
==
it
.
getSource
()
||
8
==
it
.
getSource
()
){
if
(
3
==
it
.
getStatus
()){
startServer
(
h
,
position
);
}
else
if
(
4
==
it
.
getStatus
()){
if
(
7
!=
it
.
getSubStatus
()){
mPresenter
.
clockIn
(
it
.
getId
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
mPresenter
.
baseObserver
(
aBoolean
->
{
ToastUtils
.
showShortToast
(
"打卡成功"
);
mPresenter
.
setPosition
(
position
);
EventBus
.
getDefault
().
post
(
new
RefreshServe
(
1
));
},
responeThrowable
->
{
}));
// mPresenter.clockIn(it.getId())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(mPresenter.baseObserver(aBoolean -> {
// ToastUtils.showShortToast("打卡成功");
// mPresenter.setPosition(position);
// EventBus.getDefault().post(new RefreshServe(1));
// }, responeThrowable -> {
//
// }));
mPresenter
.
takePhoto
(
it
.
getId
(),
position
);
}
else
{
mPresenter
.
commit
(
it
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
...
...
@@ -760,11 +786,11 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
}
private
void
startFirstServe
(
FragmentOrderdoingItemBinding
h
,
int
position
)
{
if
(
mItem
.
getSubStatus
()
==
1
||
mItem
.
getSubStatus
()
==
2
||
(
mItem
.
getSource
()
==
7
))
{
if
(
mItem
.
getSubStatus
()
==
1
||
mItem
.
getSubStatus
()
==
2
||
(
mItem
.
getSource
()
==
7
||
mItem
.
getSource
()
==
8
))
{
mPresenter
.
startServer
(
mItem
.
getId
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
mPresenter
.
baseObserver
(
integer
->
{
if
(
mItem
.
getSource
()
==
7
){
if
(
mItem
.
getSource
()
==
7
||
mItem
.
getSource
()
==
8
){
ToastUtils
.
showShortToast
(
"开始服务操作成功"
);
ProgressUtil
.
stopLoad
();
mPresenter
.
setPosition
(
position
);
...
...
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderFirstTabFragment.java
View file @
f0593799
...
...
@@ -43,7 +43,7 @@ public class OrderFirstTabFragment extends BaseFragment<OrderDoingPresenter, Fra
mBind
.
recyclerView
.
setOnItemClickListener
(
new
OnItemClickListener
<
Order
,
FragmentOrderdoingItemBinding
>()
{
@Override
public
void
OnItemClick
(
Order
item
,
FragmentOrderdoingItemBinding
bind
)
{
if
(
7
==
item
.
getSource
()){
if
(
7
==
item
.
getSource
()
||
8
==
item
.
getSource
()
){
mPresenter
.
dumpDetailClock
(
item
.
getId
());
}
else
{
mPresenter
.
dumpDetail
(
item
.
getId
());
...
...
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderFourTabFragment.java
View file @
f0593799
...
...
@@ -36,7 +36,7 @@ public class OrderFourTabFragment extends BaseFragment<OrderDoingPresenter, Frag
mBind
.
recyclerView
.
setOnItemClickListener
(
new
OnItemClickListener
<
Order
,
FragmentOrderCancleItemBinding
>()
{
@Override
public
void
OnItemClick
(
Order
item
,
FragmentOrderCancleItemBinding
bind
)
{
if
(
7
==
item
.
getSource
()){
if
(
7
==
item
.
getSource
()
||
8
==
item
.
getSource
()
){
mPresenter
.
dumpDetailClock
(
item
.
getId
());
}
else
{
mPresenter
.
dumpDetail
(
item
.
getId
());
...
...
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderReceivingFragment.java
View file @
f0593799
...
...
@@ -79,8 +79,8 @@ public class OrderReceivingFragment extends BaseFragment<ReceivingPresenter, Fra
if
(
4
==
item
.
getSource
()
&&
item
.
getReceiveOrderCommission
()
>
0
)
{
showCashDialog
(
item
.
getReceiveOrderCommission
(),
mUserId
,
item
.
getId
(),
item
.
getAppointmentTime
());
}
else
{
if
(
7
==
item
.
getSource
()){
mPresenter
.
dumpDetailClock
(
item
.
getId
());
if
(
7
==
item
.
getSource
()
||
8
==
item
.
getSource
()
){
mPresenter
.
dumpDetailClock
(
item
.
getId
());
}
else
{
mPresenter
.
dumpDetail
(
item
.
getId
());
}
...
...
orderCenter/src/main/java/com/dayu/order/ui/fragment/OrderSecondTabFragment.java
View file @
f0593799
...
...
@@ -59,7 +59,7 @@ public class OrderSecondTabFragment extends BaseFragment<OrderDoingPresenter, Fr
mBind
.
recyclerView
.
setOnItemClickListener
(
new
OnItemClickListener
<
Order
,
FragmentOrderdoingItemBinding
>()
{
@Override
public
void
OnItemClick
(
Order
item
,
FragmentOrderdoingItemBinding
bind
)
{
if
(
7
==
item
.
getSource
()){
if
(
7
==
item
.
getSource
()
||
8
==
item
.
getSource
()
){
mPresenter
.
dumpDetailClockSecond
(
item
.
getId
());
}
else
{
mPresenter
.
dumpDetail
(
item
.
getId
());
...
...
orderCenter/src/main/release/AndroidManifest.xml
View file @
f0593799
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.dayu.order"
>
...
...
@@ -15,14 +16,17 @@
android:name=
".ui.activity.SubcribeTimeActivity"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
"
com.dayu.order
.ui.activity.ReceivingActivity"
android:name=
".ui.activity.ReceivingActivity"
android:screenOrientation=
"portrait"
android:theme=
"@style/Transparent"
/>
<activity
android:name=
"
com.dayu.order
.ui.activity.OrderRecordActivity"
android:name=
".ui.activity.OrderRecordActivity"
android:screenOrientation=
"portrait"
android:theme=
"@style/Transparent"
/>
<activity
android:name=
".ui.activity.CheckInTakePhotoActivity"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ui.activity.ProcessOrderActivity"
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:screenOrientation=
"portrait"
/>
...
...
@@ -40,18 +44,16 @@
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ui.activity.OrderDetailsActivity"
android:launchMode=
"singleTask"
android:windowSoftInputMode=
"adjustResize"
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:launchMode=
"singleTask"
android:screenOrientation=
"portrait"
/>
android:windowSoftInputMode=
"adjustResize"
/>
<activity
android:name=
".ui.activity.OrderDetailsClockActivity"
android:launchMode=
"singleTask"
android:windowSoftInputMode=
"adjustResize"
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:launchMode=
"singleTask"
android:screenOrientation=
"portrait"
/>
android:windowSoftInputMode=
"adjustResize"
/>
<activity
android:name=
".ui.activity.ReturnPartNewActivity"
android:screenOrientation=
"portrait"
/>
...
...
@@ -79,8 +81,8 @@
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ui.activity.MultiProcessOrderActivity"
android:hardwareAccelerated=
"true"
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:hardwareAccelerated=
"true"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ui.activity.SignatureActivity"
...
...
@@ -93,9 +95,9 @@
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ui.activity.SopLocalActivity"
android:windowSoftInputMode=
"stateHidden|adjustPan"
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:screenOrientation=
"portrait"
/>
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"stateHidden|adjustPan"
/>
<activity
android:name=
".ui.activity.ApplyAndRefuseActivity"
android:screenOrientation=
"portrait"
/>
...
...
@@ -105,17 +107,14 @@
<activity
android:name=
".ui.activity.OrderPartReceiveActivity"
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"stateHidden|adjustPan"
/>
android:windowSoftInputMode=
"stateHidden|adjustPan"
/>
<activity
android:name=
".ui.activity.OrderPartSendActivity"
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"stateHidden|adjustPan"
/>
android:windowSoftInputMode=
"stateHidden|adjustPan"
/>
<activity
android:name=
".ui.activity.KnowledgeDetailActivity"
android:screenOrientation=
"portrait"
/>
android:screenOrientation=
"portrait"
/>
</application>
</manifest>
</manifest>
\ No newline at end of file
orderCenter/src/main/res/drawable-xhdpi/photo_default.png
0 → 100644
View file @
f0593799
7.07 KB
orderCenter/src/main/res/layout/activity_check_in_take_photo_layout.xml
0 → 100644
View file @
f0593799
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<data>
<variable
name=
"presenter"
type=
"com.dayu.order.presenter.checkintakephoto.CheckInTakePhotoPresenter"
/>
</data>
<LinearLayout
android:orientation=
"vertical"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<RelativeLayout
android:id=
"@+id/title_close"
android:orientation=
"vertical"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/size_main_title"
android:background=
"#e8e8e8"
>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_centerVertical=
"true"
android:layout_marginLeft=
"@dimen/dp_15"
android:textColor=
"#333"
android:textStyle=
"bold"
android:text=
"工作现场拍照打卡记录"
/>
<ImageView
android:id=
"@+id/receiving_back"
android:src=
"@drawable/btn_close_black"
style=
"@style/title_right_image"
/>
</RelativeLayout>
<ImageView
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_weight=
"1"
android:id=
"@+id/photo"
android:src=
"@drawable/photo_default"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
android:gravity=
"bottom"
android:layout_marginTop=
"@dimen/dp_20"
android:layout_marginBottom=
"@dimen/dp_20"
>
<TextView
android:id=
"@+id/select_photo"
android:layout_width=
"0dp"
android:layout_weight=
"1"
android:layout_height=
"40dp"
android:layout_marginLeft=
"15dp"
android:layout_marginRight=
"15dp"
android:layout_marginTop=
"25dp"
android:background=
"@drawable/tab_blue_react"
android:gravity=
"center"
android:onClick=
"@{()->presenter.selectPhoto()}"
android:text=
"选择图片"
android:textStyle=
"bold"
android:textColor=
"@color/white"
android:textSize=
"16sp"
/>
<TextView
android:id=
"@+id/submit"
android:layout_width=
"0dp"
android:layout_weight=
"1"
android:layout_height=
"40dp"
android:layout_marginLeft=
"15dp"
android:layout_marginRight=
"15dp"
android:layout_marginTop=
"25dp"
android:background=
"@drawable/tab_blue_react"
android:gravity=
"center"
android:onClick=
"@{()->presenter.submit()}"
android:text=
"提交"
android:textStyle=
"bold"
android:textColor=
"@color/white"
android:textSize=
"16sp"
/>
</LinearLayout>
</LinearLayout>
</layout>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment