diff --git a/app/build.gradle b/app/build.gradle
index c80431e..9f2a85b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -39,8 +39,8 @@ android {
productFlavors {
beta {
flavorDimensions "default"
- versionCode 81
- versionName "1.8.1"
+ versionCode 82
+ versionName "1.8.2"
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jgyapp.market",
JPUSH_APPKEY : "141f3b392c07314f02079afe", //JPush 上注册的包名对应的 Appkey.
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6da3b9c..e9dfaea 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,8 +33,7 @@
android:networkSecurityConfig="@xml/network"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
- android:theme="@style/ImmerseTheme"
- tools:ignore="GoogleAppIndexingWarning">
+ android:theme="@style/ImmerseTheme">
“七彩宏云应用市场”以下简称应用市场,该业务是由深圳市七彩宏云智能设备有限公司(以下简称“我们”或“七彩宏云”)为您提供的,用于下载、安装和管理应用的平台。我们非常重视您的个人信息和隐私保护,我们将会按照法律要求和业界成熟的安全标准,为您的个人信息提供相应的安全保护措施。 +
+•我们收集您的个人信息,以便您购买、下载、安装和管理您的应用。
+•我们联合合作伙伴为您提供丰富的应用和数字商品,您的应用市场帐号的昵称、评论、订单信息将可能会被分享给相应的合作伙伴,以便为您提供更加优质的服务。
+•在您开启“管控后台”后(请注意我们会默认开启“管控后台”),我们会收集您在体验应用时的相关数据,用于为您提供应用管理与管控等服务。
+•若您在参加活动获得实物奖品或者领取礼包、优惠券等奖品时,为了向您派发实物奖品,我们需要与活动合作方和第三方物流公司共享您的联系方式等信息,具体如正文描述。
+•我们将会使用您的帐号和设备信息,以及您在“应用市场”中的搜索、下载以及其他页面操作信息用于风险控制识别,以保障用户参与活动的合法权益。
+•我们会使用您的帐号信息和设备信息,以及您在“应用市场”中的搜索、下载和其他操作信息来改进功能并向您提供个性化推荐,具体如正文描述。
+•本应用退出后,需要在后台连接网络完成部分服务,如更新应用、预约应用下载安装、接收消息等。
+1. 我们如何收集和使用您的个人信息
+浏览/搜索/下载/安装/卸载应用
+当您进入“应用市场”时,为了保障您能正常使用我们的服务和功能,我们会收集有关您使用本应用的信息、设备标识符(例如IMEI、SN,不同的操作系统版本采集的数据会略有差异)、操作系统的设置信息、设备的硬件信息、网络信息、运营商信息、已安装应用软件列表(例如在指定的充电状态和网络连接状态下触发闲时更新)、游戏浏览记录以及应用的基本信息。如您在其它应用内查看“应用市场”内容详情页面并选择安装“应用市场”或在其它应用内复制“应用市场”的口令,我们会将相应口令写入剪切板,在您打开“应用市场”时,我们会读取剪切板,以使您打开对应的页面。 +
+当您登录应用市场帐号后,您可以体验应用下载、参加活动、评论、论坛、分享应用等服务。相关的订单信息会被传递给对应的合作伙伴以帮助您完成消费,同时这些信息也会将用于对您所购买商品进行版权保护。另外,您的应用市场帐号的订单信息会被用于与相应合作伙伴的费用结算。上述信息均会与您的应用市场帐号相关联,以便在您的其他设备上进行同步,同时您的评论、论坛、联系方式及您的内容等级限制设置等您提交的信息,将会同步至其他由我司提供的应用类平台,方便您查看和管理。 +
+评论及论坛服务
+您可以对应用进行打分和评论,可以查看、关注您所感兴趣的应用论坛,并发表您的观点。我们将把有关您使用评论和论坛的信息(例如您上传的图片、音视频)及您的论坛浏览记录存储在您的应用市场帐号下,您的帐号昵称、头像将始终对所有人可见。同时您的帐号昵称和发布的评论类信息会被分享给相应的合作伙伴,帮助他们改进服务和产品。为了保障您的数据安全和隐私,我们要求合作伙伴签订数据安全保护协议,明确了合作伙伴对您的数据的保护责任、义务和要求。 +
+防范欺诈及其他恶意行为
+为了保护我司、您或其他客户的权利,我们会根据以上收集的信息以及您的实名认证情况进行风险控制,防止欺诈等违法活动。
+为保护您免遭受第三方恶意软件和其他安全问题的侵害,我们需要收集您的已安装应用软件列表信息(包括通过我司应用市场或其他来源安装在您设备上的应用)进行安全检测,并可能会就不安全的应用向您发出提醒。
+若您不提供这些信息,我们可能无法为您提供完整的上述服务。
+来自合作伙伴的信息
+在经您授权同意的情况下,付费推广的应用开发者可通过我们的 + API向我们发送您的广告标识符及您在其应用内的操作信息(例如打开应用、购买商品以及应用开发者认定的其他转化行为),无论您是否使用“我司应用市场”。例如,应用开发者可使用我们的 + API 告知我们您是否打开过其应用,电商应用开发者也可以告知我们您在其应用中是否购买了商品。
+应用开发者在您访问或使用他们的服务时会通过与他们合作的第三方收到您的相关数据。我们要求此类应用开发者在向我们提供任何数据之前,均必须拥有收集、使用和分享您的数据的合法权利。
+服务体验改进
+我们会根据以上收集的信息进行统计分析,用户服务效果评估,改进我们产品和服务的质量及用户体验。
+2. 设备权限调用
+存储权限:当您使用本应用时,为了保证您安装的应用稳定运行,我们需要向您申请并获取此权限,在您使用论坛发帖/回帖过程中添加图片时,允许“应用市场”访问您设备上的照片、媒体内容和文件,用于读写文件,以便您发布、保存图片视频权限,并且我们承诺仅读取或缓存应用所必需的信息。如您不需要这样的服务,可以随时关闭该权限,这不会影响其他服务的使用。 +
+电话(设备信息)权限:当您使用本应用时,我们需要通过该权限获取您的设备标识符来向您提供本应用的基础服务并进行安全风控防护。如您不需要这样的服务,可以随时关闭该权限,这不会影响其他服务的使用。
+应用软件列表:用于管理和更新已安装应用
+您可以随时访问系统“设置”来管理您的系统权限。
+本应用申请的权限清单会随版本的不同略有差异。
+3. 个性化推荐
+我们会收集您的设备标识符、IP + 地址、应用给市场帐号信息、交易记录、已安装应用软件列表、应用卸载列表、有关您使用下述应用的信息来帮助您发现更感兴趣的内容。例如基于您在“应用市场”和“游戏中心”中的搜索、浏览、点击、下载、评论、收藏行为来推荐或为您静默下载我们认为您可能感兴趣的应用。为了提供更丰富的内容推荐,我们还会使用您设备上的应用启动、应用退出、安装和删除相关的统计信息。 +
+在个性化推荐场景中,本应用会使用您提供给我司(含子公司)的个人信息来创建用户组别,即将特征相似的人群分组。您的信息用于决定将您分配到哪个细分组别,以及相应地,会收到哪些推荐或安装。您的以下个人信息可能会被用于定向细分:帐号信息、您使用本应用的信息、设备标识符、操作系统的设置信息、设备的硬件信息、网络信息、运营商信息、已安装应用软件列表以及应用的基本信息。本应用将会使用这些组别或分组的交集推荐应用。 +
+您可以在我司官网或者我司400-678-4158服务热线联系我司客服人员,要求关闭应用管控相关功能。若您要求我司关闭,我司可能会修改部分您个人账号下的相关数据信息,但不会影响您设备正常使用。
+4. 广告与营销
+我们会根据您的个人信息创建用户组别,同时收集您的设备及使用信息和广告互动信息,并向您展示更有相关性的个性化广告和其他推广内容。在此过程中我们会严格保护您的隐私。
+如您希望限制个性化广告或应用推送安装管控等,您可以通过我司官网或我司400-678-4158服务热线联系我司。我司客服设置后您可能仍会收到同等数量的广告,但广告相关性会降低。
+同时请您理解并同意,您在广告页面中提交的信息由第三方广告主或者广告经纪公司收集和使用,并由其负责您提交个人数据的隐私保护责任。您使用该第三方服务时须受其隐私政策(而非本声明)约束,您需要仔细阅读其政策内容。
+我们可能会根据您的设备标识符、操作系统版本、当前设备用户昵称、网络信息以及有关您使用本应用的信息,以及合作伙伴向我们分享的人群分组信息(人群分组信息由合作伙伴使用您的个人信息按照相似特征创建),向您推送服务通知和活动、中奖等消息。此外,为了更好地改进我们的产品或服务,我们会收集推送消息下发状态和处理记录。如需退订活动请联系我司客服人员。 +
+在推荐场景中,合作伙伴可能使用广告标识符针对特定人群推荐应用。我们还会根据合作伙伴提供的信息来帮助其应用进行推广优化,决定是否向您展示合作伙伴的应用,并向他们展示推广的效果数据。如果您不希望获取基于这些数据的应用推送及静默安装,请联系我司客服来停止基于广告标识符的推荐及静默安装服务。 +
+5. 对未成年人的保护
+如果您是儿童(不满十四周岁的未成年人),则需要您的父母或监护人同意您使用本应用并同意相关应用的服务条款。父母或监护人也应采取适当的预防措施来保护未成年人,包括监督其对本应用的使用。
+6. 与第三方共享
+部分服务需要由我们与合作伙伴共同为您提供,例如评论服务、网络加速服务、奖品快递服务、游戏服务等,为此我们需要将您的个人信息分享给我们的合作伙伴。
+7. 第三方SDK列表
+部分服务需要由我们与合作伙伴共同为您提供,例如社交分享等,为此我们集成了合作伙伴的软件工具开发包(简称“SDK”)或其他类似的应用程序。
+8. 管理您的数据
+您可以访问“应用市场”>“我的”或“管理”来访问、更正或删除您的部分个人信息。
+如您对您的数据主体权利有进一步要求或存在任何疑问、意见或建议,可通过本声明中“如何联系我们”章节中所述方式与我们取得联系,并行使您的相关权利。
+9. 数据存储地点及期限
+您的设备信息、应用信息及使用信息等相关数据将会传输并保存至中华人民共和国境内的服务器。我们仅在实现本声明所述目的所必需的时间内保留您的个人信息,并在超出下述保留时间后删除或匿名化处理您的个人信息,除非法律法规另有要求。
+您的设备标识符、帐号信息、操作系统的设置信息、设备的硬件信息、网络信息、应用的基本信息、已安装应用软件列表、应用卸载列表、有关您使用本应用的信息、礼包兑换码、优惠券、有关您使用评论的信息、问题与建议信息、消费特权等级、预约记录、联系方式和活动参与记录等信息存储不超过5年或在您注销帐号或专属设备损坏且不再维修后自动删除。 +
+10. 如何联系我们
+您可以通过我司官网或400-678-4158服务热线联系我司,我们会尽快回复您。
+如果您对我们的回复不满意,特别是当我们的个人信息处理行为损害了您的合法权益时,您还可以通过向有管辖权的人民法院提起诉讼、向行业自律协会或政府相关管理机构投诉等外部途径进行解决。您也可以向我们了解可能适用的相关投诉途径的信息。 +
+我司将始终遵照我们的隐私政策来收集和使用您的信息。有关我们的隐私政策将有可能根据不同时期国家政策及行业法规进行完善和补充,具体可参阅我司最新的相关隐私声明。
+ + + \ No newline at end of file diff --git a/app/src/main/assets/user_agreement.html b/app/src/main/assets/user_agreement.html new file mode 100644 index 0000000..c8f377e --- /dev/null +++ b/app/src/main/assets/user_agreement.html @@ -0,0 +1,135 @@ + + + + + +欢迎您使用七彩宏云的相关服务!为使用七彩宏云的相关服务,您应当阅读并遵守本《用户协议》(以下简称“本协议”)。 + 请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,以及开通或使用某项服务的单独协议,并 + 选择“同意”按钮。限制、免责条款可能以加粗形式提示您注意。
+本协议是您(下称“用户”)与深圳市七彩宏云智能设备有限公司之间在使用七彩宏云服务之前,注册或激活七彩宏云 + 设备或帐号时签署的协议。
+除非您已阅读并接受本协议所有条款,否则您无权使用七彩宏云的相关服务。如果您未满18周岁,请在法定监护人的 + 陪同下阅读本协议及其他上述协议,并特别注意未成年人使用条款。
+ +一、重要须知---在签署本协议之前,七彩宏云正式提醒用户:
+1. 用户完成全部注册程序的行为或设备激活的行为表示用户已经阅读本协议的全部条款,理解并同意本协议的条款所约定 + 的权利及义务,并受本协议条款的约束。如用户对本协议的条款存有疑义可暂停注册或暂停激活设备并向七彩宏云书面 + 提出,否则,用户完成注册程序(或设备激活)之后,应当遵守本协议的条款使用相关服务。
+2. 用户一经注册七彩宏云公司的相关账号或激活设备,除非子频道要求单独开通权限,用户有权利用该账号使用对应各个 + 频道的单项服务,当用户使用各单项服务时,用户的使用行为视为其对该单项服务的服务条款以及七彩宏云在该单项服 + 务中发出的各类公告所声明的权利及义务的接受,即同意受此服务条款及公告权利义务的约束。用户应当对以其用户账 + 号进行的所有活动和事件负法律责任。
+3. 七彩宏云用户服务协议以及各个频道单项服务条款和公告可由七彩宏云随时更新,可能会不断发布关于本协议的相关补 + 充协议、业务规则等内容。上述内容一经正式发布,即为本协议不可分割的组成部分,上述的更新或发布内容我们将不 + 再另行通知。您在使用相关服务时,应关注并遵守其所适用的相关条款。
+ +二、关于账号或设备
+1. 账号仅限于注册用户本人使用,原则上禁止赠与、借用、租用、转让或售卖,否则由此带来的包括并不限于用户通讯中 + 断、用户资料和内容等清空等损失由用户自行承担。
+2. 用户应当妥善保管自己的账号、密码,用户就其账号及密码项下之一切活动负全部责任,包括用户数据的修改,内容的 + 损失以及其他所有的损失由用户自行承担。用户须重视账号密码保护。用户如发现他人未经许可使用其账号时应当立即 + 通知七彩宏云相关工作人员。
+3. 用户在账号丢失或遗忘密码后,可遵照七彩宏云的申诉途径及时申诉请求找回账号。用户应不断提供能增加账号安全性 + 的个人密码保护资料。用户可以凭初始注册资料及个人密码保护资料向七彩宏云官方客服申请找回账号,七彩宏云的密 + 码找回机制仅负责识别申请人提交资料与系统记录资料的正确性,而无法识别申诉人是否系真正账号权使用人。对用户 + 因被他人冒名申诉而致的任何损失,七彩宏云不承担任何责任,用户知晓账号及密码保管责任在于用户,七彩宏云并不 + 承诺账号丢失或遗忘密码后用户一定能通过申诉找回账号。
+4. 用户保证注册账号时填写的身份信息是真实的,任何非法、不真实、不准确的用户信息所产生的责任由用户承担。用户 + 应不断更新注册资料,符合及时、详尽、真实、准确的要求。所有原始键入的资料将引用用户的账号注册资料。如果因 + 用户的注册信息不真实而引起的问题,以及对问题发生所带来的后果,七彩宏云不负任何责任。
+5. 如用户违反法律法规、七彩宏云各服务协议等规定,七彩宏云有权根据相关规则进行违规判定,并采取相应限制或处罚 + 措施,包括但不限于:限制或冻结用户对号码的使用,限制或停止某项单独服务(如视频直播)。
+ +三、用户不得从事以下行为:
+1. 利用七彩宏云服务或产品设备发表、传送、传播、储存危害国家安全、国家统一、社会稳定的内容,或侮辱诽谤、色情、 + 暴力、引起他人不安及任何违反国家法律法规政策的内容或者设置含有上述内容的网名、角色名。
+2. 利用七彩宏云服务或产品设备发表、传送、传播、储存侵害他人知识产权、商业机密权、肖像权、隐私权等合法权利的 + 内容。
+3. 进行任何危害计算机网络安全的行为,包括但不限于:使用未经许可的数据或进入未经许可的服务器/账户;未经允许 + 进入公众计算机网络或者他人计算机系统并删除、修改、增加存储信息;未经许可,企图探查、扫描、测试本“软件” + 系统或网络的弱点或其它实施破坏网络安全的行为;企图干涉、破坏本“软件”系统或网站的正常运行,故意传播恶意 + 程序或病毒以及其他破坏干扰正常网络信息服务的行为;伪造TCP/IP数据包名称或部分名称。
+4. 进行任何破坏七彩宏云服务公平性或者其他影响应用正常秩序的行为,如主动或被动刷分、合伙作弊、使用外挂或者其 + 他的作弊软件、利用BUG(又叫“漏洞”或者“缺陷”)来获得不正当的非法利益,或者利用互联网或其他方式将外挂、 + 作弊软件、BUG公之于众。
+5. 进行任何诸如发布广告、销售商品的商业行为,或者进行任何非法的侵害七彩宏云利益的行为。
+6. 将七彩宏云服务或产品上的内容,包括但不限于视频、文档等,未经允许擅自转移到别处使用的行为。
+7. 进行其他任何违法以及侵犯其他个人、公司、社会团体、组织的合法权益的行为。
+ +四、七彩宏云声明
+1. 用户须明白,在使用七彩宏云服务可能存在有来自任何他人的包括威胁性的、诽谤性的、令人反感的或非法的内容或行 + 为或对他人权利的侵犯(包括知识产权)的匿名或冒名的信息的风险,用户须自行承担以上风险,七彩宏云对服务不作 + 担保,不论是明确的或隐含的,包括所有有关信息真实性、适当性、适于某一特定用途、所有权和非侵权性的默示担保 + 和条件,对因此导致任何因用户不正当或非法使用服务产生的直接、间接、偶然、特殊及后续的损害,不承担任何责任。
+2. 使用七彩宏云服务必须遵守国家有关法律和政策等,维护国家利益,保护国家安全,并遵守本条款,对于用户违法或违 + 反本协议的使用(包括但不限于言论发表、传送等)而引起的一切责任,由用户负全部责任。
+3. 七彩宏云将运用各种安全技术和程序建立完善的管理制度来保护用户的个人信息,以免遭受未经授权的访问、使用或披 + 露。未经用户的同意,七彩宏云不会对任何公司、组织和个人披露您的个人信息,但法律法规另有规定的除外。
+4. 用户理解七彩宏云的服务同大多数因特网产品一样,易受到各种安全问题的困扰,包括但不限于:
+• 在使用服务时透露详细个人资料,被不法分子利用,造成现实生活中的骚扰;
+• 用户泄露或遭哄骗、破译密码;
+• 下载安装的其它软件中含有“特洛伊木马”等病毒,威胁到个人计算机上信息和数据的安全,继而威胁对本服务的使用。
+ 对于发生上述情况的,用户应当自行承担责任。 +5. 用户明白,七彩宏云为了服务整体运营的需要,有权在公告通知后修改或中断、中止或终止服务而不需通知您的权利, + 而无须向第三方负责或承担任何赔偿责任。
+6. 用户理解,互联网技术的不稳定性,可能导致政府政策管制、病毒入侵、黑客攻击、服务器系统崩溃或者其他现今技术 + 无法解决的风险发生可能导致七彩宏云服务中断或账号内容损失,用户对此非人为因素引起的损失由用户承担责任。
+7. 用户理解并接受七彩宏云推送的短信提醒和邮件提醒,用户可自行选择退订。
+8. 用户理解并接受应用市场内全部或部分应用为第三方应用,七彩宏云仅提供应用的下载、安装或相关管控服务,七彩宏 + 云不对任何第三方应用的使用及信息安全负责;
+ +五、知识产权
+1. 七彩宏云的服务包括七彩宏云企业旗下所有的网站、网页、应用、软件以及内含的文字、图片、视频、音频等元素,七 + 彩宏云旗下商标、标志、标识以及专利权,七彩宏云对此享有上述知识产权。
+2. 用户不得对七彩宏云所提供任何服务涉及的相关网页、应用、软件等产品进行反向工程、反向汇编、反向编译等。
+3. 用户使用七彩宏云所提供服务只能在本《用户协议》以及相应的授权许可协议授权的范围使用七彩宏云企业相关知识产 + 权,未经授权超范围使用的构成对七彩宏云的侵权。
+4. 用户在使用七彩宏云服务时发表上传的文字、图片、视频、软件以及表演等用户原创的信息,此部分信息的知识产权归 + 用户,但用户的发表、上传行为是对七彩宏云服务平台的授权,用户确认其发表、上传的信息非独占性、永久性的授权, + 七彩宏云有权对用户发表的、上传的信息或作品在七彩宏云服务平台上使用,亦有权将该权利授于第三方使用。
+5. 我们会督促及要求应用市场内的其他第三方应用按照国家相关标准和要求为用户提供服务,并不得侵犯任何第三方知识 + 产权或国家法律法规,但若有上述行为,我司仅提供协助沟通的义务、不承担因上述侵权或违规而带来的任何后果。
+ +六、个人信息保护及授权
+1. 隐私政策:七彩宏云非常重视您的个人信息保护,在您使用七彩宏云提供的服务或产品时,您同意按照本协议及《隐私 + 政策》收集、存储、使用、披露和保护您的个人信息。
+2. 用户的账号、密码属于保密信息,七彩宏云应当采取积极的措施保护用户账号、密码的安全。
+3. 用户的注册信息作为七彩宏云的商业秘密进来保护。但用户同时明白,互联网的开放性以及技术更新非常快,非七彩宏 + 云可控制的因素导致用户信息泄漏的,七彩宏云不承担责任。
+4. 用户在使用七彩宏云服务时不可将自认为隐私的信息发表、上传至七彩宏云,也不可将该等信息通过七彩宏云的服务传 + 播给其他人,若用户的行为引起的隐私泄漏,由用户承担责任。
+5. 七彩宏云在提供服务时可能会搜集用户信息,七彩宏云会明确告知用户,通常信息仅限于用户姓名、性别、年龄、出生 + 日期、身份证号、家庭住址、教育程度、公司情况、所属行业、兴趣爱好等。
+6. 就下列相关事宜的发生,七彩宏云不承担任何法律责任:
+• 七彩宏云根据法律规定或相关政府、司法机关的要求提供您的个人信息;
+• 由于用户将用户密码告知他人或与他人共享注册账户,由此导致的任何个人信息的泄漏,或其他非因七彩宏云原因导致 + 的个人信息的泄漏;
+• 任何由于黑客攻击、电脑病毒侵入造成的信息泄漏;
+• 因不可抗力导致的信息泄漏;
+ + +七、期限、解除和终止
+1. 期限:本协议自您确认同意之日起生效并长期有效。
+2. 账户的注销:若您的通过七彩宏云所提供APP或网站进行注册的账号,您可通过七彩宏云所提供对应软件进行验证后自 + 行注销,终止本协议。若您使用的为七彩宏云所提供的设备产品超过保修期、报废等情况,您知晓并理解以下情况:
+• 注销账户或设备过保或设备报废后,您将放弃账户信息以及该账户内的已购买的课程或者会员卡使用权限,且七彩宏云
+ 无法为您恢复前述服务,这可能对您主张售后服务带来不便。 +• 您注销账户或设备过保或设备报废后,你的账号将无法再登录七彩宏云相关平台,无法在小程序和电脑端登录该账户
+3. 协议的终止或接解除后续事项的处理
+本协议终止或解除之日起,七彩宏云将关闭您在七彩宏云平台的账户权限。
+本协议终止或解除后,七彩宏云有权保留您的注册信息及交易行为记录等数据,但七彩宏云不承担在协议终止后向您或 + 第三方提供任何数据信息的义务,也不就协议终止向您或者任何第三方承担责任,但法律法规另有规定除外。
+ + +八、其他条款
+1. 议所有条款的标题仅为阅读方便,本身并无实际涵义,不能作为本协议涵义解释的依据。
+2. 本协议条款无论因何种原因部分无效或不可执行,其余条款仍有效,对双方具有约束力。
+ + + \ No newline at end of file diff --git a/app/src/main/java/com/jgyapp/market/activity/PrivacyPolicyActivity.java b/app/src/main/java/com/jgyapp/market/activity/PrivacyPolicyActivity.java new file mode 100644 index 0000000..e44e2ab --- /dev/null +++ b/app/src/main/java/com/jgyapp/market/activity/PrivacyPolicyActivity.java @@ -0,0 +1,98 @@ +package com.jgyapp.market.activity; + +import android.util.Log; +import android.view.View; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.widget.TextView; + +import com.jgyapp.market.R; +import com.jgyapp.market.base.BaseActivity; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +public class PrivacyPolicyActivity extends BaseActivity { + private WebView webView; + private TextView tv_content; + + @Override + public int setLayoutResourceID() { + return R.layout.activity_privacypolicy; + } + + + @Override + public void initView() { + webView = findViewById(R.id.webView); +// tv_content = findViewById(R.id.tv_content); + } + + @Override + public void initData() { + initWebView(); + webView.loadDataWithBaseURL(null, readAsset("privacy_policy.html"), "text/html", "UTF-8", null); +// tv_content.setText(readAsset("应用市场-隐私政策.txt")); + } + + @Override + protected void setListener() { + + } + + private void initWebView() { + WebSettings webSettings = webView.getSettings(); + webSettings.setJavaScriptEnabled(true); + webSettings.setBlockNetworkImage(false); + //webSettings.setBuiltInZoomControls(true); + //webSettings.setSupportZoom(true); + webSettings.setUseWideViewPort(true); + webSettings.setLoadWithOverviewMode(true); + webSettings.setAllowFileAccess(true); + webSettings.setSupportMultipleWindows(true); + webSettings.setDomStorageEnabled(true); + webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); + webSettings.setTextZoom(100); + webSettings.setDefaultFontSize(20); //设置显示字体的大小 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + //控制webview不可点击 +// webView.setOnTouchListener(new View.OnTouchListener() { +// @Override +// public boolean onTouch(View v, MotionEvent event) { +// return true; +// } +// }); + webView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + return true; + } + }); + } + + public String readAsset(String fileName) { + try { + //获取文件中的字节 + InputStream inputStream = getResources().getAssets().open(fileName); + //将字节转换为字符 + InputStreamReader isReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); + //使用bufferReader去读取内容 + BufferedReader reader = new BufferedReader(isReader); + StringBuffer stringBuffer = new StringBuffer(); + String out = ""; + while ((out = reader.readLine()) != null) { + stringBuffer.append(out); + Log.e("TAG", "readAsset: " + out); + } + return stringBuffer.toString(); + } catch (IOException e) { + e.printStackTrace(); + return ""; + } + } +} diff --git a/app/src/main/java/com/jgyapp/market/activity/UserAgreementActivity.java b/app/src/main/java/com/jgyapp/market/activity/UserAgreementActivity.java new file mode 100644 index 0000000..69bd5ae --- /dev/null +++ b/app/src/main/java/com/jgyapp/market/activity/UserAgreementActivity.java @@ -0,0 +1,94 @@ +package com.jgyapp.market.activity; + +import android.util.Log; +import android.view.View; +import android.webkit.WebSettings; +import android.webkit.WebView; + +import com.jgyapp.market.R; +import com.jgyapp.market.base.BaseActivity; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +public class UserAgreementActivity extends BaseActivity { + private WebView webView; + + @Override + public int setLayoutResourceID() { + return R.layout.activity_useragreement; + } + + @Override + public void initView() { + webView = findViewById(R.id.webView); + + } + + @Override + public void initData() { + initWebView(); + webView.loadDataWithBaseURL(null, readAsset("user_agreement.html"), "text/html", "UTF-8", null); + } + + @Override + protected void setListener() { + + } + + private void initWebView() { + WebSettings webSettings = webView.getSettings(); + webSettings.setJavaScriptEnabled(true); + webSettings.setBlockNetworkImage(false); + //webSettings.setBuiltInZoomControls(true); + //webSettings.setSupportZoom(true); + webSettings.setUseWideViewPort(true); + webSettings.setLoadWithOverviewMode(true); + webSettings.setAllowFileAccess(true); + webSettings.setSupportMultipleWindows(true); + webSettings.setDomStorageEnabled(true); + webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); + webSettings.setTextZoom(100); + webSettings.setDefaultFontSize(20); //设置显示字体的大小 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + //控制webview不可点击 +// webView.setOnTouchListener(new View.OnTouchListener() { +// @Override +// public boolean onTouch(View v, MotionEvent event) { +// return true; +// } +// }); + webView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + return true; + } + }); + } + + public String readAsset(String fileName) { + try { + //获取文件中的字节 + InputStream inputStream = getResources().getAssets().open(fileName); + //将字节转换为字符 + InputStreamReader isReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); + //使用bufferReader去读取内容 + BufferedReader reader = new BufferedReader(isReader); + StringBuffer stringBuffer = new StringBuffer(); + String out = ""; + while ((out = reader.readLine()) != null) { + stringBuffer.append(out); + Log.e("TAG", "readAsset: " + out); + } + return stringBuffer.toString(); + } catch (IOException e) { + e.printStackTrace(); + return ""; + } + } +} diff --git a/app/src/main/java/com/jgyapp/market/base/BaseApplication.java b/app/src/main/java/com/jgyapp/market/base/BaseApplication.java index 2df4149..abd9167 100644 --- a/app/src/main/java/com/jgyapp/market/base/BaseApplication.java +++ b/app/src/main/java/com/jgyapp/market/base/BaseApplication.java @@ -100,6 +100,7 @@ public class BaseApplication extends Application { // ); registAppReceive(); NetInterfaceManager.init(this); + JGYUtils.hookWebView(); } private AppManagerReceiver mAppManagerReceiver; diff --git a/app/src/main/java/com/jgyapp/market/fragment/ManageFragment.java b/app/src/main/java/com/jgyapp/market/fragment/ManageFragment.java index 12a71a1..8c3812a 100644 --- a/app/src/main/java/com/jgyapp/market/fragment/ManageFragment.java +++ b/app/src/main/java/com/jgyapp/market/fragment/ManageFragment.java @@ -22,6 +22,8 @@ import com.jgyapp.market.BuildConfig; import com.jgyapp.market.R; import com.jgyapp.market.activity.DownloadManagerActivity; import com.jgyapp.market.activity.LocalManagerActivity; +import com.jgyapp.market.activity.PrivacyPolicyActivity; +import com.jgyapp.market.activity.UserAgreementActivity; import com.jgyapp.market.adapter.UpdateAppAdapter; import com.jgyapp.market.base.LazyLoadFragment; import com.jgyapp.market.bean.AppInfo; @@ -51,6 +53,8 @@ public class ManageFragment extends LazyLoadFragment { private UpdateAppAdapter adapter; private ConstraintLayout manage_cl_localapp, manage_cl_download; private Context mContext; + private TextView tv_pripolicy; + private TextView tv_useragreement; @Override public int getLayoutId() { @@ -62,6 +66,14 @@ public class ManageFragment extends LazyLoadFragment { manage_tv_updateNum = view.findViewById(R.id.manage_tv_updateNum); manage_tv_appNum = view.findViewById(R.id.manage_tv_appNum); tv_version = view.findViewById(R.id.tv_version); + tv_pripolicy = view.findViewById(R.id.tv_pripolicy); + tv_useragreement = view.findViewById(R.id.tv_useragreement); + tv_pripolicy.setOnClickListener(v -> { + startActivity(new Intent(getActivity(), PrivacyPolicyActivity.class)); + }); + tv_useragreement.setOnClickListener(v -> { + startActivity(new Intent(getActivity(), UserAgreementActivity.class)); + }); tv_version.setText("版本 " + BuildConfig.VERSION_NAME); manage_cl_localapp = view.findViewById(R.id.manage_cl_localapp); manage_cl_localapp.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/jgyapp/market/utils/JGYUtils.java b/app/src/main/java/com/jgyapp/market/utils/JGYUtils.java index 8470079..ecc7ddb 100644 --- a/app/src/main/java/com/jgyapp/market/utils/JGYUtils.java +++ b/app/src/main/java/com/jgyapp/market/utils/JGYUtils.java @@ -191,7 +191,7 @@ public class JGYUtils { return value; } - public void hookWebView() { + public static void hookWebView() { int sdkInt = Build.VERSION.SDK_INT; try { Class> factoryClass = Class.forName("android.webkit.WebViewFactory"); diff --git a/app/src/main/res/layout-land/fragment_manage.xml b/app/src/main/res/layout-land/fragment_manage.xml index 69418f4..9492d48 100644 --- a/app/src/main/res/layout-land/fragment_manage.xml +++ b/app/src/main/res/layout-land/fragment_manage.xml @@ -163,9 +163,31 @@ app:layout_constraintTop_toTopOf="parent" /> -