Commit 02e4c501 by chengfeng-piaopiao

决战抓娃娃替换即构SDK

parents
Showing with 4858 additions and 0 deletions
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>
\ No newline at end of file
<component name="CopyrightManager">
<settings default="" />
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="LOCAL" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="D:\Android\AndroidStudio3.0.1\gradle\gradle-4.1" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/JueZhanZhuaWaWa.iml" filepath="$PROJECT_DIR$/JueZhanZhuaWaWa.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
# 喵呜抓娃娃Android技术文档
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
## 1,开发环境
AndroidStudio 3.0.1
jdk 1.8
compileSdkVersion 26
Gradle 4.1
GradlePluginVersion 3.0.1
## 2,技术选型
MVP框架
网络框架:Retrofit2.0 + OKHttp3.6
数据库:Releam
依赖注入框架:Dragger2
事件通知和订阅:RxBus / EventBus
WebView:腾讯TBS框架
统计:友盟统计
内存泄露:LeakCanary
图片加载框架:Glide 3.7    
编码:Rxjava2  
微信登录
阿凡达
## 3,打包处理
基础包: 当前app所在目录命令行输入:gradlew assembleRelease
多渠道包: 当前app所在目录命令行输入:gradlew assembleRelease jiagubao_walle(具体参考项目build.gradle以及jiagubao-walle.bat中的操作)
## 4,接口列表
```
String HOST = "http://api.586w.cn/";
String PAY = HOST + "pay/recharge";
String SHOPURL = HOST + "site/shop";
//手机注册获取验证码 | 找回密码获取验证码
@GET("user/send-verify-code")
Flowable<WrapperRspEntity> sendVerifyCode(@Query("phone") String phone, @Query("type") String type);
//手机用户注册
@GET("user/sign-up")
Flowable<WrapperRspEntity<LoginBean>> phoneRegister(@Query("phone") String phone , @Query("pwd") String pwd , @Query("verifyCode") String verifyCode , @Query("channel") String channel);
//手机用户登录
@GET("user/sign-in")
Flowable<WrapperRspEntity<LoginBean>> phoneLogin(@Query("phone") String phone, @Query("pwd") String pwd);
//用户找回密码
@GET("user/forget")
Flowable<WrapperRspEntity> forgetPwd(@Query("phone") String phone , @Query("pwd") String pwd , @Query("verifyCode") String verifyCode );
/**
* 自动登录
* @return
*/
@GET("wx/auto-login")
Flowable<WrapperRspEntity<LoginBean>> autoLogin(@Query("ssid") String ssid);
/**
*
* 微信登录
* @param code 微信组件code
* @param source 平台Android
* @param channel 渠道名
* @return
*/
@GET("wx/login")
Flowable<WrapperRspEntity<LoginBean>> wxLogin(@Query("code") String code ,@Query("source") String source ,@Query("channel") String channel);
/**
* 登录奖励
* @param ssid
* @return
*/
@GET("wx/login-prize")
Flowable<WrapperRspEntity<LoginPrizeBean>> loginPrize(@Query("ssid") String ssid);
/**
* Banner轮播图
*/
@GET("site/banner-list")
Flowable<WrapperRspEntity<ArrayList<BannerBean>>> fetchBanners(@Query("ssid") String ssid);
/**
* 获取广播信息
* @return
*/
@GET("game/last-win-record")
Flowable<WrapperRspEntity<RecordWrapBean>> fetchBroadCasts(@Query("ssid") String ssid);
/**
* 房间奖品详情
* @param roomId 房间id
* @return
*/
@GET("/game/prize-details")
Flowable<WrapperRspEntity<WawaBean>> fetchWawaPrizeDeatil(@Query("roomId") int roomId , @Query("ssid") String ssid);
/**
* 用户信息
* @param ssid
* @return
*/
@GET("/wx/profile")
Flowable<WrapperRspEntity<UserWrapBean>> fetchUserProfile(@Query("ssid") String ssid);
/**
* 充值列表
* @param ssid
* @param platform 平台Android
* @return
*/
@GET("/site/recharge-list")
Flowable<WrapperRspEntity<PayWrapBean>> fetchRechareList(@Query("ssid") String ssid , @Query("platform") String platform);
/**
* 获取
* @param ssid
* @param orderId
* @param status
* @return
*/
@GET("/game/result")
Flowable<WrapperRspEntity<PrizeWrapBean>> fetchGameResult(@Query("ssid") String ssid , @Query("orderId") String orderId , @Query("status") int status);
/**
* 获取个人奖品列表
* @param ssid
* @return
*/
@GET("/game/prize-list")
Flowable<WrapperRspEntity<PrizeWrapBean>> fetchPrizeLists(@Query("ssid") String ssid);
/**
* app初始化
* @param version 当前版本号
* @param platform 平台Android
* @param channel 渠道
* @return
*/
@GET("/app/init")
Flowable<WrapperRspEntity<AppWrapBean>> fetchAppInitConfig(@Query("version") int version,@Query("platform") String platform , @Query("channel") String channel);
@GET("/game/list")
Flowable<WrapperRspEntity<RoomWrapBean>> fetchRooms(@Query("ssid") String ssid);
/**
* 退出登陆
* @param ssid
* @return
*/
@GET("/wx/logout")
Flowable<WrapperRspEntity> logout(@Query("ssid") String ssid);
```
## 5,结构展示
<img src="screenshots/主体.png" width = "40%" />
<img src="screenshots/package.png" width = "100%" />
<img src="screenshots/framework.png" width = "40%" /><img src="screenshots/工具及渠道包输入目录.png" width = "70%" />
#
#
#这个文件用于打包的时候,自定义一些数据
# networkType
# 0: 测试地址
# 1: //外部测试地址
# 2: //正式地址
networkType = 2
\ No newline at end of file
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\2_android\as_client\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-keepattributes EnclosingMetho
package com.zhuawawa.maile.vediozhuawawa;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumentation test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.zhuawawa.maile.vediozhuawawa", appContext.getPackageName());
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zhuawawa.maile.vediozhuawawa">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<application
android:name=".app.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--<meta-data-->
<!--android:name="UMENG_APPKEY"-->
<!--android:value="5a407d228f4a9d4ef300041d" />-->
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
<!--<service android:name="com.talkingdata.sdk.TDAntiCheatingService"-->
<!--android:process="com.talkingdata.sdk.TDAntiCheatingService"> &lt;!&ndash;用户质量评估Service可以配置在主进程或者单独进程&ndash;&gt;-->
<!--<intent-filter>-->
<!--<action android:name="com.talkingdata.sdk.TDAntiCheatingService" />-->
<!--</intent-filter>-->
<!--</service>-->
<meta-data android:name="TD_APP_ID" android:value="068064B13E894C89AFFD140A9443F4BC" />
<meta-data android:name="TD_CHANNEL_ID" android:value="${UMENG_CHANNEL_VALUE}" />
<!--欢迎页-->
<activity
android:launchMode="singleTop"
android:name="com.zhuawawa.maile.vediozhuawawa.ui.main.activity.WelcomeActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:fitsSystemWindows="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.main.activity.MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="invitation"
android:scheme="vediozhuawawa" />
</intent-filter>
</activity>
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ClawLiveActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.user.activity.RechareActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--支付-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.user.activity.PayWebViewActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--游戏记录-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ClawGameHistoryActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--游戏记录详情-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ClawGameDetailActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--申诉-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ComplaintActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--战利品-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.user.activity.UserSpoilsActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--设置-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.user.activity.SettingActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!--设置-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.user.activity.BannerWebViewActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.main.activity.CustomerActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
<!-- 微信 -->
<activity
android:name="com.zhuawawa.maile.vediozhuawawa.wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<!--即构-->
<activity android:name="com.zhuawawa.maile.vediozhuawawa.ui.zego.activity.ZegoLiveActivity"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:screenOrientation="portrait"/>
</application>
</manifest>
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.app;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.multidex.MultiDex;
import android.support.v7.app.AppCompatDelegate;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
import com.avatar.lib.sdk.IEventListener;
import com.avatar.lib.sdk.WawaClient;
import com.avatar.lib.sdk.user.UserInfoProvider;
import com.avatar.lib.sdk.util.LogUtil;
import com.meituan.android.walle.WalleChannelReader;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tendcloud.tenddata.TCAgent;
import com.umeng.analytics.MobclickAgent;
import com.zhuawawa.maile.vediozhuawawa.BuildConfig;
import com.zhuawawa.maile.vediozhuawawa.component.InitializeService;
import com.zhuawawa.maile.vediozhuawawa.di.component.AppComponent;
import com.zhuawawa.maile.vediozhuawawa.di.component.DaggerAppComponent;
import com.zhuawawa.maile.vediozhuawawa.di.module.AppModule;
import com.zhuawawa.maile.vediozhuawawa.di.module.HttpModule;
import com.zhuawawa.maile.vediozhuawawa.model.bean.afangDa.UserCache;
import com.zhuawawa.maile.vediozhuawawa.util.DrawUtil;
import java.util.HashSet;
import java.util.Set;
import io.realm.Realm;
/**
* Created by codeest on 2016/8/2.
*/
public class App extends Application{
public static App instance;
public static String channel;
public static AppComponent appComponent;
private static int versioncode;
private Set<Activity> allActivities;
public static int SCREEN_WIDTH = -1;
public static int SCREEN_HEIGHT = -1;
public static float DIMEN_RATE = -1.0F;
public static int DIMEN_DPI = -1;
public static IWXAPI sApi;
public static boolean showShop = true;
public static boolean showShare = true;
public static boolean inited = false;
public static synchronized App getInstance() {
return instance;
}
static {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_NO);
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
DrawUtil.resetDensity(this);
//初始化渠道信息 & 初始化友盟统计
initFlavorAndUmeng();
//初始化屏幕宽高
getScreenSize();
//初始化数据库
Realm.init(getApplicationContext());
//在子线程中完成其他初始化
InitializeService.start(this);
// 初始化sdk
ZegoApiManager.getInstance().initSDK();
//初始化阿凡达
//intAfanDa();
//初始化登录
initWxLogin();
}
public static String initFlavorAndUmeng() {
channel = WalleChannelReader.getChannel(instance);
if(TextUtils.isEmpty(channel)){
channel = "base";
}
TCAgent.init(instance);
TCAgent.setReportUncaughtExceptions(true);
Log.d("tangwen", "initFlavorAndUmeng: channel = " + channel);
//友盟统计
MobclickAgent.setScenarioType(instance, MobclickAgent.EScenarioType.E_UM_NORMAL);
MobclickAgent.startWithConfigure(new MobclickAgent.UMAnalyticsConfig(instance,"5a407d228f4a9d4ef300041d",channel));
return channel;
}
private void initWxLogin() {
/**
* 向微信终端注册你的id
*/
sApi = WXAPIFactory.createWXAPI(this, Constants.WEIXIN_APP_ID, true);
sApi.registerApp(Constants.WEIXIN_APP_ID);
}
private void intAfanDa() {
//设置SDK是否位debug模式,debug模式下打印相关日志
WawaClient.setDebug(BuildConfig.DEBUG);
//初始化SDK
WawaClient.init(this, Constants.appId, Constants.appKey, new IEventListener() {
@Override
public void onMessage(int code, String msg, Bundle bundle) {
LogUtil.i("WawaSDK", "onMessage:" + code + " msg:" + msg);
if (code == CODE_INIT_SUCCESS) {
// 初始化成功
} else if (code == CODE_LOGIN_SUCCESS) {
//初始化成功后尝试第一次登录成功,bundle包含登录成功的用户信息
if (bundle != null && bundle.containsKey("user_info")) {
UserCache.setUserInfo((UserInfoProvider.UserInfo) bundle.getSerializable("user_info"));
}
} else if (code == CODE_MEDIA_AUTH_ERR) {
//播放器验证失败,建议做重启的操作
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
}
});
}
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
public void addActivity(Activity act) {
if (allActivities == null) {
allActivities = new HashSet<>();
}
allActivities.add(act);
}
public void removeActivity(Activity act) {
if (allActivities != null) {
allActivities.remove(act);
}
}
public void exitApp() {
if (allActivities != null) {
synchronized (allActivities) {
for (Activity act : allActivities) {
act.finish();
}
}
}
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
public void getScreenSize() {
WindowManager windowManager = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
Display display = windowManager.getDefaultDisplay();
display.getMetrics(dm);
DIMEN_RATE = dm.density / 1.0F;
DIMEN_DPI = dm.densityDpi;
SCREEN_WIDTH = dm.widthPixels;
SCREEN_HEIGHT = dm.heightPixels;
if(SCREEN_WIDTH > SCREEN_HEIGHT) {
int t = SCREEN_HEIGHT;
SCREEN_HEIGHT = SCREEN_WIDTH;
SCREEN_WIDTH = t;
}
}
public static AppComponent getAppComponent(){
if (appComponent == null) {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(instance))
.httpModule(new HttpModule())
.build();
}
return appComponent;
}
public static Context getContext(){
return getContext();
}
/**
* 返回当前程序版本名
*/
public static int getAppVersionCode() {
String versionName = "";
try {
// ---get the package info---
PackageManager pm = instance.getPackageManager();
PackageInfo pi = pm.getPackageInfo(instance.getPackageName(), 0);
versionName = pi.versionName;
versioncode = pi.versionCode;
} catch (Exception e) {
}
return versioncode;
}
public static String getAppVersionName() {
String versionName = "";
try {
// ---get the package info---
PackageManager pm = instance.getPackageManager();
PackageInfo pi = pm.getPackageInfo(instance.getPackageName(), 0);
versionName = pi.versionName;
versioncode = pi.versionCode;
} catch (Exception e) {
}
return versionName;
}
}
package com.zhuawawa.maile.vediozhuawawa.app;
import android.os.Environment;
import java.io.File;
/**
* Created by codeest on 2016/8/3.
*/
public class Constants {
//================= TYPE ====================
//================= KEY ====================
public static final String BUGLY_ID = "257700f3f8";
//================= PATH ====================
public static final String PATH_DATA = App.getInstance().getCacheDir().getAbsolutePath() + File.separator + "data";
public static final String PATH_CACHE = PATH_DATA + "/NetCache";
public static final String PATH_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "codeest" + File.separator + "GeekNews";
//================= PREFERENCE ====================
public static final String SP_SSID_POINT = "ssid";
public static final String SP_MANAGER_POINT = "manager_point";
public static final String SP_COOKIES = "sp_cookies";
//第三方登录
//微信登录
public static final String WEIXIN_APP_ID = "wxfd8ec3c1f7a76a4c";
public static final String WEIXIN_APP_SECRET = "980b30f2655cde627dcbc5fe2379b4ec";
public static final String WEIXIN_AUTH_LOGIN_INFO_SCOPE = "snsapi_userinfo";
public static final String WEIXIN_AUTH_LOGIN_INFO_STATE = "wtf";
public static final String SHOP_HOME = "https://api.7peng.cn/shop";
public static final String SHARE = "http://h5.586w.cn/share.html";
//阿凡达
public static final String appId = "2017121312023935";
public static final String appKey = "660a098aa83f201c48c7025e9acea652";
//Intent
public static final String KEY_ROOM_INFO="key_room_info";
public static final String USER_GOLD = "user_gold";
public static final String USER_INFO = "user_info";
public static final String PAY_RECHARGE_CASH = "pay_recharge_cash";
//banner图
public static final String BANNER_URL = "banner_url";
//历史记录详情
public static final String ITEM_INFO = "team_info";
//Room
public static final int ROOM_STATE_IDEA = 2;
public static final String PRIZE_DETAIL = "PRIZE_DETAIL";
//RoomHistory
public static final String KEY_UID = "key_id";
public static final String RID = "rid";
//Detail
public static final String SHOW_TOP_DOLL_DETAIL = "show_top_doll_detail";
public static final String SHOW_SHARE_MENU = "show_share_menu";
public static final String SHOW_FADE_EDGR = "show_fade_edge";
//net
public static String BASEURL = "http://api.586w.cn";
}
package com.zhuawawa.maile.vediozhuawawa.app;
import android.text.TextUtils;
import android.widget.Toast;
import com.zego.zegoliveroom.ZegoLiveRoom;
import com.zego.zegoliveroom.constants.ZegoAvConfig;
import com.zhuawawa.maile.vediozhuawawa.model.prefs.PreferenceUtil;
/**
* des: zego api管理器.
*/
public class ZegoApiManager {
private static ZegoApiManager sInstance = null;
private ZegoLiveRoom mZegoLiveRoom = null;
private ZegoAvConfig mZegoAvConfig = null;
private long mAppID = 0;
private byte[] mSignKey = null;
private static String mUserID = null;
private ZegoApiManager() {
mZegoLiveRoom = new ZegoLiveRoom();
}
public static ZegoApiManager getInstance() {
if (sInstance == null) {
synchronized (ZegoApiManager.class) {
if (sInstance == null) {
sInstance = new ZegoApiManager();
}
}
}
return sInstance;
}
public void initUserInfo(String mUserID, String userName){
if (TextUtils.isEmpty(mUserID) || TextUtils.isEmpty(userName)) {
mUserID = PreferenceUtil.getInstance().getUserID();
userName = PreferenceUtil.getInstance().getUserName();
if(TextUtils.isEmpty(mUserID) || TextUtils.isEmpty(userName)){
long ms = System.currentTimeMillis();
mUserID = "wawaji_android_" + ms + "_" + (int)(Math.random() * 100);
userName = mUserID;
}
}
// 保存用户信息
PreferenceUtil.getInstance().setUserID(mUserID);
PreferenceUtil.getInstance().setUserName(userName);
// 必须设置用户信息
ZegoLiveRoom.setUser(mUserID, userName);
this.mUserID = mUserID;
App.inited = true;
}
// private void init(long appID, byte[] signKey){
//
// mAppID = appID;
// mSignKey = signKey;
//
// // 初始化sdk
// boolean ret = mZegoLiveRoom.initSDK(appID, signKey, App.instance);
// if(!ret){
// // sdk初始化失败
// Toast.makeText(App.instance, "Zego SDK初始化失败!", Toast.LENGTH_LONG).show();
// } else {
// // 初始化设置级别为"High"
// mZegoAvConfig = new ZegoAvConfig(ZegoAvConfig.Level.High);
// mZegoLiveRoom.setAVConfig(mZegoAvConfig);
// }
// }
//
// /**
// * 初始化sdk.
// */
// public void initSDK(){
// long appID = 3914936772L;
// byte[] signKey = {
// (byte)0x7d,(byte)0x9a,(byte)0x03,(byte)0x2b,(byte)0x17,(byte)0xc1,(byte)0xf7,(byte)0xc8,(byte)0xed,(byte)0x40,(byte)0x9a,(byte)0x14,
// (byte)0xd7,(byte)0xdf,(byte)0x71,(byte)0x1b,(byte)0x5c,(byte)0xe8,(byte)0x02,(byte)0x67,(byte)0x60,(byte)0xfa,(byte)0xd0,(byte)0xe1,
// (byte)0x51,(byte)0x42,(byte)0xd6,(byte)0xe5,(byte)0x45,(byte)0x6a,(byte)0x59,(byte)0x9e
// };
//
// init(appID, signKey);
// }
//
// public void releaseSDK() {
// mZegoLiveRoom.unInitSDK();
// }
//
// public ZegoLiveRoom getZegoLiveRoom() {
// return mZegoLiveRoom;
// }
//
// public long getAppID(){
// return mAppID;
// }
public static void initUserInfo(){
// 初始化用户信息
mUserID = PreferenceUtil.getInstance().getUserID();
String userName = PreferenceUtil.getInstance().getUserName();
if (TextUtils.isEmpty(mUserID) || TextUtils.isEmpty(userName)) {
long ms = System.currentTimeMillis();
mUserID = "wawaji_android_" + ms + "_" + (int)(Math.random() * 100);
mUserID = "5R7JylyMbAEE";
userName = "手机用户_5807";
// 保存用户信息
PreferenceUtil.getInstance().setUserID(mUserID);
PreferenceUtil.getInstance().setUserName(userName);
}
// 必须设置用户信息
boolean b = ZegoLiveRoom.setUser(mUserID, userName);
}
private void init(long appID, byte[] signKey){
//initUserInfo();
mAppID = appID;
mSignKey = signKey;
// 初始化sdk
boolean ret = mZegoLiveRoom.initSDK(appID, signKey, App.instance);
if(!ret){
// sdk初始化失败
Toast.makeText(App.instance, "Zego SDK初始化失败!", Toast.LENGTH_LONG).show();
} else {
// 初始化设置级别为"High"
mZegoAvConfig = new ZegoAvConfig(ZegoAvConfig.Level.High);
mZegoLiveRoom.setAVConfig(mZegoAvConfig);
}
}
/**
* 初始化sdk.
*/
public void initSDK(){
long appID = 1328938424L;
byte[] signKey = {
(byte)0xfe,(byte)0xb3,(byte)0x25,(byte)0x97,(byte)0x5b,(byte)0x7c,(byte)0xfe,(byte)0xe0,(byte)0x66,(byte)0x9d,(byte)0x99,
(byte)0xaa,(byte)0x59,(byte)0x27,(byte)0xf5,(byte)0xa5,(byte)0x8f,(byte)0xfd,(byte)0x40,(byte)0x68,(byte)0x7d,(byte)0x5a,
(byte)0x17,(byte)0xaa,(byte)0x99,(byte)0x04,(byte)0x67,(byte)0x94,(byte)0x37,(byte)0xfa,0x0e,(byte)0xc1
};
init(appID, signKey);
}
public void releaseSDK() {
mZegoLiveRoom.unInitSDK();
}
public ZegoLiveRoom getZegoLiveRoom() {
return mZegoLiveRoom;
}
public long getAppID(){
return mAppID;
}
}
package com.zhuawawa.maile.vediozhuawawa.base;
import android.support.v7.app.AppCompatDelegate;
import android.view.ViewGroup;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.di.component.ActivityComponent;
import com.zhuawawa.maile.vediozhuawawa.di.component.DaggerActivityComponent;
import com.zhuawawa.maile.vediozhuawawa.di.module.ActivityModule;
import com.zhuawawa.maile.vediozhuawawa.util.SnackbarUtil;
import javax.inject.Inject;
/**
* Created by codeest on 2016/8/2.
* MVP activity基类
*/
public abstract class BaseActivity<T extends BasePresenter> extends SimpleActivity implements BaseView {
@Inject
protected T mPresenter;
protected ActivityComponent getActivityComponent(){
return DaggerActivityComponent.builder()
.appComponent(App.getAppComponent())
.activityModule(getActivityModule())
.build();
}
protected ActivityModule getActivityModule(){
return new ActivityModule(this);
}
@Override
protected void onViewCreated() {
super.onViewCreated();
initInject();
if (mPresenter != null)
mPresenter.attachView(this);
}
@Override
protected void onDestroy() {
if (mPresenter != null)
mPresenter.detachView();
super.onDestroy();
}
@Override
public void showErrorMsg(String msg) {
SnackbarUtil.show(((ViewGroup) findViewById(android.R.id.content)).getChildAt(0), msg);
}
@Override
public void useNightMode(boolean isNight) {
if (isNight) {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES);
} else {
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_NO);
}
recreate();
}
@Override
public void stateError() {
}
@Override
public void stateEmpty() {
}
@Override
public void stateLoading() {
}
@Override
public void stateMain() {
}
protected abstract void initInject();
}
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.base;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.di.component.DaggerFragmentComponent;
import com.zhuawawa.maile.vediozhuawawa.di.component.FragmentComponent;
import com.zhuawawa.maile.vediozhuawawa.di.module.FragmentModule;
import com.zhuawawa.maile.vediozhuawawa.util.SnackbarUtil;
import javax.inject.Inject;
/**
* Created by codeest on 2016/8/2.
* MVP Fragment基类
*/
public abstract class BaseFragment<T extends BasePresenter> extends SimpleFragment implements BaseView {
@Inject
protected T mPresenter;
protected FragmentComponent getFragmentComponent(){
return DaggerFragmentComponent.builder()
.appComponent(App.getAppComponent())
.fragmentModule(getFragmentModule())
.build();
}
protected FragmentModule getFragmentModule(){
return new FragmentModule(this);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
initInject();
mPresenter.attachView(this);
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onDestroyView() {
if (mPresenter != null) mPresenter.detachView();
super.onDestroyView();
}
@Override
public void showErrorMsg(String msg) {
SnackbarUtil.show(((ViewGroup) getActivity().findViewById(android.R.id.content)).getChildAt(0), msg);
}
@Override
public void useNightMode(boolean isNight) {
}
@Override
public void stateError() {
}
@Override
public void stateEmpty() {
}
@Override
public void stateLoading() {
}
@Override
public void stateMain() {
}
protected abstract void initInject();
}
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.base;
/**
* Created by codeest on 2016/8/2.
* Presenter基类
*/
public interface BasePresenter<T extends BaseView>{
void attachView(T view);
void detachView();
}
package com.zhuawawa.maile.vediozhuawawa.base;
/**
* Created by codeest on 2016/8/2.
* View基类
*/
public interface BaseView {
void showErrorMsg(String msg);
void useNightMode(boolean isNight);
//======= State =======
void stateError();
void stateEmpty();
void stateLoading();
void stateMain();
}
package com.zhuawawa.maile.vediozhuawawa.base;
import android.view.View;
import android.view.ViewGroup;
import com.zhuawawa.maile.vediozhuawawa.R;
import com.zhuawawa.maile.vediozhuawawa.widget.ProgressImageView;
/**
* @author: Est <codeest.dev@gmail.com>
* @date: 2017/4/21
* @desciption:
*/
public abstract class RootActivity<T extends BasePresenter> extends BaseActivity<T>{
private static final int STATE_MAIN = 0x00;
private static final int STATE_LOADING = 0x01;
private static final int STATE_ERROR = 0x02;
private ProgressImageView ivLoading;
private View viewError;
private View viewLoading;
private ViewGroup viewMain;
private ViewGroup mParent;
private int mErrorResource = R.layout.view_error;
private int currentState = STATE_MAIN;
private boolean isErrorViewAdded = false;
@Override
protected void initEventAndData() {
viewMain = (ViewGroup) findViewById(R.id.view_main);
if (viewMain == null) {
throw new IllegalStateException(
"The subclass of RootActivity must contain a View named 'view_main'.");
}
if (!(viewMain.getParent() instanceof ViewGroup)) {
throw new IllegalStateException(
"view_main's ParentView should be a ViewGroup.");
}
mParent = (ViewGroup) viewMain.getParent();
View.inflate(mContext, R.layout.view_progress, mParent);
viewLoading = mParent.findViewById(R.id.view_loading);
ivLoading = (ProgressImageView) viewLoading.findViewById(R.id.iv_progress);
viewLoading.setVisibility(View.GONE);
viewMain.setVisibility(View.VISIBLE);
}
@Override
public void stateError() {
if (currentState == STATE_ERROR)
return;
if (!isErrorViewAdded) {
isErrorViewAdded = true;
View.inflate(mContext, mErrorResource, mParent);
viewError = mParent.findViewById(R.id.view_error);
if (viewError == null) {
throw new IllegalStateException(
"A View should be named 'view_error' in ErrorLayoutResource.");
}
}
hideCurrentView();
currentState = STATE_ERROR;
viewError.setVisibility(View.VISIBLE);
}
@Override
public void stateLoading() {
if (currentState == STATE_LOADING)
return;
hideCurrentView();
currentState = STATE_LOADING;
viewLoading.setVisibility(View.VISIBLE);
ivLoading.start();
}
@Override
public void stateMain() {
if (currentState == STATE_MAIN)
return;
hideCurrentView();
currentState = STATE_MAIN;
viewMain.setVisibility(View.VISIBLE);
}
private void hideCurrentView() {
switch (currentState) {
case STATE_MAIN:
viewMain.setVisibility(View.GONE);
break;
case STATE_LOADING:
ivLoading.stop();
viewLoading.setVisibility(View.GONE);
break;
case STATE_ERROR:
if (viewError != null) {
viewError.setVisibility(View.GONE);
}
break;
}
}
public void setErrorResource(int errorLayoutResource) {
this.mErrorResource = errorLayoutResource;
}
}
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.base;
import android.view.View;
import android.view.ViewGroup;
import com.zhuawawa.maile.vediozhuawawa.R;
import com.zhuawawa.maile.vediozhuawawa.widget.ProgressImageView;
/**
* @author: Est <codeest.dev@gmail.com>
* @date: 2017/4/21
* @desciption:
*/
public abstract class RootFragment<T extends BasePresenter> extends BaseFragment<T> {
private static final int STATE_MAIN = 0x00;
private static final int STATE_LOADING = 0x01;
private static final int STATE_ERROR = 0x02;
private ProgressImageView ivLoading;
private View viewError;
private View viewLoading;
private ViewGroup viewMain;
private ViewGroup mParent;
private int mErrorResource = R.layout.view_error;
private int currentState = STATE_MAIN;
private boolean isErrorViewAdded = false;
@Override
protected void initEventAndData() {
if (getView() == null)
return;
viewMain = (ViewGroup) getView().findViewById(R.id.view_main);
if (viewMain == null) {
throw new IllegalStateException(
"The subclass of RootActivity must contain a View named 'view_main'.");
}
if (!(viewMain.getParent() instanceof ViewGroup)) {
throw new IllegalStateException(
"view_main's ParentView should be a ViewGroup.");
}
mParent = (ViewGroup) viewMain.getParent();
View.inflate(mContext, R.layout.view_progress, mParent);
viewLoading = mParent.findViewById(R.id.view_loading);
ivLoading = (ProgressImageView) viewLoading.findViewById(R.id.iv_progress);
viewLoading.setVisibility(View.GONE);
viewMain.setVisibility(View.VISIBLE);
}
@Override
public void stateError() {
if (currentState == STATE_ERROR)
return;
if (!isErrorViewAdded) {
isErrorViewAdded = true;
View.inflate(mContext, mErrorResource, mParent);
viewError = mParent.findViewById(R.id.view_error);
if (viewError == null) {
throw new IllegalStateException(
"A View should be named 'view_error' in ErrorLayoutResource.");
}
}
hideCurrentView();
currentState = STATE_ERROR;
viewError.setVisibility(View.VISIBLE);
}
@Override
public void stateLoading() {
if (currentState == STATE_LOADING)
return;
hideCurrentView();
currentState = STATE_LOADING;
viewLoading.setVisibility(View.VISIBLE);
ivLoading.start();
}
@Override
public void stateMain() {
if (currentState == STATE_MAIN)
return;
hideCurrentView();
currentState = STATE_MAIN;
viewMain.setVisibility(View.VISIBLE);
}
private void hideCurrentView() {
switch (currentState) {
case STATE_MAIN:
viewMain.setVisibility(View.GONE);
break;
case STATE_LOADING:
ivLoading.stop();
viewLoading.setVisibility(View.GONE);
break;
case STATE_ERROR:
if (viewError != null) {
viewError.setVisibility(View.GONE);
}
break;
}
}
public void setErrorResource(int errorLayoutResource) {
this.mErrorResource = errorLayoutResource;
}
}
package com.zhuawawa.maile.vediozhuawawa.base;
import com.zhuawawa.maile.vediozhuawawa.component.RxBus;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/**
* Created by codeest on 2016/8/2.
* 基于Rx的Presenter封装,控制订阅的生命周期
*/
public class RxPresenter<T extends BaseView> implements BasePresenter<T> {
protected T mView;
protected CompositeDisposable mCompositeDisposable;
protected void unSubscribe() {
if (mCompositeDisposable != null) {
mCompositeDisposable.clear();
}
}
protected void addSubscribe(Disposable subscription) {
if (mCompositeDisposable == null) {
mCompositeDisposable = new CompositeDisposable();
}
mCompositeDisposable.add(subscription);
}
protected <U> void addRxBusSubscribe(Class<U> eventType, Consumer<U> act) {
if (mCompositeDisposable == null) {
mCompositeDisposable = new CompositeDisposable();
}
mCompositeDisposable.add(RxBus.getDefault().toDefaultFlowable(eventType, act));
}
@Override
public void attachView(T view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
unSubscribe();
}
}
package com.zhuawawa.maile.vediozhuawawa.base;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.view.View;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import me.yokeyword.fragmentation.SupportActivity;
/**
* Created by codeest on 16/8/11.
* 无MVP的activity基类
*/
public abstract class SimpleActivity extends SupportActivity {
protected Activity mContext;
private Unbinder mUnBinder;
private int titleBarColor = 0xFFFF00;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
useFullScreen();
setContentView(getLayout());
mUnBinder = ButterKnife.bind(this);
mContext = this;
onViewCreated();
App.getInstance().addActivity(this);
initEventAndData();
}
protected void useFullScreen(){}
protected void setToolBar(Toolbar toolbar, String title) {
toolbar.setTitle(title);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressedSupport();
}
});
}
protected void onViewCreated() {
}
@Override
protected void onDestroy() {
super.onDestroy();
App.getInstance().removeActivity(this);
mUnBinder.unbind();
}
protected abstract int getLayout();
protected abstract void initEventAndData();
}
package com.zhuawawa.maile.vediozhuawawa.base;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import me.yokeyword.fragmentation.SupportFragment;
/**
* Created by codeest on 16/8/11.
* 无MVP的Fragment基类
*/
public abstract class SimpleFragment extends SupportFragment {
protected View mView;
protected Activity mActivity;
protected Context mContext;
private Unbinder mUnBinder;
protected boolean isInited = false;
protected Bundle bundle;
@Override
public void onAttach(Context context) {
mActivity = (Activity) context;
mContext = context;
super.onAttach(context);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mView = inflater.inflate(getLayoutId(), null);
bundle = getArguments();
return mView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mUnBinder = ButterKnife.bind(this, view);
}
@Override
public void onLazyInitView(@Nullable Bundle savedInstanceState) {
super.onLazyInitView(savedInstanceState);
isInited = true;
initEventAndData();
}
@Override
public void onDestroyView() {
super.onDestroyView();
mUnBinder.unbind();
}
protected abstract int getLayoutId();
protected abstract void initEventAndData();
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 2016/8/23.
*/
public interface ClawDollContract {
interface View extends BaseView {
}
interface Presenter extends BasePresenter<View> {
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.avatar.lib.sdk.bean.WwWawaDetail;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.WawaBean;
/**
* Created by codeest on 2016/8/23.
*/
public interface ClawDollDetailsContract {
interface View extends BaseView {
void updateData(WwWawaDetail dollBean);
void insertDataToView(WawaBean wawaBean);
}
interface Presenter extends BasePresenter<View> {
void fetchDollDetail(int id);
void fetchWawaPrizeDetail(int roomId);
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.avatar.lib.sdk.bean.WwRoomCatchRecordItem;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.netbean.RoomWinBean;
import java.util.ArrayList;
import java.util.List;
/**
* Created by codeest on 2016/8/23.
*/
public interface ClawDollRecordContract {
interface View extends BaseView {
void updateListData(List<WwRoomCatchRecordItem> response, boolean isRefresh);
void updateEmpty();
void loadComplete();
void loadMoreEnd();
void updateRecentlyRecord(int pageNumber);
void updateRecordList(ArrayList<RoomWinBean> roomWinRecord);
}
interface Presenter extends BasePresenter<View> {
void fetchData(int rid, int page);
int getPageNow();
void getRoomWinRecord(int roomId , int page , int pageSize);
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by chengfeng-piaopiao on 2017/12/22.
*/
public interface ClawGameDetailConstract {
interface View extends BaseView {
}
interface Presenter extends BasePresenter<View> {
}
}
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 2016/8/23.
*/
public interface ClawGameResultContract {
interface View extends BaseView {
void stopRefresh();
void updateEmpty(boolean isError);
void loadComplete();
}
interface Presenter extends BasePresenter<View> {
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.WawaBean;
/**
* Created by codeest on 2016/8/23.
*/
public interface ClawWawaPrizeDratilConstract {
interface View extends BaseView {
void insertDataToView(WawaBean wawaBean);
}
interface Presenter extends BasePresenter<View> {
void fetchWawaPrizeDetail(int roomId);
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import com.avatar.lib.sdk.bean.WwComplainReason;
import com.avatar.lib.sdk.bean.WwEmptyResponse;
import com.avatar.lib.sdk.bean.WwGameHistory;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import java.util.List;
/**
* Created by codeest on 2016/8/23.
*/
public interface ComplaintContract {
interface View extends BaseView {
//请求申诉列表
void setComplaintList(List<WwComplainReason> wwComplainReasons);
//申诉结果反馈
void updateComplainResultView(WwEmptyResponse wwEmptyResponse);
}
interface Presenter extends BasePresenter<View> {
void requestComplainReasonList(WwGameHistory wwGameHistory);
void requestComplainGame(WwGameHistory wwGameHistory, int reasonId,String reason);
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.live;
import android.content.Intent;
import com.avatar.lib.sdk.bean.WwRoom;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.PrizeBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RecordBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.user.UserBean;
import java.util.ArrayList;
/**
* Created by codeest on 2016/8/23.
*/
public interface LiveContract {
interface View extends BaseView {
void refreshRoomInfo(WwRoom wwRoom);
void exchangeSwitchContainerState(boolean isCanScroll);
void updateUserInfo(UserBean userBean);
/**
* 更新用户游戏数据
*/
void updateUserGameData(ArrayList<PrizeBean> beans);
void updateBroadcastRecords(ArrayList<RecordBean> mList);
//每次操作后更新金币
void gameUpdateUserInfo(int gold);
}
interface Presenter extends BasePresenter<View> {
void initRoomInfo(Intent intent);
void exitRoom();
void getUserInfo();
/**
* 上传用户游戏状态
*/
void uploadGameStatus(String orderId , int status);
/**
* 获取广播轮播信息
*/
void fetchBroadCasts();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.main;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.PrizeBean;
/**
* Created by codeest on 16/8/9.
*/
public interface MainContract {
interface View extends BaseView {
void showLoginPrize(PrizeBean prizeBean);
}
interface Presenter extends BasePresenter<View> {
void getLoginPrize();
void getMenuDatas();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.main;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.BannerBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RecordBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RoomBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.user.UserBean;
import java.util.ArrayList;
/**
* Created by codeest on 2016/8/23.
*/
public interface RoomsContract {
interface View extends BaseView {
void showBanners(ArrayList<BannerBean> mList);
void updateBroadcastRecords(ArrayList<RecordBean> mList);
void setUserInfo(UserBean userBean);
void updateRoomBeans(ArrayList<RoomBean> roomBeans);
}
interface Presenter extends BasePresenter<View> {
/**
* 获取房间数据
*/
//void fetchRooms(List<WwRoom> result);
void fetchRoomsV2();
/**
* 更新轮播图
*/
void fetchBannersFromNet();
/**
* 获取广播轮播信息
*/
void fetchBroadCasts();
/**
* 获取用户信息
*/
void getUserInfo();
void fetchUserProfile();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.main;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 16/8/15.
*/
public interface WelcomeContract {
interface View extends BaseView {
void showWxLogin();
void showContent();
void jumpToMain();
void goBackTophoneLogin();
//日志提示
void showToast( String message);
}
interface Presenter extends BasePresenter<View> {
//获取手机验证码
void sendVerifyCode( String phone,String type);
//手机注册
void phoneRegister(String phone , String pwd , String verifyCode , String channel);
//手机登陆
void phoneLogin( String phone, String pwd);
//密码找回
void forgetPwd(String phone , String pwd , String verifyCode);
void appInit();
void checkAutoLogin();
void getWelcomeData();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.mall;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.MenuBean;
/**
* Created by codeest on 2016/8/23.
*/
public interface MallContract {
interface View extends BaseView {
void load(String url);
}
interface Presenter extends BasePresenter<View> {
void getInstance(MenuBean menuBean);
void buildWebView();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.mall;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.MenuBean;
/**
* Created by codeest on 2016/8/23.
*/
public interface ShareContract {
interface View extends BaseView {
void load(String url);
}
interface Presenter extends BasePresenter<View> {
void getInstance(MenuBean menuBean);
void buildWebView();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.third.wx;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 2016/8/23.
*/
public interface WxLoginContract {
interface View extends BaseView {
void jumpToMainActivity();
void showWxLoginError(String errorMsg);
}
interface Presenter extends BasePresenter<View> {
void upploadCode(String code);
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.user;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.recharge.PayBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.user.UserBean;
import java.util.ArrayList;
/**
* Created by codeest on 2016/8/23.
*/
public interface RechargeContract {
interface View extends BaseView {
void setUserInfo(UserBean userBean);
void updatePayLists(ArrayList<PayBean> payBean);
}
interface Presenter extends BasePresenter<View> {
void getUserInfo();
void fetchRechareList();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.user;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 2016/8/23.
*/
public interface SettingContract {
interface View extends BaseView {
void showVersionState(boolean shouldDownApk ,String data);
void jumpToWelComActivity();
void showErrorView();
}
interface Presenter extends BasePresenter<View> {
void checkAppVersion();
void loginOut();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.user;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.user.UserBean;
/**
* Created by codeest on 2016/8/23.
*/
public interface UserContract {
interface View extends BaseView {
void setUserInfo(UserBean userBean);
}
interface Presenter extends BasePresenter<View> {
void fetchUserProfile();
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.user;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 2016/8/23.
*/
public interface UserPrizeContract {
interface View extends BaseView {
}
interface Presenter extends BasePresenter<View> {
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.user;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
/**
* Created by codeest on 2016/8/23.
*/
public interface UserSpoilsContract {
interface View extends BaseView {
void stopRefresh();
void updateEmpty(boolean isError);
void loadComplete();
}
interface Presenter extends BasePresenter<View> {
}
}
package com.zhuawawa.maile.vediozhuawawa.base.contract.zego;
import com.zhuawawa.maile.vediozhuawawa.base.BasePresenter;
import com.zhuawawa.maile.vediozhuawawa.base.BaseView;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RecordBean;
import java.util.ArrayList;
/**
* Created by codeest on 2016/8/23.
*/
public interface ZegoContract {
interface View extends BaseView {
void sendCMDFail(String cmd);
void exchangeSwitchContainerState(boolean isCanScroll);
void updateBroadcastRecords(ArrayList<RecordBean> mList);
}
interface Presenter extends BasePresenter<View> {
void reservationResult(String roomId);
}
}
package com.zhuawawa.maile.vediozhuawawa.base.event;
import org.greenrobot.eventbus.EventBus;
/**
* Created by cc on 2017/7/12.
*/
public class EventBusTop {
private static EventBus sEventBus = null;
private EventBusTop() {
}
public static void setTopEventBus(EventBus eventBus) {
sEventBus = eventBus;
}
public static EventBus getDefault() {
if (sEventBus == null) {
sEventBus = EventBus.getDefault();
}
return sEventBus;
}
}
package com.zhuawawa.maile.vediozhuawawa.component;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.util.LogUtil;
import com.zhuawawa.maile.vediozhuawawa.util.ToastUtil;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
/**
* Created by codeest on 2016/8/3.
*/
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private static Thread.UncaughtExceptionHandler defaultHandler = null;
private Context context = null;
private final String TAG = CrashHandler.class.getSimpleName();
public CrashHandler(Context context) {
this.context = context;
}
/**
* 初始化,设置该CrashHandler为程序的默认处理器
*/
public static void init(CrashHandler crashHandler) {
defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(crashHandler);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
System.out.println(ex.toString());
LogUtil.e(TAG, ex.toString());
LogUtil.e(TAG, collectCrashDeviceInfo());
LogUtil.e(TAG, getCrashInfo(ex));
// 调用系统错误机制
defaultHandler.uncaughtException(thread, ex);
ToastUtil.shortShow("抱歉,程序发生异常即将退出");
App.getInstance().exitApp();
}
/**
* 得到程序崩溃的详细信息
*/
public String getCrashInfo(Throwable ex) {
Writer result = new StringWriter();
PrintWriter printWriter = new PrintWriter(result);
ex.setStackTrace(ex.getStackTrace());
ex.printStackTrace(printWriter);
return result.toString();
}
/**
* 收集程序崩溃的设备信息
*/
public String collectCrashDeviceInfo() {
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES);
String versionName = pi.versionName;
String model = android.os.Build.MODEL;
String androidVersion = android.os.Build.VERSION.RELEASE;
String manufacturer = android.os.Build.MANUFACTURER;
return versionName + " " + model + " " + androidVersion + " " + manufacturer;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
package com.zhuawawa.maile.vediozhuawawa.component;
import android.app.Activity;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestListener;
/**
* Created by codeest on 2016/8/2.
*/
public class ImageLoader {
public static void load(Activity activity, String url, ImageView iv) { //使用Glide加载圆形ImageView(如头像)时,不要使用占位图
if(!activity.isDestroyed()) {
Glide.with(activity).load(url).crossFade().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(iv);
}
}
public static void loadContext(Context activity, String url, ImageView iv) { //使用Glide加载圆形ImageView(如头像)时,不要使用占位图
Glide.with(activity).load(url).crossFade().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(iv);
}
public static void loadAll(Context context, String url, ImageView iv) { //不缓存,全部从网络加载
Glide.with(context).load(url).crossFade().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).into(iv);
}
public static void loadAll(Activity activity, String url, ImageView iv) { //不缓存,全部从网络加载
if(!activity.isDestroyed()) {
Glide.with(activity).load(url).crossFade().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).into(iv);
}
}
//占位图
public static void loadWithPlaceholder(Context context, String url, int placeHolderDrawable, ImageView iv){
Glide.with(context)
.load(url)
.placeholder(placeHolderDrawable)
.crossFade()
.into(iv);
}
public static void loadListener(Context context, String url, int placeHolderDrawable, ImageView iv, RequestListener listener){
Glide.with(context).load(url).crossFade().listener(listener).into(iv);
}
}
package com.zhuawawa.maile.vediozhuawawa.component;
import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import com.github.moduth.blockcanary.BlockCanary;
import com.orhanobut.logger.Logger;
import com.squareup.leakcanary.LeakCanary;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.smtt.sdk.QbSdk;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.app.Constants;
import com.zhuawawa.maile.vediozhuawawa.util.SystemUtil;
import com.zhuawawa.maile.vediozhuawawa.widget.AppBlockCanaryContext;
import static com.zhuawawa.maile.vediozhuawawa.util.LogUtil.isDebug;
/**
* Created by codeest on 2017/2/12.
*/
public class InitializeService extends IntentService {
private static final String ACTION_INIT = "initApplication";
public InitializeService() {
super("InitializeService");
}
public static void start(Context context) {
Intent intent = new Intent(context, InitializeService.class);
intent.setAction(ACTION_INIT);
context.startService(intent);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_INIT.equals(action)) {
initApplication();
}
}
}
private void initApplication() {
//初始化日志
Logger.init(getPackageName()).hideThreadInfo();
//初始化错误收集
// CrashHandler.init(new CrashHandler(getApplicationContext()));
initBugly();
//初始化内存泄漏检测
LeakCanary.install(App.getInstance());
//初始化过度绘制检测
BlockCanary.install(getApplicationContext(), new AppBlockCanaryContext()).start();
//初始化tbs x5 webview
QbSdk.allowThirdPartyAppDownload(true);
QbSdk.initX5Environment(getApplicationContext(), QbSdk.WebviewInitType.FIRSTUSE_AND_PRELOAD, new QbSdk.PreInitCallback() {
@Override
public void onCoreInitFinished() {
}
@Override
public void onViewInitFinished(boolean b) {
}
});
}
private void initBugly() {
Context context = getApplicationContext();
String packageName = context.getPackageName();
String processName = SystemUtil.getProcessName(android.os.Process.myPid());
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context);
strategy.setUploadProcess(processName == null || processName.equals(packageName));
CrashReport.initCrashReport(context, Constants.BUGLY_ID, isDebug, strategy);
}
}
package com.zhuawawa.maile.vediozhuawawa.component;
import com.zhuawawa.maile.vediozhuawawa.util.RxUtil;
import io.reactivex.Flowable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.processors.FlowableProcessor;
import io.reactivex.processors.PublishProcessor;
/**
* Created by codeest on 2016/8/2.
*/
public class RxBus {
// 主题
private final FlowableProcessor<Object> bus;
// PublishSubject只会把在订阅发生的时间点之后来自原始Flowable的数据发射给观察者
private RxBus() {
bus = PublishProcessor.create().toSerialized();
}
public static RxBus getDefault() {
return RxBusHolder.sInstance;
}
private static class RxBusHolder {
private static final RxBus sInstance = new RxBus();
}
// 提供了一个新的事件
public void post(Object o) {
bus.onNext(o);
}
// 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
public <T> Flowable<T> toFlowable(Class<T> eventType) {
return bus.ofType(eventType);
}
// 封装默认订阅
public <T> Disposable toDefaultFlowable(Class<T> eventType, Consumer<T> act) {
return bus.ofType(eventType).compose(RxUtil.<T>rxSchedulerHelper()).subscribe(act);
}
}
package com.zhuawawa.maile.vediozhuawawa.component;
import android.app.DownloadManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Environment;
import android.os.IBinder;
import android.support.annotation.Nullable;
import java.io.File;
/**
* Created by codeest on 16/10/10.
*/
public class UpdateService extends Service {
private BroadcastReceiver receiver;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(receiver);
intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/geeknews.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
stopSelf();
}
};
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
startDownload();
return Service.START_STICKY;
}
private void startDownload() {
// DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
// DownloadManager.Request request = new DownloadManager.Request(
// Uri.parse(MyApis.APK_DOWNLOAD_URL));
// request.setTitle("GeekNews");
// request.setDescription("新版本下载中");
// request.setMimeType("application/vnd.android.package-archive");
// request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "geeknews.apk");
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// request.allowScanningByMediaScanner();
// request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// }
// dm.enqueue(request);
// ToastUtil.shortShow("后台下载中,请稍候...");
}
}
package com.zhuawawa.maile.vediozhuawawa.di.component;
import android.app.Activity;
import com.zhuawawa.maile.vediozhuawawa.di.module.ActivityModule;
import com.zhuawawa.maile.vediozhuawawa.di.scope.ActivityScope;
import com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ClawGameDetailActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ClawGameHistoryActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ComplaintActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.user.activity.SettingActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.user.activity.UserSpoilsActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.zego.activity.ZegoLiveActivity;
import com.zhuawawa.maile.vediozhuawawa.wxapi.WXEntryActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.live.activity.ClawLiveActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.main.activity.MainActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.user.activity.RechareActivity;
import com.zhuawawa.maile.vediozhuawawa.ui.main.activity.WelcomeActivity;
import dagger.Component;
/**
* Created by codeest on 16/8/7.
*/
@ActivityScope
@Component(dependencies = AppComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {
Activity getActivity();
void inject(WelcomeActivity welcomeActivity);
void inject(MainActivity mainActivity);
void inject(RechareActivity rechareActivity);
void inject(ClawLiveActivity rechareActivity);
//微信登陆
void inject(WXEntryActivity wxEntryActivity);
//游戏记录
void inject(ClawGameHistoryActivity clawGameHistoryActivity);
//历史记录详情
void inject(ClawGameDetailActivity clawGameDetailActivity);
//申诉
void inject(ComplaintActivity complaintActivity);
//战利品
void inject(UserSpoilsActivity userSpoilsActivity);
//设置
void inject(SettingActivity settingActivity);
//Zego
void inject(ZegoLiveActivity zegoLiveActivity);
}
package com.zhuawawa.maile.vediozhuawawa.di.component;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.di.module.AppModule;
import com.zhuawawa.maile.vediozhuawawa.di.module.HttpModule;
import com.zhuawawa.maile.vediozhuawawa.model.DataManager;
import com.zhuawawa.maile.vediozhuawawa.model.db.RealmHelper;
import com.zhuawawa.maile.vediozhuawawa.model.http.RetrofitHelper;
import com.zhuawawa.maile.vediozhuawawa.model.prefs.ImplPreferencesHelper;
import javax.inject.Singleton;
import dagger.Component;
/**
* Created by codeest on 16/8/7.
*/
@Singleton
@Component(modules = {AppModule.class, HttpModule.class})
public interface AppComponent {
App getContext(); // 提供App的Context
DataManager getDataManager(); //数据中心
RetrofitHelper retrofitHelper(); //提供http的帮助类
RealmHelper realmHelper(); //提供数据库帮助类
ImplPreferencesHelper preferencesHelper(); //提供sp帮助类
}
package com.zhuawawa.maile.vediozhuawawa.di.component;
import android.app.Activity;
import com.zhuawawa.maile.vediozhuawawa.di.module.FragmentModule;
import com.zhuawawa.maile.vediozhuawawa.di.scope.FragmentScope;
import com.zhuawawa.maile.vediozhuawawa.ui.live.fragment.ClawDollDetailsFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.live.fragment.ClawDollFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.live.fragment.ClawCatchRecordFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.live.fragment.WawaPrizeDetailFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.main.fragment.MallFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.main.fragment.RoomsFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.main.fragment.ShareFragment;
import com.zhuawawa.maile.vediozhuawawa.ui.main.fragment.UserFragment;
import dagger.Component;
/**
* Created by codeest on 16/8/7.
*/
@FragmentScope
@Component(dependencies = AppComponent.class, modules = FragmentModule.class)
public interface FragmentComponent {
Activity getActivity();
void inject(MallFragment mallFragment);
void inject(RoomsFragment roomsFragment);
void inject(UserFragment userFragment);
void inject(ClawDollFragment clawDollFragment);
void inject(ClawDollDetailsFragment clawDollFragment);
void inject(ClawCatchRecordFragment clawCatchRecordFragment);
//奖品详情
void inject(WawaPrizeDetailFragment wawaPrizeDetailFragment);
void inject(ShareFragment shareFragment);
}
package com.zhuawawa.maile.vediozhuawawa.di.module;
import android.app.Activity;
import com.zhuawawa.maile.vediozhuawawa.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
/**
* Created by codeest on 16/8/7.
*/
@Module
public class ActivityModule {
private Activity mActivity;
public ActivityModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityScope
public Activity provideActivity() {
return mActivity;
}
}
package com.zhuawawa.maile.vediozhuawawa.di.module;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.model.DataManager;
import com.zhuawawa.maile.vediozhuawawa.model.db.DBHelper;
import com.zhuawawa.maile.vediozhuawawa.model.db.RealmHelper;
import com.zhuawawa.maile.vediozhuawawa.model.http.HttpHelper;
import com.zhuawawa.maile.vediozhuawawa.model.http.RetrofitHelper;
import com.zhuawawa.maile.vediozhuawawa.model.prefs.ImplPreferencesHelper;
import com.zhuawawa.maile.vediozhuawawa.model.prefs.PreferencesHelper;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
/**
* Created by codeest on 16/8/7.
*/
@Module
public class AppModule {
private final App application;
public AppModule(App application) {
this.application = application;
}
@Provides
@Singleton
App provideApplicationContext() {
return application;
}
@Provides
@Singleton
HttpHelper provideHttpHelper(RetrofitHelper retrofitHelper) {
return retrofitHelper;
}
@Provides
@Singleton
DBHelper provideDBHelper(RealmHelper realmHelper) {
return realmHelper;
}
@Provides
@Singleton
PreferencesHelper providePreferencesHelper(ImplPreferencesHelper implPreferencesHelper) {
return implPreferencesHelper;
}
@Provides
@Singleton
DataManager provideDataManager(HttpHelper httpHelper, DBHelper DBHelper, PreferencesHelper preferencesHelper) {
return new DataManager(httpHelper, DBHelper, preferencesHelper);
}
}
package com.zhuawawa.maile.vediozhuawawa.di.module;
import android.app.Activity;
import android.support.v4.app.Fragment;
import com.zhuawawa.maile.vediozhuawawa.di.scope.FragmentScope;
import dagger.Module;
import dagger.Provides;
/**
* Created by codeest on 16/8/7.
*/
@Module
public class FragmentModule {
private Fragment fragment;
public FragmentModule(Fragment fragment) {
this.fragment = fragment;
}
@Provides
@FragmentScope
public Activity provideActivity() {
return fragment.getActivity();
}
}
package com.zhuawawa.maile.vediozhuawawa.di.module;
import com.zhuawawa.maile.vediozhuawawa.BuildConfig;
import com.zhuawawa.maile.vediozhuawawa.app.Constants;
import com.zhuawawa.maile.vediozhuawawa.di.qualifier.ZhihuUrl;
import com.zhuawawa.maile.vediozhuawawa.model.http.api.WaWaApis;
import com.zhuawawa.maile.vediozhuawawa.util.SystemUtil;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import okhttp3.Cache;
import okhttp3.CacheControl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by codeest on 2017/2/26.
*/
@Module
public class HttpModule {
@Singleton
@Provides
Retrofit.Builder provideRetrofitBuilder() {
return new Retrofit.Builder();
}
@Singleton
@Provides
OkHttpClient.Builder provideOkHttpBuilder() {
return new OkHttpClient.Builder();
}
@Singleton
@Provides
@ZhihuUrl
Retrofit provideZhihuRetrofit(Retrofit.Builder builder, OkHttpClient client) {
return createRetrofit(builder, client, WaWaApis.HOST);
}
@Singleton
@Provides
OkHttpClient provideClient(OkHttpClient.Builder builder) {
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
builder.addInterceptor(loggingInterceptor);
}
File cacheFile = new File(Constants.PATH_CACHE);
Cache cache = new Cache(cacheFile, 1024 * 1024 * 50);
Interceptor cacheInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
//添加cookie头
// Request.Builder builder = chain.request().newBuilder();
// SharedPreferences sp = App.getInstance().getSharedPreferences(ImplPreferencesHelper.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);
Request request = chain.request();
// HashSet<String> preferences = (HashSet<String>) sp.getStringSet(Constants.SP_COOKIES,new HashSet<String>());
//
// for (String cookie : preferences) {
// builder.addHeader("Cookie", cookie);
// Log.v("OkHttp", "Adding Header: " + cookie);
// }
if (!SystemUtil.isNetworkConnected()) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
//取出cookie头
Response response = chain.proceed(request);
// if (!response.headers("Set-Cookie").isEmpty()) {
// HashSet<String> cookies = new HashSet<>();
// for (String header : response.headers("Set-Cookie")) {
// cookies.add(header);
// }
// sp.edit().putStringSet(Constants.SP_COOKIES, cookies).apply();
// }
if (SystemUtil.isNetworkConnected()) {
int maxAge = 0;
// 有网络时, 不缓存, 最大保存时长为0
response.newBuilder()
.header("Cache-Control", "public, max-age=" + maxAge)
.removeHeader("Pragma")
.build();
} else {
// 无网络时,设置超时为4周
int maxStale = 60 * 60 * 24 * 28;
response.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.removeHeader("Pragma")
.build();
}
return response;
}
};
//ssid加在这里
// Interceptor apikey = new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// Request request = chain.request();
// request = request.newBuilder()
// .addHeader("apikey",Constants.KEY_API)
// .build();
// return chain.proceed(request);
// }
// }
// 设置统一的请求头部参数
// builder.addInterceptor(apikey);
//设置缓存
builder.addNetworkInterceptor(cacheInterceptor);
builder.addInterceptor(new RspCheckInterceptor());
builder.addInterceptor(cacheInterceptor);
builder.cache(cache);
//设置超时
builder.connectTimeout(10, TimeUnit.SECONDS);
builder.readTimeout(20, TimeUnit.SECONDS);
builder.writeTimeout(20, TimeUnit.SECONDS);
//错误重连
builder.retryOnConnectionFailure(true);
return builder.build();
}
@Singleton
@Provides
WaWaApis provideZhihuService(@ZhihuUrl Retrofit retrofit) {
return retrofit.create(WaWaApis.class);
}
private Retrofit createRetrofit(Retrofit.Builder builder, OkHttpClient client, String url) {
return builder
.baseUrl(url)
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
}
package com.zhuawawa.maile.vediozhuawawa.di.module;
import android.content.Context;
import com.orhanobut.logger.Logger;
import com.zhuawawa.maile.vediozhuawawa.app.App;
import com.zhuawawa.maile.vediozhuawawa.app.Constants;
import com.zhuawawa.maile.vediozhuawawa.model.bean.WrapperRspEntity;
import com.zhuawawa.maile.vediozhuawawa.model.http.api.WaWaApis;
import com.zhuawawa.maile.vediozhuawawa.model.prefs.ImplPreferencesHelper;
import com.zhuawawa.maile.vediozhuawawa.netbean.TokenBean;
import com.zhuawawa.maile.vediozhuawawa.util.JsonUtil;
import com.zhuawawa.maile.vediozhuawawa.widget.InterceptorUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* @author zjh
* @date 2016/8/31
*/
public class RspCheckInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(chain.request());
try {
ResponseBody rspBody = response.body();
JSONObject jsonObject = new JSONObject(InterceptorUtils.getRspData(rspBody));
int status = jsonObject.getInt("code");
if (status != 0 && status != 200) {
if (status == 426) {
Retrofit retrofit = new Retrofit.Builder()
.client(new OkHttpClient())
.baseUrl(WaWaApis.HOST)
.addConverterFactory(GsonConverterFactory.create())
.build();
WaWaApis service = retrofit.create(WaWaApis.class);
Call<WrapperRspEntity> wrapperRspEntityCall = service.callRefreshToken(App.getInstance().getSharedPreferences(ImplPreferencesHelper.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE).getString(Constants.SP_SSID_POINT, ""));
WrapperRspEntity rspEntity = wrapperRspEntityCall.execute().body();
//刷新token失败
if (rspEntity.getCode() != 0 || rspEntity.getCode() != 200) {
String codeResponse = codeResponse(rspEntity.getCode());
throw new IOException(codeResponse);
} else {
TokenBean tokenBean = (TokenBean) rspEntity.getData();
String token = tokenBean.getToken();
//更新token
App.getInstance().getSharedPreferences(ImplPreferencesHelper.SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE).edit().putString(Constants.SP_SSID_POINT, token).apply();
HttpUrl originalHttpUrl = request.url();
HttpUrl url = originalHttpUrl.newBuilder()
.setQueryParameter("token", token)
.build();
Request.Builder requestBuilder = request.newBuilder()
.url(url);
Request request2 = requestBuilder.build();
return chain.proceed(request2);
}
} else { //错误
Logger.json(JsonUtil.toJson(jsonObject));
String msg = codeResponse(status);
throw new IOException(msg);
}
}
} catch (JSONException e) {
Logger.e(e, "message");
e.printStackTrace();
throw new IOException("parase data error");
} catch (Exception e) {
Logger.e(e, "message");
if (e instanceof IOException) {
throw (IOException) e;
}
}
return response;
}
public String codeResponse(int code) {
switch (code) {
case 403:
case 404:
return "服务端异常(资源未找到)";
case 500:
return "服务端异常";
case 1002:
return "短信验证码验证失败";
case 997:
return "参数缺失";
case 1003:
return "手机号格式错误";
case 1009:
return "您已退出,请重新登陆";
case 1020:
return "证码超时";
case 1024:
return "错误的TOKEN";
case 1023:
return "错误的用户id";
case 10410:
return "请先登录";
case 1018:
return "短信验证码验证失败";
case 401:
return "暂无数据";
case 202: //登录页面
return "尚未登录";
case 203:
return "尚未进行授权";
case 413:
return "用户尚未注册,清先注册";
case 410:
return "用户不存在或密码错误";
case 422:
return "用户已存在,请直接登录";
case 10005:
return "服务端数据保存出错";
case 101:
return "参数错误";
case 409:
return "验证码已过期";
case 411:
return "此邮箱尚未注册";
case 412:
return "此账户尚未激活";
case 414:
return "原密码错误";
case 415:
return "两次密码不一致";
case 416:
return "接口调用异常";
case 417:
return "接口调用结果错误";
case 418:
return "接口调用状态码异常";
case 419:
return "接口调用结果异常";
case 420:
return "可用余额不足";
case 423:
return "无效的验证码";
case 424:
return "无效的订单号";
case 426:
return "token已过期,请重新获取";
case 427:
return "无效的token,请重新登录";
case 428:
return "无效的游戏结果";
case 100:
return "系统错误";
case 102:
return "请求接口无返回";
case 103:
return "系统邮件发送失败";
case 201:
return "数据不存在";
case 402:
return "参数缺失";
case 407:
return "未知类型的系统错误";
}
return "";
}
}
package com.zhuawawa.maile.vediozhuawawa.di.qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 2017/2/26.
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface GankUrl {
}
package com.zhuawawa.maile.vediozhuawawa.di.qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 2017/2/26.
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface GoldUrl {
}
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.di.qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 2017/2/26.
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface MyUrl {
}
package com.zhuawawa.maile.vediozhuawawa.di.qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 2017/2/26.
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface VtexUrl {
}
package com.zhuawawa.maile.vediozhuawawa.di.qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 2017/2/26.
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface WechatUrl {
}
\ No newline at end of file
package com.zhuawawa.maile.vediozhuawawa.di.qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 2017/2/26.
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface ZhihuUrl {
}
package com.zhuawawa.maile.vediozhuawawa.di.scope;
import java.lang.annotation.Retention;
import javax.inject.Scope;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 16/8/7.
*/
@Scope
@Retention(RUNTIME)
public @interface ActivityScope {
}
package com.zhuawawa.maile.vediozhuawawa.di.scope;
import java.lang.annotation.Retention;
import javax.inject.Scope;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Created by codeest on 16/8/7.
*/
@Scope
@Retention(RUNTIME)
public @interface FragmentScope {
}
package com.zhuawawa.maile.vediozhuawawa.model;
import com.zhuawawa.maile.vediozhuawawa.model.bean.GoldManagerBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.RealmLikeBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.WrapperRspEntity;
import com.zhuawawa.maile.vediozhuawawa.model.bean.app.AppBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.recharge.PayWrapBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.LoginPrizeBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.PrizeWrapBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RecordWrapBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RoomV2WrapBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.RoomWrapBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.room.WawaBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.user.LoginBean;
import com.zhuawawa.maile.vediozhuawawa.model.bean.user.UserWrapBean;
import com.zhuawawa.maile.vediozhuawawa.model.db.DBHelper;
import com.zhuawawa.maile.vediozhuawawa.model.http.HttpHelper;
import com.zhuawawa.maile.vediozhuawawa.model.prefs.PreferencesHelper;
import com.zhuawawa.maile.vediozhuawawa.netbean.BannerWrapBean;
import com.zhuawawa.maile.vediozhuawawa.netbean.BoardBean;
import com.zhuawawa.maile.vediozhuawawa.netbean.GameWrapBean;
import com.zhuawawa.maile.vediozhuawawa.netbean.RoomWinWrapperBean;
import com.zhuawawa.maile.vediozhuawawa.netbean.TokenBean;
import com.zhuawawa.maile.vediozhuawawa.netbean.UpgradeBean;
import java.util.List;
import io.reactivex.Flowable;
/**
* @author: Est <codeest.dev@gmail.com>
* @date: 2017/4/21
* @desciption:
*/
public class DataManager implements HttpHelper, DBHelper, PreferencesHelper {
HttpHelper mHttpHelper;
DBHelper mDbHelper;
PreferencesHelper mPreferencesHelper;
public DataManager(HttpHelper httpHelper, DBHelper dbHelper, PreferencesHelper preferencesHelper) {
mHttpHelper = httpHelper;
mDbHelper = dbHelper;
mPreferencesHelper = preferencesHelper;
}
@Override
public void setSsidPoint(String ssid) {
mPreferencesHelper.setSsidPoint(ssid);
}
@Override
public String getSsidPoint() {
return mPreferencesHelper.getSsidPoint();
}
@Override
public void insertNewsId(int id) {
mDbHelper.insertNewsId(id);
}
@Override
public boolean queryNewsId(int id) {
return mDbHelper.queryNewsId(id);
}
@Override
public void insertLikeBean(RealmLikeBean bean) {
mDbHelper.insertLikeBean(bean);
}
@Override
public void deleteLikeBean(String id) {
mDbHelper.deleteLikeBean(id);
}
@Override
public boolean queryLikeId(String id) {
return mDbHelper.queryLikeId(id);
}
@Override
public List<RealmLikeBean> getLikeList() {
return mDbHelper.getLikeList();
}
@Override
public void changeLikeTime(String id, long time, boolean isPlus) {
mDbHelper.changeLikeTime(id, time, isPlus);
}
@Override
public void updateGoldManagerList(GoldManagerBean bean) {
mDbHelper.updateGoldManagerList(bean);
}
@Override
public GoldManagerBean getGoldManagerList() {
return mDbHelper.getGoldManagerList();
}
@Override
public Flowable<WrapperRspEntity<TokenBean>> refreshToken(String token) {
return mHttpHelper.refreshToken(token);
}
@Override
public Flowable<WrapperRspEntity<LoginBean>> phoneLogin(String loginType, String platform, String channel, String phone, String pwd) {
return mHttpHelper.phoneLogin(loginType,platform,channel,phone,pwd);
}
@Override
public Flowable<WrapperRspEntity<LoginBean>> wxLogin(String loginType, String platform, String channel, String code) {
return mHttpHelper.wxLogin(loginType,platform,channel,code);
}
@Override
public Flowable<WrapperRspEntity> sendVerifyCode(String phone, String type) {
return mHttpHelper.sendVerifyCode(phone,type);
}
@Override
public Flowable<WrapperRspEntity<LoginBean>> phoneRegister(String phone, String pwd, String verifyCode, String channel) {
return mHttpHelper.phoneRegister(phone,pwd,verifyCode,channel);
}
@Override
public Flowable<WrapperRspEntity> forgetPwd(String phone, String pwd, String verifyCode) {
return mHttpHelper.forgetPwd(phone,pwd,verifyCode);
}
@Override
public Flowable<WrapperRspEntity<LoginBean>> autoLogin(String ssid) {
return mHttpHelper.autoLogin(ssid);
}
@Override
public Flowable<WrapperRspEntity<LoginPrizeBean>> loginPrize(String ssid) {
return mHttpHelper.loginPrize(ssid);
}
@Override
public Flowable<WrapperRspEntity<WawaBean>> fetchWawaPrizeDeatil(int roomId , String ssid) {
return mHttpHelper.fetchWawaPrizeDeatil(roomId , ssid);
}
@Override
public Flowable<WrapperRspEntity<BannerWrapBean>> fetchBanners(String ssid , String platform) {
return mHttpHelper.fetchBanners(ssid,platform);
}
@Override
public Flowable<WrapperRspEntity<RecordWrapBean>> fetchBroadCasts(String ssid) {
return mHttpHelper.fetchBroadCasts(ssid);
}
@Override
public Flowable<WrapperRspEntity<UserWrapBean>> fetchUserProfile(String ssid) {
return mHttpHelper.fetchUserProfile(ssid);
}
@Override
public Flowable<WrapperRspEntity<PayWrapBean>> fetchRechareList(String ssid, String platform) {
return mHttpHelper.fetchRechareList(ssid,platform);
}
@Override
public Flowable<WrapperRspEntity<PrizeWrapBean>> fetchGameResult(String ssid, String orderId, int status) {
return mHttpHelper.fetchGameResult(ssid,orderId,status);
}
@Override
public Flowable<WrapperRspEntity<PrizeWrapBean>> fetchPrizeLists(String ssid) {
return mHttpHelper.fetchPrizeLists(ssid);
}
@Override
public Flowable<WrapperRspEntity<AppBean>> fetchAppInitConfig(int version, String platform, String channel) {
return mHttpHelper.fetchAppInitConfig(version,platform,channel);
}
@Override
public Flowable<WrapperRspEntity<RoomWrapBean>> fetchRooms(String ssid) {
return mHttpHelper.fetchRooms(ssid);
}
@Override
public Flowable<WrapperRspEntity> logout(String ssid) {
return mHttpHelper.logout(ssid);
}
@Override
public Flowable<WrapperRspEntity<RoomV2WrapBean>> fetchRoomsV2(String ssid, String platform) {
return mHttpHelper.fetchRoomsV2(ssid,platform);
}
@Override
public Flowable<WrapperRspEntity<BoardBean>> roomPay(String token, String session_id, String confirm, String time_stamp, String room_id) {
return mHttpHelper.roomPay(token,session_id,confirm,time_stamp,room_id);
}
@Override
public Flowable<WrapperRspEntity> reservationResult(String token, String room_id) {
return mHttpHelper.reservationResult(token,room_id);
}
@Override
public Flowable<WrapperRspEntity<RoomWinWrapperBean>> getRoomWinRecord(String token, String room_id, String page, String pageSize) {
return mHttpHelper.getRoomWinRecord(token,room_id,page,pageSize);
}
@Override
public Flowable<WrapperRspEntity<GameWrapBean>> fetchPersonalGameRecords(String token, String page, String pageSize) {
return mHttpHelper.fetchPersonalGameRecords(token,page,pageSize);
}
@Override
public Flowable<WrapperRspEntity<GameWrapBean>> fetchPersonalSuccessRecords(String token, String page, String pageSize) {
return mHttpHelper.fetchPersonalSuccessRecords(token,page,pageSize);
}
@Override
public Flowable<WrapperRspEntity<UpgradeBean>> getUpgradeInfo(String token, int version, String platform) {
return mHttpHelper.getUpgradeInfo(token,version,platform);
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import java.util.List;
/**
* Created by codeest on 16/8/18.
*/
public class CommentBean {
/**
* author : xiaowei
* content : 正解啊,比如中午登机,早上不吃空腹上,到时候飞机餐就算是两个圆圆的小面包都吃得有滋有味!开始怀疑,到底是飞机旅行、真是高大上呀!??哈哈…我见不少人特意留着飞机上发的食物带回去,落地后送人吃,很拽的来一句:飞机食品哦!…笑得不行鸟
* avatar : http://pic1.zhimg.com/da8e974dc_im.jpg
* time : 1413603692
* reply_to : {"content":"习惯就好了。。 国内的航空公司基本都刷过。。 掌握了\u201c让飞机餐变得非常好吃\u201d的秘诀 同学们准备好 秘诀就是〈饿半天肚子登机〉 等到你吃到飞机餐那刻会泪流满面\u2026\u2026 好吧说了那么多其实也就因为六个字 没钱\u2026没钱\u2026没钱 所以,努力当大爷自己买小飞机吧!","status":0,"id":545589,"author":"Samuelback"}
* id : 545838
* likes : 2
*/
private List<CommentsBean> comments;
public List<CommentsBean> getComments() {
return comments;
}
public void setComments(List<CommentsBean> comments) {
this.comments = comments;
}
public static class CommentsBean {
private String author;
private String content;
private String avatar;
private int time;
/**
* content : 习惯就好了。。 国内的航空公司基本都刷过。。 掌握了“让飞机餐变得非常好吃”的秘诀 同学们准备好 秘诀就是〈饿半天肚子登机〉 等到你吃到飞机餐那刻会泪流满面…… 好吧说了那么多其实也就因为六个字 没钱…没钱…没钱 所以,努力当大爷自己买小飞机吧!
* status : 0
* id : 545589
* author : Samuelback
*/
private ReplyToBean reply_to;
private int id;
private int likes;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public ReplyToBean getReply_to() {
return reply_to;
}
public void setReply_to(ReplyToBean reply_to) {
this.reply_to = reply_to;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getLikes() {
return likes;
}
public void setLikes(int likes) {
this.likes = likes;
}
public static class ReplyToBean {
private String content;
private int status;
private int id;
private String author;
private int expandState = 0;
public int getExpandState() {
return expandState;
}
public void setExpandState(int expandState) {
this.expandState = expandState;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import java.util.List;
/**
* Created by codeest on 16/8/12.
*/
public class DailyBeforeListBean {
/**
* date : 20160812
* stories : [{"images":["http://pic4.zhimg.com/ffdf4a47a087c3968e5142d8b73fcf2b.jpg"],"type":0,"id":8668470,"ga_prefix":"081222","title":"小事 · 骗了骗子的钱"},{"images":["http://pic1.zhimg.com/5601592dcd487f70f72a63fa518c1590.jpg"],"type":0,"id":8679591,"ga_prefix":"081221","title":"看起来很「割裂」的故事,其实是有意为之"},{"title":"整点儿奥运 · 为一位明天凌晨参加奥运比赛的知乎用户加油","ga_prefix":"081220","images":["http://pic3.zhimg.com/78d776b567dd41950f525fce3ddca232.jpg"],"multipic":true,"type":0,"id":8679315},{"images":["http://pic1.zhimg.com/25abcbf1da060f9bf3de64859dcaac74.jpg"],"type":0,"id":8679678,"ga_prefix":"081219","title":"为什么学习英语的过程中,很长时间一直会受到汉语干扰?"},{"title":"一个值得全世界起立致敬的男人:因为我们再也不沉默了","ga_prefix":"081218","images":["http://pic3.zhimg.com/a036e6f2a4c94a011c5b0335bd84868e.jpg"],"multipic":true,"type":0,"id":8679133},{"images":["http://pic3.zhimg.com/1ab4cbe65f5e8295106288106f904376.jpg"],"type":0,"id":8679125,"ga_prefix":"081217","title":"知乎好问题 · 一天吃几个鸡蛋比较好?"},{"images":["http://pic2.zhimg.com/f02fc1ff2ca9b2de687953f2e2d0bc91.jpg"],"type":0,"id":8651703,"ga_prefix":"081216","title":"哥特式建筑,是一种什么样的存在?"},{"images":["http://pic2.zhimg.com/c64a5c2a63d04a989fdd58b9f35ffe41.jpg"],"type":0,"id":8676431,"ga_prefix":"081215","title":"地产入门:商业地产和住宅地产到底有什么区别?"},{"images":["http://pic1.zhimg.com/c41a49510ca44a620e15d3f8bdf42420.jpg"],"type":0,"id":8673887,"ga_prefix":"081214","title":"天才都有点神经质?嗯\u2026\u2026好像是的"},{"images":["http://pic4.zhimg.com/13471bb8c17a7e98f7e4677fd06a7287.jpg"],"type":0,"id":8678092,"ga_prefix":"081213","title":"为了娶到女神,我只好把她的恋女癖爸爸杀了"},{"title":"大误 · 小智的臂力简直可怕","ga_prefix":"081212","images":["http://pic4.zhimg.com/d60a9322c988a8b7a1f49933d33f120f.jpg"],"multipic":true,"type":0,"id":8674919},{"images":["http://pic4.zhimg.com/7d04382b9e4a5b997a0575a4b126348b.jpg"],"type":0,"id":8670773,"ga_prefix":"081211","title":"堵车已经够烦了,为什么还要收「拥堵费」?"},{"images":["http://pic1.zhimg.com/f8184a6b56fc0ea3bb16889848a36200.jpg"],"type":0,"id":8676516,"ga_prefix":"081210","title":"想改变世界只差一个工程师?不如自己做「全栈工程师」"},{"images":["http://pic4.zhimg.com/ff9f92f6ce6bc0e2a16e41686902bdbb.jpg"],"type":0,"id":8669401,"ga_prefix":"081209","title":"抑郁症的发病机制都没弄清,人类是怎么发现抗抑郁药的?"},{"images":["http://pic2.zhimg.com/07ee4967655f3ef2b29d43abc4e09365.jpg"],"type":0,"id":8674728,"ga_prefix":"081208","title":"你可能不了解的世界第一:中国女子扫雷"},{"title":"从此以后见到每一条河,我都如数家珍","ga_prefix":"081207","images":["http://pic4.zhimg.com/0df540aa7b3076e51f93962bce306c93.jpg"],"multipic":true,"type":0,"id":8676539},{"images":["http://pic1.zhimg.com/5b40c986acf759953a1f875837bb8600.jpg"],"type":0,"id":8676057,"ga_prefix":"081207","title":"Facebook 分析师列给你,7 周入行互联网数据分析教程"},{"images":["http://pic3.zhimg.com/9eb54944dc591df518cf63a1f40f09b6.jpg"],"type":0,"id":8676049,"ga_prefix":"081207","title":"苹果资深公关经理总结了十年来的经验,and, one more thing\u2026"},{"images":["http://pic4.zhimg.com/2c8a3f4d43d996807b258813e07e9c5b.jpg"],"type":0,"id":8676899,"ga_prefix":"081207","title":"读读日报 24 小时热门 TOP 5 · TFBOYS 三周年"},{"images":["http://pic3.zhimg.com/bd493885f45a5a06a26259d7278a621e.jpg"],"type":0,"id":8674308,"ga_prefix":"081206","title":"瞎扯 · 如何正确地吐槽"}]
*/
private String date;
/**
* images : ["http://pic4.zhimg.com/ffdf4a47a087c3968e5142d8b73fcf2b.jpg"]
* type : 0
* id : 8668470
* ga_prefix : 081222
* title : 小事 · 骗了骗子的钱
*/
private List<DailyListBean.StoriesBean> stories;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public List<DailyListBean.StoriesBean> getStories() {
return stories;
}
public void setStories(List<DailyListBean.StoriesBean> stories) {
this.stories = stories;
}
// public static class StoriesBean {
// private int type;
// private int id;
// private String ga_prefix;
// private String title;
// private List<String> images;
//
// public int getType() {
// return type;
// }
//
// public void setType(int type) {
// this.type = type;
// }
//
// public int getId() {
// return id;
// }
//
// public void setId(int id) {
// this.id = id;
// }
//
// public String getGa_prefix() {
// return ga_prefix;
// }
//
// public void setGa_prefix(String ga_prefix) {
// this.ga_prefix = ga_prefix;
// }
//
// public String getTitle() {
// return title;
// }
//
// public void setTitle(String title) {
// this.title = title;
// }
//
// public List<String> getImages() {
// return images;
// }
//
// public void setImages(List<String> images) {
// this.images = images;
// }
// }
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import java.util.List;
/**
* Created by codeest on 16/8/12.
*/
public class DailyListBean {
/**
* date : 20160811
* stories : [{"images":["http://pic4.zhimg.com/95625b7bacfff0f6b1105ff3e71f37cb.jpg"],"type":0,"id":8675619,"ga_prefix":"081122","title":"小事 · 我在戒网瘾学校里经历了什么"},{"title":"有人看到情欲,有人看到暗黑,有人认为这是年度最值得期待的佳作","ga_prefix":"081121","images":["http://pic4.zhimg.com/67cbc856dbed2503dffe5afbdcccfc57.jpg"],"multipic":true,"type":0,"id":8675273},{"title":"整点儿奥运 · 别走啊,我用锅铲跟你打,行吗?","ga_prefix":"081120","images":["http://pic4.zhimg.com/af18477180b614d5f438c2dd06496bb3.jpg"],"multipic":true,"type":0,"id":8673847},{"title":"照片调色加俩黑条 = 电影感?一群导演和摄影师哭瞎","ga_prefix":"081119","images":["http://pic1.zhimg.com/6555bcf2b733a3cb0e26225ea5dcc548.jpg"],"multipic":true,"type":0,"id":8675601},{"images":["http://pic4.zhimg.com/c3fd1923a8f012b2a7770cffa6c8a0c3.jpg"],"type":0,"id":8675582,"ga_prefix":"081118","title":"性别不同,更有可能站在不同的「政」营?"},{"images":["http://pic2.zhimg.com/dc11586a263af5bbcfa27d7fd80bd835.jpg"],"type":0,"id":8671349,"ga_prefix":"081117","title":"知乎好问题 · 低学历是否比高学历更加会赚钱?"},{"title":"整个彩虹合唱团都出动了,只为让你唱好合唱","ga_prefix":"081116","images":["http://pic3.zhimg.com/d530aaba3304e52c8543a416e6d4670e.jpg"],"multipic":true,"type":0,"id":8664572},{"title":"柠檬 + 酸奶 + 冰淇淋,每一样都能让被蒸熟的我复活","ga_prefix":"081114","images":["http://pic2.zhimg.com/272d4bcd106271178620c864490c6039.jpg"],"multipic":true,"type":0,"id":8671431},{"images":["http://pic4.zhimg.com/944d3062d9709285763b276894679443.jpg"],"type":0,"id":8665792,"ga_prefix":"081112","title":"大误 · 我无法砸了我的手机"},{"images":["http://pic3.zhimg.com/92d67149451bfc24228e84b00dcdd316.jpg"],"type":0,"id":8673963,"ga_prefix":"081111","title":"有大公司 offer 却选择了小公司是为什么?"},{"images":["http://pic3.zhimg.com/3f734ae8eaa2c919f9df7bdadb258572.jpg"],"type":0,"id":8672587,"ga_prefix":"081110","title":"把加密算法本身保密起来,不就是绝对安全了?"},{"images":["http://pic4.zhimg.com/1818c8c204592c03d2322ee958261d4b.jpg"],"type":0,"id":8671284,"ga_prefix":"081109","title":"「孙杨夺冠把泳帽误扔泳池里以后,我发现我更喜欢他了」"},{"images":["http://pic4.zhimg.com/d2d586e6b82902c30a17605cdfb894ef.jpg"],"type":0,"id":8672664,"ga_prefix":"081108","title":"只是寄个快递,结果律师被「坑惨」了"},{"images":["http://pic4.zhimg.com/8adbdaad1daaad81e09cc55eb3a6b553.jpg"],"type":0,"id":8652559,"ga_prefix":"081107","title":"还在比较「唱功」的人,听不懂李宗盛"},{"images":["http://pic2.zhimg.com/efa0c4d9b0dba8d1b45fb9161bb9c9b1.jpg"],"type":0,"id":8672657,"ga_prefix":"081107","title":"有时也会迷惑,我到底是来种地,还是来读硕士的"},{"title":"吃河豚会死吗?不吃河豚会死吗?","ga_prefix":"081107","images":["http://pic4.zhimg.com/c11e628e679fa30b30a0103f757edadf.jpg"],"multipic":true,"type":0,"id":8655025},{"images":["http://pic4.zhimg.com/7eabe3ce21a0728cc7e149d7f92865f7.jpg"],"type":0,"id":8672907,"ga_prefix":"081107","title":"读读日报 24 小时热门 TOP 5 · 为什么孙杨总会被别人质疑「服药」"},{"images":["http://pic1.zhimg.com/00da4103ad41aa4f39118004a4dd7078.jpg"],"type":0,"id":8670451,"ga_prefix":"081106","title":"瞎扯 · 如何正确地吐槽"}]
* top_stories : [{"image":"http://pic4.zhimg.com/1f45c1ed56116f21955878dff00e8c37.jpg","type":0,"id":8673847,"ga_prefix":"081120","title":"整点儿奥运 · 别走啊,我用锅铲跟你打,行吗?"},{"image":"http://pic4.zhimg.com/8d962d0d877d42518a9e6f73fe35ac8b.jpg","type":0,"id":8664572,"ga_prefix":"081116","title":"整个彩虹合唱团都出动了,只为让你唱好合唱"},{"image":"http://pic1.zhimg.com/e73a48ac3c95f55c715d8625957808a4.jpg","type":0,"id":8671349,"ga_prefix":"081117","title":"知乎好问题 · 低学历是否比高学历更加会赚钱?"},{"image":"http://pic3.zhimg.com/eca053868591893a70e8a48a05979d46.jpg","type":0,"id":8671431,"ga_prefix":"081114","title":"柠檬 + 酸奶 + 冰淇淋,每一样都能让被蒸熟的我复活"},{"image":"http://pic1.zhimg.com/8504a2e5046bd33ca556daaaeb3981e8.jpg","type":0,"id":8671284,"ga_prefix":"081109","title":"「孙杨夺冠把泳帽误扔泳池里以后,我发现我更喜欢他了」"}]
*/
private String date;
/**
* images : ["http://pic4.zhimg.com/95625b7bacfff0f6b1105ff3e71f37cb.jpg"]
* type : 0
* id : 8675619
* ga_prefix : 081122
* title : 小事 · 我在戒网瘾学校里经历了什么
*/
private List<StoriesBean> stories;
/**
* image : http://pic4.zhimg.com/1f45c1ed56116f21955878dff00e8c37.jpg
* type : 0
* id : 8673847
* ga_prefix : 081120
* title : 整点儿奥运 · 别走啊,我用锅铲跟你打,行吗?
*/
private List<TopStoriesBean> top_stories;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public List<StoriesBean> getStories() {
return stories;
}
public void setStories(List<StoriesBean> stories) {
this.stories = stories;
}
public List<TopStoriesBean> getTop_stories() {
return top_stories;
}
public void setTop_stories(List<TopStoriesBean> top_stories) {
this.top_stories = top_stories;
}
public static class StoriesBean {
private int type;
private int id;
private String ga_prefix;
private String title;
private List<String> images;
private boolean readState;
public boolean getReadState() {
return readState;
}
public void setReadState(boolean readState) {
this.readState = readState;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getGa_prefix() {
return ga_prefix;
}
public void setGa_prefix(String ga_prefix) {
this.ga_prefix = ga_prefix;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<String> getImages() {
return images;
}
public void setImages(List<String> images) {
this.images = images;
}
}
public static class TopStoriesBean {
private String image;
private int type;
private int id;
private String ga_prefix;
private String title;
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getGa_prefix() {
return ga_prefix;
}
public void setGa_prefix(String ga_prefix) {
this.ga_prefix = ga_prefix;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
/**
* Created by codeest on 16/8/14.
*/
public class DetailExtraBean {
/**
* long_comments : 0
* popularity : 161
* short_comments : 19
* comments : 19
*/
private int long_comments;
private int popularity;
private int short_comments;
private int comments;
public int getLong_comments() {
return long_comments;
}
public void setLong_comments(int long_comments) {
this.long_comments = long_comments;
}
public int getPopularity() {
return popularity;
}
public void setPopularity(int popularity) {
this.popularity = popularity;
}
public int getShort_comments() {
return short_comments;
}
public void setShort_comments(int short_comments) {
this.short_comments = short_comments;
}
public int getComments() {
return comments;
}
public void setComments(int comments) {
this.comments = comments;
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
/**
* Created by codeest on 16/8/20.
*/
public class GankItemBean {
/**
* _id : 57b64b6d421aa93a804bea26
* createdAt : 2016-08-19T07:57:33.576Z
* desc : 8-19
* publishedAt : 2016-08-19T11:26:30.163Z
* source : chrome
* type : 福利
* url : http://ww4.sinaimg.cn/large/610dc034jw1f6yq5xrdofj20u00u0aby.jpg
* used : true
* who : daimajia
*/
private String _id;
private String createdAt;
private String desc;
private String publishedAt;
private String source;
private String type;
private String url;
private boolean used;
private String who;
private int height;
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getPublishedAt() {
return publishedAt;
}
public void setPublishedAt(String publishedAt) {
this.publishedAt = publishedAt;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public boolean isUsed() {
return used;
}
public void setUsed(boolean used) {
this.used = used;
}
public String getWho() {
return who;
}
public void setWho(String who) {
this.who = who;
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
/**
* Created by codeest on 2016/9/1.
*/
public class GankSearchItemBean {
/**
* desc : listview的折叠效果
* ganhuo_id : 56cc6d1d421aa95caa7076fa
* publishedAt : 2015-07-17T03:43:22.395000
* readability : 123
* type : Android
* url : https://github.com/dodola/ListItemFold
* who : Jason
*/
private String desc;
private String ganhuo_id;
private String publishedAt;
private String readability;
private String type;
private String url;
private String who;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getGanhuo_id() {
return ganhuo_id;
}
public void setGanhuo_id(String ganhuo_id) {
this.ganhuo_id = ganhuo_id;
}
public String getPublishedAt() {
return publishedAt;
}
public void setPublishedAt(String publishedAt) {
this.publishedAt = publishedAt;
}
public String getReadability() {
return readability;
}
public void setReadability(String readability) {
this.readability = readability;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getWho() {
return who;
}
public void setWho(String who) {
this.who = who;
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
/**
* Created by codeest on 16/11/27.
*/
public class GoldListBean {
private String objectId;
private String createdAt;
private String title;
private int collectionCount;
private int commentsCount;
private String url;
private GoldListUserBean user;
private GoldListScreenshotBean screenshot;
public static class GoldListUserBean {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
public static class GoldListScreenshotBean {
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public GoldListScreenshotBean getScreenshot() {
return screenshot;
}
public void setCollectionCount(int collectionCount) {
this.collectionCount = collectionCount;
}
public GoldListUserBean getUser() {
return user;
}
public void setCommentsCount(int commentsCount) {
this.commentsCount = commentsCount;
}
public int getCollectionCount() {
return collectionCount;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public int getCommentsCount() {
return commentsCount;
}
public void setScreenshot(GoldListScreenshotBean screenshot) {
this.screenshot = screenshot;
}
public String getCreatedAt() {
return createdAt;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public void setUser(GoldListUserBean user) {
this.user = user;
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import android.os.Parcel;
import android.os.Parcelable;
import io.realm.RealmList;
import io.realm.RealmObject;
/**
* Created by codeest on 16/11/27.
*/
public class GoldManagerBean extends RealmObject implements Parcelable {
public GoldManagerBean() {
}
private RealmList<GoldManagerItemBean> managerList;
public RealmList<GoldManagerItemBean> getManagerList() {
return managerList;
}
public void setManagerList(RealmList<GoldManagerItemBean> managerList) {
this.managerList = managerList;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(this.managerList);
}
protected GoldManagerBean(Parcel in) {
this.managerList = new RealmList<>();
in.readList(this.managerList, GoldManagerItemBean.class.getClassLoader());
}
public GoldManagerBean(RealmList<GoldManagerItemBean> mList) {
this.managerList = mList;
}
public static final Creator<GoldManagerBean> CREATOR = new Creator<GoldManagerBean>() {
@Override
public GoldManagerBean createFromParcel(Parcel source) {
return new GoldManagerBean(source);
}
@Override
public GoldManagerBean[] newArray(int size) {
return new GoldManagerBean[size];
}
};
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import android.os.Parcel;
import android.os.Parcelable;
import io.realm.RealmObject;
/**
* Created by codeest on 16/12/1.
*/
public class GoldManagerItemBean extends RealmObject implements Parcelable {
private int index;
private boolean isSelect;
public GoldManagerItemBean () {
}
public GoldManagerItemBean (int index, boolean isSelect) {
this.index = index;
this.isSelect = isSelect;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public boolean getIsSelect() {
return isSelect;
}
public void setSelect(boolean select) {
isSelect = select;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.index);
dest.writeByte(this.isSelect ? (byte) 1 : (byte) 0);
}
protected GoldManagerItemBean(Parcel in) {
this.index = in.readInt();
this.isSelect = in.readByte() != 0;
}
public static final Creator<GoldManagerItemBean> CREATOR = new Creator<GoldManagerItemBean>() {
@Override
public GoldManagerItemBean createFromParcel(Parcel source) {
return new GoldManagerItemBean(source);
}
@Override
public GoldManagerItemBean[] newArray(int size) {
return new GoldManagerItemBean[size];
}
};
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import java.util.List;
/**
* Created by codeest on 16/8/21.
*/
public class HotListBean {
/**
* news_id : 8701066
* url : http://news-at.zhihu.com/api/2/news/8701066
* thumbnail : http://pic1.zhimg.com/f5169eb70e3a6823737dc55fbab051c0.jpg
* title : 瞎扯 · 如何正确地吐槽
*/
private List<RecentBean> recent;
public List<RecentBean> getRecent() {
return recent;
}
public void setRecent(List<RecentBean> recent) {
this.recent = recent;
}
public static class RecentBean {
private int news_id;
private String url;
private String thumbnail;
private String title;
private boolean readState;
public boolean getReadState() {
return readState;
}
public void setReadState(boolean readState) {
this.readState = readState;
}
public int getNews_id() {
return news_id;
}
public void setNews_id(int news_id) {
this.news_id = news_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
/**
* Created by Administrator on 2017/12/16.
*/
public class MenuBean {
private String title;
private int iconSelected;
private int iconUnSelected;
private String url;
public MenuBean(String title, int iconSelected, int iconUnSelected , String url) {
this.title = title;
this.url = url;
this.iconSelected = iconSelected;
this.iconUnSelected = iconUnSelected;
}
public MenuBean() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getIconSelected() {
return iconSelected;
}
public void setIconSelected(int iconSelected) {
this.iconSelected = iconSelected;
}
public int getIconUnSelected() {
return iconUnSelected;
}
public void setIconUnSelected(int iconUnSelected) {
this.iconUnSelected = iconUnSelected;
}
@Override
public String toString() {
return "MenuBean{" +
"title='" + title + '\'' +
", url='" + url + '\'' +
", iconSelected=" + iconSelected +
", iconUnSelected=" + iconUnSelected +
'}';
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
/**
* Created by codeest on 16/12/22.
*/
public class NodeBean {
/**
* id : 300
* name : programmer
* url : http://www.v2ex.com/go/programmer
* title : 程序员
* title_alternative : Programmer
* topics : 14214
* stars : 2806
* header : While code monkeys are not eating bananas, they're coding.
* footer : null
* created : 1293396163
* avatar_normal : //cdn.v2ex.co/navatar/94f6/d7e0/300_mini.png?m=1482295939
* avatar_normal : //cdn.v2ex.co/navatar/94f6/d7e0/300_normal.png?m=1482295939
* avatar_large : //cdn.v2ex.co/navatar/94f6/d7e0/300_large.png?m=1482295939
*/
private String title;
private int topics;
private int stars;
private String header;
private String avatar_normal;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getTopics() {
return topics;
}
public void setTopics(int topics) {
this.topics = topics;
}
public int getStars() {
return stars;
}
public void setStars(int stars) {
this.stars = stars;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getavatar_normal() {
return avatar_normal;
}
public void setavatar_normal(String avatar_normal) {
this.avatar_normal = avatar_normal;
}
}
package com.zhuawawa.maile.vediozhuawawa.model.bean;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by codeest on 16/12/22.
*/
public class NodeListBean implements Parcelable{
/**
* id : 328643
* title : django 的视图函数执行是同步的还是异步的?
* url : http://www.v2ex.com/t/328643
* content : 比如两个用户同时访问一个 url , django 后台会调用相应的视图函数处理。那么这个处理过程是先完成第一个用户的 request-response 周期后再执行第二个用户的请求呢?还是同时执行两个用户的 request 请求?
* content_rendered : 比如两个用户同时访问一个 url , django 后台会调用相应的视图函数处理。那么这个处理过程是先完成第一个用户的 request-response 周期后再执行第二个用户的请求呢?还是同时执行两个用户的 request 请求?
* replies : 4
* member : {"id":206547,"username":"chuanqirenwu","tagline":"None","avatar_normal":"//cdn.v2ex.co/gravatar/a1ceb1d16d738ce96a1f8dff4c2ed803?s=24&d=retro","avatar_normal":"//cdn.v2ex.co/gravatar/a1ceb1d16d738ce96a1f8dff4c2ed803?s=48&d=retro","avatar_large":"//cdn.v2ex.co/gravatar/a1ceb1d16d738ce96a1f8dff4c2ed803?s=73&d=retro"}
* node : {"id":90,"name":"python","title":"Python","title_alternative":"Python","url":"http://www.v2ex.com/go/python","topics":6163,"avatar_normal":"//cdn.v2ex.co/navatar/8613/985e/90_mini.png?m=1481194344","avatar_normal":"//cdn.v2ex.co/navatar/8613/985e/90_normal.png?m=1481194344","avatar_large":"//cdn.v2ex.co/navatar/8613/985e/90_large.png?m=1481194344"}
* created : 1482132218
* last_modified : 1482132218
* last_touched : 1482078362
*/
private String id;
private String title;
private String content_rendered;
private int replies;
private MemberBean member;
private NodeBean node;
private int created;
private int last_modified;
public static class MemberBean implements Parcelable{
/**
* id : 206547
* username : chuanqirenwu
* tagline : None
* avatar_normal : //cdn.v2ex.co/gravatar/a1ceb1d16d738ce96a1f8dff4c2ed803?s=24&d=retro
* avatar_normal : //cdn.v2ex.co/gravatar/a1ceb1d16d738ce96a1f8dff4c2ed803?s=48&d=retro
* avatar_large : //cdn.v2ex.co/gravatar/a1ceb1d16d738ce96a1f8dff4c2ed803?s=73&d=retro
*/
private String username;
private String avatar_normal;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getavatar_normal() {
return avatar_normal;
}
public void setavatar_normal(String avatar_normal) {
this.avatar_normal = avatar_normal;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.username);
dest.writeString(this.avatar_normal);
}
public MemberBean() {
}
protected MemberBean(Parcel in) {
this.username = in.readString();
this.avatar_normal = in.readString();
}
public static final Creator<MemberBean> CREATOR = new Creator<MemberBean>() {
@Override
public MemberBean createFromParcel(Parcel source) {
return new MemberBean(source);
}
@Override
public MemberBean[] newArray(int size) {
return new MemberBean[size];
}
};
}
public static class NodeBean implements Parcelable{
private String title;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.title);
}
public NodeBean() {
}
protected NodeBean(Parcel in) {
this.title = in.readString();
}
public static final Creator<NodeBean> CREATOR = new Creator<NodeBean>() {
@Override
public NodeBean createFromParcel(Parcel source) {
return new NodeBean(source);
}
@Override
public NodeBean[] newArray(int size) {
return new NodeBean[size];
}
};
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
public String getTitle() {
return title;
}
public int getCreated() {
return created;
}
public String getId() {
return id;
}
public int getLast_modified() {
return last_modified;
}
public int getReplies() {
return replies;
}
public MemberBean getMember() {
return member;
}
public String getContent_rendered() {
return content_rendered;
}
public void setTitle(String title) {
this.title = title;
}
public void setContent_rendered(String content_rendered) {
this.content_rendered = content_rendered;
}
public void setCreated(int created) {
this.created = created;
}
public void setId(String id) {
this.id = id;
}
public void setLast_modified(int last_modified) {
this.last_modified = last_modified;
}
public void setMember(MemberBean member) {
this.member = member;
}
public void setReplies(int replies) {
this.replies = replies;
}
public NodeBean getNode() {
return node;
}
public void setNode(NodeBean node) {
this.node = node;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
dest.writeString(this.title);
dest.writeString(this.content_rendered);
dest.writeInt(this.replies);
dest.writeParcelable(this.member, flags);
dest.writeParcelable(this.node, flags);
dest.writeInt(this.created);
dest.writeInt(this.last_modified);
}
public NodeListBean() {
}
protected NodeListBean(Parcel in) {
this.id = in.readString();
this.title = in.readString();
this.content_rendered = in.readString();
this.replies = in.readInt();
this.member = in.readParcelable(MemberBean.class.getClassLoader());
this.node = in.readParcelable(NodeBean.class.getClassLoader());
this.created = in.readInt();
this.last_modified = in.readInt();
}
public static final Creator<NodeListBean> CREATOR = new Creator<NodeListBean>() {
@Override
public NodeListBean createFromParcel(Parcel source) {
return new NodeListBean(source);
}
@Override
public NodeListBean[] newArray(int size) {
return new NodeListBean[size];
}
};
}
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment