diff --git a/app/build.gradle b/app/build.gradle index 4c08c88d79..ebad8802ce 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ apply plugin: 'kotlin-kapt' // apkChannelPackage apply plugin: 'channel' -apply from: 'tinker-support.gradle' +//apply from: 'tinker-support.gradle' android { @@ -249,7 +249,7 @@ dependencies { implementation "com.sina.weibo.sdk:core:${weiboSDK}" // bugly with tinker support - implementation "com.tencent.bugly:crashreport_upgrade:${buglyTinkerSupport}" +// implementation "com.tencent.bugly:crashreport_upgrade:${buglyTinkerSupport}" implementation "com.google.android:flexbox:${flexbox}" @@ -289,9 +289,9 @@ dependencies { debugImplementation "com.github.nichbar.chucker:library:$chucker" releaseImplementation "com.github.nichbar.chucker:library-no-op:$chucker" - implementation "com.bytedance.applog:RangersAppLog-Lite-cn:$bytedanceApplog" - implementation "com.bytedance.ies.ugc.aweme:opensdk-china-external:$bytedanceAweme" - implementation "com.bytedance.ies.ugc.aweme:opensdk-common:$bytedanceAweme" +// implementation "com.bytedance.applog:RangersAppLog-Lite-cn:$bytedanceApplog" +// implementation "com.bytedance.ies.ugc.aweme:opensdk-china-external:$bytedanceAweme" +// implementation "com.bytedance.ies.ugc.aweme:opensdk-common:$bytedanceAweme" implementation "com.aliyun.dpa:oss-android-sdk:${oss}" @@ -307,10 +307,10 @@ dependencies { implementation "com.github.PhilJay:MPAndroidChart:${chart}" implementation project(':libraries:LGLibrary') - implementation project(':libraries:MTA') +// implementation project(':libraries:MTA') implementation project(':libraries:QQShare') - implementation project(':libraries:TalkingData') - implementation project(':libraries:UmengPush') +// implementation project(':libraries:TalkingData') +// implementation project(':libraries:UmengPush') // implementation project(':libraries:WechatShare') // implementation project(':libraries:im') implementation project(':libraries:Matisse') diff --git a/app/libs/AVMPSDK-external-release-5.4.1002.aar b/app/libs/AVMPSDK-external-release-5.4.1002.aar deleted file mode 100644 index ca1a5ed876..0000000000 Binary files a/app/libs/AVMPSDK-external-release-5.4.1002.aar and /dev/null differ diff --git a/app/libs/GDTActionSDK.min.1.4.9.jar b/app/libs/GDTActionSDK.min.1.4.9.jar deleted file mode 100644 index 11b543b0bf..0000000000 Binary files a/app/libs/GDTActionSDK.min.1.4.9.jar and /dev/null differ diff --git a/app/libs/SecurityBodySDK-external-release-5.4.112-preInstall.aar b/app/libs/SecurityBodySDK-external-release-5.4.112-preInstall.aar deleted file mode 100644 index ca08cbf681..0000000000 Binary files a/app/libs/SecurityBodySDK-external-release-5.4.112-preInstall.aar and /dev/null differ diff --git a/app/libs/SecurityGuardSDK-external-release-5.4.193-preInstall.aar b/app/libs/SecurityGuardSDK-external-release-5.4.193-preInstall.aar deleted file mode 100644 index 62ed556adc..0000000000 Binary files a/app/libs/SecurityGuardSDK-external-release-5.4.193-preInstall.aar and /dev/null differ diff --git a/app/libs/gid-1.1.jar b/app/libs/gid-1.1.jar deleted file mode 100644 index 17bc24de4e..0000000000 Binary files a/app/libs/gid-1.1.jar and /dev/null differ diff --git a/app/libs/gid-1.3.jar b/app/libs/gid-1.3.jar new file mode 100644 index 0000000000..8d5a76ce9c Binary files /dev/null and b/app/libs/gid-1.3.jar differ diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index 5ee384e30d..e1d7e29456 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -254,4 +254,8 @@ -keep class com.taobao.wireless.security.**{*;} -keep class com.ut.secbody.**{*;} -keep class com.taobao.dp.**{*;} --keep class com.alibaba.wireless.security.**{*;} \ No newline at end of file +-keep class com.alibaba.wireless.security.**{*;} + +-keep class com.alibaba.sdk.android.**{*;} +-keep class com.ut.**{*;} +-keep class com.ta.**{*;} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60a4c71210..d6cac89074 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,8 +38,6 @@ - - @@ -71,7 +69,7 @@ - + + + + + - - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + @@ -691,13 +689,13 @@ - + + + - + + + diff --git a/app/src/main/assets/privacy_policies.html b/app/src/main/assets/privacy_policies.html new file mode 100644 index 0000000000..3645f7d300 --- /dev/null +++ b/app/src/main/assets/privacy_policies.html @@ -0,0 +1,758 @@ + + + + + + + 隐私政策 + + + + +
+
欢迎您使用光环助手!
+ +
+

+ 为了向您提供游戏预约、论坛互动交流等相关服务,受制于手机系统限制,我们会申请您的设备信息权限; +

+

为了让您正常使用游戏下载和论坛功能,我们会申请您的储存权限;

+

以下为完整《隐私权限政策》

+

+ 光环助手(简称“我们”)深知个人信息对您的重要性,我们将依据《中华人民共和国网络安全法》、《信息安全技术 + 个人信息安全规范》(GB/T + 35273-2017)以及其他相关法律法规和技术规范收集和使用您的个人信息,以帮助我们向您提供更优质的产品和/或服务, + 保护您的个人信息及隐私安全。我们制定本“隐私指引”并特别提示:希望您在使用光环助手及相关服务前仔细阅读并理解本隐私政策,以便做出适当的选择。 +

+

+ 下文将帮您详细了解我们如何收集、使用、存储、传输、共享、转让(如适用)与保护个人信息;帮您了解查询、访问、删除、更正、撤回授权个人信息的方式。其中, + + 有关您个人信息权益的条款重要内容我们已用加粗形式提示,请特别关注。 + +

+
+ +
+

1.我们处理个人信息的法律依据

+

2.我们如何共享、转让、公开披露个人信息

+

3.我们如何收集和使用个人信息

+

4.我们如何存储个人信息

+

5.我们如何保护个人信息的安全

+

6.管理您的个人信息

+

7.未成年人使用条款

+

8.隐私政策的修订和通知

+

9.联系我们

+
+ +
+

1.我们处理个人信息的法律依据

+

+ 如果您是中华人民共和国大陆地区的用户,我们将依据《中华人民共和国网络安全法》、《信息安全技术 + 个人信息安全规范》(GB/T + 35273-2017)以及其他相关法律法规收集和使用您的个人信息,为您提供产品或服务。 +

+

+ 我们通常只会在征得您同意的情况下收集您的个人信息。 + 在某些情况下,我们可能还会基于法律义务或者履行合同之必需向您收集个人信息,或者可能需要个人信息来保护您的重要利益或其他人的利益。 +

+ +

2.我们如何共享、转让、公开披露个人信息

+ +

2.1第三方SDK接入说明

+

+ 为保障光环助手App相关功能的实现与应用安全稳定的运行,我们会接入由第三方提供的软件开发包(SDK)实现相关功能。 +
+ 我们会对合作方获取有关信息的软件工具开发包(SDK)进行严格的安全检测,并与授权合作伙伴约定严格的数据保护措施,令其按照我们的委托目的、服务说明、本隐私权政策以及其他任何相关的保密和安全措施来处理个人信息。 +
+ + 下方为整个光环助手 + 所有版本 + 内接入的所有信息收集类第三方SDK的权限说明,因隐私政策会因光环助手版本迭代而新接入SDK或停止合作部分SDK,方便照顾 + 所有版本 + 的用户查看自己SDK第三方权限说明。 +
+ 我们对涉及用户信息使用的SDK相关情况进行了逐项列举,具体如下: +
+

+ +

(1)数据统计类

+

1.头条推广

+

+ SDK官网: + + https://ad.oceanengine.com/openapi/index.html + +

+

SDK包名:com.bytedance

+

企业主体:北京有竹居网络技术有限公司

+

使用目的:用于广告流量统计相关服务

+

+ 收集信息类型:设备品牌、型号、软件系统相关信息、安卓(oaid、无线网SSID名称、WiFi路由器MAC地址、设备MAC地址、IMEI、地理位置) +

+

+ 隐私政策链接: + + https://ad.oceanengine.com/openapi/register/protocol.html?rid=vo25p8sfqde + +

+

2.talkingdata统计

+

+ SDK官网: + http://www.talkingdata.com/ +

+

SDK包名:com.tendcloud

+

企业主体:北京腾云天下科技有限公司

+

使用目的:用于统计数据和效果分析,以便为用户提供更好的服务

+

收集信息类型:设备信息、网络信息、位置信息、应用信息

+

+ 隐私政策链接: + + http://www.talkingdata.com/privacy.jsp?languagetype=zh_cn + +

+ +

3.腾讯MTA

+

+ SDK官网: + https://mta.qq.com/mta/ +

+

SDK包名:com.tencent

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于统计数据和效果分析

+

+ 收集信息类型:Mac地址、唯一设备识别码(IMEI、android + ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息)、地理位置信息 +

+

+ 隐私政策链接: + + https://mta.qq.com/mta/ctr_index/protocol_v2/ + +

+ +

4.腾讯广点通

+

+ SDK官网: + https://developers.e.qq.com/ +

+

SDK包名:com.tencent

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于广告流量统计相关服务

+

+ 收集信息类型: + 个人常用设备信息(IMEI、AndroidID)、位置信息,IP地址、软件版本号 +

+

+ 隐私政策链接: + https://e.qq.com/optout.html +

+ +

(2)社交登录类

+

5.微信登录分享

+

+ SDK官网: + https://open.weixin.qq.com/ +

+

SDK包名:com.tencent.mm.opensdk

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于支持微信登录、分享

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID)、硬件型号、操作系统类型、软件信息(软件版本号、浏览器类型)、IP地址、服务日志信息、通讯日志信息 +

+

+ 隐私政策链接: + https://privacy.tencent.com/ +

+ +

6.QQ登录分享

+

+ SDK官网: + https://connect.qq.com/ +

+

SDK包名:com.tentcent

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于支持QQ登录、分享

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号)、设备型号、操作系统版本、软件信息(软件版本号、浏览器类型)、网络信息、IP地址、服务日志信息、通讯日志信息  +

+

+ 隐私政策链接: + + https://wiki.connect.qq.com/qq互联sdk隐私保护声明 + +

+ +

7.微博登录分享

+

+ SDK官网: + http://open.weibo.com/authentication +

+

SDK包名:com.sina.weibo.sdk

+

企业主体:北京微梦创科网络技术有限公司

+

使用目的:用于支持微博登录、分享

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号)、网络信息、应用列表,硬件型号、操作系统类型、软件信息(软件版本号、浏览器类型)、IP地址、服务日志信息、通讯日志信息 +

+

+ 隐私政策链接: + https://open.weibo.com/wiki/开发者协议 +

+ +

8.头条抖音登录

+

+ SDK官网: + https://open.douyin.com/platform +

+

SDK包名:com.bytedance.sdk

+

企业主体:北京字节跳动科技有限公司

+

使用目的:用于支持抖音登录

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID)、硬件型号、操作系统类型、软件信息(软件版本号、浏览器类型)、IP地址、服务日志信息、通讯日志信息 +

+

+ 隐私政策链接: + + https://www.douyin.com/agreements/?id=6773901168964798477 + +

+ +

(3)推送通知类

+

9.友盟推送

+

+ SDK官网: + https://www.umeng.com/push +

+

SDK包名:com.umeng

+

企业主体:北京友盟网络科技有限公司

+

使用目的:用于游戏相关信息的提醒通知

+

+ 收集信息类型:Mac地址、唯一设备识别码(IMEI、android + ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息)、地理位置信息 +

+

+ 隐私政策链接: + + https://www.umeng.com/page/policy?spm=a213m0.14063960.0.0.7f626e72hx3nnv + +

+ +

(4)其他功能类

+

10.阿里云反爬虫

+

+ SDK官网: + https://www.aliyun.com/product/antibot +

+

SDK包名:com.alibaba.wireless

+

企业主体:阿里巴巴网络技术有限公司

+

使用目的:为APP提供网络应用安全防护

+

+ 收集信息类型:设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息)。 +

+

+ 隐私政策链接: + + http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr + +

+ +

11.腾讯bugly

+

+ SDK官网: + https://bugly.qq.com/v2/ +

+

SDK包名:com.tencent.bugly

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:APP异常上报

+

+ 收集信息类型:设备及应用信息。如:设备名称、设备识别符、硬件型号、操作系统版本、应用程序版本 +

+

+ 隐私政策链接: + https://bugly.qq.com/v2/contract +

+ +

12.阿里云文件上传

+

+ SDK官网: + https://www.alibabacloud.com/zh +

+

SDK包名:com.alibaba.sdk.android

+

SDK包名:com.alibaba.sdk.android

+

企业主体:阿里巴巴网络技术有限公司

+

使用目的:用于支持用户上传视频等相关内容

+

+ 收集信息类型:设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息)。 +

+

+ 隐私政策链接: + + http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr + +

+ +

13.阿里云日志上传

+

+ SDK官网: + https://www.alibabacloud.com/zh +

+

SDK包名:com.aliyun.sls.android.sdk

+

企业主体:阿里巴巴网络技术有限公司

+

+ 使用目的:通过网络日志分析这些信息以便更及时响应您的帮助请求,以及用于改进服务 +

+

+ 收集信息类型:设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息)。 +

+

+ 隐私政策链接: + + http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr + +

+ +

14.容联七陌

+

+ SDK官网: + https://www.7moor.com/developer +

+

SDK包名:com.m7.imkfsdk

+

企业主体:北京七陌科技有限公司

+

使用目的:用于提供对应在线客服功能

+

+ 收集信息类型:设备相关信息(设备名称、设备型号、硬件序列号、操作系统和应用程序版本及类型、语言设置、分辨率、移动终端随机存储内存、摄像头/相册、通讯录权限等) +

+

+ 隐私政策链接: + + http://m.7moor.com/72/57/p5077783560e807/ + +

+ +

2.2 共享您的个人信息

+

+ (1)我们不会与任何公司、组织和个人共享您的个人信息,但以下情况除外: +

+

+ (2)事先获得您的明确授权或同意: + 获得您的明确同意后,我们会与其他方共享您的个人信息; +

+

+ (3)在法定情形下的共享: + 根据适用的法律法规、法律程序、政府的强制命令或司法裁定而需共享您的个人信息; +

+

+ (4)在法律要求或允许的范围内,为了保护光环助手及其用户或社会公众的利益、财产或安全免遭损害而有必要提供您的个人信息给第三方; +

+

+ (5)与我们的关联公司共享: + 您的个人信息可能会在我们的关联公司之间共享。我们会对共享的个人信息进行匿名化处理,且这种共享受本指引所声明目的的约束。关联公司如要改变个人信息的处理目的,将再次征求您的授权同意。 +

+

2.3转让

+

+ (1)我们不会转让您的个人信息给任何其他第三方,除非征得您的明确同意。 +

+

+ (2)随着我们业务的持续发展,我们将有可能进行合并、收购、资产转让,您的个人信息有可能因此而被转移。在发生前述变更时,我们将按照法律法规及不低于本隐私政策所载明的安全标准要求继受方保护您的个人信息,否则我们将要求继受方重新征得您的授权同意。 +

+

2.4披露

+

+ (1)我们不会公开披露您的信息,除非遵循国家法律法规规定或者获得您的同意。我们公开披露您的个人信息会采用符合行业内标准的安全保护措施。 +

+

+ (2)基于法律、法律程序、诉讼或政府主管部门强制性要求的情况下,我们可能会向有权机关披露您的个人信息。但我们保证,在上述情况发生时,我们会要求披露请求方必须出具与之相应的有效法律文件,并对被披露的信息采取符合法律和业界标准的安全防护措施。 +

+

+ (3)对违规账号、欺诈行为进行处罚公告时,我们会披露相关账号的信息。 +

+ +

2.5依法豁免征得同意共享、转让、公开披露的个人信息

+

+ 请您理解,在下列情形中,根据法律法规及国家标准,我们共享、转让、公开披露您的个人信息无需征得您的授权同意: +

+

(1)与国家安全、国防安全直接相关的;

+

(2)与公共安全、公共卫生、重大公共利益直接相关的;

+

(3)与犯罪侦查、起诉、审判和判决执行等直接相关的;

+

+ (4)出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的; +

+

(5)您自行向社会公众公开的个人信息;

+

+ (6)从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。 +

+ +

3.我们如何收集和使用个人信息

+

+ 我们会遵循正当、合法、必要的原则,出于本指引所述的以下目的,收集和使用您在使用服务过程中主动提供或因使用产品或服务而产生的个人信息。 +

+

+ 我们收集和使用的您的个人信息类型包括两种:第一种:我们产品或服务的核心业务功能所必需的信息:此类信息为产品或服务正常运行的必备信息,您须授权我们收集。如您拒绝提供,您将无法正常使用我们的功能,以"仅浏览(游客身份)" + 的状态体验;第二种:我们产品或服务的附加业务功能可能需要收集的信息:此信息为非核心业务功能所需的信息,您可以选择是否授权我们收集。如您拒绝提供,将导致附加业务功能无法实现或无法达到我们拟达到的效果,但不影响您对核心业务功能的正常使用。 +

+

+ 如果我们要将您的个人信息用于本指引未载明的其它用途,或基于特定目的将收集而来的信息用于其他目的,我们将以合理的方式向您告知,并在使用前再次征得您的同意。 +

+ +

3.1实现产品或服务的基本功能

+

+ (1)手机管理和内容资源下载功能。为实现手机管理及手机内容资源下载的基本功能,我们会通过手机系统的公用接口收集经过MD5算法加密的国际移动设备身份码(IMEI)和网络设备地址(MAC),以及手机型号、手机系统版本号、系统编号、系统ID号、屏幕分辨率、上网类型、手机中软件的名称、版本号、版本名、包名、软件使用时间和频率、软件崩溃信息、设备和软件相关的信息。这些信息是提供服务所必须收集的基础信息,如您拒绝提供上述权限将可能导致您无法使用我们的服务。 +

+

+ (2)软件升级管理功能。为实现手机软件下载、安装、升级、卸载软件管理功能,在您使用产品时,我们会采集您手机中已安装软件的软件名称、版本号、版本名、软件包名信息并上传到我们的服务器进行软件版本比对。发现有更新的版本,我们会提示您升级相应的软件。上述软件信息为实现此功能所必需,不涉及您个人身份敏感信息。 +

+

+ (3)过滤无法使用的软件功能。为了过滤您手机无法使用的软件,我们会收集您手机的手机型号、手机系统版本号、系统版本号、屏幕分辨率信息,并依据这些信息排除您手机无法使用的软件,以保证您在光环助手下载的软件都可安装使用。 +

+ +

3.2关于获取手机设备信息的说明

+

+ (1)为方便区分每个用户的个人信息等,本软件需获取用户的手机设备信息,用于游戏主动预约、论坛互动交流后进行推送等用户相关的行为 +

+

+ (2)为了保障软件与服务的安全运行,我们会收集您的硬件型号、操作系统版本号、国际移动设备识别码、唯一设备标识符、网络设备硬件地址、IP + 地址、WLAN接入点、蓝牙、基站、软件版本号、网络接入方式、类型、状态、网络质量数据、操作、使用、服务日志。 +

+

+ (3)为了预防恶意程序及安全运营所必需,我们会收集安装的应用信息或正在运行的进程信息、应用程序的总体运行、使用情况与频率、应用崩溃情况、总体安装使用情况、性能数据、应用来源。 +

+

+ (4)我们可能使用您的账户信息、设备信息、服务日志信息以及我们关联公司、合作方在获得您授权或依法可以共享的信息,用于判断账户安全、进行身份验证、检测及防范安全事件。 +

+

(5)具体会发生获取手机设备信息场景如下说明:

+ +

+ 1) 首次启动光环助手 + + 2) 游戏列表/游戏详情/资讯文章详情/搜索结果页-预约功能 + + 3) 礼包中心/礼包详情-领取功能 + + 4) 评论详情-发送评论功能 + + 5) 回答/问题详情-我来回答功能 + + 6) 问答首页-提问功能 + + 7) 个人主页-发文章功能 + + 8) 帖子草稿/我的草稿-编辑功能 + + 9) 游戏投稿功能 + + 10)视频投稿-上传视频功能 + + 11)游戏详情-关注游戏功能 +

+ +

3.3帮助您成为我们的在线用户

+

(1)注册账号/登录账号

+

+ a.当您注册、登录我们相关服务时,您可以通过手机号创建账号,并且您可以完善相关的网络身份识别信息(头像、昵称、密码),收集这些信息是为了帮助您完成注册。您还可以根据自身需求选择填写性别、生日、地区及个人介绍来完善您的信息。 +

+

+ b.您也可以使用第三方账号登录并使用,您将授权我们获取您在第三方平台注册的公开信息(头像、昵称以及您授权的其他信息),用于与光环助手账号绑定,使您可以直接登录并使用本产品和相关服务。 +

+

(2)认证用户

+

+ a.在您使用身份认证的功能或服务时,根据相关法律法规,您可能需要提供您的真实身份信息(真实姓名、身份证号码、电话号码)以完成实名验证。 +

+

+ b.这些信息属于个人敏感信息,您可以拒绝提供,但您将可能无法获得相关服务,但不影响其他功能与服务的正常使用。 +

+ +

3.4搜索

+

+ (1)您使用“光环助手”的搜索服务时,我们会收集您的搜索关键字信息、日志记录。 +

+

+ (2)为了提供高效的搜索服务,部分前述信息会暂时存储在您的本地存储设备之中,并可向您展示搜索结果内容、搜索历史记录。 +

+ +

3.5预约游戏

+

+ 当您使用游戏预约、游戏开测提醒功能时,您可以根据需要是否填写手机号。如您拒绝提供,仅会使您无法接收该预约游戏的短信快速提醒功能,但并不影响您正常使用产品与服务的其他。 +

+ +

3.6游戏时长统计

+

+ 您可以授权我们使用应用使用记录访问权限,我们会获取您使用某款游戏应用的使用时长,以便于提供游戏时长展示服务以及对应的大数据统计分析。 +

+ +

3.7信息发布功能

+

+ (1)注册成为光环用户后,可在光环平台上发布提问、帖子、视频,并对别人的提问作出回答或邀请其他用户回答,您还可以对别人的回答、帖子和视频的评论作出回复、赞同、感谢。 +

+

+ (2)上述功能基于相册(图片库/视频库)的图片/视频访问及上传的附加服务,我们会请求您授权相机、照片、麦克风权限,您可以使用该功能上传您的照片/图片/视频,以实现发布照片/图片/视频的功能、与其他用户进行照片/图片分享等功能。如您拒绝提供该权限和内容的,仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。 +

+

+ (3)您发布内容、评论、提问或回答时,我们将收集您发布的信息,并展示您的昵称、头像、发布内容。 +

+

+ (4)用户因使用我们的产品或者服务而被我们收集的信息,例如其他用户发布的信息中可能含有您的部分信息(如:在评论、留言、发布图文、音视频中涉及到与您相关的信息)。 +

+ +

3.8浏览、关注与收藏功能

+

(1)您可浏览的内容包括问答、评论、专栏、文章。

+

+ (2)在浏览的过程中,您还可以关注您感兴趣的用户、专栏、问题、收藏,并收藏上述内容。 +

+

+ (3)为此, + 我们可能会收集您使用时的设备信息,如设备型号、唯一设备标识符、操作系统、分辨率、电信运营商等软硬件信息。 + 我们还可能收集您的浏览器类型,以此来为您提供信息展示的最优方案。 +

+

+ (4)此外,在您使用浏览和收藏功能的过程中,我们会自动收集您使用的详细情况,并作为有关的 + 网络日志保存,包括但不限于您输入的搜索关键词信息和点击的链接。 +

+

+ (5)您浏览和发布的内容及评论信息,您上传的图片信息、您的交易信息、您使用的语言、访问的日期和时间、及您请求的网页记录、操作系统、软件版本号、登录 + IP 信息。 +

+

+ (6)在此过程中, + 我们会收集您的浏览记录,浏览记录包括您浏览的问答、主页、文章、专栏, + 您可以自主删除浏览记录。 +

+

3.9互动交流

+

+ (1)您主动关注您感兴趣的账号、内容、视频并与之进行互动,进行浏览、评论、收藏、点赞或分享内容时,我们会收集您关注的账号,并向您展示您关注账号发布内容。 +

+

+ (2)您使用推荐通讯录好友功能时,我们会请求通讯录权限,并将通讯录中的信息进行高强度加密算法处理后,用于向您推荐通信录中的好友。通讯录信息属于个人敏感信息,拒绝提供该信息仅会使您无法使用上述功能,但不影响您正常使用“光环助手”及相关服务的其他功能。 +

+ +

3.10收集、使用个人信息目的变更

+

+ (1)请您了解,随着我们业务的发展,可能会对“光环助手”的功能和提供的服务有所调整变化。 +

+

+ (2)原则上,当新功能或服务与我们当前提供的功能或服务相关时,收集与使用的个人信息将与原处理目的具有直接或合理关联。 +

+

+ (3)在与原处理目的无直接或合理关联的场景下,我们收集、使用您的个人信息,会再次进行告知,并征得您的同意。 +

+ +

3.11依法豁免征得同意收集和使用的个人信息

+

+ 请您理解,在下列情形中,根据法律法规及相关国家标准,我们收集和使用您的个人信息无需征得您的授权同意: +

+

(1)与国家安全、国防安全直接相关的;

+

(2)与公共安全、公共卫生、重大公共利益直接相关的;

+

(3)与犯罪侦查、起诉、审判和判决执行等直接相关的;

+

+ (4)出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人同意的; +

+

(5)所收集的您的个人信息是您自行向社会公众公开的;

+

+ (6)从合法公开披露的信息中收集的您的个人信息的,如合法的新闻报道、政府信息公开等渠道; +

+

(7)根据您的要求签订或履行合同所必需的;

+

+ (8)用于维护软件及相关服务的安全稳定运行所必需的,例如发现、处置软件及相关服务的故障; +

+

(9)为合法的新闻报道所必需的;

+

+ (10)学术研究机构基于公共利益开展统计或学术研究所必要,且对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的。 +

+

(11)法律法规规定的其他情形。

+

+ 特别提示您注意,如信息无法单独或结合其他信息识别到您的个人身份,其不属于法律意义上您的个人信息;当您的信息可以单独或结合其他信息识别到您的个人身份时或我们将无法与任何特定个人信息建立联系的数据与其他您的个人信息结合使用时,这些信息在结合使用期间,将作为您的个人信息按照本隐私政策处理与保护。 +

+ +

4.我们如何存储个人信息

+

4.1 存储地点

+

+ (1)我们依照法律法规的规定,将在境内运营过程中收集和产生的您的个人信息存储于中华人民共和国境内。 +

+

+ (2)目前,我们不会将上述信息传输至境外,如果我们向境外传输,我们将会遵循相关国家规定或者征求您的同意。 +

+

4.2存储期限

+

+ (1)我们仅在为提供“光环助手”及服务之目的所必需的期间内保留您的个人信息:您发布的信息、评论、点赞及相关信息,在您未撤回、删除或未注销账号期间,我们会保留相关信息。 +

+

+ (2)超出必要期限后,我们将对您的个人信息进行删除或匿名化处理,但法律法规另有规定的除外。 +

+ +

5.我们如何保护个人信息的安全

+

+ (1)我们非常重视您个人信息的安全,将努力采取合理的安全措施(包括技术方面和管理方面)来保护您的个人信息,防止您提供的个人信息被不当使用或未经授权的情况下被访问、公开披露、使用、修改、损坏、丢失或泄漏。 +

+

+ (2)我们会使用不低于行业同行的加密技术、匿名化处理及相关合理可行的手段保护您的个人信息,并使用安全保护机制防止您的个人信息遭到恶意攻击。 +

+

+ (3)我们会建立专门的安全部门、安全管理制度、数据安全流程保障您的个人信息安全。我们采取严格的数据使用和访问制度,确保只有授权人员才可访问您的个人信息,并适时对数据和技术进行安全审计。 +

+

+ (4)尽管已经采取了上述合理有效措施,并已经遵守了相关法律规定要求的标准,但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全,我们将尽力确保您提供给我们的个人信息的安全性。 +

+

+ (5)您知悉并理解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。因此,我们强烈建议您采取积极措施保护个人信息的安全,包括但不限于使用复杂密码、定期修改密码、不将自己的账号密码及相关个人信息透露给他人。 +

+

+ (6)我们会制定应急处理预案,并在发生用户信息安全事件时立即启动应急预案,努力阻止这些安全事件的影响和后果扩大。一旦发生用户信息安全事件(泄露、丢失)后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已经采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施。我们将及时将事件相关情况以推送通知、邮件、信函、短信及相关形式告知您,难以逐一告知时,我们会采取合理、有效的方式发布公告。同时,我们还将按照相关监管部门要求,上报用户信息安全事件的处置情况。 +

+

+ (7)您一旦离开“光环助手”及相关服务,浏览或使用其他网站、服务及内容资源,我们将没有能力和直接义务保护您在光环助手及相关服务之外的软件、网站提交的任何个人信息,无论您登录、浏览或使用上述软件、网站是否基于“光环助手”的链接或引导。 +

+ +

6.管理您的个人信息

+

+ 我们非常重视您对个人信息的管理,并尽全力保护您的隐私,对于您个人信息的查询、访问、修改、删除、撤回同意授权、注销账号、投诉举报以及设置隐私功能的相关权利,以使您有能力保障您的隐私和信息安全。 +

+ +

6.1 访问、删除、更正您的个人信息

+

(1)访问个人账号信息

+

a. 您可以查询、访问您的头像、用户名、简介、性别、生日、地区

+

b.您可以在光环助手的“个人中心”中进行查询、访问。

+

(2)查询访问、更正、取消您关注账号、查询访问粉丝、访客信息

+

a.进入“关注”在关注列表中查询、访问、取消关注您关注的账号。

+

+ (3)查询访问、更改、删除您的收藏、点赞、浏览记录、阅读历史记录、搜索历史历史记录 +

+

+ a.点击“我的”—点击“我的收藏”、 + “我的点赞”、或“浏览历史”进入查询访问、删除; +

+

b.点击搜索栏—删除搜索“历史记录”

+

c.您可以通过点击“系统设置”—点击“清理缓存”。

+

(4)投诉举报

+

a.您可按照我们公示的制度进行投诉或举报。

+

+ b.如果您认为您的个人信息权利可能受到侵害,或者发现侵害个人信息权利的线索(例如:认为我们收集您的个人信息违反法律规定或者双方约定),“我的”—“基础功能”—“用户反馈”,进入用户反馈界面与我们联系。 +

+

c.我们核查后会及时反馈您的投诉与举报。

+

(5)访问隐私政策

+

+ a.您可以在注册页面,或者在登录个人账号“设置”—“关于”查看本隐私政策的全部内容 +

+

+ b.请您了解,本隐私政策中所述的“光环助手”及相关服务可能会根据您所使用的手机型号、系统版本、软件应用程序版本、移动客户端等因素而有所不同。最终的产品和服务以您所使用的“光环助手”软件及相关服务为准。 +

+

(6)停止运营向您告知

+

+ a.如我们停止运营,我们将及时停止收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。 +

+ +

6.2 注销您的个人账号

+

+ 如需要注销个人账户,可前往光环助手,我的光环> 设置 > 账号与安全 > + 账号安全中心 > + 注销账号,进行注销操作。请您注意,如果您选择注销光环助手账户,那么您的光环助手账号将不可被使用且相关账号信息将被删除,包括所发布的所有内容,包括:提问、回答、社区文章、评论、关注的人等均会被清空;您将无法再通过光环助手账号登录光环助手的服务(但不会影响您使用无需账号登录即可使用的服务和功能) +

+

+ 当您注销账户后,除法律法规要求我们保存相关信息的情况外,我们将停止为您提供相应的产品(或服务),并在60个工作日内删除或匿名化您的个人信息。 +

+ +

7.未成年人条款

+

+ a.若您是未满18周岁的未成年人,在使用“光环助手”及相关服务前,应在您的父母或其他监护人监护、指导下共同阅读并同意本隐私政策。 +

+

+ b.我们根据国家相关法律法规的规定保护未成年人的个人信息,只会在法律允许、父母或其他监护人明确同意或保护未成年人所必要的情况下收集、使用、储存、共享、转让或披露未成年人的个人信息;如果我们发现在未事先获得可证实的父母同意的情况下收集了未成年人的个人信息,则会设法尽快删除相关信息。 +

+

+ c.若您是未成年人的监护人,当您对您所监护的未成年人的个人信息有相关疑问时,请通过公司本隐私政策公示的联系方式与我们联系。 +

+

8.隐私政策的修订和通知

+

+ (1)为了给您提供更好的服务,光环助手及相关服务将不时更新与变化,我们会适时对本隐私政策进行修订,这些修订构成本隐私政策的一部分并具有等同于本隐私政策的效力,未经您明确同意,我们不会削减您依据当前生效的本隐私政策所应享受的权利。 +

+

+ (2)本隐私政策更新后,我们会在光环助手发出更新版本,并在更新后的条款生效前通过公告或其他适当的方式提醒您更新的内容,以便您及时了解本隐私政策的最新版本。 +

+

9.联系我们

+

+ 如果您对我们的隐私政策及对您个人信息的处理有任何疑问、意见、建议、或投诉,请通过以下方式与我们联系 +

+

广州加兔网络科技有限公司

+

注册地址:广州市番禺区市桥街丹山村青云一街2号229房

+

在线客服QQ:350473523

+

信息保护事务联系电话:020-85526920

+

在一般情况下,我们会在15个工作日内对您的请求予以答复

+
+
+ + diff --git a/app/src/main/assets/user_regulation.html b/app/src/main/assets/user_regulation.html new file mode 100644 index 0000000000..8c3bb55ca1 --- /dev/null +++ b/app/src/main/assets/user_regulation.html @@ -0,0 +1,493 @@ + + + + + + + 光环助手软件许可及服务协议 + + + + +

光环助手软件许可及服务协议

+
首部及导言
+

欢迎使用光环助手软件许可及服务

+

+ 各位用户在使用光环助手前,请您务必审慎阅读、并充分理解本协议中的各项条款, + + 特别是免除或者限制责任的条款,以及开通或使用某项服务的单独协议,并选择接受或不接受。 + + 除非您已阅读并接受本协议所有条款,否则您无权下载、安装或使用本软件及相关服务。您的下载、安装、使用、登录等行为即视为您已阅读并同意上述协议的约束。 +

+

如果您未满18周岁,请在法定监护人的陪同下阅读本协议及其他上述协议。

+
一、权利声明
+

+ “光环助手”的一切知识产权,以及与“光环助手”相关的所有信息内容,包括但不限于:文字表述及其组合、图标、图饰、图像、图表、色彩、界面设计、版面框架、有关数据、附加程序、印刷材料或电子文档等均为光环助手所有,受著作权法和国际著作权条约以及其他知识产权法律法规的保护。 +

+
二、软件使用规范
+

+ 2.1 + 本软件是基于Android(安卓)系统手机、平板电脑(PAD)等设备开发的一款软件,提供注册登录、手机游戏管理、游戏推荐、文章阅读等功能 +

+

2.2 软件的下载、安装和使用

+

+ 本软件为免费软件,用户可以非商业性、无限制数量地从光环授权的渠道下载、安装及使用本软件。 +

+

+ + 如果您从未经光环授权的第三方获取本软件或与本软件名称相同的安装程序,光环无法保证该软件能够正常使用,并对因此给您造成的损失不予负责。 + +

+

2.3 软件的复制、分发和传播

+

+ 本产品以学习、研究交流为目的。用户可以非商业性、无限制数量地复制、分发和传播本软件产品。但必须保证每一份复制、分发和传播都是完整和真实的, + 包括所有有关本软件产品的软件、电子文档, 版权和商标,亦包括本协议。 +

+

2.4 软件的更新

+

+ 为了改善用户体验、完善服务内容,光环将不断努力开发新的服务,并为您不时提供软件更新(这些更新可能会采取软件替换、修改、功能强化、版本升级等形式)。为了保证本软件及服务的安全性和功能的一致性,光环有权不经向您特别通知而对软件进行更新,或者对软件的部分功能效果进行改变或限制。本软件新版本发布后,旧版本的软件可能无法使用。光环不保证旧版本软件继续可用及相应的客户服务,请您随时核对并下载最新版本。 +

+
三、用户使用须知
+

3.1 您理解并同意:

+

+ 为了向您提供有效的服务,本软件会利用您移动通讯终端的处理器和带宽等资源。本软件使用过程中可能产生数据流量的费用,用户需自行向运营商了解相关资费信息,并自行承担相关费用. +

+

3.2 您理解并同意:

+

+ 由本软件进行收录、推荐并提供下载、升级服务的第三方软件,由第三方享有一切合法权利,光环并不能识别用户利用本软件下载、安装的第三方软件是否有合法来源。 + + 因第三方软件引发的任何纠纷,由该第三方负责解决,光环不承担任何责任。 + + 同时光环不对第三方软件或技术提供客服支持,若用户需要获取支持,请与该软件或技术提供商联系,若您为有关软件的权利人,不愿本软件为您的软件提供用户下载、安装、使用的服务,也可按本协议约定的联系方式联系我们,我们将会积极配合进行处理。 +

+

3.3 您理解并同意:

+

+ + 如果因您不正当使用本软件造成了不良影响,或因使用本软件造成的包括但不限于数据异常等问题,均由使用者自行承担,光环团队不对任意类型的使用结果承担责任; + +

+

3.4 您理解并同意:

+

+ 本软件不含任何破坏用户移动通讯设备数据和获取用户隐私信息的恶意代码,不会泄露用户的个人信息和隐私; +

+

3.5 您理解并同意:

+

+ + 对于包括但不限于互联网网络故障、计算机故障、手机故障或病毒、信息损坏或丢失、计算机系统问题,或其它任何基于不可抗力原因而产生的损失,光环团队不承担任何责任。 + +

+

3.6 您理解并同意:

+

光环发布、收录的文章均不代表光环立场。

+

3.7 您理解并同意:

+

+ 为实现软件包括但不限于集中展示、下载、安装、卸载等游戏管理功能以及文章优先推荐功能,本软件会检测用户手机中已安装游戏的包名、版本号、版本名、游戏名称信息。除征得用户明确同意和法律明确规定外,光环不会向第三方泄露任何的用户信息 +

+

3.8 您理解并同意:

+

+ 用户应在遵守法律及本协议的前提下使用本软件。用户无权实施包括但不限于下列行为: +

+ 3.8.1 不得删除或者改变本软件上的所有权利管理电子信息 +
+ 3.8.2 不得故意避开或者破坏著作权人为保护本软件著作权而采取的技术措施; +
+ 3.8.3 用户不得利用本软件误导、欺骗他人; +
+ 3.8.4 + 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行; +
+ 3.8.5 未经允许,进入计算机信息网络或者使用计算机信息网络资源; +
+ 3.8.6 未经允许,对计算机信息网络功能进行删除、修改或者增加; +
+ 3.8.7 + 未经允许,对计算机信息网络中存储、处理或者传输的数据和应用程序进行删除、修改或者增加; +
+ 3.8.8 破坏本软件系统或网站的正常运行,故意传播计算机病毒等破坏性程序; +
+ 3.8.9 其他任何危害计算机信息网络安全的行为。 +
+

3.9 您理解并同意:

+

+ 本软件经过详细的测试,但不能保证与所有的软硬件系统完全兼容,不能保证本软件完全没有错误。如果出现不兼容及软件错误的情况,用户可通过各反馈途径将情况告知光环团队,获得技术支持。如果无法解决兼容性问题,用户可以删除本软件。 +

+
四、争议解决处理
+

+ 本《协议》的解释、效力及纠纷的解决,适用于中华人民共和国法律。若用户和光环助手之间发生任何纠纷或争议,首先应友好协商解决,协商不成的,用户在此完全同意将纠纷或争议提交光环助手所在地法院管辖 +

+ +

五、第三方SDK接入说明

+

+ 为保障光环助手App相关功能的实现与应用安全稳定的运行,我们会接入由第三方提供的软件开发包(SDK)实现相关功能。 +
+ 我们会对合作方获取有关信息的软件工具开发包(SDK)进行严格的安全检测,并与授权合作伙伴约定严格的数据保护措施,令其按照我们的委托目的、服务说明、本隐私权政策以及其他任何相关的保密和安全措施来处理个人信息。 +
+ + 下方为整个光环助手 + 所有版本 + 内接入的所有信息收集类第三方SDK的权限说明,因隐私政策会因光环助手版本迭代而新接入SDK或停止合作部分SDK,方便照顾 + 所有版本 + 的用户查看自己SDK第三方权限说明。 +
+ 我们对涉及用户信息使用的SDK相关情况进行了逐项列举,具体如下: +
+

+ +

(1)数据统计类

+

1.头条推广

+

+ SDK官网: + + https://ad.oceanengine.com/openapi/index.html + +

+

SDK包名:com.bytedance

+

企业主体:北京有竹居网络技术有限公司

+

使用目的:用于广告流量统计相关服务

+

+ 收集信息类型:设备品牌、型号、软件系统相关信息、安卓(oaid、无线网SSID名称、WiFi路由器MAC地址、设备MAC地址、IMEI、地理位置) +

+

+ 隐私政策链接: + + https://ad.oceanengine.com/openapi/register/protocol.html?rid=vo25p8sfqde + +

+

2.talkingdata统计

+

+ SDK官网: + http://www.talkingdata.com/ +

+

SDK包名:com.tendcloud

+

企业主体:北京腾云天下科技有限公司

+

使用目的:用于统计数据和效果分析,以便为用户提供更好的服务

+

收集信息类型:设备信息、网络信息、位置信息、应用信息

+

+ 隐私政策链接: + + http://www.talkingdata.com/privacy.jsp?languagetype=zh_cn + +

+ +

3.腾讯MTA

+

+ SDK官网: + https://mta.qq.com/mta/ +

+

SDK包名:com.tencent

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于统计数据和效果分析

+

+ 收集信息类型:Mac地址、唯一设备识别码(IMEI、android + ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息)、地理位置信息 +

+

+ 隐私政策链接: + + https://mta.qq.com/mta/ctr_index/protocol_v2/ + +

+ +

4.腾讯广点通

+

+ SDK官网: + https://developers.e.qq.com/ +

+

SDK包名:com.tencent

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于广告流量统计相关服务

+

+ 收集信息类型: + 个人常用设备信息(IMEI、AndroidID)、位置信息,IP地址、软件版本号 +

+

+ 隐私政策链接: + https://e.qq.com/optout.html +

+ +

(2)社交登录类

+

5.微信登录分享

+

+ SDK官网: + https://open.weixin.qq.com/ +

+

SDK包名:com.tencent.mm.opensdk

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于支持微信登录、分享

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID)、硬件型号、操作系统类型、软件信息(软件版本号、浏览器类型)、IP地址、服务日志信息、通讯日志信息 +

+

+ 隐私政策链接: + https://privacy.tencent.com/ +

+ +

6.QQ登录分享

+

+ SDK官网: + https://connect.qq.com/ +

+

SDK包名:com.tentcent

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:用于支持QQ登录、分享

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号)、设备型号、操作系统版本、软件信息(软件版本号、浏览器类型)、网络信息、IP地址、服务日志信息、通讯日志信息  +

+

+ 隐私政策链接: + + https://wiki.connect.qq.com/qq互联sdk隐私保护声明 + +

+ +

7.微博登录分享

+

+ SDK官网: + http://open.weibo.com/authentication +

+

SDK包名:com.sina.weibo.sdk

+

企业主体:北京微梦创科网络技术有限公司

+

使用目的:用于支持微博登录、分享

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID、IMSI、ICCID、序列号)、网络信息、应用列表,硬件型号、操作系统类型、软件信息(软件版本号、浏览器类型)、IP地址、服务日志信息、通讯日志信息 +

+

+ 隐私政策链接: + https://open.weibo.com/wiki/开发者协议 +

+ +

8.头条抖音登录

+

+ SDK官网: + https://open.douyin.com/platform +

+

SDK包名:com.bytedance.sdk

+

企业主体:北京字节跳动科技有限公司

+

使用目的:用于支持抖音登录

+

+ 收集信息类型:个人常用设备信息(MAC地址、IMEI、AndroidID)、硬件型号、操作系统类型、软件信息(软件版本号、浏览器类型)、IP地址、服务日志信息、通讯日志信息 +

+

+ 隐私政策链接: + + https://www.douyin.com/agreements/?id=6773901168964798477 + +

+ +

(3)推送通知类

+

9.友盟推送

+

+ SDK官网: + https://www.umeng.com/push +

+

SDK包名:com.umeng

+

企业主体:北京友盟网络科技有限公司

+

使用目的:用于游戏相关信息的提醒通知

+

+ 收集信息类型:Mac地址、唯一设备识别码(IMEI、android + ID、IDFA、OPENUDID、GUID/SIM卡IMSI信息)、地理位置信息 +

+

+ 隐私政策链接: + + https://www.umeng.com/page/policy?spm=a213m0.14063960.0.0.7f626e72hx3nnv + +

+ +

(4)其他功能类

+

10.阿里云反爬虫

+

+ SDK官网: + https://www.aliyun.com/product/antibot +

+

SDK包名:com.alibaba.wireless

+

企业主体:阿里巴巴网络技术有限公司

+

使用目的:为APP提供网络应用安全防护

+

+ 收集信息类型:设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息)。 +

+

+ 隐私政策链接: + + http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr + +

+ +

11.腾讯bugly

+

+ SDK官网: + https://bugly.qq.com/v2/ +

+

SDK包名:com.tencent.bugly

+

企业主体:深圳市腾讯计算机系统有限公司

+

使用目的:APP异常上报

+

+ 收集信息类型:设备及应用信息。如:设备名称、设备识别符、硬件型号、操作系统版本、应用程序版本 +

+

+ 隐私政策链接: + https://bugly.qq.com/v2/contract +

+ +

12.阿里云文件上传

+

+ SDK官网: + https://www.alibabacloud.com/zh +

+

SDK包名:com.alibaba.sdk.android

+

SDK包名:com.alibaba.sdk.android

+

企业主体:阿里巴巴网络技术有限公司

+

使用目的:用于支持用户上传视频等相关内容

+

+ 收集信息类型:设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息)。 +

+

+ 隐私政策链接: + + http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr + +

+ +

13.阿里云日志上传

+

+ SDK官网: + https://www.alibabacloud.com/zh +

+

SDK包名:com.aliyun.sls.android.sdk

+

企业主体:阿里巴巴网络技术有限公司

+

+ 使用目的:通过网络日志分析这些信息以便更及时响应您的帮助请求,以及用于改进服务 +

+

+ 收集信息类型:设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息)。 +

+

+ 隐私政策链接: + + http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html?spm=a2c4g.11186623.J_9220772140.81.b7574832gmk0vr + +

+ +

14.容联七陌

+

+ SDK官网: + https://www.7moor.com/developer +

+

SDK包名:com.m7.imkfsdk

+

企业主体:北京七陌科技有限公司

+

使用目的:用于提供对应在线客服功能

+

+ 收集信息类型:设备相关信息(设备名称、设备型号、硬件序列号、操作系统和应用程序版本及类型、语言设置、分辨率、移动终端随机存储内存、摄像头/相册、通讯录权限等) +

+

+ 隐私政策链接: + http://m.7moor.com/72/57/p5077783560e807/ +

+ +
六、关于获取手机设备信息的说明
+
+ (1)为方便区分每个用户的个人信息等,本软件需获取用户的手机设备信息,用于游戏主动预约、论坛互动交流后进行推送等用户相关的行为 +
+ (2)为了保障软件与服务的安全运行,我们会收集您的硬件型号、操作系统版本号、国际移动设备识别码、唯一设备标识符、网络设备硬件地址、IP + 地址、WLAN接入点、蓝牙、基站、软件版本号、网络接入方式、类型、状态、网络质量数据、操作、使用、服务日志。 +
+ (3)为了预防恶意程序及安全运营所必需,我们会收集安装的应用信息或正在运行的进程信息、应用程序的总体运行、使用情况与频率、应用崩溃情况、总体安装使用情况、性能数据、应用来源。 +
+ (4)我们可能使用您的账户信息、设备信息、服务日志信息以及我们关联公司、合作方在获得您授权或依法可以共享的信息,用于判断账户安全、进行身份验证、检测及防范安全事件。 +
+ (5)具体会发生获取手机设备信息场景如下说明: +
+

+ 1) 首次启动光环助手 +
+ 2) 游戏列表/游戏详情/资讯文章详情/搜索结果页-预约功能 +
+ 3) 礼包中心/礼包详情-领取功能 +
+ 4) 评论详情-发送评论功能 +
+ 5) 回答/问题详情-我来回答功能 +
+ 6) 问答首页-提问功能 +
+ 7) 个人主页-发文章功能 +
+ 8) 帖子草稿/我的草稿-编辑功能 +
+ 9) 游戏投稿功能 +
+ 10) 视频投稿-上传视频功能 +
+ 11) 游戏详情-关注游戏功能 +

+
+ +
七、其他
+

+ 7.1 + 本协议所有条款的标题仅为阅读方便,本身并无实际涵义,不能作为本协议涵义解释的依据。 +
+ 7.2 + 如果本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,或违反任何适用的法律,则该条款被视为删除,但本协议的其余条款仍应有效并且有约束力。 +
+ 7.3 + 光环有权随时根据有关法律、法规的变化以及公司经营状况和经营策略的调整等修改本协议。修改后的协议会在软件设置内发布。 + 当发生有关争议时,以最新的协议文本为准。如果不同意改动的内容,用户可以自行删除本软件。如果用户继续使用本软件,则视为您接受本协议的变动。 +
+ + 7.4 光环在法律允许的最大范围内对本协议拥有解释权与修改权。 + +

