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
68111243
authored
Apr 10, 2018
by
罗翻
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
测试小红点
parent
654304eb
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
400 additions
and
18 deletions
app/src/main/AndroidManifest.xml
app/src/main/java/com/dayu/bigfish/ui/MainActivity.java
app/src/main/java/com/dayu/bigfish/utils/HxManager.java
baseSDK/src/main/java/com/dayu/common/Constants.java
baseSDK/src/main/java/com/dayu/utils/badgeNumberManger/BadgeNumberManager.java
baseSDK/src/main/java/com/dayu/utils/badgeNumberManger/BadgeNumberUtils.java
baseSDK/src/main/java/com/dayu/utils/badgeNumberManger/MobileBrand.java
app/src/main/AndroidManifest.xml
View file @
68111243
...
...
@@ -38,6 +38,10 @@
<uses-permission
android:name=
"android.permission.BLUETOOTH"
/>
<uses-permission
android:name=
"android.permission.BLUETOOTH_ADMIN"
/>
<!--华为小红点-->
<uses-permission
android:name=
"com.huawei.android.launcher.permission.CHANGE_BADGE"
/>
<application
android:name=
".MyApplication"
android:allowBackup=
"true"
...
...
app/src/main/java/com/dayu/bigfish/ui/MainActivity.java
View file @
68111243
...
...
@@ -37,6 +37,7 @@ import com.dayu.provider.event.RefreshReceivingNum;
import
com.dayu.provider.event.SwtichFragment
;
import
com.dayu.provider.router.RouterPath
;
import
com.dayu.usercenter.ui.fragment.HomePersonFragment
;
import
com.dayu.utils.badgeNumberManger.BadgeNumberManager
;
import
com.dayu.widgets.CustomDialog
;
import
com.dayu.widgets.listener.onDownloadListener
;
import
com.umeng.analytics.MobclickAgent
;
...
...
@@ -46,6 +47,8 @@ import org.greenrobot.eventbus.Subscribe;
import
org.greenrobot.eventbus.ThreadMode
;
import
java.io.File
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by luofan
...
...
@@ -230,14 +233,18 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
private
void
doAction
(
Intent
intent
)
{
InformBean
info
=
(
InformBean
)
intent
.
getSerializableExtra
(
Constants
.
MESSAGE_INFO
);
if
(
info
!=
null
)
{
Map
<
String
,
String
>
map_ekv
=
new
HashMap
<>();
if
(
info
.
getCategory
()
==
1
&&
(
info
.
getFunctionType
()
==
2
))
{
dumpReceActivity
();
//待接单列表
map_ekv
.
put
(
"type"
,
mActivity
.
getString
(
com
.
dayu
.
order
.
R
.
string
.
receive_list
));
}
else
{
int
secondIndex
=
0
;
if
(
info
.
getCategory
()
==
1
)
{
secondIndex
=
0
;
//系统通知
map_ekv
.
put
(
"type"
,
mActivity
.
getString
(
com
.
dayu
.
order
.
R
.
string
.
message_system
));
}
else
if
(
info
.
getCategory
()
==
2
)
{
secondIndex
=
1
;
//大鱼通知
map_ekv
.
put
(
"type"
,
mActivity
.
getString
(
com
.
dayu
.
order
.
R
.
string
.
message_dayu
));
}
showHideFragment
(
2
,
mPosition
);
mBind
.
ivMessage
.
setVisibility
(
View
.
GONE
);
...
...
@@ -246,6 +253,7 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
thirdFragment
.
swtichFragment
(
secondIndex
);
}
}
MobclickAgent
.
onEvent
(
mActivity
,
"notificaition_click"
,
map_ekv
);
}
}
...
...
@@ -273,6 +281,7 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
public
void
onPause
()
{
super
.
onPause
();
MobclickAgent
.
onPause
(
this
);
BadgeNumberManager
.
from
(
mActivity
).
setBadgeNumber
(
0
);
}
@Override
...
...
app/src/main/java/com/dayu/bigfish/utils/HxManager.java
View file @
68111243
...
...
@@ -8,10 +8,10 @@ import android.content.Context;
import
android.content.Intent
;
import
android.support.v4.app.NotificationCompat
;
import
com.dayu.common.Constants
;
import
com.dayu.bigfish.R
;
import
com.dayu.bigfish.api.protocol.InformBean
;
import
com.dayu.bigfish.ui.MainActivity
;
import
com.dayu.common.Constants
;
import
com.google.gson.Gson
;
import
com.hyphenate.EMMessageListener
;
import
com.hyphenate.chat.EMClient
;
...
...
@@ -88,7 +88,7 @@ public class HxManager {
NotificationManager
notificationManager
=
(
NotificationManager
)
mContext
.
getSystemService
(
Context
.
NOTIFICATION_SERVICE
);
NotificationCompat
.
Builder
builder
=
new
NotificationCompat
.
Builder
(
mContext
);
// 设置打开通知,该通知取消
builder
.
setAutoCancel
(
true
)
Notification
notification
=
builder
.
setAutoCancel
(
true
)
// 设置通知提示信息
.
setTicker
(
info
.
getTitle
())
// 设置通知的图标
...
...
@@ -106,8 +106,11 @@ public class HxManager {
// 设置将要启动的活动
.
setContentIntent
(
pi
)
.
build
();
notificationManager
.
notify
(
0
,
builder
.
build
());
if
(
notificationManager
!=
null
){
notificationManager
.
notify
(
0
,
builder
.
build
());
}
// BadgeNumberManager.from(mContext).setBadgeNumber(messages.size());
// BadgeNumberUtils.setBadgeNumberXiaoMi(notification,messages.size());
}
}
...
...
baseSDK/src/main/java/com/dayu/common/Constants.java
View file @
68111243
...
...
@@ -12,13 +12,13 @@ public class Constants {
/**
* 测试环境配置.
*/
//
public static final int LOG_LEVEL = LogUtils.LEVEL_ALL;
//
public static final String ENVIROMENT = "debug";
//
public static final String BASE_URL = "http://47.94.101.239:3112";
//
public final static String UP_PHOTO = "/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply";
//
public final static String WEB_SOP = "http://47.94.101.239:9004/#/sop";
//
public final static String WEB_ZHI_SHI = "http://47.94.101.239:9004/#/detail";
//
public static final boolean IS_DEBUG = true;
public
static
final
int
LOG_LEVEL
=
LogUtils
.
LEVEL_ALL
;
public
static
final
String
ENVIROMENT
=
"debug"
;
public
static
final
String
BASE_URL
=
"http://47.94.101.239:3112"
;
public
final
static
String
UP_PHOTO
=
"/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply"
;
public
final
static
String
WEB_SOP
=
"http://47.94.101.239:9004/#/sop"
;
public
final
static
String
WEB_ZHI_SHI
=
"http://47.94.101.239:9004/#/detail"
;
public
static
final
boolean
IS_DEBUG
=
true
;
/**
* uat环境配置.
...
...
@@ -34,13 +34,13 @@ public class Constants {
/**
* 正式环境.
*/
public
static
final
String
ENVIROMENT
=
"release"
;
public
static
final
int
LOG_LEVEL
=
LogUtils
.
LEVEL_OFF
;
public
static
final
String
BASE_URL
=
"https://mobile.kf.ai"
;
public
final
static
String
UP_PHOTO
=
"/file/uploadMore?targetPath=online/sp/mobile/android/business/checkApply"
;
public
final
static
String
WEB_SOP
=
"https://sop.kf.ai/#/sop"
;
public
final
static
String
WEB_ZHI_SHI
=
"https://sop.kf.ai/#/detail"
;
public
static
final
boolean
IS_DEBUG
=
false
;
//
public static final String ENVIROMENT = "release";
//
public static final int LOG_LEVEL = LogUtils.LEVEL_OFF;
//
public static final String BASE_URL = "https://mobile.kf.ai";
//
public final static String UP_PHOTO = "/file/uploadMore?targetPath=online/sp/mobile/android/business/checkApply";
//
public final static String WEB_SOP = "https://sop.kf.ai/#/sop";
//
public final static String WEB_ZHI_SHI = "https://sop.kf.ai/#/detail";
//
public static final boolean IS_DEBUG = false;
/**
* 演示环境
...
...
baseSDK/src/main/java/com/dayu/utils/badgeNumberManger/BadgeNumberManager.java
0 → 100755
View file @
68111243
package
com
.
dayu
.
utils
.
badgeNumberManger
;
import
android.content.Context
;
import
android.os.Build
;
/**
* 应用桌面角标设置的管理类
* Created by zlq on 2017 17/8/23 14:50.
*/
public
class
BadgeNumberManager
{
private
Context
mContext
;
private
BadgeNumberManager
(
Context
context
)
{
mContext
=
context
;
}
public
static
BadgeNumberManager
from
(
Context
context
)
{
return
new
BadgeNumberManager
(
context
);
}
private
static
final
Impl
IMPL
;
/**
* 设置应用在桌面上显示的角标数字
*
* @param number 显示的数字
*/
public
void
setBadgeNumber
(
int
number
)
{
IMPL
.
setBadgeNumber
(
mContext
,
number
);
}
interface
Impl
{
void
setBadgeNumber
(
Context
context
,
int
number
);
}
static
class
IMplSamsung
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberSamSung
(
context
,
number
);
}
}
static
class
ImplHuaWei
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberHuaWei
(
context
,
number
);
}
}
static
class
ImplXiaoMi
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
//小米机型的桌面应用角标API跟通知绑定在一起了,所以单独做处理
// BadgeNumberManagerXiaoMi.setBadgeNumber(context, number);
}
}
static
class
ImplVIVO
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberVIVO
(
context
,
number
);
}
}
static
class
ImplOPPO
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberOPPO
(
context
,
number
);
}
}
static
class
ImplZUK
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberZUK
(
context
,
number
);
}
}
static
class
ImplSONY
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberSony
(
context
,
number
);
}
}
static
class
ImplHTC
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberHTC
(
context
,
number
);
}
}
static
class
ImplNOVA
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
BadgeNumberUtils
.
setBadgeNumberNOVA
(
context
,
number
);
}
}
static
class
ImplBase
implements
Impl
{
@Override
public
void
setBadgeNumber
(
Context
context
,
int
number
)
{
//do nothing
}
}
static
{
String
manufacturer
=
Build
.
MANUFACTURER
;
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
HUAWEI
))
{
IMPL
=
new
ImplHuaWei
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
XIAOMI
))
{
IMPL
=
new
ImplXiaoMi
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
VIVO
))
{
IMPL
=
new
ImplVIVO
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
OPPO
))
{
IMPL
=
new
ImplOPPO
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
SAMSUNG
)
||
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
LG
))
{
IMPL
=
new
IMplSamsung
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
ZUK
))
{
IMPL
=
new
ImplZUK
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
SONY
))
{
IMPL
=
new
ImplSONY
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
HTC
))
{
IMPL
=
new
ImplHTC
();
}
else
if
(
manufacturer
.
equalsIgnoreCase
(
MobileBrand
.
NOVA
))
{
IMPL
=
new
ImplNOVA
();
}
else
{
IMPL
=
new
ImplBase
();
}
}
}
baseSDK/src/main/java/com/dayu/utils/badgeNumberManger/BadgeNumberUtils.java
0 → 100644
View file @
68111243
package
com
.
dayu
.
utils
.
badgeNumberManger
;
import
android.app.Notification
;
import
android.content.ContentValues
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.content.pm.ResolveInfo
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.util.Log
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.util.List
;
/**
* Created by luofan
* on 2018/4/10.
*/
public
class
BadgeNumberUtils
{
/**
* 设置应用的桌面角标,已在一些华为手机上测试通过,但是无法保证在所有华为手机上都生效
*
* @param context context
* @param number 角标显示的数字
*/
public
static
void
setBadgeNumberHuaWei
(
Context
context
,
int
number
)
{
try
{
if
(
number
<
0
)
number
=
0
;
Bundle
bundle
=
new
Bundle
();
bundle
.
putString
(
"package"
,
context
.
getPackageName
());
String
launchClassName
=
context
.
getPackageManager
().
getLaunchIntentForPackage
(
context
.
getPackageName
()).
getComponent
().
getClassName
();
bundle
.
putString
(
"class"
,
launchClassName
);
bundle
.
putInt
(
"badgenumber"
,
number
);
context
.
getContentResolver
().
call
(
Uri
.
parse
(
"content://com.huawei.android.launcher.settings/badge/"
),
"change_badge"
,
null
,
bundle
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
static
void
setBadgeNumberOPPO
(
Context
context
,
int
number
)
{
try
{
if
(
number
==
0
)
{
number
=
-
1
;
}
Intent
intent
=
new
Intent
(
"com.oppo.unsettledevent"
);
intent
.
putExtra
(
"pakeageName"
,
context
.
getPackageName
());
intent
.
putExtra
(
"number"
,
number
);
intent
.
putExtra
(
"upgradeNumber"
,
number
);
if
(
canResolveBroadcast
(
context
,
intent
))
{
context
.
sendBroadcast
(
intent
);
}
else
{
try
{
Bundle
extras
=
new
Bundle
();
extras
.
putInt
(
"app_badge_count"
,
number
);
context
.
getContentResolver
().
call
(
Uri
.
parse
(
"content://com.android.badge/badge"
),
"setAppBadgeCount"
,
null
,
extras
);
}
catch
(
Throwable
th
)
{
Log
.
e
(
"OPPO"
+
" Badge error"
,
"unable to resolve intent: "
+
intent
.
toString
());
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Log
.
e
(
"OPPO"
+
" Badge error"
,
"set Badge failed"
);
}
}
public
static
boolean
canResolveBroadcast
(
Context
context
,
Intent
intent
)
{
PackageManager
packageManager
=
context
.
getPackageManager
();
List
<
ResolveInfo
>
receivers
=
packageManager
.
queryBroadcastReceivers
(
intent
,
0
);
return
receivers
!=
null
&&
receivers
.
size
()
>
0
;
}
//三星和LG
static
void
setBadgeNumberSamSung
(
Context
context
,
int
num
)
{
// 获取你当前的应用
String
launcherClassName
=
context
.
getPackageManager
().
getLaunchIntentForPackage
(
context
.
getPackageName
()).
getComponent
().
getClassName
();
try
{
Intent
intent
=
new
Intent
(
"android.intent.action.BADGE_COUNT_UPDATE"
);
intent
.
putExtra
(
"badge_count"
,
num
);
intent
.
putExtra
(
"badge_count_package_name"
,
context
.
getPackageName
());
intent
.
putExtra
(
"badge_count_class_name"
,
launcherClassName
);
context
.
sendBroadcast
(
intent
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Log
.
e
(
"SAMSUNG"
+
" Badge error"
,
"set Badge failed"
);
}
}
//vivo
public
static
void
setBadgeNumberVIVO
(
Context
context
,
int
number
)
{
try
{
Intent
intent
=
new
Intent
(
"launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM"
);
intent
.
putExtra
(
"packageName"
,
context
.
getPackageName
());
String
launchClassName
=
context
.
getPackageManager
().
getLaunchIntentForPackage
(
context
.
getPackageName
()).
getComponent
().
getClassName
();
intent
.
putExtra
(
"className"
,
launchClassName
);
intent
.
putExtra
(
"notificationNum"
,
number
);
context
.
sendBroadcast
(
intent
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
//xiaomi
public
static
void
setBadgeNumberXiaoMi
(
Notification
notification
,
int
number
)
{
try
{
Field
field
=
notification
.
getClass
().
getDeclaredField
(
"extraNotification"
);
Object
extraNotification
=
field
.
get
(
notification
);
Method
method
=
extraNotification
.
getClass
().
getDeclaredMethod
(
"setMessageCount"
,
int
.
class
);
method
.
invoke
(
extraNotification
,
number
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
//ZUK
static
void
setBadgeNumberZUK
(
Context
context
,
int
num
)
{
final
Uri
CONTENT_URI
=
Uri
.
parse
(
"content://com.android.badge/badge"
);
try
{
Bundle
extra
=
new
Bundle
();
extra
.
putInt
(
"app_badge_count"
,
num
);
context
.
getContentResolver
().
call
(
CONTENT_URI
,
"setAppBadgeCount"
,
null
,
extra
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Log
.
e
(
"ZUK"
+
" Badge error"
,
"set Badge failed"
);
}
}
//索尼
static
void
setBadgeNumberSony
(
Context
context
,
int
num
)
{
String
numString
=
""
;
// 获取你当前的应用
String
activityName
=
context
.
getPackageManager
().
getLaunchIntentForPackage
(
context
.
getPackageName
()).
getComponent
().
getClassName
();
Intent
localIntent
=
new
Intent
();
// int numInt = Integer.valueOf(num);
boolean
isShow
=
true
;
if
(
num
<
1
)
{
numString
=
""
;
isShow
=
false
;
}
else
if
(
num
>
99
)
{
numString
=
"99"
;
}
try
{
localIntent
.
putExtra
(
"com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE"
,
isShow
);
localIntent
.
setAction
(
"com.sonyericsson.home.action.UPDATE_BADGE"
);
localIntent
.
putExtra
(
"com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME"
,
activityName
);
localIntent
.
putExtra
(
"com.sonyericsson.home.intent.extra.badge.MESSAGE"
,
numString
);
localIntent
.
putExtra
(
"com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME"
,
context
.
getPackageName
());
context
.
sendBroadcast
(
localIntent
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Log
.
e
(
"SONY"
+
" Badge error"
,
"set Badge failed"
);
}
}
//HTC
static
void
setBadgeNumberHTC
(
Context
context
,
int
num
){
try
{
Intent
intent1
=
new
Intent
(
"com.htc.launcher.action.SET_NOTIFICATION"
);
intent1
.
putExtra
(
"com.htc.launcher.extra.COMPONENT"
,
context
.
getPackageManager
().
getLaunchIntentForPackage
(
context
.
getPackageName
()).
getComponent
().
flattenToShortString
());
intent1
.
putExtra
(
"com.htc.launcher.extra.COUNT"
,
num
);
Intent
intent
=
new
Intent
(
"com.htc.launcher.action.UPDATE_SHORTCUT"
);
intent
.
putExtra
(
"packagename"
,
context
.
getPackageName
());
intent
.
putExtra
(
"count"
,
num
);
if
(
canResolveBroadcast
(
context
,
intent1
)
||
canResolveBroadcast
(
context
,
intent
))
{
context
.
sendBroadcast
(
intent1
);
context
.
sendBroadcast
(
intent
);
}
else
{
Log
.
e
(
"HTC"
+
" Badge error"
,
"unable to resolve intent: "
+
intent
.
toString
());
}
}
catch
(
Exception
e
){
e
.
printStackTrace
();
Log
.
e
(
"HTC"
+
" Badge error"
,
"set Badge failed"
);
}
}
//NOVA
static
void
setBadgeNumberNOVA
(
Context
context
,
int
num
){
try
{
ContentValues
contentValues
=
new
ContentValues
();
contentValues
.
put
(
"tag"
,
context
.
getPackageName
()+
"/"
+
context
.
getPackageManager
().
getLaunchIntentForPackage
(
context
.
getPackageName
()).
getComponent
().
getClassName
());
contentValues
.
put
(
"count"
,
num
);
context
.
getContentResolver
().
insert
(
Uri
.
parse
(
"content://com.teslacoilsw.notifier/unread_count"
),
contentValues
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
Log
.
e
(
"NOVA"
+
" Badge error"
,
"set Badge failed"
);
}
}
}
baseSDK/src/main/java/com/dayu/utils/badgeNumberManger/MobileBrand.java
0 → 100755
View file @
68111243
package
com
.
dayu
.
utils
.
badgeNumberManger
;
/**
* 手机的 Build.MANUFACTURER 常量
* Created by zlq on 2017 17/8/22 18:08.
*/
public
class
MobileBrand
{
public
final
static
String
HUAWEI
=
"Huawei"
;
public
final
static
String
MEIZU
=
"Meizu"
;
public
final
static
String
XIAOMI
=
"Xiaomi"
;
public
final
static
String
SONY
=
"Sony"
;
public
final
static
String
OPPO
=
"OPPO"
;
public
final
static
String
VIVO
=
"vivo"
;
public
final
static
String
SAMSUNG
=
"samsung"
;
public
final
static
String
LG
=
"LG"
;
public
final
static
String
LETV
=
"Letv"
;
public
final
static
String
ZTE
=
"ZTE"
;
public
final
static
String
YULONG
=
"YuLong"
;
public
final
static
String
LENOVO
=
"LENOVO"
;
public
final
static
String
ZUK
=
"ZUK"
;
public
final
static
String
HTC
=
"HTC"
;
public
final
static
String
NOVA
=
"NOVA"
;
}
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