Compare commits
181 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2c674896ff | |||
| 3ce1f28ae6 | |||
| 5ef145ed47 | |||
| b478cd6812 | |||
| 7e86187132 | |||
| 58b7a9515f | |||
| 370b2122aa | |||
| c6f1a7d212 | |||
| c04e425550 | |||
| 19543d7d29 | |||
| 12af602066 | |||
| 000515cda7 | |||
| 645e5a94a6 | |||
| c2f69eb03d | |||
| 93a9c41bee | |||
| 02dffc6e22 | |||
| 2658b7ca93 | |||
| 8c3335a7bf | |||
| c0e7b8e3ee | |||
| 9ef3d65aa4 | |||
| 8d188d4798 | |||
| 7bfc84c156 | |||
| 18bc47efe1 | |||
| 4593952cc3 | |||
| 1d3e30f8d3 | |||
| 6fef655e44 | |||
| 552b81c558 | |||
| 6c9a4daf9b | |||
| fbc46c54c4 | |||
| bc7aaa8b08 | |||
| 95af9902e7 | |||
| f340a13212 | |||
| 3d8f17d641 | |||
| 68f7b0f20f | |||
| c3a3060b92 | |||
| c01b96298d | |||
| 26655da185 | |||
| 9d0345303a | |||
| 33d02a0b2e | |||
| f301ab694c | |||
| baa6c0db3c | |||
| d118f54bd3 | |||
| 4a7384d371 | |||
| 6a91b8ae0f | |||
| b5fddfbbd0 | |||
| cfa3ceaae7 | |||
| 7a8f75abfc | |||
| 3db70fcbbe | |||
| 7b74d9fe47 | |||
| 553c211f24 | |||
| 3b153f5967 | |||
| 926b2d070f | |||
| 3e37731d84 | |||
| 24b5b81279 | |||
| 0534294b82 | |||
| a314404b61 | |||
| 71b81b2255 | |||
| c8cb61436e | |||
| 1006bf25c1 | |||
| cb6f03231e | |||
| 8ee2308ee1 | |||
| 719dbeef76 | |||
| 4c34333956 | |||
| bff677d607 | |||
| ba1461c874 | |||
| 7a0e885444 | |||
| 72d4ab6db5 | |||
| dfd6b61123 | |||
| 352d7d032e | |||
| ae6ba7832d | |||
| 9d63a6d0c4 | |||
| e905fb366e | |||
| 27b325f7d9 | |||
| 5c2f8c60dd | |||
| 3ac5905994 | |||
| 0e460b0778 | |||
| 4eea5b99d6 | |||
| 34c60d09f6 | |||
| 48e1ee4e7b | |||
| 46863d09a2 | |||
| ade08dcbee | |||
| e9a381068e | |||
| f5a068937a | |||
| c2bc52e474 | |||
| cd4ce2aa6b | |||
| 257e82e825 | |||
| a705f0ec53 | |||
| 46699a05ce | |||
| 9fd1855daa | |||
| 9a96fffd18 | |||
| 00d6f5e4b1 | |||
| a3adb87a6a | |||
| d0c01f1873 | |||
| 725d0b217a | |||
| 1958c6aefb | |||
| 05be092d69 | |||
| 40fccea23a | |||
| a022526e7e | |||
| 765b4c3afa | |||
| f704a29b38 | |||
| 309bb98036 | |||
| bf7b0b0a82 | |||
| 98629c5e85 | |||
| 461acbd376 | |||
| e0b70b26f3 | |||
| 4a831f4cb9 | |||
| b58bbbe705 | |||
| dc186e2e6b | |||
| 44deb59624 | |||
| 886007eae5 | |||
| 27fc39cb70 | |||
| 5480caf44e | |||
| 877ecbaef1 | |||
| 434bfde292 | |||
| 40c55e716d | |||
| a448a974f1 | |||
| 1738fac5fd | |||
| 7b74318ca5 | |||
| 19e394abb8 | |||
| 6dabbe19dd | |||
| 7b95d991d4 | |||
| e286be7f1e | |||
| 4214c08e76 | |||
| 180c49f9d3 | |||
| ef040f68c7 | |||
| 65e098e1c8 | |||
| 3978ab95f4 | |||
| b134d077cf | |||
| d537cb2383 | |||
| dba866e5c9 | |||
| ce36dd4012 | |||
| ea2b9ef4df | |||
| 69fe3b3d76 | |||
| a34b101a05 | |||
| c134c4bf9e | |||
| b0fe7595da | |||
| 6a7ef44bdd | |||
| 633acb9236 | |||
| cf84205571 | |||
| 5aced2c03c | |||
| 6cfa949493 | |||
| 4131396117 | |||
| e5f8d959ed | |||
| 6f0c9e0b59 | |||
| dcfe3dee0e | |||
| 8348568ea7 | |||
| 1d5dece894 | |||
| 051e0751a5 | |||
| 64594c4457 | |||
| 5f19f55e03 | |||
| da6cfdc4e8 | |||
| c2274d6b6f | |||
| adbdc55bc4 | |||
| 165059ca2d | |||
| 6c1da15ae4 | |||
| ecf05bcd00 | |||
| 3baec32ff8 | |||
| cb95204fac | |||
| 89e05d1a29 | |||
| 41b940a8e9 | |||
| 3d8d612897 | |||
| b3297e3fcd | |||
| 9f00cab409 | |||
| e8a795f97b | |||
| c8c93cac6e | |||
| 96c233ebd0 | |||
| 36ef13b237 | |||
| f54fdd6016 | |||
| a43947077a | |||
| a863b7be13 | |||
| ab1ce8e179 | |||
| d391ab20b7 | |||
| 8403bc3a64 | |||
| 038e736eb1 | |||
| a215192175 | |||
| e68e47e132 | |||
| 72f9e8ed79 | |||
| 3a2c67152e | |||
| c4c499532a | |||
| d8f043ad71 | |||
| 1706ead392 |
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,5 +1,14 @@
|
||||
### Ver 3.1
|
||||
|
||||
### Ver 3.0
|
||||
* x
|
||||
* 升级账号系统(登录流程/用户信息相关/用户账号相关操作(评论,礼包...))
|
||||
* 新增收藏功能(文章/工具箱)
|
||||
* 删除用户相关的所有本地数据库
|
||||
* 重做总开服表
|
||||
* 重做首页插件化模块
|
||||
* 礼包重复领取机制改变(可重复领取的礼包,领取后立刻显示再领一个/再淘一个)
|
||||
* 游戏下载平台面板修改(加快弹出速度,不再读取本地平台图片)
|
||||
* 接入bugly(tinker)
|
||||
|
||||
### Ver 2.6
|
||||
* xx
|
||||
|
||||
47
README.md
47
README.md
@ -1,40 +1,65 @@
|
||||
# 光环助手Android客户端
|
||||
|
||||
### Sourceset/debug/release
|
||||
### sourcesets/debug/release
|
||||
|
||||
* https://developer.android.com/studio/build/build-variants.html#sourcesets
|
||||
|
||||
### 多渠道打包配置
|
||||
### APK打包配置
|
||||
|
||||
* 使用[ApkChannelPackage](https://github.com/ltlovezh/ApkChannelPackage)的方案
|
||||
* 正式打包命令:请使用./gradlew channelPubRelease打包渠道包
|
||||
* 打包命令,视情况使用:
|
||||
|
||||
> 打包Tinker基准包:`./scripts/tinker_release_base.sh`
|
||||
|
||||
> 以Tinker基准包打渠道包:`./scripts/tinker_release_channel.sh`
|
||||
|
||||
> 以Tinker基准包打补丁包:`./scripts/tinker_release_patch.sh`
|
||||
|
||||
### 混淆配置
|
||||
|
||||
* 配置文件:Android默认配置+proguard-rules.txt等
|
||||
* 参考libraries下每个项目独立的配置文件``proguard-project.txt``
|
||||
* 参考libraries下每个项目独立的配置文件`proguard-project.txt`
|
||||
|
||||
### apk大小优化
|
||||
|
||||
* 限制resConfig资源集
|
||||
* 开启ShrinkResources
|
||||
* 开启混淆,使用minifyEnabled(仅在release开启)
|
||||
* pngquant对png压缩、png/jpg->webp(未尝试)
|
||||
|
||||
### 第三方appkey等配置
|
||||
* 修改``gradle.properties``文件将各种key填入其中,实现统一管理
|
||||
|
||||
* 修改`gradle.properties`文件将各种key填入其中,实现统一管理
|
||||
* 通过gradle文件内的resValue/buildConfigField/manifestPlaceHolder方式实现编译期间修改,具体情况请参考``./build.gradle``和``./app/build.gradle``配置
|
||||
|
||||
### 拉取代码步骤
|
||||
|
||||
1. 拉取主项目代码: `git clone -b dev git@gitlab.ghzhushou.com:halo/assistant-android.git`
|
||||
2. 初始化公用类库: `bash ./scripts/init_submodules.sh`
|
||||
2. 初始化公用类库: `bash ./scripts/submodules_init.sh`
|
||||
|
||||
### submodule管理方式(只拉取master)
|
||||
|
||||
* 提交代码,需要cd到submodule文件夹去做修改
|
||||
|
||||
|
||||
* 更新远端代码,`bash ./scripts/submodules_update.sh`
|
||||
|
||||
### TODO
|
||||
|
||||
* GSON 序列化用统一的一个, GsonUtil fromJson
|
||||
* CleanApkAdapter 转化字符串size工具函数 比如SpeedUtils
|
||||
* getString 解决 字符串hardcode问题
|
||||
* Adapter 里面clicklistener 用接口传参将点击操作委托给controller
|
||||
* Adapter ViewHolder的功能,部分重写到ViewHolder类本身
|
||||
* ~~Adapter 里面clicklistener 用接口传参将点击操作委托给controller~~
|
||||
* ~~Adapter ViewHolder的功能,部分重写到ViewHolder类本身~~
|
||||
|
||||
* activity 统一入口未完成(外部入口相关)
|
||||
* ~~activity 统一入口未完成(外部入口相关),去除多余activity使用,统一toolbar~~
|
||||
* release / debug compile不同的类库,不需要再做什么开关
|
||||
|
||||
* ~~Toolbar分离,有图形按钮/没有图形按钮~~
|
||||
|
||||
### TODO Since 3.1
|
||||
|
||||
- 解决 Utils 工具类引发的内存泄漏问题
|
||||
- 把原有 EventBus 的消息 Type 统一到一个文件内
|
||||
- 明确 MVVM 中 Repository 及其衍生类的具体实现方式
|
||||
- 将实现细节从 View(Fragment、Activity) 剥离并以 MVVM 结构改造
|
||||
- 将 ListViewModel 所对应的 ListRepository 合并到 ListViewModel 中
|
||||
- 依照光环助手界面功能以大模块 - 小模块的方式去修改包结构,包内文件建议以包名摘要作为前缀
|
||||
115
app/build.gradle
115
app/build.gradle
@ -10,8 +10,8 @@ apply from: 'tinker-support.gradle'
|
||||
android {
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
dexOptions {
|
||||
@ -100,12 +100,15 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions "nonsense"
|
||||
|
||||
/**
|
||||
* 多渠道打包,渠道请参考"channel.txt"文件,所有渠道值均通过java code设置
|
||||
*/
|
||||
productFlavors {
|
||||
// publish release host
|
||||
publish {
|
||||
dimension "nonsense"
|
||||
buildConfigField "String", "API_HOST", "\"${API_HOST}\""
|
||||
buildConfigField "String", "USER_HOST", "\"${USER_HOST}\""
|
||||
buildConfigField "String", "COMMENT_HOST", "\"${COMMENT_HOST}\""
|
||||
@ -121,6 +124,7 @@ android {
|
||||
}
|
||||
// internal test dev host
|
||||
internal {
|
||||
dimension "nonsense"
|
||||
buildConfigField "String", "API_HOST", "\"${DEV_API_HOST}\""
|
||||
buildConfigField "String", "USER_HOST", "\"${DEV_USER_HOST}\""
|
||||
buildConfigField "String", "COMMENT_HOST", "\"${DEV_COMMENT_HOST}\""
|
||||
@ -161,81 +165,90 @@ rebuildChannel {
|
||||
|
||||
dependencies {
|
||||
|
||||
compile fileTree(include: '*.jar', dir: 'libs')
|
||||
implementation fileTree(include: '*.jar', dir: 'libs')
|
||||
|
||||
debugCompile "com.squareup.leakcanary:leakcanary-android:${leakcanary}"
|
||||
debugCompile "com.facebook.stetho:stetho:${stetho}"
|
||||
debugCompile "com.facebook.stetho:stetho-okhttp3:${stetho}"
|
||||
debugCompile "com.squareup.okhttp3:logging-interceptor:${okHttp}"
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:${leakcanary}"
|
||||
debugImplementation "com.facebook.stetho:stetho:${stetho}"
|
||||
debugImplementation "com.facebook.stetho:stetho-okhttp3:${stetho}"
|
||||
debugImplementation "com.squareup.okhttp3:logging-interceptor:${okHttp}"
|
||||
|
||||
compile "com.android.support:multidex:${multidex}"
|
||||
compile "com.android.support:design:${androidSupport}"
|
||||
compile "com.android.support:support-v4:${androidSupport}"
|
||||
compile "com.android.support:appcompat-v7:${androidSupport}"
|
||||
compile "com.android.support:support-annotations:${androidSupport}"
|
||||
compile "com.android.support:percent:${androidSupport}"
|
||||
implementation "com.android.support:multidex:${multidex}"
|
||||
implementation "com.android.support:design:${androidSupport}"
|
||||
implementation "com.android.support:support-v4:${androidSupport}"
|
||||
implementation "com.android.support:appcompat-v7:${androidSupport}"
|
||||
implementation "com.android.support:support-annotations:${androidSupport}"
|
||||
implementation "com.android.support:percent:${androidSupport}"
|
||||
implementation "com.android.support.constraint:constraint-layout:${constraintLayout}"
|
||||
implementation "com.kyleduo.switchbutton:library:${switchButton}"
|
||||
implementation "com.readystatesoftware.systembartint:systembartint:${systemBarTint}"
|
||||
|
||||
compile "com.kyleduo.switchbutton:library:${switchButton}"
|
||||
compile "com.readystatesoftware.systembartint:systembartint:${systemBarTint}"
|
||||
implementation "com.facebook.fresco:fresco:${fresco}"
|
||||
implementation "com.facebook.fresco:animated-gif:${fresco}"
|
||||
|
||||
compile "com.facebook.fresco:fresco:${fresco}"
|
||||
compile "com.facebook.fresco:animated-gif:${fresco}"
|
||||
implementation "com.squareup.okhttp3:okhttp:${okHttp}"
|
||||
|
||||
compile "com.squareup.okhttp3:okhttp:${okHttp}"
|
||||
implementation "com.leon.channel:helper:${apkChannelPackage}"
|
||||
|
||||
compile "com.leon.channel:helper:${apkChannelPackage}"
|
||||
implementation "com.squareup.retrofit2:retrofit:${retrofit}"
|
||||
implementation "com.squareup.retrofit2:converter-gson:${retrofit}" // include gson 2.7
|
||||
implementation "com.squareup.retrofit2:adapter-rxjava:${retrofit}"
|
||||
// implementation "com.google.code.gson:gson:${gson}"
|
||||
|
||||
compile "com.squareup.retrofit2:retrofit:${retrofit}"
|
||||
compile "com.squareup.retrofit2:converter-gson:${retrofit}" // include gson 2.7
|
||||
compile "com.squareup.retrofit2:adapter-rxjava:${retrofit}"
|
||||
// compile "com.google.code.gson:gson:${gson}"
|
||||
implementation "com.j256.ormlite:ormlite-android:${ormlite}"
|
||||
implementation "com.j256.ormlite:ormlite-core:${ormlite}"
|
||||
|
||||
compile "com.j256.ormlite:ormlite-android:${ormlite}"
|
||||
compile "com.j256.ormlite:ormlite-core:${ormlite}"
|
||||
|
||||
compile "com.jakewharton:butterknife:${butterKnife}"
|
||||
implementation "com.jakewharton:butterknife:${butterKnife}"
|
||||
annotationProcessor "com.jakewharton:butterknife-compiler:${butterKnife}"
|
||||
|
||||
compile "org.greenrobot:eventbus:${eventbus}"
|
||||
implementation "org.greenrobot:eventbus:${eventbus}"
|
||||
annotationProcessor "org.greenrobot:eventbus-annotation-processor:${eventbusApt}"
|
||||
|
||||
compile "io.reactivex:rxjava:${rxJava}"
|
||||
compile "io.reactivex:rxandroid:${rxAndroid}"
|
||||
compile "com.jakewharton.rxbinding:rxbinding:${rxBinding}"
|
||||
implementation "io.reactivex:rxjava:${rxJava}"
|
||||
implementation "io.reactivex:rxandroid:${rxAndroid}"
|
||||
implementation "com.jakewharton.rxbinding:rxbinding:${rxBinding}"
|
||||
|
||||
//TODO update to rx 2.x
|
||||
// compile "io.reactivex.rxjava2:rxjava:${rxJava2}"
|
||||
// compile "io.reactivex.rxjava2:rxandroid:${rxAndroid2}"
|
||||
// compile "com.jakewharton.rxbinding2:rxbinding:${rxBinding2}"
|
||||
// implementation "io.reactivex.rxjava2:rxjava:${rxJava2}"
|
||||
// implementation "io.reactivex.rxjava2:rxandroid:${rxAndroid2}"
|
||||
// implementation "com.jakewharton.rxbinding2:rxbinding:${rxBinding2}"
|
||||
|
||||
compile "com.google.zxing:core:${zxing}"
|
||||
compile "com.google.zxing:android-core:${zxing}"
|
||||
implementation "com.google.zxing:core:${zxing}"
|
||||
implementation "com.google.zxing:android-core:${zxing}"
|
||||
|
||||
compile "com.daimajia.swipelayout:library:${swipeLayout}"
|
||||
compile("cn.trinea.android.view.autoscrollviewpager:android-auto-scroll-view-pager:${autoScrollViewPager}") {
|
||||
implementation "com.daimajia.swipelayout:library:${swipeLayout}"
|
||||
implementation("cn.trinea.android.view.autoscrollviewpager:android-auto-scroll-view-pager:${autoScrollViewPager}") {
|
||||
exclude module: 'support-v4'
|
||||
}
|
||||
|
||||
compile "com.sina.weibo.sdk:core:${weiboSDK}"
|
||||
implementation "com.sina.weibo.sdk:core:${weiboSDK}"
|
||||
|
||||
// bugly with tinker support
|
||||
compile "com.tencent.bugly:crashreport_upgrade:${buglyTinkerSupport}"
|
||||
implementation "com.tencent.bugly:crashreport_upgrade:${buglyTinkerSupport}"
|
||||
|
||||
compile "pub.devrel:easypermissions:${easypermissions}"
|
||||
implementation "pub.devrel:easypermissions:${easypermissions}"
|
||||
// mvvm
|
||||
implementation "android.arch.lifecycle:runtime:${archLifecycleVersion}"
|
||||
annotationProcessor "android.arch.lifecycle:compiler:${archLifecycleVersion}"
|
||||
implementation "android.arch.lifecycle:extensions:${archLifecycleVersion}"
|
||||
implementation "android.arch.persistence.room:runtime:${archRoomVersion}"
|
||||
annotationProcessor "android.arch.persistence.room:compiler:${archRoomVersion}"
|
||||
|
||||
compile project(':libraries:LGLibrary')
|
||||
compile project(':libraries:MiPush')
|
||||
compile project(':libraries:MTA')
|
||||
compile project(':libraries:QQShare')
|
||||
compile project(':libraries:TalkingData')
|
||||
compile project(':libraries:UmengPush')
|
||||
compile project(':libraries:WechatShare')
|
||||
compile project(':libraries:iosched')
|
||||
implementation 'com.google.android:flexbox:0.2.2'
|
||||
|
||||
implementation project(':libraries:LGLibrary')
|
||||
implementation project(':libraries:MTA')
|
||||
implementation project(':libraries:QQShare')
|
||||
implementation project(':libraries:TalkingData')
|
||||
implementation project(':libraries:UmengPush')
|
||||
implementation project(':libraries:WechatShare')
|
||||
implementation project(':libraries:iosched')
|
||||
implementation project(':libraries:LogHub')
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
|
||||
}
|
||||
File propFile = file('sign.properties');
|
||||
File propFile = file('sign.properties')
|
||||
if (propFile.exists()) {
|
||||
def Properties props = new Properties()
|
||||
Properties props = new Properties()
|
||||
props.load(new FileInputStream(propFile))
|
||||
|
||||
if (props.containsKey('keyAlias') && props.containsKey('keyPassword') &&
|
||||
|
||||
@ -140,6 +140,7 @@
|
||||
-keep class com.gh.common.view.** {*;}
|
||||
-keep class com.gh.gamecenter.db.info.** {*;}
|
||||
-keep class com.gh.gamecenter.entity.** {*;}
|
||||
-keep class com.gh.gamecenter.ask.entity.** {*;}
|
||||
-keep class com.gh.gamecenter.retrofit.** {*;}
|
||||
-keep class com.gh.gamecenter.eventbus.** {*;}
|
||||
-keep class * extends rx.Subscriber
|
||||
@ -181,6 +182,11 @@
|
||||
-dontwarn com.tencent.bugly.**
|
||||
-keep public class com.tencent.bugly.**{*;}
|
||||
|
||||
# easypermission
|
||||
-keepclassmembers class * {
|
||||
@pub.devrel.easypermissions.AfterPermissionGranted <methods>;
|
||||
}
|
||||
|
||||
# 重命名文件为SourceFile,再配合mapping符号表,可以拿到真实的类名
|
||||
-renamesourcefileattribute SourceFile
|
||||
# 保留源文件行号
|
||||
|
||||
208
app/src/debug/java/com/gh/gamecenter/DataUtils.java
Normal file
208
app/src/debug/java/com/gh/gamecenter/DataUtils.java
Normal file
@ -0,0 +1,208 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.util.PackageUtils;
|
||||
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;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Created by LGT on 2016/6/15.
|
||||
* 数据收集 工具类 (TalkingData、MTA)
|
||||
*/
|
||||
public class DataUtils {
|
||||
|
||||
public static final boolean DEBUG = true;
|
||||
|
||||
/**
|
||||
* 初始化各种统计工具,仅在release build(非debug)模式启用统计
|
||||
*
|
||||
* @param context
|
||||
* @param channel
|
||||
*/
|
||||
public static void init(final Application context, String channel) {
|
||||
|
||||
// 神烦这些SDK上报,debug就不开了
|
||||
if (!DEBUG) 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();
|
||||
}
|
||||
|
||||
//MTA
|
||||
try {
|
||||
/**
|
||||
*
|
||||
* 不要启用!!!!全部由{@link com.gh.base.AppUncaughtHandler}处理
|
||||
*/
|
||||
StatConfig.setAutoExceptionCaught(false);
|
||||
|
||||
StatCrashReporter crashReporter = StatCrashReporter.getStatCrashReporter(context);
|
||||
crashReporter.setJavaCrashHandlerStatus(false);
|
||||
// crashReporter.setEnableInstantReporting(true);
|
||||
|
||||
StatConfig.setDebugEnable(DEBUG);
|
||||
|
||||
// 设置数据上报策略
|
||||
if (DEBUG) {
|
||||
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.getPatchVersionName());
|
||||
|
||||
// 开启收集服务
|
||||
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, "GH_TEST".equals(channel));
|
||||
|
||||
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context);
|
||||
strategy.setEnableANRCrashMonitor(false);
|
||||
strategy.setEnableNativeCrashMonitor(false);
|
||||
strategy.setAppChannel(channel);
|
||||
strategy.setAppVersion(PackageUtils.getPatchVersionName());
|
||||
|
||||
CrashReport.initCrashReport(context, Config.BUGLY_APPID, DEBUG, strategy);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
// Logger.setLogger(context, new LoggerInterface() {
|
||||
//
|
||||
// @Override
|
||||
// public void setTag(String tag) {
|
||||
// CommonDebug.logMethodWithParams(this, tag);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void log(String content) {
|
||||
// CommonDebug.logMethodWithParams(this, content);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void log(String content, Throwable t) {
|
||||
// CommonDebug.logMethodWithParams(this, content, t);
|
||||
// }
|
||||
// });
|
||||
|
||||
}
|
||||
|
||||
public static void onEvent(Context var0, String var1, String var2) {
|
||||
TCAgent.onEvent(var0, var1, var2);
|
||||
StatService.trackCustomEvent(var0, var1, var2);
|
||||
}
|
||||
|
||||
public static void onPause(Activity var0) {
|
||||
TCAgent.onPageEnd(var0, var0.getClass().getSimpleName());
|
||||
StatService.onPause(var0);
|
||||
}
|
||||
|
||||
public static void onResume(Activity var0) {
|
||||
TCAgent.onPageStart(var0, var0.getClass().getSimpleName());
|
||||
StatService.onResume(var0);
|
||||
}
|
||||
|
||||
// 游戏启动
|
||||
public static void onGameLaunchEvent(Context context, String gameName, String platform, String page) {
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("版本", platform);
|
||||
kv.put("页面", page);
|
||||
onEvent(context, "游戏启动", gameName, kv);
|
||||
}
|
||||
|
||||
public static void onEvent(Context var0, String var1, String var2, Map<String, Object> var3) {
|
||||
TCAgent.onEvent(var0, var1, var2, var3);
|
||||
Properties prop = new Properties();
|
||||
prop.setProperty("label", var2);
|
||||
for (String key : var3.keySet()) {
|
||||
prop.setProperty(key, var3.get(key) + "");
|
||||
}
|
||||
StatService.trackCustomKVEvent(var0, var1, prop);
|
||||
}
|
||||
|
||||
// 游戏下载
|
||||
public static void onGameDownloadEvent(Context context, String gameName, String platform, String entrance, String status) {
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("版本", platform);
|
||||
kv.put("状态", status);
|
||||
onEvent(context, "游戏下载", gameName, kv);
|
||||
|
||||
Map<String, Object> kv2 = new HashMap<>();
|
||||
kv2.put("版本", platform);
|
||||
kv2.put("状态", status);
|
||||
kv2.put("位置", entrance);
|
||||
onEvent(context, "游戏下载位置", gameName, kv2);
|
||||
|
||||
Map<String, Object> kv3 = new HashMap<>();
|
||||
kv3.put(entrance, "下载数");
|
||||
kv3.put(entrance, status);
|
||||
onEvent(context, "应用数据", gameName, kv3);
|
||||
}
|
||||
|
||||
// 游戏更新
|
||||
public static void onGameUpdateEvent(Context context, String gameName, String paltform, String status) {
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("版本", paltform);
|
||||
kv.put("状态", status);
|
||||
onEvent(context, "游戏更新", gameName, kv);
|
||||
}
|
||||
|
||||
public static void onError(Context context, Throwable throwable) {
|
||||
// MTA主动上传错误
|
||||
try {
|
||||
StatService.reportException(context, throwable);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
// //bugly 作为默认处理异常的类库,已经上报了,此处不重复上报
|
||||
// try {
|
||||
// CrashReport.postCatchedException(throwable);
|
||||
// } catch (Exception e) {
|
||||
// }
|
||||
|
||||
//talkingdata
|
||||
try {
|
||||
TCAgent.onError(context, throwable);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -4,7 +4,6 @@ import android.app.Application;
|
||||
|
||||
import com.facebook.stetho.Stetho;
|
||||
import com.facebook.stetho.okhttp3.StethoInterceptor;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.squareup.leakcanary.LeakCanary;
|
||||
|
||||
import okhttp3.OkHttpClient;
|
||||
@ -35,33 +34,11 @@ public class Injection {
|
||||
}
|
||||
|
||||
public static OkHttpClient.Builder provideRetrofitBuilder() {
|
||||
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
|
||||
|
||||
@Override
|
||||
public void log(String message) {
|
||||
//分段打印retrofit日志
|
||||
if (message.startsWith("{") || message.startsWith("["))
|
||||
if (message.length() > 4000) {
|
||||
for (int i = 0; i < message.length(); i += 4000) {
|
||||
if (i + 4000 < message.length())
|
||||
Utils.log("OkHttp_Body::" + i, message.substring(i, i + 4000));
|
||||
else
|
||||
Utils.log("OkHttp_Body::" + i, message.substring(i, message.length()));
|
||||
}
|
||||
} else
|
||||
Utils.log("OkHttp_Body::", message);
|
||||
}
|
||||
});
|
||||
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
|
||||
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
|
||||
interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
|
||||
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
|
||||
builder.addNetworkInterceptor(interceptor);
|
||||
builder.addNetworkInterceptor(new StethoInterceptor());
|
||||
if (BuildConfig.DEBUG) {
|
||||
builder.addNetworkInterceptor(loggingInterceptor);
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
|
||||
@ -74,6 +74,7 @@
|
||||
|
||||
<category android:name = "android.intent.category.LAUNCHER" />
|
||||
</intent-filter >
|
||||
|
||||
</activity >
|
||||
|
||||
<activity
|
||||
@ -87,9 +88,9 @@
|
||||
android:launchMode = "singleTask"
|
||||
android:screenOrientation = "portrait" />
|
||||
|
||||
<!--android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" 退出时屏幕抖动 -->
|
||||
<activity
|
||||
android:name = "com.gh.gamecenter.ViewImageActivity"
|
||||
android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" />
|
||||
android:name = "com.gh.gamecenter.ViewImageActivity" />
|
||||
<activity
|
||||
android:name = "com.gh.gamecenter.SearchActivity"
|
||||
android:configChanges = "keyboardHidden"
|
||||
@ -229,6 +230,20 @@
|
||||
android:name = "com.gh.gamecenter.NormalActivity"
|
||||
android:screenOrientation = "portrait" />
|
||||
|
||||
<activity
|
||||
android:name = "com.gh.gamecenter.QuestionsDetailActivity"
|
||||
android:screenOrientation = "portrait" />
|
||||
|
||||
<activity
|
||||
android:name = "com.gh.gamecenter.AskSearchActivity"
|
||||
android:screenOrientation = "portrait" />
|
||||
|
||||
<!-- 使用小米/华为推送弹窗功能提高推送成功率-->
|
||||
<activity
|
||||
android:name = "com.gh.gamecenter.PushProxyActivity"
|
||||
android:exported = "true"
|
||||
android:theme = "@android:style/Theme.Translucent" />
|
||||
|
||||
<activity
|
||||
android:name = "com.gh.gamecenter.SkipActivity"
|
||||
android:theme = "@style/Theme.AppCompat.Light.Fullscreen.Transparent" >
|
||||
@ -254,13 +269,7 @@
|
||||
<data android:scheme = "package" />
|
||||
</intent-filter >
|
||||
</receiver >
|
||||
<receiver
|
||||
android:name = "com.gh.gamecenter.receiver.NotificationReceiver"
|
||||
android:exported = "false" >
|
||||
<intent-filter >
|
||||
<action android:name = "com.gh.gamecenter.NOTIFICATION" />
|
||||
</intent-filter >
|
||||
</receiver >
|
||||
|
||||
<receiver
|
||||
android:name = "com.gh.gamecenter.receiver.DownloadReceiver"
|
||||
android:exported = "false" >
|
||||
|
||||
24
app/src/main/assets/content.js
Normal file
24
app/src/main/assets/content.js
Normal file
@ -0,0 +1,24 @@
|
||||
function requestContentFocus() {
|
||||
$('#editor').focus();
|
||||
}
|
||||
|
||||
function setupWhenContentEditable() {
|
||||
var editor = $('#editor');
|
||||
if (!editor[0].hasAttribute('contenteditable')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// paste 回调只会获取粘贴之前的光标位置,需要自己手动加上粘贴文本的长度,并保证粘贴的是纯文本
|
||||
editor.on('paste', function(e) {
|
||||
e.preventDefault();
|
||||
var text = (e.originalEvent || e).clipboardData.getData('text/plain');
|
||||
text = text.replace(/\n/g, '<br>');
|
||||
document.execCommand("insertHTML", false, text);
|
||||
});
|
||||
|
||||
requestContentFocus();
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
setupWhenContentEditable();
|
||||
});
|
||||
15
app/src/main/assets/editor.html
Normal file
15
app/src/main/assets/editor.html
Normal file
@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="user-scalable=no">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" type="text/css" href="normalize.css">
|
||||
<link rel="stylesheet" type="text/css" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="editor" contenteditable="true"></div>
|
||||
<script type="text/javascript" src="zepto.min.js"></script>
|
||||
<script type="text/javascript" src="rich_editor.js"></script>
|
||||
<script type="text/javascript" src="content.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
413
app/src/main/assets/normalize.css
vendored
Normal file
413
app/src/main/assets/normalize.css
vendored
Normal file
@ -0,0 +1,413 @@
|
||||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
392
app/src/main/assets/rich_editor.js
Normal file
392
app/src/main/assets/rich_editor.js
Normal file
@ -0,0 +1,392 @@
|
||||
/**
|
||||
* Copyright (C) 2017 Wasabeef
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
var RE = {};
|
||||
|
||||
RE.currentSelection = {
|
||||
"startContainer": 0,
|
||||
"startOffset": 0,
|
||||
"endContainer": 0,
|
||||
"endOffset": 0};
|
||||
|
||||
RE.editor = document.getElementById('editor');
|
||||
|
||||
document.addEventListener("selectionchange", function() { RE.backuprange(); });
|
||||
|
||||
// Initializations
|
||||
RE.callback = function() {
|
||||
window.location.href = "re-callback://" + encodeURI(RE.getHtml());
|
||||
}
|
||||
|
||||
RE.setHtml = function(contents) {
|
||||
RE.editor.innerHTML = decodeURIComponent(contents.replace(/\+/g, '%20'));
|
||||
}
|
||||
|
||||
RE.getHtml = function() {
|
||||
return RE.editor.innerHTML;
|
||||
}
|
||||
|
||||
RE.getText = function() {
|
||||
return RE.editor.innerText;
|
||||
}
|
||||
|
||||
RE.setBaseTextColor = function(color) {
|
||||
RE.editor.style.color = color;
|
||||
}
|
||||
|
||||
RE.setBaseFontSize = function(size) {
|
||||
RE.editor.style.fontSize = size;
|
||||
}
|
||||
|
||||
RE.setPadding = function(left, top, right, bottom) {
|
||||
RE.editor.style.paddingLeft = left;
|
||||
RE.editor.style.paddingTop = top;
|
||||
RE.editor.style.paddingRight = right;
|
||||
RE.editor.style.paddingBottom = bottom;
|
||||
}
|
||||
|
||||
RE.setBackgroundColor = function(color) {
|
||||
document.body.style.backgroundColor = color;
|
||||
}
|
||||
|
||||
RE.setBackgroundImage = function(image) {
|
||||
RE.editor.style.backgroundImage = image;
|
||||
}
|
||||
|
||||
RE.setWidth = function(size) {
|
||||
RE.editor.style.minWidth = size;
|
||||
}
|
||||
|
||||
RE.setHeight = function(size) {
|
||||
RE.editor.style.height = size;
|
||||
}
|
||||
|
||||
RE.setTextAlign = function(align) {
|
||||
RE.editor.style.textAlign = align;
|
||||
}
|
||||
|
||||
RE.setVerticalAlign = function(align) {
|
||||
RE.editor.style.verticalAlign = align;
|
||||
}
|
||||
|
||||
RE.setPlaceholder = function(placeholder) {
|
||||
RE.editor.setAttribute("placeholder", placeholder);
|
||||
}
|
||||
|
||||
RE.setEditorFocus = function() {
|
||||
RE.editor.focus();
|
||||
}
|
||||
|
||||
RE.setInputEnabled = function(inputEnabled) {
|
||||
RE.editor.contentEditable = String(inputEnabled);
|
||||
}
|
||||
|
||||
RE.setFocusByEnd = function() {
|
||||
//alert("111111")
|
||||
// var txt =RE.editor.createTextRange();
|
||||
// ("22222")
|
||||
// txt.moveStart('character',-1);
|
||||
// ("333333")
|
||||
// txt.collapse(true);
|
||||
// ("444444")
|
||||
// txt.select();
|
||||
// alert("ddddddd")
|
||||
}
|
||||
|
||||
RE.undo = function() {
|
||||
document.execCommand('undo', false, null);
|
||||
}
|
||||
|
||||
RE.redo = function() {
|
||||
document.execCommand('redo', false, null);
|
||||
}
|
||||
|
||||
RE.setBold = function() {
|
||||
document.execCommand('bold', false, null);
|
||||
}
|
||||
|
||||
RE.setItalic = function() {
|
||||
document.execCommand('italic', false, null);
|
||||
}
|
||||
|
||||
RE.setSubscript = function() {
|
||||
document.execCommand('subscript', false, null);
|
||||
}
|
||||
|
||||
RE.setSuperscript = function() {
|
||||
document.execCommand('superscript', false, null);
|
||||
}
|
||||
|
||||
RE.setStrikeThrough = function() {
|
||||
document.execCommand('strikeThrough', false, null);
|
||||
}
|
||||
|
||||
RE.setUnderline = function() {
|
||||
document.execCommand('underline', false, null);
|
||||
}
|
||||
|
||||
RE.setBullets = function() {
|
||||
document.execCommand('insertUnorderedList', false, null);
|
||||
}
|
||||
|
||||
RE.setNumbers = function() {
|
||||
document.execCommand('insertOrderedList', false, null);
|
||||
}
|
||||
|
||||
RE.setTextColor = function(color) {
|
||||
RE.restorerange();
|
||||
document.execCommand("styleWithCSS", null, true);
|
||||
document.execCommand('foreColor', false, color);
|
||||
document.execCommand("styleWithCSS", null, false);
|
||||
}
|
||||
|
||||
RE.setTextBackgroundColor = function(color) {
|
||||
RE.restorerange();
|
||||
document.execCommand("styleWithCSS", null, true);
|
||||
document.execCommand('hiliteColor', false, color);
|
||||
document.execCommand("styleWithCSS", null, false);
|
||||
}
|
||||
|
||||
RE.setFontSize = function(fontSize){
|
||||
document.execCommand("fontSize", false, fontSize);
|
||||
}
|
||||
|
||||
RE.setHeading = function(heading) {
|
||||
document.execCommand('formatBlock', false, '<h'+heading+'>');
|
||||
}
|
||||
|
||||
RE.setIndent = function() {
|
||||
document.execCommand('indent', false, null);
|
||||
}
|
||||
|
||||
RE.setOutdent = function() {
|
||||
document.execCommand('outdent', false, null);
|
||||
}
|
||||
|
||||
RE.setJustifyLeft = function() {
|
||||
document.execCommand('justifyLeft', false, null);
|
||||
}
|
||||
|
||||
RE.setJustifyCenter = function() {
|
||||
document.execCommand('justifyCenter', false, null);
|
||||
}
|
||||
|
||||
RE.setJustifyRight = function() {
|
||||
document.execCommand('justifyRight', false, null);
|
||||
}
|
||||
|
||||
RE.setBlockquote = function() {
|
||||
document.execCommand('formatBlock', false, '<blockquote>');
|
||||
}
|
||||
|
||||
RE.insertImage = function(url) {
|
||||
var html = "<div><img src =\"" + url + "\" style=\" max-width: 100%; display:block; margin:8px auto; height: auto;\"></div>"
|
||||
RE.insertHTML(html);
|
||||
}
|
||||
|
||||
RE.replaceTbImage = function() {
|
||||
var imgs = document.getElementsByTagName("img");
|
||||
for (var i = 0; i < imgs.length; i++) {
|
||||
var img = imgs[i];
|
||||
if(img.src.indexOf("/tb/") > 0) continue;
|
||||
var imgArr = img.src.split("/");
|
||||
var tbImg = ""
|
||||
for (var j = 0; j < imgArr.length; j++) {
|
||||
if (j == imgArr.length - 1) {
|
||||
tbImg += "tb/" + imgArr[j];
|
||||
} else {
|
||||
tbImg += imgArr[j] + "/";
|
||||
}
|
||||
}
|
||||
img.style.cssText = "max-width: 30%; display:block; margin:8px auto; height: auto;"
|
||||
img.src = tbImg;
|
||||
|
||||
if (i == 0) {
|
||||
var bigImg = document.createElement('img');
|
||||
bigImg.src = "file:///android_asset/web_load_dfimg_icon.png";
|
||||
bigImg.style.cssText = "max-width: 20%; margin:8px 0 0 0; height: auto;"
|
||||
img.parentNode.insertBefore(bigImg, img.parentNode.childNodes[0]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RE.replaceAllDfImage = function() {
|
||||
var imgs = document.getElementsByTagName("img");
|
||||
for (var i = 0; i < imgs.length; i++) {
|
||||
var img = imgs[i];
|
||||
if(img.src.indexOf("web_load_dfimg_icon") > 0) {
|
||||
img.parentNode.removeChild(img.parentNode.childNodes[0]);
|
||||
i--;
|
||||
} else {
|
||||
img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;"
|
||||
img.src = img.src.replace("/tb/", "/");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
RE.replaceDfImageByUrl = function(imgUrl) {
|
||||
var imgs = document.getElementsByTagName("img");
|
||||
for (var i = 0; i < imgs.length; i++) {
|
||||
var img = imgs[i];
|
||||
if (img.src == imgUrl) {
|
||||
img.style.cssText = "max-width: 100%; display:block; margin:8px auto; height: auto;"
|
||||
img.src = img.src.replace("/tb/", "/");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RE.ImageClickListener = function() {
|
||||
var imgs = document.getElementsByTagName("img");
|
||||
for (var i = 0; i < imgs.length; i++) {
|
||||
var img = imgs[i];
|
||||
window.imagelistener.imageArr(img.src);
|
||||
img.onclick = function() {
|
||||
window.imagelistener.imageClick(this.src);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RE.insertHTML = function(html) {
|
||||
RE.restorerange();
|
||||
document.execCommand('insertHTML', false, html);
|
||||
}
|
||||
|
||||
RE.insertLink = function(url, title) {
|
||||
RE.restorerange();
|
||||
var sel = document.getSelection();
|
||||
if (sel.toString().length == 0) {
|
||||
document.execCommand("insertHTML",false,"<a href='"+url+"'>"+title+"</a>");
|
||||
} else if (sel.rangeCount) {
|
||||
var el = document.createElement("a");
|
||||
el.setAttribute("href", url);
|
||||
el.setAttribute("title", title);
|
||||
|
||||
var range = sel.getRangeAt(0).cloneRange();
|
||||
range.surroundContents(el);
|
||||
sel.removeAllRanges();
|
||||
sel.addRange(range);
|
||||
}
|
||||
RE.callback();
|
||||
}
|
||||
|
||||
RE.setTodo = function(text) {
|
||||
var html = '<input type="checkbox" name="'+ text +'" value="'+ text +'"/> ';
|
||||
document.execCommand('insertHTML', false, html);
|
||||
}
|
||||
|
||||
RE.prepareInsert = function() {
|
||||
RE.backuprange();
|
||||
}
|
||||
|
||||
RE.backuprange = function(){
|
||||
var selection = window.getSelection();
|
||||
if (selection.rangeCount > 0) {
|
||||
var range = selection.getRangeAt(0);
|
||||
RE.currentSelection = {
|
||||
"startContainer": range.startContainer,
|
||||
"startOffset": range.startOffset,
|
||||
"endContainer": range.endContainer,
|
||||
"endOffset": range.endOffset};
|
||||
}
|
||||
}
|
||||
|
||||
RE.restorerange = function(){
|
||||
var selection = window.getSelection();
|
||||
selection.removeAllRanges();
|
||||
var range = document.createRange();
|
||||
range.setStart(RE.currentSelection.startContainer, RE.currentSelection.startOffset);
|
||||
range.setEnd(RE.currentSelection.endContainer, RE.currentSelection.endOffset);
|
||||
selection.addRange(range);
|
||||
}
|
||||
|
||||
RE.enabledEditingItems = function(e) {
|
||||
var items = [];
|
||||
if (document.queryCommandState('bold')) {
|
||||
items.push('bold');
|
||||
}
|
||||
if (document.queryCommandState('italic')) {
|
||||
items.push('italic');
|
||||
}
|
||||
if (document.queryCommandState('subscript')) {
|
||||
items.push('subscript');
|
||||
}
|
||||
if (document.queryCommandState('superscript')) {
|
||||
items.push('superscript');
|
||||
}
|
||||
if (document.queryCommandState('strikeThrough')) {
|
||||
items.push('strikeThrough');
|
||||
}
|
||||
if (document.queryCommandState('underline')) {
|
||||
items.push('underline');
|
||||
}
|
||||
if (document.queryCommandState('insertOrderedList')) {
|
||||
items.push('orderedList');
|
||||
}
|
||||
if (document.queryCommandState('insertUnorderedList')) {
|
||||
items.push('unorderedList');
|
||||
}
|
||||
if (document.queryCommandState('justifyCenter')) {
|
||||
items.push('justifyCenter');
|
||||
}
|
||||
if (document.queryCommandState('justifyFull')) {
|
||||
items.push('justifyFull');
|
||||
}
|
||||
if (document.queryCommandState('justifyLeft')) {
|
||||
items.push('justifyLeft');
|
||||
}
|
||||
if (document.queryCommandState('justifyRight')) {
|
||||
items.push('justifyRight');
|
||||
}
|
||||
if (document.queryCommandState('insertHorizontalRule')) {
|
||||
items.push('horizontalRule');
|
||||
}
|
||||
var formatBlock = document.queryCommandValue('formatBlock');
|
||||
if (formatBlock.length > 0) {
|
||||
items.push(formatBlock);
|
||||
}
|
||||
|
||||
window.location.href = "re-state://" + encodeURI(items.join(','));
|
||||
}
|
||||
|
||||
RE.focus = function() {
|
||||
var range = document.createRange();
|
||||
range.selectNodeContents(RE.editor);
|
||||
range.collapse(false);
|
||||
var selection = window.getSelection();
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
RE.editor.focus();
|
||||
}
|
||||
|
||||
RE.blurFocus = function() {
|
||||
RE.editor.blur();
|
||||
}
|
||||
|
||||
RE.removeFormat = function() {
|
||||
document.execCommand('removeFormat', false, null);
|
||||
}
|
||||
|
||||
// Event Listeners
|
||||
RE.editor.addEventListener("input", RE.callback);
|
||||
RE.editor.addEventListener("keyup", function(e) {
|
||||
var KEY_LEFT = 37, KEY_RIGHT = 39;
|
||||
if (e.which == KEY_LEFT || e.which == KEY_RIGHT) {
|
||||
RE.enabledEditingItems(e);
|
||||
}
|
||||
});
|
||||
RE.editor.addEventListener("click", RE.enabledEditingItems);
|
||||
43
app/src/main/assets/style.css
Normal file
43
app/src/main/assets/style.css
Normal file
@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Copyright (C) 2017 Wasabeef
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@charset "UTF-8";
|
||||
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow: scroll;
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
min-height:100%;
|
||||
}
|
||||
|
||||
#editor {
|
||||
display: table-cell;
|
||||
outline: 0px solid transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
#editor[placeholder]:empty:not(:focus):before {
|
||||
content: attr(placeholder);
|
||||
opacity: .5;
|
||||
}}
|
||||
BIN
app/src/main/assets/web_load_dfimg_icon.png
Normal file
BIN
app/src/main/assets/web_load_dfimg_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
2
app/src/main/assets/zepto.min.js
vendored
Normal file
2
app/src/main/assets/zepto.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -11,13 +11,12 @@ import android.util.Log;
|
||||
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.util.DataCollectionUtils;
|
||||
import com.gh.gamecenter.DataUtils;
|
||||
import com.gh.gamecenter.SplashScreenActivity;
|
||||
import com.lightgame.config.CommonDebug;
|
||||
import com.lightgame.download.FileUtils;
|
||||
import com.lightgame.utils.AppManager;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.tencent.stat.StatService;
|
||||
import com.tendcloud.tenddata.TCAgent;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
@ -118,23 +117,7 @@ public class AppUncaughtHandler implements UncaughtExceptionHandler {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
// MTA主动上传错误
|
||||
try {
|
||||
StatService.reportException(context, throwable);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
// //bugly 作为默认处理异常的类库,已经上报了,此处不重复上报
|
||||
// try {
|
||||
// CrashReport.postCatchedException(throwable);
|
||||
// } catch (Exception e) {
|
||||
// }
|
||||
|
||||
//talkingdata
|
||||
try {
|
||||
TCAgent.onError(context, throwable);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
DataUtils.onError(context, throwable);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
package com.gh.base;
|
||||
|
||||
import android.arch.lifecycle.Lifecycle;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.PackageUtils;
|
||||
import com.gh.common.util.RunningUtils;
|
||||
import com.gh.common.util.ShareUtils;
|
||||
import com.gh.common.util.StringUtils;
|
||||
import com.gh.gamecenter.DataUtils;
|
||||
import com.gh.gamecenter.LoginActivity;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.eventbus.EBShowDialog;
|
||||
import com.lightgame.download.FileUtils;
|
||||
import com.lightgame.utils.AppManager;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.tencent.tauth.Tencent;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
@ -26,7 +26,7 @@ import org.greenrobot.eventbus.ThreadMode;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
@ -35,83 +35,90 @@ import pub.devrel.easypermissions.EasyPermissions;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_DATA;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
|
||||
|
||||
public abstract class BaseActivity extends BaseAppCompatToolBarActivity implements EasyPermissions.PermissionCallbacks{
|
||||
public abstract class BaseActivity extends BaseToolBarActivity implements EasyPermissions.PermissionCallbacks {
|
||||
|
||||
protected String mEntrance;
|
||||
|
||||
private boolean mIsPause;
|
||||
private boolean mIsExistLogoutDialog;
|
||||
|
||||
protected final Handler mBaseHandler = new BaseHandler(this);
|
||||
|
||||
protected static class BaseHandler extends Handler {
|
||||
private final WeakReference<BaseActivity> mActivityWeakReference;
|
||||
|
||||
BaseHandler(BaseActivity activity) {
|
||||
mActivityWeakReference = new WeakReference<>(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
mActivityWeakReference.get().handleMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
protected void handleMessage(Message msg) {
|
||||
|
||||
}
|
||||
|
||||
//接收QQ或者QQ空间分享回调
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE
|
||||
|| requestCode == com.tencent.connect.common.Constants.REQUEST_QZONE_SHARE) {
|
||||
Tencent.onActivityResultData(requestCode, resultCode, data, ShareUtils.getInstance(this).QqShareListener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
init(mContentView);
|
||||
AppManager.getInstance().addActivity(this);
|
||||
EventBus.getDefault().register(this);
|
||||
ButterKnife.bind(this);
|
||||
mEntrance = getIntent().getStringExtra(KEY_ENTRANCE);
|
||||
if (getIntent().getBundleExtra(KEY_DATA) != null) {
|
||||
mEntrance = getIntent().getBundleExtra(KEY_DATA).getString(KEY_ENTRANCE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
EventBus.getDefault().unregister(this);
|
||||
mBaseHandler.removeCallbacksAndMessages(null);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onNavigationIconClicked() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void init(View contentView) {
|
||||
setContentView(contentView);
|
||||
|
||||
ButterKnife.bind(this);
|
||||
|
||||
View back = findViewById(R.id.actionbar_rl_back);
|
||||
if (back != null)
|
||||
back.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void initTitle(String title) {
|
||||
TextView actionbar_tv_title = (TextView) findViewById(R.id.actionbar_tv_title);
|
||||
actionbar_tv_title.setText(title);
|
||||
// setNavigationTitle(title);
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
|
||||
public void toast(String msg) {
|
||||
Utils.toast(this, msg);
|
||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
|
||||
Utils.toast(this, msg);
|
||||
}
|
||||
|
||||
public void toast(int msg) {
|
||||
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
|
||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
|
||||
toast(getString(msg));
|
||||
}
|
||||
|
||||
//如果是游戏分享,newsTitle默认为空
|
||||
public void showShare(String url, String gameName, String icon, String newsTitle, ArrayList<String> tag, boolean isToolsBox) {
|
||||
public void showShare(String url, String icon, String shareTitle, String shareSummary, ShareUtils.ShareType shareType) {
|
||||
|
||||
//判断是否是官方版
|
||||
boolean isPlugin = false;
|
||||
if (tag != null) {
|
||||
for (String s : tag) {
|
||||
if (!"官方版".equals(s)) {
|
||||
isPlugin = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
ShareUtils.getInstance(this).showShareWindows(this, getWindow().getDecorView(), url, icon, shareTitle, shareSummary, shareType);
|
||||
|
||||
ShareUtils.getInstance(this).showShareWindows(getWindow().getDecorView(), url, gameName, icon, newsTitle, isPlugin, true, isToolsBox);
|
||||
|
||||
if (newsTitle == null) {
|
||||
DataUtils.onEvent(this, "内容分享", gameName);
|
||||
if (shareType == ShareUtils.ShareType.game || shareType == ShareUtils.ShareType.plugin) {
|
||||
DataUtils.onEvent(this, "内容分享", shareTitle + shareSummary);
|
||||
} else {
|
||||
DataUtils.onEvent(this, "内容分享", newsTitle);
|
||||
DataUtils.onEvent(this, "内容分享", shareTitle);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(final EBShowDialog showDialog) {
|
||||
//TODO 改为缓存到UI可见时才调用,参考beier-assist
|
||||
if (!mIsPause && this.getClass().getName().equals(RunningUtils.getTopActivity(this))) {
|
||||
if ("hijack".equals(showDialog.getType())) {
|
||||
DialogUtils.showQqSessionDialog(this, "2586716223");// 建议用户联系客服
|
||||
@ -120,13 +127,15 @@ public abstract class BaseActivity extends BaseAppCompatToolBarActivity implemen
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
if (FileUtils.isEmptyFile(showDialog.getPath())) {
|
||||
Utils.toast(BaseActivity.this, getString(R.string.install_failure_hint));
|
||||
toast(getString(R.string.install_failure_hint));
|
||||
} else {
|
||||
startActivity(PackageUtils.getUninstallIntent(BaseActivity.this, showDialog.getPath()));
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if ("loginException".equals(showDialog.getType())) {
|
||||
if (mIsExistLogoutDialog) return;
|
||||
mIsExistLogoutDialog = true;
|
||||
try {
|
||||
JSONObject object = new JSONObject(showDialog.getPath());
|
||||
JSONObject device = object.getJSONObject("device");
|
||||
@ -135,12 +144,10 @@ public abstract class BaseActivity extends BaseAppCompatToolBarActivity implemen
|
||||
DialogUtils.showAlertDialog(this, "你的账号已在另外一台设备登录"
|
||||
, StringUtils.buildString("(", manufacturer, " - ", model, ")")
|
||||
, "知道了", "重新登录"
|
||||
, null, new DialogUtils.CancelListener() {
|
||||
@Override
|
||||
public void onCancel() {
|
||||
startActivity(LoginActivity.getIntent(BaseActivity.this, false));
|
||||
}
|
||||
});
|
||||
, null
|
||||
, () -> startActivity(LoginActivity.getIntent(BaseActivity.this))
|
||||
);
|
||||
mBaseHandler.postDelayed(() -> mIsExistLogoutDialog = false, 5000);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -150,26 +157,16 @@ public abstract class BaseActivity extends BaseAppCompatToolBarActivity implemen
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
EventBus.getDefault().unregister(this);
|
||||
AppManager.getInstance().finishActivity(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
// DataUtils.onPause(this);
|
||||
mIsPause = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
// DataUtils.onResume(this);
|
||||
mIsPause = false;
|
||||
// DownloadManager.getInstance(this).initGameMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,46 +0,0 @@
|
||||
package com.gh.base;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
import com.gh.gamecenter.R;
|
||||
import com.lightgame.BaseAppCompatActivity;
|
||||
|
||||
/**
|
||||
* Created by csheng on 15-10-12.
|
||||
*/
|
||||
|
||||
public abstract class BaseAppCompatToolBarActivity extends BaseAppCompatActivity {
|
||||
|
||||
private Toolbar mToolbar;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initToolbar();
|
||||
}
|
||||
|
||||
private void initToolbar() {
|
||||
mToolbar = (Toolbar) findViewById(R.id.toolbar_navigation);
|
||||
if (mToolbar != null) {
|
||||
setSupportActionBar(mToolbar);
|
||||
mToolbar.addView(View.inflate(this, R.layout.reuse_actionbar, null));
|
||||
getSupportActionBar().setHomeButtonEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
return onNavigationIconClicked();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
protected abstract boolean onNavigationIconClicked();
|
||||
|
||||
}
|
||||
@ -15,7 +15,7 @@ import butterknife.ButterKnife;
|
||||
|
||||
public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
|
||||
private T data;
|
||||
private T mData;
|
||||
private OnListClickListener mListClickListener;
|
||||
|
||||
public BaseRecyclerViewHolder(View itemView) {
|
||||
@ -31,13 +31,13 @@ public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder
|
||||
*/
|
||||
public BaseRecyclerViewHolder(View itemView, T data, OnListClickListener listClickListener) {
|
||||
this(itemView);
|
||||
this.data = data;
|
||||
this.mData = data;
|
||||
this.mListClickListener = listClickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
mListClickListener.onListClick(view, getAdapterPosition(), data);
|
||||
mListClickListener.onListClick(view, getAdapterPosition(), mData);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
116
app/src/main/java/com/gh/base/BaseToolBarActivity.java
Normal file
116
app/src/main/java/com/gh/base/BaseToolBarActivity.java
Normal file
@ -0,0 +1,116 @@
|
||||
package com.gh.base;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.ColorRes;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.TextUtils;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.gamecenter.R;
|
||||
import com.lightgame.BaseAppCompatActivity;
|
||||
import com.lightgame.OnTitleClickListener;
|
||||
import com.lightgame.view.TextDrawable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by csheng on 15-10-12.
|
||||
*/
|
||||
|
||||
public abstract class BaseToolBarActivity extends BaseAppCompatActivity {
|
||||
|
||||
private Toolbar mToolbar;
|
||||
private Drawable mToolbarBackground;
|
||||
private TextView mTitleTv;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initToolbar();
|
||||
}
|
||||
|
||||
public void setNavigationTitle(@StringRes int title, @ColorRes int color) {
|
||||
setNavigationTitle(getString(title), ContextCompat.getColor(this, color));
|
||||
}
|
||||
|
||||
public void setNavigationTitle(String title, @ColorInt int color) {
|
||||
if (mToolbar != null) {
|
||||
final TextDrawable textDrawable = new TextDrawable(getResources());
|
||||
textDrawable.setTextColor(color);
|
||||
textDrawable.setText(title);
|
||||
if (mToolbarBackground == null) {
|
||||
mToolbarBackground = mToolbar.getBackground();
|
||||
}
|
||||
LayerDrawable drawable = new LayerDrawable(new Drawable[]{mToolbarBackground, textDrawable});
|
||||
mToolbar.setBackgroundDrawable(drawable);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setNavigationTitle(String title) {
|
||||
// if (mTitleTv != null) {
|
||||
// mTitleTv.setText(title);
|
||||
// }
|
||||
|
||||
if (mToolbar != null && !TextUtils.isEmpty(title)) {
|
||||
final TextDrawable textDrawable = new TextDrawable(getResources());
|
||||
textDrawable.setText(title);
|
||||
if (mToolbarBackground == null) {
|
||||
mToolbarBackground = mToolbar.getBackground();
|
||||
}
|
||||
LayerDrawable drawable = new LayerDrawable(new Drawable[]{mToolbarBackground, textDrawable});
|
||||
mToolbar.setBackgroundDrawable(drawable);
|
||||
}
|
||||
}
|
||||
|
||||
public void setNavigationTitle(@StringRes int res) {
|
||||
setNavigationTitle(getString(res));
|
||||
}
|
||||
|
||||
private void initToolbar() {
|
||||
mToolbar = findViewById(R.id.toolbar_navigation);
|
||||
if (mToolbar != null) {
|
||||
setSupportActionBar(mToolbar);
|
||||
final View back = mToolbar.findViewById(R.id.actionbar_rl_back);
|
||||
if (back != null) {
|
||||
back.setOnClickListener(v -> onBackPressed());
|
||||
}
|
||||
mTitleTv = findViewById(R.id.actionbar_tv_title);
|
||||
mTitleTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
final List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
|
||||
for (Fragment fragment : fragmentList) {
|
||||
if (fragment instanceof OnTitleClickListener) {
|
||||
((OnTitleClickListener) fragment).onTitleClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
||||
getSupportActionBar().setDisplayShowHomeEnabled(false);
|
||||
getSupportActionBar().setHomeButtonEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
return onNavigationIconClicked();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
protected abstract boolean onNavigationIconClicked();
|
||||
|
||||
}
|
||||
@ -4,8 +4,13 @@ import android.app.Activity;
|
||||
import android.app.Application.ActivityLifecycleCallbacks;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.DataUtils;
|
||||
import com.lightgame.config.CommonDebug;
|
||||
import com.lightgame.utils.AppManager;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
/**
|
||||
* 1、写点针对生命周期的统计代码
|
||||
@ -18,10 +23,10 @@ import com.gh.download.DownloadManager;
|
||||
*/
|
||||
public class GHActivityLifecycleCallbacksImpl implements ActivityLifecycleCallbacks {
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
|
||||
|
||||
AppManager.getInstance().addActivity(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -33,6 +38,7 @@ public class GHActivityLifecycleCallbacksImpl implements ActivityLifecycleCallba
|
||||
public void onActivityResumed(Activity activity) {
|
||||
|
||||
DataUtils.onResume(activity);
|
||||
//FIXME 这里应该只是部分Activity需要
|
||||
try {
|
||||
// 初始化gameMap
|
||||
DownloadManager.getInstance(activity).initGameMap();
|
||||
@ -58,7 +64,7 @@ public class GHActivityLifecycleCallbacksImpl implements ActivityLifecycleCallba
|
||||
|
||||
@Override
|
||||
public void onActivityDestroyed(Activity activity) {
|
||||
|
||||
AppManager.getInstance().finishActivity(activity);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,322 +0,0 @@
|
||||
package com.gh.base;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.text.TextUtils;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import com.gh.common.util.AppDebugConfig;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.PackageUtils;
|
||||
import com.gh.common.util.TokenUtils;
|
||||
import com.gh.gamecenter.BuildConfig;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.halo.assistant.HaloApp;
|
||||
import com.lightgame.download.FileUtils;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.xiaomi.mipush.sdk.ErrorCode;
|
||||
import com.xiaomi.mipush.sdk.MiPushClient;
|
||||
import com.xiaomi.mipush.sdk.MiPushCommandMessage;
|
||||
import com.xiaomi.mipush.sdk.MiPushMessage;
|
||||
import com.xiaomi.mipush.sdk.PushMessageReceiver;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static com.gh.common.util.EntranceUtils.ENTRANCE_MIPUSH;
|
||||
import static com.gh.common.util.EntranceUtils.HOST_ARTICLE;
|
||||
import static com.gh.common.util.EntranceUtils.HOST_GAME;
|
||||
import static com.gh.common.util.EntranceUtils.HOST_WEB;
|
||||
import static com.gh.common.util.EntranceUtils.HOST_COLUMN;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_GAMEID;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_ID;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_NEWSID;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_TARGET;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_TO;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_TYPE;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_URL;
|
||||
|
||||
/**
|
||||
* 1、PushMessageReceiver是个抽象类,该类继承了BroadcastReceiver。
|
||||
* 2、需要将自定义的DemoMessageReceiver注册在AndroidManifest.xml文件中 <receiver
|
||||
* android:exported="true"
|
||||
* android:name="com.xiaomi.mipushdemo.DemoMessageReceiver"> <intent-filter>
|
||||
* <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" /> </intent-filter>
|
||||
* <intent-filter> <action android:name="com.xiaomi.mipush.ERROR" />
|
||||
* </intent-filter> <intent-filter> <action
|
||||
* android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" /></intent-filter>
|
||||
* </receiver>
|
||||
* 3、DemoMessageReceiver的onReceivePassThroughMessage方法用来接收服务器向客户端发送的透传消息
|
||||
* 4、DemoMessageReceiver的onNotificationMessageClicked方法用来接收服务器向客户端发送的通知消息,
|
||||
* 这个回调方法会在用户手动点击通知后触发
|
||||
* 5、DemoMessageReceiver的onNotificationMessageArrived方法用来接收服务器向客户端发送的通知消息,
|
||||
* 这个回调方法是在通知消息到达客户端时触发。另外应用在前台时不弹出通知的通知消息到达客户端也会触发这个回调函数
|
||||
* 6、DemoMessageReceiver的onCommandResult方法用来接收客户端向服务器发送命令后的响应结果
|
||||
* 7、DemoMessageReceiver的onReceiveRegisterResult方法用来接收客户端向服务器发送注册命令后的响应结果
|
||||
* 8、以上这些方法运行在非UI线程中
|
||||
*
|
||||
* @author mayixiang
|
||||
* //TODO 请勿更改此类路径,若需更改时请注意更改./libraries/MiPush/proguard-library.txt混淆对应配置
|
||||
*/
|
||||
public class GHPushMessageReceiver extends PushMessageReceiver {
|
||||
|
||||
private String mAlias;
|
||||
|
||||
@Override
|
||||
public void onReceivePassThroughMessage(Context context, MiPushMessage message) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
AppDebugConfig.logMethodWithParams(this, message);
|
||||
}
|
||||
// 1判断notifyid是否为4
|
||||
try {
|
||||
//TODO what is magic number 4?
|
||||
if (message.getNotifyId() == 4) {
|
||||
JSONObject jsonObject = new JSONObject(message.getContent());
|
||||
Utils.log(jsonObject.toString());
|
||||
String channel = jsonObject.getString("channel");
|
||||
Utils.log("channel = " + channel);
|
||||
|
||||
// 1判断渠道号是否一致或是否为ALL
|
||||
String packageChannel = HaloApp.getInstance().getChannel();
|
||||
if ("ALL".equals(channel) || channel.equalsIgnoreCase(packageChannel)) {
|
||||
String type = jsonObject.getString(KEY_TYPE);
|
||||
Utils.log("type = " + type);
|
||||
JSONArray jsonArray;
|
||||
ArrayMap<String, Boolean> map;
|
||||
switch (type) {
|
||||
case "NEWS":
|
||||
// 新闻推送
|
||||
jsonArray = jsonObject.getJSONArray("package");
|
||||
map = getInstalledMapFromLocal(context);
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
Boolean b = map.get(jsonArray.getString(i));
|
||||
if (b != null) {
|
||||
// 显示推送的消息
|
||||
showNotification(context, jsonObject, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "PLUGIN_UPDATE":
|
||||
// 插件更新推送
|
||||
jsonArray = jsonObject.getJSONArray("apk");
|
||||
map = getInstalledMapFromLocal(context);
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject apk = jsonArray.getJSONObject(i);
|
||||
String packageName = apk.getString("package");
|
||||
Boolean b = map.get(packageName);
|
||||
if (b != null) {
|
||||
// 判断是否gh_version是否相同
|
||||
String gh_version = (String) PackageUtils
|
||||
.getMetaData(context, packageName, "gh_version");
|
||||
if (gh_version != null) {
|
||||
gh_version = gh_version.substring(2);
|
||||
// 判断gh_version是否相同
|
||||
if (gh_version.equals(apk.getString("gh_version"))) {
|
||||
// 判断version是否相同
|
||||
String version = PackageUtils.getVersionByPackage(context, packageName);
|
||||
if (apk.getString("version").equals(version)) {
|
||||
// 版本相同,无需显示插件更新,继续查看是否有可更新的游戏包
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 显示推送的消息
|
||||
showNotification(context, jsonObject, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "NEW_GAME":
|
||||
// 新游推送
|
||||
showNotification(context, jsonObject, 2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayMap<String, Boolean> getInstalledMapFromLocal(Context context) {
|
||||
ArrayMap<String, Boolean> map = new ArrayMap<>();
|
||||
ArrayList<String> list = getAllPackageName(context);
|
||||
for (String str : list) {
|
||||
map.put(str, true);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private void showNotification(Context context, JSONObject jsonObject, int id) throws JSONException {
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("com.gh.gamecenter.NOTIFICATION");
|
||||
intent.putExtra("notifyId", id);
|
||||
intent.putExtra("notifyData", jsonObject.toString());
|
||||
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_ONE_SHOT);
|
||||
|
||||
NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
RemoteViews remoteViews = null;
|
||||
|
||||
if (Build.MANUFACTURER.equals("Meizu") &&
|
||||
(Build.MODEL.startsWith("m") || Build.MODEL.startsWith("MX"))) {
|
||||
remoteViews = new RemoteViews(context.getPackageName(), R.layout.notification_meizu);
|
||||
SimpleDateFormat format = new SimpleDateFormat("HH:mm", Locale.getDefault());
|
||||
remoteViews.setTextViewText(R.id.time, format.format(new Date()));
|
||||
} else if (Build.MANUFACTURER.equals("Xiaomi") &&
|
||||
(Build.MODEL.startsWith("MI") || Build.MODEL.startsWith("HM") || Build.MODEL.startsWith("Redmi"))) {
|
||||
// 小米系统
|
||||
remoteViews = new RemoteViews(context.getPackageName(), R.layout.notification_xiaomi);
|
||||
SimpleDateFormat format = new SimpleDateFormat("ah:mm", Locale.getDefault());
|
||||
remoteViews.setTextViewText(R.id.time, format.format(new Date()));
|
||||
} else if (Build.MANUFACTURER.equals("HUAWEI")) {
|
||||
// 华为系统
|
||||
remoteViews = new RemoteViews(context.getPackageName(), R.layout.notification_huawei);
|
||||
}
|
||||
|
||||
String url = jsonObject.getString("icon");
|
||||
String path = context.getCacheDir() + File.separator + url.substring(url.lastIndexOf("/") + 1);
|
||||
int result = FileUtils.downloadFile(url, path);
|
||||
if (result != 200) {
|
||||
// 下载出错,使用光环logo
|
||||
path = null;
|
||||
}
|
||||
|
||||
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
|
||||
.setTicker(jsonObject.getString("pushTitle"))
|
||||
.setContentTitle(jsonObject.getString("pushTitle"))
|
||||
.setContentText(jsonObject.getString("pushDesc"))
|
||||
.setContentIntent(pendingIntent)
|
||||
.setDefaults(Notification.DEFAULT_SOUND) // 添加系统默认声音
|
||||
.setAutoCancel(true); // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
|
||||
|
||||
if (remoteViews != null) {
|
||||
if (path == null) {
|
||||
remoteViews.setImageViewBitmap(R.id.icon, BitmapFactory.decodeResource(context.getResources(), R.drawable.logo));
|
||||
} else {
|
||||
remoteViews.setImageViewBitmap(R.id.icon, BitmapFactory.decodeFile(path));
|
||||
}
|
||||
remoteViews.setTextViewText(R.id.title, jsonObject.getString("pushTitle"));
|
||||
remoteViews.setTextViewText(R.id.intro, jsonObject.getString("pushDesc"));
|
||||
|
||||
builder.setSmallIcon(R.drawable.logo);
|
||||
builder.setCustomContentView(remoteViews);
|
||||
|
||||
} else {
|
||||
builder.setSmallIcon(R.drawable.logo_black);
|
||||
if (path == null) {
|
||||
builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.logo));
|
||||
} else {
|
||||
builder.setLargeIcon(BitmapFactory.decodeFile(path));
|
||||
}
|
||||
}
|
||||
|
||||
nManager.notify(((int) System.currentTimeMillis() / 1000), builder.build());// 通过通知管理器来发起通知。如果id不同,则每click,在status哪里增加一个提示
|
||||
}
|
||||
|
||||
private ArrayList<String> getAllPackageName(Context context) {
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
List<PackageInfo> packageInfos = context.getPackageManager().getInstalledPackages(0);
|
||||
for (PackageInfo packageInfo : packageInfos) {
|
||||
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
|
||||
list.add(packageInfo.packageName);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotificationMessageClicked(Context context, MiPushMessage message) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
AppDebugConfig.logMethodWithParams(this, message);
|
||||
}
|
||||
try {
|
||||
String content = message.getContent();
|
||||
JSONObject response = new JSONObject(content);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(KEY_ENTRANCE, ENTRANCE_MIPUSH);
|
||||
String type = response.getString(KEY_TYPE);
|
||||
String target = response.getString(KEY_TARGET);
|
||||
|
||||
switch (type) {
|
||||
case HOST_ARTICLE:
|
||||
bundle.putString(KEY_TO, "NewsDetailActivity");
|
||||
bundle.putString(KEY_NEWSID, target);
|
||||
break;
|
||||
case HOST_GAME:
|
||||
bundle.putString(KEY_TO, "GameDetailActivity");
|
||||
bundle.putString(KEY_GAMEID, target);
|
||||
break;
|
||||
case HOST_COLUMN:
|
||||
bundle.putString(KEY_TO, "SubjectActivity");
|
||||
bundle.putString(KEY_ID, target);
|
||||
break;
|
||||
case HOST_WEB:
|
||||
bundle.putString(KEY_TO, "WebActivity");
|
||||
bundle.putString(KEY_URL, target);
|
||||
break;
|
||||
}
|
||||
EntranceUtils.jumpActivity(context, bundle);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotificationMessageArrived(Context context, MiPushMessage message) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
AppDebugConfig.logMethodWithParams(this, message);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
AppDebugConfig.logMethodWithParams(this, message);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommandResult(Context context, MiPushCommandMessage message) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
AppDebugConfig.logMethodWithParams(this, message);
|
||||
}
|
||||
|
||||
String command = message.getCommand();
|
||||
List<String> arguments = message.getCommandArguments();
|
||||
|
||||
if (MiPushClient.COMMAND_SET_ALIAS.equals(command)) {
|
||||
if (message.getResultCode() == ErrorCode.SUCCESS) {
|
||||
mAlias = arguments.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (TextUtils.isEmpty(mAlias)) {
|
||||
//添加别名
|
||||
MiPushClient.setAlias(context, TokenUtils.getDeviceId(context), null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -4,6 +4,10 @@ import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.GameDetailActivity;
|
||||
import com.gh.gamecenter.NewsDetailActivity;
|
||||
import com.gh.gamecenter.SubjectActivity;
|
||||
import com.gh.gamecenter.WebActivity;
|
||||
import com.umeng.message.UmengNotificationClickHandler;
|
||||
import com.umeng.message.entity.UMessage;
|
||||
|
||||
@ -26,19 +30,19 @@ public class GHUmengNotificationClickHandler extends UmengNotificationClickHandl
|
||||
String target = response.getString(EntranceUtils.KEY_TARGET);
|
||||
switch (type) {
|
||||
case EntranceUtils.HOST_ARTICLE:
|
||||
bundle.putString(EntranceUtils.KEY_TO, "NewsDetailActivity");
|
||||
bundle.putString(EntranceUtils.KEY_TO, NewsDetailActivity.class.getSimpleName());
|
||||
bundle.putString(EntranceUtils.KEY_NEWSID, target);
|
||||
break;
|
||||
case EntranceUtils.HOST_GAME:
|
||||
bundle.putString(EntranceUtils.KEY_TO, "GameDetailActivity");
|
||||
bundle.putString(EntranceUtils.KEY_TO, GameDetailActivity.class.getSimpleName());
|
||||
bundle.putString(EntranceUtils.KEY_GAMEID, target);
|
||||
break;
|
||||
case EntranceUtils.HOST_COLUMN:
|
||||
bundle.putString(EntranceUtils.KEY_TO, "SubjectActivity");
|
||||
bundle.putString(EntranceUtils.KEY_TO, SubjectActivity.class.getSimpleName());
|
||||
bundle.putString(EntranceUtils.KEY_ID, target);
|
||||
break;
|
||||
case EntranceUtils.HOST_WEB:
|
||||
bundle.putString(EntranceUtils.KEY_TO, "WebActivity");
|
||||
bundle.putString(EntranceUtils.KEY_TO, WebActivity.class.getSimpleName());
|
||||
bundle.putString(EntranceUtils.KEY_URL, target);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
//package com.gh.base;
|
||||
//
|
||||
//import java.io.Serializable;
|
||||
//
|
||||
//public enum SuggestionType implements Serializable {
|
||||
//
|
||||
// FEEDBACK("普通反馈", 1),
|
||||
// SUGGESTION("功能建议", 2),
|
||||
// CRASH("发生闪退", 3),
|
||||
// GAME("游戏问题", 4),
|
||||
// COLLECT("游戏收录", 5),
|
||||
// POST("文章投稿", 6);
|
||||
//
|
||||
// private String mName;
|
||||
// private int mIndex;
|
||||
//
|
||||
// private SuggestionType(String name, int index) {
|
||||
// mName = name;
|
||||
// mIndex = index;
|
||||
// }
|
||||
//
|
||||
// public static String getName(int index) {
|
||||
// for (SuggestionType c : SuggestionType.values()) {
|
||||
// if (c.mIndex == index) {
|
||||
// return c.mName;
|
||||
// }
|
||||
// }
|
||||
// return "";
|
||||
// }
|
||||
//
|
||||
// public static int getIndex(String name) {
|
||||
// for (SuggestionType c : SuggestionType.values()) {
|
||||
// if (c.mName == name) {
|
||||
// return c.mIndex;
|
||||
// }
|
||||
// }
|
||||
// return -1;
|
||||
// }
|
||||
//
|
||||
// public int getIndex() {
|
||||
// return mIndex;
|
||||
// }
|
||||
//
|
||||
// public String getName() {
|
||||
// return mName;
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.gh.base.adapter;
|
||||
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by khy on 7/12/28.
|
||||
*/
|
||||
public class FragmentStateAdapter extends FragmentStatePagerAdapter {
|
||||
|
||||
private List<Fragment> mFragmentList;
|
||||
|
||||
public FragmentStateAdapter(FragmentManager fm, List<Fragment> fragmentList) {
|
||||
super(fm);
|
||||
this.mFragmentList = fragmentList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
return mFragmentList.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mFragmentList.size();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.gh.gamecenter.fragment;
|
||||
package com.gh.base.fragment;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
@ -1,17 +1,24 @@
|
||||
package com.gh.base.fragment;
|
||||
|
||||
import android.arch.lifecycle.Lifecycle;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.support.annotation.LayoutRes;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.gh.base.BaseToolBarActivity;
|
||||
import com.gh.base.OnListClickListener;
|
||||
import com.gh.base.OnRequestCallBackListener;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.eventbus.EBMiPush;
|
||||
import com.lightgame.OnTitleClickListener;
|
||||
import com.lightgame.utils.RuntimeUtils;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
@ -19,25 +26,50 @@ import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import rx.Observable;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
import static com.gh.common.util.EntranceUtils.KEY_DATA;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
|
||||
|
||||
/**
|
||||
* Created by LGT on 2016/9/4.
|
||||
* Fragment 基类
|
||||
*/
|
||||
public abstract class BaseFragment<T> extends Fragment implements OnRequestCallBackListener<T>,
|
||||
View.OnClickListener, OnListClickListener{
|
||||
View.OnClickListener, OnListClickListener, OnTitleClickListener {
|
||||
|
||||
// TODO private view
|
||||
protected View view;
|
||||
protected View mCachedView;
|
||||
|
||||
protected boolean isEverPause;
|
||||
|
||||
protected String mEntrance;
|
||||
|
||||
protected final Handler mBaseHandler = new BaseFragment.BaseHandler(this);
|
||||
|
||||
protected static class BaseHandler extends Handler {
|
||||
private final WeakReference<BaseFragment> mfragmentWeakReference;
|
||||
|
||||
BaseHandler(BaseFragment fragment) {
|
||||
mfragmentWeakReference = new WeakReference<>(fragment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
mfragmentWeakReference.get().handleMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
protected void handleMessage(Message msg) {
|
||||
|
||||
}
|
||||
|
||||
@LayoutRes
|
||||
protected abstract int getLayoutId();
|
||||
|
||||
@ -55,6 +87,16 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
handleOnClick(v);
|
||||
}
|
||||
|
||||
protected void setNavigationTitle(@StringRes int res) {
|
||||
setNavigationTitle(getString(res));
|
||||
}
|
||||
|
||||
protected void setNavigationTitle(String title) {
|
||||
if (getActivity() instanceof BaseToolBarActivity) {
|
||||
((BaseToolBarActivity) getActivity()).setNavigationTitle(title);
|
||||
}
|
||||
}
|
||||
|
||||
protected void initView(View view) {
|
||||
}
|
||||
|
||||
@ -70,12 +112,17 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mEntrance = getActivity().getIntent().getStringExtra(EntranceUtils.KEY_ENTRANCE);
|
||||
final Intent intent = getActivity().getIntent();
|
||||
mEntrance = intent.getStringExtra(KEY_ENTRANCE);
|
||||
if (intent.getBundleExtra(KEY_DATA) != null) {
|
||||
mEntrance = intent.getBundleExtra(KEY_DATA).getString(KEY_ENTRANCE);
|
||||
}
|
||||
|
||||
isEverPause = false;
|
||||
EventBus.getDefault().register(this);
|
||||
view = View.inflate(getContext(), getLayoutId(), null);
|
||||
ButterKnife.bind(this, view);
|
||||
initView(view);
|
||||
mCachedView = View.inflate(getContext(), getLayoutId(), null);
|
||||
ButterKnife.bind(this, mCachedView);
|
||||
initView(mCachedView);
|
||||
}
|
||||
|
||||
//TODO 尴尬,必须的有subscribe才能register
|
||||
@ -88,9 +135,9 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
if (container != null) {
|
||||
container.removeView(view);
|
||||
container.removeView(mCachedView);
|
||||
}
|
||||
return view;
|
||||
return mCachedView;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -108,12 +155,27 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
mBaseHandler.removeCallbacksAndMessages(null);
|
||||
RuntimeUtils.getInstance().removeRunnable();
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
public void toast(@StringRes int res) {
|
||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
|
||||
toast(getString(res));
|
||||
}
|
||||
|
||||
public void toast(String msg) {
|
||||
Utils.toast(getContext(), msg);
|
||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
|
||||
Utils.toast(getContext(), msg);
|
||||
}
|
||||
|
||||
public void toastLong(@StringRes int msg) {
|
||||
toastLong(getString(msg));
|
||||
}
|
||||
|
||||
public void toastLong(String msg) {
|
||||
RuntimeUtils.getInstance().toastLong(getContext(), msg);
|
||||
}
|
||||
|
||||
public boolean isEverPause() {
|
||||
@ -126,7 +188,7 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadDone(Object obj) {
|
||||
public void loadDone(T obj) {
|
||||
|
||||
}
|
||||
|
||||
@ -141,7 +203,7 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void onListClick(View view, int position, T data) {
|
||||
public <LIST> void onListClick(View view, int position, LIST data) {
|
||||
|
||||
}
|
||||
|
||||
@ -149,4 +211,22 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
// 将所有的Fragment都置为隐藏状态。
|
||||
protected void hideFragments(FragmentTransaction transaction) {
|
||||
List<Fragment> list = getChildFragmentManager().getFragments();
|
||||
for (Fragment fragment : list) {
|
||||
transaction.hide(fragment);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTitleClick() {
|
||||
List<Fragment> list = getChildFragmentManager().getFragments();
|
||||
for (Fragment fragment : list) {
|
||||
if (fragment instanceof OnTitleClickListener) {
|
||||
((OnTitleClickListener) fragment).onTitleClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,6 +19,7 @@ import android.support.v4.view.PagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.View;
|
||||
|
||||
import com.gh.gamecenter.normal.NormalFragment;
|
||||
import com.lightgame.adapter.BaseFragmentPagerAdapter;
|
||||
import com.lightgame.config.CommonDebug;
|
||||
import com.lightgame.view.DoubleTapTextView;
|
||||
@ -33,9 +34,9 @@ import java.util.List;
|
||||
* @author CsHeng
|
||||
* @date 2013-3-6
|
||||
*/
|
||||
public abstract class BaseFragment_ViewPager extends BaseFragment implements DoubleTapTextView.OnDoubleTapListener {
|
||||
public abstract class BaseFragment_ViewPager extends NormalFragment implements DoubleTapTextView.OnDoubleTapListener {
|
||||
|
||||
protected static final String ARGS_INDEX = "index";
|
||||
public static final String ARGS_INDEX = "index";
|
||||
protected int mCheckedIndex = 0;
|
||||
protected PagerAdapter mAdapter;
|
||||
protected List<Fragment> mFragmentsList;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.gh.gamecenter.fragment;
|
||||
package com.gh.base.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
@ -10,6 +10,8 @@ public class Constants {
|
||||
|
||||
public final static int NOT_NETWORK_CODE = 504; // 没有网络的状态码(应该是这个吧!)
|
||||
|
||||
public static final String LOGIN_TOKEN_ID = "userToken_id"; // 用户ID 与服务器无关
|
||||
|
||||
//手机号码匹配规则
|
||||
public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
|
||||
public static final String REGEX_ACCOUNT = "^[a-zA-Z_]\\w{5,17}$";
|
||||
|
||||
@ -24,4 +24,12 @@ public class ItemViewType {
|
||||
public static final int KC_HINT = 17;
|
||||
public static final int GAME_PULGIN = 18; // 游戏插件模块
|
||||
|
||||
/**
|
||||
* 普通列表
|
||||
*/
|
||||
public static final int ITEM_BODY = 100;
|
||||
public static final int ITEM_FOOTER = 101;
|
||||
public static final int ITEM_TOP = 102;
|
||||
|
||||
|
||||
}
|
||||
|
||||
104
app/src/main/java/com/gh/common/util/AskErrorResponseUtils.java
Normal file
104
app/src/main/java/com/gh/common/util/AskErrorResponseUtils.java
Normal file
@ -0,0 +1,104 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.gh.gamecenter.R;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import retrofit2.HttpException;
|
||||
|
||||
/**
|
||||
* Created by khy on 28/12/17.
|
||||
*/
|
||||
|
||||
public class AskErrorResponseUtils {
|
||||
|
||||
public static void errorResponseControl(Context context, HttpException e) {
|
||||
if (e == null) return;
|
||||
int code = e.code();
|
||||
|
||||
try {
|
||||
JSONObject object = new JSONObject(e.response().errorBody().string());
|
||||
int errorCode = object.getInt("code");
|
||||
if (errorCode == 400) {
|
||||
switch (errorCode) {
|
||||
case 400001:
|
||||
Utils.toast(context, "提交的参数不符合接口的要求");
|
||||
break;
|
||||
case 400003:
|
||||
Utils.toast(context, "客户端提供的expert_id不存在");
|
||||
break;
|
||||
case 400004:
|
||||
Utils.toast(context, "缺少参数");
|
||||
break;
|
||||
case 400005:
|
||||
Utils.toast(context, "用户的评论被墙(黑名单)");
|
||||
break;
|
||||
default:
|
||||
Utils.toast(context, context.getString(R.string.request_failure_normal_hint));
|
||||
break;
|
||||
}
|
||||
} else if (code == 403) {
|
||||
switch (errorCode) {
|
||||
case 403001:
|
||||
Utils.toast(context, "标签名称太长了");
|
||||
break;
|
||||
case 403002:
|
||||
Utils.toast(context, "已经被邀请了");
|
||||
break;
|
||||
case 403003:
|
||||
Utils.toast(context, "每天最多只能邀请10次");
|
||||
break;
|
||||
case 403004:
|
||||
Utils.toast(context, "客户端提供的ID无效(空/无效ID)");
|
||||
break;
|
||||
case 403005:
|
||||
Utils.toast(context, "已经回答过了(限制频率)");
|
||||
break;
|
||||
case 403006:
|
||||
Utils.toast(context, "图片数量达到限制点");
|
||||
break;
|
||||
case 403007:
|
||||
Utils.toast(context, "不合法的用户");
|
||||
break;
|
||||
case 403008:
|
||||
Utils.toast(context, "已投票");
|
||||
break;
|
||||
case 403009:
|
||||
Utils.toast(context, "已经收藏过了");
|
||||
break;
|
||||
case 403010:
|
||||
Utils.toast(context, "无效的标签栏");
|
||||
break;
|
||||
case 403011:
|
||||
Utils.toast(context, "标题内容过长");
|
||||
break;
|
||||
case 403012:
|
||||
Utils.toast(context, "描述内容过长");
|
||||
break;
|
||||
case 403013:
|
||||
Utils.toast(context, "无效的标签");
|
||||
break;
|
||||
case 403014:
|
||||
Utils.toast(context, "标签数量太多了");
|
||||
break;
|
||||
case 403015:
|
||||
Utils.toast(context, "已经关注过了");
|
||||
break;
|
||||
default:
|
||||
Utils.toast(context, context.getString(R.string.request_failure_normal_hint));
|
||||
break;
|
||||
}
|
||||
} else if (code == 401 && errorCode == 404001) {
|
||||
Utils.toast(context, "请求的资源不存在");
|
||||
}
|
||||
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
87
app/src/main/java/com/gh/common/util/AskLogUtils.java
Normal file
87
app/src/main/java/com/gh/common/util/AskLogUtils.java
Normal file
@ -0,0 +1,87 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.gh.gamecenter.BuildConfig;
|
||||
import com.gh.gamecenter.ask.entity.Questions;
|
||||
import com.gh.gamecenter.manager.UserManager;
|
||||
import com.gh.loghub.LogHubUtils;
|
||||
import com.halo.assistant.HaloApp;
|
||||
import com.lightgame.utils.Util_System_Phone_State;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/**
|
||||
* Created by khy on 2/01/18.
|
||||
*/
|
||||
public class AskLogUtils {
|
||||
|
||||
|
||||
public static void uploadQuestions(Context context, String tracers, Questions questions) {
|
||||
JSONObject object = new JSONObject();
|
||||
try {
|
||||
object.put("community_id", UserManager.getInstance().getCommunityId(context));
|
||||
object.put("community_name", UserManager.getInstance().getCommunityName(context));
|
||||
object.put("question_id", questions.getId());
|
||||
object.put("question_name", questions.getTitle());
|
||||
object.put("subject", "question");
|
||||
object.put("tracers", tracers);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
upload(context, object);
|
||||
}
|
||||
|
||||
public static void uploadAnswers(Context context, String tracers, Questions questions, String answerId) {
|
||||
JSONObject object = new JSONObject();
|
||||
try {
|
||||
object.put("community_id", UserManager.getInstance().getCommunityId(context));
|
||||
object.put("community_name", UserManager.getInstance().getCommunityName(context));
|
||||
object.put("question_id", questions.getId());
|
||||
object.put("question_name", questions.getTitle());
|
||||
object.put("subject", "answer");
|
||||
object.put("tracers", tracers);
|
||||
object.put("answer_id", answerId);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
upload(context, object);
|
||||
}
|
||||
|
||||
public static void uploadSearch(Context context, String searchKey) {
|
||||
if (TextUtils.isEmpty(searchKey)) return;
|
||||
|
||||
JSONObject object = new JSONObject();
|
||||
try {
|
||||
object.put("community_id", UserManager.getInstance().getCommunityId(context));
|
||||
object.put("community_name", UserManager.getInstance().getCommunityName(context));
|
||||
object.put("keyword", searchKey);
|
||||
object.put("subject", "search");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
upload(context, object);
|
||||
}
|
||||
|
||||
|
||||
private static void upload(Context context, JSONObject object) {
|
||||
try {
|
||||
object.put("version", BuildConfig.PATCH_VERSION_NAME);
|
||||
object.put("channel", HaloApp.getInstance().getChannel());
|
||||
object.put("android_id", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID));
|
||||
object.put("imei", Util_System_Phone_State.getDeviceId(context));
|
||||
object.put("time", Utils.getTime(context));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
LogHubUtils.uploadLog(DeviceUtils.getIPAddress(context), object);
|
||||
}
|
||||
}
|
||||
50
app/src/main/java/com/gh/common/util/AskUtils.java
Normal file
50
app/src/main/java/com/gh/common/util/AskUtils.java
Normal file
@ -0,0 +1,50 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Created by khy on 27/12/17.
|
||||
*/
|
||||
|
||||
public class AskUtils {
|
||||
|
||||
public static String voteCountFormat(int voteCount) {
|
||||
String vote;
|
||||
if (voteCount >= 10000) {
|
||||
DecimalFormat df = new DecimalFormat("#.0万");
|
||||
vote = df.format(voteCount / 10000f);
|
||||
} else {
|
||||
vote = String.valueOf(voteCount);
|
||||
}
|
||||
return vote;
|
||||
}
|
||||
|
||||
public static String stripHtml(String htmlStr) {
|
||||
|
||||
|
||||
if (TextUtils.isEmpty(htmlStr)) return "";
|
||||
|
||||
String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式
|
||||
String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式
|
||||
String regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式
|
||||
|
||||
Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
|
||||
Matcher m_script = p_script.matcher(htmlStr);
|
||||
htmlStr = m_script.replaceAll(""); //过滤script标签
|
||||
|
||||
Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
|
||||
Matcher m_style = p_style.matcher(htmlStr);
|
||||
htmlStr = m_style.replaceAll(""); //过滤style标签
|
||||
|
||||
Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
|
||||
Matcher m_html = p_html.matcher(htmlStr);
|
||||
htmlStr = m_html.replaceAll(""); //过滤html标签
|
||||
|
||||
return htmlStr.trim(); //返回文本字符串
|
||||
}
|
||||
|
||||
}
|
||||
@ -9,6 +9,7 @@ import android.graphics.drawable.Drawable;
|
||||
import android.media.ExifInterface;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
@ -27,13 +28,16 @@ public class BitmapUtils {
|
||||
*/
|
||||
public static boolean savePicture(String newPath, String filePath) {
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
// options.inSampleSize = 2;
|
||||
Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
|
||||
options.inJustDecodeBounds = true;
|
||||
BitmapFactory.decodeFile(filePath, options);
|
||||
options.inSampleSize = 2;
|
||||
options.inJustDecodeBounds = false;
|
||||
|
||||
File file = new File(newPath);
|
||||
int quality = 80;
|
||||
do {
|
||||
try {
|
||||
Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
|
||||
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, bos);
|
||||
bos.flush();
|
||||
@ -51,6 +55,62 @@ public class BitmapUtils {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存图片
|
||||
*
|
||||
* @param newPath
|
||||
* @param filePath
|
||||
* @return
|
||||
*/
|
||||
public static boolean savePicture(String newPath, String filePath, int compressSize) {
|
||||
if (compressSize > new File(filePath).length()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
options.inJustDecodeBounds = true;
|
||||
BitmapFactory.decodeFile(filePath, options);
|
||||
options.inSampleSize = 2;
|
||||
options.inJustDecodeBounds = false;
|
||||
|
||||
Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
|
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, bos);
|
||||
float zoom = (float) Math.sqrt(compressSize / (float) bos.toByteArray().length);
|
||||
|
||||
Matrix matrix = new Matrix();
|
||||
matrix.setScale(zoom, zoom);
|
||||
Bitmap result = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
|
||||
bos.reset();
|
||||
bitmap.recycle();
|
||||
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 85, bos);
|
||||
while (bos.toByteArray().length > compressSize) {
|
||||
matrix.setScale(0.9f, 0.9f);
|
||||
|
||||
result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true);
|
||||
bos.reset();
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 85, bos);
|
||||
}
|
||||
|
||||
File file = new File(newPath);
|
||||
try {
|
||||
BufferedOutputStream fbos = new BufferedOutputStream(new FileOutputStream(file));
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 85, fbos);
|
||||
fbos.flush();
|
||||
fbos.close();
|
||||
|
||||
result.recycle();
|
||||
} catch (Exception e) {
|
||||
file.delete();
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据文件路径返回bitmap
|
||||
*
|
||||
|
||||
@ -5,6 +5,7 @@ import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.gh.gamecenter.LoginActivity;
|
||||
import com.gh.gamecenter.manager.UserManager;
|
||||
|
||||
/**
|
||||
* Created by khy on 28/06/17.
|
||||
@ -13,13 +14,13 @@ import com.gh.gamecenter.LoginActivity;
|
||||
public class CheckLoginUtils {
|
||||
|
||||
public static void checkLogin(final Context context, OnLoggenInListener listener) {
|
||||
String token = LoginUtils.getToken(context);
|
||||
if (TextUtils.isEmpty(token)) {
|
||||
// String token = LoginUtils.getToken(context);
|
||||
if (TextUtils.isEmpty(UserManager.getInstance().getToken())) {
|
||||
DialogUtils.showWarningDialog(context, "登录提示", "需要登录才能使用该功能喔!", "取消", "快速登录",
|
||||
new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
Intent intent = LoginActivity.getIntent(context, false);
|
||||
Intent intent = LoginActivity.getIntent(context);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}, null);
|
||||
@ -28,6 +29,9 @@ public class CheckLoginUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isLogin() {
|
||||
return !TextUtils.isEmpty(UserManager.getInstance().getToken());
|
||||
}
|
||||
|
||||
public interface OnLoggenInListener {
|
||||
void onLoggedIn();
|
||||
|
||||
@ -20,7 +20,7 @@ import rx.schedulers.Schedulers
|
||||
object CollectionUtils {
|
||||
|
||||
enum class CollectionType {
|
||||
toolkit, article
|
||||
toolkit, article, answer
|
||||
}
|
||||
|
||||
fun postCollection(context: Context, content: String, type: CollectionType, listener: OnCollectionListener) {
|
||||
@ -29,6 +29,7 @@ object CollectionUtils {
|
||||
val postCollection = when (type) {
|
||||
CollectionType.article -> RetrofitManager.getInstance(context).getApi().postCollectionArticle(body)
|
||||
CollectionType.toolkit -> RetrofitManager.getInstance(context).getApi().postCollectionTools(body)
|
||||
CollectionType.answer -> RetrofitManager.getInstance(context).getApi().postCollectionAnswer(content)
|
||||
}
|
||||
postCollection
|
||||
.subscribeOn(Schedulers.io())
|
||||
@ -37,6 +38,7 @@ object CollectionUtils {
|
||||
override fun onResponse(response: ResponseBody?) {
|
||||
super.onResponse(response)
|
||||
listener.onSuccess()
|
||||
if(type != CollectionType.answer)
|
||||
EventBus.getDefault().post(EBCollectionChanged(JSONObject(content).getString("_id"), true, type))
|
||||
}
|
||||
|
||||
@ -65,6 +67,7 @@ object CollectionUtils {
|
||||
when (type) {
|
||||
CollectionType.article -> postCollection = RetrofitManager.getInstance(context).getApi().deletaCollectionArticle(id)
|
||||
CollectionType.toolkit -> postCollection = RetrofitManager.getInstance(context).getApi().deleteCollectionTools(id)
|
||||
CollectionType.answer -> postCollection = RetrofitManager.getInstance(context).getApi().deleteCollectionAnswer(id)
|
||||
}
|
||||
postCollection
|
||||
.subscribeOn(Schedulers.io())
|
||||
@ -73,6 +76,7 @@ object CollectionUtils {
|
||||
override fun onResponse(response: ResponseBody?) {
|
||||
super.onResponse(response)
|
||||
listener.onSuccess()
|
||||
if(type != CollectionType.answer)
|
||||
EventBus.getDefault().post(EBCollectionChanged(id, false, type))
|
||||
}
|
||||
|
||||
@ -87,6 +91,9 @@ object CollectionUtils {
|
||||
val postCollection = when (type) {
|
||||
CollectionType.article -> RetrofitManager.getInstance(context).getApi().patchCollectionArticle(id)
|
||||
CollectionType.toolkit -> RetrofitManager.getInstance(context).getApi().patchCollectionTools(id)
|
||||
else -> {
|
||||
return
|
||||
}
|
||||
}
|
||||
postCollection
|
||||
.subscribeOn(Schedulers.io())
|
||||
|
||||
@ -19,6 +19,7 @@ import com.gh.gamecenter.adapter.viewholder.CommentViewHolder;
|
||||
import com.gh.gamecenter.entity.CommentEntity;
|
||||
import com.gh.gamecenter.entity.UserDataEntity;
|
||||
import com.gh.gamecenter.entity.UserInfoEntity;
|
||||
import com.gh.gamecenter.manager.UserManager;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.json.JSONException;
|
||||
@ -137,7 +138,7 @@ public class CommentUtils {
|
||||
|
||||
break;
|
||||
case "查看对话":
|
||||
context.startActivity(CommentDetailActivity.getCommentDetailIntent(context, commentEntity.getId()));
|
||||
context.startActivity(CommentDetailActivity.getIntent(context, commentEntity.getId()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -150,27 +151,27 @@ public class CommentUtils {
|
||||
|
||||
}
|
||||
|
||||
private static void showReportTypeDialog(final CommentEntity commentEntity, final Context mContext) {
|
||||
private static void showReportTypeDialog(final CommentEntity commentEntity, final Context context) {
|
||||
final String[] arrReportType = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息",
|
||||
"违法有害信息", "其它"};
|
||||
int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
|
||||
int widthPixels = context.getResources().getDisplayMetrics().widthPixels;
|
||||
|
||||
final Dialog reportTypeDialog = new Dialog(mContext);
|
||||
LinearLayout container = new LinearLayout(mContext);
|
||||
final Dialog reportTypeDialog = new Dialog(context);
|
||||
LinearLayout container = new LinearLayout(context);
|
||||
container.setOrientation(LinearLayout.VERTICAL);
|
||||
container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
|
||||
container.setPadding(0, DisplayUtils.dip2px(context, 12), 0, DisplayUtils.dip2px(context, 12));
|
||||
container.setBackgroundColor(Color.WHITE);
|
||||
|
||||
for (final String s : arrReportType) {
|
||||
TextView reportTypeTv = new TextView(mContext);
|
||||
TextView reportTypeTv = new TextView(context);
|
||||
reportTypeTv.setText(s);
|
||||
reportTypeTv.setTextSize(17);
|
||||
reportTypeTv.setTextColor(ContextCompat.getColor(mContext, R.color.title));
|
||||
reportTypeTv.setTextColor(ContextCompat.getColor(context, R.color.title));
|
||||
reportTypeTv.setBackgroundResource(R.drawable.textview_white_style);
|
||||
reportTypeTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9) / 10,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
reportTypeTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
|
||||
0, DisplayUtils.dip2px(mContext, 12));
|
||||
reportTypeTv.setPadding(DisplayUtils.dip2px(context, 20), DisplayUtils.dip2px(context, 12),
|
||||
0, DisplayUtils.dip2px(context, 12));
|
||||
container.addView(reportTypeTv);
|
||||
|
||||
reportTypeTv.setOnClickListener(new View.OnClickListener() {
|
||||
@ -184,16 +185,16 @@ public class CommentUtils {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
PostCommentUtils.addReportData(mContext, jsonObject.toString(),
|
||||
PostCommentUtils.addReportData(context, jsonObject.toString(),
|
||||
new PostCommentUtils.PostCommentListener() {
|
||||
@Override
|
||||
public void postSuccess(JSONObject response) {
|
||||
Utils.toast(mContext, "感谢您的举报");
|
||||
Utils.toast(context, "感谢您的举报");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postFailed(Throwable error) {
|
||||
Utils.toast(mContext, "举报失败,请检查网络设置");
|
||||
Utils.toast(context, "举报失败,请检查网络设置");
|
||||
}
|
||||
});
|
||||
reportTypeDialog.cancel();
|
||||
@ -283,7 +284,7 @@ public class CommentUtils {
|
||||
}
|
||||
|
||||
//检查是否是自身评论
|
||||
UserInfoEntity userInfo = LoginUtils.getUserInfo(mContext);
|
||||
UserInfoEntity userInfo = UserManager.getInstance().getUserInfoEntity();
|
||||
if (userDataEntity != null && userDataEntity.isCommentOwn() && userInfo != null) {
|
||||
holder.commentUserNameTv.setText(userInfo.getName());
|
||||
ImageUtils.Companion.display(holder.commentUserIconDv, userInfo.getIcon());
|
||||
|
||||
@ -27,7 +27,7 @@ object ConcernUtils {
|
||||
.postConcern(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ResponseBody>(){
|
||||
.subscribe(object : Response<ResponseBody>() {
|
||||
override fun onResponse(response: ResponseBody?) {
|
||||
super.onResponse(response)
|
||||
listener?.onSuccess()
|
||||
@ -46,7 +46,7 @@ object ConcernUtils {
|
||||
.deleteConcern(gameId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ResponseBody>(){
|
||||
.subscribe(object : Response<ResponseBody>() {
|
||||
override fun onResponse(response: ResponseBody?) {
|
||||
super.onResponse(response)
|
||||
listener?.onSuccess()
|
||||
@ -75,6 +75,44 @@ object ConcernUtils {
|
||||
})
|
||||
}
|
||||
|
||||
fun deleteConcernQuestions(context: Context, questionsId: String, listener: onConcernListener?) {
|
||||
RetrofitManager.getInstance(context).getApi()
|
||||
.deleteConcernQuestions(questionsId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ResponseBody>() {
|
||||
override fun onResponse(response: ResponseBody?) {
|
||||
super.onResponse(response)
|
||||
listener?.onSuccess()
|
||||
}
|
||||
|
||||
override fun onFailure(e: HttpException?) {
|
||||
super.onFailure(e)
|
||||
listener?.onError()
|
||||
AskErrorResponseUtils.errorResponseControl(context, e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun postConcernQuestions(context: Context, questionsId: String, listener: onConcernListener?) {
|
||||
RetrofitManager.getInstance(context).getApi()
|
||||
.postConcernQuestions(questionsId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ResponseBody>() {
|
||||
override fun onResponse(response: ResponseBody?) {
|
||||
super.onResponse(response)
|
||||
listener?.onSuccess()
|
||||
}
|
||||
|
||||
override fun onFailure(e: HttpException?) {
|
||||
super.onFailure(e)
|
||||
listener?.onError()
|
||||
AskErrorResponseUtils.errorResponseControl(context, e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
interface onConcernListener {
|
||||
fun onSuccess()
|
||||
|
||||
@ -3,17 +3,14 @@ package com.gh.common.util;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
import com.gh.gamecenter.db.info.ConcernInfo;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.entity.NewsDetailEntity;
|
||||
import com.gh.gamecenter.manager.ConcernManager;
|
||||
import com.gh.gamecenter.manager.DataCollectionManager;
|
||||
import com.gh.gamecenter.manager.PackageManager;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@ -118,18 +115,10 @@ public class DataCollectionUtils {
|
||||
|
||||
// 上传用户数据
|
||||
public static void uploadUser(Context context) {
|
||||
ConcernManager concernManager = new ConcernManager(context);
|
||||
ArrayList<String> concernList = new ArrayList<>();
|
||||
for (ConcernInfo entity : concernManager.getAllConcern()) {
|
||||
if (entity.isConcern()) {
|
||||
concernList.add(entity.getGameName());
|
||||
}
|
||||
}
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("type", Build.MODEL);
|
||||
map.put("system", Build.VERSION.SDK_INT + "=" + Build.VERSION.RELEASE);
|
||||
map.put("install", PackageManager.getInstalledList());
|
||||
map.put("concern", concernList);
|
||||
DataCollectionManager.upsert(context, "user", map);
|
||||
}
|
||||
|
||||
|
||||
@ -1,22 +1,15 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.view.DownloadDialog;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.DownloadManagerActivity;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.adapter.viewholder.DetailViewHolder;
|
||||
import com.gh.gamecenter.entity.ApkEntity;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.manager.PackageManager;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
import com.lightgame.download.FileUtils;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
/**
|
||||
* Created by khy on 27/06/17.
|
||||
@ -166,96 +159,5 @@ public class DetailDownloadUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnDetailDownloadClickListener implements View.OnClickListener {
|
||||
private DetailViewHolder mViewHolder;
|
||||
private GameEntity mGameEntity;
|
||||
private DownloadEntity mDownloadEntity;
|
||||
private String mEntrance;
|
||||
private String mName;
|
||||
private String mTitle;
|
||||
|
||||
public OnDetailDownloadClickListener(DetailViewHolder viewHolder, String entrance, String name, String title) {
|
||||
mViewHolder = viewHolder;
|
||||
mGameEntity = viewHolder.gameEntity;
|
||||
mDownloadEntity = viewHolder.downloadEntity;
|
||||
mEntrance = entrance;
|
||||
mName = name;
|
||||
mTitle = title;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == mViewHolder.downloadTv) {
|
||||
if (mGameEntity != null && !mGameEntity.getApk().isEmpty()) {
|
||||
if (mGameEntity.getApk().size() == 1) {
|
||||
if (NetworkUtils.isWifiConnected(mViewHolder.context)) {
|
||||
download();
|
||||
} else {
|
||||
DialogUtils.showDownloadDialog(mViewHolder.context, new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
download();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
DownloadDialog.getInstance(mViewHolder.context)
|
||||
.showPopupWindow(v, mGameEntity, StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), mName + ":" + mTitle);
|
||||
}
|
||||
} else {
|
||||
Utils.toast(mViewHolder.context, "稍等片刻~!游戏正在上传中...");
|
||||
}
|
||||
} else if (v == mViewHolder.downloadPb || v == mViewHolder.downloadPer) {
|
||||
String str = mViewHolder.downloadPer.getText().toString();
|
||||
if ("下载中".equals(str)) {
|
||||
Intent intent = DownloadManagerActivity.getDownloadMangerIntent(mViewHolder.context,
|
||||
mGameEntity.getApk().get(0).getUrl(), StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"));
|
||||
mViewHolder.context.startActivity(intent);
|
||||
} else if ("安装".equals(str)) {
|
||||
if (mDownloadEntity == null) {
|
||||
mDownloadEntity = DownloadManager.getInstance(mViewHolder.context).getDownloadEntityByUrl( mGameEntity.getApk().get(0).getUrl());
|
||||
}
|
||||
|
||||
if (mDownloadEntity != null) {
|
||||
PackageUtils.launchSetup(mViewHolder.context, mDownloadEntity.getPath());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void download() {
|
||||
String str = mViewHolder.downloadTv.getText().toString();
|
||||
if (str.contains("启动")) {
|
||||
DataUtils.onGameLaunchEvent(mViewHolder.context, mGameEntity.getName(), mGameEntity.getApk().get(0).getPlatform(), mName);
|
||||
|
||||
PackageUtils.launchApplicationByPackageName(mViewHolder.context, mGameEntity.getApk().get(0).getPackageName());
|
||||
} else {
|
||||
String method;
|
||||
if (str.contains("更新")) {
|
||||
method = "更新";
|
||||
} else if (str.contains("插件化")) {
|
||||
method = "插件化";
|
||||
} else {
|
||||
method = mViewHolder.context.getString(R.string.download);
|
||||
}
|
||||
ApkEntity apkEntity = mGameEntity.getApk().get(0);
|
||||
String msg = FileUtils.isCanDownload(mViewHolder.context, apkEntity.getSize());
|
||||
if (TextUtils.isEmpty(msg)) {
|
||||
DataUtils.onGameDownloadEvent(mViewHolder.context, mGameEntity.getName(), apkEntity.getPlatform(), StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), "下载开始");
|
||||
|
||||
DownloadManager.createDownload(mViewHolder.context, apkEntity, mGameEntity, method, StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), mName + ":" + mTitle);
|
||||
|
||||
mViewHolder.downloadTv.setVisibility(View.GONE);
|
||||
mViewHolder.downloadPb.setVisibility(View.VISIBLE);
|
||||
mViewHolder.downloadPer.setVisibility(View.VISIBLE);
|
||||
mViewHolder.downloadPb.setProgress(0);
|
||||
mViewHolder.downloadPer.setText("0.0%");
|
||||
|
||||
// DownloadManager.getInstance(mViewHolder.context).putStatus(apkEntity.getUrl(), "downloading");
|
||||
} else {
|
||||
Utils.toast(mViewHolder.context, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,6 +16,7 @@ import com.tencent.stat.StatConfig;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.LineNumberReader;
|
||||
@ -79,7 +80,7 @@ public class DeviceUtils {
|
||||
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
|
||||
LineNumberReader input = new LineNumberReader(ir);
|
||||
|
||||
for (; null != str;) {
|
||||
for (; null != str; ) {
|
||||
str = input.readLine();
|
||||
if (str != null) {
|
||||
macSerial = str.trim();// 去空格
|
||||
@ -93,9 +94,10 @@ public class DeviceUtils {
|
||||
try {
|
||||
return loadFileAsString("/sys/class/net/eth0/address")
|
||||
.toUpperCase().substring(0, 17);
|
||||
} catch (FileNotFoundException e) {
|
||||
// do nothing
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -124,7 +126,7 @@ public class DeviceUtils {
|
||||
}
|
||||
|
||||
|
||||
private static String getIPAddress(Context context) {
|
||||
public static String getIPAddress(Context context) {
|
||||
NetworkInfo info = ((ConnectivityManager) context
|
||||
.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
|
||||
if (info != null && info.isConnected()) {
|
||||
|
||||
@ -24,6 +24,7 @@ import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.gamecenter.KcSelectGameActivity;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.kuaichuan.WifiMgr;
|
||||
import com.halo.assistant.HaloApp;
|
||||
@ -55,7 +56,7 @@ public class DialogUtils {
|
||||
// 快传成绩单
|
||||
public static void showKuaiChuanResult(final Activity activity, Handler handler, int requestCode, final String picName) {
|
||||
|
||||
HaloApp.remove("FileInfo");
|
||||
HaloApp.remove(KcSelectGameActivity.KEY_FILE_INFO);
|
||||
|
||||
List<Map<String, String>> mapList = (List<Map<String, String>>) HaloApp.get("sendData", true);
|
||||
if (mapList == null || mapList.size() == 0) return;
|
||||
@ -69,8 +70,7 @@ public class DialogUtils {
|
||||
int filesSize = 0;
|
||||
int sendTime = 0;
|
||||
|
||||
View view = View.inflate(activity
|
||||
, R.layout.dialog_kuaichuan, null);
|
||||
View view = View.inflate(activity, R.layout.dialog_kuaichuan, null);
|
||||
final LinearLayout mShareLl = (LinearLayout) view.findViewById(R.id.kuaichuan_dialog_ll);
|
||||
final LinearLayout mShareBottomLl = (LinearLayout) view.findViewById(R.id.kuaichuan_dialog_share_rl);
|
||||
LinearLayout shareIconLl = (LinearLayout) view.findViewById(R.id.kuaichuan_icon_ll);
|
||||
@ -154,8 +154,8 @@ public class DialogUtils {
|
||||
sizeName = df.format(size) + "MB";
|
||||
}
|
||||
|
||||
if (sendTime == 0) {
|
||||
sendTime = 1;
|
||||
if (sendTime < 1000) { // 最少设置发送时间为1s(为了简易计算)
|
||||
sendTime = 1000;
|
||||
}
|
||||
|
||||
int i = (filesSize / 1024) / (sendTime / 1000);
|
||||
@ -192,7 +192,7 @@ public class DialogUtils {
|
||||
mShareLl.buildDrawingCache();
|
||||
Bitmap drawingCache = mShareLl.getDrawingCache();
|
||||
saveBitmap(drawingCache, activity, picName);
|
||||
MessageShareUtils.getInstance(activity).showShareWindows(mShareBottomLl, drawingCache, picName, 2);
|
||||
MessageShareUtils.getInstance(activity).showShareWindows(activity, mShareBottomLl, drawingCache, picName, 2);
|
||||
mShareBottomLl.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}, 200);
|
||||
@ -325,6 +325,10 @@ public class DialogUtils {
|
||||
}
|
||||
|
||||
public static void showWarningDialog(Context context, String title, CharSequence msg, final ConfirmListener listener) {
|
||||
//TODO fix this
|
||||
if (!(context instanceof Activity)) {
|
||||
return ;
|
||||
}
|
||||
showWarningDialog(context, title, msg, "取消", "确定", listener, null);
|
||||
}
|
||||
|
||||
@ -366,30 +370,6 @@ public class DialogUtils {
|
||||
showWarningDialog(context, "插件化安装", spanned, listener);
|
||||
}
|
||||
|
||||
public static void showDisclaimerDialog(Context context, String content) {
|
||||
final Dialog disclaimerDialog = new Dialog(context);
|
||||
View view = View.inflate(context, R.layout.dialog_disclaimer, null);
|
||||
|
||||
// TextView title = (TextView) view.findViewById(R.id.disclaimer_title);
|
||||
// title.setText("免责声明");
|
||||
|
||||
TextView message = (TextView) view.findViewById(R.id.disclaimer_message);
|
||||
Spanned spanned = Html.fromHtml(content);
|
||||
message.setText(spanned);
|
||||
|
||||
view.findViewById(R.id.disclaimer_confirm).setOnClickListener(
|
||||
new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
disclaimerDialog.dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
disclaimerDialog.setContentView(view);
|
||||
disclaimerDialog.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Material Design 风格弹窗
|
||||
*
|
||||
@ -401,46 +381,9 @@ public class DialogUtils {
|
||||
* @param cmListener 确认按钮监听
|
||||
* @param clListener 取消按钮监听
|
||||
*/
|
||||
|
||||
public static void showAlertDialog(Context context, String title, CharSequence message
|
||||
, String positive, String negative, final ConfirmListener cmListener, final CancelListener clListener) {
|
||||
|
||||
// AlertDialog alertDialog = new AlertDialog.Builder(context, R.style.GhAlertDialog)
|
||||
// .setTitle(title)
|
||||
// .setMessage(message)
|
||||
// .setPositiveButton(positive, new DialogInterface.OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(DialogInterface dialog, int which) {
|
||||
// if (cmListener != null) {
|
||||
// cmListener.onConfirm();
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .setNegativeButton(negative, new DialogInterface.OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(DialogInterface dialog, int which) {
|
||||
// if (clListener != null) {
|
||||
// clListener.onCancel();
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .create();
|
||||
// alertDialog.show();
|
||||
//
|
||||
// TextView mesage = (TextView) alertDialog.findViewById(android.R.id.message);
|
||||
// Button positiveBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE);
|
||||
// Button negativeBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_NEGATIVE);
|
||||
//
|
||||
// positiveBtn.setTextSize(14);
|
||||
// positiveBtn.setTextColor(ContextCompat.getColor(context, R.color.theme));
|
||||
// negativeBtn.setTextSize(14);
|
||||
// negativeBtn.setTextColor(ContextCompat.getColor(context, R.color.theme));
|
||||
// if (mesage != null) {
|
||||
// mesage.setTextSize(14);
|
||||
// mesage.setTextColor(ContextCompat.getColor(context, R.color.system_bar));
|
||||
// mesage.setLineSpacing(1.0f, 1.3f);
|
||||
// }
|
||||
|
||||
final Dialog dialog = new Dialog(context, R.style.GhAlertDialog);
|
||||
|
||||
View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_alert, null);
|
||||
@ -491,38 +434,8 @@ public class DialogUtils {
|
||||
* @param cmListener
|
||||
*/
|
||||
|
||||
// TODO: 8/10/17 将下面几个弹窗整理在一起
|
||||
public static void showAlertDialog(Context context, String title, CharSequence message
|
||||
, String positive, String negative, final ConfirmListener cmListener) {
|
||||
|
||||
// AlertDialog alertDialog = new AlertDialog.Builder(context, R.style.GhAlertDialog)
|
||||
// .setTitle(title)
|
||||
// .setMessage(message)
|
||||
// .setPositiveButton(positive, new DialogInterface.OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(DialogInterface dialog, int which) {
|
||||
// if (cmListener != null) {
|
||||
// cmListener.onConfirm();
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .setNegativeButton(negative, null)
|
||||
// .create();
|
||||
// alertDialog.show();
|
||||
//
|
||||
// TextView mesage = (TextView) alertDialog.findViewById(android.R.id.message);
|
||||
// Button positiveBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE);
|
||||
// Button negativeBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_NEGATIVE);
|
||||
//
|
||||
// positiveBtn.setTextSize(14);
|
||||
// positiveBtn.setTextColor(ContextCompat.getColor(context, R.color.theme));
|
||||
// negativeBtn.setTextSize(14);
|
||||
// negativeBtn.setTextColor(ContextCompat.getColor(context, R.color.hint));
|
||||
// if (mesage != null) {
|
||||
// mesage.setTextSize(14);
|
||||
// mesage.setTextColor(ContextCompat.getColor(context, R.color.system_bar));
|
||||
// mesage.setLineSpacing(1.0f, 1.3f);
|
||||
// }
|
||||
public static void showCancelAlertDialog(Context context, String title, CharSequence message
|
||||
, String positive, String negative, final ConfirmListener cmListener, final CancelListener clListener) {
|
||||
|
||||
final Dialog dialog = new Dialog(context, R.style.GhAlertDialog);
|
||||
|
||||
@ -541,6 +454,9 @@ public class DialogUtils {
|
||||
negativeTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (clListener != null) {
|
||||
clListener.onCancel();
|
||||
}
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
@ -568,48 +484,6 @@ public class DialogUtils {
|
||||
public static void showCancelListenerDialog(Context context, String title, CharSequence message
|
||||
, String positive, String negative, final ConfirmListener cmListener, final CancelListener clListener) {
|
||||
|
||||
// AlertDialog alertDialog = new AlertDialog.Builder(context, R.style.GhAlertDialog)
|
||||
// .setTitle(title)
|
||||
// .setMessage(message)
|
||||
// .setPositiveButton(positive, new DialogInterface.OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(DialogInterface dialog, int which) {
|
||||
// if (cmListener != null) {
|
||||
// cmListener.onConfirm();
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .setNegativeButton(negative, new DialogInterface.OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(DialogInterface dialog, int which) {
|
||||
// if (clListener != null) {
|
||||
// clListener.onCancel();
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||
// @Override
|
||||
// public void onCancel(DialogInterface dialogInterface) {
|
||||
// clListener.onCancel();
|
||||
// }
|
||||
// })
|
||||
// .create();
|
||||
//
|
||||
// alertDialog.show();
|
||||
//
|
||||
// TextView mesage = (TextView) alertDialog.findViewById(android.R.id.message);
|
||||
// Button positiveBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE);
|
||||
// Button negativeBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_NEGATIVE);
|
||||
//
|
||||
// positiveBtn.setTextSize(14);
|
||||
// positiveBtn.setTextColor(ContextCompat.getColor(context, R.color.theme));
|
||||
// negativeBtn.setTextSize(14);
|
||||
// negativeBtn.setTextColor(ContextCompat.getColor(context, R.color.hint));
|
||||
// if (mesage != null) {
|
||||
// mesage.setTextSize(14);
|
||||
// mesage.setTextColor(ContextCompat.getColor(context, R.color.system_bar));
|
||||
// mesage.setLineSpacing(1.0f, 1.3f);
|
||||
// }
|
||||
|
||||
final Dialog dialog = new Dialog(context, R.style.GhAlertDialog);
|
||||
|
||||
|
||||
@ -13,6 +13,7 @@ import android.widget.TextView;
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.view.DownloadDialog;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.DataUtils;
|
||||
import com.gh.gamecenter.DownloadManagerActivity;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.adapter.viewholder.GameViewHolder;
|
||||
@ -60,7 +61,7 @@ public class DownloadItemUtils {
|
||||
gameEntity.setEntryMap(entryMap);
|
||||
}
|
||||
entryMap.put(platform, downloadEntity);
|
||||
if (!"pause".equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
|
||||
if (!DownloadStatus.pause.equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
|
||||
adapter.notifyItemChanged(index);
|
||||
}
|
||||
} else {
|
||||
@ -84,7 +85,7 @@ public class DownloadItemUtils {
|
||||
gameEntity.setEntryMap(entryMap);
|
||||
}
|
||||
entryMap.put(platform, downloadEntity);
|
||||
if (!"pause".equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
|
||||
if (!DownloadStatus.pause.equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
|
||||
adapter.notifyItemChanged(index);
|
||||
}
|
||||
}
|
||||
@ -230,7 +231,7 @@ public class DownloadItemUtils {
|
||||
|
||||
DownloadStatus status = downloadEntity.getStatus();
|
||||
if (status.equals(DownloadStatus.downloading)) {
|
||||
if (!"pause".equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
|
||||
if (!DownloadStatus.pause.equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
|
||||
holder.gameProgressbar.setProgress((int) (downloadEntity.getPercent() * 10));
|
||||
if (isShowPlatform && platform != null) {
|
||||
holder.gameDownloadSpeed.setText(String.format("%s - %s(剩%s)", platform,
|
||||
|
||||
@ -6,7 +6,9 @@ import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.gh.gamecenter.MainActivity;
|
||||
import com.gh.gamecenter.NormalActivity;
|
||||
import com.gh.gamecenter.SplashScreenActivity;
|
||||
import com.gh.gamecenter.normal.NormalFragment;
|
||||
|
||||
/**
|
||||
* @author CsHeng
|
||||
@ -28,6 +30,8 @@ public class EntranceUtils {
|
||||
public static final String HOST_WEB = "web";
|
||||
public static final String HOST_DOWNLOAD = "download";
|
||||
public static final String HOST_SUGGESTION = "suggestion";
|
||||
public static final String HOST_ANSWER = "answer";
|
||||
public static final String HOST_QUESTION = "question";
|
||||
public static final String KEY_DATA = "data";
|
||||
public static final String KEY_TYPE = "type";
|
||||
public static final String KEY_NAME = "name";
|
||||
@ -56,6 +60,11 @@ public class EntranceUtils {
|
||||
public static final String KEY_PROLIST = "provinceList";
|
||||
public static final String KEY_ORDER = "order";
|
||||
public static final String KEY_TAGTYPE = "tagType";
|
||||
public static final String KEY_ANSWER_ID = "answerId";
|
||||
public static final String KEY_ANSWER_CONTENT = "answerContent";
|
||||
public static final String KEY_QUESTIONS_ID = "questionsId";
|
||||
public static final String KEY_QUESTIONS_TITLE = "questionsTitle";
|
||||
public static final String KEY_QUESTIONS_PATCH = "questionsPatch";
|
||||
|
||||
public static void jumpActivity(Context context, Bundle bundle) {
|
||||
|
||||
@ -67,10 +76,14 @@ public class EntranceUtils {
|
||||
if (!TextUtils.isEmpty(to)) {
|
||||
Class<?> clazz = ClassUtils.forName(to);
|
||||
if (clazz != null) {
|
||||
Intent intent1 = new Intent(context, clazz);
|
||||
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent1.putExtra(KEY_DATA, bundle);
|
||||
context.startActivity(intent1);
|
||||
if (NormalFragment.class.isAssignableFrom(clazz)) { // todo
|
||||
NormalActivity.startFragment(context, (Class<? extends NormalFragment>) clazz, bundle);
|
||||
} else {
|
||||
Intent intent1 = new Intent(context, clazz);
|
||||
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent1.putExtra(KEY_DATA, bundle);
|
||||
context.startActivity(intent1);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -6,6 +6,8 @@ import android.content.Intent;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.login.LoginTag;
|
||||
import com.lightgame.utils.RuntimeUtils;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.sina.weibo.sdk.WbSdk;
|
||||
@ -89,7 +91,7 @@ public class GetLoginDataUtils {
|
||||
content.put("access_token_expire", Utils.getTime(mContext) + jsonObject.getLong("expires_in"));
|
||||
content.put("access_token", jsonObject.getString("access_token"));
|
||||
if (mLoginListener != null) {
|
||||
mLoginListener.OnLoginData(content, LoginUtils.LoginTag.qq);// QQ 登录回调
|
||||
mLoginListener.OnLoginData(content, LoginTag.qq);// QQ 登录回调
|
||||
}
|
||||
|
||||
} catch (JSONException e) {
|
||||
@ -161,7 +163,7 @@ public class GetLoginDataUtils {
|
||||
|
||||
SendAuth.Req req = new SendAuth.Req();
|
||||
req.scope = "snsapi_userinfo";
|
||||
req.state = "光环助手";
|
||||
req.state = mContext.getString(R.string.app_name);
|
||||
boolean b = mIWXAPI.sendReq(req);
|
||||
Utils.log(GetLoginDataUtils.class.getSimpleName(), "微信注册状态::" + register + "\n 发送状态::" + b);
|
||||
if (!register || !b) {
|
||||
@ -171,7 +173,7 @@ public class GetLoginDataUtils {
|
||||
}
|
||||
|
||||
public void WCLofinCallBack(JSONObject content) {
|
||||
mLoginListener.OnLoginData(content, LoginUtils.LoginTag.wechat);
|
||||
mLoginListener.OnLoginData(content, LoginTag.wechat);
|
||||
}
|
||||
|
||||
public void onWeiboCallback(int requestCode, int resultCode, Intent data) {
|
||||
@ -219,7 +221,7 @@ public class GetLoginDataUtils {
|
||||
content.put("refresh_token", token.getRefreshToken());
|
||||
// content.put("refresh_token_expire", Utils.getTime(mContext) + 86400 * 30); // refresh_token 有效期30天
|
||||
if (mLoginListener != null) {
|
||||
mLoginListener.OnLoginData(content, LoginUtils.LoginTag.weibo);// 微博 登录回调
|
||||
mLoginListener.OnLoginData(content, LoginTag.weibo);// 微博 登录回调
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
@ -293,7 +295,7 @@ public class GetLoginDataUtils {
|
||||
|
||||
// 登录成功回调
|
||||
public interface OnLoginDataListener {
|
||||
void OnLoginData(JSONObject content, LoginUtils.LoginTag loginTag);
|
||||
void OnLoginData(JSONObject content, LoginTag loginTag);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -18,12 +18,25 @@ import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber
|
||||
import com.facebook.imagepipeline.image.ImageInfo
|
||||
import com.facebook.imagepipeline.request.ImageRequest
|
||||
import com.facebook.imagepipeline.request.ImageRequestBuilder
|
||||
import com.gh.common.constant.Config
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.manager.UserManager
|
||||
import com.gh.gamecenter.retrofit.Response
|
||||
import com.lightgame.download.FileUtils
|
||||
import com.lightgame.utils.Utils
|
||||
import org.json.JSONObject
|
||||
import retrofit2.HttpException
|
||||
import rx.Observable
|
||||
import rx.Observer
|
||||
import rx.android.schedulers.AndroidSchedulers
|
||||
import rx.schedulers.Schedulers
|
||||
import java.io.File
|
||||
import java.net.HttpURLConnection
|
||||
|
||||
class ImageUtils private constructor() {
|
||||
|
||||
// 自适应图片宽高
|
||||
fun display(simpleDraweeView: SimpleDraweeView, url: String, width: Int) {
|
||||
fun display(simpleDraweeView: SimpleDraweeView, url: String?, width: Int) {
|
||||
val listener = object : BaseControllerListener<ImageInfo>() {
|
||||
override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) {
|
||||
if (imageInfo == null) {
|
||||
@ -43,7 +56,7 @@ class ImageUtils private constructor() {
|
||||
|
||||
// 设置缩放类型,设置按压状态下的叠加图
|
||||
fun display(resources: Resources, simpleDraweeView: SimpleDraweeView,
|
||||
scaleType: ScalingUtils.ScaleType, url: String) {
|
||||
scaleType: ScalingUtils.ScaleType, url: String?) {
|
||||
val context = simpleDraweeView.context
|
||||
simpleDraweeView.hierarchy = GenericDraweeHierarchyBuilder(resources)
|
||||
.setFadeDuration(500)
|
||||
@ -57,7 +70,7 @@ class ImageUtils private constructor() {
|
||||
}
|
||||
|
||||
// 设置占位符
|
||||
fun display(resources: Resources, simpleDraweeView: SimpleDraweeView, url: String, placeholderImage: Int) {
|
||||
fun display(resources: Resources, simpleDraweeView: SimpleDraweeView, url: String?, placeholderImage: Int) {
|
||||
val context = simpleDraweeView.context
|
||||
simpleDraweeView.hierarchy = GenericDraweeHierarchyBuilder(resources)
|
||||
.setFadeDuration(500)
|
||||
@ -70,7 +83,7 @@ class ImageUtils private constructor() {
|
||||
}
|
||||
|
||||
// 图片下载监听和设置低高分辨率图片
|
||||
fun display(simpleDraweeView: SimpleDraweeView, url: String, lowUrl: String,
|
||||
fun display(simpleDraweeView: SimpleDraweeView, url: String?, lowUrl: String?,
|
||||
listener: ControllerListener<in ImageInfo>) {
|
||||
simpleDraweeView.controller = Fresco.newDraweeControllerBuilder()
|
||||
.setImageRequest(ImageRequest.fromUri(url))
|
||||
@ -80,7 +93,7 @@ class ImageUtils private constructor() {
|
||||
}
|
||||
|
||||
// 获取bitmap
|
||||
fun display(context: Context, url: String, dataSubscriber: BaseBitmapDataSubscriber) {
|
||||
fun display(context: Context, url: String?, dataSubscriber: BaseBitmapDataSubscriber) {
|
||||
val imageRequest = ImageRequestBuilder
|
||||
.newBuilderWithSource(Uri.parse(url))
|
||||
.setProgressiveRenderingEnabled(true)
|
||||
@ -92,6 +105,7 @@ class ImageUtils private constructor() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val RESPONSE403: String = "RESPONSE403"
|
||||
|
||||
fun getInstance(): ImageUtils {
|
||||
return Inner.anotherSingle
|
||||
@ -102,15 +116,98 @@ class ImageUtils private constructor() {
|
||||
}
|
||||
|
||||
fun display(simpleDraweeView: SimpleDraweeView, url: String?) {
|
||||
// if (url.startsWith("http://image.ghzs666.com") && url.endsWith(".jpg")) {
|
||||
// url = url + "?x-oss-process=image/format,webp";
|
||||
// }
|
||||
simpleDraweeView.setImageURI(url)
|
||||
}
|
||||
|
||||
fun display(draweeView: SimpleDraweeView, @DrawableRes res: Int) {
|
||||
fun display(draweeView: SimpleDraweeView, @DrawableRes res: Int?) {
|
||||
draweeView.setImageURI("res:///" + res)
|
||||
}
|
||||
|
||||
fun postImageArr(context: Context, imgArr: List<String>, listener: OnPostArrImageListener) {
|
||||
val imgMap: HashMap<String, String> = HashMap()
|
||||
|
||||
Observable.create(Observable.OnSubscribe<JSONObject> { subscriber ->
|
||||
var path: String
|
||||
var index = 0
|
||||
for (s in imgArr) {
|
||||
path = context.getCacheDir().path + File.separator + System.currentTimeMillis() + index + ".jpg"
|
||||
if (BitmapUtils.savePicture(path, s, 200000)) {
|
||||
subscriber.onNext(FileUtils.uploadFile(Config.API_HOST + "support/upload/img?type=community", path, s, UserManager.getInstance().token))
|
||||
index++
|
||||
} else {
|
||||
subscriber.onNext(FileUtils.uploadFile(Config.API_HOST + "support/upload/img?type=community", s, s, UserManager.getInstance().token))
|
||||
}
|
||||
}
|
||||
subscriber.onCompleted()
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Observer<JSONObject> {
|
||||
override fun onCompleted() {
|
||||
Utils.log("图片上传完成")
|
||||
listener.postSuccess(imgMap)
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
Utils.log("图片上传失败" + e.toString())
|
||||
listener.postError()
|
||||
}
|
||||
|
||||
override fun onNext(result: JSONObject?) {
|
||||
if (result != null) {
|
||||
try {
|
||||
val statusCode = result.getInt("statusCode")
|
||||
if (statusCode == HttpURLConnection.HTTP_OK) {
|
||||
imgMap.put(result.getString("realPath"), result.getString("icon"))
|
||||
} else if (statusCode == 403) {
|
||||
imgMap.put(result.getString("realPath"), RESPONSE403)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun postImage(context: Context, picturePath: String, listener: OnPostImageListener) {
|
||||
Observable.create(Observable.OnSubscribe<JSONObject> { subscriber ->
|
||||
val path = context.getCacheDir().path + File.separator + System.currentTimeMillis() + ".jpg"
|
||||
if (BitmapUtils.savePicture(path, picturePath, 200000)) {
|
||||
subscriber.onNext(FileUtils.uploadFile(Config.API_HOST + "support/upload/img?type=community", path, UserManager.getInstance().token))
|
||||
} else {
|
||||
subscriber.onNext(FileUtils.uploadFile(Config.API_HOST + "support/upload/img?type=community", picturePath, UserManager.getInstance().token))
|
||||
}
|
||||
}).subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<JSONObject>() {
|
||||
override fun onResponse(response: JSONObject?) {
|
||||
listener.postSuccess(response)
|
||||
}
|
||||
|
||||
override fun onFailure(e: HttpException) {
|
||||
listener.postError()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
interface OnPostImageListener {
|
||||
fun postSuccess(response: JSONObject?)
|
||||
|
||||
fun postError()
|
||||
}
|
||||
|
||||
interface OnPostArrImageListener {
|
||||
/**
|
||||
* key: 图片本地路径
|
||||
* value: 图片提交成功后的链接
|
||||
*/
|
||||
fun postSuccess(imgMap: HashMap<String, String>)
|
||||
|
||||
fun postError()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,8 +7,11 @@ import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.eventbus.EBPackage;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
@ -59,7 +62,17 @@ public class InstallUtils {
|
||||
keys.add(packageName);
|
||||
} else if (list.contains(packageName)) {
|
||||
keys.add(packageName);
|
||||
EventBus.getDefault().post(new EBPackage("安装", packageName));
|
||||
|
||||
DownloadEntity downloadEntity = DownloadManager.getInstance(context).getDownloadEntityByPackageName(packageName);
|
||||
String installVersion = PackageUtils.getVersionByPackage(context, packageName);
|
||||
if (!TextUtils.isEmpty(installVersion) && downloadEntity != null &&
|
||||
installVersion.equals(downloadEntity.getVersionName())) {
|
||||
if (!downloadEntity.isPluggable() || PackageUtils.isSignature(context, packageName)) {
|
||||
EventBus.getDefault().post(new EBPackage("安装", packageName));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
for (String key : keys) {
|
||||
@ -72,7 +85,7 @@ public class InstallUtils {
|
||||
long time = uninstallMap.get(packageName);
|
||||
if (System.currentTimeMillis() - time >= MAX_TIME) {
|
||||
keys.add(packageName);
|
||||
} else if (list.contains(packageName)) {
|
||||
} else if (!list.contains(packageName)) {
|
||||
keys.add(packageName);
|
||||
EventBus.getDefault().post(new EBPackage("卸载", packageName));
|
||||
}
|
||||
|
||||
@ -281,7 +281,6 @@ public class LibaoUtils {
|
||||
if (loadingDialog != null) loadingDialog.dismiss();
|
||||
|
||||
JSONObject responseBody = (JSONObject) response;
|
||||
Utils.log("postLibaoTao=====" + responseBody);
|
||||
String libaoCode = null;
|
||||
try {
|
||||
libaoCode = responseBody.getString("code");
|
||||
@ -419,7 +418,6 @@ public class LibaoUtils {
|
||||
if (loadingDialog != null) loadingDialog.dismiss();
|
||||
|
||||
JSONObject responseBody = (JSONObject) response;
|
||||
Utils.log("postLibaoLing=====" + responseBody);
|
||||
String libaoCode = null;
|
||||
try {
|
||||
libaoCode = responseBody.getString("code");
|
||||
@ -472,7 +470,6 @@ public class LibaoUtils {
|
||||
String string = exception.response().errorBody().string();
|
||||
JSONObject errorJson = new JSONObject(string);
|
||||
String detail = errorJson.getString("detail");
|
||||
Utils.log("=======detail ::" + errorJson.toString());
|
||||
switch (detail) {
|
||||
case "coming":
|
||||
Utils.toast(context, "礼包领取时间未开始");
|
||||
|
||||
@ -1,42 +1,19 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Looper;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.gh.common.constant.Constants;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.entity.LoginResponseEntity;
|
||||
import com.gh.gamecenter.entity.UserInfoEntity;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
import com.gh.gamecenter.kuaichuan.Constant;
|
||||
import com.gh.gamecenter.manager.RefreshTokenManager;
|
||||
import com.gh.gamecenter.personal.PersonalFragment;
|
||||
import com.gh.gamecenter.retrofit.JSONObjectResponse;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.HttpException;
|
||||
import rx.Observable;
|
||||
import rx.Scheduler;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
@ -44,55 +21,52 @@ import rx.schedulers.Schedulers;
|
||||
* Created by khy on 7/07/17.
|
||||
*/
|
||||
|
||||
// TODO: 1/12/17 逐步整理 删除
|
||||
public class LoginUtils {
|
||||
|
||||
public enum LoginTag {
|
||||
qq, wechat, weibo, phone, refresh, oldUserPhone
|
||||
}
|
||||
|
||||
public static void checkPhoneNum(final Context context, final String phoneName, final onCaptchaCallBackListener listener) { // 老用户登录检查手机是否登录过
|
||||
RetrofitManager.getInstance(context).getApi()
|
||||
.checkPhoneNum(phoneName)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(ResponseBody response) {
|
||||
super.onResponse(response);
|
||||
try {
|
||||
JSONObject content = new JSONObject(response.string());
|
||||
String status = content.getString("status");
|
||||
if ("ok".equals(status)) {
|
||||
getPhoneCaptcha(context, phoneName, listener);
|
||||
} else {
|
||||
DialogUtils.showWarningDialog(context, null, "手机号已存在,请使用未登录过的手机号,以保证数据正常同步到新账号上"
|
||||
, null, "我知道了", null, null);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
if (e == null) {
|
||||
Utils.toast(context, "请检查网络是否可用");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
ResponseBody responseBody = e.response().errorBody();
|
||||
String string = responseBody.string();
|
||||
JSONObject content = new JSONObject(string);
|
||||
int code = content.getInt("code");
|
||||
outputErrorHint(context, code);
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
// public static void checkPhoneNum(final Context context, final String phoneName, final onCaptchaCallBackListener listener) { // 老用户登录检查手机是否登录过
|
||||
// RetrofitManager.getInstance(context).getApi()
|
||||
// .checkPhoneNum(phoneName)
|
||||
// .subscribeOn(Schedulers.io())
|
||||
// .observeOn(AndroidSchedulers.mainThread())
|
||||
// .subscribe(new Response<ResponseBody>() {
|
||||
// @Override
|
||||
// public void onResponse(ResponseBody response) {
|
||||
// super.onResponse(response);
|
||||
// try {
|
||||
// JSONObject content = new JSONObject(response.string());
|
||||
// String status = content.getString("status");
|
||||
// if ("ok".equals(status)) {
|
||||
// getPhoneCaptcha(context, phoneName, listener);
|
||||
// } else {
|
||||
// DialogUtils.showWarningDialog(context, null, "手机号已存在,请使用未登录过的手机号,以保证数据正常同步到新账号上"
|
||||
// , null, "我知道了", null, null);
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onFailure(HttpException e) {
|
||||
// super.onFailure(e);
|
||||
// if (e == null) {
|
||||
// Utils.toast(context, "请检查网络是否可用");
|
||||
// return;
|
||||
// }
|
||||
// try {
|
||||
// ResponseBody responseBody = e.response().errorBody();
|
||||
// String string = responseBody.string();
|
||||
// JSONObject content = new JSONObject(string);
|
||||
// int code = content.getInt("code");
|
||||
// outputErrorHint(context, code);
|
||||
// } catch (Exception e1) {
|
||||
// e1.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// }
|
||||
|
||||
// 获取验证码
|
||||
public static void getPhoneCaptcha(final Context context, String phoneNum, final onCaptchaCallBackListener listener) {
|
||||
@ -116,6 +90,7 @@ public class LoginUtils {
|
||||
super.onResponse(response);
|
||||
try {
|
||||
listener.onCaptcha(response.getString("service_id"));
|
||||
Utils.toast(context, "验证码短信已发送,请注意查收");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -143,118 +118,6 @@ public class LoginUtils {
|
||||
}
|
||||
|
||||
|
||||
// 登录前,做好body判断
|
||||
public static void login(final Context context, final JSONObject content, final LoginTag loginTag,
|
||||
final onLoginCallBackListener listener) {
|
||||
|
||||
Observable<LoginResponseEntity> observable = null;
|
||||
String userToken = null;
|
||||
|
||||
try {
|
||||
JSONObject device = DeviceUtils.getLoginDevice(context.getApplicationContext());
|
||||
content.put("device", device);
|
||||
RequestBody body = RequestBody.create(MediaType.parse("application/json"), content.toString());
|
||||
|
||||
if (loginTag == LoginTag.weibo) {
|
||||
userToken = content.getString("uid");
|
||||
observable = RetrofitManager.getInstance(context).getUsersea().loginByWeibo(body);
|
||||
} else if (loginTag == LoginTag.qq) {
|
||||
userToken = content.getString("openid");
|
||||
observable = RetrofitManager.getInstance(context).getUsersea().loginByQQ(body);
|
||||
} else if (loginTag == LoginTag.wechat) {
|
||||
userToken = content.getString("openid");
|
||||
observable = RetrofitManager.getInstance(context).getUsersea().loginByWechat(body);
|
||||
} else if (loginTag == LoginTag.phone || loginTag == LoginTag.oldUserPhone) {
|
||||
userToken = content.getString("mobile");
|
||||
observable = RetrofitManager.getInstance(context).getUsersea().loginByMobile(body);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (observable == null) return;
|
||||
|
||||
final String finalUserToken = userToken;
|
||||
observable
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<LoginResponseEntity>() {
|
||||
@Override
|
||||
public void onResponse(LoginResponseEntity response) {
|
||||
super.onResponse(response);
|
||||
if (loginTag.equals(LoginTag.phone) || loginTag.equals(LoginTag.oldUserPhone)) {
|
||||
try {
|
||||
response.setLoginType(content.getString("mobile"));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
response.setLoginType(loginTag.name());
|
||||
}
|
||||
response.setUserToken(finalUserToken);
|
||||
saveLoginToken(context, response);
|
||||
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String syncDeviceID = sp.getString("syncDeviceID", null);
|
||||
if (!TextUtils.isEmpty(syncDeviceID)) {
|
||||
syncUserData(context, syncDeviceID, listener, loginTag);
|
||||
sp.edit().putString("syncDeviceID", null).apply(); // 清空
|
||||
} else {
|
||||
getUserData(context, false, listener, loginTag);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
if (listener != null) {
|
||||
listener.onLoginFailure();
|
||||
}
|
||||
try {
|
||||
ResponseBody responseBody = e.response().errorBody();
|
||||
String string = responseBody.string();
|
||||
JSONObject content = new JSONObject(string);
|
||||
int code = content.getInt("code");
|
||||
|
||||
if (loginTag.equals(LoginTag.phone)) {
|
||||
outputErrorHint(context, code);
|
||||
} else {
|
||||
if (loginTag.equals(LoginTag.qq)) {
|
||||
GetLoginDataUtils.getInstance(context).QQLogout();
|
||||
}
|
||||
Utils.toast(context, context.getString(R.string.login_failure_hint));
|
||||
}
|
||||
} catch (Exception e1) {
|
||||
Utils.toast(context, context.getString(R.string.login_failure_hint));
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void syncUserData(final Context context, String syncDeviceID,
|
||||
final onLoginCallBackListener listener,
|
||||
final LoginTag loginTag) {
|
||||
|
||||
String loginType;
|
||||
if (LoginTag.phone.equals(loginTag)) {
|
||||
loginType = "mobile";
|
||||
} else {
|
||||
loginType = loginTag.toString();
|
||||
}
|
||||
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("device_id", syncDeviceID);
|
||||
map.put("login_type", loginType);
|
||||
RequestBody body = RequestBody.create(MediaType.parse("application/json"), new JSONObject(map).toString());
|
||||
RetrofitManager.getInstance(context).getApi().syncUserData(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(userInfoResponse(context, loginTag, listener));
|
||||
}
|
||||
|
||||
// 注销登录
|
||||
public static void logout(final Context context, final OnLogoutListener listener) {
|
||||
|
||||
@ -279,255 +142,7 @@ public class LoginUtils {
|
||||
});
|
||||
}
|
||||
|
||||
// 清除本地用户相关信息
|
||||
public static void cleanUserData(Context context) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor edit = sp.edit();
|
||||
edit.putString("user_info", null);
|
||||
edit.putString("login_token", null);
|
||||
edit.apply();
|
||||
|
||||
GetLoginDataUtils.getInstance(context).QQLogout();
|
||||
|
||||
EventBus.getDefault().post(new EBReuse(PersonalFragment.LOGOUT_TAG));
|
||||
}
|
||||
|
||||
// 检查本地是否有缓存token,有则马上登录
|
||||
public static void checkLogin(Context context, onLoginCallBackListener listener) {
|
||||
LoginResponseEntity loginToken = getLoginToken(context);
|
||||
|
||||
if (loginToken != null && loginToken.getAccessToken() != null) {
|
||||
LoginResponseEntity.AccessToken accessToken = loginToken.getAccessToken();
|
||||
Long accessExpire = accessToken.getExpire();
|
||||
if (false && accessExpire != null && accessExpire > Utils.getTime(context)) {
|
||||
getUserData(context, false, listener, null);
|
||||
} else {
|
||||
LoginResponseEntity.RefreshToken refreshToken = loginToken.getRefreshToken();
|
||||
Long refreshExpire = refreshToken.getExpire();
|
||||
if (refreshExpire != null && refreshExpire > Utils.getTime(context)) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("refresh_token", refreshToken.getValue());
|
||||
RefreshTokenManager.getInstance().refreshToken(context, false, new JSONObject(params), listener);
|
||||
} else {
|
||||
// 重新登录
|
||||
cleanUserData(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Response<UserInfoEntity> userInfoResponse(final Context context,
|
||||
final LoginTag loginTag,
|
||||
final onLoginCallBackListener listener) {
|
||||
return new Response<UserInfoEntity>() {
|
||||
@Override
|
||||
public void onResponse(UserInfoEntity response) {
|
||||
super.onResponse(response);
|
||||
|
||||
saveUserInfo(context, response);
|
||||
if (listener != null) {
|
||||
listener.onLogin(response, loginTag);
|
||||
}
|
||||
|
||||
if (loginTag != null && !LoginTag.refresh.equals(loginTag)) {
|
||||
Utils.toast(context, "登录成功");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
super.onError(e);
|
||||
Utils.log("=====eeee::" + e.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
if (listener != null) {
|
||||
listener.onLoginFailure();
|
||||
}
|
||||
if (loginTag != null) {
|
||||
Utils.toast(context, context.getString(R.string.login_failure_hint));
|
||||
}
|
||||
if (loginTag != null && loginTag.equals(LoginTag.qq)) {
|
||||
GetLoginDataUtils.getInstance(context).QQLogout();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
public static void getUserData(final Context context, boolean isRunMainThread, final onLoginCallBackListener listener, final LoginTag loginTag) {
|
||||
|
||||
Observable<UserInfoEntity> observable;
|
||||
if (isRunMainThread) {
|
||||
observable = RetrofitManager.getInstance(context)
|
||||
.getApi()
|
||||
.getUserInfo();
|
||||
} else {
|
||||
observable = RetrofitManager.getInstance(context)
|
||||
.getApi()
|
||||
.getUserInfo()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
observable.subscribe(userInfoResponse(context, loginTag, listener));
|
||||
}
|
||||
|
||||
// 获取本地缓存用户信息
|
||||
public static UserInfoEntity getUserInfo(Context context) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String loginData = sp.getString("user_info", null);
|
||||
if (!TextUtils.isEmpty(loginData)) {
|
||||
Type listType = new TypeToken<UserInfoEntity>() {
|
||||
}.getType();
|
||||
return new Gson().fromJson(loginData, listType);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// 在本地缓存用户信息
|
||||
public static void saveUserInfo(Context context, UserInfoEntity entity) {
|
||||
if (entity != null) {
|
||||
String region = entity.getRegion();
|
||||
if (region != null && region.contains("中国")) { // 转换地区格式
|
||||
String replace = region.replace("中国 ", "");
|
||||
entity.setRegion(replace);
|
||||
}
|
||||
|
||||
String s = new Gson().toJson(entity);
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor edit = sp.edit();
|
||||
edit.putString("user_info", s);
|
||||
edit.apply();
|
||||
}
|
||||
}
|
||||
|
||||
//获取本地缓存用户token
|
||||
public static LoginResponseEntity getLoginToken(Context context) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String loginData = sp.getString("login_token", null);
|
||||
if (!TextUtils.isEmpty(loginData)) {
|
||||
Type listType = new TypeToken<LoginResponseEntity>() {
|
||||
}.getType();
|
||||
return new Gson().fromJson(loginData, listType);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//获取本地缓存用户token
|
||||
public static String getToken(Context context) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String loginData = sp.getString("login_token", null);
|
||||
if (!TextUtils.isEmpty(loginData)) {
|
||||
Type listType = new TypeToken<LoginResponseEntity>() {
|
||||
}.getType();
|
||||
LoginResponseEntity entity = new Gson().fromJson(loginData, listType);
|
||||
if (entity != null && entity.getAccessToken() != null) {
|
||||
return entity.getAccessToken().getValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 在本地缓存用户token
|
||||
public static void saveLoginToken(Context context, LoginResponseEntity entity) {
|
||||
if (entity != null) {
|
||||
if (TextUtils.isEmpty(entity.getLoginType())) {
|
||||
LoginResponseEntity loginToken = getLoginToken(context);
|
||||
if (loginToken != null) {
|
||||
entity.setLoginType(loginToken.getLoginType());
|
||||
}
|
||||
}
|
||||
|
||||
String s = new Gson().toJson(entity);
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor edit = sp.edit();
|
||||
edit.putString("login_token", s);
|
||||
edit.apply();
|
||||
}
|
||||
}
|
||||
|
||||
//更改用户信息
|
||||
public static void changeUserInfo(final onChangeUserInfoListener listener, final Context context,
|
||||
final String content, final String editType) {
|
||||
final UserInfoEntity entity = getUserInfo(context);
|
||||
if (entity == null) {
|
||||
return;
|
||||
}
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put(editType, content);
|
||||
|
||||
final Dialog loadingDialog = DialogUtils.showWaitDialog(context, "正在修改信息...");
|
||||
|
||||
RequestBody body = RequestBody.create(MediaType.parse("application/json"),
|
||||
new JSONObject(map).toString());
|
||||
RetrofitManager.getInstance(context)
|
||||
.getUsersea()
|
||||
.changeUserInfo(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(ResponseBody response) {
|
||||
super.onResponse(response);
|
||||
if (loadingDialog != null) {
|
||||
loadingDialog.dismiss();
|
||||
}
|
||||
switch (editType) {
|
||||
case "name":
|
||||
entity.setName(content);
|
||||
break;
|
||||
case "contact":
|
||||
entity.setContact(content);
|
||||
break;
|
||||
case "gender":
|
||||
entity.setGender(content);
|
||||
break;
|
||||
case "region":
|
||||
entity.setRegion(content);
|
||||
break;
|
||||
case "icon":
|
||||
entity.setIcon(content);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
saveUserInfo(context, entity);
|
||||
|
||||
|
||||
listener.onChange();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
if (loadingDialog != null) {
|
||||
loadingDialog.dismiss();
|
||||
}
|
||||
Utils.toast(context, "修改失败");
|
||||
|
||||
if (e == null) {
|
||||
Utils.toast(context, "请检查网络是否可用");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
ResponseBody responseBody = e.response().errorBody();
|
||||
String string = responseBody.string();
|
||||
JSONObject content = new JSONObject(string);
|
||||
int code = content.getInt("code");
|
||||
outputErrorHint(context, code);
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void outputErrorHint(Context context, int code) {
|
||||
public static void outputErrorHint(Context context, int code) {
|
||||
|
||||
switch (code) {
|
||||
case 40000:
|
||||
@ -668,20 +283,9 @@ public class LoginUtils {
|
||||
void onCompleted();
|
||||
}
|
||||
|
||||
// 更改用户信息回调
|
||||
public interface onChangeUserInfoListener {
|
||||
void onChange();
|
||||
}
|
||||
|
||||
// 获取验证码回调
|
||||
public interface onCaptchaCallBackListener {
|
||||
void onCaptcha(String serviceId);
|
||||
}
|
||||
|
||||
// 登录回调
|
||||
public interface onLoginCallBackListener {
|
||||
void onLogin(UserInfoEntity entity, LoginTag loginTag);
|
||||
|
||||
void onLoginFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,13 +71,11 @@ public class MessageShareUtils {
|
||||
private Context mContext;
|
||||
|
||||
//TODO 干掉activity,将context变成applicationcontext
|
||||
// private Activity activity; // 用来关闭分享页面
|
||||
private Activity mActivity; // 用来关闭分享页面
|
||||
//QQ或者QQ空间分享回调处理
|
||||
public IUiListener QqShareListener = new IUiListener() {
|
||||
@Override
|
||||
public void onComplete(Object o) {
|
||||
// activity.finish();
|
||||
// activity.overridePendingTransition(0, 0);//禁止退出Activity 动画
|
||||
Utils.toast(mContext, "分享成功");
|
||||
}
|
||||
|
||||
@ -88,9 +86,7 @@ public class MessageShareUtils {
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
// activity.finish();
|
||||
// activity.overridePendingTransition(0, 0);//禁止退出Activity 动画
|
||||
Utils.toast(mContext, "分享已取消");
|
||||
Utils.toast(mContext, mContext.getString(R.string.share_cancel_hint));
|
||||
}
|
||||
};
|
||||
// 适配快传成绩单分享
|
||||
@ -139,11 +135,11 @@ public class MessageShareUtils {
|
||||
return mTencent;
|
||||
}
|
||||
|
||||
public void showShareWindows(View view, Bitmap bitmap, String picName, int shareType) {
|
||||
public void showShareWindows(Activity activity, View view, Bitmap bitmap, String picName, int shareType) {
|
||||
this.shareBm = bitmap;
|
||||
this.picName = picName;
|
||||
this.shareType = shareType;
|
||||
// this.activity = (Activity) mContext;
|
||||
this.mActivity = activity;
|
||||
|
||||
if (shareType == 2) {
|
||||
contentSize = 75;
|
||||
@ -230,11 +226,11 @@ public class MessageShareUtils {
|
||||
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,
|
||||
QQShare.SHARE_TO_QQ_TYPE_IMAGE);
|
||||
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, mContext.getExternalCacheDir().getPath() + "/ShareImg/" + picName);
|
||||
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "光环助手");
|
||||
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name));
|
||||
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,
|
||||
QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE);
|
||||
mTencent.shareToQQ(
|
||||
(Activity) mContext, params, QqShareListener);
|
||||
mActivity, params, QqShareListener);
|
||||
if (mPopupWindow == null) return;
|
||||
mPopupWindow.dismiss();
|
||||
}
|
||||
@ -246,11 +242,11 @@ public class MessageShareUtils {
|
||||
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,
|
||||
QQShare.SHARE_TO_QQ_TYPE_IMAGE);
|
||||
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, mContext.getExternalCacheDir().getPath() + "/ShareImg/" + picName);
|
||||
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "光环助手");
|
||||
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name));
|
||||
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,
|
||||
QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);
|
||||
mTencent.shareToQQ(
|
||||
(Activity) mContext, params, QqShareListener);
|
||||
mActivity, params, QqShareListener);
|
||||
if (mPopupWindow == null) return;
|
||||
mPopupWindow.dismiss();
|
||||
}
|
||||
|
||||
@ -138,4 +138,36 @@ public class NewsUtils {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void setNewsDetailTime(TextView textView, long time) {
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
|
||||
try {
|
||||
long today = format.parse(format.format(new Date())).getTime();
|
||||
long day = time * 1000;
|
||||
if (day >= today && day < today + 86400 * 1000) {
|
||||
long min = new Date().getTime() / 1000 - day / 1000;
|
||||
int hour = (int) (min / (60 * 60));
|
||||
if (hour == 0) {
|
||||
if (min < 60) {
|
||||
textView.setText("刚刚");
|
||||
} else {
|
||||
textView.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60)));
|
||||
}
|
||||
} else {
|
||||
textView.setText(String.format(Locale.getDefault(), "%d小时前", hour));
|
||||
}
|
||||
} else if (day >= today - 86400 * 1000 && day < today) {
|
||||
format.applyPattern("HH:mm");
|
||||
textView.setText("昨天 ");
|
||||
} else {
|
||||
format.applyPattern("yyyy-MM-dd");
|
||||
textView.setText(format.format(day));
|
||||
}
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
format.applyPattern("yyyy-MM-dd");
|
||||
textView.setText(format.format(time * 1000));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,14 +7,13 @@ import android.os.Handler;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.halo.assistant.HaloApp;
|
||||
import com.lightgame.download.FileUtils;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.entity.PlatformEntity;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.halo.assistant.HaloApp;
|
||||
import com.lightgame.download.FileUtils;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
@ -153,7 +152,7 @@ public class PlatformUtils {
|
||||
}
|
||||
}
|
||||
if (urls.size() != 0) {
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int success = 0;
|
||||
|
||||
@ -2,6 +2,7 @@ package com.gh.common.util;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.entity.CommentEntity;
|
||||
import com.gh.gamecenter.retrofit.JSONObjectResponse;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
@ -43,7 +44,7 @@ public class PostCommentUtils {
|
||||
listener.postSuccess(response);
|
||||
}
|
||||
} else {
|
||||
Utils.toast(context, "提交失败,请检查网络设置");
|
||||
Utils.toast(context, context.getString(R.string.post_failure_hint));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,7 +19,13 @@ public class QQUtils {
|
||||
}
|
||||
if (ShareUtils.isQQClientAvailable(context)) {
|
||||
//安装了QQ会直接调用QQ,打开手机QQ进行会话 QQ号:2586716223
|
||||
String str = "mqqwpa://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web&web_src=oicqzone.com";
|
||||
String chatType;
|
||||
if (qq.startsWith("400") || qq.startsWith("800")) {
|
||||
chatType = "crm";
|
||||
} else {
|
||||
chatType = "wpa";
|
||||
}
|
||||
String str = "mqqwpa://im/chat?chat_type=" + chatType + "&uin=" + qq + "&version=1&src_type=web";
|
||||
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(str)));
|
||||
} else {
|
||||
//没有安装QQ 复制账号
|
||||
|
||||
56
app/src/main/java/com/gh/common/util/RichEditorUtils.java
Normal file
56
app/src/main/java/com/gh/common/util/RichEditorUtils.java
Normal file
@ -0,0 +1,56 @@
|
||||
package com.gh.common.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.Base64;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
||||
/**
|
||||
* Created by khy on 15/12/17.
|
||||
*/
|
||||
|
||||
public class RichEditorUtils {
|
||||
|
||||
private RichEditorUtils() throws InstantiationException {
|
||||
throw new InstantiationException("This class is not for instantiation");
|
||||
}
|
||||
|
||||
public static String toBase64(Bitmap bitmap) {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
|
||||
byte[] bytes = baos.toByteArray();
|
||||
|
||||
return Base64.encodeToString(bytes, Base64.NO_WRAP);
|
||||
}
|
||||
|
||||
public static Bitmap toBitmap(Drawable drawable) {
|
||||
if (drawable instanceof BitmapDrawable) {
|
||||
return ((BitmapDrawable) drawable).getBitmap();
|
||||
}
|
||||
|
||||
int width = drawable.getIntrinsicWidth();
|
||||
width = width > 0 ? width : 1;
|
||||
int height = drawable.getIntrinsicHeight();
|
||||
height = height > 0 ? height : 1;
|
||||
|
||||
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
|
||||
drawable.draw(canvas);
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
public static Bitmap decodeResource(Context context, int resId) {
|
||||
return BitmapFactory.decodeResource(context.getResources(), resId);
|
||||
}
|
||||
|
||||
public static long getCurrentTime() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
@ -13,6 +13,7 @@ import android.graphics.Matrix;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.GridLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
@ -57,16 +58,14 @@ import static com.gh.common.util.GetLoginDataUtils.SCOPE;
|
||||
*/
|
||||
public class ShareUtils {
|
||||
|
||||
private static ShareUtils instance;
|
||||
private static ShareUtils sInstance;
|
||||
private IWXAPI mIWXAPI;
|
||||
private Tencent mTencent;
|
||||
private String shareUrl;
|
||||
private String shareGameName;
|
||||
private String shareIcon;
|
||||
private String shareNewsTitle; // shareNewsTitle不为空就是新闻分享,否则是游戏分享
|
||||
private boolean isPlugin = false;
|
||||
private boolean ispopupWindow;
|
||||
private boolean isToolsBox;
|
||||
private String mTitle;
|
||||
private String mSummary;
|
||||
|
||||
|
||||
private int[] arrLogo = {
|
||||
R.drawable.share_wechat_logo,
|
||||
@ -78,10 +77,25 @@ public class ShareUtils {
|
||||
R.drawable.share_copyfont_logo,
|
||||
R.drawable.share_cancel_logo
|
||||
};
|
||||
|
||||
public enum ShareType {
|
||||
news,
|
||||
game, // 普通游戏
|
||||
plugin, // 插件游戏
|
||||
tools,
|
||||
askInvite,
|
||||
askNormal, // 问答问题/答案
|
||||
shareGh
|
||||
}
|
||||
|
||||
private String[] arrLabel = {"微信好友", "朋友圈", "QQ好友", "QQ空间", "新浪微博", "短信", "复制链接", "取消"};
|
||||
|
||||
private PopupWindow popupWindow;
|
||||
|
||||
private ShareType mShareType;
|
||||
|
||||
private Activity mActivity;
|
||||
|
||||
private Context mContext;
|
||||
//QQ或者QQ空间分享回调处理
|
||||
public IUiListener QqShareListener = new IUiListener() {
|
||||
@ -104,16 +118,16 @@ public class ShareUtils {
|
||||
private ShareUtils(Context context) {
|
||||
mTencent = Tencent.createInstance(Config.TENCENT_APPID, context); //初始化QQ分享
|
||||
mIWXAPI = WXAPIFactory.createWXAPI(context, Config.WECHAT_APPID); //初始化微信分享
|
||||
WbSdk.install(context,new AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", SCOPE));
|
||||
WbSdk.install(context, new AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", SCOPE));
|
||||
// FIXME 此处严重泄露,把Activity Context 存为static?????
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
public static ShareUtils getInstance(Activity context) {
|
||||
if (instance == null) {
|
||||
instance = new ShareUtils(context);
|
||||
public static ShareUtils getInstance(Context context) {
|
||||
if (sInstance == null) {
|
||||
sInstance = new ShareUtils(context);
|
||||
}
|
||||
return instance;
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
//检查是否安装手机QQ
|
||||
@ -131,24 +145,14 @@ public class ShareUtils {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param view ispopupWindow-true是绑定的布局, ispopupWindow-false 则是嵌套的父控件
|
||||
* @param url 分享链接
|
||||
* @param gameName 游戏名 与 新闻标题区分
|
||||
* @param icon 分享图标
|
||||
* @param newsTitle 新闻标题 与 游戏名区分
|
||||
* @param isPlugin 判断游戏是否是插件
|
||||
* @param ispopupWindow 判断是否是 PopupWindow false可直接嵌套进布局(分享光环),view是父控件
|
||||
*/
|
||||
public void showShareWindows(View view, String url, String gameName, String icon, String newsTitle,
|
||||
boolean isPlugin, boolean ispopupWindow, boolean isToolsBox) {
|
||||
|
||||
public void showShareWindows(Activity activity, View view, String url, String icon, String shareTitle, String shareSummary, ShareType shareType) {
|
||||
this.mActivity = activity;
|
||||
this.shareIcon = icon;
|
||||
this.shareGameName = gameName;
|
||||
this.shareUrl = url;
|
||||
this.shareNewsTitle = newsTitle;
|
||||
this.isPlugin = isPlugin;
|
||||
this.ispopupWindow = ispopupWindow;
|
||||
this.isToolsBox = isToolsBox;
|
||||
this.mSummary = shareSummary;
|
||||
this.mTitle = shareTitle;
|
||||
this.mShareType = shareType;
|
||||
|
||||
View contentView = View.inflate(mContext, R.layout.share_popup_layout, null);
|
||||
contentView.setFocusable(true);
|
||||
@ -168,7 +172,7 @@ public class ShareUtils {
|
||||
shareRecyclerView.setLayoutManager(gridLayoutManager);
|
||||
shareRecyclerView.setAdapter(new ShareRecyclerViewAdapter());
|
||||
|
||||
if (!ispopupWindow) {
|
||||
if (mShareType == ShareType.shareGh) {
|
||||
RelativeLayout layout = (RelativeLayout) view;
|
||||
layout.addView(contentView);
|
||||
arrLabel[6] = "邮件";
|
||||
@ -210,79 +214,52 @@ public class ShareUtils {
|
||||
}
|
||||
|
||||
//QQ分享
|
||||
private void qqSahre() {
|
||||
private void qqShare() {
|
||||
Utils.toast(mContext, mContext.getString(R.string.share_skip));
|
||||
Bundle params = new Bundle();
|
||||
|
||||
String title;
|
||||
String summary;
|
||||
|
||||
if (isToolsBox) {
|
||||
title = shareNewsTitle;
|
||||
summary = shareGameName;
|
||||
} else if (ispopupWindow) {
|
||||
if (shareNewsTitle != null) {
|
||||
title = shareNewsTitle;
|
||||
summary = "来自光环助手(最强卡牌神器)";
|
||||
} else {
|
||||
title = "向你推荐:";
|
||||
if (isPlugin) {
|
||||
summary = shareGameName + "(光环加速版)";
|
||||
} else {
|
||||
summary = shareGameName;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
title = "玩手游不用肝的感觉真好";
|
||||
summary = "绿色安全的手游加速助手";
|
||||
switch (mShareType) {
|
||||
case plugin:
|
||||
mSummary += "(光环加速版)";
|
||||
break;
|
||||
case askNormal:
|
||||
mTitle += " - 光环助手";
|
||||
break;
|
||||
}
|
||||
params.putString(QQShare.SHARE_TO_QQ_TITLE, title);
|
||||
params.putString(QQShare.SHARE_TO_QQ_SUMMARY, summary);
|
||||
|
||||
params.putString(QQShare.SHARE_TO_QQ_TITLE, mTitle);
|
||||
params.putString(QQShare.SHARE_TO_QQ_SUMMARY, mSummary);
|
||||
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
|
||||
params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, shareUrl);
|
||||
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, shareIcon);
|
||||
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "光环助手");
|
||||
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name));
|
||||
|
||||
mTencent.shareToQQ(
|
||||
(Activity) mContext, params, QqShareListener);
|
||||
mTencent.shareToQQ(mActivity, params, QqShareListener);
|
||||
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
//微信好友分享
|
||||
private void wechatSahre() {
|
||||
private void wechatShare() {
|
||||
Utils.toast(mContext, mContext.getString(R.string.share_skip));
|
||||
WXWebpageObject webpage = new WXWebpageObject();
|
||||
WXMediaMessage msg = new WXMediaMessage(webpage);
|
||||
webpage.webpageUrl = shareUrl;
|
||||
|
||||
String title;
|
||||
String summary;
|
||||
switch (mShareType) {
|
||||
case plugin:
|
||||
mSummary += "(光环加速版)";
|
||||
break;
|
||||
case askNormal:
|
||||
mTitle += " - 光环助手";
|
||||
break;
|
||||
|
||||
if (isToolsBox) {
|
||||
title = shareNewsTitle;
|
||||
summary = shareGameName;
|
||||
} else if (ispopupWindow) {
|
||||
if (shareNewsTitle != null) {
|
||||
title = shareNewsTitle;
|
||||
summary = "来自光环助手(最强卡牌神器)";
|
||||
} else {
|
||||
title = "向你推荐:";
|
||||
if (isPlugin) {
|
||||
summary = shareGameName + "(光环加速版)";
|
||||
} else {
|
||||
summary = shareGameName;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
title = "玩手游不用肝的感觉真好";
|
||||
summary = "绿色安全的手游加速助手";
|
||||
}
|
||||
|
||||
msg.title = title;
|
||||
msg.description = summary;
|
||||
msg.title = mTitle;
|
||||
msg.description = mSummary;
|
||||
|
||||
SendMessageToWX.Req req = new SendMessageToWX.Req();
|
||||
req.transaction = buildTransaction("webpage");
|
||||
@ -290,7 +267,7 @@ public class ShareUtils {
|
||||
req.scene = SendMessageToWX.Req.WXSceneSession;
|
||||
|
||||
loadBitMap(shareIcon, msg, req);
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
}
|
||||
}
|
||||
@ -304,8 +281,12 @@ public class ShareUtils {
|
||||
@Override
|
||||
protected void onNewResultImpl(Bitmap bitmap) {
|
||||
Bitmap compressBp = compressBitmap(bitmap);
|
||||
Bitmap resultBp = addBackGround(compressBp);
|
||||
msg.thumbData = Util.bmpToByteArray(resultBp, true);
|
||||
if (mShareType == ShareType.askNormal || mShareType == ShareType.askInvite) {
|
||||
msg.thumbData = Util.bmpToByteArray(compressBp, true);
|
||||
} else {
|
||||
Bitmap resultBp = addBackGround(compressBp);
|
||||
msg.thumbData = Util.bmpToByteArray(resultBp, true);
|
||||
}
|
||||
mIWXAPI.sendReq(req);
|
||||
}
|
||||
|
||||
@ -317,10 +298,10 @@ public class ShareUtils {
|
||||
}
|
||||
|
||||
//压缩图片
|
||||
private Bitmap compressBitmap(Bitmap bitmap) {
|
||||
public static Bitmap compressBitmap(Bitmap bitmap) {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, bos);
|
||||
float zoom = (float) Math.sqrt(10 * 1024 / (float) bos.toByteArray().length);
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
|
||||
float zoom = (float) Math.sqrt(9 * 1024 / (float) bos.toByteArray().length);
|
||||
|
||||
Matrix matrix = new Matrix();
|
||||
matrix.setScale(zoom, zoom);
|
||||
@ -328,15 +309,14 @@ public class ShareUtils {
|
||||
Bitmap result = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
|
||||
bos.reset();
|
||||
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 85, bos);
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 100, bos);
|
||||
|
||||
while (bos.toByteArray().length > 10 * 1024) {
|
||||
while (bos.toByteArray().length > 9 * 1024) {
|
||||
System.out.println(bos.toByteArray().length);
|
||||
matrix.setScale(0.9f, 0.9f);
|
||||
result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true);
|
||||
bos.reset();
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 85, bos);
|
||||
|
||||
result.compress(Bitmap.CompressFormat.JPEG, 100, bos);
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -364,78 +344,61 @@ public class ShareUtils {
|
||||
}
|
||||
|
||||
//QQ空间分享
|
||||
private void qZoneSahre() {
|
||||
private void qZoneShare() {
|
||||
Utils.toast(mContext, mContext.getString(R.string.share_skip));
|
||||
Bundle params = new Bundle();
|
||||
|
||||
String title;
|
||||
String summary = null;
|
||||
|
||||
if (isToolsBox) {
|
||||
title = shareNewsTitle;
|
||||
summary = shareGameName;
|
||||
} else if (ispopupWindow) {
|
||||
if (shareNewsTitle != null) {
|
||||
title = shareNewsTitle;
|
||||
} else {
|
||||
title = "向你推荐:";
|
||||
if (isPlugin) {
|
||||
summary = shareGameName + "(光环加速版)";
|
||||
} else {
|
||||
summary = shareGameName;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
title = "玩手游不用肝的感觉真好";
|
||||
summary = "绿色安全的手游加速助手";
|
||||
switch (mShareType) {
|
||||
case plugin:
|
||||
mSummary += "(光环加速版)";
|
||||
break;
|
||||
case askNormal:
|
||||
mTitle += " - 光环助手";
|
||||
break;
|
||||
}
|
||||
|
||||
ArrayList<String> imageUrls = new ArrayList<>();
|
||||
imageUrls.add(shareIcon);
|
||||
|
||||
if (summary != null) {
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, summary);
|
||||
if (!TextUtils.isEmpty(mSummary)) {
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, mSummary);
|
||||
}
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, title);
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, mTitle);
|
||||
params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, QzoneShare.SHARE_TO_QZONE_TYPE_NO_TYPE);
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, shareUrl);
|
||||
params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrls);
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_APP_NAME, "光环助手");
|
||||
params.putString(QzoneShare.SHARE_TO_QQ_APP_NAME, mContext.getString(R.string.app_name));
|
||||
|
||||
mTencent.shareToQzone(
|
||||
(Activity) mContext, params, QqShareListener);
|
||||
if (ispopupWindow) {
|
||||
mTencent.shareToQzone(mActivity, params, QqShareListener);
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
//微信朋友圈分享
|
||||
private void wechatMomentsSahre() {
|
||||
private void wechatMomentsShare() {
|
||||
Utils.toast(mContext, mContext.getString(R.string.share_skip));
|
||||
WXWebpageObject webpage = new WXWebpageObject();
|
||||
WXMediaMessage msg = new WXMediaMessage(webpage);
|
||||
|
||||
webpage.webpageUrl = shareUrl;
|
||||
|
||||
String title;
|
||||
|
||||
if (isToolsBox) {
|
||||
title = shareNewsTitle;
|
||||
} else if (ispopupWindow) {
|
||||
if (shareNewsTitle != null) {
|
||||
title = shareNewsTitle;
|
||||
} else {
|
||||
if (isPlugin) {
|
||||
title = shareGameName + "(光环加速版)";
|
||||
} else {
|
||||
title = shareGameName;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
title = "玩手游不用肝的感觉真好";
|
||||
switch (mShareType) {
|
||||
case plugin:
|
||||
msg.title = mSummary + "(光环加速版)";
|
||||
break;
|
||||
case game:
|
||||
msg.title = mSummary;
|
||||
break;
|
||||
case askNormal:
|
||||
msg.title = mTitle + " - 光环助手";
|
||||
break;
|
||||
default:
|
||||
msg.title = mTitle;
|
||||
break;
|
||||
}
|
||||
|
||||
msg.title = title;
|
||||
|
||||
SendMessageToWX.Req req = new SendMessageToWX.Req();
|
||||
|
||||
req.transaction = buildTransaction("webpage");
|
||||
@ -443,39 +406,46 @@ public class ShareUtils {
|
||||
req.scene = SendMessageToWX.Req.WXSceneTimeline;
|
||||
|
||||
loadBitMap(shareIcon, msg, req);
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
//新浪微博分享
|
||||
private void sinaWeiboSahre() {
|
||||
private void sinaWeiboShare() {
|
||||
Intent intent = WeiBoShareActivity.getWeiboshareIntent(mContext,
|
||||
shareNewsTitle, shareIcon, shareGameName, shareUrl, isPlugin, ispopupWindow, isToolsBox);
|
||||
shareUrl, shareIcon, mTitle, mSummary, mShareType.toString());
|
||||
mContext.startActivity(intent);
|
||||
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
//短信分享
|
||||
private void shortMessageSahre() {
|
||||
private void shortMessageShare() {
|
||||
String smsBody;
|
||||
if (isToolsBox) {
|
||||
smsBody = shareNewsTitle + shareUrl;
|
||||
} else if (ispopupWindow) {
|
||||
if (shareNewsTitle != null) {
|
||||
smsBody = shareNewsTitle + shareUrl;
|
||||
} else {
|
||||
if (isPlugin) {
|
||||
smsBody = "向你推荐:" + shareGameName + "(光环加速版)" + shareUrl;
|
||||
} else {
|
||||
smsBody = "向你推荐:" + shareGameName + shareUrl;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
smsBody = "这个App可以下载各种热门卡牌手游的加速版,绿色安全,超级省心,做日常效率提高3-5倍!光环助手官网地址:" + shareUrl;
|
||||
switch (mShareType) {
|
||||
case news:
|
||||
case tools:
|
||||
smsBody = mTitle + shareUrl;
|
||||
break;
|
||||
case plugin:
|
||||
smsBody = mTitle + mSummary + "(光环加速版)" + shareUrl;
|
||||
break;
|
||||
case game:
|
||||
smsBody = mTitle + mSummary + shareUrl;
|
||||
break;
|
||||
case shareGh:
|
||||
smsBody = "这个App可以下载各种热门卡牌手游的加速版,绿色安全,超级省心,做日常效率提高3-5倍!光环助手官网地址:" + shareUrl;
|
||||
break;
|
||||
case askInvite:
|
||||
case askNormal:
|
||||
smsBody = mTitle + " - 光环助手" + shareUrl;
|
||||
break;
|
||||
default:
|
||||
smsBody = mTitle;
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
@ -486,7 +456,7 @@ public class ShareUtils {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
}
|
||||
}
|
||||
@ -495,7 +465,7 @@ public class ShareUtils {
|
||||
private void copyLink(String copyContent) {
|
||||
ClipboardManager cmb = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
cmb.setText(copyContent);
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
Utils.toast(mContext, "复制成功");
|
||||
popupWindow.dismiss();
|
||||
} else {
|
||||
@ -520,25 +490,27 @@ public class ShareUtils {
|
||||
public void onClick(View v) {
|
||||
switch (holder.getPosition()) {
|
||||
case 0:
|
||||
wechatSahre();
|
||||
wechatShare();
|
||||
break;
|
||||
case 1:
|
||||
wechatMomentsSahre();
|
||||
wechatMomentsShare();
|
||||
break;
|
||||
case 2:
|
||||
qqSahre();
|
||||
qqShare();
|
||||
break;
|
||||
case 3:
|
||||
qZoneSahre();
|
||||
qZoneShare();
|
||||
break;
|
||||
case 4:
|
||||
sinaWeiboSahre();
|
||||
sinaWeiboShare();
|
||||
break;
|
||||
case 5:
|
||||
shortMessageSahre();
|
||||
shortMessageShare();
|
||||
break;
|
||||
case 6:
|
||||
if (ispopupWindow) {
|
||||
if (mShareType == ShareType.askInvite || mShareType == ShareType.askNormal) {
|
||||
copyLink(mTitle + " - 光环助手" + shareUrl);
|
||||
} else if (mShareType != ShareType.shareGh) {
|
||||
copyLink(shareUrl);
|
||||
} else {
|
||||
Intent data = IntentUtils.getEmailToGHIntent();
|
||||
@ -546,7 +518,7 @@ public class ShareUtils {
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (ispopupWindow) {
|
||||
if (mShareType != ShareType.shareGh) {
|
||||
popupWindow.dismiss();
|
||||
} else {
|
||||
copyLink("推荐光环助手,绿色安全的手游加速助手:" + shareUrl);
|
||||
|
||||
@ -101,6 +101,19 @@ public class TimestampUtils {
|
||||
* 为url添加timestamp
|
||||
*/
|
||||
public static String addTimestamp(String url) {
|
||||
|
||||
// // TODO: 22/12/17 刷新版
|
||||
// if (TextUtils.isEmpty(url)) {
|
||||
// return url;
|
||||
// }
|
||||
// if (url.contains("?")) {
|
||||
// String u = url + "×tamp=" + System.currentTimeMillis();
|
||||
// return u;
|
||||
// } else {
|
||||
// String u = url + "?timestamp=" + System.currentTimeMillis();
|
||||
// return u;
|
||||
// }
|
||||
|
||||
if (TextUtils.isEmpty(url)) {
|
||||
return url;
|
||||
}
|
||||
|
||||
@ -3,197 +3,21 @@ package com.gh.common.util;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.os.Environment;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import com.gh.gamecenter.BuildConfig;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.gh.gamecenter.retrofit.StringResponse;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import com.lightgame.utils.Util_System_Phone_State;
|
||||
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
public class TokenUtils {
|
||||
|
||||
// 注册设备
|
||||
// public static synchronized void register(final Context context) {
|
||||
// Map<String, String> params = new HashMap<>();
|
||||
// params.put("MANUFACTURER", Build.MANUFACTURER);
|
||||
// params.put("MODEL", Build.MODEL);
|
||||
// params.put("ANDROID_SDK", String.valueOf(Build.VERSION.SDK_INT));
|
||||
// params.put("ANDROID_VERSION", Build.VERSION.RELEASE);
|
||||
// String android_id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
|
||||
// if (!TextUtils.isEmpty(android_id)) {
|
||||
// params.put("ANDROID_ID", android_id);
|
||||
// }
|
||||
// String imei = Util_System_Phone_State.getDeviceId(context);
|
||||
// if (!TextUtils.isEmpty(imei)) {
|
||||
// params.put("IMEI", imei);
|
||||
// }
|
||||
// WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||
// String mac = wm.getConnectionInfo().getMacAddress();
|
||||
// if (!TextUtils.isEmpty(mac) || !":::::".equals(mac)) {
|
||||
// params.put("MAC", mac);
|
||||
// } else {
|
||||
// SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
// sp.edit().putBoolean("isUploadMac", false).apply();
|
||||
// }
|
||||
// String mid = StatConfig.getMid(context);
|
||||
// if (!TextUtils.isEmpty(mid) || !"0".equals(mid)) {
|
||||
// params.put("MTA_ID", mid);
|
||||
// } else {
|
||||
// SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
// sp.edit().putBoolean("isUploadMid", false).apply();
|
||||
// }
|
||||
// RequestBody body = RequestBody.create(MediaType.parse("application/json"), new JSONObject(params).toString());
|
||||
// RetrofitManager.getInstance(context).getApi().postRegister(body)
|
||||
// .subscribeOn(Schedulers.io())
|
||||
// .observeOn(Schedulers.io())
|
||||
// .subscribe(new JSONObjectResponse() {
|
||||
// @Override
|
||||
// public void onResponse(JSONObject response) {
|
||||
// if (response.length() != 0) {
|
||||
// try {
|
||||
// // 保存device_id
|
||||
// saveDeviceId(context, response.getString("device_id"));
|
||||
// Utils.log("device_id = " + response.getString("device_id"));
|
||||
// } catch (JSONException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
public static synchronized void saveDeviceId(Context context, String device_id) {
|
||||
saveSharedPreferences(context, device_id);
|
||||
saveDataFile(context, device_id);
|
||||
svaeSDCard(device_id, "/gh-uuid");// SDCard根目录
|
||||
svaeSDCard(device_id, "/system"); // SDCard system目录
|
||||
svaeSDCard(device_id, "/data"); // SDCard data目录
|
||||
}
|
||||
|
||||
//将uuid存到sp
|
||||
private static void saveSharedPreferences(Context context, String device_id) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor edit = sp.edit();
|
||||
edit.putString("uuid", device_id);
|
||||
edit.apply();
|
||||
Utils.log("saveDeviceId", "保存成功SP");
|
||||
}
|
||||
|
||||
//将uuid存到data/data/PackageName/files文件夹下
|
||||
private static void saveDataFile(Context context, String device_id) {
|
||||
FileOutputStream fops;
|
||||
try {
|
||||
fops = context.openFileOutput("uuid", Context.MODE_PRIVATE);
|
||||
fops.write(device_id.getBytes());
|
||||
fops.close();
|
||||
Utils.log("saveDeviceId", "保存成功DataFile");
|
||||
} catch (Exception e) {
|
||||
Utils.log("保存uuid到data/data/PackageName/files文件异常" + e.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
//将uuid存到SD卡
|
||||
private static void svaeSDCard(String device_id, String saveDir) {
|
||||
File sdCardDir = Environment.getExternalStorageDirectory();
|
||||
String path = sdCardDir.getPath() + saveDir;
|
||||
|
||||
File file = new File(path);
|
||||
if (!file.exists()) {
|
||||
file.mkdirs();
|
||||
}
|
||||
|
||||
// 判断文件是否存在,存在则删除
|
||||
File uuidFile = new File(path + "/uuid");
|
||||
if (uuidFile.isFile() && uuidFile.exists()) {
|
||||
Utils.log(saveDir + "文件夹里的文件存在,执行删除操作");
|
||||
uuidFile.delete();
|
||||
}
|
||||
|
||||
File writeFile = new File(file, "uuid");
|
||||
FileOutputStream fos;
|
||||
try {
|
||||
fos = new FileOutputStream(writeFile);
|
||||
fos.write(device_id.getBytes());
|
||||
fos.close();
|
||||
Utils.log("saveDeviceId", "保存成功SDCard" + "目录为:" + saveDir);
|
||||
} catch (Exception e) {
|
||||
Utils.log("保存uuid到SDCard异常" + saveDir + e.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// // 获取用户token
|
||||
// public static synchronized Observable<String> getToken(final Context context, boolean isCheck) {
|
||||
//
|
||||
// if (true) { // TODO TEST
|
||||
// return Observable.just(LoginUtils.getToken(context));
|
||||
// }
|
||||
//
|
||||
// String token = null;
|
||||
// if (isCheck) {
|
||||
// SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
// token = sp.getString("token", null);
|
||||
// if (token != null) {
|
||||
// long expire = sp.getLong("token_expire", 0) * 1000 - 10 * 1000;
|
||||
// long time = Utils.getTime(context);
|
||||
// // 判断token是否过期
|
||||
// if (time >= expire) {
|
||||
// // token已过期
|
||||
// token = null;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (token == null) {
|
||||
// Map<String, String> params = new HashMap<>();
|
||||
// params.put("device_id", getDeviceId(context));
|
||||
// return RetrofitManager.getInstance(context).getApi()
|
||||
// .postLogin(RequestBody.create(MediaType.parse("application/json"), new JSONObject(params).toString()))
|
||||
// .flatMap(new Func1<ResponseBody, Observable<String>>() {
|
||||
// @Override
|
||||
// public Observable<String> call(ResponseBody responseBody) {
|
||||
// String value = null;
|
||||
// try {
|
||||
// SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
// Editor editor = sp.edit();
|
||||
// JSONObject response = new JSONObject(responseBody.string());
|
||||
// editor.putString("user_name", response.getString("name"));
|
||||
// editor.putString("user_icon", response.getString("icon"));
|
||||
// response = response.getJSONObject("token");
|
||||
// editor.putString("token", response.getString("value"));
|
||||
// editor.putLong("token_expire", response.getLong("expire"));
|
||||
// editor.apply();
|
||||
// // 服务器返回的token和本地已存的token相同,更新本地时间
|
||||
// getTime(context);
|
||||
// value = response.getString("value");
|
||||
// } catch (IOException | JSONException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// return Observable.just(value);
|
||||
// }
|
||||
// }).onErrorResumeNext(new Func1<Throwable, Observable<? extends String>>() {
|
||||
// @Override
|
||||
// public Observable<? extends String> call(Throwable throwable) {
|
||||
// return Observable.error(throwable);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// return Observable.just(token);
|
||||
// }
|
||||
|
||||
// TODO VERSION:3.0 之后不存在deviceId
|
||||
@Deprecated
|
||||
public static synchronized String getDeviceId(Context context) {
|
||||
return loadSharedPreferences(context, false);
|
||||
return Util_System_Phone_State.getDeviceId(context); // 暂时用IMEI代替
|
||||
}
|
||||
|
||||
// 获取服务器时间
|
||||
@ -219,118 +43,4 @@ public class TokenUtils {
|
||||
});
|
||||
}
|
||||
|
||||
//读取SharedPreferences的uuid
|
||||
private static String loadSharedPreferences(Context context, boolean isCheck) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String uuid = sp.getString("uuid", null);
|
||||
if (isCheck) {
|
||||
return uuid;
|
||||
}
|
||||
if (uuid == null) {
|
||||
return loadDataFile(context, false);
|
||||
}
|
||||
if (BuildConfig.DEBUG) {
|
||||
Utils.log("getDeviceId", "获取成功SP" + uuid);
|
||||
}
|
||||
return uuid;
|
||||
}
|
||||
|
||||
//读取data/data/PackageName/files的uuid
|
||||
private static String loadDataFile(Context context, boolean isCheck) {
|
||||
File file = new File(context.getFilesDir(), "uuid");
|
||||
if (file.exists()) {
|
||||
try {
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
byte[] b = new byte[1024];
|
||||
int count = -1;
|
||||
String uuid = null;
|
||||
while ((count = fis.read(b)) != -1) {
|
||||
uuid = new String(b, 0, count, "UTF-8");
|
||||
}
|
||||
Utils.log("getDeviceId", "获取成功DataFile" + uuid);
|
||||
return uuid;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (!isCheck) {
|
||||
String[] dirName = {"/gh-uuid", "/system", "/data"};
|
||||
for (int i = 0; i < 3; i++) {
|
||||
String s = loadSDCard(dirName[i]);
|
||||
if (s != null) {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//读取SD卡的uuid
|
||||
private static String loadSDCard(String saveDir) {
|
||||
File sdCardDir = Environment.getExternalStorageDirectory();
|
||||
String path = sdCardDir.getPath() + saveDir;
|
||||
File file = new File(path, "uuid");
|
||||
if (file.exists()) {
|
||||
FileInputStream fis;
|
||||
ByteArrayOutputStream bos;
|
||||
try {
|
||||
fis = new FileInputStream(file);
|
||||
bos = new ByteArrayOutputStream();
|
||||
byte[] array = new byte[1024];
|
||||
int len = -1;
|
||||
while ((len = fis.read(array)) != -1) {
|
||||
bos.write(array, 0, len);
|
||||
}
|
||||
bos.close();
|
||||
fis.close();
|
||||
Utils.log("getDeviceId", "获取成功SDCard" + "目录为:" + saveDir + "::" + bos.toString());
|
||||
return bos.toString();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// // 检查设备信息是否已经上传完整
|
||||
// public static synchronized void checkDeviceInfo(Context context, String token) {
|
||||
// final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
// final HashMap<String, String> params = new HashMap<>();
|
||||
// if (!sp.getBoolean("isUploadExtra", false)) {
|
||||
// params.put("MANUFACTURER", Build.MANUFACTURER);
|
||||
// params.put("MODEL", Build.MODEL);
|
||||
// params.put("ANDROID_SDK", String.valueOf(Build.VERSION.SDK_INT));
|
||||
// params.put("ANDROID_VERSION", Build.VERSION.RELEASE);
|
||||
// }
|
||||
// if (!sp.getBoolean("isUploadMac", true)) {
|
||||
// WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||
// String mac = wm.getConnectionInfo().getMacAddress();
|
||||
// if (!TextUtils.isEmpty(mac) || !":::::".equals(mac)) {
|
||||
// params.put("MAC", mac);
|
||||
// }
|
||||
// }
|
||||
// if (!sp.getBoolean("isUploadMid", true)) {
|
||||
// String mid = StatConfig.getMid(context);
|
||||
// if (!TextUtils.isEmpty(mid) || !"0".equals(mid)) {
|
||||
// params.put("MTA_ID", mid);
|
||||
// }
|
||||
// }
|
||||
// if (params.size() != 0) {
|
||||
// RequestBody body = RequestBody.create(MediaType.parse("application/json"),
|
||||
// new JSONObject(params).toString());
|
||||
// RetrofitManager.getInstance(context).getApi().postDevice(token, body, TokenUtils.getDeviceId(context))
|
||||
// .subscribeOn(Schedulers.io())
|
||||
// .observeOn(AndroidSchedulers.mainThread())
|
||||
// .subscribe(new Response<ResponseBody>() {
|
||||
// @Override
|
||||
// public void onResponse(ResponseBody response) {
|
||||
// SharedPreferences.Editor editor = sp.edit();
|
||||
// editor.putBoolean("isUploadExtra", true);
|
||||
// editor.putBoolean("isUploadMac", true);
|
||||
// editor.putBoolean("isUploadMid", true);
|
||||
// editor.apply();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ public class DownloadDialog implements OnCollectionCallBackListener {
|
||||
@Override
|
||||
public void onDataChanged(DownloadEntity downloadEntity) {
|
||||
if (downloadEntity.getName().equals(gameEntity.getName())
|
||||
&& !"delete".equals(DownloadManager.getInstance(mContext).getStatus(downloadEntity.getUrl()))) {
|
||||
&& !DownloadStatus.delete.equals(DownloadManager.getInstance(mContext).getStatus(downloadEntity.getUrl()))) {
|
||||
|
||||
adapter.putDownloadEntity(downloadEntity);
|
||||
|
||||
|
||||
106
app/src/main/java/com/gh/common/view/EditorView.java
Normal file
106
app/src/main/java/com/gh/common/view/EditorView.java
Normal file
@ -0,0 +1,106 @@
|
||||
package com.gh.common.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.text.Editable;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableString;
|
||||
import android.text.style.ImageSpan;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by khy on 14/12/17.
|
||||
*/
|
||||
|
||||
public class EditorView extends android.support.v7.widget.AppCompatEditText {
|
||||
|
||||
int mEditorWidth;
|
||||
|
||||
List<String> mImgArr = new ArrayList<>();
|
||||
|
||||
public EditorView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public EditorView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public EditorView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
private void insertPicToEt(String picturePath) {
|
||||
Bitmap bitmap = compressPicture(picturePath);
|
||||
if (bitmap == null) return;
|
||||
mImgArr.add(picturePath);
|
||||
|
||||
ImageSpan imageSpan = new ImageSpan(getContext(), bitmap);
|
||||
int index = getSelectionStart();
|
||||
String tempUrl = "<img src=\"" + picturePath + "\" />";
|
||||
SpannableString spannableString = new SpannableString(tempUrl);
|
||||
spannableString.setSpan(imageSpan, 0, tempUrl.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
Editable editableText = getEditableText();
|
||||
if (index < 0 || index >= editableText.length()) {
|
||||
editableText.append(spannableString);
|
||||
} else {
|
||||
editableText.insert(index, spannableString);
|
||||
}
|
||||
if (bitmap.getWidth() >= mEditorWidth)
|
||||
editableText.insert(index + spannableString.length(), "\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* 压缩图片
|
||||
* 规则:
|
||||
* 1.如果图片大于当前EditText的最大宽度则按比例缩放,使图片宽度和EditText的宽度保持一致 (高度不处理)
|
||||
* 2.如果图片小于当前EditText 由于比例限制 将不处理
|
||||
*
|
||||
* @param srcPath 图片路径
|
||||
* @return
|
||||
*/
|
||||
public Bitmap compressPicture(String srcPath) {
|
||||
|
||||
FileOutputStream fos = null;
|
||||
BitmapFactory.Options op = new BitmapFactory.Options();
|
||||
|
||||
// 开始读入图片,此时把options.inJustDecodeBounds 设回true了
|
||||
op.inJustDecodeBounds = true;
|
||||
Bitmap bitmap = BitmapFactory.decodeFile(srcPath, op);
|
||||
op.inJustDecodeBounds = false;
|
||||
|
||||
// 缩放图片的尺寸
|
||||
float w = op.outWidth;
|
||||
float h = op.outHeight;
|
||||
float index = w / h;
|
||||
int width = mEditorWidth;
|
||||
float hh = width / index;
|
||||
float ww = width;
|
||||
|
||||
float be = 1.0f;
|
||||
if (w > h && w > ww / 2) {
|
||||
be = w / ww;
|
||||
} else if (w < h && h > hh/2) {
|
||||
be = h / hh;
|
||||
}
|
||||
if (be <= 0) {
|
||||
be = 1.0f;
|
||||
}
|
||||
op.inSampleSize = (int) be;// 设置缩放比例,这个数字越大,图片大小越小.
|
||||
// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
|
||||
bitmap = BitmapFactory.decodeFile(srcPath, op);
|
||||
int desWidth = (int) (w / be);
|
||||
int desHeight = (int) (h / be);
|
||||
return Bitmap.createScaledBitmap(bitmap, desWidth, desHeight, true);
|
||||
|
||||
}
|
||||
|
||||
public List<String> getImgArr() {
|
||||
return mImgArr;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
package com.gh.common.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.design.widget.AppBarLayout;
|
||||
import android.support.design.widget.CoordinatorLayout;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* Workaround AppBarLayout.Behavior for https://issuetracker.google.com/66996774
|
||||
*
|
||||
* See https://gist.github.com/chrisbanes/8391b5adb9ee42180893300850ed02f2 for
|
||||
* example usage.
|
||||
*
|
||||
* Change the package name as you wish.
|
||||
*/
|
||||
public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {
|
||||
|
||||
public FixAppBarLayoutBehavior() {
|
||||
super();
|
||||
}
|
||||
|
||||
public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target,
|
||||
int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
|
||||
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
|
||||
dxUnconsumed, dyUnconsumed, type);
|
||||
stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
|
||||
View target, int dx, int dy, int[] consumed, int type) {
|
||||
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
|
||||
stopNestedScrollIfNeeded(dy, child, target, type);
|
||||
}
|
||||
|
||||
private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {
|
||||
if (type == ViewCompat.TYPE_NON_TOUCH) {
|
||||
final int currOffset = getTopAndBottomOffset();
|
||||
if ((dy < 0 && currOffset == 0)
|
||||
|| (dy > 0 && currOffset == -child.getTotalScrollRange())) {
|
||||
ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -14,16 +14,20 @@ import android.view.View;
|
||||
public class GridDivider extends RecyclerView.ItemDecoration {
|
||||
public final int[] ATRRS = new int[]{android.R.attr.listDivider};
|
||||
private Drawable mDividerDarwable;
|
||||
private int mDividerHight = 1;
|
||||
|
||||
private Paint mColorPaint;
|
||||
|
||||
private int mDividerHight = 1;
|
||||
private int mGridCount;
|
||||
|
||||
/*
|
||||
int dividerHight 分割线的线宽
|
||||
int dividerColor 分割线的颜色
|
||||
*/
|
||||
public GridDivider(Context context, int dividerHight, int dividerColor) {
|
||||
public GridDivider(Context context, int dividerHight, int gridCount, int dividerColor) {
|
||||
this(context);
|
||||
mDividerHight = dividerHight;
|
||||
mGridCount = gridCount;
|
||||
mColorPaint = new Paint();
|
||||
mColorPaint.setColor(dividerColor);
|
||||
}
|
||||
@ -65,7 +69,7 @@ public class GridDivider extends RecyclerView.ItemDecoration {
|
||||
int bottom = 0;
|
||||
|
||||
// 最上面一行
|
||||
if ((i / 7) == 0) {
|
||||
if ((i / mGridCount) == 0) {
|
||||
//当前item最上面的分割线
|
||||
top = child.getTop();
|
||||
//当前item下面的分割线
|
||||
@ -103,7 +107,7 @@ public class GridDivider extends RecyclerView.ItemDecoration {
|
||||
int right = 0;
|
||||
|
||||
//左边第一列
|
||||
if ((i % 7) == 0) {
|
||||
if ((i % mGridCount) == 0) {
|
||||
//item左边分割线
|
||||
left = child.getLeft();
|
||||
right = left + mDividerHight;
|
||||
|
||||
@ -44,7 +44,7 @@ public class RadarView extends View {
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO<提前初始化好需要使用的对象,避免在绘制过程中多次初始化>
|
||||
* 提前初始化好需要使用的对象,避免在绘制过程中多次初始化
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -58,7 +58,6 @@ public class RadarView extends View {
|
||||
*/
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
// TODO Auto-generated method stub
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
|
||||
// 获取控件区域宽高
|
||||
@ -131,7 +130,7 @@ public class RadarView extends View {
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO<设置扫描状态>
|
||||
* 设置扫描状态
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@ -141,7 +140,7 @@ public class RadarView extends View {
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO<解析获取控件宽高>
|
||||
* 解析获取控件宽高
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
|
||||
490
app/src/main/java/com/gh/common/view/RichEditor.java
Normal file
490
app/src/main/java/com/gh/common/view/RichEditor.java
Normal file
@ -0,0 +1,490 @@
|
||||
package com.gh.common.view;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.webkit.WebChromeClient;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
|
||||
import com.gh.common.util.AskUtils;
|
||||
import com.gh.common.util.NetworkUtils;
|
||||
import com.gh.common.util.RichEditorUtils;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Copyright (C) 2017 Wasabeef
|
||||
* <p>
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
public class RichEditor extends WebView {
|
||||
|
||||
public enum Type {
|
||||
BOLD,
|
||||
ITALIC,
|
||||
SUBSCRIPT,
|
||||
SUPERSCRIPT,
|
||||
STRIKETHROUGH,
|
||||
UNDERLINE,
|
||||
H1,
|
||||
H2,
|
||||
H3,
|
||||
H4,
|
||||
H5,
|
||||
H6,
|
||||
ORDEREDLIST,
|
||||
UNORDEREDLIST,
|
||||
JUSTIFYCENTER,
|
||||
JUSTIFYFULL,
|
||||
JUSTUFYLEFT,
|
||||
JUSTIFYRIGHT
|
||||
}
|
||||
|
||||
public interface OnTextChangeListener {
|
||||
|
||||
void onTextChange(String text);
|
||||
}
|
||||
|
||||
public interface OnDecorationStateListener {
|
||||
|
||||
void onStateChangeListener(String text, List<Type> types);
|
||||
}
|
||||
|
||||
public interface AfterInitialLoadListener {
|
||||
|
||||
void onAfterInitialLoad(boolean isReady);
|
||||
}
|
||||
|
||||
private static final String SETUP_HTML = "file:///android_asset/editor.html";
|
||||
private static final String CALLBACK_SCHEME = "re-callback://";
|
||||
private static final String STATE_SCHEME = "re-state://";
|
||||
private boolean isReady = false;
|
||||
private String mContents;
|
||||
private OnTextChangeListener mTextChangeListener;
|
||||
private OnDecorationStateListener mDecorationStateListener;
|
||||
private AfterInitialLoadListener mLoadListener;
|
||||
|
||||
public RichEditor(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public RichEditor(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, android.R.attr.webViewStyle);
|
||||
}
|
||||
|
||||
@SuppressLint("SetJavaScriptEnabled")
|
||||
public RichEditor(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
|
||||
setVerticalScrollBarEnabled(false);
|
||||
setHorizontalScrollBarEnabled(false);
|
||||
getSettings().setJavaScriptEnabled(true);
|
||||
setWebChromeClient(new WebChromeClient());
|
||||
setWebViewClient(createWebviewClient());
|
||||
loadUrl(SETUP_HTML);
|
||||
|
||||
applyAttributes(context, attrs);
|
||||
}
|
||||
|
||||
protected EditorWebViewClient createWebviewClient() {
|
||||
return new EditorWebViewClient();
|
||||
}
|
||||
|
||||
public void setOnTextChangeListener(OnTextChangeListener listener) {
|
||||
mTextChangeListener = listener;
|
||||
}
|
||||
|
||||
public void setOnDecorationChangeListener(OnDecorationStateListener listener) {
|
||||
mDecorationStateListener = listener;
|
||||
}
|
||||
|
||||
public void setOnInitialLoadListener(AfterInitialLoadListener listener) {
|
||||
mLoadListener = listener;
|
||||
}
|
||||
|
||||
private void callback(String text) {
|
||||
mContents = text.replaceFirst(CALLBACK_SCHEME, "");
|
||||
if (mTextChangeListener != null) {
|
||||
mTextChangeListener.onTextChange(mContents);
|
||||
}
|
||||
}
|
||||
|
||||
private void stateCheck(String text) {
|
||||
String state = text.replaceFirst(STATE_SCHEME, "").toUpperCase(Locale.ENGLISH);
|
||||
List<Type> types = new ArrayList<>();
|
||||
for (Type type : Type.values()) {
|
||||
if (TextUtils.indexOf(state, type.name()) != -1) {
|
||||
types.add(type);
|
||||
}
|
||||
}
|
||||
|
||||
if (mDecorationStateListener != null) {
|
||||
mDecorationStateListener.onStateChangeListener(state, types);
|
||||
}
|
||||
}
|
||||
|
||||
private void applyAttributes(Context context, AttributeSet attrs) {
|
||||
final int[] attrsArray = new int[]{
|
||||
android.R.attr.gravity
|
||||
};
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, attrsArray);
|
||||
|
||||
int gravity = ta.getInt(0, NO_ID);
|
||||
switch (gravity) {
|
||||
case Gravity.LEFT:
|
||||
exec("javascript:RE.setTextAlign(\"left\")");
|
||||
break;
|
||||
case Gravity.RIGHT:
|
||||
exec("javascript:RE.setTextAlign(\"right\")");
|
||||
break;
|
||||
case Gravity.TOP:
|
||||
exec("javascript:RE.setVerticalAlign(\"top\")");
|
||||
break;
|
||||
case Gravity.BOTTOM:
|
||||
exec("javascript:RE.setVerticalAlign(\"bottom\")");
|
||||
break;
|
||||
case Gravity.CENTER_VERTICAL:
|
||||
exec("javascript:RE.setVerticalAlign(\"middle\")");
|
||||
break;
|
||||
case Gravity.CENTER_HORIZONTAL:
|
||||
exec("javascript:RE.setTextAlign(\"center\")");
|
||||
break;
|
||||
case Gravity.CENTER:
|
||||
exec("javascript:RE.setVerticalAlign(\"middle\")");
|
||||
exec("javascript:RE.setTextAlign(\"center\")");
|
||||
break;
|
||||
}
|
||||
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
public void setHtml(String contents, boolean isLoadTbImage) {
|
||||
if (contents == null) {
|
||||
contents = "";
|
||||
}
|
||||
try {
|
||||
exec("javascript:RE.setHtml('" + URLEncoder.encode(contents, "UTF-8") + "');");
|
||||
|
||||
if (isLoadTbImage && !NetworkUtils.isWifiConnected(getContext())) {
|
||||
exec("javascript:RE.replaceTbImage()");
|
||||
}
|
||||
|
||||
exec("javascript:RE.ImageClickListener()");
|
||||
|
||||
callback(contents);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
// No handling
|
||||
}
|
||||
mContents = contents;
|
||||
}
|
||||
|
||||
// public void replaceTbImage() {
|
||||
// exec("javascript:RE.replaceTbImage()");
|
||||
// }
|
||||
|
||||
public String getHtml() {
|
||||
return mContents;
|
||||
}
|
||||
|
||||
public void setEditorFontColor(int color) {
|
||||
String hex = convertHexColorString(color);
|
||||
exec("javascript:RE.setBaseTextColor('" + hex + "');");
|
||||
}
|
||||
|
||||
public void setEditorFontSize(int px) {
|
||||
exec("javascript:RE.setBaseFontSize('" + px + "px');");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPadding(int left, int top, int right, int bottom) {
|
||||
super.setPadding(left, top, right, bottom);
|
||||
exec("javascript:RE.setPadding('" + left + "px', '" + top + "px', '" + right + "px', '" + bottom
|
||||
+ "px');");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPaddingRelative(int start, int top, int end, int bottom) {
|
||||
// still not support RTL.
|
||||
setPadding(start, top, end, bottom);
|
||||
}
|
||||
|
||||
public void setEditorBackgroundColor(int color) {
|
||||
setBackgroundColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackgroundColor(int color) {
|
||||
super.setBackgroundColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackgroundResource(int resid) {
|
||||
Bitmap bitmap = RichEditorUtils.decodeResource(getContext(), resid);
|
||||
String base64 = RichEditorUtils.toBase64(bitmap);
|
||||
bitmap.recycle();
|
||||
|
||||
exec("javascript:RE.setBackgroundImage('url(data:image/png;base64," + base64 + ")');");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackground(Drawable background) {
|
||||
Bitmap bitmap = RichEditorUtils.toBitmap(background);
|
||||
String base64 = RichEditorUtils.toBase64(bitmap);
|
||||
bitmap.recycle();
|
||||
|
||||
exec("javascript:RE.setBackgroundImage('url(data:image/png;base64," + base64 + ")');");
|
||||
}
|
||||
|
||||
public void setBackground(String url) {
|
||||
exec("javascript:RE.setBackgroundImage('url(" + url + ")');");
|
||||
}
|
||||
|
||||
public void setEditorWidth(int px) {
|
||||
exec("javascript:RE.setWidth('" + px + "px');");
|
||||
}
|
||||
|
||||
public void setEditorHeight(int px) {
|
||||
exec("javascript:RE.setHeight('" + px + "px');");
|
||||
}
|
||||
|
||||
public void setPlaceholder(String placeholder) {
|
||||
exec("javascript:RE.setPlaceholder('" + placeholder + "');");
|
||||
}
|
||||
|
||||
public void setEditorFocus() {
|
||||
exec("javascript:RE.setEditorFocus();");
|
||||
}
|
||||
|
||||
public void setInputEnabled(Boolean inputEnabled) {
|
||||
exec("javascript:RE.setInputEnabled(" + inputEnabled + ")");
|
||||
}
|
||||
|
||||
public void replaceAllDfImage() {
|
||||
exec("javascript:RE.replaceAllDfImage()");
|
||||
}
|
||||
|
||||
public void setFocusByEnd() {
|
||||
exec("javascript:RE.setFocusByEnd()");
|
||||
}
|
||||
|
||||
public void replaceDfImageByUrl(String imgUrl) {
|
||||
exec("javascript:RE.replaceDfImageByUrl('" + imgUrl + "');");
|
||||
}
|
||||
|
||||
public void loadCSS(String cssFile) {
|
||||
String jsCSSImport = "(function() {" +
|
||||
" var head = document.getElementsByTagName(\"head\")[0];" +
|
||||
" var link = document.createElement(\"link\");" +
|
||||
" link.rel = \"stylesheet\";" +
|
||||
" link.type = \"text/css\";" +
|
||||
" link.href = \"" + cssFile + "\";" +
|
||||
" link.media = \"all\";" +
|
||||
" head.appendChild(link);" +
|
||||
"}) ();";
|
||||
exec("javascript:" + jsCSSImport + "");
|
||||
}
|
||||
|
||||
public void undo() {
|
||||
exec("javascript:RE.undo();");
|
||||
}
|
||||
|
||||
public void redo() {
|
||||
exec("javascript:RE.redo();");
|
||||
}
|
||||
|
||||
public void setBold() {
|
||||
exec("javascript:RE.setBold();");
|
||||
}
|
||||
|
||||
public void setItalic() {
|
||||
exec("javascript:RE.setItalic();");
|
||||
}
|
||||
|
||||
public void setSubscript() {
|
||||
exec("javascript:RE.setSubscript();");
|
||||
}
|
||||
|
||||
public void setSuperscript() {
|
||||
exec("javascript:RE.setSuperscript();");
|
||||
}
|
||||
|
||||
public void setStrikeThrough() {
|
||||
exec("javascript:RE.setStrikeThrough();");
|
||||
}
|
||||
|
||||
public void setUnderline() {
|
||||
exec("javascript:RE.setUnderline();");
|
||||
}
|
||||
|
||||
public void setTextColor(int color) {
|
||||
exec("javascript:RE.prepareInsert();");
|
||||
|
||||
String hex = convertHexColorString(color);
|
||||
exec("javascript:RE.setTextColor('" + hex + "');");
|
||||
}
|
||||
|
||||
public void setTextBackgroundColor(int color) {
|
||||
exec("javascript:RE.prepareInsert();");
|
||||
|
||||
String hex = convertHexColorString(color);
|
||||
exec("javascript:RE.setTextBackgroundColor('" + hex + "');");
|
||||
}
|
||||
|
||||
public void setFontSize(int fontSize) {
|
||||
if (fontSize > 7 || fontSize < 1) {
|
||||
Log.e("RichEditor", "Font size should have a value between 1-7");
|
||||
}
|
||||
exec("javascript:RE.setFontSize('" + fontSize + "');");
|
||||
}
|
||||
|
||||
public void removeFormat() {
|
||||
exec("javascript:RE.removeFormat();");
|
||||
}
|
||||
|
||||
public void setHeading(int heading) {
|
||||
exec("javascript:RE.setHeading('" + heading + "');");
|
||||
}
|
||||
|
||||
public void setIndent() {
|
||||
exec("javascript:RE.setIndent();");
|
||||
}
|
||||
|
||||
public void setOutdent() {
|
||||
exec("javascript:RE.setOutdent();");
|
||||
}
|
||||
|
||||
public void setAlignLeft() {
|
||||
exec("javascript:RE.setJustifyLeft();");
|
||||
}
|
||||
|
||||
public void setAlignCenter() {
|
||||
exec("javascript:RE.setJustifyCenter();");
|
||||
}
|
||||
|
||||
public void setAlignRight() {
|
||||
exec("javascript:RE.setJustifyRight();");
|
||||
}
|
||||
|
||||
public void setBlockquote() {
|
||||
exec("javascript:RE.setBlockquote();");
|
||||
}
|
||||
|
||||
public void setBullets() {
|
||||
exec("javascript:RE.setBullets();");
|
||||
}
|
||||
|
||||
public void setNumbers() {
|
||||
exec("javascript:RE.setNumbers();");
|
||||
}
|
||||
|
||||
public void insertImage(String url) {
|
||||
exec("javascript:RE.prepareInsert();");
|
||||
exec("javascript:RE.insertImage('" + url + "');");
|
||||
}
|
||||
|
||||
public void insertLink(String href, String title) {
|
||||
exec("javascript:RE.prepareInsert();");
|
||||
exec("javascript:RE.insertLink('" + href + "', '" + title + "');");
|
||||
}
|
||||
|
||||
public void insertTodo() {
|
||||
exec("javascript:RE.prepareInsert();");
|
||||
exec("javascript:RE.setTodo('" + RichEditorUtils.getCurrentTime() + "');");
|
||||
}
|
||||
|
||||
public void focusEditor() {
|
||||
requestFocus();
|
||||
exec("javascript:RE.focus();");
|
||||
}
|
||||
|
||||
public void clearFocusEditor() {
|
||||
exec("javascript:RE.blurFocus();");
|
||||
}
|
||||
|
||||
|
||||
public String getText() {
|
||||
return AskUtils.stripHtml(mContents);
|
||||
}
|
||||
|
||||
|
||||
private String convertHexColorString(int color) {
|
||||
return String.format("#%06X", (0xFFFFFF & color));
|
||||
}
|
||||
|
||||
protected void exec(final String trigger) {
|
||||
if (isReady) {
|
||||
load(trigger);
|
||||
} else {
|
||||
postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
exec(trigger);
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
|
||||
private void load(String trigger) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
evaluateJavascript(trigger, null);
|
||||
} else {
|
||||
loadUrl(trigger);
|
||||
}
|
||||
}
|
||||
|
||||
protected class EditorWebViewClient extends WebViewClient {
|
||||
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
isReady = url.equalsIgnoreCase(SETUP_HTML);
|
||||
if (mLoadListener != null) {
|
||||
mLoadListener.onAfterInitialLoad(isReady);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
String decode;
|
||||
try {
|
||||
decode = URLDecoder.decode(url, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
// No handling
|
||||
return false;
|
||||
}
|
||||
|
||||
if (TextUtils.indexOf(url, CALLBACK_SCHEME) == 0) {
|
||||
callback(decode);
|
||||
return true;
|
||||
} else if (TextUtils.indexOf(url, STATE_SCHEME) == 0) {
|
||||
stateCheck(decode);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.shouldOverrideUrlLoading(view, url);
|
||||
}
|
||||
}
|
||||
}
|
||||
230
app/src/main/java/com/gh/common/view/TabIndicatorView.java
Normal file
230
app/src/main/java/com/gh/common/view/TabIndicatorView.java
Normal file
@ -0,0 +1,230 @@
|
||||
package com.gh.common.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.lightgame.config.CommonDebug;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
|
||||
/**
|
||||
* Created by khy on 2/12/17.
|
||||
*/
|
||||
|
||||
public class TabIndicatorView extends View implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener {
|
||||
|
||||
private TabLayout mTabLayout;
|
||||
private ViewPager mViewPager;
|
||||
|
||||
private int mIndicatorSpace;
|
||||
|
||||
private int mIndicatorHeight;
|
||||
|
||||
private int mIndicatorWidth;
|
||||
|
||||
|
||||
public TabIndicatorView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public TabIndicatorView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public TabIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
mIndicatorHeight = MeasureSpec.getSize(heightMeasureSpec);
|
||||
}
|
||||
|
||||
public void setupWithTabLayout(final TabLayout tableLayout) {
|
||||
mTabLayout = tableLayout;
|
||||
|
||||
|
||||
tableLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT);
|
||||
tableLayout.setOnTabSelectedListener(this);
|
||||
|
||||
|
||||
tableLayout.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
|
||||
@Override
|
||||
public void onScrollChanged() {
|
||||
if (mTabLayout.getScrollX() != getScrollX())
|
||||
scrollTo(mTabLayout.getScrollX(), mTabLayout.getScrollY());
|
||||
}
|
||||
});
|
||||
|
||||
ViewCompat.setElevation(this, ViewCompat.getElevation(mTabLayout));
|
||||
tableLayout.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mTabLayout.getTabCount() > 0)
|
||||
onTabSelected(mTabLayout.getTabAt(0));
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
//清除Tab background
|
||||
for (int tab = 0; tab < tableLayout.getTabCount(); tab++) {
|
||||
View tabView = getTabViewByPosition(tab);
|
||||
if (tabView != null) tabView.setBackgroundResource(0);
|
||||
}
|
||||
}
|
||||
|
||||
public void setupWithViewPager(ViewPager viewPager) {
|
||||
mViewPager = viewPager;
|
||||
viewPager.addOnPageChangeListener(this);
|
||||
}
|
||||
|
||||
public void setIndicatorWidth(int width) {
|
||||
this.mIndicatorWidth = DisplayUtils.dip2px(getContext(), width);
|
||||
}
|
||||
|
||||
public void setIndicatorSpace(int space) {
|
||||
this.mIndicatorSpace = DisplayUtils.dip2px(getContext(), space);
|
||||
}
|
||||
|
||||
private int getIndicatorSpace() {
|
||||
if (mIndicatorSpace != 0) return mIndicatorSpace;
|
||||
if (mIndicatorWidth != 0) {
|
||||
View tag = getTabViewByPosition(0);
|
||||
if (tag != null) return (tag.getWidth() - mIndicatorWidth) / 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
Drawable drawable = getResources().getDrawable(R.drawable.ask_tab_indicator_bg); // 固定Indicator背景 有需要可以自行更改
|
||||
drawable.setBounds(l, t, r, b);
|
||||
drawable.draw(canvas);
|
||||
}
|
||||
|
||||
int l;
|
||||
int t;
|
||||
int r;
|
||||
int b;
|
||||
|
||||
private void generatePath(int position, float positionOffset) {
|
||||
|
||||
RectF range = new RectF();
|
||||
View tabView = getTabViewByPosition(position);
|
||||
|
||||
if (tabView == null)
|
||||
return;
|
||||
|
||||
int left, top, right, bottom;
|
||||
left = top = right = bottom = 0;
|
||||
|
||||
if (positionOffset > 0.f && position < mTabLayout.getTabCount() - 1) {
|
||||
View nextTabView = getTabViewByPosition(position + 1);
|
||||
if (nextTabView != null) {
|
||||
left += (int) (nextTabView.getLeft() * positionOffset + tabView.getLeft() * (1.f - positionOffset));
|
||||
right += (int) (nextTabView.getRight() * positionOffset + tabView.getRight() * (1.f - positionOffset));
|
||||
}
|
||||
|
||||
left += getIndicatorSpace();
|
||||
right -= getIndicatorSpace();
|
||||
top = tabView.getTop() + getPaddingTop();
|
||||
bottom = tabView.getBottom() - getPaddingBottom();
|
||||
range.set(left, top, right, bottom);
|
||||
} else {
|
||||
|
||||
left = tabView.getLeft() + getIndicatorSpace();
|
||||
right = tabView.getRight() - getIndicatorSpace();
|
||||
top = tabView.getTop() + getPaddingTop();
|
||||
bottom = tabView.getBottom() - getPaddingBottom();
|
||||
range.set(left, top, right, bottom);
|
||||
|
||||
if (range.isEmpty())
|
||||
return;
|
||||
}
|
||||
r = right;
|
||||
l = left;
|
||||
t = top;
|
||||
b = top + mIndicatorHeight;
|
||||
}
|
||||
|
||||
private View getTabViewByPosition(int position) {
|
||||
if (mTabLayout != null && mTabLayout.getTabCount() > 0) {
|
||||
ViewGroup tabStrip = (ViewGroup) mTabLayout.getChildAt(0);
|
||||
return tabStrip != null ? tabStrip.getChildAt(position) : null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
generatePath(position, positionOffset);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
if (mTabLayout.getSelectedTabPosition() != position) {
|
||||
TabLayout.Tab tab = mTabLayout.getTabAt(position);
|
||||
if (tab != null) tab.select();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 当已经有一个ViewPager后,当TabLayout的tab改变的时候在onTabSelected方法直接调用ViewPager的
|
||||
* setCurrentItem方法调用这个方法后会触发ViewPager的scroll事件也就是在onPageScrolled方法中调用
|
||||
* generatePath方法来更新Path,如果没有ViewPager的话直接在onTabSelected的方法中调用generatePath
|
||||
* 方法。
|
||||
**/
|
||||
@Override
|
||||
public void onTabSelected(TabLayout.Tab tab) {
|
||||
if (mViewPager != null) {
|
||||
if (CommonDebug.IS_DEBUG) {
|
||||
Utils.log("onTabSelected : TabPosition=>" + tab.getPosition()
|
||||
+ " ViewPagerCount=>" + mViewPager.getAdapter().getCount());
|
||||
}
|
||||
if (tab.getPosition() != mViewPager.getCurrentItem())
|
||||
try {
|
||||
mViewPager.setCurrentItem(tab.getPosition());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
generatePath(tab.getPosition(), 0);
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTabUnselected(TabLayout.Tab tab) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTabReselected(TabLayout.Tab tab) {
|
||||
|
||||
}
|
||||
}
|
||||
@ -15,13 +15,13 @@ public class VerticalItemDecoration extends RecyclerView.ItemDecoration {
|
||||
|
||||
private Paint paint;
|
||||
private int mInterval = 0;
|
||||
private boolean isShowIntervalTop;
|
||||
private boolean mIsShowIntervalTop;
|
||||
|
||||
public VerticalItemDecoration(Context context, int interval, boolean isShowIntervalTop) {
|
||||
paint = new Paint();
|
||||
paint.setColor(ContextCompat.getColor(context, R.color.background));
|
||||
mInterval = DisplayUtils.dip2px(context, interval);
|
||||
this.isShowIntervalTop = isShowIntervalTop;
|
||||
mIsShowIntervalTop = isShowIntervalTop;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -35,7 +35,7 @@ public class VerticalItemDecoration extends RecyclerView.ItemDecoration {
|
||||
int top = child.getBottom() + layoutParams.bottomMargin;
|
||||
int bottom = top + mInterval;
|
||||
|
||||
if (i == 0 && isShowIntervalTop) {
|
||||
if (i == 0 && mIsShowIntervalTop) {
|
||||
c.drawRect(left, 0, right, bottom, paint);
|
||||
} else {
|
||||
c.drawRect(left, top, right, bottom, paint);
|
||||
@ -47,7 +47,7 @@ public class VerticalItemDecoration extends RecyclerView.ItemDecoration {
|
||||
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
|
||||
RecyclerView.State state) {
|
||||
int position = parent.getChildPosition(view);
|
||||
if (position == 0 && isShowIntervalTop) {
|
||||
if (position == 0 && mIsShowIntervalTop) {
|
||||
outRect.set(0, mInterval, 0, mInterval);
|
||||
} else {
|
||||
outRect.set(0, 0, 0, mInterval);
|
||||
|
||||
@ -52,10 +52,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
private ArrayMap<String, LinkedBlockingQueue<String>> platformMap;
|
||||
private ArrayMap<String, ArrayMap<String, DownloadEntity>> gameMap;
|
||||
|
||||
/**
|
||||
* TODO change to {@link DownloadStatus}
|
||||
*/
|
||||
private ArrayMap<String, String> statusMap;
|
||||
private ArrayMap<String, DownloadStatus> statusMap;
|
||||
private ArrayMap<String, DownloadEntity> downloadingMap;
|
||||
|
||||
private DownloadDao mDownloadDao;
|
||||
@ -69,7 +66,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
|
||||
DownloadNotification.showDownloadingNotification(mContext);
|
||||
|
||||
DownloadManager.getInstance(mContext).putStatus(entity.getUrl(), "delete");
|
||||
DownloadManager.getInstance(mContext).putStatus(entity.getUrl(), DownloadStatus.delete);
|
||||
|
||||
downloadingMap.remove(entity.getUrl());
|
||||
}
|
||||
@ -156,7 +153,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
|
||||
List<DownloadEntity> list = getAll();
|
||||
for (DownloadEntity downloadEntity : list) {
|
||||
statusMap.put(downloadEntity.getUrl(), downloadEntity.getStatus().name());
|
||||
statusMap.put(downloadEntity.getUrl(), downloadEntity.getStatus());
|
||||
if (!DownloadStatus.done.equals(downloadEntity.getStatus())) {
|
||||
downloadingMap.put(downloadEntity.getUrl(), downloadEntity);
|
||||
}
|
||||
@ -221,6 +218,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
downloadEntity.setGameId(gameEntity.getId());
|
||||
downloadEntity.setEntrance(entrance);
|
||||
downloadEntity.setLocation(location);
|
||||
downloadEntity.setVersionName(apkEntity.getVersion());
|
||||
int installed = 0;
|
||||
for (ApkEntity apk : gameEntity.getApk()) {
|
||||
if (PackageManager.isInstalled(apk.getPackageName())) {
|
||||
@ -242,7 +240,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
}
|
||||
|
||||
//TODO remove
|
||||
DownloadManager.getInstance(context).putStatus(downloadEntity.getUrl(), "downloading");
|
||||
DownloadManager.getInstance(context).putStatus(downloadEntity.getUrl(), DownloadStatus.downloading);
|
||||
|
||||
// 收集下载数据
|
||||
DataCollectionUtils.uploadDownload(context, downloadEntity, "开始");
|
||||
@ -264,7 +262,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
mContext.startService(getIntent(downloadEntity, DownloadStatus.add));
|
||||
}
|
||||
put(url, System.currentTimeMillis());
|
||||
putStatus(url, DownloadStatus.downloading.name());
|
||||
putStatus(url, DownloadStatus.downloading);
|
||||
}
|
||||
Utils.log(DownloadManager.class.getSimpleName(), "add");
|
||||
}
|
||||
@ -397,16 +395,16 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
return gameMap.get(name);
|
||||
}
|
||||
|
||||
void putStatus(String url, String status) {
|
||||
private void putStatus(String url, DownloadStatus status) {
|
||||
statusMap.put(url, status);
|
||||
onTaskStatusChanged(getDownloadEntityByUrl(url));
|
||||
}
|
||||
|
||||
public String getStatus(String url) {
|
||||
public DownloadStatus getStatus(String url) {
|
||||
return statusMap.get(url);
|
||||
}
|
||||
|
||||
public ArrayMap<String, String> getStatusMap() {
|
||||
public ArrayMap<String, DownloadStatus> getStatusMap() {
|
||||
return statusMap;
|
||||
}
|
||||
|
||||
@ -506,7 +504,7 @@ public class DownloadManager implements DownloadStatusListener {
|
||||
if (entry != null) {
|
||||
mContext.startService(getIntent(entry, DownloadStatus.pause));
|
||||
put(url, System.currentTimeMillis());
|
||||
statusMap.put(url, DownloadStatus.pause.name());
|
||||
statusMap.put(url, DownloadStatus.pause);
|
||||
}
|
||||
Utils.log(DownloadManager.class.getSimpleName(), "pause");
|
||||
}
|
||||
|
||||
@ -2,114 +2,23 @@ package com.gh.gamecenter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.PackageUtils;
|
||||
import com.gh.common.util.StringUtils;
|
||||
import com.gh.gamecenter.manager.UpdateManager;
|
||||
import com.tencent.bugly.beta.tinker.TinkerManager;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import butterknife.OnLongClick;
|
||||
import com.halo.assistant.fragment.AboutFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/2/28.
|
||||
*/
|
||||
public class AboutActivity extends BaseActivity {
|
||||
|
||||
@BindView(R.id.about_version_tv)
|
||||
TextView mAboutVersion;
|
||||
@BindView(R.id.setting_rl_update)
|
||||
RelativeLayout mAboutUpdateRl;
|
||||
@BindView(R.id.about_version_pb)
|
||||
ProgressBar mAboutPb;
|
||||
@BindView(R.id.about_tv_version)
|
||||
TextView mVersionName;
|
||||
|
||||
private Handler handler = new MyHandler(this);
|
||||
@Deprecated
|
||||
public class AboutActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context) {
|
||||
Intent intent = new Intent(context, AboutActivity.class);
|
||||
return intent;
|
||||
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(AboutActivity.class)
|
||||
// .setFragment(AboutFragment.class).build();
|
||||
return getIntent(context, AboutFragment.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_about;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_about));
|
||||
|
||||
// ((TextView) findViewById(R.id.about_tv_version)).setText("V" + PackageUtils.getVersionName(this));
|
||||
mVersionName.setText("V" + PackageUtils.getPatchVersionName()); // TODO 版本号暂时与gradle versionName不一致
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
handler.removeCallbacksAndMessages(null);
|
||||
}
|
||||
|
||||
@OnClick({R.id.about_shengming, R.id.setting_rl_update})
|
||||
public void OnClick(View view) {
|
||||
if (view.getId() == R.id.setting_rl_update) {
|
||||
UpdateManager.getInstance(AboutActivity.this).checkUpdate(false, handler); // 检出更新
|
||||
} else if (view.getId() == R.id.about_shengming) {
|
||||
Intent intent = WebActivity.getWebIntent(this);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@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.getPatchVersionName() + "." + tinkerId);
|
||||
} else {
|
||||
Toast.makeText(getApplicationContext(), R.string.toast_upload_latest, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static class MyHandler extends Handler {
|
||||
|
||||
private WeakReference<AboutActivity> mWeakReference;
|
||||
|
||||
public MyHandler(AboutActivity activity) {
|
||||
mWeakReference = new WeakReference<>(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
final AboutActivity activity = mWeakReference.get();
|
||||
if (activity != null) {
|
||||
if (msg.what == 0) {
|
||||
final String version = (String) msg.obj;
|
||||
activity.mAboutVersion.setText(StringUtils.buildString("发现新版本 V", version));
|
||||
} else if (msg.what == 1) {
|
||||
activity.mAboutVersion.setText(R.string.toast_upload_latest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
130
app/src/main/java/com/gh/gamecenter/AskSearchActivity.java
Normal file
130
app/src/main/java/com/gh/gamecenter/AskSearchActivity.java
Normal file
@ -0,0 +1,130 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.CheckLoginUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.ask.QuestionsEditFragment;
|
||||
import com.gh.gamecenter.ask.search.AskSearchFragment;
|
||||
import com.lightgame.utils.Util_System_Keyboard;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
|
||||
/**
|
||||
* Created by khy on 8/12/17.
|
||||
*/
|
||||
|
||||
public class AskSearchActivity extends BaseActivity {
|
||||
|
||||
@BindView(R.id.etSearch)
|
||||
EditText mSearchEt;
|
||||
@BindView(R.id.ivDeleteText)
|
||||
ImageView mSearchCancel;
|
||||
@BindView(R.id.btnQuestions)
|
||||
View mQuestionsBtn;
|
||||
|
||||
private AskSearchFragment mAskSearchFragment;
|
||||
|
||||
private String mSearchKey;
|
||||
|
||||
public static Intent getIntent(Context context) {
|
||||
return new Intent(context, AskSearchActivity.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleMessage(Message msg) {
|
||||
if (msg.what == 1) search();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_ask_search;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mAskSearchFragment = new AskSearchFragment();
|
||||
getSupportFragmentManager().beginTransaction().replace(
|
||||
R.id.layout_fragment_content, mAskSearchFragment).commitAllowingStateLoss();
|
||||
|
||||
findViewById(R.id.btnGoBack).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
mSearchEt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
|
||||
Util_System_Keyboard.hideSoftKeyboard(AskSearchActivity.this);
|
||||
search();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
mSearchEt.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if (s.length() > 0) {
|
||||
mSearchCancel.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mSearchCancel.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
String newSearchKey = s.toString().trim();
|
||||
if (!newSearchKey.equals(mSearchKey)) {
|
||||
mBaseHandler.removeMessages(1);
|
||||
mSearchKey = newSearchKey;
|
||||
if (mSearchKey.length() >= 0) {
|
||||
mBaseHandler.sendEmptyMessageDelayed(1, 300);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@OnClick({R.id.ivDeleteText, R.id.btnQuestions})
|
||||
public void onClick(View v) {
|
||||
if (v.getId() == R.id.ivDeleteText) {
|
||||
mSearchCancel.setVisibility(View.GONE);
|
||||
mSearchEt.setText("");
|
||||
} else if (v.getId() == R.id.btnQuestions) {
|
||||
CheckLoginUtils.checkLogin(this, () -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_SEARCHKEY, mSearchKey);
|
||||
NormalActivity.startFragment(this, QuestionsEditFragment.class, bundle);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void search() {
|
||||
if (mAskSearchFragment != null) {
|
||||
mAskSearchFragment.search(mSearchKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -12,7 +12,6 @@ import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.Html;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
@ -93,8 +92,6 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
TextView mScanUser;
|
||||
@BindView(R.id.scan_user_des)
|
||||
TextView mScanUserDes;
|
||||
@BindView(R.id.reuse_actionbar)
|
||||
RelativeLayout mActionbar;
|
||||
@BindView(R.id.scan_hint)
|
||||
TextView mScanHint;
|
||||
@BindView(R.id.choosereceiver_roket_anim)
|
||||
@ -109,11 +106,6 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
ImageView mRoketAnimLeft;
|
||||
@BindView(R.id.choosereceiver_roket_right)
|
||||
ImageView mRoketAnimRight;
|
||||
@BindView(R.id.actionbar_iv_back)
|
||||
ImageView mBackIv;
|
||||
@BindView(R.id.actionbar_tv_title)
|
||||
TextView mTitleTv;
|
||||
|
||||
|
||||
private static final String KET_SHOWCONNHINTDIALOG = "showConnHintDialog";
|
||||
|
||||
@ -144,24 +136,13 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_choosereceiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
closeSocket();
|
||||
HaloApp.remove("FileInfo");
|
||||
return R.layout.activity_receive_choose;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_choose_activity));
|
||||
|
||||
mTitleTv.setTextColor(Color.WHITE);
|
||||
mBackIv.setImageResource(R.drawable.reuse_kc_back);
|
||||
|
||||
setNavigationTitle(R.string.title_choose_activity, android.R.color.white);
|
||||
|
||||
// 添加分享图标
|
||||
TextView hintTv = new TextView(this);
|
||||
@ -173,17 +154,9 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
RelativeLayout reuse_actionbar = (RelativeLayout) mContentView.findViewById(
|
||||
R.id.reuse_actionbar);
|
||||
RelativeLayout reuse_actionbar = (RelativeLayout) findViewById(R.id.reuse_actionbar);
|
||||
reuse_actionbar.addView(hintTv, params);
|
||||
|
||||
//修改沉浸栏以及ActionBar 颜色
|
||||
mActionbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.scan_bg));
|
||||
// SystemBarTintManager tintManager = getTintManager(); // TODO: 27/09/17 更改沉浸栏颜色??
|
||||
// if (tintManager != null) {
|
||||
// tintManager.setStatusBarTintResource(R.color.scan_bg);
|
||||
// }
|
||||
//
|
||||
init();
|
||||
|
||||
hintTv.setOnClickListener(new View.OnClickListener() {
|
||||
@ -303,11 +276,11 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mRadarView.setSearching(false);
|
||||
isDestroy = true;
|
||||
isStopScan = true;
|
||||
handler.removeCallbacksAndMessages(null);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -377,14 +350,16 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
createSendMsgToServerRunnable(WifiMgr.getInstance(this).getIpAddressFromHotspot());
|
||||
}
|
||||
|
||||
@OnClick(R.id.actionbar_rl_back)
|
||||
public void onBackListener() {
|
||||
@Override
|
||||
public boolean onHandleBackPressed() {
|
||||
closeSocket();
|
||||
HaloApp.remove("FileInfo");
|
||||
} //发送UDP通知信息到 文件接收方 开启ServerSocketRunnable
|
||||
HaloApp.remove(KcSelectGameActivity.KEY_FILE_INFO);
|
||||
return false;
|
||||
}
|
||||
|
||||
//发送UDP通知信息到 文件接收方 开启ServerSocketRunnable
|
||||
private void createSendMsgToServerRunnable(final String ipAddress) {
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
@ -509,7 +484,7 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
}
|
||||
|
||||
private void sendFileInfoListToFileReceiverWithUdp(int serverPort, InetAddress ipAddress) {
|
||||
List<FileInfo> fileInfoList = (List<FileInfo>) HaloApp.get("FileInfo", false);
|
||||
List<FileInfo> fileInfoList = (List<FileInfo>) HaloApp.get(KcSelectGameActivity.KEY_FILE_INFO, false);
|
||||
if (fileInfoList == null) {
|
||||
return;
|
||||
}
|
||||
@ -529,7 +504,7 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
|
||||
// 连接中-动画
|
||||
private void readyAnimView() {
|
||||
mActionbar.setVisibility(View.GONE);
|
||||
getSupportActionBar().hide();
|
||||
mRoketRl.setVisibility(View.VISIBLE);
|
||||
mRoketRl.animate()
|
||||
.alpha(1f)
|
||||
@ -617,7 +592,7 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
|
||||
|
||||
// 连接失败-动画
|
||||
private void connFailedAnimView() {
|
||||
mActionbar.setVisibility(View.VISIBLE);
|
||||
getSupportActionBar().show();
|
||||
Utils.toast(ChooseReceiverActivity.this, "连接失败");
|
||||
if (mScaleAnimation != null) {
|
||||
mScaleAnimation.cancel();
|
||||
|
||||
@ -2,240 +2,24 @@ package com.gh.gamecenter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.Html;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.view.VerticalItemDecoration;
|
||||
import com.gh.gamecenter.adapter.CleanApkAdapter;
|
||||
import com.gh.gamecenter.entity.InstallGameEntity;
|
||||
import com.gh.gamecenter.eventbus.EBSkip;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import com.halo.assistant.fragment.ApkCleanerFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/1/24.
|
||||
*/
|
||||
public class CleanApkActivity extends BaseActivity implements CleanApkAdapter.OnScanListener {
|
||||
|
||||
@BindView(R.id.apk_count)
|
||||
TextView mApkCount;
|
||||
@BindView(R.id.apk_rv)
|
||||
RecyclerView mApkRv;
|
||||
@BindView(R.id.delete_btn)
|
||||
TextView mApkDeleteBtn;
|
||||
@BindView(R.id.select_game_all)
|
||||
CheckBox mApkSelectAll;
|
||||
@BindView(R.id.scan_pb)
|
||||
ProgressBar mScanPb;
|
||||
@BindView(R.id.reuse_nodata_skip_tv_hint)
|
||||
TextView mNodataSkipTv;
|
||||
@BindView(R.id.reuse_nodata_skip_tv_btn)
|
||||
TextView mNodataSkipBtn;
|
||||
@BindView(R.id.reuse_nodata_skip)
|
||||
LinearLayout mNodataSkipLl;
|
||||
@BindView(R.id.delete_bottom)
|
||||
LinearLayout mDeleteBottom;
|
||||
@BindView(R.id.select_game_installed_ll)
|
||||
RelativeLayout mInstallAllData;
|
||||
|
||||
private CleanApkAdapter mAdapter;
|
||||
@Deprecated
|
||||
public class CleanApkActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context) {
|
||||
Intent intent = new Intent(context, CleanApkActivity.class);
|
||||
return intent;
|
||||
// Intent intent = new Intent(context, CleanApkActivity.class);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(CleanApkActivity.class)
|
||||
// .setFragment(ApkCleanerFragment.class).build();
|
||||
|
||||
return getIntent(context, ApkCleanerFragment.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_clean_apk;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_clean_apk));
|
||||
|
||||
mNodataSkipLl.setVisibility(View.GONE);
|
||||
|
||||
mAdapter = new CleanApkAdapter(this, this, mApkDeleteBtn, mApkSelectAll);
|
||||
mApkRv.setLayoutManager(new LinearLayoutManager(this));
|
||||
mApkRv.addItemDecoration(new VerticalItemDecoration(this, 8, true));
|
||||
mApkRv.setAdapter(mAdapter);
|
||||
|
||||
mApkSelectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
ArrayMap<Integer, Boolean> selectPosition = new ArrayMap<>();
|
||||
ArrayMap<Integer, Boolean> selectPosition1 = mAdapter.getSelectPosition();
|
||||
int itemCount = mAdapter.getItemCount();
|
||||
if (isChecked) {
|
||||
for (int i = 0; i < itemCount; i++) {
|
||||
selectPosition.put(i, true);
|
||||
}
|
||||
} else {
|
||||
int selectCount = 0;
|
||||
for (Integer integer : selectPosition1.keySet()) {
|
||||
if (selectPosition1.get(integer)) {
|
||||
selectCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectCount != itemCount) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < itemCount; i++) {
|
||||
selectPosition.put(i, false);
|
||||
}
|
||||
}
|
||||
|
||||
mAdapter.setSelectPosition(selectPosition);
|
||||
mAdapter.notifyItemRangeChanged(0, itemCount);
|
||||
mAdapter.checkBoxControl(isChecked, 0);
|
||||
}
|
||||
});
|
||||
|
||||
mNodataSkipBtn.setText("去首页看看");
|
||||
mNodataSkipTv.setText("安装包已清理干净\n快去发现更多好玩的游戏吧!");
|
||||
mNodataSkipTv.setLineSpacing(0, 1.5f);
|
||||
|
||||
}
|
||||
|
||||
@OnClick({R.id.delete_btn, R.id.reuse_nodata_skip_tv_btn})
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.delete_btn: {
|
||||
String s = mApkDeleteBtn.getText().toString();
|
||||
if ("停止扫描".equals(s)) {
|
||||
mAdapter.isStopScan();
|
||||
} else {
|
||||
if ("一键删除".equals(s)) {
|
||||
Utils.toast(CleanApkActivity.this, "请选择需要删除的安装包");
|
||||
return;
|
||||
}
|
||||
|
||||
final List<InstallGameEntity> apkList = mAdapter.getApkList();
|
||||
final ArrayMap<Integer, Boolean> selectPosition = mAdapter.getSelectPosition();
|
||||
|
||||
for (int i = 0; i < apkList.size(); i++) {
|
||||
if (selectPosition.get(i) && apkList.get(i).getInstallStatus() == 1) {
|
||||
DialogUtils.showWarningDialog(CleanApkActivity.this, "删除安装包"
|
||||
, Html.fromHtml(getString(R.string.delete_apk_hint))
|
||||
, "取消 ", "确定"
|
||||
, new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
deleteApk(apkList, selectPosition);
|
||||
}
|
||||
}, null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
deleteApk(apkList, selectPosition);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case R.id.reuse_nodata_skip_tv_btn: {
|
||||
Intent intent = MainActivity.getMainIntent(this);
|
||||
startActivity(intent);
|
||||
|
||||
mNodataSkipBtn.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, 0));
|
||||
}
|
||||
}, 300);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteApk(List<InstallGameEntity> apkList, ArrayMap<Integer, Boolean> selectPosition) {
|
||||
long size = 0;
|
||||
for (int i = 0; i < apkList.size(); i++) {
|
||||
if (selectPosition.get(i)) {
|
||||
InstallGameEntity installGameEntity = apkList.get(i);
|
||||
size = size + installGameEntity.getGameSize();
|
||||
File file = new File(installGameEntity.getGamePath());
|
||||
if (file.isFile() && file.exists()) {
|
||||
file.delete();
|
||||
mAdapter.deleteApk(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double allSize = (((float) size / 1024) / 1024);
|
||||
DecimalFormat df = new DecimalFormat("#.00");
|
||||
String sizeName = df.format(allSize) + "MB";
|
||||
Utils.toast(CleanApkActivity.this, "删除成功,已为您节省" + sizeName + "空间");
|
||||
mApkDeleteBtn.setText("一键删除");
|
||||
mAdapter.notifyDataSetChanged(); // 刷新Adapter position
|
||||
|
||||
updateScanData();
|
||||
|
||||
if (apkList.size() == 0) { // 全部删除
|
||||
mNodataSkipLl.setVisibility(View.VISIBLE);
|
||||
mInstallAllData.setVisibility(View.GONE);
|
||||
mDeleteBottom.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateScanData() {
|
||||
long allSize = 0;
|
||||
List<InstallGameEntity> apkList = mAdapter.getApkList();
|
||||
for (InstallGameEntity installGameEntity : apkList) {
|
||||
allSize = allSize + installGameEntity.getGameSize();
|
||||
}
|
||||
|
||||
double size = (((float) allSize / 1024) / 1024);
|
||||
DecimalFormat df = new DecimalFormat("0.00");
|
||||
String sizeName = df.format(size) + "MB";
|
||||
|
||||
mApkCount.setText(Html.fromHtml(getString(R.string.clean_apk_count, apkList.size(), sizeName)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScanOver() {
|
||||
mApkDeleteBtn.setText("立即删除");
|
||||
mApkDeleteBtn.setBackgroundResource(R.drawable.game_item_btn_red_style);
|
||||
|
||||
updateScanData();
|
||||
|
||||
mScanPb.setVisibility(View.GONE);
|
||||
mApkSelectAll.setVisibility(View.VISIBLE);
|
||||
mApkSelectAll.setChecked(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void noData() {
|
||||
mNodataSkipBtn.setText("去首页看看");
|
||||
mNodataSkipTv.setText("暂无安装包");
|
||||
mNodataSkipLl.setVisibility(View.VISIBLE);
|
||||
mInstallAllData.setVisibility(View.GONE);
|
||||
mDeleteBottom.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,33 +3,25 @@ package com.gh.gamecenter;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.gamecenter.collection.CollectionFragment;
|
||||
import com.gh.base.fragment.BaseFragment_ViewPager;
|
||||
import com.gh.gamecenter.collection.CollectionWrapperFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 18/07/17.
|
||||
*/
|
||||
@Deprecated
|
||||
public class CollectionActivity extends NormalActivity {
|
||||
|
||||
public class CollectionActivity extends BaseActivity {
|
||||
|
||||
|
||||
public static final Intent getCollectionActivity(Context context) {
|
||||
Intent intent = new Intent(context, CollectionActivity.class);
|
||||
return intent;
|
||||
@NonNull
|
||||
public static Intent getCollectionActivity(Context context) {
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(BaseFragment_ViewPager.ARGS_INDEX, CollectionWrapperFragment.INDEX_TOOL);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(CollectionActivity.class)
|
||||
// .setFragment(CollectionWrapperFragment.class).setArgs(args).build();
|
||||
return getIntent(context, CollectionWrapperFragment.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_collection;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle("我的收藏");
|
||||
|
||||
getSupportFragmentManager().beginTransaction().replace(
|
||||
R.id.layout_fragment_content, CollectionFragment.newInstance(0)).commitAllowingStateLoss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,58 +3,23 @@ package com.gh.gamecenter;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.adapter.CommentDetailAdapter;
|
||||
|
||||
import butterknife.BindView;
|
||||
import com.halo.assistant.fragment.comment.CommentDetailFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/3/22.
|
||||
*/
|
||||
public class CommentDetailActivity extends BaseActivity {
|
||||
@Deprecated
|
||||
public class CommentDetailActivity extends NormalActivity {
|
||||
|
||||
@BindView(R.id.comment_detail_rv)
|
||||
RecyclerView mRecyclerView;
|
||||
|
||||
private CommentDetailAdapter mAdapter;
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
|
||||
public static Intent getCommentDetailIntent(Context context, String commentId) {
|
||||
Intent intent = new Intent(context, CommentDetailActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_COMMENTID, commentId);
|
||||
return intent;
|
||||
public static Intent getIntent(Context context, String commentId) {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_COMMENTID, commentId);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(CommentDetailActivity.class)
|
||||
// .setFragment(CommentDetailFragment.class).setArgs(args).build();
|
||||
return getIntent(context, CommentDetailFragment.class, args);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_comment_detail;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_comment_detail));
|
||||
|
||||
String commentId = getIntent().getStringExtra(EntranceUtils.KEY_COMMENTID);
|
||||
|
||||
mAdapter = new CommentDetailAdapter(this, commentId);
|
||||
mLayoutManager = new LinearLayoutManager(this);
|
||||
mRecyclerView.setLayoutManager(mLayoutManager);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
|
||||
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE && !mAdapter.isOver() && !mAdapter.isLoading()) {
|
||||
mAdapter.loadData(mAdapter.getItemCount());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,18 +1,43 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import com.gh.base.BaseAppCompatToolBarActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
public class CommonActivity extends BaseAppCompatToolBarActivity {
|
||||
import com.gh.base.BaseToolBarActivity;
|
||||
import com.gh.gamecenter.normal.ToolbarController;
|
||||
|
||||
public class CommonActivity extends BaseToolBarActivity implements ToolbarController {
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.layout_wrapper_toolbar;
|
||||
return R.layout.layout_wrapper_activity_toolbar;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onNavigationIconClicked() {
|
||||
finish();
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNavigationTitle(int res) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNavigationTitle(CharSequence res) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToolbarMenu(int res) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public MenuItem getMenuItem(int res) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,209 +4,25 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.GridLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.base.OnRequestCallBackListener;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.view.Concern_LinearLayout;
|
||||
import com.gh.gamecenter.adapter.ConcernAdapter;
|
||||
import com.gh.gamecenter.adapter.ConcernRecommendAdapter;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.eventbus.EBConcernChanged;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
|
||||
import static com.gh.gamecenter.personal.PersonalFragment.LOGIN_TAG;
|
||||
|
||||
public class ConcernActivity extends BaseActivity implements OnClickListener, OnRequestCallBackListener {
|
||||
|
||||
@BindView(R.id.concern_rv_show)
|
||||
RecyclerView mConcernRv;
|
||||
@BindView(R.id.concern_rv_recommend)
|
||||
RecyclerView mConcernRecommendRv;
|
||||
@BindView(R.id.concern_rl_title)
|
||||
RelativeLayout mConcernTitleRl;
|
||||
@BindView(R.id.reuse_none_data)
|
||||
LinearLayout mNoneData;
|
||||
@BindView(R.id.reuse_tv_none_data)
|
||||
TextView mNoDataTv;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConn;
|
||||
|
||||
private ConcernAdapter concernAdapter;
|
||||
private ConcernRecommendAdapter concernRecommendAdapter;
|
||||
import com.halo.assistant.fragment.myconcern.MyConcernFragment;
|
||||
|
||||
/**
|
||||
* 我的关注页面
|
||||
*/
|
||||
@Deprecated
|
||||
public class ConcernActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String entrance) {
|
||||
Intent intent = new Intent(context, ConcernActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(ConcernActivity.class)
|
||||
// .setFragment(MyConcernFragment.class).setArgs(args).build();
|
||||
return getIntent(context, MyConcernFragment.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_concern;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
initTitle(getString(R.string.title_concern));
|
||||
|
||||
mConcernTitleRl.setOnClickListener(this);
|
||||
|
||||
mConcernRv.setHasFixedSize(true);
|
||||
mConcernRv.setLayoutManager(new GridLayoutManager(this, 3));
|
||||
concernAdapter = new ConcernAdapter(this, this, mEntrance);
|
||||
mConcernRv.setAdapter(concernAdapter);
|
||||
|
||||
mConcernRecommendRv.setHasFixedSize(true);
|
||||
mConcernRecommendRv.setLayoutManager(new GridLayoutManager(this, 4));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadDone() { // 关注推荐 回调
|
||||
mConcernTitleRl.setVisibility(View.VISIBLE);
|
||||
mConcernRecommendRv.setVisibility(View.VISIBLE);
|
||||
int size = concernRecommendAdapter.getRecommendGameList().size();
|
||||
mConcernRecommendRv.setLayoutManager(new GridLayoutManager(this, size > 4 ? 4 : size));
|
||||
mConcernRecommendRv.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
|
||||
// 关注的游戏加载完成 再加载热门推荐(根据已关注的游戏过滤)
|
||||
@Override
|
||||
public void loadDone(Object obj) {
|
||||
mNoConn.setVisibility(View.GONE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
|
||||
concernRecommendAdapter = new ConcernRecommendAdapter(this, this, (List<GameEntity>)obj, mEntrance);
|
||||
mConcernRecommendRv.setAdapter(concernRecommendAdapter);
|
||||
|
||||
if (obj == null) { // 未登录状态
|
||||
mNoneData.setVisibility(View.VISIBLE);
|
||||
mConcernRv.setVisibility(View.GONE);
|
||||
mNoDataTv.setText(R.string.login_hint);
|
||||
mNoDataTv.setTextColor(ContextCompat.getColor(ConcernActivity.this, R.color.theme));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadError() {
|
||||
mNoConn.setVisibility(View.VISIBLE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadEmpty() {
|
||||
if (concernAdapter.getConcernGameList() == null
|
||||
|| concernAdapter.getConcernGameList().isEmpty()) {
|
||||
mNoneData.setVisibility(View.VISIBLE);
|
||||
mConcernRv.setVisibility(View.GONE);
|
||||
mNoDataTv.setText(R.string.game_empty);
|
||||
mNoDataTv.setTextColor(ContextCompat.getColor(ConcernActivity.this, R.color.c7c7c7));
|
||||
}
|
||||
if (concernRecommendAdapter.getRecommendGameList() == null
|
||||
|| concernRecommendAdapter.getRecommendGameList().isEmpty()) {
|
||||
mConcernTitleRl.setVisibility(View.GONE);
|
||||
mConcernRecommendRv.setVisibility(View.GONE);
|
||||
} else {
|
||||
if (concernRecommendAdapter.getRecommendGameList().size() < 4) {
|
||||
mConcernRecommendRv.setLayoutManager(
|
||||
new GridLayoutManager(this, concernRecommendAdapter.getRecommendGameList().size()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick({R.id.concern_rl_title, R.id.reuse_tv_none_data})
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.concern_rl_title:
|
||||
if (mConcernRecommendRv.getVisibility() == View.VISIBLE) {
|
||||
((Concern_LinearLayout) mContentView).hideRecyclerView();
|
||||
} else {
|
||||
((Concern_LinearLayout) mContentView).showRecyclerView();
|
||||
}
|
||||
break;
|
||||
case R.id.reuse_tv_none_data:
|
||||
String hint = getString(R.string.login_hint);
|
||||
if (hint.equals(mNoDataTv.getText().toString()))
|
||||
startActivity(LoginActivity.getIntent(this, false));
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 关注事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBConcernChanged changed) {
|
||||
if (!changed.isSingle()) {
|
||||
return;
|
||||
}
|
||||
if (changed.isConcern()) {
|
||||
GameEntity concernGame = concernRecommendAdapter.concernGame(changed.getGameId());
|
||||
|
||||
if (concernGame != null) {
|
||||
concernAdapter.getConcernGameList().add(0, concernGame);
|
||||
concernAdapter.notifyDataSetChanged();
|
||||
if (mNoneData.getVisibility() == View.VISIBLE) {
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
mConcernRv.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0, size = concernRecommendAdapter.getRecommendGameList().size(); i < size; i++) {
|
||||
if (changed.getGameId().equals(concernRecommendAdapter.getRecommendGameList().get(i).getId())) {
|
||||
concernRecommendAdapter.getRecommendGameList().remove(i);
|
||||
concernRecommendAdapter.notifyItemRemoved(i); // 删除动画
|
||||
concernRecommendAdapter.notifyDataSetChanged(); // 防止列表串行
|
||||
if (concernRecommendAdapter.getRecommendGameList().isEmpty()) {
|
||||
mConcernTitleRl.setVisibility(View.GONE);
|
||||
mConcernRecommendRv.setVisibility(View.GONE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
GameEntity gameEntity = concernAdapter.cancelConcern(changed.getGameId());
|
||||
if (gameEntity != null) {
|
||||
concernRecommendAdapter.getRecommendGameList().add(0, gameEntity);
|
||||
concernRecommendAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
if (concernRecommendAdapter.getRecommendGameList().isEmpty()) {
|
||||
mConcernTitleRl.setVisibility(View.GONE);
|
||||
mConcernRecommendRv.setVisibility(View.GONE);
|
||||
} else {
|
||||
mConcernTitleRl.setVisibility(View.VISIBLE);
|
||||
mConcernRecommendRv.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 登录事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBReuse reuse) {
|
||||
if (reuse.getType().equals(LOGIN_TAG)) { // 登入
|
||||
concernAdapter = new ConcernAdapter(this, this, mEntrance);
|
||||
mConcernRv.setAdapter(concernAdapter);
|
||||
mConcernRv.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,8 +25,8 @@ import com.gh.common.util.BitmapUtils;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.LoginUtils;
|
||||
import com.gh.common.view.CropImageCustom;
|
||||
import com.gh.gamecenter.manager.UserManager;
|
||||
import com.lightgame.download.FileUtils;
|
||||
|
||||
import org.json.JSONException;
|
||||
@ -54,6 +54,8 @@ public class CropImageActivity extends BaseActivity {
|
||||
|
||||
private SharedPreferences sp;
|
||||
|
||||
private UserManager mUserManager;
|
||||
|
||||
private Handler handler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
@ -88,10 +90,12 @@ public class CropImageActivity extends BaseActivity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
initTitle(getString(R.string.title_crop_image));
|
||||
setNavigationTitle(getString(R.string.title_crop_image));
|
||||
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
mUserManager = UserManager.getInstance();
|
||||
|
||||
RelativeLayout reuse_actionbar = (RelativeLayout) findViewById(R.id.reuse_actionbar);
|
||||
|
||||
TextView confirm = new TextView(this);
|
||||
@ -119,7 +123,7 @@ public class CropImageActivity extends BaseActivity {
|
||||
handler.sendEmptyMessage(1);
|
||||
return null;
|
||||
}
|
||||
return Observable.just(LoginUtils.getToken(CropImageActivity.this));
|
||||
return Observable.just(mUserManager.getToken());
|
||||
}
|
||||
}).flatMap(new Func1<String, Observable<JSONObject>>() {
|
||||
@Override
|
||||
@ -137,7 +141,7 @@ public class CropImageActivity extends BaseActivity {
|
||||
if (result != null) {
|
||||
try {
|
||||
if (result.getInt("statusCode") == 401) {
|
||||
return Observable.just(FileUtils.uploadFile(Config.API_HOST + "support/upload/img?type=icon", path, LoginUtils.getToken(CropImageActivity.this)));
|
||||
return Observable.just(FileUtils.uploadFile(Config.API_HOST + "support/upload/img?type=icon", path,mUserManager.getToken()));
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@ -4,7 +4,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.base.fragment.BaseFragment_ViewPager;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.download.DownloadFragment;
|
||||
|
||||
@ -13,7 +13,7 @@ import com.gh.gamecenter.download.DownloadFragment;
|
||||
*
|
||||
* @author 黄壮华
|
||||
*/
|
||||
public class DownloadManagerActivity extends BaseActivity {
|
||||
public class DownloadManagerActivity extends NormalActivity {
|
||||
|
||||
public static final int INDEX_DOWNLOAD = 0;
|
||||
public static final int INDEX_UPDATE = 1;
|
||||
@ -22,51 +22,64 @@ public class DownloadManagerActivity extends BaseActivity {
|
||||
public static final String TAG = "DownloadManagerActivity";
|
||||
|
||||
|
||||
// TODO: 20/09/17 增加currentItem 入口 插件更新可能需要
|
||||
public static Intent getDownloadMangerIntent(Context context, String url, String entrance) {
|
||||
Intent intent = new Intent(context, DownloadManagerActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_URL, url);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
// Intent intent = new Intent(context, DownloadManagerActivity.class);
|
||||
// intent.putExtra(EntranceUtils.KEY_URL, url);
|
||||
// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_URL, url);
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return getIntent(context, DownloadFragment.class, bundle);
|
||||
}
|
||||
|
||||
public static void startDownloadManagerActivity(Context context, String url, String entrance) {
|
||||
Intent intent = new Intent(context, DownloadManagerActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_URL, url);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(intent);
|
||||
public static Intent getDownloadMangerIntent(Context context, int position, String entrance) {
|
||||
// Intent intent = new Intent(context, DownloadManagerActivity.class);
|
||||
// intent.putExtra(EntranceUtils.KEY_URL, url);
|
||||
// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
bundle.putInt(BaseFragment_ViewPager.ARGS_INDEX, position);
|
||||
return getIntent(context, DownloadFragment.class, bundle);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_downloadmanager;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// public static void startDownloadManagerActivity(Context context, String url, String entrance) {
|
||||
// Intent intent = new Intent(context, DownloadManagerActivity.class);
|
||||
// intent.putExtra(EntranceUtils.KEY_URL, url);
|
||||
// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
// context.startActivity(intent);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected int getLayoutId() {
|
||||
// return R.layout.activity_downloadmanager;
|
||||
// }
|
||||
|
||||
initTitle(getString(R.string.title_downloadmanager));
|
||||
|
||||
startDownloadFragment();
|
||||
}
|
||||
|
||||
private void startDownloadFragment() {
|
||||
int currentItem = getIntent().getIntExtra(EntranceUtils.KEY_CURRENTITEM, 0);
|
||||
Bundle data = getIntent().getBundleExtra(EntranceUtils.KEY_DATA);
|
||||
if (data != null) {
|
||||
currentItem = data.getInt(EntranceUtils.KEY_CURRENTITEM, 0);
|
||||
}
|
||||
|
||||
getSupportFragmentManager().beginTransaction().replace(
|
||||
R.id.layout_fragment_content, DownloadFragment.newInstance(currentItem)).commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
startDownloadFragment();
|
||||
setIntent(intent);
|
||||
}
|
||||
// @Override
|
||||
// protected void onCreate(Bundle savedInstanceState) {
|
||||
// super.onCreate(savedInstanceState);
|
||||
//
|
||||
// setNavigationTitle(getString(R.string.title_downloadmanager));
|
||||
//
|
||||
// startDownloadFragment();
|
||||
// }
|
||||
//
|
||||
// private void startDownloadFragment() {
|
||||
// int currentItem = getIntent().getIntExtra(EntranceUtils.KEY_CURRENTITEM, 0);
|
||||
// Bundle data = getIntent().getBundleExtra(EntranceUtils.KEY_DATA);
|
||||
// if (data != null) {
|
||||
// currentItem = data.getInt(EntranceUtils.KEY_CURRENTITEM, 0);
|
||||
// }
|
||||
//
|
||||
// getSupportFragmentManager().beginTransaction().replace(
|
||||
// R.id.layout_fragment_content, DownloadFragment.newInstance(currentItem)).commitAllowingStateLoss();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void onNewIntent(Intent intent) {
|
||||
// super.onNewIntent(intent);
|
||||
// startDownloadFragment();
|
||||
// setIntent(intent);
|
||||
// }
|
||||
}
|
||||
@ -15,7 +15,6 @@ import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
@ -70,7 +69,7 @@ import butterknife.OnClick;
|
||||
/**
|
||||
* Created by khy on 2017/1/20.
|
||||
*/
|
||||
public class FileReceiverActivity extends BaseActivity implements OnReceiverCancelListener, OnClickListener {
|
||||
public class FileReceiverActivity extends BaseActivity implements OnReceiverCancelListener {
|
||||
|
||||
@BindView(R.id.sender_rv)
|
||||
RecyclerView mReceiverRv;
|
||||
@ -125,7 +124,7 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
int index = getCurrentFileInfoIndex();
|
||||
if (index == -100) {
|
||||
Utils.toast(FileReceiverActivity.this, "接收失败");
|
||||
colsePage();
|
||||
closePage();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -184,30 +183,32 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_file_sender;
|
||||
return R.layout.activity_receive_send;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
public boolean onHandleBackPressed() {
|
||||
|
||||
backHint();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void backHint() {
|
||||
if (isReceivesOver) {
|
||||
colsePage();
|
||||
closePage();
|
||||
} else {
|
||||
DialogUtils.showWarningDialog(FileReceiverActivity.this, "退出提示", "退出会中断接收,确定要退出吗?"
|
||||
, "取消", "确定"
|
||||
, new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
colsePage();
|
||||
closePage();
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void colsePage() {
|
||||
private void closePage() {
|
||||
|
||||
if (mDatagramSocket != null) {
|
||||
// mDatagramSocket.disconnect();
|
||||
@ -243,11 +244,13 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
}
|
||||
}
|
||||
List<DownloadEntity> all = DownloadDao.getInstance(this).getAll();
|
||||
EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE, all.size()));
|
||||
if (all.size() > 0) {
|
||||
EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE, all.size()));
|
||||
}
|
||||
EventBus.getDefault().post(new EBDownloadStatus("download"));
|
||||
|
||||
mReceiverServer.close();
|
||||
// HaloApp.remove("FileInfo");
|
||||
// HaloApp.remove(KcSelectGameActivity.KEY_FILE_INFO);
|
||||
mFileInfos.clear();
|
||||
|
||||
HaloApp.put("sendData", sendData);
|
||||
@ -258,11 +261,11 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_file_receive));
|
||||
setNavigationTitle(R.string.title_file_receive, android.R.color.white);
|
||||
|
||||
isDestroy = false;
|
||||
|
||||
// mFileInfos = (List<FileInfo>) HaloApp.get("FileInfo", false);
|
||||
// mFileInfos = (List<FileInfo>) HaloApp.get(KcSelectGameActivity.KEY_FILE_INFO, false);
|
||||
|
||||
sendData = new ArrayList<>();
|
||||
|
||||
@ -276,7 +279,6 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
mReceiverRv.addItemDecoration(new VerticalItemDecoration(this, 8, true));
|
||||
mReceiverRv.setAdapter(mFileReceiverAdapter);
|
||||
|
||||
|
||||
mKeepReceiverTv.setText("继续接收");
|
||||
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
@ -290,7 +292,6 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
initServer(); //启动接收服务
|
||||
}
|
||||
|
||||
findViewById(R.id.actionbar_rl_back).setOnClickListener(this);
|
||||
}
|
||||
|
||||
private void initUserData() {
|
||||
@ -319,9 +320,9 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
*/
|
||||
private void initServer() {
|
||||
mReceiverServer = new ServerRunnable(Constant.DEFAULT_SERVER_PORT);
|
||||
HaloApp.MAIN_EXECUTOR.execute(mReceiverServer);
|
||||
HaloApp.getInstance().getMainExecutor().execute(mReceiverServer);
|
||||
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
@ -369,7 +370,7 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
}
|
||||
|
||||
private void sendMessageToSender(final String sendData) throws Exception {
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
@ -392,12 +393,12 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
* @param msg
|
||||
*/
|
||||
private void parseFileInfo(String msg) {
|
||||
// mFileInfos = (List<FileInfo>) HaloApp.get("FileInfo", false); // mFileInfos 数据异常 需要重新获取
|
||||
// mFileInfos = (List<FileInfo>) HaloApp.get(KcSelectGameActivity.KEY_FILE_INFO, false); // mFileInfos 数据异常 需要重新获取
|
||||
FileInfo fileInfo = FileInfo.toObject(msg);
|
||||
if (fileInfo != null && fileInfo.getFilePath() != null) {
|
||||
mFileInfos.add(fileInfo);
|
||||
Utils.log("FileReceiverActivity 添加一条数据::" + msg);
|
||||
// HaloApp.put("FileInfo", mFileInfos);
|
||||
// HaloApp.put(KcSelectGameActivity.KEY_FILE_INFO, mFileInfos);
|
||||
|
||||
}
|
||||
}
|
||||
@ -494,12 +495,15 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
|
||||
}
|
||||
|
||||
@OnClick({R.id.actionbar_rl_back, R.id.sender_keep_send, R.id.sender_back})
|
||||
@Override
|
||||
protected boolean onNavigationIconClicked() {
|
||||
backHint();
|
||||
return true;
|
||||
}
|
||||
|
||||
@OnClick({R.id.sender_keep_send, R.id.sender_back})
|
||||
public void back(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.actionbar_rl_back:
|
||||
backHint();
|
||||
break;
|
||||
case R.id.sender_back:
|
||||
backHint();
|
||||
break;
|
||||
@ -516,15 +520,6 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.actionbar_rl_back:
|
||||
backHint();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ServerSocket启动线程
|
||||
*/
|
||||
@ -547,7 +542,9 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
} @Override
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Utils.log("接收线程:Socket已经开启");
|
||||
try {
|
||||
@ -648,7 +645,7 @@ public class FileReceiverActivity extends BaseActivity implements OnReceiverCanc
|
||||
}
|
||||
});
|
||||
|
||||
HaloApp.MAIN_EXECUTOR.execute(mFileReceiver);
|
||||
HaloApp.getInstance().getMainExecutor().execute(mFileReceiver);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@ -41,6 +41,8 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
@ -80,6 +82,9 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
|
||||
private long mStartTime;
|
||||
|
||||
// 快传文件发送单线程
|
||||
private Executor SINGLE_EXECUTOR = Executors.newSingleThreadExecutor();
|
||||
|
||||
private Handler handler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
@ -117,7 +122,7 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_file_sender;
|
||||
return R.layout.activity_receive_send;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -126,7 +131,7 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
if (resultCode == KC_REPEAT_RESULT && requestCode == KC_REPEAT_RESULT) {
|
||||
mSenderAdapter.notifyDataSetChanged();
|
||||
initUserData();
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
@ -166,16 +171,17 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
public boolean onHandleBackPressed() {
|
||||
backHint();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_file_sender));
|
||||
setNavigationTitle(R.string.title_file_sender, android.R.color.white);
|
||||
|
||||
mFileInfos = (List<FileInfo>) HaloApp.get("FileInfo", false);
|
||||
mFileInfos = (List<FileInfo>) HaloApp.get(KcSelectGameActivity.KEY_FILE_INFO, false);
|
||||
|
||||
isDestroy = false;
|
||||
|
||||
@ -188,12 +194,14 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
|
||||
init();
|
||||
|
||||
findViewById(R.id.actionbar_rl_back).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
backHint();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onNavigationIconClicked() {
|
||||
|
||||
backHint();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void init() {
|
||||
@ -218,20 +226,17 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
|
||||
private void backHint() {
|
||||
if (!isSendOver) {
|
||||
DialogUtils.showWarningDialog(FileSenderActivity.this, "退出传送", "退出会中断所有游戏的传送,确定要退出吗?"
|
||||
, "取消", "确定"
|
||||
, new DialogUtils.ConfirmListener() {
|
||||
DialogUtils.showWarningDialog(FileSenderActivity.this,
|
||||
"退出传送", "退出会中断所有游戏的传送,确定要退出吗?", "取消", "确定", new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
colsePage();
|
||||
|
||||
closePage();
|
||||
}
|
||||
}, null);
|
||||
} else {
|
||||
colsePage();
|
||||
closePage();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//初始化用户数据
|
||||
@ -327,12 +332,12 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
|
||||
});
|
||||
mFileSenderList.add(fileSender);
|
||||
HaloApp.FILE_SENDER_EXECUTOR.execute(fileSender);
|
||||
SINGLE_EXECUTOR.execute(fileSender);
|
||||
}
|
||||
}
|
||||
|
||||
private void startReceiver() {
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
@ -344,7 +349,7 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
});
|
||||
}
|
||||
|
||||
public void colsePage() {
|
||||
public void closePage() {
|
||||
if (mDatagramSocket != null) {
|
||||
// mDatagramSocket.disconnect();
|
||||
mDatagramSocket.close();
|
||||
@ -352,10 +357,10 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
}
|
||||
|
||||
stopAllFileSendingTask();
|
||||
HaloApp.remove("FileInfo");
|
||||
HaloApp.remove(KcSelectGameActivity.KEY_FILE_INFO);
|
||||
HaloApp.put("sendData", sendData);
|
||||
|
||||
FileSenderActivity.this.finish();
|
||||
finish();
|
||||
}
|
||||
|
||||
private int getCurrentFileInfoIndex(FileInfo curFileInfo) {
|
||||
@ -474,10 +479,9 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick({R.id.actionbar_rl_back, R.id.sender_keep_send, R.id.sender_back})
|
||||
@OnClick({R.id.sender_keep_send, R.id.sender_back})
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.actionbar_rl_back:
|
||||
case R.id.sender_back:
|
||||
backHint();
|
||||
break;
|
||||
|
||||
@ -1,647 +1,40 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.AppBarLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.base.adapter.FragmentAdapter;
|
||||
import com.gh.common.util.ApkActiveUtils;
|
||||
import com.gh.common.util.AppDebugConfig;
|
||||
import com.gh.common.util.CheckLoginUtils;
|
||||
import com.gh.common.util.ConcernUtils;
|
||||
import com.gh.common.util.DataCollectionUtils;
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.common.util.DetailDownloadUtils;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.ImageUtils;
|
||||
import com.gh.common.util.ShareUtils;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.adapter.viewholder.DetailViewHolder;
|
||||
import com.gh.gamecenter.entity.ApkEntity;
|
||||
import com.gh.gamecenter.entity.GameDetailEntity;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.entity.UserDataEntity;
|
||||
import com.gh.gamecenter.eventbus.EBConcernChanged;
|
||||
import com.gh.gamecenter.eventbus.EBDownloadStatus;
|
||||
import com.gh.gamecenter.eventbus.EBPackage;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
import com.gh.gamecenter.gamedetail.FuliFragment;
|
||||
import com.gh.gamecenter.gamedetail.XinXiFragment;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.jakewharton.rxbinding.view.RxView;
|
||||
import com.lightgame.download.DataWatcher;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.lightgame.view.NoScrollableViewPager;
|
||||
import com.tencent.tauth.Tencent;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.functions.Action1;
|
||||
import rx.schedulers.Schedulers;
|
||||
import com.gh.gamecenter.gamedetail.GameDetailFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/3/24.
|
||||
* 游戏详情适配器
|
||||
*/
|
||||
public class GameDetailActivity extends BaseActivity {
|
||||
|
||||
public static final String SKIP_XINXI = "skipXinxi";
|
||||
public static final String SKIP_FULI = "skipFuli";
|
||||
public static final String OPEN_APPBAR = "openappbar";
|
||||
public static final String SCROLL_TO_KAIFU = "scrollToKaiFu";
|
||||
|
||||
@BindView(R.id.gamedetail_vp)
|
||||
NoScrollableViewPager mViewPager;
|
||||
@BindView(R.id.reuse_ll_loading)
|
||||
LinearLayout mLoading;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConnection;
|
||||
@BindView(R.id.actionbar_tv_title)
|
||||
TextView mTitle;
|
||||
@BindView(R.id.gamedetail_iv_thumb)
|
||||
SimpleDraweeView mGameIcon;
|
||||
@BindView(R.id.gamedetail_tv_name)
|
||||
TextView mGameName;
|
||||
@BindView(R.id.gamedetail_tv_info)
|
||||
TextView mGameInfo;
|
||||
@BindView(R.id.gamedetail_tv_concern)
|
||||
TextView mGameConcern;
|
||||
@BindView(R.id.gamedetail_tabbar)
|
||||
LinearLayout mTabBar;
|
||||
@BindView(R.id.gamedetail_tabbar_fuli_tv)
|
||||
TextView mTanBarFuLiTv;
|
||||
@BindView(R.id.gamedetail_tabbar_xinxi_tv)
|
||||
TextView mTanBarXinXiTv;
|
||||
@BindView(R.id.gamedetail_appbar)
|
||||
AppBarLayout mAppBarLayout;
|
||||
@BindView(R.id.gamedetail_kaifu_hint)
|
||||
View mKaifuHint;
|
||||
@BindView(R.id.gamedetail_iv_libao)
|
||||
View mLibaoIcon;
|
||||
@BindView(R.id.gamedetail_game_server_type)
|
||||
TextView mServerType;
|
||||
|
||||
View mShareIv;
|
||||
|
||||
private String mGameId;
|
||||
private GameEntity mGameEntity;
|
||||
private DownloadEntity mDownloadEntity;
|
||||
private GameDetailEntity mGameDetailEntity;
|
||||
private String downloadAddWord;
|
||||
private String downloadOffText;
|
||||
private String name; // 页面位置
|
||||
private String title; // 页面标题
|
||||
private String shareCode;
|
||||
private boolean mIsTouchScreen = false;
|
||||
private boolean mIsShowKaifuHint;
|
||||
private boolean mIsScrollToKaiFu;
|
||||
private int mCurVpPosition;
|
||||
|
||||
private DataWatcher dataWatcher = new DataWatcher() {
|
||||
@Override
|
||||
public void onDataChanged(DownloadEntity downloadEntity) {
|
||||
if (mGameEntity != null && mGameEntity.getApk().size() == 1) {
|
||||
String url = mGameEntity.getApk().get(0).getUrl();
|
||||
if (url.equals(downloadEntity.getUrl())) {
|
||||
if (!"pause".equals(DownloadManager.getInstance(GameDetailActivity.this).
|
||||
getStatus(downloadEntity.getUrl()))) {
|
||||
mDownloadEntity = downloadEntity;
|
||||
DetailDownloadUtils.detailInvalidate(getDetailViewHolder());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private DetailViewHolder getDetailViewHolder() {
|
||||
// 每次获取需要重新创建, 防止数据刷新
|
||||
return new DetailViewHolder(mContentView, mGameEntity, mDownloadEntity, downloadOffText, downloadAddWord,
|
||||
false, mEntrance, name, title); // 下载按钮ViewHolder
|
||||
}
|
||||
public class GameDetailActivity extends NormalActivity {
|
||||
|
||||
/**
|
||||
* 启动游戏详情页面
|
||||
*/
|
||||
public static void startGameDetailActivity(Context context, GameEntity gameEntity, String entrance) {
|
||||
Intent intent = new Intent(context, GameDetailActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
intent.putExtra(GameEntity.class.getSimpleName(), gameEntity);
|
||||
context.startActivity(intent);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
bundle.putParcelable(GameEntity.TAG, gameEntity);
|
||||
// context.startActivity(new IntentFactory.Builder(context).setActivity(GameDetailActivity.class)
|
||||
// .setFragment(GameDetailFragment.class).setArgs(bundle).build());
|
||||
context.startActivity(getIntent(context, GameDetailFragment.class, bundle));
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动游戏详情页面
|
||||
*/
|
||||
public static void startGameDetailActivity(Context context, String gameId, String entrance) {
|
||||
Intent intent = new Intent(context, GameDetailActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMEID, gameId);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_gamedetail;
|
||||
}
|
||||
|
||||
//接收QQ或者QQ空间分享回调
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE
|
||||
|| requestCode == com.tencent.connect.common.Constants.REQUEST_QZONE_SHARE) {
|
||||
Tencent.onActivityResultData(requestCode, resultCode, data, ShareUtils.getInstance(this).QqShareListener);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
initTitle("");
|
||||
|
||||
// 增加actionBar Button
|
||||
RelativeLayout reuse_actionbar = mContentView.findViewById(R.id.reuse_actionbar);
|
||||
mShareIv = LayoutInflater.from(this).inflate(R.layout.menu_action_share, reuse_actionbar, false); // 绑定parentView 否则会丢失宽高
|
||||
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mShareIv.getLayoutParams();
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
reuse_actionbar.addView(mShareIv, params);
|
||||
|
||||
mViewPager.setScrollable(true);
|
||||
|
||||
name = "游戏详情";
|
||||
|
||||
mGameId = getIntent().getStringExtra(EntranceUtils.KEY_GAMEID);
|
||||
mEntrance = getIntent().getStringExtra(EntranceUtils.KEY_ENTRANCE);
|
||||
Bundle data = getIntent().getBundleExtra(EntranceUtils.KEY_DATA);
|
||||
if (data != null) {
|
||||
mGameId = data.getString(EntranceUtils.KEY_GAMEID);
|
||||
}
|
||||
|
||||
if (mGameId == null) {
|
||||
mGameEntity = getIntent().getParcelableExtra(GameEntity.class.getSimpleName());
|
||||
if (mGameEntity != null) {
|
||||
mGameId = mGameEntity.getId();
|
||||
mTitle.setText(mGameEntity.getName());
|
||||
title = mGameEntity.getName();
|
||||
}
|
||||
}
|
||||
|
||||
if (AppDebugConfig.IS_DEBUG) {
|
||||
AppDebugConfig.logMethodWithParams(this, getIntent().toUri(Intent.URI_INTENT_SCHEME), mGameId, mGameEntity);
|
||||
}
|
||||
|
||||
if (mGameEntity != null) {
|
||||
getGameDetail();
|
||||
} else if (mGameId != null) {
|
||||
getGameDigest();
|
||||
} else {
|
||||
mLoading.setVisibility(View.GONE);
|
||||
mNoConnection.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
mCurVpPosition = position;
|
||||
if (position == 0) {
|
||||
if (mIsShowKaifuHint) {
|
||||
mKaifuHint.setVisibility(View.VISIBLE);
|
||||
}
|
||||
mTanBarFuLiTv.setTextColor(Color.WHITE);
|
||||
mTanBarFuLiTv.setBackgroundResource(R.drawable.tabbar_left_bg);
|
||||
mTanBarXinXiTv.setTextColor(Color.BLACK);
|
||||
mTanBarXinXiTv.setBackgroundDrawable(new ColorDrawable(0));
|
||||
} else {
|
||||
mKaifuHint.setVisibility(View.GONE);
|
||||
mTanBarXinXiTv.setTextColor(Color.WHITE);
|
||||
mTanBarXinXiTv.setBackgroundResource(R.drawable.tabbar_right_bg);
|
||||
mTanBarFuLiTv.setTextColor(Color.BLACK);
|
||||
mTanBarFuLiTv.setBackgroundDrawable(new ColorDrawable(0));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
|
||||
@Override
|
||||
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
|
||||
int total = appBarLayout.getTotalScrollRange();
|
||||
if (Math.abs(verticalOffset) > total / 2) {
|
||||
mTitle.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mTitle.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (Math.abs(verticalOffset) == total && mIsScrollToKaiFu) {
|
||||
mIsScrollToKaiFu = false;
|
||||
EventBus.getDefault().post(new EBReuse("scrollToKaiFu"));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 防抖处理
|
||||
RxView.clicks(mShareIv)
|
||||
.throttleFirst(1, TimeUnit.SECONDS)
|
||||
.subscribe(new Action1<Void>() {
|
||||
@Override
|
||||
public void call(Void aVoid) {
|
||||
if (TextUtils.isEmpty(shareCode)) return;
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("点击", "分享");
|
||||
DataUtils.onEvent(GameDetailActivity.this, "插件数据", mGameEntity.getName(), kv);
|
||||
|
||||
DataCollectionUtils.uploadClick(GameDetailActivity.this, "分享", "游戏详情", mGameEntity.getName());
|
||||
|
||||
String url = "http://www.ghzs666.com/game/" + shareCode;
|
||||
showShare(url, mGameEntity.getName(), mGameEntity.getIcon(), null, mGameEntity.getTag(), false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
DownloadManager.getInstance(this).removeObserver(dataWatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (mGameEntity != null
|
||||
&& mGameEntity.getApk() != null
|
||||
&& mGameEntity.getApk().size() == 1) {
|
||||
DetailDownloadUtils.detailInitDownload(getDetailViewHolder(), true);
|
||||
}
|
||||
DownloadManager.getInstance(this).addObserver(dataWatcher);
|
||||
}
|
||||
|
||||
private void initGameDetailTop() {
|
||||
|
||||
mLoading.setVisibility(View.GONE);
|
||||
mAppBarLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
if (mGameDetailEntity.getUserData() != null && mGameDetailEntity.getUserData().isGameConcerned()) {
|
||||
mGameConcern.setText(getString(R.string.cancel_concern));
|
||||
mGameConcern.setBackgroundResource(R.drawable.border_red_bg);
|
||||
mGameConcern.setTextColor(ContextCompat.getColor(this, R.color.red));
|
||||
} else {
|
||||
mGameConcern.setText(getString(R.string.concern));
|
||||
mGameConcern.setBackgroundResource(R.drawable.textview_concern_red_style);
|
||||
mGameConcern.setTextColor(0xffffffff);
|
||||
}
|
||||
|
||||
mGameName.setText(mGameEntity.getName());
|
||||
ImageUtils.Companion.display(mGameIcon, mGameEntity.getIcon());
|
||||
if (mGameEntity.getApk() == null || mGameEntity.getApk().isEmpty()) {
|
||||
mGameInfo.setText("");
|
||||
} else {
|
||||
ApkEntity apkEntity = mGameEntity.getApk().get(0);
|
||||
mGameInfo.setText(String.format("V%s | %s", apkEntity.getVersion(), apkEntity.getSize()));
|
||||
}
|
||||
|
||||
int paddRight = 0;
|
||||
String serverType = mGameEntity.getServerType();
|
||||
if (TextUtils.isEmpty(serverType)) {
|
||||
mServerType.setVisibility(View.GONE);
|
||||
} else {
|
||||
mServerType.setVisibility(View.VISIBLE);
|
||||
mServerType.setText(serverType);
|
||||
if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) {
|
||||
mServerType.setBackgroundResource(R.drawable.textview_server_tag);
|
||||
if ("删档内测".equals(serverType)) {
|
||||
paddRight = DisplayUtils.dip2px(this, 50);
|
||||
} else {
|
||||
paddRight = DisplayUtils.dip2px(this, 60);
|
||||
}
|
||||
} else {
|
||||
mServerType.setBackgroundResource(R.drawable.textview_orange_up);
|
||||
paddRight = DisplayUtils.dip2px(this, 30);
|
||||
}
|
||||
}
|
||||
mGameName.setPadding(0, 0, paddRight, 0);
|
||||
|
||||
if (mGameEntity.isLibaoExists()) {
|
||||
mLibaoIcon.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mLibaoIcon.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取游戏摘要
|
||||
private void getGameDigest() {
|
||||
RetrofitManager.getInstance(this).getApi().getGameDigest(mGameId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<GameEntity>() {
|
||||
@Override
|
||||
public void onResponse(GameEntity response) {
|
||||
ApkActiveUtils.filterHideApk(response);
|
||||
mGameEntity = response;
|
||||
|
||||
mTitle.setText(mGameEntity.getName());
|
||||
mGameId = response.getId();
|
||||
title = mGameEntity.getName();
|
||||
getGameDetail();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
mLoading.setVisibility(View.GONE);
|
||||
mNoConnection.setVisibility(View.VISIBLE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 获取游戏详情
|
||||
public void getGameDetail() {
|
||||
|
||||
RetrofitManager.getInstance(this).getApi().getGameDetail(mGameId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<GameDetailEntity>() {
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
super.onError(e);
|
||||
mLoading.setVisibility(View.GONE);
|
||||
mNoConnection.setVisibility(View.VISIBLE);
|
||||
Utils.log("onError::getGameDetail" + e.toString() + "&&id::" + mGameId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(GameDetailEntity response) {
|
||||
mGameDetailEntity = response;
|
||||
|
||||
// 过滤过期公告
|
||||
if (response.getNotice() != null && response.getNotice().size() > 0) {
|
||||
long l = System.currentTimeMillis();
|
||||
for (int i = 0; i < response.getNotice().size(); i++) {
|
||||
if (l > (response.getNotice().get(i).getOvertime() * 1000)) {
|
||||
response.getNotice().remove(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
downloadAddWord = response.getDownloadAddWord();
|
||||
downloadOffText = response.getDownloadOffText();
|
||||
shareCode = response.getShareCode();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable(GameEntity.class.getSimpleName(), mGameEntity);
|
||||
args.putParcelable(GameDetailEntity.class.getSimpleName(), response);
|
||||
|
||||
List<Fragment> list = new ArrayList<>();
|
||||
FuliFragment fuliFragment = new FuliFragment();
|
||||
fuliFragment.setArguments(args);
|
||||
list.add(fuliFragment);
|
||||
|
||||
XinXiFragment xinXiFragment = new XinXiFragment();
|
||||
xinXiFragment.setArguments(args);
|
||||
list.add(xinXiFragment);
|
||||
|
||||
mViewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager(), list));
|
||||
initGameDetailTop();
|
||||
|
||||
DetailDownloadUtils.detailInitDownload(getDetailViewHolder(), true);
|
||||
|
||||
if (mGameDetailEntity.getUserData() == null || !mGameDetailEntity.getUserData().isGameConcerned()) {
|
||||
mTanBarXinXiTv.performClick();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
switch (ev.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
mIsTouchScreen = true;
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
mIsTouchScreen = false;
|
||||
break;
|
||||
}
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBReuse reuse) {
|
||||
if (SKIP_XINXI.equals(reuse.getType())) {
|
||||
mViewPager.setCurrentItem(1);
|
||||
} else if (OPEN_APPBAR.equals(reuse.getType()) && !mIsTouchScreen) {
|
||||
mAppBarLayout.setExpanded(true, true);
|
||||
} else if (SKIP_FULI.equals(reuse.getType())) {
|
||||
mViewPager.setCurrentItem(0);
|
||||
} else if ("hideKaifuHint".equals(reuse.getType())) {
|
||||
mIsShowKaifuHint = false;
|
||||
mKaifuHint.setVisibility(View.GONE);
|
||||
} else if ("showKaifuHint".equals(reuse.getType())) {
|
||||
mIsShowKaifuHint = true;
|
||||
if (mCurVpPosition == 0) {
|
||||
mKaifuHint.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mKaifuHint.setVisibility(View.VISIBLE);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 接收下载被删除消息
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEvent(EBDownloadStatus status) {
|
||||
if ("delete".equals(status.getStatus())
|
||||
&& mGameEntity != null
|
||||
&& mGameEntity.getApk() != null
|
||||
&& mGameEntity.getApk().size() == 1) {
|
||||
String url = mGameEntity.getApk().get(0).getUrl();
|
||||
if (url.equals(status.getUrl())) {
|
||||
DetailDownloadUtils.detailInitDownload(getDetailViewHolder(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 接受安装、卸载消息
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBPackage busFour) {
|
||||
if (mGameEntity != null
|
||||
&& mGameEntity.getApk() != null
|
||||
&& mGameEntity.getApk().size() > 0) {
|
||||
for (ApkEntity apkEntity : mGameEntity.getApk()) {
|
||||
String packageName = apkEntity.getPackageName();
|
||||
if (packageName.equals(busFour.getPackageName())) {
|
||||
ApkActiveUtils.filterHideApk(mGameEntity);
|
||||
DetailDownloadUtils.detailInitDownload(getDetailViewHolder(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 关注事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBConcernChanged changed) {
|
||||
if (mGameDetailEntity != null && mGameEntity != null && changed.isSingle() && changed.getGameId().equals(mGameEntity.getId())) {
|
||||
if (mGameDetailEntity.getUserData() == null) {
|
||||
mGameDetailEntity.setUserData(new UserDataEntity());
|
||||
}
|
||||
mGameDetailEntity.getUserData().setGameConcerned(changed.isConcern());
|
||||
initGameDetailTop();
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick({R.id.detail_tv_download, R.id.detail_pb_progressbar, R.id.reuse_no_connection
|
||||
, R.id.detail_tv_per, R.id.gamedetail_tabbar_xinxi_tv, R.id.gamedetail_tabbar_fuli_tv
|
||||
, R.id.gamedetail_kaifu_hint, R.id.gamedetail_tv_concern})
|
||||
public void onClick(View v) {
|
||||
|
||||
switch (v.getId()) {
|
||||
case R.id.gamedetail_tabbar_fuli_tv:
|
||||
mViewPager.setCurrentItem(0);
|
||||
break;
|
||||
case R.id.gamedetail_tabbar_xinxi_tv:
|
||||
mViewPager.setCurrentItem(1);
|
||||
break;
|
||||
case R.id.reuse_no_connection:
|
||||
mLoading.setVisibility(View.VISIBLE);
|
||||
mNoConnection.setVisibility(View.GONE);
|
||||
|
||||
if (mGameEntity != null) {
|
||||
getGameDetail();
|
||||
} else if (mGameId != null) {
|
||||
getGameDigest();
|
||||
}
|
||||
break;
|
||||
case R.id.gamedetail_tv_concern:
|
||||
CheckLoginUtils.checkLogin(GameDetailActivity.this, new CheckLoginUtils.OnLoggenInListener() {
|
||||
@Override
|
||||
public void onLoggedIn() {
|
||||
mGameConcern.setEnabled(false);
|
||||
if (getString(R.string.concern).equals(mGameConcern.getText().toString())) {
|
||||
// 添加关注
|
||||
ConcernUtils.INSTANCE.postConcernGameId(GameDetailActivity.this, mGameEntity.getId()
|
||||
, new ConcernUtils.onConcernListener() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("状态", R.string.concern);
|
||||
DataUtils.onEvent(GameDetailActivity.this, "游戏关注", mGameEntity.getName(), kv);
|
||||
|
||||
Map<String, Object> kv2 = new HashMap<>();
|
||||
kv2.put("点击", R.string.concern);
|
||||
DataUtils.onEvent(GameDetailActivity.this, "插件数据", mGameEntity.getName(), kv2);
|
||||
|
||||
DataCollectionUtils.uploadConcern(GameDetailActivity.this, mGameEntity.getName(), mGameEntity.getId(), "关注");
|
||||
|
||||
mGameConcern.setText(R.string.cancel_concern);
|
||||
mGameConcern.setBackgroundResource(R.drawable.border_red_bg);
|
||||
mGameConcern.setTextColor(ContextCompat.getColor(GameDetailActivity.this, R.color.red));
|
||||
|
||||
toast(R.string.concern_success);
|
||||
mGameConcern.setEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
mGameConcern.setEnabled(true);
|
||||
toast(R.string.concern_failure);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Map<String, Object> kv2 = new HashMap<>();
|
||||
kv2.put("点击", "取消关注");
|
||||
DataUtils.onEvent(GameDetailActivity.this, "插件数据", mGameEntity.getName(), kv2);
|
||||
|
||||
DialogUtils.showCancelDialog(GameDetailActivity.this, new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
// 取消关注
|
||||
ConcernUtils.INSTANCE.deleteConcernData(GameDetailActivity.this, mGameEntity.getId()
|
||||
, new ConcernUtils.onConcernListener() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("状态", "取消关注");
|
||||
DataUtils.onEvent(GameDetailActivity.this, "游戏关注", mGameEntity.getName(), kv);
|
||||
|
||||
DataCollectionUtils.uploadConcern(GameDetailActivity.this,
|
||||
mGameEntity.getName(), mGameEntity.getId(), "取消关注");
|
||||
|
||||
mGameConcern.setText(getString(R.string.concern));
|
||||
mGameConcern.setBackgroundResource(R.drawable.textview_concern_red_style);
|
||||
mGameConcern.setTextColor(0xffffffff);
|
||||
mGameConcern.setEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
mGameConcern.setEnabled(true);
|
||||
toast(R.string.cancel_concern_failure);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, new DialogUtils.CancelListener() {
|
||||
@Override
|
||||
public void onCancel() {
|
||||
mGameConcern.setEnabled(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
case R.id.gamedetail_kaifu_hint:
|
||||
mAppBarLayout.setExpanded(false, true);
|
||||
mIsScrollToKaiFu = true;
|
||||
break;
|
||||
}
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_GAMEID, gameId);
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// context.startActivity(new IntentFactory.Builder(context).setActivity(GameDetailActivity.class)
|
||||
// .setFragment(GameDetailFragment.class).setArgs(bundle).build());
|
||||
context.startActivity(getIntent(context, GameDetailFragment.class, bundle));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,216 +4,33 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.support.v7.widget.GridLayoutManager;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.adapter.GameNewsAdapter;
|
||||
import com.gh.gamecenter.adapter.GameNewsTypeListAdapter;
|
||||
import com.gh.gamecenter.eventbus.EBTypeChange;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
import com.halo.assistant.fragment.game.GameNewsSearchFragment;
|
||||
|
||||
/**
|
||||
* Created by LGT on 2016/8/29.
|
||||
* 游戏新闻界面
|
||||
* 游戏新闻界面,由于MTA界面统计未重新记录的原因,暂留此傀儡,连名字都不能改,真是可怕
|
||||
*/
|
||||
public class GameNewsActivity extends BaseActivity implements View.OnClickListener {
|
||||
|
||||
@BindView(R.id.game_news_list)
|
||||
RecyclerView mGameNewsRv;
|
||||
@BindView(R.id.game_news_top_type_list)
|
||||
RecyclerView mGameNewsTypeRv;
|
||||
@BindView(R.id.reuse_none_data)
|
||||
LinearLayout mNoDataLl;
|
||||
@BindView(R.id.reuse_tv_none_data)
|
||||
TextView mNoDataTv;
|
||||
|
||||
private GameNewsAdapter adapter;
|
||||
private GameNewsTypeListAdapter typeListAdapter;
|
||||
private LinearLayoutManager layoutManager;
|
||||
private ImageView ivSearch;
|
||||
|
||||
private ArrayMap<String, GameNewsAdapter> adapterMap;
|
||||
|
||||
private List<String> typeList;
|
||||
|
||||
private String gameId;
|
||||
|
||||
private float startY = 0;
|
||||
@Deprecated
|
||||
public class GameNewsActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String gameName, String gameId, String entrance) {
|
||||
Intent intent = new Intent(context, GameNewsActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMEID, gameId);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
// Intent intent = new Intent(context, GameNewsActivity.class);
|
||||
// intent.putExtra(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
// intent.putExtra(EntranceUtils.KEY_GAMEID, gameId);
|
||||
// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return intent;
|
||||
|
||||
final Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
args.putString(EntranceUtils.KEY_GAMEID, gameId);
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(GameNewsActivity.class)
|
||||
// .setFragment(GameNewsSearchFragment.class).setArgs(args).build();
|
||||
return getIntent(context, GameNewsSearchFragment.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_game_news;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
ivSearch = new ImageView(this);
|
||||
ivSearch.setImageResource(R.drawable.ic_search_white);
|
||||
|
||||
RelativeLayout.LayoutParams ivSearchParams = new RelativeLayout.LayoutParams(
|
||||
DisplayUtils.dip2px(this, 20), DisplayUtils.dip2px(this, 20));
|
||||
ivSearchParams.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
ivSearchParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
ivSearchParams.setMargins(0, 0, DisplayUtils.dip2px(this, 10), 0);
|
||||
|
||||
RelativeLayout reuse_actionbar = (RelativeLayout) mContentView.findViewById(R.id.reuse_actionbar);
|
||||
reuse_actionbar.addView(ivSearch, ivSearchParams);
|
||||
ivSearch.setOnClickListener(this);
|
||||
ivSearch.setVisibility(View.GONE);
|
||||
|
||||
String gameName = getIntent().getStringExtra(EntranceUtils.KEY_GAMENAME);
|
||||
initTitle(gameName);
|
||||
|
||||
mNoDataTv.setText("暂无内容");
|
||||
|
||||
adapterMap = new ArrayMap<>();
|
||||
|
||||
typeList = new ArrayList<>();
|
||||
|
||||
gameId = getIntent().getStringExtra(EntranceUtils.KEY_GAMEID);
|
||||
|
||||
mGameNewsRv.setHasFixedSize(true);
|
||||
layoutManager = new LinearLayoutManager(this);
|
||||
mGameNewsRv.setLayoutManager(layoutManager);
|
||||
|
||||
mGameNewsRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (adapter != null && newState == RecyclerView.SCROLL_STATE_IDLE
|
||||
&& layoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) {
|
||||
if (!adapter.isRemove() && !adapter.isLoading() && !adapter.isNetworkError()) {
|
||||
adapter.addList(adapter.getNewsList().size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
|
||||
if (layoutManager.findFirstVisibleItemPosition() >= 1) {
|
||||
mGameNewsTypeRv.setVisibility(View.VISIBLE);
|
||||
ivSearch.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mGameNewsTypeRv.setVisibility(View.GONE);
|
||||
ivSearch.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
mGameNewsTypeRv.setHasFixedSize(true);
|
||||
mGameNewsTypeRv.setLayoutManager(new GridLayoutManager(this, 5));
|
||||
|
||||
//禁止由于滑动出现的阴影
|
||||
mGameNewsTypeRv.setOnTouchListener(new View.OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
startY = event.getY();
|
||||
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
|
||||
if (Math.abs(startY - event.getY()) > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (!TextUtils.isEmpty(gameId)) {
|
||||
getGameArticleType();
|
||||
}
|
||||
}
|
||||
|
||||
private void getGameArticleType() {
|
||||
RetrofitManager.getInstance(this).getApi()
|
||||
.getGameArticleType(gameId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<String>>() {
|
||||
@Override
|
||||
public void onResponse(List<String> response) {
|
||||
super.onResponse(response);
|
||||
typeList = response;
|
||||
typeList.add(0, "全部");
|
||||
adapter = new GameNewsAdapter(GameNewsActivity.this, typeList, mGameNewsRv, gameId, "全部", mEntrance, mNoDataLl);
|
||||
adapterMap.put("全部", adapter);
|
||||
mGameNewsRv.setAdapter(adapter);
|
||||
|
||||
typeListAdapter = new GameNewsTypeListAdapter(GameNewsActivity.this, typeList, "全部");
|
||||
mGameNewsTypeRv.setAdapter(typeListAdapter);
|
||||
|
||||
ViewGroup.LayoutParams params = mGameNewsTypeRv.getLayoutParams();
|
||||
params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(GameNewsActivity.this, 35)
|
||||
+ DisplayUtils.dip2px(GameNewsActivity.this, 12);
|
||||
mGameNewsTypeRv.setLayoutParams(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBTypeChange change) {
|
||||
adapter = adapterMap.get(change.getType());
|
||||
if (adapter == null) {
|
||||
adapter = new GameNewsAdapter(GameNewsActivity.this, typeList, mGameNewsRv, gameId, change.getType(), mEntrance, mNoDataLl);
|
||||
adapterMap.put(change.getType(), adapter);
|
||||
}
|
||||
mGameNewsRv.setAdapter(adapter);
|
||||
|
||||
mGameNewsTypeRv.setVisibility(View.GONE);
|
||||
ivSearch.setVisibility(View.GONE);
|
||||
typeListAdapter.setNewsType(change.getType(), change.getPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == ivSearch) {
|
||||
mGameNewsRv.scrollToPosition(0);
|
||||
mGameNewsTypeRv.setVisibility(View.GONE);
|
||||
ivSearch.setVisibility(View.GONE);
|
||||
adapter.openKeyBoard();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ public class InstallActivity extends BaseActivity implements InstallFragmentAdap
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.personale_mygame));
|
||||
setNavigationTitle(getString(R.string.personale_mygame));
|
||||
mNoDataSkip.setVisibility(View.GONE);
|
||||
mNoDataSkipHint.setText("暂无游戏");
|
||||
mNoDataSkipBtn.setText("查看精品推荐");
|
||||
@ -200,7 +200,6 @@ public class InstallActivity extends BaseActivity implements InstallFragmentAdap
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 滑动item
|
||||
@Override
|
||||
public void onSmooth() {
|
||||
@ -215,4 +214,5 @@ public class InstallActivity extends BaseActivity implements InstallFragmentAdap
|
||||
public void onOpen() {
|
||||
startActivityForResult(ChooseReceiverActivity.getIntent(this, true), KC_REQUEST);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,6 +16,8 @@ import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.eventbus.EBKaiFuReset;
|
||||
import com.gh.gamecenter.kaifu.KaiFuFragment;
|
||||
import com.gh.gamecenter.kaifu.KaiFuWrapperFragment;
|
||||
import com.halo.assistant.ui.IntentFactory;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
@ -25,97 +27,17 @@ import butterknife.BindView;
|
||||
/**
|
||||
* Created by khy on 18/08/17.
|
||||
*/
|
||||
|
||||
public class KaiFuActivity extends BaseActivity {
|
||||
|
||||
@BindView(R.id.reuse_actionbar)
|
||||
RelativeLayout mReuseActionbar;
|
||||
|
||||
private TextView mResetTv;
|
||||
|
||||
private KaiFuFragment mKaiFuFragment;
|
||||
private KaiFuFragment mGameKaiFuFragment;
|
||||
|
||||
public static final String SINGLE_GAME_KAIFU = "SINGLE_GAME_KAIFU";
|
||||
public static final String ALL_GAME_KAIFU = "ALL_GAME_KAIFU";
|
||||
@Deprecated
|
||||
public class KaiFuActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String entrance) {
|
||||
Intent intent = new Intent(context, KaiFuActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_kaifu;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle("开服表");
|
||||
|
||||
mResetTv = new TextView(this);
|
||||
mResetTv.setText("重置");
|
||||
mResetTv.setTextColor(ContextCompat.getColor(this, R.color.title));
|
||||
mResetTv.setGravity(Gravity.CENTER);
|
||||
mResetTv.setVisibility(View.GONE);
|
||||
mResetTv.setBackgroundResource(R.drawable.border_black_bg);
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
|
||||
DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 28));
|
||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
params.setMargins(0, 0, DisplayUtils.dip2px(this, 8), 0);
|
||||
mReuseActionbar.addView(mResetTv, params);
|
||||
|
||||
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
mKaiFuFragment = new KaiFuFragment();
|
||||
fragmentTransaction.add(R.id.layout_fragment_content, mKaiFuFragment);
|
||||
fragmentTransaction.commit();
|
||||
mResetTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
resetFragment();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void resetFragment() {
|
||||
mKaiFuFragment.setCurPage(mGameKaiFuFragment.getCurPage());
|
||||
|
||||
mResetTv.setVisibility(View.GONE);
|
||||
mKaiFuFragment.onResume(); // 启动观察者
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
fragmentTransaction.remove(mGameKaiFuFragment);
|
||||
fragmentTransaction.show(mKaiFuFragment);
|
||||
fragmentTransaction.commit();
|
||||
}
|
||||
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBKaiFuReset reset) {
|
||||
if (SINGLE_GAME_KAIFU.equals(reset.getControl())) {
|
||||
mResetTv.setVisibility(View.VISIBLE);
|
||||
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
fragmentTransaction.hide(mKaiFuFragment);
|
||||
mKaiFuFragment.onPause();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_GAMEID, reset.getGameId());
|
||||
args.putInt("curPage", mKaiFuFragment.getCurPage());
|
||||
|
||||
mGameKaiFuFragment = new KaiFuFragment();
|
||||
mGameKaiFuFragment.setArguments(args);
|
||||
|
||||
fragmentTransaction.add(R.id.layout_fragment_content, mGameKaiFuFragment, KaiFuFragment.class.getSimpleName());
|
||||
fragmentTransaction.commit();
|
||||
} else if (ALL_GAME_KAIFU.equals(reset.getControl())) {
|
||||
resetFragment();
|
||||
}
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(KaiFuActivity.class)
|
||||
// .setFragment(KaiFuWrapperFragment.class).setArgs(args).build();
|
||||
return getIntent(context, KaiFuWrapperFragment.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -36,6 +36,7 @@ import static com.gh.gamecenter.FileSenderActivity.KC_REPEAT_RESULT;
|
||||
*/
|
||||
public class KcSelectGameActivity extends BaseActivity {
|
||||
|
||||
public static final String KEY_FILE_INFO = KcSelectGameActivity.KEY_FILE_INFO;
|
||||
@BindView(R.id.select_game_rv)
|
||||
RecyclerView mSelectRv;
|
||||
@BindView(R.id.select_game_send)
|
||||
@ -83,7 +84,7 @@ public class KcSelectGameActivity extends BaseActivity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_select_game));
|
||||
setNavigationTitle(getString(R.string.title_select_game));
|
||||
|
||||
if (getIntent() != null && getIntent().getExtras() != null) {
|
||||
mIsConn = getIntent().getExtras().getBoolean(KEY_ISCONN);
|
||||
@ -112,7 +113,7 @@ public class KcSelectGameActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
if (mIsConn) {
|
||||
List<FileInfo> oldInfo = (List<FileInfo>) HaloApp.get("FileInfo", false);
|
||||
List<FileInfo> oldInfo = (List<FileInfo>) HaloApp.get(KcSelectGameActivity.KEY_FILE_INFO, false);
|
||||
if (oldInfo == null) {
|
||||
oldInfo = new ArrayList<>();
|
||||
}
|
||||
@ -122,7 +123,7 @@ public class KcSelectGameActivity extends BaseActivity {
|
||||
setResult(KC_REPEAT_RESULT);
|
||||
finish();
|
||||
} else {
|
||||
HaloApp.put("FileInfo", selectData);
|
||||
HaloApp.put(KcSelectGameActivity.KEY_FILE_INFO, selectData);
|
||||
startActivityForResult(ChooseReceiverActivity.getIntent(KcSelectGameActivity.this, false), SEND_OVER_REQUEST);
|
||||
}
|
||||
|
||||
|
||||
@ -4,176 +4,24 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.base.adapter.FragmentAdapter;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.RandomUtils;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
import com.gh.gamecenter.eventbus.EBUISwitch;
|
||||
import com.gh.gamecenter.libao.Libao1Fragment;
|
||||
import com.gh.gamecenter.libao.Libao2Fragment;
|
||||
import com.gh.gamecenter.libao.Libao3Fragment;
|
||||
import com.lightgame.view.NoScrollableViewPager;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import com.gh.gamecenter.libao.LibaoWrapperFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2016/12/12.
|
||||
*/
|
||||
public class LibaoActivity extends BaseActivity implements View.OnClickListener,
|
||||
ViewPager.OnPageChangeListener {
|
||||
|
||||
|
||||
@BindView(R.id.libao_vp_content)
|
||||
NoScrollableViewPager mLibaoVp;
|
||||
@BindView(R.id.libao_ll_top)
|
||||
LinearLayout mLibaoTopLl;
|
||||
@BindView(R.id.libao_slide_line)
|
||||
View mLibaoLine;
|
||||
@BindView(R.id.vp_tab)
|
||||
LinearLayout mTabLl;
|
||||
@BindView(R.id.libao_history_title)
|
||||
TextView mHistoryTitle;
|
||||
@BindView(R.id.libao_zuixun_tv)
|
||||
TextView mZuixinTv;
|
||||
@BindView(R.id.libao_concern_tv)
|
||||
TextView mGuanzhuTv;
|
||||
@BindView(R.id.libao_chunhaoxiang_tv)
|
||||
TextView mChunhaoxiangTv;
|
||||
|
||||
private LinearLayout.LayoutParams lparams;
|
||||
|
||||
public static final String EB_LIBAOACTIVITY_TAG = "LibaoActivity";
|
||||
public static final String LIBAO_OPENPAGE = "openPage";
|
||||
public static final String LIBAO_CLOSEPAGE = "closePage";
|
||||
|
||||
private int currentItem;
|
||||
private int width;
|
||||
@Deprecated
|
||||
public class LibaoActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String entrance) {
|
||||
Intent intent = new Intent(context, LibaoActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(LibaoActivity.class)
|
||||
// .setFragment(LibaoWrapperFragment.class).setArgs(args).build();
|
||||
return getIntent(context, LibaoWrapperFragment.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_libao;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle("礼包中心");
|
||||
|
||||
mZuixinTv.setSelected(true);
|
||||
|
||||
List<Fragment> list = new ArrayList<>();
|
||||
list.add(new Libao1Fragment());
|
||||
list.add(new Libao2Fragment());
|
||||
list.add(new Libao3Fragment());
|
||||
mLibaoVp.setAdapter(new FragmentAdapter(getSupportFragmentManager(), list));
|
||||
mLibaoVp.addOnPageChangeListener(this);
|
||||
|
||||
DisplayMetrics outMetrics = new DisplayMetrics();
|
||||
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
|
||||
width = outMetrics.widthPixels / 3;
|
||||
lparams = new LinearLayout.LayoutParams(width / 2,
|
||||
DisplayUtils.dip2px(this, 2));
|
||||
lparams.leftMargin = RandomUtils.getInt(width * (currentItem + 0.25));
|
||||
mLibaoLine.setLayoutParams(lparams);
|
||||
|
||||
mLibaoTopLl.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
EventBus.getDefault().post(new EBUISwitch(EB_LIBAOACTIVITY_TAG, 0));
|
||||
}
|
||||
}, 100);
|
||||
|
||||
}
|
||||
|
||||
@OnClick({R.id.libao_zuixun_tv, R.id.libao_concern_tv, R.id.libao_chunhaoxiang_tv})
|
||||
public void onClick(View v) {
|
||||
if (v == mZuixinTv) {
|
||||
mLibaoVp.setCurrentItem(0);
|
||||
} else if (v == mGuanzhuTv) {
|
||||
mLibaoVp.setCurrentItem(1);
|
||||
} else if (v == mChunhaoxiangTv) {
|
||||
mLibaoVp.setCurrentItem(2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
if (positionOffset != 0) {
|
||||
lparams.leftMargin = RandomUtils.getInt(width * (position + positionOffset + 0.25));
|
||||
mLibaoLine.setLayoutParams(lparams);
|
||||
} else {
|
||||
if (currentItem != mLibaoVp.getCurrentItem()) {
|
||||
currentItem = mLibaoVp.getCurrentItem();
|
||||
EventBus.getDefault().post(new EBUISwitch(EB_LIBAOACTIVITY_TAG, currentItem));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
mZuixinTv.setSelected(true);
|
||||
mGuanzhuTv.setSelected(false);
|
||||
mChunhaoxiangTv.setSelected(false);
|
||||
break;
|
||||
case 1:
|
||||
mZuixinTv.setSelected(false);
|
||||
mGuanzhuTv.setSelected(true);
|
||||
mChunhaoxiangTv.setSelected(false);
|
||||
break;
|
||||
case 2:
|
||||
mZuixinTv.setSelected(false);
|
||||
mGuanzhuTv.setSelected(false);
|
||||
mChunhaoxiangTv.setSelected(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
|
||||
// 页面切换事件(查看历史礼包的页面)
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBReuse reuse) {
|
||||
if (LIBAO_OPENPAGE.equals(reuse.getType())) {
|
||||
mLibaoTopLl.setVisibility(View.GONE);
|
||||
mLibaoLine.setVisibility(View.GONE);
|
||||
mHistoryTitle.setVisibility(View.VISIBLE);
|
||||
mHistoryTitle.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.hint));
|
||||
mLibaoVp.setScrollable(false);
|
||||
} else if (LIBAO_CLOSEPAGE.equals(reuse.getType())) {
|
||||
mLibaoTopLl.setVisibility(View.VISIBLE);
|
||||
mLibaoLine.setVisibility(View.VISIBLE);
|
||||
mHistoryTitle.setVisibility(View.GONE);
|
||||
mLibaoVp.setScrollable(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@ -55,7 +56,6 @@ import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
import static com.gh.gamecenter.R.id.reuse_tv_none_data;
|
||||
import static com.gh.gamecenter.news.News2Fragment.NEWS2_LIBAO_REQUEST;
|
||||
|
||||
/**
|
||||
* Created by khy on 2016/12/13.
|
||||
@ -148,8 +148,9 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, LibaoEntity libaoEntity, String entrance) {
|
||||
HaloApp.put(LibaoDetailActivity.class.getSimpleName(), libaoEntity);
|
||||
Intent intent = new Intent(context, LibaoDetailActivity.class);
|
||||
// intent.putExtra(LibaoEntity.TAG, libaoEntity);
|
||||
HaloApp.put(LibaoEntity.TAG, libaoEntity);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
}
|
||||
@ -162,19 +163,20 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
HaloApp.put(LibaoDetailActivity.class.getSimpleName(), mAdapter.getLibaoEntity());
|
||||
// outState.putParcelable(LibaoEntity.TAG, mAdapter.getLibaoEntity());
|
||||
HaloApp.put(LibaoEntity.TAG, mAdapter.getLibaoEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mName = getString(R.string.libao_detail);
|
||||
initTitle(mName);
|
||||
mLibaoEntity = (LibaoEntity) HaloApp.get(LibaoDetailActivity.class.getSimpleName(), true);
|
||||
setNavigationTitle(mName);
|
||||
// mLibaoEntity = getIntent().getParcelableExtra(LibaoEntity.TAG);
|
||||
mLibaoEntity = (LibaoEntity) HaloApp.get(LibaoEntity.TAG, false);
|
||||
|
||||
mIsScroll = true;
|
||||
|
||||
@ -201,12 +203,6 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
findViewById(R.id.actionbar_rl_back).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
onBackPressed();
|
||||
}
|
||||
});
|
||||
|
||||
if (mLibaoEntity == null) {
|
||||
String id = getIntent().getStringExtra(EntranceUtils.KEY_ID);
|
||||
@ -263,6 +259,8 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
curStatusCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// 由领取到淘号的状态转换
|
||||
if (repeat <= curStatusCount || curStatusCount == 0) { // 当前领取/淘号总数是否超过总重复领取次数 / 当前状态的礼包没有领取/淘号过
|
||||
if (curStatusCount == 0 && ("ling".equals(beforeStatus) || "tao".equals(beforeStatus))) {
|
||||
if (isCanLing()) { // 恢复原始状态
|
||||
@ -306,7 +304,7 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
long curTime = Utils.getTime(this) * 1000;
|
||||
int lingDay = Integer.parseInt(formatDay.format(lingTime));
|
||||
int curDay = Integer.parseInt(formatDay.format(curTime));
|
||||
if (curTime > lingTime && curDay != lingDay) {
|
||||
if (curDay != lingDay || curTime - lingTime > 24 * 60 * 60 * 1000) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -391,13 +389,17 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
public boolean onHandleBackPressed() {
|
||||
//TODO 哎,绝望的这里会崩啊。。。。。。。NPE啊!!!!
|
||||
// 重置领取状态
|
||||
if (mLibaoEntity == null) {
|
||||
return false;
|
||||
}
|
||||
String status = mLibaoEntity.getStatus();
|
||||
if (!TextUtils.isEmpty(status) && status.contains("repeat")) {
|
||||
mLibaoEntity.setStatus(mListStatus);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -430,8 +432,8 @@ public class LibaoDetailActivity extends BaseActivity implements LibaoDetailAdap
|
||||
public void loadDone(Object obj) { // 在当前详情页领取获取淘号的数据
|
||||
if (obj != null) {
|
||||
Intent data = new Intent();
|
||||
data.putExtra("UserDataLibaoEntity", (UserDataLibaoEntity) obj);
|
||||
setResult(NEWS2_LIBAO_REQUEST, data);
|
||||
data.putExtra(UserDataLibaoEntity.TAG, (UserDataLibaoEntity) obj);
|
||||
setResult(Activity.RESULT_OK, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,162 +2,18 @@ package com.gh.gamecenter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.GetLoginDataUtils;
|
||||
import com.gh.gamecenter.login.LoginFragment;
|
||||
import com.gh.gamecenter.login.LoginOldUserFragment;
|
||||
import com.tencent.connect.common.Constants;
|
||||
|
||||
import java.util.List;
|
||||
import com.gh.gamecenter.fragment.LoginFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 14/08/17.
|
||||
*/
|
||||
|
||||
public class LoginActivity extends BaseActivity {
|
||||
|
||||
ImageView mOldUserIcon;
|
||||
|
||||
private boolean mIsOlderUser;
|
||||
|
||||
public class LoginActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, boolean isOldUser) {
|
||||
Intent intent = new Intent(context, LoginActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_OLDERUSER, isOldUser);
|
||||
return intent;
|
||||
public static Intent getIntent(Context context) {
|
||||
return getIntent(context, LoginFragment.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_login;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == Constants.REQUEST_LOGIN) { // QQ Login callback
|
||||
GetLoginDataUtils.getInstance(this).onQQCallback(requestCode, resultCode, data);
|
||||
} else if (requestCode == 32973) {
|
||||
GetLoginDataUtils.getInstance(this).onWeiboCallback(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getIntent() != null) {
|
||||
mIsOlderUser = getIntent().getBooleanExtra(EntranceUtils.KEY_OLDERUSER, false);
|
||||
}
|
||||
|
||||
// 添加老用户入口
|
||||
mOldUserIcon = new ImageView(this);
|
||||
mOldUserIcon.setImageResource(R.drawable.login_olduser_icon);
|
||||
mOldUserIcon.setPadding(DisplayUtils.dip2px(this, 13), DisplayUtils.dip2px(this, 11),
|
||||
DisplayUtils.dip2px(this, 11), DisplayUtils.dip2px(this, 13));
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
|
||||
DisplayUtils.dip2px(this, 48), ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
RelativeLayout reuseActionbar = (RelativeLayout) mContentView.findViewById(R.id.reuse_actionbar);
|
||||
reuseActionbar.addView(mOldUserIcon, params);
|
||||
mOldUserIcon.setVisibility(View.GONE);
|
||||
|
||||
mOldUserIcon.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mIsOlderUser = true;
|
||||
changeFragment();
|
||||
}
|
||||
});
|
||||
|
||||
findViewById(R.id.actionbar_rl_back).setOnClickListener(
|
||||
new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mIsOlderUser) {
|
||||
mIsOlderUser = false;
|
||||
changeFragment();
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// String syncDeviceID = PreferenceManager.getDefaultSharedPreferences(this).getString("syncDeviceID", null);
|
||||
// if (TextUtils.isEmpty(syncDeviceID)) {
|
||||
// mOldUserIcon.setVisibility(View.GONE);
|
||||
// }
|
||||
|
||||
changeFragment();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK && mIsOlderUser) {
|
||||
mIsOlderUser = false;
|
||||
changeFragment();
|
||||
return true;
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
|
||||
private void changeFragment() {
|
||||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||||
hideFragments(transaction);
|
||||
if (mIsOlderUser) {
|
||||
alterFragment(transaction, LoginOldUserFragment.class);
|
||||
initTitle("老用户登录");
|
||||
// mOldUserIcon.setVisibility(View.GONE);
|
||||
} else {
|
||||
alterFragment(transaction, LoginFragment.class);
|
||||
initTitle("登录光环助手");
|
||||
// mOldUserIcon.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
// 将所有的Fragment都置为隐藏状态。
|
||||
private void hideFragments(FragmentTransaction transaction) {
|
||||
List<Fragment> list = getSupportFragmentManager().getFragments();
|
||||
if (list != null) {
|
||||
for (Fragment fragment : list) {
|
||||
transaction.hide(fragment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private <T extends Fragment> T alterFragment(FragmentTransaction transaction, Class<T> cls) {
|
||||
T fragmentByTag = (T) getSupportFragmentManager().findFragmentByTag(cls.getSimpleName());
|
||||
try {
|
||||
if (fragmentByTag != null) {
|
||||
transaction.show(fragmentByTag);
|
||||
} else {
|
||||
fragmentByTag = cls.newInstance();
|
||||
Bundle args = new Bundle();
|
||||
args.putBoolean(EntranceUtils.KEY_OLDERUSER, mIsOlderUser);
|
||||
fragmentByTag.setArguments(args);
|
||||
transaction.add(R.id.layout_fragment_content, fragmentByTag, cls.getSimpleName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return fragmentByTag;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -26,24 +26,23 @@ import android.widget.TextView;
|
||||
|
||||
import com.gh.base.AppUncaughtHandler;
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.base.fragment.BaseFragment_ViewPager;
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.util.ClassUtils;
|
||||
import com.gh.common.util.ConcernUtils;
|
||||
import com.gh.common.util.DataCollectionUtils;
|
||||
import com.gh.common.util.DataLogUtils;
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.common.util.DeviceUtils;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.GameUtils;
|
||||
import com.gh.common.util.LoginUtils;
|
||||
import com.gh.common.util.NetworkUtils;
|
||||
import com.gh.common.util.PackageUtils;
|
||||
import com.gh.common.util.PlatformUtils;
|
||||
import com.gh.common.util.TrafficUtils;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.db.info.ConcernInfo;
|
||||
import com.gh.gamecenter.db.info.GameInfo;
|
||||
import com.gh.gamecenter.db.info.InstallInfo;
|
||||
import com.gh.gamecenter.entity.ApkEntity;
|
||||
import com.gh.gamecenter.entity.GameDigestEntity;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
@ -53,13 +52,15 @@ import com.gh.gamecenter.eventbus.EBNetworkState;
|
||||
import com.gh.gamecenter.eventbus.EBPackage;
|
||||
import com.gh.gamecenter.eventbus.EBShowDialog;
|
||||
import com.gh.gamecenter.eventbus.EBSkip;
|
||||
import com.gh.gamecenter.fragment.MainFragment;
|
||||
import com.gh.gamecenter.manager.ConcernManager;
|
||||
import com.gh.gamecenter.fragment.MainWrapperFragment;
|
||||
import com.gh.gamecenter.manager.DataCollectionManager;
|
||||
import com.gh.gamecenter.manager.FilterManager;
|
||||
import com.gh.gamecenter.manager.GameManager;
|
||||
import com.gh.gamecenter.manager.InstallManager;
|
||||
import com.gh.gamecenter.manager.PackageManager;
|
||||
import com.gh.gamecenter.manager.UpdateManager;
|
||||
import com.gh.gamecenter.manager.UserManager;
|
||||
import com.gh.gamecenter.normal.NormalFragment;
|
||||
import com.gh.gamecenter.retrofit.ObservableUtil;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
@ -105,6 +106,7 @@ import rx.schedulers.Schedulers;
|
||||
|
||||
import static com.gh.common.util.EntranceUtils.KEY_DATA;
|
||||
import static com.gh.common.util.EntranceUtils.KEY_TO;
|
||||
import static com.gh.gamecenter.fragment.MainWrapperFragment.INDEX_PERSONAL;
|
||||
|
||||
/**
|
||||
* 项目的主Activity,3个Fragment都嵌入在这里。
|
||||
@ -114,7 +116,7 @@ public class MainActivity extends BaseActivity {
|
||||
public final static String EB_MAINACTIVITY_TAG = "MainActivity";
|
||||
public final static String EB_SKIP_GAMEFRAGMENT = "GameFragment";
|
||||
private SharedPreferences sp;
|
||||
private ConcernManager concernManager;
|
||||
private InstallManager mInstallManager;
|
||||
|
||||
private static final int SKIP_SETTING_REQUEST = 14;
|
||||
private boolean isSkipped;
|
||||
@ -131,19 +133,23 @@ public class MainActivity extends BaseActivity {
|
||||
if (!TextUtils.isEmpty(to)) {
|
||||
Class<?> clazz = ClassUtils.forName(to);
|
||||
if (clazz != null) {
|
||||
Intent skipIntent = new Intent(MainActivity.this, clazz);
|
||||
|
||||
String entrance = bundle.getString(EntranceUtils.KEY_ENTRANCE);
|
||||
if (TextUtils.isEmpty(entrance) || !entrance.startsWith("(") || !entrance.endsWith(")")) {
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, "(插件跳转)");
|
||||
}
|
||||
|
||||
String packageName = bundle.getString("packageName");
|
||||
if (packageName != null) {
|
||||
bundle.putInt(EntranceUtils.KEY_CURRENTITEM, 1);
|
||||
bundle.putInt(BaseFragment_ViewPager.ARGS_INDEX, 1);
|
||||
}
|
||||
|
||||
skipIntent.putExtra(KEY_DATA, bundle);
|
||||
startActivity(skipIntent);
|
||||
if (NormalFragment.class.isAssignableFrom(clazz)) {
|
||||
NormalActivity.startFragment(MainActivity.this, (Class<? extends NormalFragment>) clazz, bundle);
|
||||
} else {
|
||||
Intent skipIntent = new Intent(MainActivity.this, clazz);
|
||||
skipIntent.putExtra(KEY_DATA, bundle);
|
||||
startActivity(skipIntent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -172,7 +178,7 @@ public class MainActivity extends BaseActivity {
|
||||
DataLogUtils.uploadNeterrorLog(MainActivity.this, downloadEntity);
|
||||
}
|
||||
if (DownloadStatus.done.equals(downloadEntity.getStatus())) {
|
||||
if (downloadEntity.getName().contains("光环助手")) {
|
||||
if (downloadEntity.getName().contains(getString(R.string.app_name))) {
|
||||
DataUtils.onEvent(MainActivity.this, "软件更新", "下载完成");
|
||||
startActivity(PackageUtils.getInstallIntent(MainActivity.this, downloadEntity.getPath()));
|
||||
DataLogUtils.uploadUpgradeLog(MainActivity.this, "install"); //上传更新安装数据
|
||||
@ -392,7 +398,7 @@ public class MainActivity extends BaseActivity {
|
||||
final CountDownLatch latch = ObservableUtil.latch(localList.size(), new Action1<Object>() {
|
||||
@Override
|
||||
public void call(Object o) {
|
||||
updateConcern();
|
||||
updateInstall();
|
||||
}
|
||||
});
|
||||
|
||||
@ -407,9 +413,10 @@ public class MainActivity extends BaseActivity {
|
||||
for (GameDigestEntity gameDigestEntity : response) {
|
||||
GameInfo gameInfo = new GameInfo();
|
||||
gameInfo.setId(gameDigestEntity.getId());
|
||||
gameInfo.setGameIcon(gameDigestEntity.getIcon());
|
||||
gameInfo.setPackageName(packageName);
|
||||
gameInfo.setGameName(gameDigestEntity.getName());
|
||||
concernManager.updateByEntity(gameInfo);
|
||||
mInstallManager.updateByEntity(gameInfo);
|
||||
}
|
||||
|
||||
latch.countDown();
|
||||
@ -431,9 +438,12 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void updateConcern() {
|
||||
/**
|
||||
* 为已安装的游戏添加助手后台存在的包
|
||||
*/
|
||||
private void updateInstall() {
|
||||
ArrayList<String> concernIdList = new ArrayList<>();
|
||||
for (ConcernInfo entity : concernManager.getAllConcern()) {
|
||||
for (InstallInfo entity : mInstallManager.getAllInstall()) {
|
||||
concernIdList.add(entity.getId());
|
||||
}
|
||||
if (concernIdList.isEmpty()) {
|
||||
@ -449,8 +459,8 @@ public class MainActivity extends BaseActivity {
|
||||
.subscribe(new Response<GameEntity>() {
|
||||
@Override
|
||||
public void onNext(GameEntity response) {
|
||||
ConcernInfo concernInfo = concernManager.findConcernById(response.getId());
|
||||
if (concernInfo != null && response.getApk().size() != 0) {
|
||||
InstallInfo installInfo = mInstallManager.findInstallById(response.getId());
|
||||
if (installInfo != null && response.getApk().size() != 0) {
|
||||
HashMap<String, Boolean> packageNames = new HashMap<>();
|
||||
for (ApkEntity apkEntity : response.getApk()) {
|
||||
if (PackageManager.isInstalled(apkEntity.getPackageName())) {
|
||||
@ -459,9 +469,9 @@ public class MainActivity extends BaseActivity {
|
||||
packageNames.put(apkEntity.getPackageName(), false);
|
||||
}
|
||||
}
|
||||
concernInfo.setTime(System.currentTimeMillis());
|
||||
concernInfo.setPackageNames(packageNames);
|
||||
concernManager.updateByConcern(concernInfo);
|
||||
installInfo.setTime(System.currentTimeMillis());
|
||||
installInfo.setPackageNames(packageNames);
|
||||
mInstallManager.updateInstall(installInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@ -473,17 +483,17 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 更新关注列表数据
|
||||
/**
|
||||
* 更新安装列表数据
|
||||
*/
|
||||
private void update() {
|
||||
HaloApp.MAIN_EXECUTOR.execute(new Runnable() {
|
||||
HaloApp.getInstance().getMainExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final List<String> installed = new ArrayList<>();
|
||||
TrafficUtils spy = TrafficUtils.getInstance(getApplicationContext(), true);
|
||||
List<ConcernInfo> concernList = concernManager.getAllConcern();
|
||||
for (ConcernInfo concernEntity : concernList) {
|
||||
List<InstallInfo> concernList = mInstallManager.getAllInstall();
|
||||
for (InstallInfo concernEntity : concernList) {
|
||||
concernEntity.setTime(System.currentTimeMillis());
|
||||
int quantity = 0;
|
||||
HashMap<String, Boolean> packageNames = new HashMap<>();
|
||||
@ -497,34 +507,15 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
concernEntity.setPackageNames(packageNames);
|
||||
concernEntity.setInstalled(quantity > 0);
|
||||
concernEntity.setInstalledQuantity(quantity);
|
||||
String tag = null;
|
||||
int weight = 0;
|
||||
if (concernEntity.isConcern() && concernEntity.isInstalled()) {
|
||||
tag = "已关注,已安装";
|
||||
weight = 2;
|
||||
} else if (concernEntity.isConcern()
|
||||
&& !concernEntity.isInstalled()) {
|
||||
tag = "已关注";
|
||||
weight = 1;
|
||||
} else if (!concernEntity.isConcern()
|
||||
&& concernEntity.isInstalled()) {
|
||||
tag = "已安装";
|
||||
weight = 1;
|
||||
}
|
||||
concernEntity.setTag(tag);
|
||||
long traffic = spy.getTraffic(new ArrayList<>(concernEntity.getPackageNames().keySet()));
|
||||
concernEntity.setTraffic(traffic);
|
||||
if (traffic > 0) {
|
||||
weight++;
|
||||
}
|
||||
concernEntity.setWeight(weight);
|
||||
if (weight == 0) {
|
||||
concernManager.deleteConcern(concernEntity.getId());
|
||||
} else {
|
||||
concernManager.updateByConcern(concernEntity);
|
||||
}
|
||||
mInstallManager.updateInstall(concernEntity);
|
||||
}
|
||||
|
||||
// 更新用户已安装游戏
|
||||
@ -552,8 +543,8 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
private void checkGameUpdate() {
|
||||
List<ConcernInfo> infos = concernManager.getInstalledGame();
|
||||
for (ConcernInfo info : infos) {
|
||||
List<InstallInfo> infos = mInstallManager.getAllInstall();
|
||||
for (InstallInfo info : infos) {
|
||||
for (String packageName : info.getPackageNames().keySet()) {
|
||||
if (info.getPackageNames().get(packageName)
|
||||
&& PackageUtils.getMetaData(this, packageName, "gh_version") != null) {
|
||||
@ -566,7 +557,7 @@ public class MainActivity extends BaseActivity {
|
||||
private void checkGamePlugin() {
|
||||
final List<GameEntity> list = new ArrayList<>();
|
||||
List<Observable<GameEntity>> sequences = new ArrayList<>();
|
||||
for (ConcernInfo info : concernManager.getInstalledGame()) {
|
||||
for (InstallInfo info : mInstallManager.getAllInstall()) {
|
||||
sequences.add(RetrofitManager.getInstance(this).getApi().getGameDigest(info.getId()));
|
||||
}
|
||||
Observable.merge(sequences)
|
||||
@ -610,9 +601,9 @@ public class MainActivity extends BaseActivity {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
List<ConcernInfo> infos = concernManager.getInstalledGame();
|
||||
List<InstallInfo> infos = mInstallManager.getAllInstall();
|
||||
HashMap<String, Boolean> map;
|
||||
for (ConcernInfo info : infos) {
|
||||
for (InstallInfo info : infos) {
|
||||
for (GameEntity gameEntity : list) {
|
||||
if (gameEntity.getId().equals(info.getId())
|
||||
&& gameEntity.getTag() != null && gameEntity.getTag().size() != 0
|
||||
@ -629,7 +620,7 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
GameManager manager = new GameManager(this);
|
||||
manager.addOrUpdate(gameEntity.getApk(), gameEntity.getId(), gameEntity.getName());
|
||||
manager.addOrUpdate(gameEntity);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -655,9 +646,9 @@ public class MainActivity extends BaseActivity {
|
||||
isSkipped = savedInstanceState.getBoolean("isSkipped");
|
||||
}
|
||||
|
||||
replaceFragment(new MainFragment());
|
||||
replaceFragment(new MainWrapperFragment());
|
||||
|
||||
concernManager = new ConcernManager(getApplicationContext());
|
||||
mInstallManager = new InstallManager(getApplicationContext());
|
||||
|
||||
if (!isNewFirstLaunch && sp.getBoolean("autoupdate", true)) {
|
||||
// 检查助手更新
|
||||
@ -682,7 +673,7 @@ public class MainActivity extends BaseActivity {
|
||||
getSuggestionType();
|
||||
|
||||
final String message = Config.getExceptionMsg(this);
|
||||
if (LoginUtils.getUserInfo(this) != null && !TextUtils.isEmpty(message)) {
|
||||
if (!TextUtils.isEmpty(UserManager.getInstance().getToken()) && !TextUtils.isEmpty(message)) {
|
||||
Config.setExceptionMsg(this, null);
|
||||
AppUncaughtHandler.reportException(this, new Throwable(message));
|
||||
DialogUtils.showWarningDialog(this, "发生闪退", "光环助手刚刚发生了闪退,马上反馈以帮助我们更好地修复问题?(只需简单描述你刚才的操作)"
|
||||
@ -833,7 +824,7 @@ public class MainActivity extends BaseActivity {
|
||||
, "前往登录", "残忍拒绝", new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, 2));
|
||||
EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, INDEX_PERSONAL));
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
@ -931,23 +922,10 @@ public class MainActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO: 30/10/17 整理这个方法
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBPackage busFour) {
|
||||
final String packageName = busFour.getPackageName();
|
||||
if ("安装".equals(busFour.getType())) { // 删除下载完成 弹窗
|
||||
NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
nManager.cancel(packageName.hashCode());
|
||||
}
|
||||
|
||||
if ("安装".equals(busFour.getType())) {
|
||||
// 添加进已安装map中
|
||||
PackageManager.addInstalled(packageName);
|
||||
} else if ("卸载".equals(busFour.getType())) {
|
||||
// 删除map中数据
|
||||
PackageManager.removeInstalled(packageName);
|
||||
}
|
||||
DownloadEntity mDownloadEntity = null;
|
||||
for (DownloadEntity downloadEntity : DownloadManager.getInstance(getApplicationContext()).getAll()) {
|
||||
if (packageName.equals(downloadEntity.getPackageName())) {
|
||||
@ -955,88 +933,99 @@ public class MainActivity extends BaseActivity {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (mDownloadEntity != null) {
|
||||
if ("安装".equals(busFour.getType())) {
|
||||
|
||||
if ("安装".equals(busFour.getType())) {
|
||||
// 删除下载完成 弹窗
|
||||
NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
nManager.cancel(packageName.hashCode());
|
||||
|
||||
// 添加进已安装map中
|
||||
PackageManager.addInstalled(packageName);
|
||||
|
||||
if (mDownloadEntity != null) {
|
||||
if (mDownloadEntity.isPluggable()) {
|
||||
Map<String, Object> kv6 = new HashMap<>();
|
||||
kv6.put("安装或卸载", "安装完成");
|
||||
DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6);
|
||||
}
|
||||
|
||||
// if (!mDownloadEntity.isPlugin() // 不是插件游戏,自己删除数据库数据和安装包
|
||||
// || PackageUtils.isSignature(this, packageName)) {// 是插件游戏,判断签名是否相同,是才删除数据库数据和安装包
|
||||
DownloadManager.getInstance(getApplicationContext()).cancel(
|
||||
mDownloadEntity.getUrl(), sp.getBoolean("autodelete", true));
|
||||
// }
|
||||
} else if ("卸载".equals(busFour.getType())) {
|
||||
mDownloadEntity.getUrl(), false); // 默认不删除安装包 sp.getBoolean("autodelete", true)
|
||||
}
|
||||
|
||||
if (sp.getBoolean("concerngame", true)) { //设置页面控制是否安装后自动关注
|
||||
GameManager gameManager = new GameManager(getApplicationContext());
|
||||
GameInfo gameInfo = gameManager.findGame(packageName);
|
||||
if (gameInfo != null) {
|
||||
mInstallManager.updateByEntity(gameInfo);
|
||||
}
|
||||
|
||||
// 安装后关注游戏
|
||||
RetrofitManager.getInstance(this).getApi().getGameDigestByPackageName(packageName)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<GameDigestEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<GameDigestEntity> response) {
|
||||
for (GameDigestEntity gameDigestEntity : response) {
|
||||
GameInfo gameInfo = new GameInfo();
|
||||
gameInfo.setId(gameDigestEntity.getId());
|
||||
gameInfo.setPackageName(packageName);
|
||||
gameInfo.setGameName(gameDigestEntity.getName());
|
||||
concernGame(gameDigestEntity.getId(), packageName);
|
||||
|
||||
if (PackageUtils.getMetaData(getApplicationContext(),
|
||||
packageName, "gh_version") != null) {
|
||||
checkGameUpdate(packageName);
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(gameDigestEntity.getId())) { // 关注游戏
|
||||
ConcernUtils.INSTANCE.postConcernGameId(MainActivity.this, gameDigestEntity.getId(), null);
|
||||
}
|
||||
}
|
||||
// 更新已安装游戏
|
||||
JSONArray params = new JSONArray();
|
||||
params.put(packageName);
|
||||
RequestBody body = RequestBody.create(
|
||||
MediaType.parse("application/json"), params.toString());
|
||||
RetrofitManager.getInstance(MainActivity.this).getApi()
|
||||
.postPackage(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(new Response<ResponseBody>());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
if ("卸载".equals(busFour.getType())) {
|
||||
// 删除map中数据
|
||||
PackageManager.removeInstalled(packageName);
|
||||
|
||||
if (mDownloadEntity != null) {
|
||||
Map<String, Object> kv6 = new HashMap<>();
|
||||
kv6.put("安装或卸载", "卸载完成");
|
||||
DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6);
|
||||
|
||||
startActivity(PackageUtils.getInstallIntent(this, mDownloadEntity.getPath()));
|
||||
}
|
||||
}
|
||||
if ("安装".equals(busFour.getType()) && sp.getBoolean("concerngame", true)) {
|
||||
GameManager gameManager = new GameManager(getApplicationContext());
|
||||
GameInfo gameInfo = gameManager.findGame(packageName);
|
||||
if (gameInfo != null) {
|
||||
concernManager.updateByEntity(gameInfo);
|
||||
}
|
||||
} else if ("卸载".equals(busFour.getType())) {
|
||||
|
||||
FilterManager filterManager = new FilterManager(getApplicationContext());
|
||||
if (filterManager.isFilter(packageName)) {
|
||||
concernManager.updateByPackageName(packageName);
|
||||
mInstallManager.updateByPackageName(packageName);
|
||||
}
|
||||
}
|
||||
if ("卸载".equals(busFour.getType()) || "安装".equals(busFour.getType())) {
|
||||
PackageManager.removeUpdate(packageName);
|
||||
}
|
||||
if ("安装".equals(busFour.getType()) && sp.getBoolean("concerngame", true)) {//设置页面控制是否安装后自动关注
|
||||
// 安装后关注游戏
|
||||
RetrofitManager.getInstance(this).getApi().getGameDigestByPackageName(packageName)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<GameDigestEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<GameDigestEntity> response) {
|
||||
for (GameDigestEntity gameDigestEntity : response) {
|
||||
GameInfo gameInfo = new GameInfo();
|
||||
gameInfo.setId(gameDigestEntity.getId());
|
||||
gameInfo.setPackageName(packageName);
|
||||
gameInfo.setGameName(gameDigestEntity.getName());
|
||||
concernGame(gameDigestEntity.getId(), packageName);
|
||||
if (PackageUtils.getMetaData(getApplicationContext(),
|
||||
packageName, "gh_version") != null) {
|
||||
checkGameUpdate(packageName);
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(gameDigestEntity.getId())) { // 关注游戏
|
||||
ConcernUtils.INSTANCE.postConcernGameId(MainActivity.this, gameDigestEntity.getId(), null);
|
||||
}
|
||||
}
|
||||
// 更新已安装游戏
|
||||
JSONArray params = new JSONArray();
|
||||
params.put(packageName);
|
||||
RequestBody body = RequestBody.create(
|
||||
MediaType.parse("application/json"), params.toString());
|
||||
RetrofitManager.getInstance(MainActivity.this).getApi()
|
||||
.postPackage(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(new Response<ResponseBody>());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if ("卸载".equals(busFour.getType())) {
|
||||
// 更新已安装游戏
|
||||
RetrofitManager.getInstance(this).getApi()
|
||||
.deletePackage(packageName)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.subscribe(new Response<ResponseBody>());
|
||||
|
||||
}
|
||||
|
||||
if ("卸载".equals(busFour.getType()) || "安装".equals(busFour.getType())) {
|
||||
PackageManager.removeUpdate(packageName);
|
||||
}
|
||||
DataCollectionUtils.uploadInorunstall(this, busFour.getType(), busFour.getPackageName());
|
||||
}
|
||||
|
||||
@ -1048,7 +1037,7 @@ public class MainActivity extends BaseActivity {
|
||||
@Override
|
||||
public void onResponse(GameEntity response) {
|
||||
GameManager manager = new GameManager(getApplicationContext());
|
||||
manager.addOrUpdate(response.getApk(), response.getId(), response.getName());
|
||||
manager.addOrUpdate(response);
|
||||
// 检查是否能插件化
|
||||
if (response.getTag() != null && response.getTag().size() != 0) {
|
||||
for (ApkEntity apkEntity : response.getApk()) {
|
||||
|
||||
@ -4,29 +4,22 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.gamecenter.message.MessageFragment;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.gamecenter.message.MessageCenterFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 21/07/17.
|
||||
*/
|
||||
@Deprecated
|
||||
public class MessageActivity extends NormalActivity {
|
||||
|
||||
public class MessageActivity extends BaseActivity {
|
||||
|
||||
public static Intent getIntent(Context context) {
|
||||
return new Intent(context, MessageActivity.class);
|
||||
public static Intent getIntent(Context context, String entrance) {
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(MessageActivity.class)
|
||||
// .setFragment(MessageCenterFragment.class).build();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return getIntent(context, MessageCenterFragment.class, bundle);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_message;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_message_center));
|
||||
getSupportFragmentManager().beginTransaction().replace(
|
||||
R.id.layout_fragment_content, MessageFragment.newInstance(0)).commitAllowingStateLoss();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,153 +1,46 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.constant.Config;
|
||||
import com.gh.common.util.CheckLoginUtils;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.ImageUtils;
|
||||
import com.gh.common.util.LoginUtils;
|
||||
import com.gh.common.util.PostCommentUtils;
|
||||
import com.gh.common.util.TimestampUtils;
|
||||
import com.gh.common.util.TokenUtils;
|
||||
import com.gh.gamecenter.adapter.MessageDetailAdapter;
|
||||
import com.gh.gamecenter.adapter.OnCommentCallBackListener;
|
||||
import com.gh.gamecenter.entity.CommentEntity;
|
||||
import com.gh.gamecenter.entity.CommentnumEntity;
|
||||
import com.gh.gamecenter.entity.ConcernEntity;
|
||||
import com.gh.gamecenter.entity.UserInfoEntity;
|
||||
import com.gh.gamecenter.entity.ViewsEntity;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
import com.gh.gamecenter.manager.CommentManager;
|
||||
import com.gh.gamecenter.retrofit.OkHttpCache;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.google.gson.Gson;
|
||||
import com.gh.gamecenter.message.MessageDetailFragment;
|
||||
import com.halo.assistant.HaloApp;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import butterknife.OnTouch;
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
import static com.gh.gamecenter.personal.PersonalFragment.LOGIN_TAG;
|
||||
import com.halo.assistant.ui.IntentFactory;
|
||||
|
||||
/**
|
||||
* Created by khy on 2016/11/8.
|
||||
* 消息详情界面
|
||||
* 消息详情界面(评论详情)
|
||||
*/
|
||||
public class MessageDetailActivity extends BaseActivity implements OnCommentCallBackListener {
|
||||
|
||||
@BindView(R.id.message_detail_rv)
|
||||
RecyclerView mMessageDetailRv;
|
||||
@BindView(R.id.message_detail_user_rl)
|
||||
RelativeLayout mMessageDetailUserRl;
|
||||
@BindView(R.id.message_detail_comment_rl)
|
||||
RelativeLayout mMessageDetailCommentRl;
|
||||
@BindView(R.id.comment_user_icon)
|
||||
SimpleDraweeView mMessageDetailIconDv;
|
||||
@BindView(R.id.comment_user_name)
|
||||
TextView mMessageDetailUserNameTv;
|
||||
@BindView(R.id.comment_send)
|
||||
TextView mMessageDetailCommentSend;
|
||||
@BindView(R.id.message_detail_comment_et)
|
||||
EditText mMessageDetailEt;
|
||||
@BindView(R.id.message_detail_comment_hint_rl)
|
||||
RelativeLayout mMessageDetailCommentHintRl;
|
||||
@BindView(R.id.message_detail_sv)
|
||||
ScrollView mMessageDetailSv;
|
||||
@BindView(R.id.message_detail_hint_line)
|
||||
View mMessageDetailLine;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConnection;
|
||||
@BindView(R.id.message_detail_close_comment)
|
||||
View mColseCommentV;
|
||||
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
|
||||
private MessageDetailAdapter adapter;
|
||||
|
||||
private Dialog mSendingDialog;
|
||||
|
||||
private ConcernEntity mConcernEntity;
|
||||
private CommentEntity mCommentEntity; // 回复评论的实体 用完马上清空
|
||||
|
||||
private UserInfoEntity mUserInfo;
|
||||
|
||||
private String newsId;
|
||||
|
||||
private int commentNum = -1; //区分来源 -1:资讯关注列表 !=-1 :新闻详情
|
||||
private TextWatcher watcher = new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if (s.toString().trim().length() > 0) {
|
||||
mMessageDetailCommentSend.setEnabled(true);
|
||||
|
||||
if (s.length() > 140) {
|
||||
mMessageDetailEt.setText("");
|
||||
String newText = s.toString().substring(0, 140);
|
||||
mMessageDetailEt.setText(newText);
|
||||
Utils.toast(MessageDetailActivity.this, "评论不能多于140字");
|
||||
}
|
||||
} else {
|
||||
mMessageDetailCommentSend.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
};
|
||||
@Deprecated
|
||||
public class MessageDetailActivity extends CommonActivity {
|
||||
|
||||
// 评论回复
|
||||
public static Intent getMessageDetailIntent(Context context, CommentEntity entity, String newsId) {
|
||||
HaloApp.put("CommentEntity", entity);
|
||||
Intent intent = new Intent(context, MessageDetailActivity.class);
|
||||
intent.putExtra("commentNum", -1);
|
||||
intent.putExtra(EntranceUtils.KEY_NEWSID, newsId);
|
||||
intent.putExtra("openSoftInput", true);
|
||||
return intent;
|
||||
intent.putExtra(CommentEntity.TAG, entity);
|
||||
|
||||
return new IntentFactory.Builder(context)
|
||||
.setArgs(intent.getExtras())
|
||||
.setActivity(MessageDetailActivity.class)
|
||||
.setFragment(MessageDetailFragment.class).build();
|
||||
}
|
||||
|
||||
public static Intent getIntentByEntity(Context context, ConcernEntity concernEntity, String entrance) {
|
||||
HaloApp.put("ConcernEntity", concernEntity);
|
||||
Intent intent = new Intent(context, MessageDetailActivity.class);
|
||||
// intent.putExtra(ConcernEntity.TAG, concernEntity);
|
||||
HaloApp.put(ConcernEntity.TAG, concernEntity);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
// return intent;
|
||||
return new IntentFactory.Builder(context)
|
||||
.setArgs(intent.getExtras())
|
||||
.setActivity(MessageDetailActivity.class)
|
||||
.setFragment(MessageDetailFragment.class).build();
|
||||
}
|
||||
|
||||
public static Intent getIntentById(Context context, String newsId, Integer commentNum, Boolean openSoftInput, String entrance) {
|
||||
@ -156,401 +49,11 @@ public class MessageDetailActivity extends BaseActivity implements OnCommentCall
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
intent.putExtra("commentNum", commentNum);
|
||||
intent.putExtra("openSoftInput", openSoftInput);
|
||||
return intent;
|
||||
// return intent;
|
||||
return new IntentFactory.Builder(context)
|
||||
.setArgs(intent.getExtras())
|
||||
.setActivity(MessageDetailActivity.class)
|
||||
.setFragment(MessageDetailFragment.class).build();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
HaloApp.put("ConcernEntity", adapter.getConcernEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_messagedetail;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mConcernEntity = (ConcernEntity) HaloApp.get("ConcernEntity", true);
|
||||
|
||||
mCommentEntity = (CommentEntity) HaloApp.get("CommentEntity", true); // 来自新闻详情-评论回复
|
||||
|
||||
Intent intent = getIntent();
|
||||
newsId = intent.getExtras().getString(EntranceUtils.KEY_NEWSID);
|
||||
commentNum = intent.getExtras().getInt("commentNum", -1);
|
||||
|
||||
//复用问题 mConcernEntity对应的文章有可能和跳转之前的文章不一致
|
||||
if (mConcernEntity != null && newsId != null && !newsId.equals(mConcernEntity.getId())) {
|
||||
mConcernEntity = null;
|
||||
}
|
||||
|
||||
initTitle(getString(R.string.title_message_detail));
|
||||
|
||||
adapter = new MessageDetailAdapter(this, this, mMessageDetailRv, mConcernEntity, mEntrance);
|
||||
mLayoutManager = new LinearLayoutManager(this);
|
||||
mMessageDetailRv.setLayoutManager(mLayoutManager);
|
||||
mMessageDetailRv.setAdapter(adapter);
|
||||
|
||||
mMessageDetailEt.addTextChangedListener(watcher);
|
||||
mMessageDetailCommentSend.setEnabled(false);
|
||||
|
||||
mMessageDetailRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE
|
||||
&& !adapter.isOver() && !adapter.isLoading() && mConcernEntity != null
|
||||
&& mLayoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) {
|
||||
int offset = adapter.getItemCount() - adapter.getHotCommentListSize() - 3;
|
||||
if (offset >= 10) { // 防止自动上滑时触发
|
||||
adapter.addNormalComment(offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mUserInfo = LoginUtils.getUserInfo(this);
|
||||
if (mUserInfo != null) {
|
||||
ImageUtils.Companion.display(mMessageDetailIconDv, mUserInfo.getIcon());
|
||||
mMessageDetailUserNameTv.setText(mUserInfo.getName());
|
||||
}
|
||||
|
||||
if (newsId != null && mConcernEntity == null) {
|
||||
getConcernDigest();
|
||||
}
|
||||
|
||||
if (intent.getExtras().getBoolean("openSoftInput", false)) {//新闻详情的发表评论
|
||||
setSoftInput(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void getCommentNum() {
|
||||
RetrofitManager.getInstance(this).getApi()
|
||||
.getNewsCommentnum(newsId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new com.gh.gamecenter.retrofit.Response<List<CommentnumEntity>>() {
|
||||
|
||||
@Override
|
||||
public void onResponse(List<CommentnumEntity> response) {
|
||||
super.onResponse(response);
|
||||
if (response.size() > 0) {
|
||||
if (!TextUtils.isEmpty(mConcernEntity.getId())) {
|
||||
commentNum = response.get(0).getNum();
|
||||
mConcernEntity.setCommentnum(commentNum);
|
||||
adapter.notifyItemChanged(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void getConcernDigest() {
|
||||
RetrofitManager.getInstance(this).getApi().getNewsRichDigest(newsId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<ConcernEntity>() {
|
||||
@Override
|
||||
public void onResponse(ConcernEntity response) {
|
||||
mConcernEntity = response;
|
||||
if (commentNum == -1) {
|
||||
getCommentNum();
|
||||
} else {
|
||||
mConcernEntity.setCommentnum(commentNum);
|
||||
}
|
||||
|
||||
adapter.addConcernEntity(mConcernEntity);
|
||||
adapter.notifyDataSetChanged();
|
||||
adapter.addHotComment(0);
|
||||
getNewsViews();
|
||||
|
||||
if (commentNum == 0) {
|
||||
setSoftInput(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
showNoConnection(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void getNewsViews() {
|
||||
RetrofitManager.getInstance(this).getData()
|
||||
.getNewsViews(newsId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<ViewsEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<ViewsEntity> viewsEntities) {
|
||||
if (viewsEntities.size() > 0) {
|
||||
mConcernEntity.setViews(viewsEntities.get(0).getViews());
|
||||
adapter.notifyItemChanged(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@OnClick(R.id.message_detail_comment_hint_rl)
|
||||
public void OnHintClikListener() {
|
||||
setSoftInput(true);
|
||||
}
|
||||
|
||||
//软键盘控制
|
||||
private void setSoftInput(boolean isShow) {
|
||||
final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (isShow) {
|
||||
CheckLoginUtils.checkLogin(this, new CheckLoginUtils.OnLoggenInListener() {
|
||||
@Override
|
||||
public void onLoggedIn() {
|
||||
imm.showSoftInputFromInputMethod(mMessageDetailEt.getWindowToken(), 0);
|
||||
imm.toggleSoftInputFromWindow(mMessageDetailEt.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);
|
||||
mMessageDetailCommentHintRl.setVisibility(View.GONE);
|
||||
mMessageDetailLine.setVisibility(View.GONE);
|
||||
mMessageDetailCommentRl.setVisibility(View.VISIBLE);
|
||||
mMessageDetailUserRl.setVisibility(View.VISIBLE);
|
||||
mMessageDetailEt.setFocusable(true);
|
||||
mMessageDetailEt.setFocusableInTouchMode(true);
|
||||
mMessageDetailEt.requestFocus();
|
||||
mColseCommentV.setVisibility(View.VISIBLE);
|
||||
|
||||
if (mCommentEntity != null && mCommentEntity.getUser() != null) {
|
||||
mMessageDetailEt.setHint("回复" + mCommentEntity.getUser().getName() + ":");
|
||||
} else {
|
||||
mMessageDetailEt.setHint("优质评论会被优先展示");
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
|
||||
mMessageDetailCommentHintRl.setVisibility(View.VISIBLE);
|
||||
mMessageDetailLine.setVisibility(View.VISIBLE);
|
||||
mMessageDetailCommentRl.setVisibility(View.GONE);
|
||||
mMessageDetailUserRl.setVisibility(View.GONE);
|
||||
mColseCommentV.setVisibility(View.GONE);
|
||||
|
||||
if (mCommentEntity != null) {
|
||||
mCommentEntity = null; // 清空当前评论实体
|
||||
mMessageDetailEt.setHint("优质评论会被优先展示");
|
||||
mMessageDetailEt.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick(R.id.actionbar_rl_back)
|
||||
public void OnBackClikListener() {
|
||||
if (commentNum != -1 && commentNum != adapter.getConcernEntity().getCommentnum()) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra("commentNum", adapter.getConcernEntity().getCommentnum());
|
||||
setResult(1001, intent);
|
||||
}
|
||||
finish();
|
||||
}
|
||||
|
||||
@OnTouch(R.id.message_detail_close_comment)
|
||||
public boolean OnRecyclerTouchListener() {
|
||||
if (mMessageDetailCommentRl.getVisibility() == View.VISIBLE) {
|
||||
setSoftInput(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@OnClick(R.id.comment_send)
|
||||
public void OnSendCommentListener() {
|
||||
final String content = mMessageDetailEt.getText().toString();
|
||||
|
||||
if (content.length() == 0) {
|
||||
Utils.toast(MessageDetailActivity.this, "评论内容不能为空!");
|
||||
return;
|
||||
}
|
||||
|
||||
mSendingDialog = DialogUtils.showWaitDialog(this, "正在提交");
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
try {
|
||||
jsonObject.put("content", content);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (newsId == null && mConcernEntity == null ||
|
||||
newsId == null && mConcernEntity.getId() == null) {
|
||||
Utils.toast(this, "评论异常 id null");
|
||||
mSendingDialog.cancel();
|
||||
return;
|
||||
} else if (newsId == null) {
|
||||
newsId = mConcernEntity.getId();
|
||||
}
|
||||
|
||||
PostCommentUtils.addCommentData(MessageDetailActivity.this, newsId, jsonObject.toString(), mCommentEntity,
|
||||
new PostCommentUtils.PostCommentListener() {
|
||||
@Override
|
||||
public void postSuccess(JSONObject response) {
|
||||
mSendingDialog.dismiss();
|
||||
toast("发表成功");
|
||||
mMessageDetailEt.setText("");
|
||||
|
||||
try {
|
||||
JSONObject cacheObject = new JSONObject();
|
||||
JSONObject cacheUser = new JSONObject();
|
||||
JSONObject userData = new JSONObject();
|
||||
cacheUser.put("_id", TokenUtils.getDeviceId(MessageDetailActivity.this));
|
||||
cacheUser.put("icon", mUserInfo.getIcon());
|
||||
cacheUser.put("name", mUserInfo.getName());
|
||||
userData.put("is_comment_own", true);
|
||||
cacheObject.put("_id", response.getString("_id"));
|
||||
cacheObject.put("content", content);
|
||||
cacheObject.put("time", System.currentTimeMillis() / 1000);
|
||||
cacheObject.put("vote", 0);
|
||||
cacheObject.put("user", cacheUser);
|
||||
cacheObject.put("user_data", userData);
|
||||
|
||||
if (mCommentEntity != null) {
|
||||
JSONObject cacheParent = new JSONObject();
|
||||
JSONObject cacheParentUser = new JSONObject();
|
||||
cacheParentUser.put("_id", mCommentEntity.getId());
|
||||
cacheParentUser.put("name", mCommentEntity.getUser().getName());
|
||||
cacheParent.put("user", cacheParentUser);
|
||||
cacheObject.put("parent", cacheParent);
|
||||
}
|
||||
|
||||
CommentEntity commentEntity = new Gson().fromJson(cacheObject.toString(), CommentEntity.class);
|
||||
if (mConcernEntity != null) {
|
||||
adapter.addNormalComment(commentEntity);
|
||||
}
|
||||
|
||||
modifyNewsCommentOkhttpCache(0, cacheObject, newsId);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (mConcernEntity != null) {
|
||||
// 完成评论操作,添加评论数
|
||||
adapter.addCommentCount();
|
||||
//修改评论缓存
|
||||
CommentManager.updateOkhttpCacheForId(MessageDetailActivity.this, newsId);
|
||||
CommentManager.updateOkhttpCache(MessageDetailActivity.this, newsId);
|
||||
adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2);
|
||||
adapter.notifyItemChanged(adapter.getItemCount() - 1); //刷新脚布局高度
|
||||
} else {
|
||||
showNoConnection(false);
|
||||
}
|
||||
|
||||
setSoftInput(false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postFailed(Throwable e) {
|
||||
mSendingDialog.dismiss();
|
||||
|
||||
if (e instanceof HttpException) {
|
||||
HttpException exception = (HttpException) e;
|
||||
if (exception.code() == 403) {
|
||||
try {
|
||||
JSONObject errorJson = new JSONObject(exception.response().errorBody().string());
|
||||
String detail = errorJson.getString("detail");
|
||||
switch (detail) {
|
||||
case "too frequent":
|
||||
toast("别话痨哦~休息一会再来评论吧~");
|
||||
break;
|
||||
case "user blocked":
|
||||
toast("账号状态异常,暂时无法发表评论");
|
||||
break;
|
||||
case "article blocked":
|
||||
toast("文章异常,无法发表评论");
|
||||
setSoftInput(false);
|
||||
break;
|
||||
case "illegal":
|
||||
toast("评论内容可能包括敏感信息,请修改后再发表");
|
||||
break;
|
||||
default:
|
||||
toast("评论失败,未知原因");
|
||||
break;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
toast("评论异常");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
toast("提交失败,请检查网络设置");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void modifyNewsCommentOkhttpCache(int offset, JSONObject commentData, String id) {
|
||||
String key = TimestampUtils.addTimestamp(Config.COMMENT_HOST + "article/" + id + "/comment?limit=10&offset=" + offset);
|
||||
byte[] data = OkHttpCache.getCache(this, key);
|
||||
if (data != null) {
|
||||
try {
|
||||
JSONArray jsonArray = new JSONArray(new String(data));
|
||||
JSONArray newComment = new JSONArray();
|
||||
newComment.put(commentData);
|
||||
for (int i = 0, size = jsonArray.length() > 9 ? 9 : jsonArray.length(); i < size; i++) {
|
||||
newComment.put(jsonArray.get(i));
|
||||
}
|
||||
OkHttpCache.updateCache(this, key, newComment.toString().getBytes());
|
||||
if (jsonArray.length() == 10) {
|
||||
modifyNewsCommentOkhttpCache(offset + 10, jsonArray.getJSONObject(9), id);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showNoConnection(boolean isShow) {
|
||||
if (isShow) {
|
||||
mNoConnection.setVisibility(View.VISIBLE);
|
||||
mMessageDetailRv.setVisibility(View.GONE);
|
||||
} else {
|
||||
mNoConnection.setVisibility(View.GONE);
|
||||
mMessageDetailRv.setVisibility(View.VISIBLE);
|
||||
|
||||
if (newsId != null) {
|
||||
getConcernDigest();
|
||||
}
|
||||
if (mMessageDetailCommentRl.getVisibility() == View.VISIBLE) {
|
||||
setSoftInput(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 登录事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBReuse reuse) {
|
||||
if (reuse.getType().equals(LOGIN_TAG)) { // 登入
|
||||
mUserInfo = LoginUtils.getUserInfo(this);
|
||||
if (mUserInfo != null) {
|
||||
ImageUtils.Companion.display(mMessageDetailIconDv, mUserInfo.getIcon());
|
||||
mMessageDetailUserNameTv.setText(mUserInfo.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommentCallback(CommentEntity entity) {
|
||||
mCommentEntity = entity;
|
||||
setSoftInput(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
|
||||
if (commentNum != -1 && adapter.getConcernEntity() != null
|
||||
&& commentNum != adapter.getConcernEntity().getCommentnum()) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra("commentNum", adapter.getConcernEntity().getCommentnum());
|
||||
setResult(1001, intent);
|
||||
}
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,7 +28,6 @@ import com.gh.common.util.ApkActiveUtils;
|
||||
import com.gh.common.util.CheckLoginUtils;
|
||||
import com.gh.common.util.CollectionUtils;
|
||||
import com.gh.common.util.DataCollectionUtils;
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.common.util.DetailDownloadUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
@ -52,7 +51,6 @@ import com.jakewharton.rxbinding.view.RxView;
|
||||
import com.lightgame.download.DataWatcher;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.tencent.tauth.Tencent;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
@ -76,8 +74,6 @@ import rx.schedulers.Schedulers;
|
||||
*/
|
||||
public class NewsDetailActivity extends BaseActivity implements OnClickListener, OnRequestCallBackListener {
|
||||
|
||||
@BindView(R.id.actionbar_tv_title)
|
||||
TextView mActionbarTitle;
|
||||
@BindView(R.id.news_detail_rv_show)
|
||||
RecyclerView mDetailRv;
|
||||
@BindView(R.id.news_detail_ll_bottom)
|
||||
@ -147,7 +143,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
} else {
|
||||
if (mNewsEntity == null) return;
|
||||
if (mNewsEntity.getType() != null) {
|
||||
mActionbarTitle.setText(mNewsEntity.getType());
|
||||
setNavigationTitle(mNewsEntity.getType());
|
||||
}
|
||||
adapter.setId(mNewsEntity.getId());
|
||||
adapter.setType(mNewsEntity.getType());
|
||||
@ -173,7 +169,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
Intent intent = new Intent(context, NewsDetailActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
intent.putExtra(NewsEntity.class.getSimpleName(), newsEntity);
|
||||
intent.putExtra(NewsEntity.TAG, newsEntity);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
@ -191,7 +187,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
Intent intent = new Intent(context, NewsDetailActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
intent.putExtra(NewsEntity.class.getSimpleName(), newsEntity);
|
||||
intent.putExtra(NewsEntity.TAG, newsEntity);
|
||||
intent.putExtra(KEY_COLLECTIONNEWS, true);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
@ -229,26 +225,27 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_news_detail;
|
||||
}
|
||||
|
||||
//接收QQ或者QQ空间分享回调
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE
|
||||
|| requestCode == com.tencent.connect.common.Constants.REQUEST_QZONE_SHARE) {
|
||||
Tencent.onActivityResultData(requestCode, resultCode, data, ShareUtils.getInstance(this).QqShareListener);
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
// public boolean onCreateOptionsMenu(Menu menu) {
|
||||
//
|
||||
// getMenuInflater().inflate(R.menu.menu_share, menu);
|
||||
//
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// return super.onOptionsItemSelected(item);
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
initTitle("");
|
||||
setNavigationTitle("");
|
||||
|
||||
// 增加actionBar Button
|
||||
RelativeLayout reuse_actionbar = mContentView.findViewById(R.id.reuse_actionbar);
|
||||
RelativeLayout reuse_actionbar = findViewById(R.id.reuse_actionbar);
|
||||
mNewsShare = LayoutInflater.from(this).inflate(R.layout.menu_action_share, reuse_actionbar, false); // 绑定parentView 否则会丢失宽高
|
||||
mNewsShare.setVisibility(View.GONE);
|
||||
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mNewsShare.getLayoutParams();
|
||||
@ -261,7 +258,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
RelativeLayout.LayoutParams params2 = (RelativeLayout.LayoutParams) mNewsCollection.getLayoutParams();
|
||||
params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
params2.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
params2.setMargins(0, 0 ,params.width, 0);
|
||||
params2.setMargins(0, 0, params.width, 0);
|
||||
reuse_actionbar.addView(mNewsCollection, params2);
|
||||
|
||||
mDetailRv.setHasFixedSize(true);
|
||||
@ -276,10 +273,10 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
newsId = getIntent().getBundleExtra(EntranceUtils.KEY_DATA).getString(EntranceUtils.KEY_NEWSID);
|
||||
}
|
||||
if (newsId == null) {
|
||||
mNewsEntity = getIntent().getParcelableExtra(NewsEntity.class.getSimpleName());
|
||||
mNewsEntity = getIntent().getParcelableExtra(NewsEntity.TAG);
|
||||
if (mNewsEntity != null) {
|
||||
if (mNewsEntity.getType() != null) {
|
||||
mActionbarTitle.setText(mNewsEntity.getType());
|
||||
setNavigationTitle(mNewsEntity.getType());
|
||||
}
|
||||
adapter.setId(mNewsEntity.getId());
|
||||
adapter.setType(mNewsEntity.getType());
|
||||
@ -338,14 +335,14 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
|
||||
String url = "http://www.ghzs666.com/article/" +
|
||||
adapter.getNewsDetailEntity().getId() + ".html";
|
||||
String shareIcon;
|
||||
if (gameEntity == null) {
|
||||
showShare(url, adapter.getNewsDetailEntity().getTitle(),
|
||||
"http://image.ghzs666.com/pic/57d604808ab49e467d8b4568.png",
|
||||
adapter.getNewsDetailEntity().getTitle(), null, false);
|
||||
shareIcon = getString(R.string.gh_icon_url);
|
||||
} else {
|
||||
showShare(url, gameEntity.getName(), gameEntity.getIcon(),
|
||||
adapter.getNewsDetailEntity().getTitle(), gameEntity.getTag(), false);
|
||||
shareIcon = gameEntity.getIcon();
|
||||
}
|
||||
showShare(url, shareIcon, adapter.getNewsDetailEntity().getTitle(),
|
||||
"来自光环助手(最强卡牌神器)", ShareUtils.ShareType.news);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -414,9 +411,9 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
mNewsCollection.setVisibility(View.VISIBLE);
|
||||
NewsDetailEntity newsDetailEntity = adapter.getNewsDetailEntity();
|
||||
if (newsDetailEntity.getUserData() != null && newsDetailEntity.getUserData().isArticleFavorite()) {
|
||||
mNewsCollection.setImageResource(R.drawable.detail_collection_select);
|
||||
mNewsCollection.setImageResource(R.drawable.menu_ic_collect_select);
|
||||
} else {
|
||||
mNewsCollection.setImageResource(R.drawable.detail_collection_unselect);
|
||||
mNewsCollection.setImageResource(R.drawable.menu_ic_collect_unselect);
|
||||
}
|
||||
}
|
||||
|
||||
@ -466,7 +463,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
|
||||
mNewsEntity = response;
|
||||
if (response.getType() != null) {
|
||||
mActionbarTitle.setText(response.getType());
|
||||
setNavigationTitle(response.getType());
|
||||
}
|
||||
|
||||
adapter.setId(newsId);
|
||||
@ -487,11 +484,6 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加手势监听,控制字体大小
|
||||
*
|
||||
* @author 柯皓源
|
||||
*/
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
switch (ev.getAction() & MotionEventCompat.ACTION_MASK) {
|
||||
@ -583,14 +575,14 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
public void onSuccess() {
|
||||
newsDetailEntity.getUserData().setArticleFavorite(false);
|
||||
mNewsCollection.setEnabled(true);
|
||||
mNewsCollection.setImageResource(R.drawable.detail_collection_unselect);
|
||||
toast("取消收藏");
|
||||
mNewsCollection.setImageResource(R.drawable.menu_ic_collect_unselect);
|
||||
toast(getString(R.string.collection_cancel));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
mNewsCollection.setEnabled(true);
|
||||
toast("取消收藏失败");
|
||||
toast(getString(R.string.collection_cancel_failure));
|
||||
}
|
||||
});
|
||||
|
||||
@ -609,14 +601,14 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
|
||||
}
|
||||
userData.setArticleFavorite(true);
|
||||
mNewsCollection.setEnabled(true);
|
||||
mNewsCollection.setImageResource(R.drawable.detail_collection_select);
|
||||
toast("收藏成功");
|
||||
mNewsCollection.setImageResource(R.drawable.menu_ic_collect_select);
|
||||
toast(getString(R.string.collection_success));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
mNewsCollection.setEnabled(true);
|
||||
toast("收藏失败");
|
||||
toast(getString(R.string.collection_failure));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -3,318 +3,29 @@ package com.gh.gamecenter;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.Html;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DataCollectionUtils;
|
||||
import com.gh.common.util.DataUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.NewsUtils;
|
||||
import com.gh.common.view.VerticalItemDecoration;
|
||||
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
||||
import com.gh.gamecenter.adapter.viewholder.NewsTextViewHolder;
|
||||
import com.gh.gamecenter.entity.NewsEntity;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import butterknife.BindView;
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.functions.Func1;
|
||||
import rx.schedulers.Schedulers;
|
||||
import com.halo.assistant.fragment.game.GameNewsSearchResultFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2016/8/22.
|
||||
* 新闻搜索界面
|
||||
*/
|
||||
public class NewsSearchActivity extends BaseActivity {
|
||||
|
||||
@BindView(R.id.gamedetail_news_rv)
|
||||
RecyclerView mNewsSearchRv;
|
||||
@BindView(R.id.tv_search)
|
||||
TextView mNewsSearchTv;
|
||||
@BindView(R.id.reuse_none_data)
|
||||
LinearLayout mNoneData;
|
||||
@BindView(R.id.et_search)
|
||||
EditText mNewsSearchEt;
|
||||
@BindView(R.id.gamedetail_news_ll_loading)
|
||||
LinearLayout mLoading;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConn;
|
||||
|
||||
private LinearLayoutManager layoutManager;
|
||||
private List<NewsEntity> newsEntities;
|
||||
private NewsSearchAdapter searchAdapter;
|
||||
|
||||
private boolean isLoadOver = true;
|
||||
private boolean isRemove = false;
|
||||
private boolean isNetworkError = false;
|
||||
|
||||
private String searchKey;
|
||||
private String gameId;
|
||||
|
||||
private Handler handler = new Handler();
|
||||
|
||||
private int page = 1;
|
||||
@Deprecated
|
||||
public class NewsSearchActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String gameName, String searchKey, String gameId, String entrance) {
|
||||
Intent intent = new Intent(context, NewsSearchActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
intent.putExtra(EntranceUtils.KEY_SEARCHKEY, searchKey);
|
||||
intent.putExtra(EntranceUtils.KEY_GAMEID, gameId);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_GAMENAME, gameName);
|
||||
args.putString(EntranceUtils.KEY_SEARCHKEY, searchKey);
|
||||
args.putString(EntranceUtils.KEY_GAMEID, gameId);
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(NewsSearchActivity.class)
|
||||
// .setFragment(GameNewsSearchResultFragment.class).setArgs(args).build();
|
||||
return getIntent(context, GameNewsSearchResultFragment.class, args);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_gamedetail_news;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Intent intent = getIntent();
|
||||
String gameName = intent.getExtras().getString(EntranceUtils.KEY_GAMENAME);
|
||||
searchKey = intent.getExtras().getString(EntranceUtils.KEY_SEARCHKEY);
|
||||
gameId = intent.getExtras().getString(EntranceUtils.KEY_GAMEID);
|
||||
|
||||
initTitle(gameName);
|
||||
|
||||
DisplayMetrics outMetrics = new DisplayMetrics();
|
||||
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
|
||||
|
||||
newsEntities = new ArrayList<>();
|
||||
searchAdapter = new NewsSearchAdapter();
|
||||
|
||||
layoutManager = new LinearLayoutManager(this);
|
||||
|
||||
mNewsSearchRv.setLayoutManager(layoutManager);
|
||||
mNewsSearchRv.setAdapter(searchAdapter);
|
||||
mNewsSearchRv.addItemDecoration(new VerticalItemDecoration(NewsSearchActivity.this, 1, false));
|
||||
|
||||
mNewsSearchEt.setText(searchKey);
|
||||
|
||||
loadNewsData(page);
|
||||
|
||||
mNewsSearchTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
searchKey = mNewsSearchEt.getText().toString().trim();
|
||||
if (searchKey.length() >= 1) {
|
||||
newsEntities.clear();
|
||||
searchAdapter.notifyDataSetChanged();
|
||||
mLoading.setVisibility(View.VISIBLE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
||||
handler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
page = 1;
|
||||
loadNewsData(page);
|
||||
}
|
||||
}, 500);
|
||||
|
||||
} else {
|
||||
Utils.toast(NewsSearchActivity.this, getString(R.string.search_hint));
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
mNewsSearchRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findLastVisibleItemPosition() + 1 == searchAdapter.getItemCount()
|
||||
&& isLoadOver && !isRemove && !isNetworkError) {
|
||||
isLoadOver = false;
|
||||
page++;
|
||||
loadNewsData(page);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mNoConn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mNoConn.setVisibility(View.GONE);
|
||||
mLoading.setVisibility(View.VISIBLE);
|
||||
handler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
loadNewsData(1);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
handler.removeCallbacksAndMessages(null);
|
||||
}
|
||||
|
||||
private void loadNewsData(final int page) {
|
||||
// DataUtils.onEvent(this, "游戏新闻搜索", searchKey);
|
||||
// DataCollectionUtils.uploadSearch(this, searchKey, "游戏新闻搜索");
|
||||
|
||||
RetrofitManager.getInstance(this).getApi().getSearchNews(gameId, searchKey, page, 20)
|
||||
.map(new Func1<List<NewsEntity>, List<NewsEntity>>() {
|
||||
@Override
|
||||
public List<NewsEntity> call(List<NewsEntity> list) {
|
||||
// 去掉重复数据
|
||||
return NewsUtils.removeDuplicateData(newsEntities, list);
|
||||
}
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<NewsEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<NewsEntity> response) {
|
||||
isLoadOver = true;
|
||||
mLoading.setVisibility(View.GONE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
|
||||
if (response.size() != 0) {
|
||||
newsEntities.addAll(response);
|
||||
searchAdapter.notifyDataSetChanged();
|
||||
} else {
|
||||
if (page == 1) {
|
||||
mNoneData.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
isRemove = true;
|
||||
searchAdapter.notifyItemChanged(searchAdapter.getItemCount() - 1);
|
||||
}
|
||||
|
||||
if (response.size() < 20) {
|
||||
isRemove = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
if (page == 1) {
|
||||
mNoConn.setVisibility(View.VISIBLE);
|
||||
mLoading.setVisibility(View.GONE);
|
||||
}
|
||||
isLoadOver = true;
|
||||
toast(R.string.loading_failed_hint);
|
||||
isNetworkError = true;
|
||||
searchAdapter.notifyItemChanged(searchAdapter.getItemCount() - 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public class NewsSearchAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
if (viewType == 0) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(
|
||||
R.layout.refresh_footerview, parent, false);
|
||||
return new FooterViewHolder(view);
|
||||
} else {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(
|
||||
R.layout.news_text_item, parent, false);
|
||||
return new NewsTextViewHolder(view);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
|
||||
if (holder instanceof NewsTextViewHolder) {
|
||||
NewsTextViewHolder viewHolder = (NewsTextViewHolder) holder;
|
||||
viewHolder.title.setText(Html.fromHtml(newsEntities.get(position).getTitle()));
|
||||
viewHolder.type.setVisibility(View.GONE);
|
||||
viewHolder.line.setVisibility(View.GONE);
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
NewsEntity newsEntity = newsEntities.get(holder.getPosition());
|
||||
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("名字", newsEntity.getTitle());
|
||||
kv.put("位置", String.valueOf(holder.getPosition() + 1));
|
||||
DataUtils.onEvent(NewsSearchActivity.this, "点击", "游戏新闻搜索", kv);
|
||||
|
||||
DataCollectionUtils.uploadClick(NewsSearchActivity.this,
|
||||
"列表", "游戏新闻搜索", newsEntity.getTitle());
|
||||
|
||||
// 统计阅读量
|
||||
NewsUtils.statNewsViews(NewsSearchActivity.this, newsEntity.getId());
|
||||
NewsDetailActivity.startNewsDetailActivity(NewsSearchActivity.this, newsEntity,
|
||||
mEntrance + "+(游戏新闻搜索[" + searchKey + "])");
|
||||
}
|
||||
});
|
||||
} else if (holder instanceof FooterViewHolder) {
|
||||
FooterViewHolder viewHolder = (FooterViewHolder) holder;
|
||||
viewHolder.itemView.setPadding(0, 0, 0, 0);
|
||||
if (isNetworkError) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText(R.string.loading_failed_retry);
|
||||
viewHolder.itemView.setClickable(true);
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
isNetworkError = false;
|
||||
notifyItemChanged(getItemCount() - 1);
|
||||
loadNewsData(page);
|
||||
}
|
||||
});
|
||||
} else if (isRemove) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText(R.string.loading_complete);
|
||||
viewHolder.itemView.setClickable(false);
|
||||
} else {
|
||||
viewHolder.loading.setVisibility(View.VISIBLE);
|
||||
viewHolder.hint.setText(R.string.loading);
|
||||
viewHolder.itemView.setClickable(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (position == newsEntities.size()) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (newsEntities.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return newsEntities.size() + 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import android.support.annotation.StringRes;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
@ -17,8 +18,6 @@ import com.gh.base.BaseActivity;
|
||||
import com.gh.gamecenter.normal.NormalFragment;
|
||||
import com.gh.gamecenter.normal.ToolbarController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
||||
/**
|
||||
@ -37,6 +36,22 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
|
||||
public static final String NORMAL_FRAGMENT_NAME = "normalFragmentName";
|
||||
public static final String NORMAL_FRAGMENT_BUNDLE = "normalFragmentBundle";
|
||||
|
||||
@Deprecated
|
||||
protected static Intent getIntent(Context context, Class<? extends NormalFragment> t) {
|
||||
Intent intent = new Intent(context, NormalActivity.class);
|
||||
intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName());
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
protected static Intent getIntent(Context context, Class<? extends NormalFragment> t, Bundle bundle) {
|
||||
Intent intent = new Intent(context, NormalActivity.class);
|
||||
intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName());
|
||||
intent.putExtra(NORMAL_FRAGMENT_BUNDLE, bundle);
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
||||
public static void startFragment(Context context, Class<? extends NormalFragment> t) {
|
||||
Intent intent = new Intent(context, NormalActivity.class);
|
||||
intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName());
|
||||
@ -117,6 +132,20 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
|
||||
public void setToolbarMenu(@MenuRes int res) {
|
||||
mNormalToolbar.inflateMenu(res);
|
||||
mNormalToolbar.setOnMenuItemClickListener(this);
|
||||
|
||||
Menu menu = mNormalToolbar.getMenu();
|
||||
for (int i = 0; i < menu.size(); i++) {
|
||||
MenuItem menuItem = menu.getItem(i);
|
||||
// menu设置actionLayout后,无法捕捉点击事件,以icon为tag,如果icon is null 手动设置menuItem点击事件
|
||||
if (menuItem != null && menuItem.getIcon() == null) {
|
||||
menuItem.getActionView().setOnClickListener((v) -> this.onMenuItemClick(menuItem));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MenuItem getMenuItem(int res) {
|
||||
return mNormalToolbar.getMenu().findItem(res);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -128,11 +157,10 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
List<Fragment> fragments = getSupportFragmentManager().getFragments();
|
||||
for (Fragment fragment : fragments) {
|
||||
fragment.onActivityResult(requestCode, resultCode, data);
|
||||
public void onBackPressed() {
|
||||
if (mTargetFragment instanceof NormalFragment && !((NormalFragment) mTargetFragment).onBackPressed()) {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ public class PluginActivity extends BaseActivity implements OnRequestCallBackLis
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
initTitle(getString(R.string.title_plugin));
|
||||
setNavigationTitle(getString(R.string.title_plugin));
|
||||
|
||||
mNoConn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
|
||||
46
app/src/main/java/com/gh/gamecenter/PushProxyActivity.java
Normal file
46
app/src/main/java/com/gh/gamecenter/PushProxyActivity.java
Normal file
@ -0,0 +1,46 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
import com.gh.base.GHUmengNotificationClickHandler;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.umeng.message.UmengNotifyClickActivity;
|
||||
import com.umeng.message.entity.UMessage;
|
||||
|
||||
import org.android.agoo.common.AgooConstants;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/**
|
||||
* Created by khy on 17/11/17.
|
||||
*/
|
||||
|
||||
public class PushProxyActivity extends UmengNotifyClickActivity {
|
||||
|
||||
private static String TAG = PushProxyActivity.class.getName();
|
||||
|
||||
/**
|
||||
* 相当于代理类
|
||||
* 如果后台进程被杀,消息栏消息触发的事件将由本类处理
|
||||
*
|
||||
* @param intent
|
||||
*/
|
||||
@Override
|
||||
public void onMessage(Intent intent) {
|
||||
super.onMessage(intent); //此方法必须调用,否则无法统计打开数
|
||||
String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY);
|
||||
Utils.log(TAG, body);
|
||||
try {
|
||||
GHUmengNotificationClickHandler handler = new GHUmengNotificationClickHandler();
|
||||
handler.launchApp(this, new UMessage(new JSONObject(body)));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
finishActivity();
|
||||
}
|
||||
|
||||
private void finishActivity() {
|
||||
this.finish();
|
||||
overridePendingTransition(0, 0);//禁止退出Activity 动画
|
||||
}
|
||||
}
|
||||
205
app/src/main/java/com/gh/gamecenter/QuestionsDetailActivity.java
Normal file
205
app/src/main/java/com/gh/gamecenter/QuestionsDetailActivity.java
Normal file
@ -0,0 +1,205 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.ShareUtils;
|
||||
import com.gh.gamecenter.ask.entity.QuestionsDetailEntity;
|
||||
import com.gh.gamecenter.ask.questionsdetail.AnswerEditFragment;
|
||||
import com.gh.gamecenter.ask.questionsdetail.AnswerFoldFragment;
|
||||
import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment;
|
||||
import com.gh.gamecenter.ask.questionsdetail.QuestionsInviteFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 7/12/17.
|
||||
*/
|
||||
|
||||
public class QuestionsDetailActivity extends BaseActivity implements FragmentManager.OnBackStackChangedListener, View.OnClickListener {
|
||||
|
||||
public static final String TAG = "QuestionsDetailActivity";
|
||||
|
||||
public static final String QUESTIONS_DETAIL_ANSWER = "answer";
|
||||
public static final String QUESTIONS_DETAIL_INVITE = "invite";
|
||||
public static final String QUESTIONS_DETAIL_FOLD = "fold";
|
||||
public static final String QUESTIONS_DETAIL = "questions_detail";
|
||||
|
||||
private static final int QUESTIONS_DETAIL_ANSWER_REQUEST = 110;
|
||||
|
||||
private View mShareIv;
|
||||
|
||||
private QuestionsDetailFragment mQuestionsDetailFragment;
|
||||
|
||||
private String mQuestionsId;
|
||||
|
||||
public static Intent getIntent(Context context, String questionsId, String entrance) {
|
||||
Intent intent = new Intent(context, QuestionsDetailActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_QUESTIONS_ID, questionsId);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == QUESTIONS_DETAIL_ANSWER_REQUEST) {
|
||||
if (resultCode == AnswerEditFragment.SAVE_DRAFTS) {
|
||||
mQuestionsDetailFragment.postDraftsSuccess();
|
||||
} else if (resultCode == Activity.RESULT_OK) {
|
||||
if (data != null)
|
||||
mQuestionsDetailFragment.postAnswerSuccess(data.getStringExtra(EntranceUtils.KEY_ANSWER_ID));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_ask_questionsdetail;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mQuestionsId = getIntent().getStringExtra(EntranceUtils.KEY_QUESTIONS_ID);
|
||||
if (getIntent().getBundleExtra(EntranceUtils.KEY_DATA) != null) {
|
||||
mQuestionsId = getIntent().getBundleExtra(EntranceUtils.KEY_DATA).getString(EntranceUtils.KEY_QUESTIONS_ID);
|
||||
}
|
||||
getSupportFragmentManager().addOnBackStackChangedListener(this);
|
||||
show(QUESTIONS_DETAIL);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onHandleBackPressed() {
|
||||
if (mQuestionsDetailFragment.isVisible()) {
|
||||
finish();
|
||||
} else {
|
||||
getSupportFragmentManager().popBackStack();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (view == mShareIv) {
|
||||
String shreIcon;
|
||||
QuestionsDetailEntity data = mQuestionsDetailFragment.getQuestionsDetailData();
|
||||
if (data == null) return;
|
||||
if (data.getImages().size() > 0) {
|
||||
shreIcon = data.getImages().get(0);
|
||||
} else {
|
||||
shreIcon = getString(R.string.share_ghzs_logo);
|
||||
}
|
||||
String description = data.getDescription();
|
||||
if (TextUtils.isEmpty(description)) {
|
||||
description = getString(R.string.ask_share_default_summary);
|
||||
}
|
||||
ShareUtils.getInstance(this).showShareWindows(this, view, getString(R.string.share_questions_url, data.getId())
|
||||
, shreIcon
|
||||
, getString(R.string.ask_share_questions_title, data.getTitle(), data.getAnswersCount())
|
||||
, description, ShareUtils.ShareType.askNormal);
|
||||
}
|
||||
}
|
||||
|
||||
private void addShareView() {
|
||||
RelativeLayout reuse_actionbar = mContentView.findViewById(R.id.reuse_actionbar);
|
||||
mShareIv = LayoutInflater.from(this).inflate(R.layout.menu_action_share, reuse_actionbar, false);
|
||||
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mShareIv.getLayoutParams();
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
reuse_actionbar.addView(mShareIv, params);
|
||||
mShareIv.setOnClickListener(this);
|
||||
}
|
||||
|
||||
public void show(String type) {
|
||||
showMenu(type);
|
||||
switch (type) {
|
||||
case QUESTIONS_DETAIL_ANSWER:
|
||||
showAnswerEdit(type);
|
||||
break;
|
||||
case QUESTIONS_DETAIL_INVITE:
|
||||
showQuestionsInvite(type);
|
||||
break;
|
||||
case QUESTIONS_DETAIL_FOLD:
|
||||
showDetailFold(type);
|
||||
break;
|
||||
case QUESTIONS_DETAIL:
|
||||
showQuestionsDetail(type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void showQuestionsDetail(String type) {
|
||||
mQuestionsDetailFragment = QuestionsDetailFragment.getInstance(mQuestionsId);
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.layout_fragment_content, mQuestionsDetailFragment)
|
||||
.commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
private void showDetailFold(String type) {
|
||||
AnswerFoldFragment fragment = AnswerFoldFragment.getInstance(mQuestionsId, mEntrance + "+(问题详情)");
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.addToBackStack(type)
|
||||
.replace(R.id.layout_fragment_content, fragment)
|
||||
.commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
private void showQuestionsInvite(String type) {
|
||||
QuestionsDetailEntity data = mQuestionsDetailFragment.getQuestionsDetailData();
|
||||
if (data == null) return;
|
||||
QuestionsInviteFragment fragment = QuestionsInviteFragment.getInstance(data);
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.addToBackStack(type)
|
||||
.replace(R.id.layout_fragment_content, fragment)
|
||||
.commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
private void showAnswerEdit(String type) {
|
||||
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, mQuestionsId);
|
||||
bundle.putString(EntranceUtils.KEY_QUESTIONS_TITLE, mQuestionsDetailFragment.getQuestionsTitle());
|
||||
NormalActivity.startFragmentForResult(this, AnswerEditFragment.class, bundle, QUESTIONS_DETAIL_ANSWER_REQUEST);
|
||||
}
|
||||
|
||||
private void showMenu(String type) {
|
||||
switch (type) {
|
||||
case QUESTIONS_DETAIL:
|
||||
setNavigationTitle("问题详情");
|
||||
if (mShareIv == null) {
|
||||
addShareView();
|
||||
} else {
|
||||
mShareIv.setVisibility(View.VISIBLE);
|
||||
}
|
||||
break;
|
||||
case QUESTIONS_DETAIL_INVITE:
|
||||
setNavigationTitle("达人推荐");
|
||||
if (mShareIv != null && mShareIv.getVisibility() == View.VISIBLE)
|
||||
mShareIv.setVisibility(View.GONE);
|
||||
break;
|
||||
case QUESTIONS_DETAIL_FOLD:
|
||||
setNavigationTitle("折叠回答");
|
||||
if (mShareIv != null && mShareIv.getVisibility() == View.VISIBLE)
|
||||
mShareIv.setVisibility(View.GONE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackStackChanged() {
|
||||
if (mQuestionsDetailFragment.isVisible()) {
|
||||
showMenu(QUESTIONS_DETAIL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -11,20 +11,16 @@ import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.Html;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.RandomUtils;
|
||||
import com.gh.common.util.UserIconUtils;
|
||||
import com.gh.common.view.RadarLayout;
|
||||
@ -67,16 +63,10 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
RadarLayout mRadarLayout;
|
||||
@BindView(R.id.waiting_hint)
|
||||
TextView mWaitingHint;
|
||||
@BindView(R.id.reuse_actionbar)
|
||||
RelativeLayout mActionbar;
|
||||
@BindView(R.id.waiting_gprs_hint)
|
||||
TextView mGPRSHint;
|
||||
@BindView(R.id.waiting_no_conn_hint)
|
||||
TextView mNoConnHint;
|
||||
@BindView(R.id.actionbar_iv_back)
|
||||
ImageView mBackIv;
|
||||
@BindView(R.id.actionbar_tv_title)
|
||||
TextView mTitleTv;
|
||||
/**
|
||||
* 开启 文件接收方 通信服务 (必须在子线程执行)
|
||||
*
|
||||
@ -86,7 +76,7 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
DatagramSocket mDatagramSocket;
|
||||
private WifiAPBroadcastReceiver mWifiAPBroadcastReceiver;
|
||||
private List<FileInfo> mFileInfos; // 接收到的文件列表
|
||||
private SharedPreferences sp;
|
||||
private SharedPreferences mSharedPreferences;
|
||||
private boolean mIsInitialized;
|
||||
private boolean isOpenWifi; //记录开热点前的WiFi状态
|
||||
private boolean isDestroy;
|
||||
@ -99,62 +89,58 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context) {
|
||||
Intent intent = new Intent(context, ReceiverWaitingActivity.class);
|
||||
return intent;
|
||||
return new Intent(context, ReceiverWaitingActivity.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_receiver_waiting;
|
||||
return R.layout.activity_receive_waiting;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
colsePage();
|
||||
public boolean onHandleBackPressed() {
|
||||
|
||||
unregisterReceiver(mWifiAPBroadcastReceiver);
|
||||
|
||||
closePage();
|
||||
//关闭热点
|
||||
HotspotManager.initUserAp(getApplicationContext());
|
||||
|
||||
if (isOpenWifi) {
|
||||
WifiMgr.getInstance(this).openWifi();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
|
||||
getMenuInflater().inflate(R.menu.menu_receive, menu);
|
||||
|
||||
MenuItem menuItem = menu.findItem(R.id.menu_button);
|
||||
final TextView textView = menuItem.getActionView().findViewById(R.id.tv_menu_receive);
|
||||
textView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
showConnHintDialog();
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_receive_waiting));
|
||||
setNavigationTitle(R.string.title_receive_waiting, android.R.color.white);
|
||||
|
||||
mTitleTv.setTextColor(Color.WHITE);
|
||||
mBackIv.setImageResource(R.drawable.reuse_kc_back);
|
||||
|
||||
// 添加分享图标
|
||||
TextView hintTv = new TextView(this);
|
||||
hintTv.setText("操作说明");
|
||||
hintTv.setTextColor(Color.WHITE);
|
||||
hintTv.setGravity(Gravity.CENTER);
|
||||
hintTv.setPadding(DisplayUtils.dip2px(this, 13), 0, DisplayUtils.dip2px(this, 13), 0);
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
RelativeLayout reuse_actionbar = (RelativeLayout) mContentView.findViewById(
|
||||
R.id.reuse_actionbar);
|
||||
reuse_actionbar.addView(hintTv, params);
|
||||
|
||||
//修改沉浸栏以及ActionBar 颜色
|
||||
mActionbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.scan_bg));
|
||||
// SystemBarTintManager tintManager = getTintManager(); // TODO: 27/09/17 更改沉浸栏颜色
|
||||
// if (tintManager != null) {
|
||||
// tintManager.setStatusBarTintResource(R.color.scan_bg);
|
||||
// }
|
||||
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
mIsInitialized = false;
|
||||
isDestroy = false;
|
||||
isOpenWifi = WifiMgr.getInstance(this).isWifiEnable();
|
||||
|
||||
mUserName.setText(sp.getString("user_name", "光环用户"));
|
||||
mUserName.setText(mSharedPreferences.getString("user_name", "光环用户"));
|
||||
|
||||
if (isOpenWifi) {
|
||||
WifiMgr.getInstance(this).closeWifi();
|
||||
@ -166,7 +152,6 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
mRadarLayout.setCount(4);
|
||||
mRadarLayout.start();
|
||||
|
||||
|
||||
mFileInfos = new ArrayList<>();
|
||||
|
||||
HotspotManager.initApData(getApplicationContext()); // 记录原始热点信息
|
||||
@ -181,7 +166,7 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
public void onWifiApEnabled() {
|
||||
if (!mIsInitialized) {
|
||||
mUdpServerRunnable = createSendMsgToFileSenderRunnable();
|
||||
HaloApp.MAIN_EXECUTOR.execute(mUdpServerRunnable);
|
||||
HaloApp.getInstance().getMainExecutor().execute(mUdpServerRunnable);
|
||||
mIsInitialized = true;
|
||||
|
||||
mWaitingConn.setVisibility(View.VISIBLE);
|
||||
@ -199,7 +184,7 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
|
||||
HotspotManager.isApOn(getApplicationContext());
|
||||
|
||||
mySsid = sp.getString("hotspotName", null);
|
||||
mySsid = mSharedPreferences.getString("hotspotName", null);
|
||||
if (TextUtils.isEmpty(mySsid)) {
|
||||
String chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
int[] randomArray = RandomUtils.getRandomArray(2, 25);
|
||||
@ -209,47 +194,26 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
mySsid = mySsid + chars.charAt(i);
|
||||
}
|
||||
|
||||
int default_user_icon = sp.getInt("default_user_icon", 0);
|
||||
int default_user_icon = mSharedPreferences.getInt("default_user_icon", 0);
|
||||
if (default_user_icon == 0) {
|
||||
default_user_icon = RandomUtils.nextInt(8) + 1;
|
||||
sp.edit().putInt("default_user_icon", default_user_icon).apply();
|
||||
mSharedPreferences.edit().putInt("default_user_icon", default_user_icon).apply();
|
||||
}
|
||||
|
||||
mySsid = mySsid + default_user_icon;
|
||||
sp.edit().putString("hotspotName", mySsid).apply();
|
||||
mSharedPreferences.edit().putString("hotspotName", mySsid).apply();
|
||||
}
|
||||
mUserIcon.setImageURI(UserIconUtils.getUserIcon(sp.getInt("default_user_icon", 1)));
|
||||
mUserIcon.setImageURI(UserIconUtils.getUserIcon(mSharedPreferences.getInt("default_user_icon", 1)));
|
||||
|
||||
HotspotManager.configApState(getApplicationContext(), mySsid); // change Ap state :boolean
|
||||
|
||||
findViewById(R.id.actionbar_rl_back).setOnClickListener(
|
||||
new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
colsePage();
|
||||
//关闭热点
|
||||
HotspotManager.initUserAp(getApplicationContext());
|
||||
|
||||
if (isOpenWifi) {
|
||||
WifiMgr.getInstance(ReceiverWaitingActivity.this).openWifi();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mHandler.sendEmptyMessageDelayed(1, 300000);
|
||||
|
||||
hintTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
showConnHintDialog();
|
||||
}
|
||||
});
|
||||
|
||||
boolean showConnHintReceiver = sp.getBoolean("showConnHintReceiver", true);
|
||||
boolean showConnHintReceiver = mSharedPreferences.getBoolean("showConnHintReceiver", true);
|
||||
|
||||
if (showConnHintReceiver) {
|
||||
showConnHintDialog();
|
||||
sp.edit().putBoolean("showConnHintReceiver", false).apply();
|
||||
mSharedPreferences.edit().putBoolean("showConnHintReceiver", false).apply();
|
||||
}
|
||||
}
|
||||
|
||||
@ -273,7 +237,7 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
/**
|
||||
* 关闭广播并关闭Socket流
|
||||
*/
|
||||
private void colsePage() {
|
||||
private void closePage() {
|
||||
mRadarLayout.stop();
|
||||
|
||||
mHandler.removeMessages(1); // 取消无人连接消息
|
||||
@ -331,12 +295,12 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
if (msg != null && msg.contains(Constant.MSG_FILE_RECEIVER_INIT)) {
|
||||
Utils.log("接收方初始化完毕准备进去传输页面 并回馈消息给发送者" + inetAddress);
|
||||
|
||||
// HaloApp.put("FileInfo", mFileInfos); //保存数据列表 启用改为Intent传输
|
||||
// HaloApp.put(KcSelectGameActivity.KEY_FILE_INFO, mFileInfos); //保存数据列表 启用改为Intent传输
|
||||
|
||||
// 反馈 文件发送方的消息
|
||||
// sendData = Constant.MSG_FILE_RECEIVER_INIT_SUCCESS.getBytes(BaseTransfer.UTF_8);
|
||||
JSONObject receiverData = new JSONObject();
|
||||
receiverData.put(Constant.MSG_FILE_RECEIVER_INIT_SUCCESS, sp.getString("user_name", "光环用户"));
|
||||
receiverData.put(Constant.MSG_FILE_RECEIVER_INIT_SUCCESS, mSharedPreferences.getString("user_name", "光环用户"));
|
||||
sendData = receiverData.toString().getBytes(BaseTransfer.UTF_8);
|
||||
|
||||
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, inetAddress, port);
|
||||
@ -346,7 +310,7 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
message.what = 0;
|
||||
JSONObject jsonObject = new JSONObject(msg);
|
||||
message.obj = new IpPortInfo(inetAddress, port, jsonObject.getString(Constant.MSG_FILE_RECEIVER_INIT),
|
||||
sp.getString("user_name", "光环用户"), jsonObject.getInt("UserIcon"));
|
||||
mSharedPreferences.getString("user_name", "光环用户"), jsonObject.getInt("UserIcon"));
|
||||
mHandler.sendMessage(message);
|
||||
|
||||
} else {
|
||||
@ -421,7 +385,7 @@ public class ReceiverWaitingActivity extends BaseActivity {
|
||||
intent.putExtras(bundle);
|
||||
activity.startActivity(intent);
|
||||
|
||||
activity.colsePage();
|
||||
activity.closePage();
|
||||
} else if (msg.what == 1) {
|
||||
activity.mNoConnHint.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@ -3,7 +3,6 @@ package com.gh.gamecenter;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
@ -14,7 +13,6 @@ import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
@ -28,6 +26,7 @@ import com.gh.gamecenter.eventbus.EBSearch;
|
||||
import com.gh.gamecenter.search.SearchGameDetailFragment;
|
||||
import com.gh.gamecenter.search.SearchGameListFragment;
|
||||
import com.gh.gamecenter.search.SearchHistoryFragment;
|
||||
import com.lightgame.utils.Util_System_Keyboard;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
@ -53,17 +52,15 @@ public class SearchActivity extends BaseActivity {
|
||||
|
||||
private boolean isSearchDetail;
|
||||
|
||||
private Handler handler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
if (msg.what == 1) {
|
||||
search("auto", searchKey);
|
||||
}
|
||||
@Override
|
||||
protected void handleMessage(Message msg) {
|
||||
if (msg.what == 1) {
|
||||
search("auto", searchKey);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context,boolean clicked, String hint, String entrance) {
|
||||
public static Intent getIntent(Context context, boolean clicked, String hint, String entrance) {
|
||||
Intent intent = new Intent(context, SearchActivity.class);
|
||||
intent.putExtra(KEY_CLICKED, clicked);
|
||||
intent.putExtra(EntranceUtils.KEY_HINT, hint);
|
||||
@ -118,12 +115,6 @@ public class SearchActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
handler.removeCallbacksAndMessages(null);
|
||||
}
|
||||
|
||||
public void setActionBarLayout() {
|
||||
|
||||
searchInput = (EditText) findViewById(R.id.etSearch);
|
||||
@ -131,8 +122,7 @@ public class SearchActivity extends BaseActivity {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
||||
Util_System_Keyboard.hideSoftKeyboard(SearchActivity.this);
|
||||
search("initiative", null);
|
||||
}
|
||||
return false;
|
||||
@ -144,8 +134,7 @@ public class SearchActivity extends BaseActivity {
|
||||
searchButton.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
||||
Util_System_Keyboard.hideSoftKeyboard(SearchActivity.this);
|
||||
search("initiative", null);
|
||||
}
|
||||
});
|
||||
@ -177,12 +166,12 @@ public class SearchActivity extends BaseActivity {
|
||||
public void afterTextChanged(Editable s) {
|
||||
String newSearchKey = s.toString().trim();
|
||||
if (!newSearchKey.equals(searchKey)) {
|
||||
handler.removeMessages(1);
|
||||
mBaseHandler.removeMessages(1);
|
||||
searchKey = newSearchKey;
|
||||
if (searchKey.length() < 1) {
|
||||
setResultPresentModel(0);
|
||||
} else if (!isSearchDetail) {
|
||||
handler.sendEmptyMessageDelayed(1, 300);
|
||||
mBaseHandler.sendEmptyMessageDelayed(1, 300);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,189 +2,22 @@ package com.gh.gamecenter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.MediaStore;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.LoginUtils;
|
||||
import com.gh.common.util.RandomUtils;
|
||||
import com.gh.common.util.UserIconUtils;
|
||||
import com.lightgame.utils.Utils;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
|
||||
import static com.gh.gamecenter.UserInfoActivity.USERINFO_CHANGE_REQUEST;
|
||||
import com.halo.assistant.fragment.user.SelectPortraitFragment;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/2/10.
|
||||
*/
|
||||
public class SelectUserIconActivity extends BaseActivity implements LoginUtils.onChangeUserInfoListener {
|
||||
|
||||
@BindView(R.id.skip_media_store)
|
||||
TextView mSkipMediaStore;
|
||||
|
||||
public final static int CROP_ICON_REQUEST = 12;
|
||||
public final static int MEDIA_ICON_REQUEST = 13;
|
||||
|
||||
private SharedPreferences sp;
|
||||
@Deprecated
|
||||
public class SelectUserIconActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context) {
|
||||
Intent intent = new Intent(context, SelectUserIconActivity.class);
|
||||
return intent;
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setActivity(SelectUserIconActivity.class)
|
||||
// .setFragment(SelectPortraitFragment.class).build();
|
||||
return getIntent(context, SelectPortraitFragment.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_select_user_icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (data != null && requestCode == MEDIA_ICON_REQUEST) {
|
||||
Uri selectedImage = data.getData();
|
||||
if (selectedImage == null) {
|
||||
return;
|
||||
}
|
||||
String[] filePathColumn = {MediaStore.Images.Media.DATA};
|
||||
|
||||
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
|
||||
if (cursor == null) {
|
||||
return;
|
||||
}
|
||||
cursor.moveToFirst();
|
||||
|
||||
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
|
||||
String picturePath = cursor.getString(columnIndex);
|
||||
cursor.close();
|
||||
|
||||
Utils.log("picturePath = " + picturePath);
|
||||
// 上传头像
|
||||
Intent intent = CropImageActivity.getIntent(this, picturePath, "我的光环(选择头像)");
|
||||
startActivityForResult(intent, CROP_ICON_REQUEST);
|
||||
} else if (data != null && requestCode == CROP_ICON_REQUEST) {
|
||||
String url = data.getExtras().getString(EntranceUtils.KEY_URL);
|
||||
// Intent intent = new Intent();
|
||||
// intent.putExtra("url", url);
|
||||
// setResult(0x125, intent);
|
||||
// finish();
|
||||
LoginUtils.changeUserInfo(this, this, url, "icon");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_select_user_icon));
|
||||
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
}
|
||||
|
||||
@OnClick({R.id.user_default_icon_1, R.id.user_default_icon_2, R.id.user_default_icon_3, R.id.user_default_icon_4,
|
||||
R.id.user_default_icon_5, R.id.user_default_icon_6, R.id.user_default_icon_7, R.id.user_default_icon_8, R.id.skip_media_store})
|
||||
public void onClick(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.user_default_icon_1:
|
||||
postUserIocn(1);
|
||||
break;
|
||||
case R.id.user_default_icon_2:
|
||||
postUserIocn(2);
|
||||
break;
|
||||
case R.id.user_default_icon_3:
|
||||
postUserIocn(3);
|
||||
break;
|
||||
case R.id.user_default_icon_4:
|
||||
postUserIocn(4);
|
||||
break;
|
||||
case R.id.user_default_icon_5:
|
||||
postUserIocn(5);
|
||||
break;
|
||||
case R.id.user_default_icon_6:
|
||||
postUserIocn(6);
|
||||
break;
|
||||
case R.id.user_default_icon_7:
|
||||
postUserIocn(7);
|
||||
break;
|
||||
case R.id.user_default_icon_8:
|
||||
postUserIocn(8);
|
||||
break;
|
||||
case R.id.skip_media_store:
|
||||
|
||||
String iconCount = sp.getString("updateIconCount", null);
|
||||
if (!TextUtils.isEmpty(iconCount)) {
|
||||
long l = System.currentTimeMillis();
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.CHINA);
|
||||
String time = format.format(new Date(l));
|
||||
|
||||
JSONObject json;
|
||||
try {
|
||||
json = new JSONObject(iconCount);
|
||||
String lastTime = json.getString("time");
|
||||
if (lastTime.equals(time) && json.getInt("count") == 2) {
|
||||
Utils.toast(SelectUserIconActivity.this, "每天最多只能上传2次头像");
|
||||
return;
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
|
||||
startActivityForResult(intent, MEDIA_ICON_REQUEST);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void postUserIocn(int i) {
|
||||
postDefaultIcon(i);
|
||||
}
|
||||
|
||||
public void postDefaultIcon(final int i) {
|
||||
String iconUrl = UserIconUtils.getUserIconUrl(i);
|
||||
|
||||
//初始化热点名称
|
||||
String chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
int[] randomArray = RandomUtils.getRandomArray(2, 25);
|
||||
|
||||
String mySsid = "ghZS-";
|
||||
for (int j : randomArray) {
|
||||
mySsid = mySsid + chars.charAt(j);
|
||||
}
|
||||
mySsid = mySsid + i;
|
||||
sp.edit().putString("hotspotName", mySsid).apply();
|
||||
|
||||
sp.edit().putInt("default_user_icon", i).apply();
|
||||
|
||||
sp.edit().putBoolean("changeDefaultIcon", true).apply();
|
||||
|
||||
// Intent intent = new Intent();
|
||||
// intent.putExtra("url", iconUrl);
|
||||
// setResult(0x125, intent);
|
||||
// finish();
|
||||
LoginUtils.changeUserInfo(this, this, iconUrl, "icon");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange() {
|
||||
setResult(USERINFO_CHANGE_REQUEST);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,53 +1,12 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.LoginUtils;
|
||||
import com.gh.common.util.StringUtils;
|
||||
import com.gh.gamecenter.entity.LoginResponseEntity;
|
||||
import com.gh.gamecenter.eventbus.EBReuse;
|
||||
import com.gh.gamecenter.eventbus.EBSkip;
|
||||
import com.kyleduo.switchbutton.SwitchButton;
|
||||
import com.lightgame.download.FileUtils;
|
||||
import com.lightgame.utils.Utils;
|
||||
import com.tencent.bugly.beta.Beta;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import rx.Observable;
|
||||
import rx.Observable.OnSubscribe;
|
||||
import rx.Observer;
|
||||
import rx.Subscriber;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
import static com.gh.gamecenter.R.id.setting_rl_about;
|
||||
import static java.lang.Thread.sleep;
|
||||
import com.halo.assistant.fragment.SettingsFragment;
|
||||
|
||||
/**
|
||||
* 游戏设置页面
|
||||
@ -55,374 +14,21 @@ import static java.lang.Thread.sleep;
|
||||
* @ 吕方
|
||||
* @since 0814
|
||||
*/
|
||||
public class SettingActivity extends BaseActivity implements OnClickListener {
|
||||
|
||||
@BindView(R.id.setting_sb_autoinstall)
|
||||
SwitchButton mSettingAutoinstallSb;
|
||||
@BindView(R.id.setting_sb_autodelete)
|
||||
SwitchButton mSettingAutodeleteSb;
|
||||
@BindView(R.id.setting_sb_concerngame)
|
||||
SwitchButton mSettingConcerngameSb;
|
||||
@BindView(R.id.setting_tv_cache)
|
||||
TextView mSettingCacheTv;
|
||||
@BindView(R.id.setting_tv_size)
|
||||
TextView mSettingSizeTv;
|
||||
@BindView(R.id.setting_logout_tv)
|
||||
TextView mSettingLoginType;
|
||||
@BindView(R.id.setting_logout_rl)
|
||||
RelativeLayout mSettingLoginRl;
|
||||
|
||||
private SharedPreferences sp;
|
||||
|
||||
private Dialog loadingDialog = null;
|
||||
|
||||
private int checkSizeIndex;
|
||||
@Deprecated
|
||||
public class SettingActivity extends NormalActivity {
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String entrance) {
|
||||
Intent intent = new Intent(context, SettingActivity.class);
|
||||
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
saveCurrentSetting();
|
||||
super.finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_setting;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
initTitle(getString(R.string.title_settings));
|
||||
|
||||
mSettingCacheTv.setText(getCacheSize());
|
||||
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
// 未打开下载按钮,显示修复下载按钮
|
||||
if (!sp.getBoolean("isShow", true)) {
|
||||
findViewById(R.id.setting_cv_fix_download).setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
mSettingAutoinstallSb.setChecked(sp.getBoolean("autoinstall", true));
|
||||
mSettingAutodeleteSb.setChecked(sp.getBoolean("autodelete", true));
|
||||
mSettingConcerngameSb.setChecked(sp.getBoolean("concerngame", true));
|
||||
|
||||
checkSizeIndex = sp.getInt("fontsize", 1);
|
||||
if (checkSizeIndex == 0) {
|
||||
checkSizeIndex = 1;
|
||||
}
|
||||
fontTextSize(checkSizeIndex);
|
||||
|
||||
initLoginStatus();
|
||||
}
|
||||
|
||||
private void initLoginStatus() {
|
||||
LoginResponseEntity loginToken = LoginUtils.getLoginToken(this);
|
||||
if (loginToken != null) {
|
||||
if (!TextUtils.isEmpty(loginToken.getLoginType())) {
|
||||
String loginType = loginToken.getLoginType().trim();
|
||||
switch (loginType) {
|
||||
case "qq":
|
||||
loginType = "QQ";
|
||||
break;
|
||||
case "wechat":
|
||||
loginType = "微信";
|
||||
break;
|
||||
case "weibo":
|
||||
loginType = "新浪微博";
|
||||
break;
|
||||
default:
|
||||
if (loginType.length() == 11) {
|
||||
String sub1 = loginType.substring(0, 3);
|
||||
String sub2 = loginType.substring(9, 11);
|
||||
loginType = StringUtils.buildString(sub1, "******", sub2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
mSettingLoginType.setText(loginType);
|
||||
}
|
||||
mSettingLoginRl.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mSettingLoginRl.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
saveCurrentSetting();
|
||||
}
|
||||
|
||||
private void saveCurrentSetting() {
|
||||
Editor mEditor = sp.edit();
|
||||
mEditor.putBoolean("autoinstall", mSettingAutoinstallSb.isChecked());
|
||||
mEditor.putBoolean("autodelete", mSettingAutodeleteSb.isChecked());
|
||||
mEditor.putBoolean("concerngame", mSettingConcerngameSb.isChecked());
|
||||
mEditor.putInt("fontsize", checkSizeIndex);
|
||||
mEditor.apply();
|
||||
}
|
||||
|
||||
// 获取缓存大小
|
||||
private String getCacheSize() {
|
||||
File ecDir = getExternalCacheDir();
|
||||
long cacheLength = getFolderSize(getCacheDir());
|
||||
if (ecDir != null) {
|
||||
cacheLength += getFolderSize(ecDir);
|
||||
}
|
||||
return long2Size(cacheLength);
|
||||
}
|
||||
|
||||
private long getFolderSize(File folder) {
|
||||
long size = 0;
|
||||
size += folder.length();
|
||||
if (folder.isDirectory()) {
|
||||
for (File file : folder.listFiles()) {
|
||||
if (file.isDirectory()) {
|
||||
size += getFolderSize(file);
|
||||
} else {
|
||||
size += file.length();
|
||||
}
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
private String long2Size(Long length) {
|
||||
float m = length / 1024f / 1024f;
|
||||
String str = Float.toString(m);
|
||||
int index = str.lastIndexOf(".");
|
||||
if (index != -1 && str.length() > index + 3) {
|
||||
str = str.substring(0, index + 3);
|
||||
}
|
||||
return str + "M";
|
||||
}
|
||||
|
||||
@OnClick({
|
||||
R.id.setting_cv_fix_download,
|
||||
R.id.setting_rl_autoinstall,
|
||||
R.id.setting_rl_autodelete,
|
||||
R.id.setting_rl_cache,
|
||||
R.id.setting_cv_font_size,
|
||||
R.id.setting_rl_concerngame,
|
||||
R.id.setting_rl_about,
|
||||
R.id.setting_logout_rl
|
||||
})
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
|
||||
switch (v.getId()) {
|
||||
case R.id.setting_cv_fix_download:
|
||||
Editor editor = sp.edit();
|
||||
editor.putBoolean("isShow", true);
|
||||
editor.putBoolean("isCheckShow", false);
|
||||
editor.apply();
|
||||
toast("修复成功");
|
||||
EventBus.getDefault().post(new EBReuse("Refresh"));
|
||||
finish();
|
||||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
sleep(800);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, 0));
|
||||
}
|
||||
}.start();
|
||||
break;
|
||||
case R.id.setting_rl_autoinstall:
|
||||
mSettingAutoinstallSb.performClick();
|
||||
break;
|
||||
case R.id.setting_rl_autodelete:
|
||||
mSettingAutodeleteSb.performClick();
|
||||
break;
|
||||
case R.id.setting_rl_cache:
|
||||
DialogUtils.showWarningDialog(this, "清除缓存", "清空缓存后未安装的游戏可能需要重新下载,确定清空?",
|
||||
new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
loadingDialog = DialogUtils.showWaitDialog(SettingActivity.this, "清除缓存中...");
|
||||
clearCache();
|
||||
}
|
||||
});
|
||||
break;
|
||||
case R.id.setting_cv_font_size:
|
||||
fontSize();
|
||||
break;
|
||||
case setting_rl_about:
|
||||
if (BuildConfig.DEBUG) {
|
||||
Beta.checkUpgrade(); // 手动检查热补丁
|
||||
}
|
||||
startActivity(AboutActivity.getIntent(this));
|
||||
break;
|
||||
case R.id.setting_rl_concerngame:
|
||||
mSettingConcerngameSb.performClick();
|
||||
break;
|
||||
case R.id.setting_logout_rl:
|
||||
DialogUtils.showForceDialog(this, "注销登录", "退出账号即会回到游客状态,很多功能将无法使用(例如评论、客服消息),确定退出吗?",
|
||||
"确定退出", "取消", new DialogUtils.ConfirmListener() {
|
||||
@Override
|
||||
public void onConfirm() {
|
||||
loadingDialog = DialogUtils.showWaitDialog(SettingActivity.this, "退出登录中...");
|
||||
LoginUtils.logout(SettingActivity.this, new LoginUtils.OnLogoutListener() {
|
||||
@Override
|
||||
public void onCompleted() {
|
||||
LoginUtils.cleanUserData(SettingActivity.this);
|
||||
if (loadingDialog != null) loadingDialog.dismiss();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, null);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void fontTextSize(int i) {
|
||||
switch (i) {
|
||||
case 1:
|
||||
mSettingSizeTv.setText("小字号");
|
||||
break;
|
||||
case 2:
|
||||
mSettingSizeTv.setText("中字号");
|
||||
break;
|
||||
case 3:
|
||||
mSettingSizeTv.setText("大字号");
|
||||
break;
|
||||
case 4:
|
||||
mSettingSizeTv.setText("特大字号");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//设置正文字号
|
||||
private void fontSize() {
|
||||
View inflate = View.inflate(this, R.layout.dialog_font_size, null);
|
||||
final RadioGroup radioGroup = (RadioGroup) inflate.findViewById(R.id.font_size_radiogroup);
|
||||
((RadioButton) (radioGroup.getChildAt(checkSizeIndex - 1))).setChecked(true);
|
||||
AlertDialog alertDialog = new AlertDialog.Builder(this, R.style.GhAlertDialog)
|
||||
.setTitle(getString(R.string.font_primary))
|
||||
.setPositiveButton("取消", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
|
||||
}
|
||||
})
|
||||
.setNegativeButton("确认", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
checkSizeIndex = radioGroup.getCheckedRadioButtonId() % 4;
|
||||
|
||||
if (checkSizeIndex == 0) {
|
||||
checkSizeIndex = 4;
|
||||
}
|
||||
dialog.cancel();
|
||||
saveCurrentSetting();
|
||||
fontTextSize(checkSizeIndex);
|
||||
}
|
||||
})
|
||||
.setView(inflate)
|
||||
.create();
|
||||
alertDialog.show();
|
||||
|
||||
TextView mesage = (TextView) alertDialog.findViewById(android.R.id.message);
|
||||
Button positiveBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE);
|
||||
Button negativeBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_NEGATIVE);
|
||||
|
||||
positiveBtn.setTextSize(14);
|
||||
positiveBtn.setTextColor(ContextCompat.getColor(this, R.color.theme));
|
||||
negativeBtn.setTextSize(14);
|
||||
negativeBtn.setTextColor(ContextCompat.getColor(this, R.color.theme));
|
||||
if (mesage != null) {
|
||||
mesage.setTextSize(14);
|
||||
mesage.setTextColor(ContextCompat.getColor(this, R.color.system_bar));
|
||||
}
|
||||
|
||||
|
||||
// final Dialog dialog = new Dialog(this);
|
||||
// View inflate = View.inflate(this, R.layout.dialog_font_size, null);
|
||||
// TextView tv_negative = (TextView) inflate.findViewById(R.id.font_size_negative);
|
||||
// TextView tv_positive = (TextView) inflate.findViewById(R.id.font_size_positive);
|
||||
// final RadioGroup radioGroup = (RadioGroup) inflate.findViewById(R.id.font_size_radiogroup);
|
||||
// ((RadioButton) (radioGroup.getChildAt(checkSizeIndex - 1))).setChecked(true);
|
||||
//
|
||||
// tv_negative.setOnClickListener(new OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(View v) {
|
||||
// dialog.cancel();
|
||||
// }
|
||||
// });
|
||||
// tv_positive.setOnClickListener(new OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(View v) {
|
||||
// checkSizeIndex = radioGroup.getCheckedRadioButtonId() % 4;
|
||||
//
|
||||
// if (checkSizeIndex == 0) {
|
||||
// checkSizeIndex = 4;
|
||||
// }
|
||||
// dialog.cancel();
|
||||
// saveCurrentSetting();
|
||||
// fontTextSize(checkSizeIndex);
|
||||
// }
|
||||
// });
|
||||
// dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
// dialog.setContentView(inflate);
|
||||
// dialog.show();
|
||||
}
|
||||
|
||||
// 清除缓存
|
||||
private void clearCache() {
|
||||
|
||||
Observable.create(new OnSubscribe<Object>() {
|
||||
@Override
|
||||
public void call(Subscriber<? super Object> subscriber) {
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
FileUtils.deleteFolder(getCacheDir());
|
||||
FileUtils.deleteFolder(getExternalCacheDir());
|
||||
long time = System.currentTimeMillis() - start;
|
||||
if (time < 1000) {
|
||||
try {
|
||||
sleep(1000 - time);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
subscriber.onCompleted();
|
||||
}
|
||||
|
||||
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Object>() {
|
||||
@Override
|
||||
public void onCompleted() {
|
||||
if (loadingDialog != null) {
|
||||
loadingDialog.dismiss();
|
||||
}
|
||||
mSettingCacheTv.setText(getCacheSize());
|
||||
Utils.toast(SettingActivity.this, "缓存清除成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(Object o) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// Intent intent = new Intent(context, SettingActivity.class);
|
||||
// intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
// return intent;
|
||||
// return new IntentFactory.Builder(context)
|
||||
// .setEntrance(entrance)
|
||||
// .setActivity(SettingActivity.class)
|
||||
// .setFragment(SettingsFragment.class).build();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
return getIntent(context, SettingsFragment.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user