+ + diff --git a/app/src/main/java/com/gh/base/GHUmengNotificationService.kt b/app/src/main/java/com/gh/base/GHUmengNotificationService.kt index bc31b57a4e..81c1f63275 100644 --- a/app/src/main/java/com/gh/base/GHUmengNotificationService.kt +++ b/app/src/main/java/com/gh/base/GHUmengNotificationService.kt @@ -1,229 +1,229 @@ -package com.gh.base - -import android.app.Notification -import android.app.NotificationChannel -import android.app.NotificationManager -import android.app.PendingIntent -import android.content.Context -import android.content.Intent -import android.os.Build -import android.os.Bundle -import android.preference.PreferenceManager -import android.text.TextUtils -import android.view.View -import androidx.core.app.NotificationCompat -import androidx.core.text.htmlEncode -import com.gh.common.notifier.Notifier -import com.gh.common.util.* -import com.gh.gamecenter.R -import com.gh.gamecenter.entity.PushEntity -import com.gh.gamecenter.entity.PushMessageEntity -import com.gh.gamecenter.entity.PushMessageUnreadEntity -import com.gh.gamecenter.entity.PushNotificationEntity -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.message.MessageUnreadRepository -import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity -import com.gh.gamecenter.receiver.UmengMessageReceiver -import com.gh.gamecenter.receiver.UmengMessageReceiver.Companion.TYPE_CLICK -import com.gh.gamecenter.receiver.UmengMessageReceiver.Companion.TYPE_REMOVE -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import com.google.gson.Gson -import com.umeng.message.UmengMessageService -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import okhttp3.MediaType -import okhttp3.RequestBody -import okhttp3.ResponseBody -import org.android.agoo.common.AgooConstants -import org.json.JSONObject -import retrofit2.HttpException -import java.util.* - -class GHUmengNotificationService : UmengMessageService() { - - companion object { - const val ACTION_UMENG = "com.gh.gamecenter.UMENG" - const val MESSAGE_FROM_SYSTEM = "message_from_system" - const val HALO_MESSAGE_DIALOG = "HALO_MESSAGE_DIALOG" - const val HALO_MESSAGE_CENTER = "HALO_MESSAGE_CENTER" - const val ANSWER = "answer" - const val FOLLOW_QUESTION = "follow_question" - const val NOTIFICATION_ID = 2015 - const val DISPLAY_TYPE_NOTIFICATION = "notification" - const val DISPLAY_TYPE_CUSTOM = "custom" - const val MESSAGE_ID = "message_id" - const val NOTIFICATION_MESSAGE_ID = "notification_message_id" // 通知中心消息 ID - const val PUSH_ID = "push_id" - } - - val notificationTags = arrayOf("GH_UMENG_TAG_1", "GH_UMENG_TAG_2", "GH_UMENG_TAG_3") - val gson = Gson() - - override fun onMessage(context: Context, intent: Intent) { - val message = intent.getStringExtra(AgooConstants.MESSAGE_BODY) - val isMessageFromSystem = intent.getBooleanExtra(MESSAGE_FROM_SYSTEM, false) - - try { - val pushData = message.toObject() - pushData?.let { handlePushData(context, it, message, isMessageFromSystem) } - } catch (e: Exception) { - e.printStackTrace() - } - } - - private fun handlePushData(context: Context, pushData: PushEntity, message: String, isMessageFromSystem: Boolean) { - val notificationManager = context.applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - - if (pushData.displayType == DISPLAY_TYPE_NOTIFICATION) { - // 其它类型的透传信息 - // 显示到通知栏 - val msg = message.toObject() - val data = msg?.extra?.data - - // 系统推送(非自定义信息),直接处理跳转 - if (isMessageFromSystem) { - val intent = Intent() - intent.setClass(context, UmengMessageReceiver::class.java) - intent.putExtra(EntranceUtils.KEY_DATA, data?.link) - intent.putExtra(EntranceUtils.KEY_TYPE, UmengMessageReceiver.DIRECT_ONLY) - intent.putExtra(EntranceUtils.KEY_MESSAGE, message) - intent.putExtra(NOTIFICATION_MESSAGE_ID, data?.messageId) - context.sendBroadcast(intent) - return - } - - // 用户未登录的情况下不生成消息中心通知,避免用户掉登录了还收到跳转至消息中心的通知 - if (data != null - && data.link?.link == "system" - && !UserManager.getInstance().isLoggedIn) { - return - } - - val clickIntent = Intent() - val removeIntent = Intent() - - clickIntent.setClass(context, UmengMessageReceiver::class.java) - clickIntent.putExtra(EntranceUtils.KEY_DATA, data?.link) - clickIntent.putExtra(EntranceUtils.KEY_MESSAGE, message) - clickIntent.putExtra(MESSAGE_ID, msg?.msgId) - clickIntent.putExtra(PUSH_ID, data?.pushId) - clickIntent.putExtra(NOTIFICATION_MESSAGE_ID, data?.messageId) - clickIntent.putExtra(EntranceUtils.KEY_TYPE, TYPE_CLICK) - - removeIntent.setClass(context, UmengMessageReceiver::class.java) - removeIntent.putExtra(EntranceUtils.KEY_TYPE, TYPE_REMOVE) - removeIntent.putExtra(EntranceUtils.KEY_MESSAGE, message) - - val clickPendingIntent = PendingIntent.getBroadcast(context, System.currentTimeMillis().toInt(), - clickIntent, PendingIntent.FLAG_UPDATE_CURRENT) - - val deletePendingIntent = PendingIntent.getBroadcast(context, System.currentTimeMillis().toInt() + 1, - removeIntent, PendingIntent.FLAG_UPDATE_CURRENT) - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val channel = NotificationChannel("Halo_Push", "Halo_Push", NotificationManager.IMPORTANCE_DEFAULT) - notificationManager.createNotificationChannel(channel) - } - - val notification = NotificationCompat.Builder(context, "Halo_Push") - .setSmallIcon(R.drawable.ic_notification) - .setTicker(pushData.body?.ticker) - .setContentTitle(pushData.body?.title) - .setContentText(pushData.body?.text?.fromHtml()) - .setContentIntent(clickPendingIntent) - .setDeleteIntent(deletePendingIntent) - .build() - notification.flags = notification.flags or Notification.FLAG_AUTO_CANCEL - - notificationManager.notify(getNotificationTag(context), NOTIFICATION_ID, notification) - } else { - if (UserManager.getInstance().isLoggedIn && - HALO_MESSAGE_DIALOG == pushData.body?.custom && - MessageUnreadRepository.unreadLiveData.value != null) { - // 回答了问题或者关注了问题的消息 - val msg = gson.fromJson(message, PushMessageEntity::class.java) - val data = msg?.extra?.data - - val type = if (ANSWER == data?.type) { - "回答了你的问题" - } else { - "回答了你关注的问题" - } - - val userName = StringUtils.shrinkStringWithDot(data?.userEntity?.name, 8) - val displayText = userName + type - - if (Notifier.isActivityValid(CurrentActivityHolder.getCurrentActivity()) && - Notifier.shouldShowNotifier(data?.answer?.id + displayText)) { - Notifier.create(CurrentActivityHolder.getCurrentActivity()) - .setText(displayText) - .setDuration(5000) - .setIcon(data?.userEntity?.icon) - .setOnClickListener(View.OnClickListener { - val bundle = Bundle() - bundle.putString(EntranceUtils.KEY_ANSWER_ID, data?.answer?.id) - bundle.putString(EntranceUtils.KEY_ENTRANCE, EntranceUtils.ENTRANCE_UMENG) - bundle.putString(EntranceUtils.KEY_TO, AnswerDetailActivity::class.java.name) - EntranceUtils.jumpActivity(context, bundle) - - MtaHelper.onEvent("消息弹窗", type, "Does not contains any parameter.") - - // 标记已读 - val jsonObject = JSONObject() - jsonObject.put("type", type) - val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) - - RetrofitManager.getInstance(application).api.postMessageRead(UserManager.getInstance().userId, data?.id, body) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - super.onResponse(response) - MessageUnreadRepository.loadMessageUnreadData() - } - - override fun onFailure(e: HttpException?) { - e?.printStackTrace() - } - }) - Notifier.hide() - }) - .show(false) - Notifier.tagNotifierAsShowed(data?.answer?.id + displayText) - } - } else if (HALO_MESSAGE_CENTER == pushData.body?.custom) { - // 消息中心逻辑 - val msg = gson.fromJson(message, PushMessageUnreadEntity::class.java) - val data = msg?.extra?.data - data?.let { MessageUnreadRepository.loadMessageUnreadData() } - } - } - } - - /** - * 规则:最多三条消息,以旧换新 - * - * @return NotificationTag - */ - private fun getNotificationTag(context: Context): String { - val sp = PreferenceManager.getDefaultSharedPreferences(context) - val edit = sp.edit() - - val timeTagMap = HashMap() - for (tag in notificationTags) { - val time = sp.getLong(tag, 0) - if (time == 0L) { - edit.putLong(tag, System.currentTimeMillis()).apply() - return tag - } else { - timeTagMap[time] = tag - } - } - - val minTime = Collections.min(timeTagMap.keys) - val tag = timeTagMap[minTime] - edit.putLong(tag, System.currentTimeMillis()).apply() - return if (TextUtils.isEmpty(tag)) notificationTags[0] else tag!! - } -} \ No newline at end of file +//package com.gh.base +// +//import android.app.Notification +//import android.app.NotificationChannel +//import android.app.NotificationManager +//import android.app.PendingIntent +//import android.content.Context +//import android.content.Intent +//import android.os.Build +//import android.os.Bundle +//import android.preference.PreferenceManager +//import android.text.TextUtils +//import android.view.View +//import androidx.core.app.NotificationCompat +//import androidx.core.text.htmlEncode +//import com.gh.common.notifier.Notifier +//import com.gh.common.util.* +//import com.gh.gamecenter.R +//import com.gh.gamecenter.entity.PushEntity +//import com.gh.gamecenter.entity.PushMessageEntity +//import com.gh.gamecenter.entity.PushMessageUnreadEntity +//import com.gh.gamecenter.entity.PushNotificationEntity +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.message.MessageUnreadRepository +//import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity +//import com.gh.gamecenter.receiver.UmengMessageReceiver +//import com.gh.gamecenter.receiver.UmengMessageReceiver.Companion.TYPE_CLICK +//import com.gh.gamecenter.receiver.UmengMessageReceiver.Companion.TYPE_REMOVE +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.google.gson.Gson +//import com.umeng.message.UmengMessageService +//import io.reactivex.android.schedulers.AndroidSchedulers +//import io.reactivex.schedulers.Schedulers +//import okhttp3.MediaType +//import okhttp3.RequestBody +//import okhttp3.ResponseBody +//import org.android.agoo.common.AgooConstants +//import org.json.JSONObject +//import retrofit2.HttpException +//import java.util.* +// +//class GHUmengNotificationService : UmengMessageService() { +// +// companion object { +// const val ACTION_UMENG = "com.gh.gamecenter.UMENG" +// const val MESSAGE_FROM_SYSTEM = "message_from_system" +// const val HALO_MESSAGE_DIALOG = "HALO_MESSAGE_DIALOG" +// const val HALO_MESSAGE_CENTER = "HALO_MESSAGE_CENTER" +// const val ANSWER = "answer" +// const val FOLLOW_QUESTION = "follow_question" +// const val NOTIFICATION_ID = 2015 +// const val DISPLAY_TYPE_NOTIFICATION = "notification" +// const val DISPLAY_TYPE_CUSTOM = "custom" +// const val MESSAGE_ID = "message_id" +// const val NOTIFICATION_MESSAGE_ID = "notification_message_id" // 通知中心消息 ID +// const val PUSH_ID = "push_id" +// } +// +// val notificationTags = arrayOf("GH_UMENG_TAG_1", "GH_UMENG_TAG_2", "GH_UMENG_TAG_3") +// val gson = Gson() +// +// override fun onMessage(context: Context, intent: Intent) { +// val message = intent.getStringExtra(AgooConstants.MESSAGE_BODY) +// val isMessageFromSystem = intent.getBooleanExtra(MESSAGE_FROM_SYSTEM, false) +// +// try { +// val pushData = message.toObject() +// pushData?.let { handlePushData(context, it, message, isMessageFromSystem) } +// } catch (e: Exception) { +// e.printStackTrace() +// } +// } +// +// private fun handlePushData(context: Context, pushData: PushEntity, message: String, isMessageFromSystem: Boolean) { +// val notificationManager = context.applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager +// +// if (pushData.displayType == DISPLAY_TYPE_NOTIFICATION) { +// // 其它类型的透传信息 +// // 显示到通知栏 +// val msg = message.toObject() +// val data = msg?.extra?.data +// +// // 系统推送(非自定义信息),直接处理跳转 +// if (isMessageFromSystem) { +// val intent = Intent() +// intent.setClass(context, UmengMessageReceiver::class.java) +// intent.putExtra(EntranceUtils.KEY_DATA, data?.link) +// intent.putExtra(EntranceUtils.KEY_TYPE, UmengMessageReceiver.DIRECT_ONLY) +// intent.putExtra(EntranceUtils.KEY_MESSAGE, message) +// intent.putExtra(NOTIFICATION_MESSAGE_ID, data?.messageId) +// context.sendBroadcast(intent) +// return +// } +// +// // 用户未登录的情况下不生成消息中心通知,避免用户掉登录了还收到跳转至消息中心的通知 +// if (data != null +// && data.link?.link == "system" +// && !UserManager.getInstance().isLoggedIn) { +// return +// } +// +// val clickIntent = Intent() +// val removeIntent = Intent() +// +// clickIntent.setClass(context, UmengMessageReceiver::class.java) +// clickIntent.putExtra(EntranceUtils.KEY_DATA, data?.link) +// clickIntent.putExtra(EntranceUtils.KEY_MESSAGE, message) +// clickIntent.putExtra(MESSAGE_ID, msg?.msgId) +// clickIntent.putExtra(PUSH_ID, data?.pushId) +// clickIntent.putExtra(NOTIFICATION_MESSAGE_ID, data?.messageId) +// clickIntent.putExtra(EntranceUtils.KEY_TYPE, TYPE_CLICK) +// +// removeIntent.setClass(context, UmengMessageReceiver::class.java) +// removeIntent.putExtra(EntranceUtils.KEY_TYPE, TYPE_REMOVE) +// removeIntent.putExtra(EntranceUtils.KEY_MESSAGE, message) +// +// val clickPendingIntent = PendingIntent.getBroadcast(context, System.currentTimeMillis().toInt(), +// clickIntent, PendingIntent.FLAG_UPDATE_CURRENT) +// +// val deletePendingIntent = PendingIntent.getBroadcast(context, System.currentTimeMillis().toInt() + 1, +// removeIntent, PendingIntent.FLAG_UPDATE_CURRENT) +// +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// val channel = NotificationChannel("Halo_Push", "Halo_Push", NotificationManager.IMPORTANCE_DEFAULT) +// notificationManager.createNotificationChannel(channel) +// } +// +// val notification = NotificationCompat.Builder(context, "Halo_Push") +// .setSmallIcon(R.drawable.ic_notification) +// .setTicker(pushData.body?.ticker) +// .setContentTitle(pushData.body?.title) +// .setContentText(pushData.body?.text?.fromHtml()) +// .setContentIntent(clickPendingIntent) +// .setDeleteIntent(deletePendingIntent) +// .build() +// notification.flags = notification.flags or Notification.FLAG_AUTO_CANCEL +// +// notificationManager.notify(getNotificationTag(context), NOTIFICATION_ID, notification) +// } else { +// if (UserManager.getInstance().isLoggedIn && +// HALO_MESSAGE_DIALOG == pushData.body?.custom && +// MessageUnreadRepository.unreadLiveData.value != null) { +// // 回答了问题或者关注了问题的消息 +// val msg = gson.fromJson(message, PushMessageEntity::class.java) +// val data = msg?.extra?.data +// +// val type = if (ANSWER == data?.type) { +// "回答了你的问题" +// } else { +// "回答了你关注的问题" +// } +// +// val userName = StringUtils.shrinkStringWithDot(data?.userEntity?.name, 8) +// val displayText = userName + type +// +// if (Notifier.isActivityValid(CurrentActivityHolder.getCurrentActivity()) && +// Notifier.shouldShowNotifier(data?.answer?.id + displayText)) { +// Notifier.create(CurrentActivityHolder.getCurrentActivity()) +// .setText(displayText) +// .setDuration(5000) +// .setIcon(data?.userEntity?.icon) +// .setOnClickListener(View.OnClickListener { +// val bundle = Bundle() +// bundle.putString(EntranceUtils.KEY_ANSWER_ID, data?.answer?.id) +// bundle.putString(EntranceUtils.KEY_ENTRANCE, EntranceUtils.ENTRANCE_UMENG) +// bundle.putString(EntranceUtils.KEY_TO, AnswerDetailActivity::class.java.name) +// EntranceUtils.jumpActivity(context, bundle) +// +// MtaHelper.onEvent("消息弹窗", type, "Does not contains any parameter.") +// +// // 标记已读 +// val jsonObject = JSONObject() +// jsonObject.put("type", type) +// val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) +// +// RetrofitManager.getInstance(application).api.postMessageRead(UserManager.getInstance().userId, data?.id, body) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// super.onResponse(response) +// MessageUnreadRepository.loadMessageUnreadData() +// } +// +// override fun onFailure(e: HttpException?) { +// e?.printStackTrace() +// } +// }) +// Notifier.hide() +// }) +// .show(false) +// Notifier.tagNotifierAsShowed(data?.answer?.id + displayText) +// } +// } else if (HALO_MESSAGE_CENTER == pushData.body?.custom) { +// // 消息中心逻辑 +// val msg = gson.fromJson(message, PushMessageUnreadEntity::class.java) +// val data = msg?.extra?.data +// data?.let { MessageUnreadRepository.loadMessageUnreadData() } +// } +// } +// } +// +// /** +// * 规则:最多三条消息,以旧换新 +// * +// * @return NotificationTag +// */ +// private fun getNotificationTag(context: Context): String { +// val sp = PreferenceManager.getDefaultSharedPreferences(context) +// val edit = sp.edit() +// +// val timeTagMap = HashMap() +// for (tag in notificationTags) { +// val time = sp.getLong(tag, 0) +// if (time == 0L) { +// edit.putLong(tag, System.currentTimeMillis()).apply() +// return tag +// } else { +// timeTagMap[time] = tag +// } +// } +// +// val minTime = Collections.min(timeTagMap.keys) +// val tag = timeTagMap[minTime] +// edit.putLong(tag, System.currentTimeMillis()).apply() +// return if (TextUtils.isEmpty(tag)) notificationTags[0] else tag!! +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/DefaultJsApi.kt b/app/src/main/java/com/gh/common/DefaultJsApi.kt index 8962aafd31..879b8615e9 100644 --- a/app/src/main/java/com/gh/common/DefaultJsApi.kt +++ b/app/src/main/java/com/gh/common/DefaultJsApi.kt @@ -22,6 +22,7 @@ import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.gamecenter.security.BindPhoneActivity import com.gh.gamecenter.user.LoginTag +import com.gh.gamecenter.user.UserRepository import com.halo.assistant.HaloApp import com.lightgame.utils.Utils import io.reactivex.android.schedulers.AndroidSchedulers @@ -240,6 +241,17 @@ class DefaultJsApi(var context: Context) { } } + @JavascriptInterface + fun logoutExitWebViewAndRedirectToLogin() { + UserRepository.getInstance(context).logout() + if (context is Activity) { + AppExecutor.uiExecutor.executeWithDelay(Runnable { + context.ifLogin("内部网页") + (context as Activity).finish() + }, 100) + } + } + @Keep internal data class ImageEvent(var imageList: ArrayList = arrayListOf(), var position: Int = 0) diff --git a/app/src/main/java/com/gh/common/LocalBroadcastReceiver.kt b/app/src/main/java/com/gh/common/LocalBroadcastReceiver.kt index 68bc92a280..726ff4389f 100644 --- a/app/src/main/java/com/gh/common/LocalBroadcastReceiver.kt +++ b/app/src/main/java/com/gh/common/LocalBroadcastReceiver.kt @@ -1,18 +1,24 @@ -package com.gh.common - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent - -/** - * 可使用 [LocalBroadcastManager] 来进行简单的模块间消息通知 - */ - -class LocalBroadcastReceiver : BroadcastReceiver() { - - override fun onReceive(context: Context?, intent: Intent?) { - intent?.let { - when (intent.action) { +//package com.gh.common +// +//import android.content.BroadcastReceiver +//import android.content.Context +//import android.content.Intent +//import com.gh.common.im.ImManager +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.retrofit.RetrofitManager +//import com.halo.assistant.HaloApp +//import com.m7.imkfsdk.chat.ChatActivity +//import io.reactivex.schedulers.Schedulers +// +///** +// * 可使用 [LocalBroadcastManager] 来进行简单的模块间消息通知 +// */ +// +//class LocalBroadcastReceiver : BroadcastReceiver() { +// +// override fun onReceive(context: Context?, intent: Intent?) { +// intent?.let { +// when (intent.action) { // ChatActivity.ACTION_DISMISS_FLOATING_WINDOW -> { // ImManager.dismissFloatingWindow() // @@ -24,10 +30,10 @@ class LocalBroadcastReceiver : BroadcastReceiver() { // ChatActivity.ACTION_HIDE_UNREAD_DOT -> { // ImManager.updateShouldShowFloatingWindowDot(false) // } - - else -> return - } - } - } - -} \ No newline at end of file +// +// else -> return +// } +// } +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/PushManager.kt b/app/src/main/java/com/gh/common/PushManager.kt index 1908bd3cf8..9150a877fc 100644 --- a/app/src/main/java/com/gh/common/PushManager.kt +++ b/app/src/main/java/com/gh/common/PushManager.kt @@ -1,29 +1,8 @@ package com.gh.common import android.annotation.SuppressLint -import android.preference.PreferenceManager -import com.gh.base.GHUmengNotificationService -import com.gh.common.constant.Config -import com.gh.common.exposure.meta.MetaUtil -import com.gh.common.util.edit -import com.gh.common.util.toJson -import com.gh.common.util.toObject -import com.gh.common.util.tryWithDefaultCatch -import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.entity.AliasEntity -import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp -import com.lightgame.utils.Utils -import com.umeng.commonsdk.UMConfigure -import com.umeng.message.IUmengRegisterCallback -import com.umeng.message.PushAgent -import io.reactivex.schedulers.Schedulers -import okhttp3.MediaType -import okhttp3.RequestBody -import org.android.agoo.huawei.HuaWeiRegister -import org.android.agoo.mezu.MeizuRegister -import org.android.agoo.xiaomi.MiPushRegistar -import org.json.JSONObject object PushManager { @@ -36,103 +15,103 @@ object PushManager { @JvmStatic fun init(channel: String) { - tryWithDefaultCatch { - //初始化友盟推送 - UMConfigure.init(mApplication, Config.UMENG_APPKEY, channel, UMConfigure.DEVICE_TYPE_PHONE, Config.UMENG_MESSAGE_SECRET) - - val pushAgent = PushAgent.getInstance(mApplication) - - runOnIoThread { registerDevice() } - - // 注册小米、华为和魅族通道 - MiPushRegistar.register(mApplication, Config.MIPUSH_APPID, Config.MIPUSH_APPKEY) - HuaWeiRegister.register(mApplication) - MeizuRegister.register(mApplication, BuildConfig.MEIZUPUSH_APPID, BuildConfig.MEIZUPUSH_APPKEY) - - val aliasInSp = PreferenceManager.getDefaultSharedPreferences(mApplication).getString(SP_PUSH_ALIAS, "") - mPreviousAlias = aliasInSp?.toObject() - - if (mPreviousAlias == null) { - getAndSetAlias() - } - - // 完全自定义处理(透传) - pushAgent.setPushIntentServiceClass(GHUmengNotificationService::class.java) - } +// tryWithDefaultCatch { +// //初始化友盟推送 +// UMConfigure.init(mApplication, Config.UMENG_APPKEY, channel, UMConfigure.DEVICE_TYPE_PHONE, Config.UMENG_MESSAGE_SECRET) +// +// val pushAgent = PushAgent.getInstance(mApplication) +// +// runOnIoThread { registerDevice() } +// +// // 注册小米、华为和魅族通道 +// MiPushRegistar.register(mApplication, Config.MIPUSH_APPID, Config.MIPUSH_APPKEY) +// HuaWeiRegister.register(mApplication) +// MeizuRegister.register(mApplication, BuildConfig.MEIZUPUSH_APPID, BuildConfig.MEIZUPUSH_APPKEY) +// +// val aliasInSp = PreferenceManager.getDefaultSharedPreferences(mApplication).getString(SP_PUSH_ALIAS, "") +// mPreviousAlias = aliasInSp?.toObject() +// +// if (mPreviousAlias == null) { +// getAndSetAlias() +// } +// +// // 完全自定义处理(透传) +// pushAgent.setPushIntentServiceClass(GHUmengNotificationService::class.java) +// } } private fun registerDevice() { - PushAgent.getInstance(mApplication).register(object : IUmengRegisterCallback { - override fun onSuccess(dToken: String) { - //注册成功会返回device token - deviceToken = dToken - getAndSetAlias() - Utils.log("deviceToken::$dToken") - } - - override fun onFailure(s: String, s1: String) { - Utils.log("deviceToken::" + "注册失败") - } - }) +// PushAgent.getInstance(mApplication).register(object : IUmengRegisterCallback { +// override fun onSuccess(dToken: String) { +// //注册成功会返回device token +// deviceToken = dToken +// getAndSetAlias() +// Utils.log("deviceToken::$dToken") +// } +// +// override fun onFailure(s: String, s1: String) { +// Utils.log("deviceToken::" + "注册失败") +// } +// }) } @SuppressLint("CheckResult") @JvmStatic fun getAndSetAlias() { - if (deviceToken.isNullOrEmpty()) { - registerDevice() - return - } - - val meta = MetaUtil.getMeta() - - val jsonObject = JSONObject() - jsonObject.put("device_token", deviceToken) - jsonObject.put("imei", meta.imei) - jsonObject.put("android_id", meta.android_id) - jsonObject.put("model", meta.model) - jsonObject.put("manufacturer", meta.manufacturer) - jsonObject.put("os", meta.os) - jsonObject.put("os_version", meta.android_version) - jsonObject.put("mac", meta.mac) - jsonObject.put("gid", meta.gid) - - val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) - - RetrofitManager.getInstance(mApplication).api.getAlias(body) - .subscribeOn(Schedulers.io()) - .subscribe( - { setAlias(it) }, - { it.printStackTrace() } - ) +// if (deviceToken.isNullOrEmpty()) { +// registerDevice() +// return +// } +// +// val meta = MetaUtil.getMeta() +// +// val jsonObject = JSONObject() +// jsonObject.put("device_token", deviceToken) +// jsonObject.put("imei", meta.imei) +// jsonObject.put("android_id", meta.android_id) +// jsonObject.put("model", meta.model) +// jsonObject.put("manufacturer", meta.manufacturer) +// jsonObject.put("os", meta.os) +// jsonObject.put("os_version", meta.android_version) +// jsonObject.put("mac", meta.mac) +// jsonObject.put("gid", meta.gid) +// +// val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) +// +// RetrofitManager.getInstance(mApplication).api.getAlias(body) +// .subscribeOn(Schedulers.io()) +// .subscribe( +// { setAlias(it) }, +// { it.printStackTrace() } +// ) } @JvmStatic fun setAlias(alias: AliasEntity) { - val pushAgent = PushAgent.getInstance(mApplication) - - mPreviousAlias = alias - PreferenceManager.getDefaultSharedPreferences(mApplication).edit { - putString(SP_PUSH_ALIAS, mPreviousAlias?.toJson()) - } - - pushAgent.setAlias(alias.alias, alias.aliasType) { b, s -> - Utils.log("注册别名 $b + $s") - } +// val pushAgent = PushAgent.getInstance(mApplication) +// +// mPreviousAlias = alias +// PreferenceManager.getDefaultSharedPreferences(mApplication).edit { +// putString(SP_PUSH_ALIAS, mPreviousAlias?.toJson()) +// } +// +// pushAgent.setAlias(alias.alias, alias.aliasType) { b, s -> +// Utils.log("注册别名 $b + $s") +// } } @JvmStatic fun deleteAlias() { - val pushAgent = PushAgent.getInstance(mApplication) - - mPreviousAlias?.let { - pushAgent.deleteAlias(it.alias, it.aliasType) { b, s -> - Utils.log("删除别名 $b + $s") - } - } - PreferenceManager.getDefaultSharedPreferences(mApplication).edit { - putString(SP_PUSH_ALIAS, "") - } - mPreviousAlias = null +// val pushAgent = PushAgent.getInstance(mApplication) +// +// mPreviousAlias?.let { +// pushAgent.deleteAlias(it.alias, it.aliasType) { b, s -> +// Utils.log("删除别名 $b + $s") +// } +// } +// PreferenceManager.getDefaultSharedPreferences(mApplication).edit { +// putString(SP_PUSH_ALIAS, "") +// } +// mPreviousAlias = null } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java index f081ec73bb..bd14878319 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -59,6 +59,9 @@ public class Constants { // 新用户首次启动光环的时间 public static final String SP_INITIAL_USAGE_TIME = "initial_usage_time"; + public static final String SP_IMEI = "imei"; + public static final String SP_ANDROID_ID = "android_id"; + //引导设置 “通知管理” 引导弹窗 public static final String SP_SHOWED_NOTIFICATION_LOGIN = "show_notification_login_hint"; public static final String SP_SHOWED_NOTIFICATION_QUESTION = "show_notification_question_hint"; @@ -165,6 +168,10 @@ public class Constants { public static final String HELP_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_help_dev/help.html?content="; public static final String HELP_ADDRESS = "https://static-web.ghzs.com/ghzs_help/help.html?content="; + // 注销页面 + public static final String LOGOUT_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_help_dev/help.html?content=5f6b1f02786564003944a693"; + public static final String LOGOUT_ADDRESS = "https://static-web.ghzs.com/ghzs_help/help.html?content=5f534111b1f72909fc225672"; + //最少需要多少数据才能上传 public static final int DATA_AMOUNT = 20; diff --git a/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt new file mode 100644 index 0000000000..9acac07dc2 --- /dev/null +++ b/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt @@ -0,0 +1,154 @@ +package com.gh.common.dialog + +import android.app.Dialog +import android.content.DialogInterface +import android.os.Build +import android.os.Bundle +import android.view.* +import android.webkit.WebSettings +import android.webkit.WebView +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.fragment.app.FragmentTransaction +import com.gh.base.fragment.BaseDialogFragment +import com.gh.common.util.dip2px +import com.gh.gamecenter.R + +class PrivacyDialogFragment : BaseDialogFragment() { + + private val mLocalPrivacyHtml = "file:///android_asset/privacy_policies.html" + private val mLocalRegulationHtml = "file:///android_asset/user_regulation.html" + + var containerView: View? = null + var mCallBack: ((isSuccess: Boolean) -> Unit)? = null + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + containerView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_privacy_protocol, null, false) + return containerView + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val mWebViewPrivacy = containerView?.findViewById(R.id.webView) + val mWebViewRegulation = containerView?.findViewById(R.id.webView2) + + mWebViewPrivacy?.isHorizontalScrollBarEnabled = false + mWebViewRegulation?.isHorizontalScrollBarEnabled = false + + val mTitlePrivacyTv = containerView?.findViewById(R.id.privacyTitleTv) + val mTitleRegulationTv = containerView?.findViewById(R.id.userRegulationTitleTv) + + val settingsArrayList = arrayListOf(mWebViewPrivacy?.settings, mWebViewRegulation?.settings) + + for (settings in settingsArrayList) { + settings?.javaScriptEnabled = true + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + settings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW + } + // 避免提示网页有害信息不能访问 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + settings?.safeBrowsingEnabled = false + } + + // 适配大于屏幕宽度的页面 + settings?.useWideViewPort = true + settings?.loadWithOverviewMode = true + settings?.domStorageEnabled = true + + // 自适应屏幕 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + settings?.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING + } + } + +// if (NetworkUtils.isNetworkConnected(requireContext())) { +// mWebViewPrivacy?.loadUrl(requireContext().getString(R.string.privacy_policy_url)) +// mWebViewRegulation?.loadUrl(requireContext().getString(R.string.user_regulation_url)) +// } else { + mWebViewPrivacy?.loadUrl(mLocalPrivacyHtml) + mWebViewRegulation?.loadUrl(mLocalRegulationHtml) +// } + +// val client = object : WebViewClient() { +// override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) { +// super.onReceivedError(view, request, error) +// if (view == mWebViewPrivacy) { +// view?.loadUrl(mLocalPrivacyHtml) +// } else { +// view?.loadUrl(mLocalRegulationHtml) +// } +// } +// } + +// mWebViewPrivacy?.webViewClient = client +// mWebViewRegulation?.webViewClient = client + + mTitlePrivacyTv?.setOnClickListener { + mTitlePrivacyTv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) + mTitleRegulationTv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.text_F5F5F5)) + + mWebViewPrivacy?.visibility = View.VISIBLE + mWebViewRegulation?.visibility = View.GONE + } + + mTitleRegulationTv?.setOnClickListener { + mTitlePrivacyTv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.text_F5F5F5)) + mTitleRegulationTv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) + + mWebViewPrivacy?.visibility = View.GONE + mWebViewRegulation?.visibility = View.VISIBLE + } + + containerView?.findViewById(R.id.refuseTv)?.setOnClickListener { + mCallBack?.invoke(false) + dismiss() + } + containerView?.findViewById(R.id.agreeTv)?.setOnClickListener { + mCallBack?.invoke(true) + dismiss() + } + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val createDialog = super.onCreateDialog(savedInstanceState) + createDialog.setCanceledOnTouchOutside(false) + createDialog.setOnKeyListener(object : DialogInterface.OnKeyListener { + override fun onKey(dialog: DialogInterface?, keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + return true + } + return false + } + }) + + val window = createDialog.window + window?.setGravity(Gravity.CENTER) + return createDialog + } + + override fun onStart() { + super.onStart() + val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px() + val height = ViewGroup.LayoutParams.WRAP_CONTENT + dialog?.window?.setLayout(width, height) + } + + companion object { + @JvmStatic + fun show(activity: AppCompatActivity, callBack: ((isSuccess: Boolean) -> Unit)?) { + var privacyDialogFragment = activity.supportFragmentManager.findFragmentByTag(PrivacyDialogFragment::class.java.simpleName) as? PrivacyDialogFragment + if (privacyDialogFragment != null) { + privacyDialogFragment.mCallBack = callBack + val transaction: FragmentTransaction = activity.supportFragmentManager.beginTransaction() + transaction.show(privacyDialogFragment) + transaction.commit() + } else { + privacyDialogFragment = PrivacyDialogFragment().apply { + mCallBack = callBack + } + privacyDialogFragment.show(activity.supportFragmentManager, PrivacyDialogFragment::class.java.simpleName) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt b/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt index 0bce95c4ce..a9f6e6973a 100644 --- a/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt +++ b/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt @@ -9,6 +9,8 @@ import android.os.Build import android.provider.Settings import android.telephony.TelephonyManager import android.text.TextUtils +import com.gh.common.constant.Constants +import com.gh.common.util.SPUtils import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.manager.UserManager import com.halo.assistant.HaloApp @@ -22,6 +24,7 @@ object MetaUtil { private var m: Meta? = null private var imei: String? = null + private var androidId: String? = null fun refreshMeta() { m = Meta(mac = "", @@ -70,6 +73,12 @@ object MetaUtil { return imei ?: "" } + imei = SPUtils.getString(Constants.SP_IMEI) + + if (!TextUtils.isEmpty(imei)) { + return imei ?: "" + } + if (application.checkCallingOrSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { return "" } @@ -77,12 +86,21 @@ object MetaUtil { val telephonyManager = application.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager if (Build.VERSION.SDK_INT >= 29) { - return "".apply { imei = this } + return "".apply { + imei = this + SPUtils.setString(Constants.SP_IMEI, this) + } } else if (Build.VERSION.SDK_INT >= 26) { - return (telephonyManager.imei ?: "").apply { imei = this } + return (telephonyManager.imei ?: "").apply { + imei = this + SPUtils.setString(Constants.SP_IMEI, this) + } } - return (telephonyManager.getDeviceId() ?: "").apply { imei = this } + return (telephonyManager.getDeviceId() ?: "").apply { + imei = this + SPUtils.setString(Constants.SP_IMEI, this) + } } @@ -94,14 +112,35 @@ object MetaUtil { return Build.MANUFACTURER } - fun getAndroidId(): String? { - var android_id: String = "" - try { - android_id = Settings.Secure.getString(application.contentResolver, Settings.Secure.ANDROID_ID) + @JvmStatic + fun getAndroidId(): String { + + if (!HaloApp.isUserAcceptPrivacyPolicy(HaloApp.getInstance().application)) { + return "" + } + + if (androidId != null) { + return androidId ?: "" + } + + androidId = SPUtils.getString(Constants.SP_ANDROID_ID) + + if (!TextUtils.isEmpty(androidId)) { + return androidId ?: "" + } + + return try { + Settings.Secure.getString(application.contentResolver, Settings.Secure.ANDROID_ID).apply { + androidId = this + SPUtils.setString(Constants.SP_ANDROID_ID, this) + } } catch (e: Exception) { e.printStackTrace() + androidId = "" + SPUtils.setString(Constants.SP_ANDROID_ID, "") + "" } - return android_id + } fun getAndroidSDK(): Int? { diff --git a/app/src/main/java/com/gh/common/im/ImManager.kt b/app/src/main/java/com/gh/common/im/ImManager.kt index ab08464ffd..1569b5bf59 100644 --- a/app/src/main/java/com/gh/common/im/ImManager.kt +++ b/app/src/main/java/com/gh/common/im/ImManager.kt @@ -1,40 +1,24 @@ -//package com.gh.common.im -// -//import android.app.Activity -//import android.app.NotificationManager -//import android.content.Context -//import com.gh.base.CurrentActivityHolder -//import com.gh.common.runOnIoThread -//import com.gh.common.util.SPUtils -//import com.gh.common.util.tryWithDefaultCatch -//import com.gh.gamecenter.BuildConfig -//import com.gh.gamecenter.HelpAndFeedbackActivity -//import com.gh.gamecenter.MainActivity -//import com.gh.gamecenter.MessageActivity -//import com.gh.gamecenter.manager.UserManager -//import com.halo.assistant.HaloApp -//import com.m7.imkfsdk.KfStartHelper -//import com.m7.imkfsdk.utils.Utils -//import com.moor.imkf.ChatListener -//import com.moor.imkf.IMChat -//import com.moor.imkf.IMChatManager -//import com.moor.imkf.IMMessage -//import com.moor.imkf.utils.MoorUtils -// -//object ImManager { -// -// const val IM_KEY = "893be270-9c75-11e8-a344-212975ba32b9" -// const val SP_FLOATING_WINDOW_KEY = "IM_FLOATING_WINDOW" -// const val SP_FLOATING_WINDOW_DOT_KEY = "IM_FLOATING_WINDOW_DOT" -// -// var shouldShowFloatingWindow = false -// var shouldShowFloatingWindowDot = false -// -// // 记录当前用户 ID 避免重复初始化 -// var currentUserId = "" -// -// @JvmStatic -// fun attachIm() { +package com.gh.common.im + +import android.app.Activity +import com.gh.gamecenter.HelpAndFeedbackActivity +import com.gh.gamecenter.MainActivity +import com.gh.gamecenter.MessageActivity + +object ImManager { + + const val IM_KEY = "893be270-9c75-11e8-a344-212975ba32b9" + const val SP_FLOATING_WINDOW_KEY = "IM_FLOATING_WINDOW" + const val SP_FLOATING_WINDOW_DOT_KEY = "IM_FLOATING_WINDOW_DOT" + + var shouldShowFloatingWindow = false + var shouldShowFloatingWindowDot = false + + // 记录当前用户 ID 避免重复初始化 + var currentUserId = "" + + @JvmStatic + fun attachIm() { // try { // if (UserManager.getInstance().userInfoEntity != null && // currentUserId != UserManager.getInstance().userId) { @@ -55,10 +39,10 @@ // } catch (e: Exception) { // e.printStackTrace() // } -// } -// -// @JvmStatic -// fun detachIm() { + } + + @JvmStatic + fun detachIm() { // try { // IMChatManager.getInstance().quitSDk() // shouldShowFloatingWindow = false @@ -67,10 +51,10 @@ // } catch (e: Exception) { // e.printStackTrace() // } -// } -// -// @JvmStatic -// fun startChatActivity(activity: Activity, inputContent: String? = "", requestCode: Int? = null) { + } + + @JvmStatic + fun startChatActivity(activity: Activity, inputContent: String? = "", requestCode: Int? = null) { // if (!UserManager.getInstance().userId.isNullOrEmpty()) { // try { // SPUtils.setBoolean(SP_FLOATING_WINDOW_DOT_KEY + UserManager.getInstance().userId, false) @@ -86,30 +70,30 @@ // e.printStackTrace() // } // } -// } -// -// @JvmStatic -// fun showFloatingWindow() { -// updateShouldShowFloatingWindow(true) -// updateShouldShowFloatingWindowDot(true) -// updateFloatingWindow() -// } -// -// @JvmStatic -// fun dismissFloatingWindow() { -// updateShouldShowFloatingWindow(false) -// updateShouldShowFloatingWindowDot(false) -// updateFloatingWindow() -// } -// -// @JvmStatic -// fun removeNotification() { + } + + @JvmStatic + fun showFloatingWindow() { + updateShouldShowFloatingWindow(true) + updateShouldShowFloatingWindowDot(true) + updateFloatingWindow() + } + + @JvmStatic + fun dismissFloatingWindow() { + updateShouldShowFloatingWindow(false) + updateShouldShowFloatingWindowDot(false) + updateFloatingWindow() + } + + @JvmStatic + fun removeNotification() { // val notificationManager = HaloApp.getInstance().application?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager // notificationManager.cancel(ImReceiver.NOTIFICATION_ID) -// } -// -// @JvmStatic -// fun updateFloatingWindow() { + } + + @JvmStatic + fun updateFloatingWindow() { // try { // CurrentActivityHolder.getCurrentActivity()?.let { // if (isActivityValid(it)) { @@ -124,10 +108,10 @@ // } catch (e: Exception) { // e.printStackTrace() // } -// } -// -// @JvmStatic -// fun sendFeedbackMessage(message: String) { + } + + @JvmStatic + fun sendFeedbackMessage(message: String) { // val fromToMessage = IMMessage.createTxtMessage(message) // runOnIoThread { // tryWithDefaultCatch { @@ -138,24 +122,24 @@ // }) // } // } -// } -// -// fun updateShouldShowFloatingWindow(show: Boolean) { + } + + fun updateShouldShowFloatingWindow(show: Boolean) { // SPUtils.setBoolean(SP_FLOATING_WINDOW_KEY + UserManager.getInstance().userId, show) // shouldShowFloatingWindow = show -// } -// -// fun updateShouldShowFloatingWindowDot(show: Boolean) { + } + + fun updateShouldShowFloatingWindowDot(show: Boolean) { // SPUtils.setBoolean(SP_FLOATING_WINDOW_DOT_KEY + UserManager.getInstance().userId, show) // shouldShowFloatingWindowDot = show -// } -// -// private fun isActivityValid(activity: Activity): Boolean { -// return when (activity) { -// is MainActivity -> true -// is HelpAndFeedbackActivity -> true -// is MessageActivity -> true -// else -> false -// } -// } -//} \ No newline at end of file + } + + private fun isActivityValid(activity: Activity): Boolean { + return when (activity) { + is MainActivity -> true + is HelpAndFeedbackActivity -> true + is MessageActivity -> true + else -> false + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/im/ImReceiver.kt b/app/src/main/java/com/gh/common/im/ImReceiver.kt index f3f8efb013..e85974ed5c 100644 --- a/app/src/main/java/com/gh/common/im/ImReceiver.kt +++ b/app/src/main/java/com/gh/common/im/ImReceiver.kt @@ -1,31 +1,20 @@ -//package com.gh.common.im -// -//import android.app.Notification -//import android.app.NotificationChannel -//import android.app.NotificationManager -//import android.app.PendingIntent -//import android.content.BroadcastReceiver -//import android.content.Context -//import android.content.Intent -//import android.os.Build -//import androidx.core.app.NotificationCompat -//import com.gh.base.CurrentActivityHolder -//import com.gh.common.util.doOnMainProcessOnly -//import com.gh.gamecenter.R -//import com.m7.imkfsdk.chat.ChatActivity -//import com.m7.imkfsdk.utils.Utils -//import com.moor.imkf.IMChatManager -// -//class ImReceiver : BroadcastReceiver() { -// -// companion object { -// const val UNIQUE_BROADCAST_ACTION = "com.gh.im" -// const val NOTIFICATION_ID: Int = 987321 -// } -// -// var notificationManager: NotificationManager? = null -// -// override fun onReceive(context: Context?, intent: Intent?) { +package com.gh.common.im + +import android.app.NotificationManager +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent + +class ImReceiver : BroadcastReceiver() { + + companion object { + const val UNIQUE_BROADCAST_ACTION = "com.gh.im" + const val NOTIFICATION_ID: Int = 987321 + } + + var notificationManager: NotificationManager? = null + + override fun onReceive(context: Context?, intent: Intent?) { // context?.doOnMainProcessOnly { // intent?.let { // if (intent.action == IMChatManager.NEW_MSG_ACTION) { @@ -75,5 +64,5 @@ // } // } // } -// } -//} \ No newline at end of file + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/AntiBotHelper.kt b/app/src/main/java/com/gh/common/util/AntiBotHelper.kt index da0ce65c16..c7bfccd1c7 100644 --- a/app/src/main/java/com/gh/common/util/AntiBotHelper.kt +++ b/app/src/main/java/com/gh/common/util/AntiBotHelper.kt @@ -1,14 +1,10 @@ package com.gh.common.util -import com.alibaba.wireless.security.jaq.avmp.IJAQAVMPSignComponent -import com.alibaba.wireless.security.open.SecurityGuardManager -import com.halo.assistant.HaloApp - object AntiBotHelper { - @JvmStatic - val manager by lazy { - SecurityGuardManager.getInstance(HaloApp.getInstance().application).getInterface(IJAQAVMPSignComponent::class.java).apply { - this.initialize() - } - } +// @JvmStatic +// val manager by lazy { +// SecurityGuardManager.getInstance(HaloApp.getInstance().application).getInterface(IJAQAVMPSignComponent::class.java).apply { +// this.initialize() +// } +// } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/DataUtils.java b/app/src/main/java/com/gh/common/util/DataUtils.java index b01103b4b0..3a7d54fe4f 100644 --- a/app/src/main/java/com/gh/common/util/DataUtils.java +++ b/app/src/main/java/com/gh/common/util/DataUtils.java @@ -6,7 +6,6 @@ import android.content.Context; import android.preference.PreferenceManager; import android.text.TextUtils; -import com.gh.common.constant.Config; import com.gh.common.constant.Constants; import com.gh.common.exposure.meta.MetaUtil; import com.gh.gid.GidCallback; @@ -14,13 +13,6 @@ import com.gh.gid.GidHelper; import com.halo.assistant.HaloApp; import com.lightgame.config.CommonDebug; import com.lightgame.utils.Utils; -import com.tencent.bugly.crashreport.CrashReport; -import com.tencent.stat.MtaSDkException; -import com.tencent.stat.StatConfig; -import com.tencent.stat.StatCrashReporter; -import com.tencent.stat.StatReportStrategy; -import com.tencent.stat.StatService; -import com.tendcloud.tenddata.TCAgent; import java.util.HashMap; import java.util.Map; @@ -44,71 +36,71 @@ public class DataUtils { return; } //TalkingData - try { - TCAgent.LOG_ON = false; - TCAgent.init(context, Config.TALKINGDATA_APPID, channel); - /** - * - * 不要启用!!!!不要启用,全部由{@link com.gh.base.AppUncaughtHandler}处理 - */ - TCAgent.setReportUncaughtExceptions(false); - } catch (Exception e) { - e.printStackTrace(); - } +// try { +// TCAgent.LOG_ON = false; +// TCAgent.init(context, Config.TALKINGDATA_APPID, channel); +// /** +// * +// * 不要启用!!!!不要启用,全部由{@link com.gh.base.AppUncaughtHandler}处理 +// */ +// TCAgent.setReportUncaughtExceptions(false); +// } catch (Exception e) { +// e.printStackTrace(); +// } //MTA - try { - /** - * - * 不要启用!!!!全部由{@link com.gh.base.AppUncaughtHandler}处理 - */ - StatConfig.setAutoExceptionCaught(false); - - StatCrashReporter crashReporter = StatCrashReporter.getStatCrashReporter(context); - crashReporter.setJavaCrashHandlerStatus(false); -// crashReporter.setEnableInstantReporting(true); - - StatConfig.setDebugEnable(false); - - // 设置数据上报策略 - // 测试渠道的时候即时上传,方便查看日志 - if (Config.DEFAULT_CHANNEL.equals(HaloApp.getInstance().getChannel())) { - StatConfig.setStatSendStrategy(StatReportStrategy.INSTANT); - } else { - StatConfig.setStatSendStrategy(StatReportStrategy.PERIOD); - StatConfig.setSendPeriodMinutes(5); - } - - // 设置启用Tlink - StatConfig.setTLinkStatus(true); - - StatConfig.init(context); - StatConfig.setInstallChannel(channel); - StatConfig.setAntoActivityLifecycleStat(true); - StatConfig.setAppVersion(PackageUtils.getVersionName()); - - // 开启收集服务 - StatService.startStatService(context, Config.MTA_APPKEY, com.tencent.stat.common.StatConstants.VERSION); - StatService.registerActivityLifecycleCallbacks(context); - } catch (MtaSDkException e) { - e.printStackTrace(); - } +// try { +// /** +// * +// * 不要启用!!!!全部由{@link com.gh.base.AppUncaughtHandler}处理 +// */ +// StatConfig.setAutoExceptionCaught(false); +// +// StatCrashReporter crashReporter = StatCrashReporter.getStatCrashReporter(context); +// crashReporter.setJavaCrashHandlerStatus(false); +//// crashReporter.setEnableInstantReporting(true); +// +// StatConfig.setDebugEnable(false); +// +// // 设置数据上报策略 +// // 测试渠道的时候即时上传,方便查看日志 +// if (Config.DEFAULT_CHANNEL.equals(HaloApp.getInstance().getChannel())) { +// StatConfig.setStatSendStrategy(StatReportStrategy.INSTANT); +// } else { +// StatConfig.setStatSendStrategy(StatReportStrategy.PERIOD); +// StatConfig.setSendPeriodMinutes(5); +// } +// +// // 设置启用Tlink +// StatConfig.setTLinkStatus(true); +// +// StatConfig.init(context); +// StatConfig.setInstallChannel(channel); +// StatConfig.setAntoActivityLifecycleStat(true); +// StatConfig.setAppVersion(PackageUtils.getVersionName()); +// +// // 开启收集服务 +// StatService.startStatService(context, Config.MTA_APPKEY, com.tencent.stat.common.StatConstants.VERSION); +// StatService.registerActivityLifecycleCallbacks(context); +// } catch (MtaSDkException e) { +// e.printStackTrace(); +// } // init bugly - try { - CrashReport.setIsDevelopmentDevice(context, Config.DEFAULT_CHANNEL.equals(channel)); - - CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context); - strategy.setEnableANRCrashMonitor(false); - strategy.setEnableNativeCrashMonitor(false); - strategy.setAppChannel(channel); - strategy.setAppVersion(PackageUtils.getVersionName()); - - CrashReport.initCrashReport(context, Config.BUGLY_APPID, false, strategy); - - } catch (Exception e) { - e.printStackTrace(); - } +// try { +// CrashReport.setIsDevelopmentDevice(context, Config.DEFAULT_CHANNEL.equals(channel)); +// +// CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context); +// strategy.setEnableANRCrashMonitor(false); +// strategy.setEnableNativeCrashMonitor(false); +// strategy.setAppChannel(channel); +// strategy.setAppVersion(PackageUtils.getVersionName()); +// +// CrashReport.initCrashReport(context, Config.BUGLY_APPID, false, strategy); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } } @@ -121,8 +113,7 @@ public class DataUtils { } public static void getGid() { - GidHelper.getInstance().init(HaloApp.getInstance().getApplication()); - GidHelper.getInstance().registerDevice(new GidCallback() { + GidHelper.getInstance().registerDevice(HaloApp.getInstance().getApplication(), new GidCallback() { @Override public void onSuccess(String gid) { Utils.log("Gid", gid); @@ -150,15 +141,15 @@ public class DataUtils { public static void onEvent(Context var0, String var1, String var2) { Properties prop = new Properties(); prop.setProperty(var1, var2); - StatService.trackCustomKVEvent(var0, var1, prop); +// StatService.trackCustomKVEvent(var0, var1, prop); } public static void onPause(Activity var0) { - StatService.onPause(var0); +// StatService.onPause(var0); } public static void onResume(Activity var0) { - StatService.onResume(var0); +// StatService.onResume(var0); } // 游戏启动 @@ -175,7 +166,7 @@ public class DataUtils { for (String key : var3.keySet()) { prop.setProperty(key, var3.get(key) + ""); } - StatService.trackCustomKVEvent(var0, var1, prop); +// StatService.trackCustomKVEvent(var0, var1, prop); } public static void trackTimeEvent(Context context, String eventId, int costTime, String... kv) { @@ -193,7 +184,7 @@ public class DataUtils { if (prop.size() == 0) return; - StatService.trackCustomKVTimeIntervalEvent(context, costTime, eventId, prop); +// StatService.trackCustomKVTimeIntervalEvent(context, costTime, eventId, prop); } // 游戏下载 @@ -241,13 +232,13 @@ public class DataUtils { public static void onError(Context context, Throwable throwable) { //bugly 作为默认处理异常的类库,已经上报了,此处不重复上报 try { - CrashReport.postCatchedException(throwable); +// CrashReport.postCatchedException(throwable); } catch (Exception e) { } //talkingdata try { - TCAgent.onError(context, throwable); +// TCAgent.onError(context, throwable); } catch (Exception e) { } } diff --git a/app/src/main/java/com/gh/common/util/DeviceUtils.java b/app/src/main/java/com/gh/common/util/DeviceUtils.java index 88bbd65851..a39ad3ce9e 100644 --- a/app/src/main/java/com/gh/common/util/DeviceUtils.java +++ b/app/src/main/java/com/gh/common/util/DeviceUtils.java @@ -6,27 +6,21 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Build; -import android.provider.Settings; import android.telephony.TelephonyManager; -import android.text.TextUtils; import android.util.Log; import androidx.annotation.Nullable; import com.gh.common.exposure.meta.MetaUtil; import com.halo.assistant.HaloApp; -import com.lightgame.utils.Util_System_Phone_State; -import com.tencent.stat.StatConfig; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; -import java.io.LineNumberReader; import java.io.Reader; import java.net.Inet4Address; import java.net.InetAddress; @@ -51,10 +45,10 @@ public class DeviceUtils { object.put("mac", getMac(context)); object.put("model", MODEL); object.put("manufacturer", MANUFACTURER); - object.put("android_id", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)); + object.put("android_id", MetaUtil.getAndroidId()); object.put("android_sdk", Build.VERSION.SDK_INT); object.put("android_version", android.os.Build.VERSION.RELEASE); - object.put("ip", getIPAddress(context)); + object.put("ip", ""); object.put("network", getNetwork(context)); return object; } @@ -64,9 +58,9 @@ public class DeviceUtils { JSONObject object = new JSONObject(); try { object.put("IMEI", MetaUtil.getIMEI()); - object.put("ANDROID_ID", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)); + object.put("ANDROID_ID", MetaUtil.getAndroidId()); object.put("MAC", getMac(context)); - object.put("MTA_ID", StatConfig.getMid(context)); +// object.put("MTA_ID", StatConfig.getMid(context)); object.put("MANUFACTURER", MANUFACTURER); object.put("MODEL", MODEL); object.put("ANDROID_SDK", Build.VERSION.SDK_INT); @@ -79,39 +73,39 @@ public class DeviceUtils { } public static String getMac(Context context) { - String str = ""; - String macSerial = ""; - try { - Process pp = Runtime.getRuntime().exec( - "cat /sys/class/net/wlan0/address "); - InputStreamReader ir = new InputStreamReader(pp.getInputStream()); - LineNumberReader input = new LineNumberReader(ir); - - while (null != str) { - str = input.readLine(); - if (str != null) { - macSerial = str.trim();// 去空格 - break; - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - if ("".equals(macSerial)) { - try { - return loadFileAsString("/sys/class/net/eth0/address") - .toUpperCase().substring(0, 17); - } catch (FileNotFoundException e) { - // do nothing - } catch (Exception e) { - e.printStackTrace(); - } - - } - if (TextUtils.isEmpty(macSerial)) { // 备用方案 - macSerial = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo().getMacAddress(); - } - return macSerial; +// String str = ""; +// String macSerial = ""; +// try { +// Process pp = Runtime.getRuntime().exec( +// "cat /sys/class/net/wlan0/address "); +// InputStreamReader ir = new InputStreamReader(pp.getInputStream()); +// LineNumberReader input = new LineNumberReader(ir); +// +// while (null != str) { +// str = input.readLine(); +// if (str != null) { +// macSerial = str.trim();// 去空格 +// break; +// } +// } +// } catch (Exception ex) { +// ex.printStackTrace(); +// } +// if ("".equals(macSerial)) { +// try { +// return loadFileAsString("/sys/class/net/eth0/address") +// .toUpperCase().substring(0, 17); +// } catch (FileNotFoundException e) { +// // do nothing +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// } +// if (TextUtils.isEmpty(macSerial)) { // 备用方案 +// macSerial = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo().getMacAddress(); +// } + return ""; } private static String loadFileAsString(String fileName) throws Exception { @@ -243,8 +237,7 @@ public class DeviceUtils { @Nullable public static String getTelephonySubscriberId(Context context) { - TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - return tm.getSubscriberId(); + return ""; } // ping domain diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 40cfd9630e..f4c51eb4a5 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; @@ -47,7 +46,6 @@ import com.gh.common.view.MaxHeightNestedScrollView; import com.gh.gamecenter.AboutActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SuggestionActivity; -import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.PrivacyPolicyItemViewHolder; import com.gh.gamecenter.databinding.DialogOverseaConfirmationBinding; import com.gh.gamecenter.databinding.ImprintContentItemBinding; @@ -988,7 +986,7 @@ public class DialogUtils { params.horizontalMargin = 0; params.width = context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(40); int height = context.getResources().getDisplayMetrics().heightPixels - DisplayUtils.dip2px(120); - int maxHeight = DisplayUtils.dip2px(546); + int maxHeight = DisplayUtils.dip2px(446); if (height > maxHeight) { params.height = maxHeight; } else { @@ -1024,8 +1022,10 @@ public class DialogUtils { if (hierarchy != null) { if (position == 0) { hierarchy.setPlaceholderImage(R.drawable.permission_storage); - } else { + } else if (position == 1) { hierarchy.setPlaceholderImage(R.drawable.permission_phone_state); + } else { + hierarchy.setPlaceholderImage(R.drawable.permission_sdk); } } } @@ -1037,7 +1037,7 @@ public class DialogUtils { } }); - SpannableStringBuilder skipText = new SpannableStringBuilder("查看完整版的隐私政策、用户协议、第三方SDK接入说明"); + SpannableStringBuilder skipText = new SpannableStringBuilder("查看完整版的隐私政策和用户协议"); skipText.setSpan(new ClickableSpan() { @Override public void updateDrawState(@NonNull TextPaint ds) { @@ -1049,10 +1049,9 @@ public class DialogUtils { @Override public void onClick(@NonNull View widget) { // MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击隐私政策"); - Intent intent = WebActivity.getPrivacyPolicyIntent(activityContext); - activityContext.startActivity(intent); + DirectUtils.directToExternalBrowser(context, context.getString(R.string.privacy_policy_url)); } - }, skipText.length() - 20, skipText.length() - 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + }, skipText.length() - 9, skipText.length() - 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); skipText.setSpan(new ClickableSpan() { @Override @@ -1065,11 +1064,11 @@ public class DialogUtils { @Override public void onClick(@NonNull View widget) { // MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击用户协议"); - activityContext.startActivity(WebActivity.getWebIntent(activityContext)); + DirectUtils.directToExternalBrowser(context, context.getString(R.string.disclaimer_url)); } - }, skipText.length() - 15, skipText.length() - 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + }, skipText.length() - 4, skipText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - skipText.setSpan(new ClickableSpan() { + /*skipText.setSpan(new ClickableSpan() { @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); @@ -1082,7 +1081,7 @@ public class DialogUtils { // MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击第三方SDK接入说明"); activityContext.startActivity(WebActivity.getThirdPartySdkStatementIntent(activityContext)); } - }, skipText.length() - 10, skipText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + }, skipText.length() - 10, skipText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);*/ title.setText(entity.getTitle()); linkContent.setText(skipText); @@ -1144,8 +1143,9 @@ public class DialogUtils { }); reviewButton.setOnClickListener(v -> { // MtaHelper.onEvent("隐私政策弹窗", "退出提示弹窗", "再次查看"); + callback.onCallback(); dialog.dismiss(); - showPrivacyPolicyDialog(activityContext, entity, callback); + //showPrivacyPolicyDialog(activityContext, entity, callback); }); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); diff --git a/app/src/main/java/com/gh/common/util/GdtHelper.kt b/app/src/main/java/com/gh/common/util/GdtHelper.kt index 680f26a3b4..f4365cbdb9 100644 --- a/app/src/main/java/com/gh/common/util/GdtHelper.kt +++ b/app/src/main/java/com/gh/common/util/GdtHelper.kt @@ -1,10 +1,6 @@ package com.gh.common.util import android.app.Application -import android.text.TextUtils -import com.lightgame.utils.Utils -import com.qq.gdt.action.GDTAction -import org.json.JSONObject /** * 广点通辅助类 [https://gitlab.ghzhushou.com/pm/halo-app-issues/issues/403] @@ -23,37 +19,37 @@ object GdtHelper { const val PLATFORM = "PLATFORM" fun init(application: Application, channel: String) { - if (channel == "GH_728") { - GDTAction.init(application, "1111012969", "9d3d9da5b0948a317c03d08f14d445dc") - } else if (channel == "GH_729") { - GDTAction.init(application, "1111013063", "f53dabf458a356b101d99fc4069eb7f1") - } else { - GDTAction.init(application, "1110680399", "f5ddaafbf520d7d7385499232a408d0a") - } +// if (channel == "GH_728") { +// GDTAction.init(application, "1111012969", "9d3d9da5b0948a317c03d08f14d445dc") +// } else if (channel == "GH_729") { +// GDTAction.init(application, "1111013063", "f53dabf458a356b101d99fc4069eb7f1") +// } else { +// GDTAction.init(application, "1110680399", "f5ddaafbf520d7d7385499232a408d0a") +// } } fun logAction(type: String) { - GDTAction.logAction(type) - Utils.log("GDT", type) +// GDTAction.logAction(type) +// Utils.log("GDT", type) } fun logAction(type: String, vararg kv: String?) { - try { - val actionParam = JSONObject() - for (i in kv.indices) { - if (i % 2 != 0) { - val key = kv[i - 1] - val value = kv[i] - if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { - actionParam.put(key, value) - } - } - } - Utils.log("GDT", "$type + [${kv.joinToString(" , ")}]") - GDTAction.logAction(type, actionParam) - } catch (e: Exception) { - e.printStackTrace() - } +// try { +// val actionParam = JSONObject() +// for (i in kv.indices) { +// if (i % 2 != 0) { +// val key = kv[i - 1] +// val value = kv[i] +// if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { +// actionParam.put(key, value) +// } +// } +// } +// Utils.log("GDT", "$type + [${kv.joinToString(" , ")}]") +// GDTAction.logAction(type, actionParam) +// } catch (e: Exception) { +// e.printStackTrace() +// } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/Installation.java b/app/src/main/java/com/gh/common/util/Installation.java index 3602b9e19e..865219d5a2 100644 --- a/app/src/main/java/com/gh/common/util/Installation.java +++ b/app/src/main/java/com/gh/common/util/Installation.java @@ -1,7 +1,6 @@ package com.gh.common.util; import android.content.Context; -import android.provider.Settings; import android.text.TextUtils; import com.gh.common.exposure.meta.MetaUtil; @@ -23,7 +22,7 @@ public class Installation { if (!TextUtils.isEmpty(imei)) { return imei; } - String android_id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); + String android_id = MetaUtil.getAndroidId(); if (!TextUtils.isEmpty(android_id)) { return android_id; } diff --git a/app/src/main/java/com/gh/common/util/LogUtils.java b/app/src/main/java/com/gh/common/util/LogUtils.java index e759fafe91..df059a3c37 100644 --- a/app/src/main/java/com/gh/common/util/LogUtils.java +++ b/app/src/main/java/com/gh/common/util/LogUtils.java @@ -4,7 +4,6 @@ import android.annotation.SuppressLint; import android.app.Application; import android.content.Context; import android.os.Build; -import android.provider.Settings; import android.text.TextUtils; import com.gh.common.constant.Constants; @@ -255,7 +254,7 @@ public class LogUtils { try { object.put("version", PackageUtils.getVersionName()); object.put("channel", HaloApp.getInstance().getChannel()); - object.put("android_id", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)); + object.put("android_id", MetaUtil.getAndroidId()); object.put("time", Utils.getTime(context)); object.put("network", DeviceUtils.getNetwork(context)); object.put("user_id", UserManager.getInstance().getUserId()); @@ -279,7 +278,7 @@ public class LogUtils { try { object.put("version", PackageUtils.getVersionName()); object.put("channel", HaloApp.getInstance().getChannel()); - object.put("android_id", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)); + object.put("android_id", MetaUtil.getAndroidId()); object.put("time", Utils.getTime(context)); object.put("network", DeviceUtils.getNetwork(context)); object.put("user_id", UserManager.getInstance().getUserId()); diff --git a/app/src/main/java/com/gh/common/util/LoginHelper.kt b/app/src/main/java/com/gh/common/util/LoginHelper.kt index b43f5f2822..69cd9e5dd8 100644 --- a/app/src/main/java/com/gh/common/util/LoginHelper.kt +++ b/app/src/main/java/com/gh/common/util/LoginHelper.kt @@ -2,9 +2,6 @@ package com.gh.common.util import android.app.Activity import android.content.Intent -import com.bytedance.sdk.open.aweme.authorize.model.Authorization -import com.bytedance.sdk.open.douyin.DouYinOpenApiFactory -import com.bytedance.sdk.open.douyin.DouYinOpenConfig import com.gh.common.constant.Config import com.gh.gamecenter.R import com.gh.gamecenter.user.LoginTag @@ -89,9 +86,9 @@ object LoginHelper { } } - WbSdk.install(context, AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE)) - DouYinOpenApiFactory.init(DouYinOpenConfig(Config.DOUYIN_CLIENTKEY)) + +// DouYinOpenApiFactory.init(DouYinOpenConfig(Config.DOUYIN_CLIENTKEY)) Utils.log("LoginHelper initialization") } @@ -163,6 +160,8 @@ object LoginHelper { // 微博登录 @JvmStatic fun loginWithWeibo(loginCallback: LoginCallback, context: Activity) { + WbSdk.install(context, AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE)) + mLoginCallback = WeakReference(loginCallback) mSsoHandler = WeakReference(SsoHandler(context)) mSsoHandler?.get()?.authorizeClientSso(object : WbAuthListener { @@ -204,14 +203,14 @@ object LoginHelper { // 抖音登录 @JvmStatic fun loginWithDouYin(loginCallback: LoginCallback, context: Activity) { - mLoginCallback = WeakReference(loginCallback) - val douYinOpenApi = DouYinOpenApiFactory.create(context) - - val request = Authorization.Request() - request.scope = "user_info" // 用户授权时必选权限 - //request.state = "ww"; // 用于保持请求和回调的状态,授权请求后原样带回给第三方。 - //request.callerLocalEntry = "com.xxx.xxx...activity"; - douYinOpenApi.authorize(request) +// mLoginCallback = WeakReference(loginCallback) +// val douYinOpenApi = DouYinOpenApiFactory.create(context) +// +// val request = Authorization.Request() +// request.scope = "user_info" // 用户授权时必选权限 +// //request.state = "ww"; // 用于保持请求和回调的状态,授权请求后原样带回给第三方。 +// //request.callerLocalEntry = "com.xxx.xxx...activity"; +// douYinOpenApi.authorize(request) } interface LoginCallback { diff --git a/app/src/main/java/com/gh/common/util/MtaHelper.kt b/app/src/main/java/com/gh/common/util/MtaHelper.kt index d1321c6377..ce50fd36fa 100644 --- a/app/src/main/java/com/gh/common/util/MtaHelper.kt +++ b/app/src/main/java/com/gh/common/util/MtaHelper.kt @@ -1,63 +1,52 @@ package com.gh.common.util -import android.os.Build -import android.text.TextUtils -import com.gh.common.exposure.meta.MetaUtil -import com.gh.common.exposure.meta.MetaUtil.getIMEI -import com.gh.gamecenter.BuildConfig -import com.halo.assistant.HaloApp -import com.lightgame.utils.Util_System_Phone_State -import com.lightgame.utils.Utils -import com.tencent.stat.StatService -import java.util.* - object MtaHelper { @JvmStatic fun onEvent(eventId: String, vararg kv: String?) { - val prop = Properties() - - if (kv.size == 1) { - prop.setProperty(kv[0], kv[0]) - StatService.trackCustomKVEvent(HaloApp.getInstance().application, eventId, prop) - Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}]") - return - } - - for (i in kv.indices) { - if (i % 2 != 0) { - val key = kv[i - 1] - val value = kv[i] - if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { - prop.setProperty(key, value) - } - } - } - - Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}]") - StatService.trackCustomKVEvent(HaloApp.getInstance().application, eventId, prop) +// val prop = Properties() +// +// if (kv.size == 1) { +// prop.setProperty(kv[0], kv[0]) +// StatService.trackCustomKVEvent(HaloApp.getInstance().application, eventId, prop) +// Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}]") +// return +// } +// +// for (i in kv.indices) { +// if (i % 2 != 0) { +// val key = kv[i - 1] +// val value = kv[i] +// if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { +// prop.setProperty(key, value) +// } +// } +// } +// +// Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}]") +// StatService.trackCustomKVEvent(HaloApp.getInstance().application, eventId, prop) } @JvmStatic fun onEventWithTime(eventId: String, time: Int, vararg kv: String?) { - val prop = Properties() - for (i in kv.indices) { - if (i % 2 != 0 || i != 0) { - val key = kv[i - 1] - val value = kv[i] - if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { - prop.setProperty(key, value) - } - } - } - - if (prop.size == 0 && kv.size == 1) { - prop.setProperty(kv[0], kv[0]) - } - - if (prop.size == 0) return - Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}] + last $time seconds") - StatService.trackCustomKVTimeIntervalEvent(HaloApp.getInstance().application, time, eventId, prop) +// val prop = Properties() +// for (i in kv.indices) { +// if (i % 2 != 0 || i != 0) { +// val key = kv[i - 1] +// val value = kv[i] +// if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { +// prop.setProperty(key, value) +// } +// } +// } +// +// if (prop.size == 0 && kv.size == 1) { +// prop.setProperty(kv[0], kv[0]) +// } +// +// if (prop.size == 0) return +// Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}] + last $time seconds") +// StatService.trackCustomKVTimeIntervalEvent(HaloApp.getInstance().application, time, eventId, prop) } /** @@ -65,29 +54,29 @@ object MtaHelper { */ @JvmStatic fun onEventWithBasicDeviceInfo(eventId: String, vararg kv: String) { - val prop = Properties() - for (i in kv.indices) { - if (i % 2 != 0) { - val key = kv[i - 1] - val value = kv[i] - if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { - prop.setProperty(key, value) - } - } - } - - prop.setProperty("光环版本", BuildConfig.VERSION_NAME) - prop.setProperty("网络状态", DeviceUtils.getNetwork(HaloApp.getInstance().application)) - prop.setProperty("IMEI", MetaUtil.getIMEI()) - prop.setProperty("机型", Build.MODEL) - prop.setProperty("厂商", Build.MANUFACTURER) - prop.setProperty("Android版本", Build.VERSION.RELEASE) - if (!TextUtils.isEmpty(HaloApp.getInstance().gid)) { - prop.setProperty("GID", HaloApp.getInstance().gid) - } - - Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}]") - StatService.trackCustomKVEvent(HaloApp.getInstance().application, eventId, prop) +// val prop = Properties() +// for (i in kv.indices) { +// if (i % 2 != 0) { +// val key = kv[i - 1] +// val value = kv[i] +// if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { +// prop.setProperty(key, value) +// } +// } +// } +// +// prop.setProperty("光环版本", BuildConfig.VERSION_NAME) +// prop.setProperty("网络状态", DeviceUtils.getNetwork(HaloApp.getInstance().application)) +// prop.setProperty("IMEI", MetaUtil.getIMEI()) +// prop.setProperty("机型", Build.MODEL) +// prop.setProperty("厂商", Build.MANUFACTURER) +// prop.setProperty("Android版本", Build.VERSION.RELEASE) +// if (!TextUtils.isEmpty(HaloApp.getInstance().gid)) { +// prop.setProperty("GID", HaloApp.getInstance().gid) +// } +// +// Utils.log("MTA","$eventId + [${kv.joinToString(" , ")}]") +// StatService.trackCustomKVEvent(HaloApp.getInstance().application, eventId, prop) } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/PushHelper.kt b/app/src/main/java/com/gh/common/util/PushHelper.kt index 5f45f082c7..b50011dedf 100644 --- a/app/src/main/java/com/gh/common/util/PushHelper.kt +++ b/app/src/main/java/com/gh/common/util/PushHelper.kt @@ -1,82 +1,82 @@ -package com.gh.common.util - -import android.annotation.SuppressLint -import android.content.Context -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.message.MessageUnreadRepository -import com.gh.gamecenter.receiver.UmengMessageReceiver -import com.gh.gamecenter.retrofit.BiResponse -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import io.reactivex.schedulers.Schedulers -import okhttp3.MediaType -import okhttp3.RequestBody -import okhttp3.ResponseBody -import org.json.JSONObject -import retrofit2.HttpException - -object PushHelper { - - /** - * 提交推送点击事件,会尝试从 SP 读取之前失败的一并提交 - */ - @SuppressLint("CheckResult") - @JvmStatic - fun postPushClickAction(context: Context, clickEvent: UmengMessageReceiver.ClickEvent? = null) { - val clickEventList = arrayListOf() - - clickEvent?.let { clickEventList.add(it) } - - val failedClickEventList = SPUtils.getString(UmengMessageReceiver.SP_CLICK_EVENT) - .toObject>() - - failedClickEventList?.let { clickEventList.addAll(it) } - - // 没有要提交的事件 - if (clickEventList.size == 0) return - - val body = RequestBody.create(MediaType.parse("application/json"), clickEventList.toJson()) - - RetrofitManager.getInstance(context) - .api - .postUmengReceiveInfo(body) - .subscribeOn(Schedulers.io()) - .subscribe(object : BiResponse() { - override fun onSuccess(data: ResponseBody) { - SPUtils.setString(UmengMessageReceiver.SP_CLICK_EVENT, "") - } - - override fun onFailure(exception: Exception) { - SPUtils.setString(UmengMessageReceiver.SP_CLICK_EVENT, clickEventList.toJson()) - } - }) - } - - - /** - * 将消息中心的消息标记为已读 - * [type] 跳转类型 - * [notificationMessageId] 通知中心 ID - */ - fun setNotificationMessageRead(context: Context, type: String, notificationMessageId: String) { - - val jsonObject = JSONObject() - jsonObject.put("type", type) - val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) - - RetrofitManager.getInstance(context) - .api - .postMessageRead(UserManager.getInstance().userId, notificationMessageId, body) - .subscribeOn(Schedulers.io()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - super.onResponse(response) - MessageUnreadRepository.loadMessageUnreadData() - } - - override fun onFailure(e: HttpException?) { - e?.printStackTrace() - } - }) - } -} \ No newline at end of file +//package com.gh.common.util +// +//import android.annotation.SuppressLint +//import android.content.Context +//import com.gh.gamecenter.manager.UserManager +//import com.gh.gamecenter.message.MessageUnreadRepository +//import com.gh.gamecenter.receiver.UmengMessageReceiver +//import com.gh.gamecenter.retrofit.BiResponse +//import com.gh.gamecenter.retrofit.Response +//import com.gh.gamecenter.retrofit.RetrofitManager +//import io.reactivex.schedulers.Schedulers +//import okhttp3.MediaType +//import okhttp3.RequestBody +//import okhttp3.ResponseBody +//import org.json.JSONObject +//import retrofit2.HttpException +// +//object PushHelper { +// +// /** +// * 提交推送点击事件,会尝试从 SP 读取之前失败的一并提交 +// */ +// @SuppressLint("CheckResult") +// @JvmStatic +// fun postPushClickAction(context: Context, clickEvent: UmengMessageReceiver.ClickEvent? = null) { +// val clickEventList = arrayListOf() +// +// clickEvent?.let { clickEventList.add(it) } +// +// val failedClickEventList = SPUtils.getString(UmengMessageReceiver.SP_CLICK_EVENT) +// .toObject>() +// +// failedClickEventList?.let { clickEventList.addAll(it) } +// +// // 没有要提交的事件 +// if (clickEventList.size == 0) return +// +// val body = RequestBody.create(MediaType.parse("application/json"), clickEventList.toJson()) +// +// RetrofitManager.getInstance(context) +// .api +// .postUmengReceiveInfo(body) +// .subscribeOn(Schedulers.io()) +// .subscribe(object : BiResponse() { +// override fun onSuccess(data: ResponseBody) { +// SPUtils.setString(UmengMessageReceiver.SP_CLICK_EVENT, "") +// } +// +// override fun onFailure(exception: Exception) { +// SPUtils.setString(UmengMessageReceiver.SP_CLICK_EVENT, clickEventList.toJson()) +// } +// }) +// } +// +// +// /** +// * 将消息中心的消息标记为已读 +// * [type] 跳转类型 +// * [notificationMessageId] 通知中心 ID +// */ +// fun setNotificationMessageRead(context: Context, type: String, notificationMessageId: String) { +// +// val jsonObject = JSONObject() +// jsonObject.put("type", type) +// val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) +// +// RetrofitManager.getInstance(context) +// .api +// .postMessageRead(UserManager.getInstance().userId, notificationMessageId, body) +// .subscribeOn(Schedulers.io()) +// .subscribe(object : Response() { +// override fun onResponse(response: ResponseBody?) { +// super.onResponse(response) +// MessageUnreadRepository.loadMessageUnreadData() +// } +// +// override fun onFailure(e: HttpException?) { +// e?.printStackTrace() +// } +// }) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java index 534a164ad4..a368384c1e 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -147,7 +147,7 @@ public class ShareUtils { mContext = context.getApplicationContext(); mTencent = Tencent.createInstance(Config.TENCENT_APPID, mContext); //初始化QQ分享 mIWXAPI = WXAPIFactory.createWXAPI(mContext, Config.WECHAT_APPID); //初始化微信分享 - WbSdk.install(mContext, new AuthInfo(mContext, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE)); + } public static ShareUtils getInstance(Context context) { @@ -562,6 +562,7 @@ public class ShareUtils { //新浪微博分享 private void sinaWeiboShare() { + WbSdk.install(mContext, new AuthInfo(mContext, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE)); if (mShareEntrance == ShareEntrance.qaDetail) { mTitle = "向你推荐:" + mTitle + " @光环助手 " + shareUrl; diff --git a/app/src/main/java/com/gh/common/util/TeaHelper.kt b/app/src/main/java/com/gh/common/util/TeaHelper.kt index 8e7a19b091..6363b729e2 100644 --- a/app/src/main/java/com/gh/common/util/TeaHelper.kt +++ b/app/src/main/java/com/gh/common/util/TeaHelper.kt @@ -1,13 +1,6 @@ package com.gh.common.util import android.content.Context -import com.bytedance.applog.AppLog -import com.bytedance.applog.GameReportHelper -import com.bytedance.applog.InitConfig -import com.bytedance.applog.util.UriConfig -import com.gh.common.exposure.meta.MetaUtil -import com.halo.assistant.HaloApp -import com.lightgame.utils.Utils /** * 今日头条的激活统计 SDK https://gitlab.ghzs.com/pm/halo-app-issues/issues/567 @@ -18,22 +11,22 @@ object TeaHelper { @JvmStatic fun init(context: Context, channel: String) { - val config = InitConfig("163824", channel) - config.setUriConfig(UriConfig.DEFAULT) - config.appName = "guanghuan1" - config.setEnablePlay(true) - AppLog.setEnableLog(false) - AppLog.init(context, config) - - AppLog.setOaidObserver { - HaloApp.getInstance().oaid = it.id - Utils.log("oaid is $it.id") - MetaUtil.refreshMeta() - } - - // gameReportHelper ?! - GameReportHelper.onEventRegister("wechat", true) - GameReportHelper.onEventPurchase("gift", "flower", "008", 1, "wechat", "¥", true, 1) +// val config = InitConfig("163824", channel) +// config.setUriConfig(UriConfig.DEFAULT) +// config.appName = "guanghuan1" +// config.setEnablePlay(true) +// AppLog.setEnableLog(false) +// AppLog.init(context, config) +// +// AppLog.setOaidObserver { +// HaloApp.getInstance().oaid = it.id +// Utils.log("oaid is $it.id") +// MetaUtil.refreshMeta() +// } +// +// // gameReportHelper ?! +// GameReportHelper.onEventRegister("wechat", true) +// GameReportHelper.onEventPurchase("gift", "flower", "008", 1, "wechat", "¥", true, 1) } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/view/LongScrollbarWebView.kt b/app/src/main/java/com/gh/common/view/LongScrollbarWebView.kt new file mode 100644 index 0000000000..6593b4feb6 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/LongScrollbarWebView.kt @@ -0,0 +1,13 @@ +package com.gh.common.view + +import android.content.Context +import android.util.AttributeSet +import android.webkit.WebView + +class LongScrollbarWebView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) + : WebView(context, attrs) { + + override fun computeVerticalScrollExtent(): Int { + return super.computeVerticalScrollExtent() * 3 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index cf0a7c618f..6ba8c339d4 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -24,7 +24,6 @@ import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DeviceUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.ExtensionsKt; -import com.gh.common.util.GdtHelper; import com.gh.common.util.HomePluggableHelper; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageInstaller; @@ -56,7 +55,6 @@ import com.lightgame.download.DownloadStatusManager; import com.lightgame.download.FileUtils; import com.lightgame.download.HttpDnsManager; import com.lightgame.utils.Utils; -import com.qq.gdt.action.ActionType; import org.greenrobot.eventbus.EventBus; @@ -321,9 +319,9 @@ public class DownloadManager implements DownloadStatusListener { DownloadManager.getInstance(context).markDownloadingTaskAsUnread(); // 收集下载数据 DataCollectionUtils.uploadDownload(context, downloadEntity, "开始"); - GdtHelper.INSTANCE.logAction(ActionType.DOWNLOAD_APP, - GdtHelper.GAME_ID, downloadEntity.getGameId(), - GdtHelper.PLATFORM, downloadEntity.getPlatform()); +// GdtHelper.INSTANCE.logAction(ActionType.DOWNLOAD_APP, +// GdtHelper.GAME_ID, downloadEntity.getGameId(), +// GdtHelper.PLATFORM, downloadEntity.getPlatform()); } public void removeAllTaskThatFileDoesNotExist() { diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 096ebe3ed0..126e353e66 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -2,7 +2,6 @@ package com.gh.gamecenter; import android.annotation.SuppressLint; import android.app.Activity; -import android.app.Dialog; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; @@ -18,10 +17,6 @@ import android.text.Html; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.Window; -import android.widget.TextView; import com.gh.base.AppUncaughtHandler; import com.gh.base.BaseActivity; @@ -56,7 +51,6 @@ import com.gh.common.util.NotificationHelper; import com.gh.common.util.PackageInstaller; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; -import com.gh.common.util.PushHelper; import com.gh.common.util.SPUtils; import com.gh.common.util.ShareUtils; import com.gh.common.util.ThirdPartyPackageHelper; @@ -87,18 +81,13 @@ import com.gh.gamecenter.retrofit.RetrofitManager; import com.gh.gamecenter.suggest.SuggestSelectFragment; import com.gh.gamecenter.suggest.SuggestType; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.halo.assistant.HaloApp; import com.halo.assistant.fragment.SettingsFragment; -import com.lightgame.config.CommonDebug; import com.lightgame.download.DownloadEntity; import com.lightgame.download.DownloadStatus; import com.lightgame.download.FileUtils; import com.lightgame.utils.AppManager; import com.lightgame.utils.Utils; -import com.tencent.bugly.beta.tinker.TinkerManager; -import com.tencent.bugly.crashreport.CrashReport; -import com.umeng.message.PushAgent; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -111,13 +100,10 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.lang.reflect.Type; import java.util.Enumeration; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.zip.ZipEntry; @@ -257,9 +243,9 @@ public class MainActivity extends BaseActivity { }, 500); } - handler.postDelayed(() -> { - PushHelper.postPushClickAction(this.getApplicationContext(), null); - }, 2000); +// handler.postDelayed(() -> { +// PushHelper.postPushClickAction(this.getApplicationContext(), null); +// }, 2000); // 耗时操作 @@ -272,8 +258,8 @@ public class MainActivity extends BaseActivity { UpdateManager.getInstance(this).checkUpdate(true, null); // 初始化PlatformUtils PlatformUtils.getInstance(getApplicationContext()); - // 友盟记录启动 - PushAgent.getInstance(this).onAppStart(); +// // 友盟记录启动 +// PushAgent.getInstance(this).onAppStart(); HomePluggableHelper.activationFilterData(); }); @@ -547,67 +533,67 @@ public class MainActivity extends BaseActivity { } private void checkTinkerPath() { - CommonDebug.logMethodWithParams(this, TinkerManager.getTinkerId(), TinkerManager.getNewTinkerId()); - CommonDebug.logMethodWithParams(this, CrashReport.getAppVer(), CrashReport.getAppID(), CrashReport.getAppChannel(), CrashReport.getSdkExtraData()); - - // 1.(母包)首次启动,tinkerId不为空,newTinkerId(patchTinkerId)应该是空的 - // 2. 补丁包启动,tinkerId和之前一致,但newTinkerId不一致 - // 2.1 显示更新信息弹窗,记录tinkerId+newTinkerId - // 2.1.1 若tinkerId一致,但newTinkerId不一致才能认为是一次补丁更新 - - String tinkerId = TinkerManager.getTinkerId(); - String newTinkerId = TinkerManager.getNewTinkerId(); - - if (TextUtils.isEmpty(newTinkerId)) { - //这是一个新的母包,没有任何补丁信息 - return; - } - - final Gson gson = new Gson(); - - Type type = new TypeToken>>() { - }.getType(); - - final Map> tinkerIdMap; - final String tinkerMapJson = mSp.getString(Config.PATCHES, ""); - if (!TextUtils.isEmpty(tinkerMapJson)) { - tinkerIdMap = gson.fromJson(tinkerMapJson, type); - } else { - tinkerIdMap = new HashMap<>(); - } - - Set tinkerIdSet = tinkerIdMap.get(tinkerId); - if (tinkerIdSet == null) { - tinkerIdSet = new HashSet<>(); - tinkerIdMap.put(tinkerId, tinkerIdSet); - } - - // 有新的补丁,没有显示过 - if (!tinkerIdSet.contains(newTinkerId)) { - tinkerIdSet.add(newTinkerId); - - final Dialog dialog = new Dialog(this, R.style.GhAlertDialog); - - View contentView = LayoutInflater.from(this).inflate(R.layout.dialog_alert, null); - TextView contentTv = contentView.findViewById(R.id.dialog_content); - TextView titleTv = contentView.findViewById(R.id.dialog_title); - TextView negativeTv = contentView.findViewById(R.id.dialog_negative); - TextView positiveTv = contentView.findViewById(R.id.dialog_positive); - - titleTv.setText("补丁更新成功"); - contentTv.setText(("光环助手已成功更新到V" + PackageUtils.getVersionName() + "-" + newTinkerId)); - positiveTv.setText("知道了"); - negativeTv.setText(null); - - negativeTv.setOnClickListener(view -> dialog.dismiss()); - - positiveTv.setOnClickListener(view -> dialog.dismiss()); - dialog.setOnDismissListener(dialog1 -> mSp.edit().putString(Config.PATCHES, gson.toJson(tinkerIdMap)).apply()); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(contentView); - dialog.show(); - } +// CommonDebug.logMethodWithParams(this, TinkerManager.getTinkerId(), TinkerManager.getNewTinkerId()); +// CommonDebug.logMethodWithParams(this, CrashReport.getAppVer(), CrashReport.getAppID(), CrashReport.getAppChannel(), CrashReport.getSdkExtraData()); +// +// // 1.(母包)首次启动,tinkerId不为空,newTinkerId(patchTinkerId)应该是空的 +// // 2. 补丁包启动,tinkerId和之前一致,但newTinkerId不一致 +// // 2.1 显示更新信息弹窗,记录tinkerId+newTinkerId +// // 2.1.1 若tinkerId一致,但newTinkerId不一致才能认为是一次补丁更新 +// +// String tinkerId = TinkerManager.getTinkerId(); +// String newTinkerId = TinkerManager.getNewTinkerId(); +// +// if (TextUtils.isEmpty(newTinkerId)) { +// //这是一个新的母包,没有任何补丁信息 +// return; +// } +// +// final Gson gson = new Gson(); +// +// Type type = new TypeToken>>() { +// }.getType(); +// +// final Map> tinkerIdMap; +// final String tinkerMapJson = mSp.getString(Config.PATCHES, ""); +// if (!TextUtils.isEmpty(tinkerMapJson)) { +// tinkerIdMap = gson.fromJson(tinkerMapJson, type); +// } else { +// tinkerIdMap = new HashMap<>(); +// } +// +// Set tinkerIdSet = tinkerIdMap.get(tinkerId); +// if (tinkerIdSet == null) { +// tinkerIdSet = new HashSet<>(); +// tinkerIdMap.put(tinkerId, tinkerIdSet); +// } +// +// // 有新的补丁,没有显示过 +// if (!tinkerIdSet.contains(newTinkerId)) { +// tinkerIdSet.add(newTinkerId); +// +// final Dialog dialog = new Dialog(this, R.style.GhAlertDialog); +// +// View contentView = LayoutInflater.from(this).inflate(R.layout.dialog_alert, null); +// TextView contentTv = contentView.findViewById(R.id.dialog_content); +// TextView titleTv = contentView.findViewById(R.id.dialog_title); +// TextView negativeTv = contentView.findViewById(R.id.dialog_negative); +// TextView positiveTv = contentView.findViewById(R.id.dialog_positive); +// +// titleTv.setText("补丁更新成功"); +// contentTv.setText(("光环助手已成功更新到V" + PackageUtils.getVersionName() + "-" + newTinkerId)); +// positiveTv.setText("知道了"); +// negativeTv.setText(null); +// +// negativeTv.setOnClickListener(view -> dialog.dismiss()); +// +// positiveTv.setOnClickListener(view -> dialog.dismiss()); +// dialog.setOnDismissListener(dialog1 -> mSp.edit().putString(Config.PATCHES, gson.toJson(tinkerIdMap)).apply()); +// +// dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); +// dialog.setContentView(contentView); +// dialog.show(); +// } } private void checkDevice() { diff --git a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java index fbc5342802..602acbb063 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java @@ -18,6 +18,10 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.core.view.MotionEventCompat; +import androidx.recyclerview.widget.RecyclerView; + import com.ethanhua.skeleton.Skeleton; import com.ethanhua.skeleton.ViewSkeletonScreen; import com.gh.base.OnRequestCallBackListener; @@ -34,7 +38,6 @@ import com.gh.common.util.DetailDownloadUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.ExtensionsKt; -import com.gh.common.util.GdtHelper; import com.gh.common.util.MtaHelper; import com.gh.common.util.ShareUtils; import com.gh.common.view.FixLinearLayoutManager; @@ -57,7 +60,6 @@ import com.halo.assistant.fragment.SettingsFragment; import com.lightgame.download.DataWatcher; import com.lightgame.download.DownloadEntity; import com.lightgame.utils.Utils; -import com.qq.gdt.action.ActionType; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -66,9 +68,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import androidx.annotation.NonNull; -import androidx.core.view.MotionEventCompat; -import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -342,9 +341,9 @@ public class NewsDetailActivity extends ToolBarActivity implements OnClickListen new CollectionUtils.OnCollectionListener() { @Override public void onSuccess() { - GdtHelper.INSTANCE.logAction(ActionType.ADD_TO_WISHLIST, - GdtHelper.CONTENT_TYPE, "ARTICLE", - GdtHelper.CONTENT_ID, newsDetailEntity.getId()); +// GdtHelper.INSTANCE.logAction(ActionType.ADD_TO_WISHLIST, +// GdtHelper.CONTENT_TYPE, "ARTICLE", +// GdtHelper.CONTENT_ID, newsDetailEntity.getId()); newsDetailEntity.getMe().setArticleFavorite(false); mNewsCollection.setEnabled(true); @@ -642,9 +641,9 @@ public class NewsDetailActivity extends ToolBarActivity implements OnClickListen mDetailBottomLl.setVisibility(View.VISIBLE); DetailDownloadUtils.detailInitDownload(getDetailViewHolder(), true); - GdtHelper.INSTANCE.logAction(ActionType.PAGE_VIEW, - GdtHelper.CONTENT_TYPE, "ARTICLE", - GdtHelper.CONTENT_ID, response.getId()); +// GdtHelper.INSTANCE.logAction(ActionType.PAGE_VIEW, +// GdtHelper.CONTENT_TYPE, "ARTICLE", +// GdtHelper.CONTENT_ID, response.getId()); } }); } diff --git a/app/src/main/java/com/gh/gamecenter/PushProxyActivity.java b/app/src/main/java/com/gh/gamecenter/PushProxyActivity.java index af830c5053..327f165525 100644 --- a/app/src/main/java/com/gh/gamecenter/PushProxyActivity.java +++ b/app/src/main/java/com/gh/gamecenter/PushProxyActivity.java @@ -1,39 +1,39 @@ -package com.gh.gamecenter; - -import android.content.Intent; - -import com.gh.base.GHUmengNotificationService; -import com.lightgame.utils.Utils; -import com.umeng.message.UmengNotifyClickActivity; - -import org.android.agoo.common.AgooConstants; - -/** - * Created by khy on 17/11/17. - */ - -public class PushProxyActivity extends UmengNotifyClickActivity { - - private static String TAG = PushProxyActivity.class.getName(); - - /** - * 相当于代理类 - * 如果后台进程被杀,消息栏消息触发的事件将由本类处理 - */ - @Override - public void onMessage(Intent intent) { - super.onMessage(intent); //此方法必须调用,否则无法统计打开数 - String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY); - Utils.log(TAG, body); - Intent i = new Intent(PushProxyActivity.this, GHUmengNotificationService.class); - i.putExtra(AgooConstants.MESSAGE_BODY, body); - i.putExtra(GHUmengNotificationService.MESSAGE_FROM_SYSTEM, true); - PushProxyActivity.this.startService(i); - finishActivity(); - } - - private void finishActivity() { - this.finish(); - overridePendingTransition(0, 0);//禁止退出Activity 动画 - } -} +//package com.gh.gamecenter; +// +//import android.content.Intent; +// +//import com.gh.base.GHUmengNotificationService; +//import com.lightgame.utils.Utils; +//import com.umeng.message.UmengNotifyClickActivity; +// +//import org.android.agoo.common.AgooConstants; +// +///** +// * Created by khy on 17/11/17. +// */ +// +//public class PushProxyActivity extends UmengNotifyClickActivity { +// +// private static String TAG = PushProxyActivity.class.getName(); +// +// /** +// * 相当于代理类 +// * 如果后台进程被杀,消息栏消息触发的事件将由本类处理 +// */ +// @Override +// public void onMessage(Intent intent) { +// super.onMessage(intent); //此方法必须调用,否则无法统计打开数 +// String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY); +// Utils.log(TAG, body); +// Intent i = new Intent(PushProxyActivity.this, GHUmengNotificationService.class); +// i.putExtra(AgooConstants.MESSAGE_BODY, body); +// i.putExtra(GHUmengNotificationService.MESSAGE_FROM_SYSTEM, true); +// PushProxyActivity.this.startService(i); +// finishActivity(); +// } +// +// private void finishActivity() { +// this.finish(); +// overridePendingTransition(0, 0);//禁止退出Activity 动画 +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/SearchActivity.kt b/app/src/main/java/com/gh/gamecenter/SearchActivity.kt index 53800a630f..b7b0dadbf6 100644 --- a/app/src/main/java/com/gh/gamecenter/SearchActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/SearchActivity.kt @@ -10,7 +10,10 @@ import android.view.inputmethod.EditorInfo import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doOnTextChanged import com.gh.base.BaseActivity -import com.gh.common.util.* +import com.gh.common.util.DataCollectionUtils +import com.gh.common.util.EntranceUtils +import com.gh.common.util.TextHelper +import com.gh.common.util.goneIf import com.gh.gamecenter.DisplayType.* import com.gh.gamecenter.db.SearchHistoryDao import com.gh.gamecenter.eventbus.EBSearch @@ -18,7 +21,6 @@ import com.gh.gamecenter.search.SearchDefaultFragment import com.gh.gamecenter.search.SearchGameIndexFragment import com.gh.gamecenter.search.SearchGameResultFragment import com.lightgame.utils.Util_System_Keyboard -import com.qq.gdt.action.ActionType import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.subjects.PublishSubject import kotlinx.android.synthetic.main.toolbar_search.* @@ -217,7 +219,7 @@ open class SearchActivity : BaseActivity() { "click" -> DataCollectionUtils.uploadSearchClick(this, mSearchKey, mSearchType.value, "搜索页面", search.gameId, search.gameName) "search" -> { - GdtHelper.logAction(ActionType.SEARCH, GdtHelper.KEYWORD, mSearchKey) +// GdtHelper.logAction(ActionType.SEARCH, GdtHelper.KEYWORD, mSearchKey) DataCollectionUtils.uploadSearch(this, mSearchKey, mSearchType.value, "搜索页面", search.gameId, search.gameName) } diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 774721d06f..e846cf6cbb 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -15,24 +15,17 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; - import com.g00fy2.versioncompare.Version; import com.gh.base.BaseActivity; import com.gh.common.AppExecutor; import com.gh.common.constant.Config; import com.gh.common.constant.Constants; +import com.gh.common.dialog.PrivacyDialogFragment; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceTokenUtils; -import com.gh.common.util.DeviceUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.EmptyCallback; import com.gh.common.util.GameSubstituteRepositoryHelper; -import com.gh.common.util.GdtHelper; import com.gh.common.util.GsonUtils; import com.gh.common.util.MtaHelper; import com.gh.common.util.PackageUtils; @@ -52,7 +45,6 @@ import com.gh.gamecenter.retrofit.RetrofitManager; import com.halo.assistant.HaloApp; import com.lightgame.download.DownloadEntity; import com.lightgame.download.FileUtils; -import com.qq.gdt.action.ActionType; import org.jetbrains.annotations.NotNull; import org.json.JSONObject; @@ -64,6 +56,11 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; @@ -117,12 +114,7 @@ public class SplashScreenActivity extends BaseActivity { if (SPUtils.getBoolean(Constants.SP_BRAND_NEW_USER, true)) { SPUtils.setLong(Constants.SP_INITIAL_USAGE_TIME, System.currentTimeMillis()); HaloApp.getInstance().isBrandNewInstall = true; - showPrivacyPolicy(() -> { - // Dialog dismiss 后的回调 - guideLayout.setVisibility(View.VISIBLE); - SPUtils.setBoolean(Constants.SP_BRAND_NEW_USER, false); - requestPermission(); - }); + showPrivacyDialog(guideLayout); } else { cancelPreviousUpdateTask(); @@ -134,6 +126,24 @@ public class SplashScreenActivity extends BaseActivity { } } + private void showPrivacyDialog(ViewPager guideLayout) { + PrivacyDialogFragment.show(this, (isSuccess) -> { + if (isSuccess) { + showPrivacyPolicy(() -> { + // Dialog dismiss 后的回调 + guideLayout.setVisibility(View.VISIBLE); + SPUtils.setBoolean(Constants.SP_BRAND_NEW_USER, false); + requestPermission(); + }); + } else { + DialogUtils.showPrivacyPolicyDisallowDialog(this, PrivacyPolicyEntity.createDefaultData(),()->{ + showPrivacyDialog(guideLayout); + }); + } + return null; + }); + } + // 删除更新后的光环助手包 private void cancelPreviousUpdateTask() { List all = DownloadManager.getInstance(this).getAllDownloadEntity(); @@ -274,7 +284,7 @@ public class SplashScreenActivity extends BaseActivity { // 在可能获取了相关权限后才初始化SDK/发送激活数据 TeaHelper.init(getApplication(), HaloApp.getInstance().getChannel()); - GdtHelper.INSTANCE.logAction(ActionType.START_APP, GdtHelper.NETWORK_TYPE, DeviceUtils.getNetwork(this)); +// GdtHelper.INSTANCE.logAction(ActionType.START_APP, GdtHelper.NETWORK_TYPE, DeviceUtils.getNetwork(this)); Bundle bundle = getIntent().getExtras(); Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); diff --git a/app/src/main/java/com/gh/gamecenter/douyinapi/DouYinEntryActivity.java b/app/src/main/java/com/gh/gamecenter/douyinapi/DouYinEntryActivity.java index 4c7275e96e..70584ff83a 100644 --- a/app/src/main/java/com/gh/gamecenter/douyinapi/DouYinEntryActivity.java +++ b/app/src/main/java/com/gh/gamecenter/douyinapi/DouYinEntryActivity.java @@ -1,82 +1,82 @@ -package com.gh.gamecenter.douyinapi; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.widget.Toast; - -import com.bytedance.sdk.open.aweme.CommonConstants; -import com.bytedance.sdk.open.aweme.authorize.model.Authorization; -import com.bytedance.sdk.open.aweme.common.handler.IApiEventHandler; -import com.bytedance.sdk.open.aweme.common.model.BaseReq; -import com.bytedance.sdk.open.aweme.common.model.BaseResp; -import com.bytedance.sdk.open.douyin.DouYinOpenApiFactory; -import com.bytedance.sdk.open.douyin.api.DouYinOpenApi; -import com.gh.common.util.LoginHelper; - -import org.json.JSONObject; - -public class DouYinEntryActivity extends Activity implements IApiEventHandler, DouYinUserInfoThread.OnUserInfoCallBackListener { - - DouYinOpenApi douYinOpenApi; - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - douYinOpenApi = DouYinOpenApiFactory.create(this); - douYinOpenApi.handleIntent(getIntent(), this); - } - - @Override - public void onReq(BaseReq req) { - - } - - @Override - public void onResp(BaseResp resp) { - // 授权成功可以获得authCode - if (resp.getType() == CommonConstants.ModeType.SEND_AUTH_RESPONSE) { - Authorization.Response response = (Authorization.Response) resp; - if (resp.isSuccess()) { - new DouYinUserInfoThread(DouYinEntryActivity.this, response.authCode, DouYinEntryActivity.this) - .start(); -// Toast.makeText(this, "授权成功,获得权限:" + response.grantedPermissions, -// Toast.LENGTH_LONG).show(); - Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show(); - - } else { -// Toast.makeText(this, "授权失败" + response.grantedPermissions, -// Toast.LENGTH_LONG).show(); - Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show(); - } - finish(); - } - } - - @Override - public void onErrorIntent(Intent intent) { - // 错误数据 - Toast.makeText(this, "intent出错啦", Toast.LENGTH_LONG).show(); - finish(); - } - - @Override - public void onComplete(JSONObject content) { - runOnUiThread(() -> { - LoginHelper.onDouYinLoginSuccess(content); - finishActivity(); - }); - } - - @Override - public void onError() { - LoginHelper.onDouYinLoginFailure("登录失败"); - finishActivity(); - } - - private void finishActivity() { - this.finish(); - overridePendingTransition(0, 0);//禁止退出Activity 动画 - } -} +//package com.gh.gamecenter.douyinapi; +// +//import android.app.Activity; +//import android.content.Intent; +//import android.os.Bundle; +//import android.widget.Toast; +// +//import com.bytedance.sdk.open.aweme.CommonConstants; +//import com.bytedance.sdk.open.aweme.authorize.model.Authorization; +//import com.bytedance.sdk.open.aweme.common.handler.IApiEventHandler; +//import com.bytedance.sdk.open.aweme.common.model.BaseReq; +//import com.bytedance.sdk.open.aweme.common.model.BaseResp; +//import com.bytedance.sdk.open.douyin.DouYinOpenApiFactory; +//import com.bytedance.sdk.open.douyin.api.DouYinOpenApi; +//import com.gh.common.util.LoginHelper; +// +//import org.json.JSONObject; +// +//public class DouYinEntryActivity extends Activity implements IApiEventHandler, DouYinUserInfoThread.OnUserInfoCallBackListener { +// +// DouYinOpenApi douYinOpenApi; +// +// +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// douYinOpenApi = DouYinOpenApiFactory.create(this); +// douYinOpenApi.handleIntent(getIntent(), this); +// } +// +// @Override +// public void onReq(BaseReq req) { +// +// } +// +// @Override +// public void onResp(BaseResp resp) { +// // 授权成功可以获得authCode +// if (resp.getType() == CommonConstants.ModeType.SEND_AUTH_RESPONSE) { +// Authorization.Response response = (Authorization.Response) resp; +// if (resp.isSuccess()) { +// new DouYinUserInfoThread(DouYinEntryActivity.this, response.authCode, DouYinEntryActivity.this) +// .start(); +//// Toast.makeText(this, "授权成功,获得权限:" + response.grantedPermissions, +//// Toast.LENGTH_LONG).show(); +// Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show(); +// +// } else { +//// Toast.makeText(this, "授权失败" + response.grantedPermissions, +//// Toast.LENGTH_LONG).show(); +// Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show(); +// } +// finish(); +// } +// } +// +// @Override +// public void onErrorIntent(Intent intent) { +// // 错误数据 +// Toast.makeText(this, "intent出错啦", Toast.LENGTH_LONG).show(); +// finish(); +// } +// +// @Override +// public void onComplete(JSONObject content) { +// runOnUiThread(() -> { +// LoginHelper.onDouYinLoginSuccess(content); +// finishActivity(); +// }); +// } +// +// @Override +// public void onError() { +// LoginHelper.onDouYinLoginFailure("登录失败"); +// finishActivity(); +// } +// +// private void finishActivity() { +// this.finish(); +// overridePendingTransition(0, 0);//禁止退出Activity 动画 +// } +//} diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java index 7fd2dc910b..5de7aedcca 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java @@ -27,7 +27,6 @@ import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.ExtensionsKt; -import com.gh.common.util.GdtHelper; import com.gh.common.util.GsonUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.NetworkUtils; @@ -55,7 +54,6 @@ import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.adapter.BaseRecyclerAdapter; import com.lightgame.download.DownloadEntity; import com.lightgame.download.DownloadStatus; -import com.qq.gdt.action.ActionType; import org.greenrobot.eventbus.EventBus; import org.jetbrains.annotations.Nullable; @@ -563,9 +561,9 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter implemen // 收集下载数据 DataCollectionUtils.uploadDownload(mContext, downloadEntity, "开始"); - GdtHelper.INSTANCE.logAction(ActionType.DOWNLOAD_APP, - GdtHelper.GAME_ID, downloadEntity.getGameId(), - GdtHelper.PLATFORM, downloadEntity.getPlatform()); +// GdtHelper.INSTANCE.logAction(ActionType.DOWNLOAD_APP, +// GdtHelper.GAME_ID, downloadEntity.getGameId(), +// GdtHelper.PLATFORM, downloadEntity.getPlatform()); notifyItemChanged(0); EventBus.getDefault().post(new EBSkip(DownloadManagerActivity.TAG, DownloadManagerActivity.INDEX_DOWNLOAD)); diff --git a/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt index 7edbd4df1c..ceda1fc35d 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt @@ -27,6 +27,10 @@ data class PrivacyPolicyEntity( icon = "res:///" + R.drawable.permission_phone_state, name = "设备信息", intro = "获取设备型号等信息,保证功能的适配与完整性")) +// permissions.add(PermissionsEntity( +// icon = "res:///" + R.drawable.permission_sdk, +// name = "第三方SDK使用信息提醒", +// intro = "向北京有竹居网络技术有限公司(北京字节跳动科技有限公司)提供您的以下信息:设备品牌、型号、软件系统相关信息、安卓(oaid、无线网SSID名称、WiFi路由器MAC地址、设备MAC地址、IMEI、地理位置),用于广告流量统计相关服务。")) data.permissions = permissions return data } diff --git a/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java index 51b40d3c3e..eb77533f9b 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java @@ -43,6 +43,7 @@ import com.gh.gamecenter.user.ApiResponse; import com.gh.gamecenter.user.LoginTag; import com.gh.gamecenter.user.UserViewModel; import com.halo.assistant.HaloApp; +import com.lightgame.utils.Utils; import org.greenrobot.eventbus.EventBus; import org.jetbrains.annotations.NotNull; @@ -195,6 +196,7 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch break; case R.id.login_douyin_btn: MtaHelper.onEvent("我的光环_新", "登录页面", "抖音登录"); + Utils.toast(requireContext(), "抖音登录临时维护中"); LoginHelper.loginWithDouYin(this, requireActivity()); break; case R.id.login_close_btn: @@ -274,7 +276,8 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch } // 相同设备号,每一种第三方登录方式登录后跳转绑定手机页面,两次后则不在弹出(https://gitlab.ghzs.com/pm/halo-app-issues/-/issues/949) - if (TextUtils.isEmpty(UserManager.getInstance().getUserInfoEntity().getLoginMobile())) { + if (UserManager.getInstance().getUserInfoEntity() != null + && TextUtils.isEmpty(UserManager.getInstance().getUserInfoEntity().getLoginMobile())) { int time; if (LoginTag.qq.name().equals(loginType)) { time = SPUtils.getInt(Constants.SP_QQ_SHOW_BIND_PHONE_TIME); @@ -367,7 +370,7 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch int tvCount = s.length(); if (mEditText == mLoginPhoneEt) { StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0;i < s.length();i++) { + for (int i = 0; i < s.length(); i++) { if (i != 3 && i != 8 && s.charAt(i) == ' ') { continue; } else { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 40c1c6582c..17a99ad49e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -61,7 +61,6 @@ import com.halo.assistant.fragment.WebFragment import com.lightgame.download.DataWatcher import com.lightgame.download.DownloadEntity import com.lightgame.view.NoScrollableViewPager -import com.qq.gdt.action.ActionType import com.shuyu.gsyvideoplayer.GSYVideoManager import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack @@ -421,9 +420,9 @@ class GameDetailFragment : NormalFragment() { DataLogUtils.uploadGameLog(context, mGameEntity!!.id, mGameEntity!!.name, mEntrance) - GdtHelper.logAction(ActionType.PAGE_VIEW, - GdtHelper.CONTENT_TYPE, "GAME", - GdtHelper.CONTENT_ID, mGameEntity!!.id) +// GdtHelper.logAction(ActionType.PAGE_VIEW, +// GdtHelper.CONTENT_TYPE, "GAME", +// GdtHelper.CONTENT_ID, mGameEntity!!.id) mNewGameDetailEntity = data @@ -485,7 +484,7 @@ class GameDetailFragment : NormalFragment() { DataUtils.onEvent(context, "游戏关注", mGameEntity!!.name, kv) MtaHelper.onEvent("游戏详情_新", "关注", mGameEntity!!.name) DataCollectionUtils.uploadConcern(context, mGameEntity!!.name, mGameEntity!!.id, "关注") - GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, GdtHelper.CONTENT_TYPE, "GAME", GdtHelper.CONTENT_ID, mGameEntity!!.id) +// GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, GdtHelper.CONTENT_TYPE, "GAME", GdtHelper.CONTENT_ID, mGameEntity!!.id) updateConcernMenuIcon(isConcerned = true) toast(R.string.concern_success) @@ -836,7 +835,7 @@ class GameDetailFragment : NormalFragment() { mNewGameDetailEntity?.let { DataCollectionUtils.uploadClick(context, "分享", "游戏详情", mGameEntity!!.name) - GdtHelper.logAction(ActionType.SHARE, GdtHelper.CONTENT_TYPE, "GAME", GdtHelper.CONTENT_ID, mGameEntity!!.id) +// GdtHelper.logAction(ActionType.SHARE, GdtHelper.CONTENT_TYPE, "GAME", GdtHelper.CONTENT_ID, mGameEntity!!.id) val url = if (isPublishEnv()) { "http://m.ghzs666.com/game/" + it.shareCode diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt index d50b50e1f3..f803442b6a 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt @@ -29,7 +29,6 @@ import com.gh.gamecenter.mvvm.Status import com.gh.gamecenter.suggest.SuggestType import com.halo.assistant.HaloApp import com.lightgame.utils.Utils -import com.qq.gdt.action.ActionType import com.walkud.rom.checker.RomIdentifier import okhttp3.MediaType import okhttp3.RequestBody @@ -229,9 +228,9 @@ class RatingEditActivity : ToolBarActivity(), KeyboardHeightObserver { MtaHelper.onEvent("发表评论", "提交", mGame.name) setResult(Activity.RESULT_OK) toast("提交成功") - GdtHelper.logAction(ActionType.RATE, - GdtHelper.GAME_ID, mGame.id, - GdtHelper.PLATFORM, mBinding.ratingScore.rating.toString()) +// GdtHelper.logAction(ActionType.RATE, +// GdtHelper.GAME_ID, mGame.id, +// GdtHelper.PLATFORM, mBinding.ratingScore.rating.toString()) if (mFromAmway) { if (mIsSkipSuccessPage) { diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt index 19e83c0a89..1fdadc1c4e 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt @@ -13,7 +13,6 @@ import androidx.annotation.RequiresApi import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil -import com.bytedance.sdk.open.aweme.utils.Md5Utils import com.gh.base.fragment.WaitingDialogFragment import com.gh.common.util.* import com.gh.gamecenter.CropImageActivity @@ -24,7 +23,6 @@ import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.normal.NormalFragment import com.gh.gamecenter.user.UserViewModel import com.halo.assistant.HaloApp -import com.xiaomi.push.it import com.zhihu.matisse.Matisse import com.zhihu.matisse.MimeType import com.zhihu.matisse.engine.impl.PicassoEngine @@ -161,7 +159,7 @@ class BackgroundPreviewFragment : NormalFragment() { PermissionHelper.checkStoragePermissionBeforeAction(requireContext(), object : EmptyCallback { override fun onCallback() { mTempBitmap?.let { - val filePath: String = "${requireContext().cacheDir.absolutePath}${File.separator}${Md5Utils.hexDigest(mLocalPath)}.webp" + val filePath: String = "${requireContext().cacheDir.absolutePath}${File.separator}${MD5Utils.getContentMD5(mLocalPath)}.webp" savePicture(filePath, it) } } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt index c58a4ca932..4fb048114e 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt @@ -18,9 +18,7 @@ import com.gh.gamecenter.databinding.FragmentAvatarBorderBinding import com.gh.gamecenter.entity.AvatarBorderEntity import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.user.UserViewModel -import com.google.gson.JsonObject import com.halo.assistant.HaloApp -import com.xiaomi.push.it import org.json.JSONObject class AvatarBorderFragment : BaseFragment_TabLayout() { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt index 582bdf88a9..9d64f58ecf 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt @@ -17,8 +17,6 @@ import android.widget.ImageView import android.widget.LinearLayout import android.widget.PopupWindow import android.widget.TextView -import androidx.core.app.ActivityCompat -import androidx.core.app.ActivityOptionsCompat import androidx.core.content.ContextCompat import androidx.databinding.BindingAdapter import androidx.databinding.DataBindingUtil @@ -38,7 +36,10 @@ import com.gh.common.util.* import com.gh.common.view.DrawableView import com.gh.common.view.ExpandAndCloseTextView import com.gh.common.view.RichEditor -import com.gh.gamecenter.* +import com.gh.gamecenter.ImageViewerActivity +import com.gh.gamecenter.NormalActivity +import com.gh.gamecenter.R +import com.gh.gamecenter.SuggestionActivity import com.gh.gamecenter.databinding.FragmentAnswerDetailBinding import com.gh.gamecenter.entity.* import com.gh.gamecenter.eventbus.EBReuse @@ -49,7 +50,6 @@ import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity import com.gh.gamecenter.qa.comment.CommentActivity import com.gh.gamecenter.qa.editor.OnLinkClickListener import com.gh.gamecenter.qa.entity.AnswerDetailEntity -import com.gh.gamecenter.qa.entity.ArticleDetailEntity import com.gh.gamecenter.qa.entity.Questions import com.gh.gamecenter.qa.entity.QuestionsDetailEntity import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity @@ -58,7 +58,6 @@ import com.gh.gamecenter.video.VideoVerifyItemViewHolder import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel import com.halo.assistant.HaloApp import com.lightgame.utils.Utils -import com.qq.gdt.action.ActionType import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import java.io.IOException @@ -274,7 +273,7 @@ class AnswerDetailFragment : NormalFragment() { } }, if (fragmentIsVisible()) 0 else 1000L) - GdtHelper.logAction(ActionType.PAGE_VIEW, GdtHelper.CONTENT_TYPE, "ANSWER", GdtHelper.CONTENT_ID, mAnswerId) +// GdtHelper.logAction(ActionType.PAGE_VIEW, GdtHelper.CONTENT_TYPE, "ANSWER", GdtHelper.CONTENT_ID, mAnswerId) } else if (apiResponse.httpException != null) { val e = apiResponse.httpException mSkeletonScreen?.hide() @@ -894,9 +893,9 @@ class AnswerDetailFragment : NormalFragment() { } private fun shareAnswer() { - GdtHelper.logAction(ActionType.SHARE, - GdtHelper.CONTENT_TYPE, "ANSWER", - GdtHelper.CONTENT_ID, mAnswerId) +// GdtHelper.logAction(ActionType.SHARE, +// GdtHelper.CONTENT_TYPE, "ANSWER", +// GdtHelper.CONTENT_ID, mAnswerId) val shareIcon: String = if (mAnswersImages!!.size > 0) { mAnswersImages[0] diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt index ae7f9ac23c..57c4bd970c 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt @@ -18,7 +18,6 @@ import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.gamecenter.user.ApiResponse import com.lightgame.utils.Utils -import com.qq.gdt.action.ActionType import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import okhttp3.MediaType @@ -185,9 +184,9 @@ class AnswerDetailViewModel(application: Application) : AndroidViewModel(applica collect.postValue(true) answerDetail?.me?.isAnswerFavorite = true - GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, - GdtHelper.CONTENT_TYPE, "ANSWER", - GdtHelper.CONTENT_ID, answerId) +// GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, +// GdtHelper.CONTENT_TYPE, "ANSWER", +// GdtHelper.CONTENT_ID, answerId) } override fun onError() { diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailContentViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailContentViewHolder.kt index 4fe707c571..a363d77a91 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailContentViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailContentViewHolder.kt @@ -23,7 +23,6 @@ import com.gh.gamecenter.qa.column.detail.AskColumnDetailActivity import com.gh.gamecenter.qa.editor.OnLinkClickListener import com.gh.gamecenter.qa.entity.ArticleDetailEntity import com.google.android.flexbox.FlexboxLayout -import com.qq.gdt.action.ActionType import java.util.* class ArticleDetailContentViewHolder(var binding: ItemArticleDetailContentBinding, var viewModel: ArticleDetailViewModel) @@ -61,9 +60,9 @@ class ArticleDetailContentViewHolder(var binding: ItemArticleDetailContentBindin shareContainer.setOnClickListener { MtaHelper.onEvent("帖子详情", "内容区域", "分享") - GdtHelper.logAction(ActionType.SHARE, - GdtHelper.CONTENT_TYPE, "QA_ARTICLE", - GdtHelper.CONTENT_ID, viewModel.articleId) +// GdtHelper.logAction(ActionType.SHARE, +// GdtHelper.CONTENT_TYPE, "QA_ARTICLE", +// GdtHelper.CONTENT_ID, viewModel.articleId) var shareSummary = richEditor.text val shareIcon: String = if (articleImgUrlList.size > 0) { @@ -96,9 +95,9 @@ class ArticleDetailContentViewHolder(var binding: ItemArticleDetailContentBindin viewModel.collectionCommand(!article.me.isCommunityArticleFavorite, callback = { viewModel.detailEntity?.me?.isCommunityArticleFavorite = it if (it) { - GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, - GdtHelper.CONTENT_TYPE, "QA_ARTICLE", - GdtHelper.CONTENT_ID, viewModel.articleId) +// GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, +// GdtHelper.CONTENT_TYPE, "QA_ARTICLE", +// GdtHelper.CONTENT_ID, viewModel.articleId) } updateCollectView(it) }) diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt index 03d1db190d..c4b0e35cef 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailFragment.kt @@ -40,7 +40,6 @@ import com.gh.gamecenter.qa.comment.CommentActivity import com.gh.gamecenter.qa.entity.ArticleDetailEntity import com.gh.gamecenter.suggest.SuggestType import com.halo.assistant.HaloApp -import com.qq.gdt.action.ActionType import kotlinx.android.synthetic.main.fragment_article_detail.* import kotlinx.android.synthetic.main.piece_article_input_container.* import org.greenrobot.eventbus.EventBus @@ -215,9 +214,9 @@ class ArticleDetailFragment : BaseArticleDetailCommentFragment { updateView() - GdtHelper.logAction(ActionType.PAGE_VIEW, - GdtHelper.CONTENT_TYPE, "QA_ARTICLE", - GdtHelper.CONTENT_ID, mViewModel.articleId) +// GdtHelper.logAction(ActionType.PAGE_VIEW, +// GdtHelper.CONTENT_TYPE, "QA_ARTICLE", +// GdtHelper.CONTENT_ID, mViewModel.articleId) } else -> { if (it == BaseArticleDetailCommentViewModel.LoadResult.DELETED) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/BaseArticleDetailCommentViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/BaseArticleDetailCommentViewModel.kt index d960287937..5635be3e49 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/BaseArticleDetailCommentViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/BaseArticleDetailCommentViewModel.kt @@ -18,7 +18,6 @@ import com.gh.gamecenter.entity.MeEntity import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager import com.lightgame.utils.Utils -import com.tencent.bugly.beta.tinker.TinkerManager import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import okhttp3.ResponseBody diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/comment/ArticleDetailCommentFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/comment/ArticleDetailCommentFragment.kt index 119710e6c9..545534fde0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/comment/ArticleDetailCommentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/comment/ArticleDetailCommentFragment.kt @@ -8,9 +8,6 @@ import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat import com.ethanhua.skeleton.Skeleton -import com.gh.common.syncpage.SyncDataEntity -import com.gh.common.syncpage.SyncFieldConstants -import com.gh.common.syncpage.SyncPageRepository import com.gh.common.util.* import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListAdapter @@ -25,7 +22,6 @@ import com.gh.gamecenter.qa.article.detail.CommentItemData import com.gh.gamecenter.qa.comment.CommentActivity import com.gh.gamecenter.qa.comment.OnCommentOptionClickListener import com.halo.assistant.HaloApp -import com.qq.gdt.action.ActionType import kotlinx.android.synthetic.main.fragment_article_detail_comment.* import kotlinx.android.synthetic.main.piece_article_input_container.* import org.greenrobot.eventbus.EventBus @@ -155,9 +151,9 @@ class ArticleDetailCommentFragment : BaseArticleDetailCommentFragment { - GdtHelper.logAction(ActionType.SHARE, - GdtHelper.CONTENT_TYPE, "QUESTION", - GdtHelper.CONTENT_ID, mQuestionsId) +// GdtHelper.logAction(ActionType.SHARE, +// GdtHelper.CONTENT_TYPE, "QUESTION", +// GdtHelper.CONTENT_ID, mQuestionsId) popupWindow.dismiss() val shareIcon = if (questionEntity.images.isNotEmpty()) { diff --git a/app/src/main/java/com/gh/gamecenter/receiver/MeizuPushReceiver.kt b/app/src/main/java/com/gh/gamecenter/receiver/MeizuPushReceiver.kt index 021f47bd63..886c1701e7 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/MeizuPushReceiver.kt +++ b/app/src/main/java/com/gh/gamecenter/receiver/MeizuPushReceiver.kt @@ -1,5 +1,5 @@ -package com.gh.gamecenter.receiver - -import org.android.agoo.mezu.MeizuPushReceiver - -class UmengMeizuPushReceiver : MeizuPushReceiver() \ No newline at end of file +//package com.gh.gamecenter.receiver +// +//import org.android.agoo.mezu.MeizuPushReceiver +// +//class UmengMeizuPushReceiver : MeizuPushReceiver() \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt b/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt index 6f7b397cab..997142d346 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt +++ b/app/src/main/java/com/gh/gamecenter/receiver/UmengMessageReceiver.kt @@ -1,132 +1,132 @@ -package com.gh.gamecenter.receiver - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import androidx.annotation.Keep -import com.gh.base.GHUmengNotificationService -import com.gh.common.PushManager -import com.gh.common.util.DirectUtils -import com.gh.common.util.EntranceUtils -import com.gh.common.util.PushHelper -import com.gh.gamecenter.entity.LinkEntity -import com.umeng.message.UTrack -import com.umeng.message.entity.UMessage -import org.json.JSONObject - -class UmengMessageReceiver : BroadcastReceiver() { - - companion object { - const val TYPE_REMOVE = "remove" - const val TYPE_CLICK = "click" - const val DIRECT_ONLY = "direct_only" // 只跳转,不记录 - - const val ACTION = "com.gh.gamecenter.UMENG" - - const val SP_CLICK_EVENT = "sp_click_event" - } - - override fun onReceive(context: Context, intent: Intent) { - val type: String? = intent.getStringExtra(EntranceUtils.KEY_TYPE) - val messageString = intent.getStringExtra(EntranceUtils.KEY_MESSAGE) - val notificationMessageId = intent.getStringExtra(GHUmengNotificationService.NOTIFICATION_MESSAGE_ID) - val msgObject = UMessage(JSONObject(messageString)) - - when (type) { - TYPE_CLICK -> { - val link: LinkEntity? = intent.getParcelableExtra(EntranceUtils.KEY_DATA) - - if (link == null || link.link == "system") { - jumpToHaloOfficialNotificationPage(context) - } else { - jumpToSpecificPage(context, link) - } - - // 记录该推送通知被点击 - UTrack.getInstance(context).trackMsgClick(msgObject) - val msgId = intent.getStringExtra(GHUmengNotificationService.MESSAGE_ID) - val pushId = intent.getStringExtra(GHUmengNotificationService.PUSH_ID) - - if (!msgId.isNullOrEmpty() && !pushId.isNullOrEmpty()) { - postClickAction(context, ClickEvent( - device_token = PushManager.deviceToken ?: "", - msg_id = msgId, - push_id = pushId)) - } - - // 记录消息中心的那条消息已读(已被点击) - if (!notificationMessageId.isNullOrEmpty()) { - postMessageReadAction(context, link?.type ?: "", notificationMessageId) - } - } - - TYPE_REMOVE -> { - // 记录该推送通知被 dismiss - UTrack.getInstance(context).trackMsgDismissed(msgObject) - } - - DIRECT_ONLY -> { - val link: LinkEntity? = intent.getParcelableExtra(EntranceUtils.KEY_DATA) - if (link == null || link.link == "system") { - jumpToHaloOfficialNotificationPage(context) - } else { - jumpToSpecificPage(context, link) - } - - // 记录消息中心的那条消息已读(已被点击) - if (!notificationMessageId.isNullOrEmpty()) { - postMessageReadAction(context, link?.type ?: "", notificationMessageId) - } - } - } - } - - private fun postClickAction(context: Context, clickEvent: ClickEvent) { - PushHelper.postPushClickAction(context, clickEvent) - } - - private fun postMessageReadAction(context: Context, type: String, notificationMessageId: String) { - PushHelper.setNotificationMessageRead(context, type, notificationMessageId) - } - - private fun jumpToHaloOfficialNotificationPage(context: Context) { - DirectUtils.directToOfficialNotification(context, EntranceUtils.ENTRANCE_UMENG) - } - - private fun jumpToSpecificPage(context: Context, link: LinkEntity) { - when (link.type) { - EntranceUtils.HOST_ARTICLE -> { - DirectUtils.directToArticle(context, link.link!!, EntranceUtils.ENTRANCE_UMENG) - } - EntranceUtils.HOST_GAME -> { - DirectUtils.directToGameDetail(context, link.link!!, EntranceUtils.ENTRANCE_UMENG) - } - EntranceUtils.HOST_COLUMN -> { - DirectUtils.directToSubject(context, link.link!!, null, EntranceUtils.ENTRANCE_UMENG) - } - EntranceUtils.HOST_QUESTION -> { - DirectUtils.directToQuestionDetail(context, link.link!!, EntranceUtils.ENTRANCE_UMENG, "推送通知") - } - EntranceUtils.HOST_ANSWER -> { - DirectUtils.directToAnswerDetail(context, link.link!!, EntranceUtils.ENTRANCE_UMENG, "推送通知") - } - EntranceUtils.HOST_WEB -> { - DirectUtils.directToWebView(context, link.link!!, EntranceUtils.ENTRANCE_UMENG) - } - EntranceUtils.HOST_COMMUNITY_ARTICLE -> { - DirectUtils.directToCommunityArticle(context, link.link!!, link.community?.id - ?: "", EntranceUtils.ENTRANCE_UMENG, "推送通知") - } - EntranceUtils.HOST_COMMUNITY_COLUMN -> { - DirectUtils.directToCommunityColumn(context, link.community!!, link.link!!, EntranceUtils.ENTRANCE_UMENG, "推送通知") - } - else -> DirectUtils.directToLinkPage(context, link, EntranceUtils.ENTRANCE_UMENG, "推送通知") - } - } - - @Keep - data class ClickEvent(var device_token: String, - var msg_id: String, - var push_id: String) - -} \ No newline at end of file +//package com.gh.gamecenter.receiver +// +//import android.content.BroadcastReceiver +//import android.content.Context +//import android.content.Intent +//import androidx.annotation.Keep +//import com.gh.base.GHUmengNotificationService +//import com.gh.common.PushManager +//import com.gh.common.util.DirectUtils +//import com.gh.common.util.EntranceUtils +//import com.gh.common.util.PushHelper +//import com.gh.gamecenter.entity.LinkEntity +//import com.umeng.message.UTrack +//import com.umeng.message.entity.UMessage +//import org.json.JSONObject +// +//class UmengMessageReceiver : BroadcastReceiver() { +// +// companion object { +// const val TYPE_REMOVE = "remove" +// const val TYPE_CLICK = "click" +// const val DIRECT_ONLY = "direct_only" // 只跳转,不记录 +// +// const val ACTION = "com.gh.gamecenter.UMENG" +// +// const val SP_CLICK_EVENT = "sp_click_event" +// } +// +// override fun onReceive(context: Context, intent: Intent) { +// val type: String? = intent.getStringExtra(EntranceUtils.KEY_TYPE) +// val messageString = intent.getStringExtra(EntranceUtils.KEY_MESSAGE) +// val notificationMessageId = intent.getStringExtra(GHUmengNotificationService.NOTIFICATION_MESSAGE_ID) +// val msgObject = UMessage(JSONObject(messageString)) +// +// when (type) { +// TYPE_CLICK -> { +// val link: LinkEntity? = intent.getParcelableExtra(EntranceUtils.KEY_DATA) +// +// if (link == null || link.link == "system") { +// jumpToHaloOfficialNotificationPage(context) +// } else { +// jumpToSpecificPage(context, link) +// } +// +// // 记录该推送通知被点击 +// UTrack.getInstance(context).trackMsgClick(msgObject) +// val msgId = intent.getStringExtra(GHUmengNotificationService.MESSAGE_ID) +// val pushId = intent.getStringExtra(GHUmengNotificationService.PUSH_ID) +// +// if (!msgId.isNullOrEmpty() && !pushId.isNullOrEmpty()) { +// postClickAction(context, ClickEvent( +// device_token = PushManager.deviceToken ?: "", +// msg_id = msgId, +// push_id = pushId)) +// } +// +// // 记录消息中心的那条消息已读(已被点击) +// if (!notificationMessageId.isNullOrEmpty()) { +// postMessageReadAction(context, link?.type ?: "", notificationMessageId) +// } +// } +// +// TYPE_REMOVE -> { +// // 记录该推送通知被 dismiss +// UTrack.getInstance(context).trackMsgDismissed(msgObject) +// } +// +// DIRECT_ONLY -> { +// val link: LinkEntity? = intent.getParcelableExtra(EntranceUtils.KEY_DATA) +// if (link == null || link.link == "system") { +// jumpToHaloOfficialNotificationPage(context) +// } else { +// jumpToSpecificPage(context, link) +// } +// +// // 记录消息中心的那条消息已读(已被点击) +// if (!notificationMessageId.isNullOrEmpty()) { +// postMessageReadAction(context, link?.type ?: "", notificationMessageId) +// } +// } +// } +// } +// +// private fun postClickAction(context: Context, clickEvent: ClickEvent) { +// PushHelper.postPushClickAction(context, clickEvent) +// } +// +// private fun postMessageReadAction(context: Context, type: String, notificationMessageId: String) { +// PushHelper.setNotificationMessageRead(context, type, notificationMessageId) +// } +// +// private fun jumpToHaloOfficialNotificationPage(context: Context) { +// DirectUtils.directToOfficialNotification(context, EntranceUtils.ENTRANCE_UMENG) +// } +// +// private fun jumpToSpecificPage(context: Context, link: LinkEntity) { +// when (link.type) { +// EntranceUtils.HOST_ARTICLE -> { +// DirectUtils.directToArticle(context, link.link!!, EntranceUtils.ENTRANCE_UMENG) +// } +// EntranceUtils.HOST_GAME -> { +// DirectUtils.directToGameDetail(context, link.link!!, EntranceUtils.ENTRANCE_UMENG) +// } +// EntranceUtils.HOST_COLUMN -> { +// DirectUtils.directToSubject(context, link.link!!, null, EntranceUtils.ENTRANCE_UMENG) +// } +// EntranceUtils.HOST_QUESTION -> { +// DirectUtils.directToQuestionDetail(context, link.link!!, EntranceUtils.ENTRANCE_UMENG, "推送通知") +// } +// EntranceUtils.HOST_ANSWER -> { +// DirectUtils.directToAnswerDetail(context, link.link!!, EntranceUtils.ENTRANCE_UMENG, "推送通知") +// } +// EntranceUtils.HOST_WEB -> { +// DirectUtils.directToWebView(context, link.link!!, EntranceUtils.ENTRANCE_UMENG) +// } +// EntranceUtils.HOST_COMMUNITY_ARTICLE -> { +// DirectUtils.directToCommunityArticle(context, link.link!!, link.community?.id +// ?: "", EntranceUtils.ENTRANCE_UMENG, "推送通知") +// } +// EntranceUtils.HOST_COMMUNITY_COLUMN -> { +// DirectUtils.directToCommunityColumn(context, link.community!!, link.link!!, EntranceUtils.ENTRANCE_UMENG, "推送通知") +// } +// else -> DirectUtils.directToLinkPage(context, link, EntranceUtils.ENTRANCE_UMENG, "推送通知") +// } +// } +// +// @Keep +// data class ClickEvent(var device_token: String, +// var msg_id: String, +// var push_id: String) +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java index 00f1f4af40..46d2311c85 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java @@ -3,9 +3,7 @@ package com.gh.gamecenter.retrofit; import android.content.Context; import android.text.TextUtils; -import com.gh.common.constant.Config; import com.gh.common.exposure.meta.MetaUtil; -import com.gh.common.util.AntiBotHelper; import com.gh.common.util.GzipUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; @@ -83,19 +81,19 @@ class OkHttpCacheInterceptor implements Interceptor { .build(); } - try { +// try { //noinspection ConstantExpression - if (request.url().toString().contains(Config.SENSITIVE_API_HOST) - && BuildConfig.FLAVOR != "internal") { - byte[] result = AntiBotHelper.getManager().avmpSign(3, bodyToString(request.body()).getBytes("UTF-8")); - String wToken = new String(result, "UTF-8"); - request = request.newBuilder() - .addHeader("wToken", wToken) - .build(); - } - } catch (Exception e) { - e.printStackTrace(); - } +// if (request.url().toString().contains(Config.SENSITIVE_API_HOST) +// && BuildConfig.FLAVOR != "internal") { +// byte[] result = AntiBotHelper.getManager().avmpSign(3, bodyToString(request.body()).getBytes("UTF-8")); +// String wToken = new String(result, "UTF-8"); +// request = request.newBuilder() +// .addHeader("wToken", wToken) +// .build(); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } request = request.newBuilder() .addHeader("IMEI", MetaUtil.getIMEI()) diff --git a/app/src/main/java/com/gh/gamecenter/security/SecurityActivity.kt b/app/src/main/java/com/gh/gamecenter/security/SecurityActivity.kt index 80c3be398f..30c4b6cbe2 100644 --- a/app/src/main/java/com/gh/gamecenter/security/SecurityActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/security/SecurityActivity.kt @@ -17,9 +17,15 @@ class SecurityActivity : NormalActivity() { companion object { @JvmStatic - fun getIntent(context: Context, entrance: String): Intent { + fun getIntent(context: Context, entrance: String, isLogoutStyle: Boolean = false): Intent { val bundle = Bundle() bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance) + bundle.putString(SecurityFragment.DISPLAY_TYPE, + if (isLogoutStyle) { + SecurityFragment.DisplayType.LOGOUT.value + } else { + SecurityFragment.DisplayType.DEFAULT.value + }) return getTargetIntent(context, SecurityActivity::class.java, SecurityFragment::class.java, bundle) } diff --git a/app/src/main/java/com/gh/gamecenter/security/SecurityFragment.kt b/app/src/main/java/com/gh/gamecenter/security/SecurityFragment.kt index 8f9c7d4580..0a5d03e075 100644 --- a/app/src/main/java/com/gh/gamecenter/security/SecurityFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/security/SecurityFragment.kt @@ -5,17 +5,28 @@ import android.os.Bundle import android.view.View import android.widget.TextView import butterknife.OnClick +import com.gh.common.constant.Constants import com.gh.common.util.DirectUtils +import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.R +import com.gh.gamecenter.eventbus.EBReuse import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.normal.NormalFragment +import com.gh.gamecenter.personal.PersonalFragment import kotterknife.bindView +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode class SecurityFragment : NormalFragment() { private val mSecurityRegisterWay by bindView(R.id.security_register_way) private val mSecurityBindPhone by bindView(R.id.security_bind_phone) + private val mSecuritySafeCenterContainer by bindView(R.id.safe_center_container) + private val mSecurityRegisterWayContainer by bindView(R.id.security_register_way_container) + private val mSecurityBindPhoneContainer by bindView(R.id.bind_phone_container) + private val mSecuritySafeCenterTv by bindView(R.id.safe_center_tv) + override fun getLayoutId(): Int { return R.layout.fragment_security } @@ -23,6 +34,26 @@ class SecurityFragment : NormalFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + if (arguments?.getString(DISPLAY_TYPE) == DisplayType.DEFAULT.value) { + mSecuritySafeCenterTv.text = "账户安全中心" + mSecuritySafeCenterContainer.setOnClickListener { + requireContext().startActivity(SecurityActivity.getIntent(requireContext(), mEntrance, true)) + } + } else { + mSecurityRegisterWayContainer.visibility = View.GONE + mSecurityBindPhoneContainer.visibility = View.GONE + mSecuritySafeCenterTv.text = "注销帐号" + mSecuritySafeCenterContainer.setOnClickListener { + if ("internal" == BuildConfig.FLAVOR) { + DirectUtils.directToWebView(requireContext(), Constants.LOGOUT_ADDRESS_DEV, mEntrance) + } else { + DirectUtils.directToWebView(requireContext(), Constants.LOGOUT_ADDRESS, mEntrance) + } + } + + setNavigationTitle("账户安全中心") + } + UserManager.getInstance().userInfoEntity?.run { mSecurityRegisterWay.text = when (registerType) { "qq" -> "QQ" @@ -49,7 +80,7 @@ class SecurityFragment : NormalFragment() { } @OnClick(R.id.bind_phone_container, R.id.security_contact) - override fun onClick(v : View) { + override fun onClick(v: View) { when (v.id) { R.id.bind_phone_container -> { if (UserManager.getInstance().userInfoEntity?.loginMobile.isNullOrEmpty()) { @@ -63,7 +94,23 @@ class SecurityFragment : NormalFragment() { } } + // 登录事件 + @Subscribe(threadMode = ThreadMode.MAIN) + fun onEventMainThread(reuse: EBReuse) { + if (reuse.type == PersonalFragment.LOGOUT_TAG) { + activity?.finish() + } + } + + enum class DisplayType(var value: String) { + DEFAULT("default"), + + LOGOUT("logout") + } + companion object { const val INSERT_MOBILE_CODE = 411 + + const val DISPLAY_TYPE = "display_type" } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java index 48ac4874e7..3cdb44b36b 100644 --- a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java +++ b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java @@ -114,6 +114,12 @@ public class UserRepository { } public void logout() { + + if (UserManager.getInstance().getLoginTokenEntity() != null + && "qq".equals(UserManager.getInstance().getLoginTokenEntity().getLoginType())) { + LoginHelper.logoutWithQQ(); + } + UserManager.getInstance().logout(); mLoginObsResponseUserInfo.postValue(null); @@ -131,8 +137,6 @@ public class UserRepository { SPUtils.setString(mPreferences, Constants.USER_INFO_KEY, null); SPUtils.setString(Constants.SP_REGULATION_TEST_PASS_STATUS, ""); - LoginHelper.logoutWithQQ(); - // ImManager.detachIm(); PushManager.deleteAlias(); ReservationRepository.clearReservations(); @@ -512,6 +516,7 @@ public class UserRepository { public MediatorLiveData getUploadBackgroundLiveData() { return mUploadBackgroundLiveData; } + public MediatorLiveData getUploadAvatarBorderLiveData() { return mUploadAvatarBorderLiveData; } diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 82982dbdf2..3f534ddb27 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -10,20 +10,18 @@ import android.preference.PreferenceManager; import android.text.TextUtils; import androidx.collection.ArrayMap; import androidx.lifecycle.ProcessLifecycleOwner; + import com.gh.base.GHActivityLifecycleCallbacksImpl; import com.gh.common.AppExecutor; import com.gh.common.FixedRateJobHelper; -import com.gh.common.PushManager; import com.gh.common.constant.Config; import com.gh.common.constant.Constants; import com.gh.common.exposure.ExposureManager; import com.gh.common.loghub.LoghubUtils; -import com.gh.common.util.AntiBotHelper; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceUtils; import com.gh.common.util.DownloadNotificationHelper; import com.gh.common.util.DownloadObserver; -import com.gh.common.util.GdtHelper; import com.gh.common.util.HomeBottomBarHelper; import com.gh.common.util.PackageHelper; import com.gh.common.util.PackageUtils; @@ -38,10 +36,7 @@ import com.gh.gamecenter.receiver.DownloadReceiver; import com.gh.gamecenter.receiver.InstallAndUninstallReceiver; import com.gh.gamecenter.receiver.InstallReceiver; import com.gh.gamecenter.receiver.NetworkStateReceiver; -import com.gh.gamecenter.receiver.UmengMeizuPushReceiver; -import com.gh.gamecenter.receiver.UmengMessageReceiver; import com.gh.gamecenter.user.UserRepository; -import com.gh.gid.GidHelper; import com.github.piasy.biv.BigImageViewer; import com.github.piasy.biv.loader.fresco.FrescoImageLoader; import com.leon.channel.helper.ChannelReaderUtil; @@ -57,26 +52,26 @@ import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager; /** * 延迟隐私政策相关操作会引起的问题 - * + *

* 1. 启动时需要提前获取一大堆数据,有如下(可能出现异常) - * - 主配置项 (含有许多配置项,譬如是否打开下载按钮) - * - 渠道对应表 - * - 标签颜色表? - * - 实名认证弹窗数据 - * - 游戏设备弹窗列表 - * - 游戏详情过滤标签数据 - * - 获取并提交当前设备的已玩过的游戏时间列表 - * - 获取首页可替换游戏列表 - * - 获取数量巨大的一堆光环已收录的游戏的包名 - * - 同步系统时间 - * + * - 主配置项 (含有许多配置项,譬如是否打开下载按钮) + * - 渠道对应表 + * - 标签颜色表? + * - 实名认证弹窗数据 + * - 游戏设备弹窗列表 + * - 游戏详情过滤标签数据 + * - 获取并提交当前设备的已玩过的游戏时间列表 + * - 获取首页可替换游戏列表 + * - 获取数量巨大的一堆光环已收录的游戏的包名 + * - 同步系统时间 + *

* 2. 隐私弹窗的弹出本身也会调用 MTA 收集用户数据 - * + *

* 3. Tinker 也涉及到 bugly 的使用 - * + *

* 4. 延迟初始化的友盟推送第一次启动不可用 */ -public class HaloApp extends TinkerAppLike { +public class HaloApp extends Application { private static HaloApp mInstance; private static ArrayMap sObjectMap = new ArrayMap<>(); @@ -92,9 +87,9 @@ public class HaloApp extends TinkerAppLike { public int mCacheKeyboardHeight = 0; - public HaloApp(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) { - super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent); - } +// public HaloApp(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) { +// super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent); +// } public static void put(String key, Object object) { sObjectMap.put(key, object); @@ -147,26 +142,26 @@ public class HaloApp extends TinkerAppLike { public void onCreate() { super.onCreate(); - if (!Injection.appInit(getApplication())) { + if (!Injection.appInit(this)) { return; } mInstance = this; - deviceRamSize = DeviceUtils.getTotalRamSizeOfDevice(getApplication()); + deviceRamSize = DeviceUtils.getTotalRamSizeOfDevice(this); //初始化Fresco(BigImageViewer 已包含Fresco) - BigImageViewer.initialize(FrescoImageLoader.with(getApplication())); + BigImageViewer.initialize(FrescoImageLoader.with(this)); PlayerFactory.setPlayManager(Exo2PlayerManager.class); CacheFactory.setCacheManager(ExoPlayerCacheManager.class); - mChannel = ChannelReaderUtil.getChannel(getApplication()); + mChannel = ChannelReaderUtil.getChannel(this); if (mChannel == null || TextUtils.isEmpty(mChannel.trim())) { mChannel = Config.DEFAULT_CHANNEL; } - if (isUserAcceptPrivacyPolicy(getApplication())) { + if (isUserAcceptPrivacyPolicy(this)) { initPushSdk(); } @@ -180,7 +175,7 @@ public class HaloApp extends TinkerAppLike { FixedRateJobHelper.begin(); // 刷新内存中的用户信息,避免应用进程重建时因没有用户信息数据而显示为掉登录状态 - UserRepository.getInstance(getApplication()).getLoginUserInfo(); + UserRepository.getInstance(this).getLoginUserInfo(); initReceiver(); initPackageChangesReceiver(); @@ -196,7 +191,7 @@ public class HaloApp extends TinkerAppLike { if (!BuildConfig.DEBUG) { RxJavaPlugins.setErrorHandler(throwable -> { if (Config.DEFAULT_CHANNEL.equals(mChannel)) { - Utils.toast(getApplication(), "当前页面未捕获的异常:" + throwable.toString()); + Utils.toast(this, "当前页面未捕获的异常:" + throwable.toString()); } }); } @@ -207,23 +202,21 @@ public class HaloApp extends TinkerAppLike { */ private void initPushSdk() { // HttpDns 需要在友盟前初始化,不然单例帐号会被友盟占了 - HttpDnsManager.getInstance(getApplication()); - PushManager.init(mChannel); + HttpDnsManager.getInstance(this); +// PushManager.init(mChannel); } private void initThirdPartySdk() { - GidHelper.getInstance().init(getApplication()); - initPushSdk(); - DataUtils.init(getApplication(), mChannel); - GdtHelper.INSTANCE.init(getApplication(), mChannel); - AntiBotHelper.getManager(); + DataUtils.init(this, mChannel); +// GdtHelper.INSTANCE.init(this, mChannel); +// AntiBotHelper.getManager(); } private void initDataHelper() { ExposureManager.init(); - LoghubUtils.init(getApplication()); - VideoRecordUtils.init(getApplication()); + LoghubUtils.init(this); + VideoRecordUtils.init(this); } // todo 动态注册和静态注册并行的话会触发多次回调 @@ -232,37 +225,37 @@ public class HaloApp extends TinkerAppLike { DownloadReceiver downloadReceiver = new DownloadReceiver(); IntentFilter downloadFilter = new IntentFilter(); downloadFilter.addAction(DownloadNotificationHelper.ACTION_DOWNLOAD); - getApplication().registerReceiver(downloadReceiver, downloadFilter); + this.registerReceiver(downloadReceiver, downloadFilter); InstallReceiver installReceiver = new InstallReceiver(); IntentFilter installFilter = new IntentFilter(); installFilter.addAction(DownloadNotificationHelper.ACTION_INSTALL); - getApplication().registerReceiver(installReceiver, installFilter); + this.registerReceiver(installReceiver, installFilter); ActivitySkipReceiver skipReceiver = new ActivitySkipReceiver(); IntentFilter skipFilter = new IntentFilter(); skipFilter.addAction(ActivitySkipReceiver.ACTION_ACTIVITY_SKIP); - getApplication().registerReceiver(skipReceiver, skipFilter); + this.registerReceiver(skipReceiver, skipFilter); - UmengMessageReceiver umengMessageReceiver = new UmengMessageReceiver(); - IntentFilter umengFilter = new IntentFilter(); - umengFilter.addAction(UmengMessageReceiver.ACTION); - getApplication().registerReceiver(umengMessageReceiver, umengFilter); +// UmengMessageReceiver umengMessageReceiver = new UmengMessageReceiver(); +// IntentFilter umengFilter = new IntentFilter(); +// umengFilter.addAction(UmengMessageReceiver.ACTION); +// this.registerReceiver(umengMessageReceiver, umengFilter); // ImReceiver imReceiver = new ImReceiver(); // IntentFilter imFilter = new IntentFilter(); // imFilter.addAction(ImReceiver.UNIQUE_BROADCAST_ACTION); // imFilter.addAction("action_finish"); -// getApplication().registerReceiver(imReceiver, imFilter); +// this.registerReceiver(imReceiver, imFilter); - UmengMeizuPushReceiver pushReceiver = new UmengMeizuPushReceiver(); - IntentFilter pushFilter = new IntentFilter(); - pushFilter.addAction("com.meizu.flyme.push.intent.MESSAGE"); - pushFilter.addAction("com.meizu.flyme.push.intent.REGISTER.FEEDBACK"); - pushFilter.addAction("com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK"); - pushFilter.addAction("com.meizu.c2dm.intent.REGISTRATION"); - pushFilter.addAction("com.meizu.c2dm.intent.RECEIVE"); - getApplication().registerReceiver(pushReceiver, pushFilter); +// UmengMeizuPushReceiver pushReceiver = new UmengMeizuPushReceiver(); +// IntentFilter pushFilter = new IntentFilter(); +// pushFilter.addAction("com.meizu.flyme.push.intent.MESSAGE"); +// pushFilter.addAction("com.meizu.flyme.push.intent.REGISTER.FEEDBACK"); +// pushFilter.addAction("com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK"); +// pushFilter.addAction("com.meizu.c2dm.intent.REGISTRATION"); +// pushFilter.addAction("com.meizu.c2dm.intent.RECEIVE"); +// this.registerReceiver(pushReceiver, pushFilter); } private void initPackageChangesReceiver() { @@ -272,22 +265,22 @@ public class HaloApp extends TinkerAppLike { intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED); intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); intentFilter.addDataScheme("package"); - getApplication().registerReceiver(receiver, intentFilter); + this.registerReceiver(receiver, intentFilter); } private void initConnectivityChangesReceiver() { NetworkStateReceiver receiver = new NetworkStateReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); - getApplication().registerReceiver(receiver, intentFilter); + this.registerReceiver(receiver, intentFilter); } private void initLocalBroadcast() { // IntentFilter filter = new IntentFilter(); // filter.addAction(ChatActivity.ACTION_DISMISS_FLOATING_WINDOW); // filter.addAction(ChatActivity.ACTION_HIDE_UNREAD_DOT); -// -// LocalBroadcastManager.getInstance(getApplication()).registerReceiver(new LocalBroadcastReceiver(), filter); + +// LocalBroadcastManager.getInstance(this).registerReceiver(new LocalBroadcastReceiver(), filter); } private void initTimeConsumingAction() { @@ -301,19 +294,23 @@ public class HaloApp extends TinkerAppLike { PackageHelper.initList(); // 避免在华为设备上出现 `Register too many Broadcast Receivers` 异常,可见 https://github.com/llew2011/HuaWeiVerifier - LoadedApkHuaWei.hookHuaWeiVerifier(getApplication()); + LoadedApkHuaWei.hookHuaWeiVerifier(this); // 预加载游戏库图标 SubjectRecommendEntity barData = HomeBottomBarHelper.getDefaultGameBarData(); if (!TextUtils.isEmpty(barData.getIconSelect())) { - Picasso.with(getApplication()).load(Uri.parse(barData.getIconSelect())).fetch(); + Picasso.with(this).load(Uri.parse(barData.getIconSelect())).fetch(); } if (!TextUtils.isEmpty(barData.getIconUnselect())) { - Picasso.with(getApplication()).load(Uri.parse(barData.getIconUnselect())).fetch(); + Picasso.with(this).load(Uri.parse(barData.getIconUnselect())).fetch(); } }); } + public Application getApplication() { + return this; + } + /** * 判断当前用户是否是已经同意过隐私政策协议 * 覆盖安装进入过首页的也当作是同意了 diff --git a/app/src/main/java/com/halo/assistant/TinkerApp.java b/app/src/main/java/com/halo/assistant/TinkerApp.java index ec0989362e..6fd7c23640 100644 --- a/app/src/main/java/com/halo/assistant/TinkerApp.java +++ b/app/src/main/java/com/halo/assistant/TinkerApp.java @@ -1,19 +1,19 @@ -package com.halo.assistant; - -import com.tencent.tinker.loader.app.TinkerApplication; -import com.tencent.tinker.loader.shareutil.ShareConstants; - -/** - * 这个类不要加任何应用逻辑,有意义的东西都放在{@link HaloApp} - * - * @author CsHeng - * @Date 13/09/2017 - * @Time 6:12 PM - */ -public class TinkerApp extends TinkerApplication { - - public TinkerApp() { - super(ShareConstants.TINKER_ENABLE_ALL, "com.halo.assistant.HaloApp", "com.tencent.tinker.loader.TinkerLoader", false); - } - -} +//package com.halo.assistant; +// +//import com.tencent.tinker.loader.app.TinkerApplication; +//import com.tencent.tinker.loader.shareutil.ShareConstants; +// +///** +// * 这个类不要加任何应用逻辑,有意义的东西都放在{@link HaloApp} +// * +// * @author CsHeng +// * @Date 13/09/2017 +// * @Time 6:12 PM +// */ +//public class TinkerApp extends TinkerApplication { +// +// public TinkerApp() { +// super(ShareConstants.TINKER_ENABLE_ALL, "com.halo.assistant.HaloApp", "com.tencent.tinker.loader.TinkerLoader", false); +// } +// +//} diff --git a/app/src/main/java/com/halo/assistant/TinkerAppLike.java b/app/src/main/java/com/halo/assistant/TinkerAppLike.java index bc2dbb702d..921b052a31 100644 --- a/app/src/main/java/com/halo/assistant/TinkerAppLike.java +++ b/app/src/main/java/com/halo/assistant/TinkerAppLike.java @@ -1,53 +1,49 @@ -package com.halo.assistant; - -import android.annotation.TargetApi; -import android.app.Application; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -import androidx.multidex.MultiDex; - -import com.gh.common.constant.Config; -import com.gh.gamecenter.BuildConfig; -import com.tencent.bugly.Bugly; -import com.tencent.bugly.beta.Beta; -import com.tencent.tinker.loader.app.DefaultApplicationLike; - -public class TinkerAppLike extends DefaultApplicationLike { - - public TinkerAppLike(Application application, int tinkerFlags, - boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, - long applicationStartMillisTime, Intent tinkerResultIntent) { - super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent); - } - - @Override - public void onCreate() { - super.onCreate(); - - if (HaloApp.isUserAcceptPrivacyPolicy(getApplication())) { - Bugly.init(getApplication(), Config.BUGLY_APPID, BuildConfig.DEBUG); - } - } - - - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) - @Override - public void onBaseContextAttached(Context base) { - super.onBaseContextAttached(base); - // you must install multiDex whatever tinker is installed! - MultiDex.install(base); - - // 安装tinker - if (HaloApp.isUserAcceptPrivacyPolicy(base)) { - Beta.installTinker(this); - } - } - - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) - public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callbacks) { - getApplication().registerActivityLifecycleCallbacks(callbacks); - } - -} \ No newline at end of file +//package com.halo.assistant; +// +//import android.annotation.TargetApi; +//import android.app.Application; +//import android.content.Context; +//import android.content.Intent; +//import android.os.Build; +// +//import androidx.multidex.MultiDex; +// +//import com.tencent.tinker.loader.app.DefaultApplicationLike; +// +//public class TinkerAppLike extends DefaultApplicationLike { +// +// public TinkerAppLike(Application application, int tinkerFlags, +// boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, +// long applicationStartMillisTime, Intent tinkerResultIntent) { +// super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent); +// } +// +// @Override +// public void onCreate() { +// super.onCreate(); +// +//// if (HaloApp.isUserAcceptPrivacyPolicy(getApplication())) { +//// Bugly.init(getApplication(), Config.BUGLY_APPID, BuildConfig.DEBUG); +//// } +// } +// +// +// @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) +// @Override +// public void onBaseContextAttached(Context base) { +// super.onBaseContextAttached(base); +// // you must install multiDex whatever tinker is installed! +// MultiDex.install(base); +// +// // 安装tinker +//// if (HaloApp.isUserAcceptPrivacyPolicy(base)) { +//// Beta.installTinker(this); +//// } +// } +// +// @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) +// public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callbacks) { +// getApplication().registerActivityLifecycleCallbacks(callbacks); +// } +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java b/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java index 52da18c022..def8c507eb 100644 --- a/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/AboutFragment.java @@ -6,12 +6,13 @@ import android.content.Intent; import android.os.Bundle; import android.os.Message; import android.preference.PreferenceManager; -import android.text.TextUtils; import android.view.View; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.core.content.ContextCompat; + import com.gh.common.util.DirectUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.MtaHelper; @@ -23,12 +24,9 @@ import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.manager.UpdateManager; import com.gh.gamecenter.normal.NormalFragment; import com.halo.assistant.HaloApp; -import com.tencent.bugly.beta.tinker.TinkerManager; import java.util.Locale; -import androidx.core.content.ContextCompat; - import butterknife.BindView; import butterknife.OnClick; import butterknife.OnLongClick; @@ -138,12 +136,12 @@ public class AboutFragment extends NormalFragment { @OnLongClick(R.id.about_tv_version) public boolean OnLongClick(View view) { if (view.getId() == R.id.about_tv_version) { - String tinkerId = TinkerManager.getNewTinkerId(); - if (!TextUtils.isEmpty(tinkerId)) { - mVersionName.setText(("V" + PackageUtils.getVersionName() + "." + tinkerId)); - } else { +// String tinkerId = TinkerManager.getNewTinkerId(); +// if (!TextUtils.isEmpty(tinkerId)) { +// mVersionName.setText(("V" + PackageUtils.getVersionName() + "." + tinkerId)); +// } else { toastLong(R.string.toast_upload_latest); - } +// } } return false; } diff --git a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java index b2944f3eb9..07cccb69c3 100644 --- a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java @@ -356,7 +356,7 @@ public class SettingsFragment extends NormalFragment { MtaHelper.onEvent("我的光环_设置", "设置功能", "账号与安全"); CheckLoginUtils.checkLogin(getContext(), "设置-账号与安全-请先登录", () -> { PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(getContext(), () -> { - startActivityForResult(SecurityActivity.getIntent(getContext(), mEntrance), INSERT_MOBILE_CODE); + startActivityForResult(SecurityActivity.getIntent(getContext(), mEntrance, false), INSERT_MOBILE_CODE); }); }); diff --git a/app/src/main/res/drawable-xxxhdpi/permission_sdk.png b/app/src/main/res/drawable-xxxhdpi/permission_sdk.png new file mode 100644 index 0000000000..f4a7930916 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/permission_sdk.png differ diff --git a/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml b/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml new file mode 100644 index 0000000000..697ecc46e6 --- /dev/null +++ b/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_privacy_policy.xml b/app/src/main/res/layout/dialog_privacy_policy.xml index a8c8e0c2e2..e06a308e99 100644 --- a/app/src/main/res/layout/dialog_privacy_policy.xml +++ b/app/src/main/res/layout/dialog_privacy_policy.xml @@ -2,13 +2,13 @@ + app:layout_constraintTop_toBottomOf="@id/head_background" + app:layout_goneMarginTop="16dp" /> @@ -114,7 +116,7 @@ android:background="@drawable/dialog_privacy_button" android:gravity="center" android:paddingBottom="16dp" - android:text="同意" + android:text="授权,开启光环" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" @@ -129,6 +131,7 @@ android:text="不同意并退出App" android:textColor="@color/text_999999" android:textSize="12sp" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> diff --git a/app/src/main/res/layout/dialog_privacy_protocol.xml b/app/src/main/res/layout/dialog_privacy_protocol.xml new file mode 100644 index 0000000000..36aa49c4fe --- /dev/null +++ b/app/src/main/res/layout/dialog_privacy_protocol.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index 70c03c6941..96d4fdc9c9 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -200,10 +200,11 @@ + android:layout_weight="1" + android:src="@drawable/login_douyin_icon" + android:visibility="gone" /> diff --git a/app/src/main/res/layout/fragment_security.xml b/app/src/main/res/layout/fragment_security.xml index 52ea573ce6..c3dd8d5a50 100644 --- a/app/src/main/res/layout/fragment_security.xml +++ b/app/src/main/res/layout/fragment_security.xml @@ -2,29 +2,31 @@ + android:background="@color/text_F5F5F5" + android:orientation="vertical"> - + android:background="@color/white" + android:orientation="vertical"> + + android:paddingRight="20dp"> + + android:textSize="16sp" /> + android:paddingRight="20dp"> + android:textSize="16sp" /> + android:textSize="14sp" /> + android:src="@drawable/icon_more" /> + + + + + + + @@ -89,20 +116,20 @@ + android:textSize="12sp" /> + android:textSize="12sp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/popup_share_dialog.xml b/app/src/main/res/layout/popup_share_dialog.xml index 3f9e4b26ea..5efd4dadbb 100644 --- a/app/src/main/res/layout/popup_share_dialog.xml +++ b/app/src/main/res/layout/popup_share_dialog.xml @@ -168,6 +168,6 @@ android:gravity="center" android:textColor="@color/text_666666" android:textSize="16sp" - android:text="@string/cancel"/> + android:text="取消"/> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9e731edf75..2255d84002 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -27,6 +27,9 @@ #d1e5f7 + @android:color/transparent + @color/white + @color/theme #06D0A8 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1260eb44fd..759dabcd36 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -670,6 +670,7 @@ 游戏服务上传准则 https://resource.ghzs.com/page/privacy_policies/privacy_policies.html https://resource.ghzs.com/page/game_rule/game_rule.html + https://resource.ghzs.com/page/user_protocol/disclaimer.html 按时间排序 按精选排序 @@ -702,6 +703,7 @@ 注册方式 还有其他问题? 联系客服 + 账户安全中心 跳过 绑定手机 绑定手机号 diff --git a/build.gradle b/build.gradle index 0ea0cce80b..584565b4fd 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ buildscript { // classpath 'com.tencent.tinker:tinker-patch-gradle-plugin:1.8.1' // bugly for tinker - classpath "com.tencent.bugly:tinker-support:1.1.1" +// classpath "com.tencent.bugly:tinker-support:1.1.1" // for apkChannelPackage https://github.com/ltlovezh/ApkChannelPackage // 这个插件会让 AS 报 "API 'variant.getAssemble()' is obsolete and has been replaced with 'variant.getAssembleProvider()'." @@ -41,7 +41,7 @@ allprojects { maven { url "https://dl.bintray.com/thelasterstar/maven/" }//weiboSDK maven { url 'https://dl.bintray.com/aweme-open-sdk-team/public' } //tiktokSDK maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } - maven { url "http://dl.bintray.com/piasy/maven" } + maven { url "http://dl.bintray.com/piasy/maven" } maven { url 'https://dl.bintray.com/guardian/android' } maven { url 'https://dl.bintray.com/umsdk/release' } } diff --git a/gradle.properties b/gradle.properties index 43296d42e5..ffc3992151 100644 --- a/gradle.properties +++ b/gradle.properties @@ -53,8 +53,8 @@ SENSITIVE_API_HOST=https\://and-core-api.ghzs.com/v4d3d0/ # 请不要手动改动下面的值,除非你明确需要以某个apk作为基准包,需要打包请以scripts/tinker*.sh为准 TINKER_ENABLE= -TINKER_ID=f29b8da -TINKER_BASE_APK_DIR=app-0908-14-28-07_f29b8da +TINKER_ID=d56a640 +TINKER_BASE_APK_DIR=app-1026-12-46-36_d56a640 android.useAndroidX=true android.enableJetifier=true diff --git a/libraries/LGLibrary b/libraries/LGLibrary index a497279fae..6f98431cbd 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit a497279faeca06ce838525e9fcdec783f3821ecc +Subproject commit 6f98431cbd07d8b66a98f532dd0605bc61fd617a diff --git a/scripts/build_with_simple_backup.sh b/scripts/build_with_simple_backup.sh new file mode 100755 index 0000000000..34d5a9d411 --- /dev/null +++ b/scripts/build_with_simple_backup.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# @author juntao +# @2020.10.29 + +git_sha=`git rev-parse --short HEAD` +versionName=$(awk -v FS="versionName = " 'NF>1{print $2}' dependencies.gradle | sed "s/\"//g") +versionCode=$(awk -v FS="versionCode = " 'NF>1{print $2}' dependencies.gradle | sed "s/\"//g") +build_time=$(TZ=Asia/Shanghai date +'%Y-%m%d-%H%M') + +./gradlew --stop +./gradlew clean + +./gradlew aPR + +mkdir -p release-app/${versionName}_${versionCode} + +cp -R build/outputs/apk/publish/release/app-publish-release.apk release-app/${versionName}_${versionCode}/光环助手_${versionName}_${versionCode}_正式包_${git_sha}_${build_time}.apk diff --git a/settings.gradle b/settings.gradle index 92b7c75801..1b339eb9e9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,9 +1,9 @@ include ':app' //include ':libraries:im' include ':libraries:LGLibrary' -include ':libraries:MTA' +//include ':libraries:MTA' include ':libraries:QQShare' -include ':libraries:TalkingData' -include ':libraries:UmengPush' +//include ':libraries:TalkingData' +//include ':libraries:UmengPush' //include ':libraries:WechatShare' include ':libraries:Matisse' \ No newline at end of file