[
  {
    "path": "README.md",
    "content": "# bilisoleil\nAn unofficial bilibili client for android \n\n## Remark\n\n该项目为仿b站项目的kotlin版，大部分界面采用kotlin编程，由于本人水平有限，有些kotlin写法不规范，后期有时间会逐步完善，和\n原项目一样采用rxjava2+okhttp+retrofit+mvp+dagger2。\n\n#### java版地址：[bilisoleil](https://github.com/yoyiyi/bilisoleil)\n#### kotlin版地址：[bilisoleil-kotlin](https://github.com/yoyiyi/bilisoleil-kotlin)\n\n## Screenshots\n\n<a href=\"art/en (26).png\"><img src=\"art/en (26).png\" width=\"30%\"/></a> \n<a href=\"art/en (3).png\"><img src=\"art/en (3).png\" width=\"30%\"/></a>\n<a href=\"art/en (8).png\"><img src=\"art/en (8).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (22).png\"><img src=\"art/en (22).png\" width=\"30%\"/></a> \n<a href=\"art/en (1).png\"><img src=\"art/en (1).png\" width=\"30%\"/></a>\n<a href=\"art/en (2).png\"><img src=\"art/en (2).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (4).png\"><img src=\"art/en (4).png\" width=\"30%\"/></a> \n<a href=\"art/en (5).png\"><img src=\"art/en (5).png\" width=\"30%\"/></a>\n<a href=\"art/en (6).png\"><img src=\"art/en (6).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (7).png\"><img src=\"art/en (7).png\" width=\"30%\"/></a> \n<a href=\"art/en (10).png\"><img src=\"art/en (10).png\" width=\"30%\"/></a>\n<a href=\"art/en (9).png\"><img src=\"art/en (9).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (11).png\"><img src=\"art/en (11).png\" width=\"30%\"/></a> \n<a href=\"art/en (12).png\"><img src=\"art/en (12).png\" width=\"30%\"/></a>\n<a href=\"art/en (13).png\"><img src=\"art/en (13).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (14).png\"><img src=\"art/en (14).png\" width=\"30%\"/></a> \n<a href=\"art/en (15).png\"><img src=\"art/en (15).png\" width=\"30%\"/></a>\n<a href=\"art/en (16).png\"><img src=\"art/en (16).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (17).png\"><img src=\"art/en (17).png\" width=\"30%\"/></a> \n<a href=\"art/en (18).png\"><img src=\"art/en (18).png\" width=\"30%\"/></a>\n<a href=\"art/en (19).png\"><img src=\"art/en (19).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (20).png\"><img src=\"art/en (20).png\" width=\"30%\"/></a> \n<a href=\"art/en (21).png\"><img src=\"art/en (21).png\" width=\"30%\"/></a>\n<a href=\"art/en (22).png\"><img src=\"art/en (22).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (23).png\"><img src=\"art/en (23).png\" width=\"30%\"/></a> \n<a href=\"art/en (24).png\"><img src=\"art/en (24).png\" width=\"30%\"/></a>\n<a href=\"art/en (25).png\"><img src=\"art/en (25).png\" width=\"30%\"/></a>\n\n<a href=\"art/en (27).png\"><img src=\"art/en (27).png\" width=\"30%\"/></a> \n<a href=\"art/en (28).png\"><img src=\"art/en (28).png\" width=\"30%\"/></a>\n<a href=\"art/en (30).png\"><img src=\"art/en (30).png\" width=\"30%\"/></a>\n\n![](https://github.com/yoyiyi/bilisoleil/blob/master/art/en%20(29).png?raw=true)\n\n## Thanks to the open source project\n\n* [bilibili-android-client](https://github.com/HotBitmapGG/bilibili-android-client)\n* [RxJava](https://github.com/ReactiveX/RxJava)\n* [RxAndroid](https://github.com/ReactiveX/RxAndroid)\n* [RxBinding](https://github.com/JakeWharton/RxBinding)\n* [RxLifecycle](https://github.com/trello/RxLifecycle)\n* [okhttp](https://github.com/square/okhttp)\n* [dagger](https://github.com/square/dagger)\n* [retrofit](https://github.com/square/retrofit)\n* [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)\n* [ijkplayer](https://github.com/Bilibili/ijkplayer)\n* [DanmakuFlameMaster](https://github.com/Bilibili/DanmakuFlameMaster)\n* [butterknife](https://github.com/JakeWharton/butterknife)\n* [glide](https://github.com/bumptech/glide)\n* [MaterialSearchView](https://github.com/MiguelCatalan/MaterialSearchView)\n* [FlycoTabLayout](https://github.com/H07000223/FlycoTabLayout)\n* [FlowLayout](https://github.com/hongyangAndroid/FlowLayout)\n* [banner](https://github.com/youth5201314/banner)\n\n## License\n\nCopyright 2017 yoyiyi\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\napply plugin: 'kotlin-android'\n\napply plugin: 'kotlin-android-extensions'\n\nandroid {\n    compileSdkVersion 25\n    buildToolsVersion '26.0.2'\n    defaultConfig {\n        applicationId \"com.yoyiyi.soleil\"\n        minSdkVersion 17\n        targetSdkVersion 25\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n        multiDexEnabled true\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nkapt {\n    generateStubs = true\n}\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {\n        exclude group: 'com.android.support', module: 'support-annotations'\n    })\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version\"\n    implementation 'com.android.support:appcompat-v7:25.4.0'\n    testImplementation 'junit:junit:4.12'\n    implementation 'com.android.support.constraint:constraint-layout:1.0.2'\n    //anko\n  //  compile \"org.jetbrains.anko:anko-common:0.9.1a\"\n  //  compile \"org.jetbrains.anko:anko-sdk15:0.9.1a\"\n    compile \"org.jetbrains.anko:anko:0.10.1\"\n    compile \"com.android.support:multidex:1.0.1\"\n    //ui\n    compile 'com.android.support:design:25.4.0'\n    compile 'com.android.support:recyclerview-v7:25.4.0'\n    compile 'com.android.support:cardview-v7:25.4.0'\n    //rxjava2\n    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'\n    //compile 'io.reactivex.rxjava2:rxkotlin:2.1.0'\n    compile 'io.reactivex.rxjava2:rxjava:2.0.8'\n    //permissions\n    compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'\n    //dagger2\n    compile 'com.google.dagger:dagger:2.10'\n    kapt 'com.google.dagger:dagger-compiler:2.10'\n    //glide\n    compile 'com.github.bumptech.glide:glide:3.7.0'\n    compile 'jp.wasabeef:glide-transformations:2.0.2'\n    //network\n    compile 'com.squareup.okhttp3:okhttp:3.7.0'\n    compile 'com.squareup.okhttp3:logging-interceptor:3.7.0'\n    compile 'com.squareup.retrofit2:retrofit:2.2.0'\n    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'\n    compile 'com.squareup.retrofit2:converter-gson:2.2.0'\n    //rxbinding\n    compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'\n    //rxlifecycle\n    compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'\n    compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1'\n    //Flycotablayout\n    compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'\n    compile 'com.github.hymanme.tagflowlayout:tagflowlayout:0.2.2'\n    //轮播条\n    compile 'com.youth.banner:banner:1.4.9'\n    //搜索框\n    compile 'com.miguelcatalan:materialsearchview:1.4.0'\n    //BaseRecyclerViewAdapterHelper\n    compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.16'\n    compile 'com.miguelcatalan:materialsearchview:1.4.0'\n    //ijk\n    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.0'\n    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.0'\n    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.0'\n    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.0'\n    //烈焰弹幕使\n    compile 'com.github.ctiao:DanmakuFlameMaster:0.5.6'\n    //调试工具\n    compile 'com.facebook.stetho:stetho:1.4.2'\n    compile 'com.facebook.stetho:stetho-okhttp3:1.4.2'\n    compile 'com.orhanobut:logger:1.15'\n    compile files('libs/ShareSDK-Wechat-Moments-2.8.3.jar')\n    compile files('libs/ShareSDK-Wechat-Favorite-2.8.3.jar')\n    compile files('libs/ShareSDK-Wechat-Core-2.8.3.jar')\n    compile files('libs/ShareSDK-Wechat-2.8.3.jar')\n    compile files('libs/ShareSDK-Twitter-2.8.3.jar')\n    compile files('libs/ShareSDK-TencentWeibo-2.8.3.jar')\n    compile files('libs/ShareSDK-SinaWeibo-2.8.3.jar')\n    compile files('libs/ShareSDK-ShortMessage-2.8.3.jar')\n    compile files('libs/ShareSDK-QZone-2.8.3.jar')\n    compile files('libs/ShareSDK-QQ-2.8.3.jar')\n    compile files('libs/ShareSDK-Facebook-2.8.3.jar')\n    compile files('libs/ShareSDK-Email-2.8.3.jar')\n    compile files('libs/ShareSDK-Core-2.8.3.jar')\n    compile files('libs/MobTools-2017.0412.1554.jar')\n    compile files('libs/MobCommons-2017.0412.1554.jar')\n    compile 'org.jsoup:jsoup:1.10.3'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in D:\\MySoft\\Android\\SDK/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "app/src/androidTest/java/com/yoyiyi/soleil/ExampleInstrumentedTest.kt",
    "content": "package com.soleil.bilisoleil\n\nimport android.support.test.InstrumentationRegistry\nimport android.support.test.runner.AndroidJUnit4\nimport org.junit.Assert.assertEquals\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getTargetContext()\n        assertEquals(\"com.soleil.bilisoleil\", appContext.packageName)\n    }\n}\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.yoyiyi.soleil\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>\n    <uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>\n    <uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n    <uses-permission android:name=\"android.permission.GET_TASKS\"/>\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>\n    <uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>\n    <uses-permission android:name=\"android.permission.MANAGE_ACCOUNTS\"/>\n    <uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>\n\n    <!-- 蓝牙分享所需的权限 -->\n    <uses-permission android:name=\"android.permission.BLUETOOTH\"/>\n    <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>\n\n    <application\n        android:name=\".App\"\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/BaseAppTheme\">\n        <activity\n            android:name=\"com.mob.tools.MobUIShell\"\n            android:configChanges=\"keyboardHidden|orientation|screenSize\"\n            android:screenOrientation=\"portrait\"\n            android:theme=\"@android:style/Theme.Translucent.NoTitleBar\"\n            android:windowSoftInputMode=\"stateHidden|adjustResize\">\n\n            <!-- QQ和QQ空间分享 QQ登录的回调必须要配置的 -->\n            <intent-filter>\n                <data android:scheme=\"tencent100371282\"/>\n\n                <action android:name=\"android.intent.action.VIEW\"/>\n\n                <category android:name=\"android.intent.category.BROWSABLE\"/>\n                <category android:name=\"android.intent.category.DEFAULT\"/>\n            </intent-filter>\n\n            <!-- 新浪微博客户端分享回调必须配置 -->\n            <intent-filter>\n                <action android:name=\"com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY\"/>\n\n                <category android:name=\"android.intent.category.DEFAULT\"/>\n            </intent-filter>\n        </activity>\n\n        <activity android:name=\".module.MainActivity\">\n            <!-- <intent-filter>\n                 <action android:name=\"android.intent.action.MAIN\"/>\n\n                 <category android:name=\"android.intent.category.LAUNCHER\"/>\n             </intent-filter>-->\n        </activity>\n        <activity android:name=\".module.SplashActivity\">\n\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n\n        <!-- 浏览器界面 -->\n        <activity\n            android:name=\".module.app.BrowerActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n\n        <!-- 全区排行 -->\n        <activity\n            android:name=\".module.region.AllRegionRankActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 全区排行 -->\n        <activity\n            android:name=\".module.app.LoginActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n\n        <activity\n            android:name=\".module.region.RegionTypeActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <activity\n            android:name=\".module.region.AdActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- vip -->\n        <activity\n            android:name=\".module.entrance.VipActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 离线缓存 -->\n        <activity\n            android:name=\".module.entrance.OfflineDownloadActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 话题中心 -->\n        <activity\n            android:name=\".module.discover.TopicCenterActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 活动中心 -->\n        <activity\n            android:name=\".module.discover.ActivityCenterActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 游戏中心 -->\n        <activity\n            android:name=\".module.discover.GameCenterActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <activity\n            android:name=\".module.recommend.AllStationRankActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n\n        <!-- 全部游戏 -->\n        <activity\n            android:name=\".module.discover.AllGameActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- vip -->\n        <activity\n            android:name=\".module.discover.InterestActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n\n        <!-- 番剧详情 -->\n        <activity\n            android:name=\".module.bangumi.BangumiDetailActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 番剧时间表 -->\n        <activity\n            android:name=\".module.bangumi.BangumiScheduleActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 番剧索引 -->\n        <activity\n            android:name=\".module.bangumi.BangumiIndexActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 全局搜索 -->\n        <activity\n            android:name=\".module.search.TotalSearchActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- up主详情 -->\n        <activity\n            android:name=\".module.app.up.UpDetailActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 搜索 -->\n        <activity\n            android:name=\".module.search.SearchActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n        <!-- 视频播放 -->\n        <activity\n            android:name=\".module.app.video.VideoPlayerActivity\"\n            android:configChanges=\"orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation\"\n            android:exported=\"false\"\n            android:label=\"@string/app_name\"\n            android:launchMode=\"singleTop\"\n            android:screenOrientation=\"landscape\"\n            android:theme=\"@style/Fullscreen\"\n            android:windowSoftInputMode=\"stateAlwaysHidden\"/>\n\n        <!-- 视频详情 -->\n        <activity\n            android:name=\".module.app.video.VideoDetailActivity\"\n            android:launchMode=\"singleTask\"\n            android:screenOrientation=\"portrait\"/>\n\n       <service android:name=\".utils.net.NetworkService\"/>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/assets/ShareSDK.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<DevInfor>\n    <!--\n    \t说明：\n    \t\n    \t1、表格中的第一项\n    \t\t<ShareSDK \n        \t\tAppKey=\"api20\" />\n    \t是必须的，其中的AppKey是您在ShareSDK上注册的开发者帐号的AppKey\n    \t\n    \t2、所有集成到您项目的平台都应该为其在表格中填写相对应的开发者信息，以新浪微博为例：\n    \t    <SinaWeibo\n                Id=\"1\"\n                SortId=\"1\"\n                AppKey=\"568898243\"\n                AppSecret=\"38a4f8204cc784f81f9f0daaf31e02e3\"\n                RedirectUrl=\"http://www.mob.com\"\n                Enable=\"true\" />\n    \t其中的SortId是此平台在分享列表中的位置，由开发者自行定义，可以是任何整型数字，数值越大\n    \t越靠后AppKey、AppSecret和RedirectUrl是您在新浪微博上注册开发者信息和应用后得到的信息\n    \tId是一个保留的识别符，整型，ShareSDK不使用此字段，供您在自己的项目中当作平台的识别符。\n    \tEnable字段表示此平台是否有效，布尔值，默认为true，如果Enable为false，即便平台的jar包\n    \t已经添加到应用中，平台实例依然不可获取。\n    \t\n    \t各个平台注册应用信息的地址如下：\n\t\t\t新浪微博        http://open.weibo.com\n\t\t\t微信好友        http://open.weixin.qq.com\n\t\t\tFacebook       https://developers.facebook.com\n\t\t\tTwitter        https://dev.twitter.com\n\t\t\t人人网          http://dev.renren.com\n\t\t\t开心网          http://open.kaixin001.com\n\t\t\t搜狐微博        http://open.t.sohu.com\n\t\t\t网易微博        http://open.t.163.com\n\t\t\t豆瓣           http://developers.douban.com\n\t\t\t\n\t\t\t有道云笔记      http://note.youdao.com/open/developguide.html#app\n\t\t\t印象笔记        https://dev.evernote.com/\n\t\t\tLinkedin       https://developer.linkedin.com\n\t\t\tFourSquare     https://developer.foursquare.com/\n\t\t\t搜狐随身看      https://open.sohu.com/\n\t\t\tFlickr         http://www.flickr.com/services/\n\t\t\tPinterest      http://developers.pinterest.com/\n\t\t\tTumblr         http://www.tumblr.com/developers\n\t\t\tDropbox        https://www.dropbox.com/developers\n\t\t\tInstagram      http://instagram.com/developer#\n\t\t\tVKontakte      http://vk.com/dev\n\t\t\t易信好友        http://open.yixin.im/\n\t\t\t明道\t           http://open.mingdao.com/\n\t\t\tLine           http://media.line.me/zh-hant/  https://developers.line.me\n\t\t\tPocket         http://getpocket.com/developer/apps/new\n\t\t\tKakaoTalk      https://developers.kakao.com/\n\t\t\tKakaoStory     https://developers.kakao.com/\n\t\t\tPlurk          http://www.plurk.com/API\n    -->\n    \n    <ShareSDK \n        AppKey = \"1e928cf3e0c78\"/> <!-- androidv1101 修改成你在sharesdk后台注册的应用的appkey\"-->//\n    \n    <!-- ShareByAppClient标识是否使用微博客户端分享，默认是false -->\n    <SinaWeibo\n        Id=\"1\"\n        SortId=\"1\"\n        AppKey=\"568898243\"\n        AppSecret=\"38a4f8204cc784f81f9f0daaf31e02e3\"\n        RedirectUrl=\"http://www.sharesdk.cn\"\n        ShareByAppClient=\"true\"\n        Enable=\"true\" />\n\n    <TencentWeibo\n        Id=\"2\" \n        SortId=\"2\"\n        AppKey=\"801307650\"\n        AppSecret=\"ae36f4ee3946e1cbb98d6965b0b2ff5c\"\n        RedirectUri=\"http://sharesdk.cn\"\n        Enable=\"true\" />\n    \n    <QZone\n        Id=\"3\"\n        SortId=\"3\"\n        AppId=\"100371282\"\n        AppKey=\"aed9b0303e3ed1e27bae87c33761161d\"\n        Enable=\"true\" />\n    \n    <!-- \n    \tWechat微信和WechatMoments微信朋友圈的appid是一样的；\n    \n                       注意：开发者不能用我们这两个平台的appid,否则分享不了\n    \n       \t  微信测试的时候，微信测试需要先签名打包出apk,\n\t\tsample测试微信，要先签名打包，keystore在sample项目中，密码123456\n\t\t\n\t\tBypassApproval是绕过审核的标记，设置为true后AppId将被忽略，故不经过\n\t\t审核的应用也可以执行分享，但是仅限于分享文字和图片，不能分享其他类型，\n\t\t默认值为false。此外，微信收藏不支持此字段。wx4868b35061f87885\n\t-->\n\t<!--要分享微信小应用程序时用userName,path-->\n    <Wechat\n        Id=\"4\"\n        SortId=\"4\"\n        AppId=\"wx4868b35061f87885\"\n        AppSecret=\"64020361b8ec4c99936c0e3999a9f249\"\n\t\tuserName=\"gh_afb25ac019c9\"\n\t\tpath=\"/page/API/pages/share/share\"\n        BypassApproval=\"false\"\n        Enable=\"true\" />\n    \n    <WechatMoments\n        Id=\"5\"\n        SortId=\"5\"\n        AppId=\"wx4868b35061f87885\"\n        AppSecret=\"64020361b8ec4c99936c0e3999a9f249\"\n        BypassApproval=\"false\"\n        Enable=\"true\" />\n        \n\t<WechatFavorite\n        Id=\"6\"\n        SortId=\"6\"\n        AppId=\"wx4868b35061f87885\"\n        AppSecret=\"64020361b8ec4c99936c0e3999a9f249\"\n        Enable=\"true\" />\n    \n\t<!-- ShareByAppClient标识是否使用微博客户端分享，默认是false -->\n\t<QQ\n        Id=\"7\"\n        SortId=\"7\"\n        AppId=\"100371282\"\n        AppKey=\"aed9b0303e3ed1e27bae87c33761161d\"\n        ShareByAppClient=\"true\"\n        Enable=\"true\" />\n    \n    <Facebook\n        Id=\"8\"\n        SortId=\"8\"\n        ConsumerKey=\"107704292745179\"\n        ConsumerSecret=\"38053202e1a5fe26c80c753071f0b573\"\n        RedirectUrl=\"http://mob.com\"\n\t\tShareByAppClient=\"true\"\n\t\tEnable=\"true\" />\n\n    <Twitter\n        Id=\"9\"\n        SortId=\"9\"\n        ConsumerKey=\"LRBM0H75rWrU9gNHvlEAA2aOy\"\n        ConsumerSecret=\"gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G\"\n        CallbackUrl=\"http://mob.com\"\n        Enable=\"true\" />\n    \n    <Renren\n        Id=\"10\"\n        SortId=\"10\"\n        AppId=\"226427\"\n        ApiKey=\"fc5b8aed373c4c27a05b712acba0f8c3\"\n        SecretKey=\"f29df781abdd4f49beca5a2194676ca4\"\n        Enable=\"true\" />\n    \n    <KaiXin\n        Id=\"11\"\n        SortId=\"11\"\n        AppKey=\"358443394194887cee81ff5890870c7c\"\n        AppSecret=\"da32179d859c016169f66d90b6db2a23\"\n        RedirectUri=\"http://www.sharesdk.cn\"\n        Enable=\"true\" />\n    \n    <Email\n        Id=\"12\" \n        SortId=\"12\"\n        Enable=\"true\" />\n    \n    <ShortMessage\n        Id=\"13\" \n        SortId=\"13\"\n        Enable=\"true\" />\n    \n    <Douban\n        Id=\"16\"\n        SortId=\"16\"\n        ApiKey=\"031a96a3aa8b28af094fc3eaffa17a0d\"\n        Secret=\"2e675e730571b75d\"\n        RedirectUri=\"http://mob.com\"\n        Enable=\"true\" />\n    \n    <YouDao\n        Id=\"17\"\n        SortId=\"17\"\n        HostType=\"product\"\n        ConsumerKey=\"dcde25dca105bcc36884ed4534dab940\"\n        ConsumerSecret=\"d98217b4020e7f1874263795f44838fe\"\n        RedirectUri=\"http://www.sharesdk.cn/\"\n        Enable=\"true\" />\n        \n    <!-- \n    \t在中国大陆，印象笔记有两个服务器，一个是沙箱（sandbox），一个是生产服务器（china）。\n    \t一般你注册应用，它会先让你使用sandbox，当你完成测试以后，可以到\n    \thttp://dev.yinxiang.com/support/上激活你的ConsumerKey，激活成功后，修改HostType\n    \t为china就好了。至于如果您申请的是国际版的印象笔记（Evernote），则其生产服务器类型为\n    \t“product”。\n    \t\n    \t如果目标设备上已经安装了印象笔记客户端，ShareSDK允许应用调用本地API来完成分享，但\n    \t是需要将应用信息中的“ShareByAppClient”设置为true，此字段默认值为false。\n    -->\n    <Evernote\n        Id=\"19\"\n        SortId=\"19\"\n        HostType=\"sandbox\"\n    \tConsumerKey=\"sharesdk-7807\"\n\t\tConsumerSecret=\"d05bf86993836004\"\n\t\tShareByAppClient=\"true\"\n\t\tEnable=\"true\" />\n    \n    <LinkedIn\n    \tId=\"20\"\n        SortId=\"20\"\n        ApiKey=\"ejo5ibkye3vo\"\n        SecretKey=\"cC7B2jpxITqPLZ5M\" \n        RedirectUrl=\"http://sharesdk.cn\"\n        Enable=\"true\" />\n    \n     <GooglePlus\n    \tId=\"21\"\n        SortId=\"21\"\n        ClientID=\"682795613743-cfo3a8r4va0ujja7qofr54hobt2kv3cq.apps.googleusercontent.com\"\n        RedirectUrl=\"http://localhost\"\n        ShareByAppClient = \"false\"\n        Enable=\"true\" />\n     \n     <FourSquare\n    \tId=\"22\"\n        SortId=\"22\"\n        ClientID=\"G0ZI20FM30SJAJTX2RIBGD05QV1NE2KVIM2SPXML2XUJNXEU\"\n        ClientSecret=\"3XHQNSMMHIFBYOLWEPONNV4DOTCDBQH0AEMVGCBG0MZ32XNU\"\n        RedirectUrl=\"http://www.sharesdk.cn\"\n        Enable=\"true\" />\n        \n\t<Pinterest\n    \tId=\"23\"\n        SortId=\"23\"\n        ClientId=\"1432928\"\n        Enable=\"true\" />\n     \n     <Flickr\n     \tId=\"24\"\n        SortId=\"24\"\n        ApiKey=\"33d833ee6b6fca49943363282dd313dd\"\n        ApiSecret=\"3a2c5b42a8fbb8bb\"\n        RedirectUri=\"http://www.sharesdk.cn\"\n        Enable=\"true\" />\n        \n    <Tumblr\n        Id=\"25\"\n        SortId=\"25\"\n        OAuthConsumerKey=\"2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM\"\n\t\tSecretKey=\"3Rt0sPFj7u2g39mEVB3IBpOzKnM3JnTtxX2bao2JKk4VV1gtNo\"\n\t\tCallbackUrl=\"http://sharesdk.cn\"\n        Enable=\"true\" />\n \n\t<Dropbox\n        Id=\"26\"\n        SortId=\"26\"\n        AppKey=\"i5vw2mex1zcgjcj\" \n\t\tAppSecret=\"3i9xifsgb4omr0s\"\n\t\tRedirectUri=\"https://www.sharesdk.cn\"\n        Enable=\"true\" />\n        \n    <VKontakte \n    \tId=\"27\"\n        SortId=\"27\"\n        ApplicationId=\"3921561\"\n        Enable=\"true\" />\n        \n    <Instagram \n    \tId=\"28\"\n        SortId=\"28\"\n        ClientId=\"ff68e3216b4f4f989121aa1c2962d058\"\n\t\tClientSecret=\"1b2e82f110264869b3505c3fe34e31a1\"\n\t\tRedirectUri=\"http://sharesdk.cn\"\n        Enable=\"true\" />\n    \n    <!-- \n    \tYixin易信和YixinMoments易信朋友圈的appid是一样的；\n    \n                       注意：开发者不能用我们这两个平台的appid,否则分享不了\n    \n       \t 易信测试的时候需要先签名打包出apk,\n\t\tsample测试易信，要先签名打包，keystore在sample项目中，密码123456\n\t\t\n\t\tBypassApproval是绕过审核的标记，设置为true后AppId将被忽略，故不经过\n\t\t审核的应用也可以执行分享，但是仅限于分享文字或图片，不能分享其他类型，\n\t\t默认值为false。\n\t-->\n\t<Yixin \n    \tId=\"29\"\n        SortId=\"29\"\n        AppId=\"yx0d9a9f9088ea44d78680f3274da1765f\"\n        BypassApproval=\"true\"\n        Enable=\"true\" />\n\t\n\t<YixinMoments\n    \tId=\"30\"\n        SortId=\"30\"\n        AppId=\"yx0d9a9f9088ea44d78680f3274da1765f\"\n        BypassApproval=\"true\"\n        Enable=\"true\" />\n\n\t<Mingdao\n    \tId=\"31\"\n        SortId=\"31\"\n        AppKey=\"EEEE9578D1D431D3215D8C21BF5357E3\"\n        AppSecret=\"5EDE59F37B3EFA8F65EEFB9976A4E933\"\n        RedirectUri=\"http://sharesdk.cn\"\n        Enable=\"true\" />\n\t\n\t<Line\n\t    Id=\"32\"\n        SortId=\"32\"\n        ChannelID = \"1477692153\"\n        ChannelSecret =\"f30c036370f2e04ade71c52eef73a9af\"\n        Enable=\"true\" />\n\t\n\t<KakaoTalk\n\t    Id=\"33\"\n        SortId=\"33\"\n        AppKey=\"48d3f524e4a636b08d81b3ceb50f1003\"\n        Enable=\"true\" />\n\t\n\t<KakaoStory\n\t    Id=\"34\"\n        SortId=\"34\"\n        AppKey=\"48d3f524e4a636b08d81b3ceb50f1003\"\n        Enable=\"true\" />\n\n    <WhatsApp\n        Id=\"35\"\n        SortId=\"35\"\n        Enable=\"true\" />\n    \n    <Bluetooth\n        Id=\"36\"\n        SortId=\"36\"\n        Enable=\"true\" />\n\n    <Pocket\n        Id=\"37\"\n        SortId=\"37\"\n        ConsumerKey=\"32741-389c565043c49947ba7edf05\"\n        Enable=\"true\" />\n    \n    <Instapaper\n        Id=\"38\"\n        SortId=\"38\"\n        ConsumerKey=\"4rDJORmcOcSAZL1YpqGHRI605xUvrLbOhkJ07yO0wWrYrc61FA\"\n        ConsumerSecret=\"GNr1GespOQbrm8nvd7rlUsyRQsIo3boIbMguAl9gfpdL0aKZWe\"\n        Enable=\"true\" />\n    \n    <FacebookMessenger\n        Id=\"39\"\n        SortId=\"39\"\n        AppId=\"107704292745179\"\n        Enable=\"true\" />\n    \n     <Alipay\n        Id=\"50\"\n        SortId=\"50\"  \n        AppId=\"2015072400185895\"\n        Enable=\"true\"/>\n     \n     <AlipayMoments\n        Id=\"51\"\n        SortId=\"51\"  \n        AppId=\"2015072400185895\"\n        Enable=\"true\"/>\n     \n     <Dingding\n        Id=\"52\"\n        SortId=\"52\"\n        AppId=\"dingoanxyrpiscaovl4qlw\"\n        BypassApproval=\"false\"\n        Enable=\"true\"/>\n\n    <Youtube\n        Id=\"53\"\n        SortId=\"53\"\n        ClientID=\"370141748022-bicrnsjfiije93bvdt63dh3728m4shas.apps.googleusercontent.com\"\n        AppSecret=\"AIzaSyAO06g-0TDpHcsXXO918a7QE3Zdct2bB5E\"\n        RedirectUrl=\"http://localhost\"\n        ShareByAppClient = \"true\"\n        Enable=\"true\" />\n\t\n\t<Meipai\n\t\tId=\"54\"\n\t\tSortId=\"54\"\n\t\tClientID=\"1089867596\"\n\t\tAppSecret=\"y9ym6rrjjijtkt23qtsc\"\n\t\tShareByAppClient = \"true\"\n\t\tEnable=\"true\"/>\n\t\n</DevInfor>"
  },
  {
    "path": "app/src/main/assets/dynamic.json",
    "content": "{\"code\": 0,\n  \"data\": {\n    \"item\": [\n      {\n        \"coin\": 1,\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/9aef9e4be56c725969d99a14558c03e4d5375c70.jpg\",\n        \"ctime\": 1496382826,\n        \"danmaku\": 14,\n        \"desc\": \"Youtube原视频：https://www.youtube.com/watch?v=TtgY2N-_-Wg来源：pompomtoys\",\n        \"duration\": 885,\n        \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"11011872\",\n        \"play\": 62,\n        \"reply\": 5,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 19289\n          },\n          \"tag_id\": 11265,\n          \"tag_name\": \"手工\"\n        },\n        \"tid\": 161,\n        \"title\": \"【狂魔玩玩具】切割动力沙爱心叠叠乐\",\n        \"tname\": \"手工\",\n        \"uri\": \"bilibili://video/11011872\"\n      },\n      {\n        \"count\": 40,\n        \"cover\": \"http://i0.hdslb.com/bfs/archive/9227c88e6d79142d30708d46d6ba720def16c4bd.jpg\",\n        \"ctime\": 1496376000,\n        \"danmaku\": 546,\n        \"goto\": \"up_bangumi\",\n        \"index\": \"8\",\n        \"index_title\": \"治疗\",\n        \"param\": \"6159\",\n        \"play\": 11784,\n        \"title\": \"妖神记\",\n        \"type\": 2,\n        \"updates\": 107006,\n        \"uri\": \"bilibili://bangumi/season/6159\"\n      },\n      {\n        \"count\": 12,\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/7646ad33a79e4a6c7e97efed115042ae20d03f4f.jpg\",\n        \"ctime\": 1496368800,\n        \"danmaku\": 209,\n        \"goto\": \"up_bangumi\",\n        \"index\": \"02\",\n        \"index_title\": \"食神·附体？！\",\n        \"param\": \"6186\",\n        \"play\": 13365,\n        \"title\": \"食神魂\",\n        \"type\": 2,\n        \"updates\": 108127,\n        \"uri\": \"bilibili://bangumi/season/6186\"\n      },\n      {\n        \"coin\": 3,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/5165fa5beb040128dcbd62328788996ca6ac13d3.jpg\",\n        \"ctime\": 1496326508,\n        \"danmaku\": 11,\n        \"desc\": \"转载自YouTube原po：Touko ASMR原标题：【音フェチ】春巻き/ Spring Rolls【ASMR Eating Sounds】\",\n        \"duration\": 461,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 42,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10999875\",\n        \"play\": 1773,\n        \"recent\": [\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i2.hdslb.com/bfs/archive/fb524c1ddb629a55d1c155de3a0022636696ffe7.jpg\",\n            \"ctime\": 1496325853,\n            \"danmaku\": 8,\n            \"desc\": \"YouTube转载自YouTube原po：아내의 식탁 Wife's Cuisine原标题：근사한 브런치, 에그베네딕트 : Egg benedict with hollandaise sauce l Brunch menu [아내의 식탁]\",\n          \"duration\": 331,\n          \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n          \"favorite\": 48,\n          \"goto\": \"av\",\n          \"is_atten\": 1,\n          \"mid\": 12617707,\n          \"name\": \"炒鸡饿吃苹果还是饿\",\n          \"param\": \"11000033\",\n          \"play\": 410,\n          \"reply\": 11,\n          \"share\": 2,\n          \"tag\": {\n            \"count\": {\n              \"atten\": 41703\n            },\n            \"tag_id\": 1207642,\n            \"tag_name\": \"美食圈\"\n          },\n          \"tid\": 76,\n          \"title\": \"【吃早餐吧】鸡蛋松饼配荷兰酱（蛋黄酱）｜早午餐食谱\",\n          \"tname\": \"美食圈\",\n          \"uri\": \"bilibili://video/11000033\"\n          },\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/069cf42fc9a4514e966231d63923d6f7b2a29ae3.jpg\",\n            \"ctime\": 1496325587,\n            \"danmaku\": 3,\n            \"desc\": \"Youtube原视频：https://www.youtube.com/watch?v=Y38s1xjgcvE来源：Tastemade\",\n            \"duration\": 67,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 122,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10999778\",\n            \"play\": 1115,\n            \"reply\": 8,\n            \"share\": 4,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【炒鸡饿搬运】【Tastemade】奶油凤尾鱼炸面包团\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10999778\"\n          }\n        ],\n        \"recent_count\": 2,\n        \"reply\": 21,\n        \"share\": 2,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【咀嚼音ASMR】Touko小姐姐吃炸春卷～高质量收音好无底噪\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10999875\"\n      },\n      {\n        \"coin\": 5,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/9f7a1854e7adc24715eeecdc6da1b30e0ca73b9f.jpg\",\n        \"ctime\": 1496306430,\n        \"danmaku\": 76,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=jYaYc5u-LYA来源：hanse\",\n        \"duration\": 264,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 144,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10991927\",\n        \"play\": 1450,\n        \"recent\": [\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/125bb5984efb2e369a45cadb88c6d6a473650a01.jpg\",\n            \"ctime\": 1496305743,\n            \"danmaku\": 27,\n            \"desc\": \"YouTubehttps://www.youtube.com/watch?v=j2N0Aks8bQ0\",\n            \"duration\": 909,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 82,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10991729\",\n            \"play\": 1070,\n            \"reply\": 12,\n            \"share\": 3,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 76189\n              },\n              \"tag_id\": 1283883,\n              \"tag_name\": \"趣味科普人文\"\n            },\n            \"tid\": 124,\n            \"title\": \"16个令人惊叹的魔术小把戏！！\",\n            \"tname\": \"趣味科普人文\",\n            \"uri\": \"bilibili://video/10991729\"\n          }\n        ],\n        \"recent_count\": 1,\n        \"reply\": 23,\n        \"share\": 9,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 174,\n        \"title\": \"【耳机党福利】巧克力冰淇淋镜面蛋糕 (ASMR)\",\n        \"tname\": \"其他\",\n        \"uri\": \"bilibili://video/10991927\"\n      },\n      {\n        \"coin\": 13,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/b93be0c23489a6c5962e6ae2e8a9f2bb1a994245.jpg\",\n        \"ctime\": 1496301991,\n        \"danmaku\": 1383,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=gfFBcVQrwlw来源：pompomtoys\",\n        \"duration\": 959,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 155,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10990452\",\n        \"play\": 10757,\n        \"reply\": 102,\n        \"share\": 15,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 19289\n          },\n          \"tag_id\": 11265,\n          \"tag_name\": \"手工\"\n        },\n        \"tid\": 161,\n        \"title\": \"【狂魔玩玩具】制作马桶透明缤纷史莱姆水球然后捏爆\",\n        \"tname\": \"手工\",\n        \"uri\": \"bilibili://video/10990452\"\n      },\n      {\n        \"coin\": 6,\n        \"cover\": \"http://i0.hdslb.com/bfs/archive/072c71ab3ec0223ca5fcc28238629dce75132c01.jpg\",\n        \"ctime\": 1496291056,\n        \"danmaku\": 3,\n        \"desc\": \"逆天而行最新预告出炉啦~~一直很想写这种IF线的故事，但这IF又不会太过美好历史剧本神马的真的太难写了(つд⊂)这部是东吴主场，策瑜主线(ﾟ∀。)副甘凌跟蒙逊曹郭等西皮(ﾟ∀。)慢慢产粮中，敬请期待~~\",\n        \"duration\": 48,\n        \"face\": \"http://i0.hdslb.com/bfs/face/947914911aa5e224507ce278281fcd1588d4f78b.jpg\",\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 85595871,\n        \"name\": \"喵仔ユミ\",\n        \"param\": \"10987736\",\n        \"play\": 111,\n        \"reply\": 17,\n        \"share\": 1,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 6382\n          },\n          \"tag_id\": 10384,\n          \"tag_name\": \"真三国无双\"\n        },\n        \"tid\": 121,\n        \"title\": \"【真三国无双】最新预告-逆天而行﹝策瑜主场﹞\",\n        \"tname\": \"GMV\",\n        \"uri\": \"bilibili://video/10987736\"\n      },\n      {\n        \"coin\": 4,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/d019cf18fa630ee652a3527dbf3fd52203198afd.jpg\",\n        \"ctime\": 1496288668,\n        \"danmaku\": 6,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=Lt3YNDYFU2I&amp;amp;t=0s来源：tastemade\",\n        \"duration\": 61,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 34,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10986771\",\n        \"play\": 763,\n        \"recent\": [\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/4c1a5dcb4227b65c81277951bd81a441ae2383f6.jpg\",\n            \"ctime\": 1496287898,\n            \"danmaku\": 19,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=8yq2HrRp_z0来源：ビデリシャス - おいしい動画 -\",\n            \"duration\": 90,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 242,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10986699\",\n            \"play\": 1357,\n            \"reply\": 20,\n            \"share\": 3,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【炒鸡饿搬运】教你制作法式柠檬周末蛋糕\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10986699\"\n          }\n        ],\n        \"recent_count\": 1,\n        \"reply\": 23,\n        \"share\": 2,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【炒鸡饿搬运】用几块糖霜饼干搭出了可爱的日本昭和风过家家小房子～\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10986771\"\n      },\n      {\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/63173bc3c0a5e2aa612090a0042e70c1eae77c8c.jpg\",\n        \"ctime\": 1496267053,\n        \"danmaku\": 7,\n        \"desc\": \"转载自YouTube原po：筋肉料理人の簡単レシピ、魚料理原标题：ニラ玉スパゲティ\",\n        \"duration\": 246,\n        \"face\": \"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 57,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10983441\",\n        \"play\": 722,\n        \"recent\": [\n          {\n            \"coin\": 20,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/e2dbd8272ced842547a39d8015b7835d1db321d0.jpg\",\n            \"ctime\": 1496263410,\n            \"danmaku\": 1198,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=6q0lLZCZTFg来源：pompomtoys\",\n            \"duration\": 1105,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 154,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10983294\",\n            \"play\": 14733,\n            \"reply\": 98,\n            \"share\": 18,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 19289\n              },\n              \"tag_id\": 11265,\n              \"tag_name\": \"手工\"\n            },\n            \"tid\": 161,\n            \"title\": \"【狂魔玩玩具】制作一瓶七彩大鼻涕史莱姆可乐\",\n            \"tname\": \"手工\",\n            \"uri\": \"bilibili://video/10983294\"\n          }\n        ],\n        \"recent_count\": 1,\n        \"reply\": 12,\n        \"share\": 3,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【筋肉料理人的简易食谱】韭菜鸡蛋炒意面\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10983441\"\n      },\n      {\n        \"coin\": 7,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/286dfa93d65021ee70e2dca19c9ee84bfdedc25a.jpg\",\n        \"ctime\": 1496235411,\n        \"danmaku\": 36,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=9PFono26O_o来源：MINEE EATS\",\n        \"duration\": 1402,\n        \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 97,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10974088\",\n        \"play\": 2700,\n        \"recent\": [\n          {\n            \"coin\": 19,\n            \"cover\": \"http://i2.hdslb.com/bfs/archive/fe660b9c712e8495fd36aa09cb2c1f9034fbde60.jpg\",\n            \"ctime\": 1496233796,\n            \"danmaku\": 1840,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=_-QF-6mLEks来源：pompomtoys\",\n            \"duration\": 846,\n            \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 199,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10973792\",\n            \"play\": 32503,\n            \"reply\": 182,\n            \"share\": 28,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 19289\n              },\n              \"tag_id\": 11265,\n              \"tag_name\": \"手工\"\n            },\n            \"tid\": 161,\n            \"title\": \"【狂魔玩玩具】制作一瓶动力沙芬达汽水\",\n            \"tname\": \"手工\",\n            \"uri\": \"bilibili://video/10973792\"\n          },\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i2.hdslb.com/bfs/archive/f52e31dfc9fe8ac848a6e9fedcfcf64837c74f9b.jpg\",\n            \"ctime\": 1496232305,\n            \"danmaku\": 43,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=9PFono26O_o来源：MINEE EATS\",\n            \"duration\": 1571,\n            \"face\": \"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 19,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10973974\",\n            \"play\": 1932,\n            \"reply\": 20,\n            \"share\": 1,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【饿哭也要看他吃】奔驰小哥咀嚼音ASMR福利！喝滋补参鸡汤＋忘情啃鸡骨头\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10973974\"\n          }\n        ],\n        \"recent_count\": 2,\n        \"reply\": 42,\n        \"share\": 2,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【咀嚼音ASMR】收音超好毫无底噪，韩国小姐姐嚼饼干～嘎嘣脆！\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10974088\"\n      },\n      {\n        \"coin\": 4,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/3a30060961a15d04498992705ab775cca22750eb.jpg\",\n        \"ctime\": 1496231540,\n        \"danmaku\": 9,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=P2aICLkB6b4来源：杨桃美食网\",\n        \"duration\": 59,\n        \"face\": \"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 316,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10973894\",\n        \"play\": 4640,\n        \"recent\": [\n          {\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/af3bafe8800673a381348c1f0720858add9cf462.jpg\",\n            \"ctime\": 1496229527,\n            \"danmaku\": 19,\n            \"desc\": \"Youtube原视频：https://www.youtube.com/watch?v=Fhlh6Lbjl5w来源：The SCOOP\",\n            \"duration\": 506,\n            \"face\": \"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 30,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10973228\",\n            \"play\": 322,\n            \"reply\": 11,\n            \"share\": 1,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【魔法料理厨房】萌到舍不得吃的唐老鸭黛西马卡龙\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10973228\"\n          },\n          {\n            \"coin\": 3,\n            \"cover\": \"http://i2.hdslb.com/bfs/archive/759aab1a2c4578feac359bf40b58ccb9619ab589.jpg\",\n            \"ctime\": 1496228789,\n            \"danmaku\": 24,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=tmHIDiUve10来源：cooking tree\",\n            \"duration\": 317,\n            \"face\": \"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 70,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10973096\",\n            \"play\": 890,\n            \"reply\": 14,\n            \"share\": 3,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【耳机党福利】奥利奥冰淇淋夹心三明治 (ASMR)\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10973096\"\n          }\n        ],\n        \"recent_count\": 2,\n        \"reply\": 24,\n        \"share\": 12,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【一分钟快手料理】家常牛肉面，大呼过瘾的好味道！\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10973894\"\n      },\n      {\n        \"coin\": 10,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/235588cc4f535463ae1a44acd643f667c7285344.jpg\",\n        \"ctime\": 1496211236,\n        \"danmaku\": 789,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=zbjWxwLCg28来源：pompomtoys\",\n        \"duration\": 810,\n        \"face\": \"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 92,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10966949\",\n        \"play\": 14260,\n        \"reply\": 106,\n        \"share\": 14,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 19289\n          },\n          \"tag_id\": 11265,\n          \"tag_name\": \"手工\"\n        },\n        \"tid\": 161,\n        \"title\": \"【狂魔玩玩具】白花花雪花泥大屁股流出各色史莱姆液体\",\n        \"tname\": \"手工\",\n        \"uri\": \"bilibili://video/10966949\"\n      },\n      {\n        \"coin\": 5,\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/656d2dface08d8a2a2864f1c9af90141a6ba3721.jpg\",\n        \"ctime\": 1496194271,\n        \"danmaku\": 13,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=VcjmqrCJYm4来源：Tasty\",\n        \"duration\": 83,\n        \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 152,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10962203\",\n        \"play\": 1200,\n        \"reply\": 11,\n        \"share\": 2,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【炒鸡饿搬运】【Tasty】超简单巧克力甜甜圈\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10962203\"\n      },\n      {\n        \"coin\": 6,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/2afce63b96e96111a69bd4e1543ca4df4dcf8d5a.jpg\",\n        \"ctime\": 1496177330,\n        \"danmaku\": 1268,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=AM5ewKmXEiw来源：pompomtoys\",\n        \"duration\": 1128,\n        \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 101,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10959883\",\n        \"play\": 14509,\n        \"recent\": [\n          {\n            \"coin\": 1,\n            \"cover\": \"http://i2.hdslb.com/bfs/archive/7b2c9c48b15476ed345de5ba32b2134c89fbd198.jpg\",\n            \"ctime\": 1496176745,\n            \"danmaku\": 3,\n            \"desc\": \"YouTube原视频： https://www.youtube.com/watch?v=1xn2l1uUQEU&amp;t=0s来源：Tasty Japan\",\n            \"duration\": 43,\n            \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 85,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10959798\",\n            \"play\": 1053,\n            \"reply\": 6,\n            \"share\": 2,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【炒鸡饿搬运】【Tasty】脆皮米果炸鸡\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10959798\"\n          },\n          {\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/8450d4ddfca0e990bdeb66b02afca5bcfb4fde84.jpg\",\n            \"ctime\": 1496176610,\n            \"danmaku\": 4,\n            \"desc\": \"YouTube转载自YouTube原po：cooking tree原标题：달콤한 바나나가 통으로! 바나나 초코 롤케이크 만들기 : Banana chocolate roll cake Recipe : バナナロールケーキ -Cookingtree쿠킹트리\",\n            \"duration\": 269,\n            \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 49,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10959768\",\n            \"play\": 452,\n            \"reply\": 4,\n            \"share\": 2,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 174,\n            \"title\": \"【耳骚料理ASMR】耳机党福利！香蕉巧克力蛋糕卷\",\n            \"tname\": \"其他\",\n            \"uri\": \"bilibili://video/10959768\"\n          },\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/c6940c152d2db13ceaedfe80b0633be075dbbd8e.jpg\",\n            \"ctime\": 1496176167,\n            \"danmaku\": 1,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=UmhtavyZAlk&amp;t=0s来源：tastemade\",\n            \"duration\": 47,\n            \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 102,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10959685\",\n            \"play\": 978,\n            \"reply\": 9,\n            \"share\": 5,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【炒鸡饿搬运】【Tastemade】薯片金枪鱼蛋黄酱土豆沙拉\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10959685\"\n          },\n          {\n            \"coin\": 6,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/6a939c97b5c8f0bf29900c02806cb4948bef66f1.jpg\",\n            \"ctime\": 1496175748,\n            \"danmaku\": 23,\n            \"desc\": \"YouTube原视频： https://www.youtube.com/watch?v=4-uKNM7vmYs&amp;t=0s来源：tastemade\",\n            \"duration\": 78,\n            \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 276,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10959599\",\n            \"play\": 2525,\n            \"reply\": 12,\n            \"share\": 5,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【炒鸡饿搬运】【Tastemade】多彩缤纷的小可爱番茄芝士蛋糕\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10959599\"\n          },\n          {\n            \"coin\": 1,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/e1835322eb741ce520888030e6a0ca16bd1a0932.jpg\",\n            \"ctime\": 1496175265,\n            \"danmaku\": 6,\n            \"desc\": \"YouTube原视频： https://www.youtube.com/watch?v=BKSOKksjgi4&amp;t=0s来源：mogoo [もぐー]\",\n          \"duration\": 46,\n          \"face\": \"http://i2.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n          \"favorite\": 105,\n          \"goto\": \"av\",\n          \"is_atten\": 1,\n          \"mid\": 12617707,\n          \"name\": \"炒鸡饿吃苹果还是饿\",\n          \"param\": \"10959530\",\n          \"play\": 1953,\n          \"reply\": 9,\n          \"share\": 7,\n          \"tag\": {\n            \"count\": {\n              \"atten\": 41703\n            },\n            \"tag_id\": 1207642,\n            \"tag_name\": \"美食圈\"\n          },\n          \"tid\": 76,\n          \"title\": \"【一分钟快手料理】创新料理！饺子皮生煎章鱼烧！\",\n          \"tname\": \"美食圈\",\n          \"uri\": \"bilibili://video/10959530\"\n          }\n        ],\n        \"recent_count\": 5,\n        \"reply\": 54,\n        \"share\": 12,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 19289\n          },\n          \"tag_id\": 11265,\n          \"tag_name\": \"手工\"\n        },\n        \"tid\": 161,\n        \"title\": \"【狂魔玩玩具】制作咖啡史莱姆水球然后捏爆它&彩虹史莱姆泡泡\",\n        \"tname\": \"手工\",\n        \"uri\": \"bilibili://video/10959883\"\n      },\n      {\n        \"coin\": 7,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/372322827536de22ce303a4d3d2810d72be71eeb.jpg\",\n        \"ctime\": 1496132472,\n        \"danmaku\": 225,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=2FQJEr6Fbms来源：TV Cooking\",\n        \"duration\": 847,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 58,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10941084\",\n        \"play\": 4867,\n        \"reply\": 32,\n        \"share\": 2,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"世界各地的街头小吃－三明治的制作\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10941084\"\n      },\n      {\n        \"coin\": 4,\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/97e483a4fe1cf936fac383263ed8f89608c46b90.jpg\",\n        \"ctime\": 1496123908,\n        \"danmaku\": 29,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=wX8GSQs2KDM&amp;t=353s来源：MosoGourmet 妄想グルメ\",\n        \"duration\": 424,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 40,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10936809\",\n        \"play\": 839,\n        \"recent\": [\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/aa5d0362b2e1b32b40c4697185c5b8d88778903b.jpg\",\n            \"ctime\": 1496123794,\n            \"danmaku\": 35,\n            \"desc\": \"YouTube原视频： https://www.youtube.com/watch?v=F_UCT4WZeXU来源：MosoGourmet 妄想グルメ\",\n            \"duration\": 539,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 80,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10937067\",\n            \"play\": 873,\n            \"reply\": 19,\n            \"share\": 4,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【魔法料理厨房】妄想太太教你制作熊熊宝宝豆皮帽子饭团\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10937067\"\n          }\n        ],\n        \"recent_count\": 1,\n        \"reply\": 15,\n        \"share\": 4,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【魔法料理厨房】妄想太太教你制作可爱小男孩小女孩饭团\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10936809\"\n      },\n      {\n        \"count\": 13,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/fa3603556f8f2a7d4edbbc6b309592919c26aeff.jpg\",\n        \"ctime\": 1496106002,\n        \"danmaku\": 1962,\n        \"goto\": \"up_bangumi\",\n        \"index\": \"21\",\n        \"index_title\": \"箱根学园、行动\",\n        \"param\": \"5794\",\n        \"play\": 81825,\n        \"title\": \"飙速宅男 新世代\",\n        \"type\": 1,\n        \"updates\": 100449,\n        \"uri\": \"bilibili://bangumi/season/5794\"\n      },\n      {\n        \"coin\": 20,\n        \"cover\": \"http://i2.hdslb.com/bfs/archive/7d5b77dbc34152954298d1979e1daa0777825c87.jpg\",\n        \"ctime\": 1496086751,\n        \"danmaku\": 1968,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=rl3UB6O26zI来源：pompomtoys\",\n        \"duration\": 914,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 218,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10930526\",\n        \"play\": 25989,\n        \"recent\": [\n          {\n            \"coin\": 1,\n            \"cover\": \"http://i2.hdslb.com/bfs/archive/cabd3e8e1798515d6035d031ed4bb8cf858f941c.jpg\",\n            \"ctime\": 1496086609,\n            \"danmaku\": 83,\n            \"desc\": \"YouTube转载自YouTube原po：cooking tree原标题：체리쥬빌레 맛!\",\n            \"duration\": 309,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 109,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10930401\",\n            \"play\": 1524,\n            \"reply\": 6,\n            \"share\": 2,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【耳骚料理ASMR】耳机党福利！可爱动人的樱桃蛋糕～\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10930401\"\n          },\n          {\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/437a788b84738c7a6522ebc5f2bb852718ff3ba2.jpg\",\n            \"ctime\": 1496085542,\n            \"danmaku\": 4,\n            \"desc\": \"YouTube原视频： https://www.youtube.com/watch?v=_VKJdTS9sSA&amp;amp;amp;t=0s来源：tastemade\",\n            \"duration\": 51,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 94,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10930286\",\n            \"play\": 1565,\n            \"reply\": 3,\n            \"share\": 3,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【炒鸡饿搬运】【Tastemade】牡蛎海鲜烩意大利面\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10930286\"\n          },\n          {\n            \"coin\": 2,\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/2a2e08c722e37de828652ee6c09cfebcf881c7ad.jpg\",\n            \"ctime\": 1496085471,\n            \"danmaku\": 28,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=1AMOUlHqVlI&amp;amp;t=1s来源：밴쯔의 ASMR\",\n            \"duration\": 824,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 27,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10930003\",\n            \"play\": 2702,\n            \"reply\": 16,\n            \"share\": 1,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【饿哭也要看他吃】奔驰小哥吃洋葱酱炒肉片～咀嚼音耳机党福利！\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10930003\"\n          },\n          {\n            \"coin\": 5,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/e985316f85d2e800989f3919b3176714d3e3f8c0.jpg\",\n            \"ctime\": 1496083615,\n            \"danmaku\": 92,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=TfjyWKyxKvw&amp;t=139s来源：decocookie\",\n            \"duration\": 289,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 45,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10929746\",\n            \"play\": 4776,\n            \"reply\": 27,\n            \"share\": 2,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"超好玩的卷冰淇淋器！拿铲子一溜卷过去真的完美到令人满意！\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10929746\"\n          },\n          {\n            \"coin\": 5,\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/9111c02d9f872288b65c2fd0a627bac583995816.jpg\",\n            \"ctime\": 1496083433,\n            \"danmaku\": 47,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=aeWo7YtCcL4\",\n          \"duration\": 923,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 213,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10929626\",\n            \"play\": 2098,\n            \"reply\": 15,\n            \"share\": 3,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 76189\n              },\n              \"tag_id\": 1283883,\n              \"tag_name\": \"趣味科普人文\"\n            },\n            \"tid\": 124,\n            \"title\": \"14个令人惊叹的手机和数据线的妙用！！\",\n            \"tname\": \"趣味科普人文\",\n            \"uri\": \"bilibili://video/10929626\"\n          }\n        ],\n        \"recent_count\": 5,\n        \"reply\": 110,\n        \"share\": 23,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 19289\n          },\n          \"tag_id\": 11265,\n          \"tag_name\": \"手工\"\n        },\n        \"tid\": 161,\n        \"title\": \"【狂魔玩玩具】充满亮片的史莱姆水球胖胖\",\n        \"tname\": \"手工\",\n        \"uri\": \"bilibili://video/10930526\"\n      },\n      {\n        \"count\": 12,\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/3667a19810a88a66cd540944a9a6ca5bf4a15015.jpg\",\n        \"ctime\": 1496079000,\n        \"danmaku\": 18448,\n        \"goto\": \"up_bangumi\",\n        \"index\": \"9\",\n        \"index_title\": \"苍，感冒了/我也一起\",\n        \"param\": \"5994\",\n        \"play\": 99194,\n        \"title\": \"机甲少女 FRAME ARMS GIRL\",\n        \"type\": 1,\n        \"updates\": 103195,\n        \"uri\": \"bilibili://bangumi/season/5994\"\n      },\n      {\n        \"coin\": 17,\n        \"cover\": \"http://i1.hdslb.com/bfs/archive/ae9a0a74577167ca83a4290c3f7af3081f49107e.jpg\",\n        \"ctime\": 1496054303,\n        \"danmaku\": 168,\n        \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=bsLHd6mHpDU&amp;t=366s来源：YuuumaTV\",\n        \"duration\": 569,\n        \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n        \"favorite\": 428,\n        \"goto\": \"av\",\n        \"is_atten\": 1,\n        \"mid\": 12617707,\n        \"name\": \"炒鸡饿吃苹果还是饿\",\n        \"param\": \"10916985\",\n        \"play\": 4555,\n        \"recent\": [\n          {\n            \"coin\": 3,\n            \"cover\": \"http://i1.hdslb.com/bfs/archive/a8d1aa9170f7be844c435c76258d3614e878aaa9.jpg\",\n            \"ctime\": 1496051570,\n            \"danmaku\": 46,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=K4XK_vR6v5A&amp;t=0s来源：ARIKITCHEN\",\n            \"duration\": 176,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 115,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10916168\",\n            \"play\": 2674,\n            \"reply\": 17,\n            \"share\": 6,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 76,\n            \"title\": \"【三分钟快手料理】超下饭的洋葱炒鸡蛋午餐肉盖饭\",\n            \"tname\": \"美食圈\",\n            \"uri\": \"bilibili://video/10916168\"\n          },\n          {\n            \"coin\": 4,\n            \"cover\": \"http://i0.hdslb.com/bfs/archive/55cc68911753a3b7d5ed1d9396ead410cb08c0d7.jpg\",\n            \"ctime\": 1496051100,\n            \"danmaku\": 73,\n            \"desc\": \"YouTube原视频：https://www.youtube.com/watch?v=Pc0lULZCarA来源：HANSE\",\n            \"duration\": 411,\n            \"face\": \"http://i1.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\n            \"favorite\": 117,\n            \"goto\": \"av\",\n            \"is_atten\": 1,\n            \"mid\": 12617707,\n            \"name\": \"炒鸡饿吃苹果还是饿\",\n            \"param\": \"10916008\",\n            \"play\": 1341,\n            \"reply\": 15,\n            \"share\": 1,\n            \"tag\": {\n              \"count\": {\n                \"atten\": 41703\n              },\n              \"tag_id\": 1207642,\n              \"tag_name\": \"美食圈\"\n            },\n            \"tid\": 174,\n            \"title\": \"【耳骚料理ASMR】耳机党福利！咸味焦糖马卡龙\",\n            \"tname\": \"其他\",\n            \"uri\": \"bilibili://video/10916008\"\n          }\n        ],\n        \"recent_count\": 2,\n        \"reply\": 37,\n        \"share\": 27,\n        \"tag\": {\n          \"count\": {\n            \"atten\": 41703\n          },\n          \"tag_id\": 1207642,\n          \"tag_name\": \"美食圈\"\n        },\n        \"tid\": 76,\n        \"title\": \"【炒鸡饿搬运】日本小姐姐教你2种做蛋包饭的方式！片尾秀恩爱甜死人～\",\n        \"tname\": \"美食圈\",\n        \"uri\": \"bilibili://video/10916985\"\n      }\n    ],\n    \"live\": {\n      \"conut\": 1,\n      \"count\": 1,\n      \"item\": [\n        {\n          \"cover\": \"http://i2.hdslb.com/bfs/face/947914911aa5e224507ce278281fcd1588d4f78b.jpg\",\n          \"param\": \"3627798\",\n          \"uri\": \"bilibili://live/3627798\"\n        }\n      ]\n    }\n  },\n  \"message\": \"\",\n  \"ttl\": 25\n}"
  },
  {
    "path": "app/src/main/assets/game_center.json",
    "content": "{\"code\": 0,\n  \"data\": {\n    \"book_gift\": [\n      {\n        \"book_status\": 0,\n        \"id\": 1546,\n        \"image\": \"http://i0.hdslb.com/bfs/game/9e985c4405efe7ae920aabd9b8d418a499566864.jpg\",\n        \"link\": \"http://blhx.biligame.com/h5/\",\n        \"name\": \"碧蓝航线\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 1504,\n        \"image\": \"http://i0.hdslb.com/bfs/game/89971792dc7e089a783fb888db4d6030a564e98f.jpg\",\n        \"link\": \"http://mjj.biligame.com/yuyue/h5/\",\n        \"name\": \"梦间集\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 1700,\n        \"image\": \"http://i0.hdslb.com/bfs/game/8a166ba50006cbd3ce812929d90eb17477f42cad.jpg\",\n        \"link\": \"http://acg.tv/u1jy\",\n        \"name\": \"魔法禁书目录\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 10086,\n        \"image\": \"http://i0.hdslb.com/bfs/game/27d33b3c91c6c3c4a3ab97fed38327fb7faae6f0.jpg\",\n        \"link\": \"http://lxhzj.biligame.com/yuyue/h5/\",\n        \"name\": \"罗小黑妖灵簿\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 8897,\n        \"image\": \"http://i0.hdslb.com/bfs/game/74483f0edf606c2b4039bb5318ccaf2f23be1755.jpg\",\n        \"link\": \"http://yxwj.biligame.com/h5/\",\n        \"name\": \"一血万杰\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 5000,\n        \"image\": \"http://i0.hdslb.com/bfs/game/4cc73a138adb5cfa1681f77d4600fbe0cd1f9d0f.octet-stream\",\n        \"link\": \"http://girl.biligame.com/yuyue/h5/\",\n        \"name\": \"妃十三学园\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 9821,\n        \"image\": \"http://i0.hdslb.com/bfs/game/6594d31cbb10d8e0aa9f03ed63e18605da0b5ac8.jpg\",\n        \"link\": \"http://ma3.biligame.com/yuyue/h5/\",\n        \"name\": \"叛逆性百万亚瑟王\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 1254,\n        \"image\": \"http://i0.hdslb.com/bfs/game/ce172f0021a38801119a03e2bed05d4db97341cd.jpg\",\n        \"link\": \"http://zzgc.biligame.com/yuyue/h5/\",\n        \"name\": \"战争工厂\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 1486,\n        \"image\": \"http://i0.hdslb.com/bfs/game/a9b47c32367ac376279017334a5e153a5f2587cd.jpg\",\n        \"link\": \"http://moe.biligame.com/yuyue/h5/\",\n        \"name\": \"萌王EX\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 1233,\n        \"image\": \"http://i0.hdslb.com/bfs/game/1d30d0516f4365439fcb009b52c9b54e3ace65ed.jpg\",\n        \"link\": \"https://yjdyc.biligame.com/h5/\",\n        \"name\": \"妖精的衣橱\"\n      },\n      {\n        \"book_status\": 0,\n        \"id\": 1445,\n        \"image\": \"http://i0.hdslb.com/bfs/game/371733ae28d3f8898832fe1472fe379b1923648d.jpg\",\n        \"link\": \"http://sdmht.biligame.com/yuyueH5.html\",\n        \"name\": \"神代梦华谭\"\n      }\n    ],\n    \"cache_time\": 30,\n    \"game_list\": [\n      {\n        \"android_pkg_name\": \"com.bilibili.fatego\",\n        \"android_pkg_size\": 300515257,\n        \"android_pkg_ver\": 49,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/fatego/fatego_v1.15.0_bili_app_183545.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/8ee23f/d1799f.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/0a114c837d9f8fae8f2489a4bf91bf912c61edae.png\",\n        \"id\": 61,\n        \"new\": 0,\n        \"summary\": \"全平台公测开启！\",\n        \"title\": \"命运-冠位指定（Fate/GO）\"\n      },\n      {\n        \"android_pkg_name\": \"com.netease.onmyoji.bili\",\n        \"android_pkg_size\": 961880258,\n        \"android_pkg_ver\": 20,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/yys/yys_v1.0.20_bili_app_166723.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/yys/yys_v1.0.20_bili_app_166723.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/36ee7db87a0d27aa5bb4672fffc22fb5ff8ec68c.png\",\n        \"id\": 55,\n        \"new\": 0,\n        \"summary\": \"唯美如樱，百鬼物语\",\n        \"title\": \"阴阳师\"\n      },\n      {\n        \"android_pkg_name\": \"com.miHoYo.bh3.bilibili\",\n        \"android_pkg_size\": 974686164,\n        \"android_pkg_ver\": 50,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/bh3/bh3_v1.5.0_bili_703764.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/bh3/bh3_v1.5.0_bili_703764.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/00ca761705a75f51072931503092e5d0ccd42623.png\",\n        \"id\": 67,\n        \"new\": 0,\n        \"summary\": \"点燃ACG动作之魂！\",\n        \"title\": \"崩坏3\"\n      },\n      {\n        \"android_pkg_name\": \"com.shangruan.huanlijing.bili\",\n        \"android_pkg_size\": 404192009,\n        \"android_pkg_ver\": 2,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/xjqxzhlj/xjqxzhlj_v1.2_bili_741923.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/xjqxzhlj/xjqxzhlj_v1.2_bili_741923.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/914f8c00352afe5a2d99a62863634baf1db3d5c7.jpg\",\n        \"id\": 75,\n        \"new\": 1,\n        \"summary\": \"入境成妖，破界重生！\",\n        \"title\": \"仙剑奇侠传幻璃镜\"\n      },\n      {\n        \"android_pkg_name\": \"com.digitalsky.girlsfrontline.cn.bili\",\n        \"android_pkg_size\": 156409992,\n        \"android_pkg_ver\": 125,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/snqx/snqx_v1.122_bili_250437.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/snqx/snqx_v1.122_bili_250437.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/5fe1986506abe7a519a47fa5e505b097b3e7178d.png\",\n        \"id\": 49,\n        \"new\": 0,\n        \"summary\": \"战地誓约，守护羁绊\",\n        \"title\": \"少女前线\"\n      },\n      {\n        \"android_pkg_name\": \"com.youzu.djlw.bili\",\n        \"android_pkg_size\": 234043222,\n        \"android_pkg_ver\": 13,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/djlw/djlw_v1.0.43_bili_196537.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/djlw/djlw_v1.0.43_bili_196537.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/2950e1d94aa49a740f0d69a6ca64d60f97b68564.png\",\n        \"id\": 76,\n        \"new\": 1,\n        \"summary\": \"刀剑男士，即刻出阵！\",\n        \"title\": \"刀剑乱舞\"\n      },\n      {\n        \"android_pkg_name\": \"com.miHoYo.HSoDv2BiliBiliRelease\",\n        \"android_pkg_size\": 276075913,\n        \"android_pkg_ver\": 1,\n        \"android_sign\": \"8B4FADF1EDA8B3D382873DECEBDAECC2\",\n        \"download_link\": \"http://pkg.biligame.com/bhxy/bhxy_v4.1.7_bili_754921.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/bhxy/bhxy_v4.1.7_bili_754921.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/622bc1d70006d595c11f1f30802fcd578096cb76.png\",\n        \"id\": 1,\n        \"new\": 0,\n        \"summary\": \"崩坏学园2-银狼之逐\",\n        \"title\": \"崩坏学园2\"\n      },\n      {\n        \"android_pkg_name\": \"com.gcrest.yume100prince.android.bili\",\n        \"android_pkg_size\": 172685183,\n        \"android_pkg_ver\": 133,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/100p/bili/100p_v1.16.0_bili_app_321456.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/100p/bili/100p_v1.16.0_bili_app_321456.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/f9ceae3c2f1655170391fe975fc1988d1a222bff.png\",\n        \"id\": 4,\n        \"new\": 0,\n        \"summary\": \"谁才是能够拥你入怀的王子？\",\n        \"title\": \"梦王国与沉睡的100王子\"\n      },\n      {\n        \"android_pkg_name\": \"com.baitian.pjm.zwfz.bili\",\n        \"android_pkg_size\": 238971576,\n        \"android_pkg_ver\": 7,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/zwfz/zwfz_v1.0.6_bili_582014.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/zwfz/zwfz_v1.0.6_bili_582014.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/2018fb15ec09429459528cf8242105ffdae928a9.png\",\n        \"id\": 69,\n        \"new\": 1,\n        \"summary\": \"一部可以玩的漫画！\",\n        \"title\": \"造物法则\"\n      },\n      {\n        \"android_pkg_name\": \"com.tencent.tmgp.starscn\",\n        \"android_pkg_size\": 276450470,\n        \"android_pkg_ver\": 563725,\n        \"android_sign\": \"EFBE39FB97E1A843AD33BEFFD333502B\",\n        \"download_link\": \"https://pkg.biligame.com/oxmhj/oxmhj_v2.1.1_bili_846732.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/oxmhj/oxmhj_v2.1.1_bili_846732.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/1775ec5694d85d0e2e40d4c8b47fd4d1fccdc0b0.png\",\n        \"id\": 41,\n        \"new\": 0,\n        \"summary\": \"响彻世界吧！青春×偶像×高校生！\",\n        \"title\": \"偶像梦幻祭\"\n      },\n      {\n        \"android_pkg_name\": \"com.opd2c.athena.bili\",\n        \"android_pkg_size\": 636258143,\n        \"android_pkg_ver\": 42,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/xmds/xmds_v4.0.0_bili_app_351146.apk\",\n        \"download_link2\": \"ttp://pkgdl.biligame.net/xmds/xmds_v4.0.0_bili_app_351146.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/2ab2c01bc1fc7502bfed472d7da6b5cfd9fafbf4.png\",\n        \"id\": 23,\n        \"new\": 0,\n        \"summary\": \"拯救都市，寻找真相\",\n        \"title\": \"消灭都市\"\n      },\n      {\n        \"android_pkg_name\": \"com.bilibili.ichu\",\n        \"android_pkg_size\": 274833590,\n        \"android_pkg_ver\": 10,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/ichu/ichu_v1.2.0.7_bili_app.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/ichu/ichu_v1.2.0.7_bili_app.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/u_user/7baceb341073fe823faad36d2e1c805e.png\",\n        \"id\": 34,\n        \"new\": 0,\n        \"summary\": \"把我变成真正的偶像吧！\",\n        \"title\": \"ICHU偶像进行曲\"\n      },\n      {\n        \"android_pkg_name\": \"com.xsj.girlcafegun.bili\",\n        \"android_pkg_size\": 571557005,\n        \"android_pkg_ver\": 101200003,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/snkfq/snkfq_v1.12.3_bili_586472.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/snkfq/snkfq_v1.12.3_bili_586472.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/330cd44350eff6e080a3859517485cb89e372429.png\",\n        \"id\": 56,\n        \"new\": 1,\n        \"summary\": \"咖啡馆x少女x枪战\",\n        \"title\": \"少女咖啡枪\"\n      },\n      {\n        \"android_pkg_name\": \"com.qzgame.eva.bili\",\n        \"android_pkg_size\": 525278216,\n        \"android_pkg_ver\": 28212,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/eva/eva_v2.1.8_bili_385631.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/eva/eva_v2.1.8_bili_385631.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/20a7cb3e539906cb6d0e328dd24a0be3dd39d69b.png\",\n        \"id\": 73,\n        \"new\": 1,\n        \"summary\": \"使徒来袭 指尖激战\",\n        \"title\": \"EVA:破晓\"\n      },\n      {\n        \"android_pkg_name\": \"com.netease.gmdl.bili\",\n        \"android_pkg_size\": 436441747,\n        \"android_pkg_ver\": 333423,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/gmdl/gmdl_v1.165917.167505_bili_app_268533.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/gmdl/gmdl_v1.165917.167505_bili_app_268533.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/0ef9e591ce4867f85c3fd05365faa745d21a75c4.png\",\n        \"id\": 78,\n        \"new\": 0,\n        \"summary\": \"再一次 并肩作战\",\n        \"title\": \"光明大陆\"\n      },\n      {\n        \"android_pkg_name\": \"com.zhuoyan.mfsn.bili\",\n        \"android_pkg_size\": 539692557,\n        \"android_pkg_ver\": 237,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"http://pkgdl.biligame.net/mfsnxy/mfsnxy_v1.0.1.237_bili_app_636852.apk\",\n        \"download_link2\": \"https://pkg.biligame.com/mfsnxy/mfsnxy_v1.0.1.237_bili_app_636852.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/1536b32e82ea4fb44a8037f4604f2e80269cbb67.png\",\n        \"id\": 44,\n        \"new\": 1,\n        \"summary\": \"全平台公测正式开启！\",\n        \"title\": \"魔法少女小圆\"\n      },\n      {\n        \"android_pkg_name\": \"com.zion.aquatrax\",\n        \"android_pkg_size\": 228110068,\n        \"android_pkg_ver\": 4,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/zy/zy_v20.0.1_bili_568920.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/zy/zy_v20.0.1_bili_568920.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/32abcd8ae83f337623d13728f063e81eed5a07df.png\",\n        \"id\": 22,\n        \"new\": 1,\n        \"summary\": \"呐，一起来打歌吧！\",\n        \"title\": \"Zion载音\"\n      },\n      {\n        \"android_pkg_name\": \"com.sywl.hylr.bili\",\n        \"android_pkg_size\": 214895716,\n        \"android_pkg_ver\": 1,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/hylr/hylr_v1.4.0_bili_app_363226.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/hylr/hylr_v1.4.0_bili_app_363226.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/5deda073214a544e4571c097fd98de92e00aa8b3.png\",\n        \"id\": 47,\n        \"new\": 1,\n        \"summary\": \"全平台公测！妹系战争爆发\",\n        \"title\": \"幻游猎人\"\n      },\n      {\n        \"android_pkg_name\": \"com.denachina.g10000002.bili\",\n        \"android_pkg_size\": 50187939,\n        \"android_pkg_ver\": 25,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/hywz/hywz_v2.0.0_bili_892350.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/hywz/hywz_v2.0.0_bili_892350.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/277759569f1593fd29b836a19b4f9f76ba33ab27.png\",\n        \"id\": 68,\n        \"new\": 1,\n        \"summary\": \"重燃纹章之火！\",\n        \"title\": \"幻影纹章\"\n      },\n      {\n        \"android_pkg_name\": \"com.zy.yzr2.bz\",\n        \"android_pkg_size\": 400465450,\n        \"android_pkg_ver\": 77,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/yzr2/yzr2_v1.0.20_bili_842512.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/yzr2/yzr2_v1.0.20_bili_842512.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/497c062d9c39facf02e175569207af403f8fdc04.png\",\n        \"id\": 70,\n        \"new\": 1,\n        \"summary\": \"东方武侠竞技扛鼎之作\",\n        \"title\": \"影之刃2\"\n      },\n      {\n        \"android_pkg_name\": \"com.StudioGM.Nico.bili\",\n        \"android_pkg_size\": 434717113,\n        \"android_pkg_ver\": 59,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/nnlzysj/nnlzysj_v0.7.3_bili_734807.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/nnlzysj/nnlzysj_v0.7.3_bili_734807.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/30651b513ab0f5533c4dd79fc6e7aa4322b76420.png\",\n        \"id\": 74,\n        \"new\": 1,\n        \"summary\": \"异世界 x 少女 x 羁绊\",\n        \"title\": \"诺诺来自异世界\"\n      },\n      {\n        \"android_pkg_name\": \"com.tank.yx.bili\",\n        \"android_pkg_size\": 266983654,\n        \"android_pkg_ver\": 645,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/zjlm/zjlm_v1.328.2_bili_app_834742.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/zjlm/zjlm_v1.328.2_bili_app_834742.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/96d87c7dfdc6a24e9adf7866dc14af12e2a0a5bd.png\",\n        \"id\": 60,\n        \"new\": 1,\n        \"summary\": \"萌娘X坦克 大作战\",\n        \"title\": \"装甲联盟\"\n      },\n      {\n        \"android_pkg_name\": \"com.xd.sglms.bilibili\",\n        \"android_pkg_size\": 506188325,\n        \"android_pkg_ver\": 9044,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/sglms/sglms_v1.0.9044_bili_app_864243.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/sglms/sglms_v1.0.9044_bili_app_864243.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/d95f6c858126086762976d60eec2c2e395f69e04.jpg\",\n        \"id\": 50,\n        \"new\": 1,\n        \"summary\": \"意料之外却又情理之中的三国\",\n        \"title\": \"三国罗曼史\"\n      },\n      {\n        \"android_pkg_name\": \"com.xianyugame.natuwy.bili\",\n        \"android_pkg_size\": 141172906,\n        \"android_pkg_ver\": 7,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/ntzdgm/ntzdgm_v1.0.7_bili_389653.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/ntzdgm/ntzdgm_v1.0.7_bili_389653.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/9c9848b308e41b902b16dac77d290b4702c2e031.png\",\n        \"id\": 66,\n        \"new\": 0,\n        \"summary\": \"每只兔子都有一个大国梦\",\n        \"title\": \"那兔之大国梦\"\n      },\n      {\n        \"android_pkg_name\": \"com.longtugame.lxjjx.bili\",\n        \"android_pkg_size\": 526337987,\n        \"android_pkg_ver\": 776,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/lxjjx/lxjjx_v1.8.0_bili_app_118024.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/lxjjx/lxjjx_v1.8.0_bili_app_118024.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/5e61cba9d062f2d333b883c044660bfe85f088bd.png\",\n        \"id\": 58,\n        \"new\": 0,\n        \"summary\": \"幻想之境，触手可及\",\n        \"title\": \"螺旋境界线\"\n      },\n      {\n        \"android_pkg_name\": \"com.ledo.areal.bili\",\n        \"android_pkg_size\": 214714919,\n        \"android_pkg_ver\": 10400,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/rgdsj/rgdsj_v1.4.0_bili_245991.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/rgdsj/rgdsj_v1.4.0_bili_245991.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/2db63de24a6eea18bfad2938ce3d216b0c6f2641.png\",\n        \"id\": 59,\n        \"new\": 0,\n        \"summary\": \"动漫回合，协力冒险\",\n        \"title\": \"如果的世界\"\n      },\n      {\n        \"android_pkg_name\": \"com.wali.jianxiashijie3D.bili\",\n        \"android_pkg_size\": 757442067,\n        \"android_pkg_ver\": 3881,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/jxsj/jxsj_v1.2.3881_bili_app.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/jxsj/jxsj_v1.2.3881_bili_app.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/4b161990beecaa61e1effb1f2865d6c04bd49118.png\",\n        \"id\": 62,\n        \"new\": 1,\n        \"summary\": \"一生不容错过的浪漫武侠\",\n        \"title\": \"剑侠世界\"\n      },\n      {\n        \"android_pkg_name\": \"com.chyo.fleet.bili\",\n        \"android_pkg_size\": 128312007,\n        \"android_pkg_ver\": 25,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/bfzj/bfzj_v1.10.0_bili_app_754264.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/bfzj/bfzj_v1.10.0_bili_app_754264.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/63fef8556c3465dea12e3c0849bd12761cdf664b.png\",\n        \"id\": 64,\n        \"new\": 0,\n        \"summary\": \"次世代3D战争策略手游\",\n        \"title\": \"暴风战舰\"\n      },\n      {\n        \"android_pkg_name\": \"com.yunchang.djsy.bili\",\n        \"android_pkg_size\": 451454434,\n        \"android_pkg_ver\": 2100,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/djsy/djsy_v2.0.0_bili_app_562245.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/djsy/djsy_v2.0.0_bili_app_562245.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/764f761e9fd67a4e9d07155e7a621e39c2987cc0.png\",\n        \"id\": 42,\n        \"new\": 0,\n        \"summary\": \"虽然是游戏，但可不是闹着玩的\",\n        \"title\": \"刀剑神域黑衣剑士\"\n      },\n      {\n        \"android_pkg_name\": \"com.netease.ma56.bili\",\n        \"android_pkg_size\": 284813313,\n        \"android_pkg_ver\": 4,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/ydsnywl/ydsnywl_v4.0_bili_488294.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/ydsnywl/ydsnywl_v4.0_bili_488294.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/2298be435121301d750025fbd1d6f4856ba06ec8.png\",\n        \"id\": 53,\n        \"new\": 1,\n        \"summary\": \"花泽香菜陪你一同黑化！\",\n        \"title\": \"妖刀少女异闻录\"\n      },\n      {\n        \"android_pkg_name\": \"com.netease.dhhzl.bili\",\n        \"android_pkg_size\": 496783735,\n        \"android_pkg_ver\": 17,\n        \"android_sign\": \"4502A02A00395DEC05A4134AD593224D\",\n        \"download_link\": \"https://pkg.biligame.com/dhhzl/dhhzl_v1.1.7_bili_app_312258.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/dhhzl/dhhzl_v1.1.7_bili_app_312258.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/034ee658a62595cfce63dc89c59e9db4434b743e.png\",\n        \"id\": 63,\n        \"new\": 1,\n        \"summary\": \"全3D真实航海冒险MMO手游\",\n        \"title\": \"大航海之路\"\n      },\n      {\n        \"android_pkg_name\": \"com.netease.ma.bili\",\n        \"android_pkg_size\": 76142153,\n        \"android_pkg_ver\": 51000,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/ma/bili/ma2_v5.1.0_bili_app_843974.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/ma/bili/ma2_v5.1.0_bili_app_843974.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/138e5dfdb5059d94e6e6b23b0bcb8ca43f6cf111.png\",\n        \"id\": 3,\n        \"new\": 0,\n        \"summary\": \"新老玩家登录 领特别礼包哟\",\n        \"title\": \"乖离性百万亚瑟王\"\n      },\n      {\n        \"android_pkg_name\": \"com.netease.av.bili\",\n        \"android_pkg_size\": 498438674,\n        \"android_pkg_ver\": 16,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/hpjn/hpjn_v1.6.5_bili_app_946756.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/hpjn/hpjn_v1.6.5_bili_app_946756.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/14db819c78ab79c3f18e7fa5e9acf0c191594d02.png\",\n        \"id\": 57,\n        \"new\": 0,\n        \"summary\": \"二次元战机娘化游戏\",\n        \"title\": \"皇牌机娘\"\n      },\n      {\n        \"android_pkg_name\": \"com.kurogame.oppai.bili\",\n        \"android_pkg_size\": 548252109,\n        \"android_pkg_ver\": 45,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/zcsmw/zcsmw_v2.1.0_bili_app_478446.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/zcsmw/zcsmw_v2.1.0_bili_app_478446.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/633e5dc3e361ac868aa14f38978bd227869677b3.png\",\n        \"id\": 45,\n        \"new\": 0,\n        \"summary\": \"萌即正义！\",\n        \"title\": \"战场双马尾\"\n      },\n      {\n        \"android_pkg_name\": \"com.nhnst.SKCQCN.bili\",\n        \"android_pkg_size\": 295042802,\n        \"android_pkg_ver\": 93,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/klsdzj/klsdzj_v3.5.13_bili_app_452114.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/klsdzj/klsdzj_v3.5.13_bili_app_452114.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i2.hdslb.com/u_user/503113dc29417f5c53abfeb9b520dbeb.png\",\n        \"id\": 26,\n        \"new\": 0,\n        \"summary\": \"日式萌系像素风RPG\",\n        \"title\": \"克鲁赛德战记\"\n      },\n      {\n        \"android_pkg_name\": \"com.xd.ttdbl.bili\",\n        \"android_pkg_size\": 153064355,\n        \"android_pkg_ver\": 10123,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/ttdbl/ttdbl_v2.4.0_bili_app_257548.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/ttdbl/ttdbl_v2.4.0_bili_app_257548.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/048a359bdb40cfb521130396a6b4b4d3912a4e76.png\",\n        \"id\": 43,\n        \"new\": 0,\n        \"summary\": \"吃饭、睡觉、打波利！\",\n        \"title\": \"天天打波利\"\n      },\n      {\n        \"android_pkg_name\": \"com.zxlf.zwhx.bili\",\n        \"android_pkg_size\": 381836314,\n        \"android_pkg_ver\": 5,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/zwhx/zwhxq_v1.12.001_bili_291592.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/zwhx/zwhxq_v1.12.001_bili_291592.apk\",\n        \"hot\": 1,\n        \"icon\": \"http://i2.hdslb.com/u_user/5ea559c4f8d18294617cec080e1b43b9.png\",\n        \"id\": 31,\n        \"new\": 0,\n        \"summary\": \"出发，大小姐探宝团！\",\n        \"title\": \"战舞幻想曲\"\n      },\n      {\n        \"android_pkg_name\": \"com.koramgame.els.kl.bili\",\n        \"android_pkg_size\": 436721681,\n        \"android_pkg_ver\": 415,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/aezj/aezj_v0.20712.20_bili_app_353064.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/aezj/aezj_v0.20712.20_bili_app_353064.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i2.hdslb.com/u_user/7d4187201faf0669a45c77ccfb665b38.png\",\n        \"id\": 28,\n        \"new\": 0,\n        \"summary\": \"原汁原味二次元萌格斗\",\n        \"title\": \"艾尔战记\"\n      },\n      {\n        \"android_pkg_name\": \"cn.mobage.g12000145.bili\",\n        \"android_pkg_size\": 304714100,\n        \"android_pkg_ver\": 420,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/yszh/yszh_v4.2.0_bili_app_510925.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/yszh/yszh_v4.2.0_bili_app_510925.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/24e41b1d981a461fd6779d72239185b9f702b12a.png\",\n        \"id\": 40,\n        \"new\": 0,\n        \"summary\": \"银魂万事屋今日开业!\",\n        \"title\": \"银时之魂\"\n      },\n      {\n        \"android_pkg_name\": \"com.smiletech.shzj.bili\",\n        \"android_pkg_size\": 528955815,\n        \"android_pkg_ver\": 8,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/shzj/shzj_v4.17.1_bili_app_373816.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/shzj/shzj_v4.17.1_bili_app_373816.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/u_user/1126584600b7332152f5cd2bc56960e6.png\",\n        \"id\": 27,\n        \"new\": 0,\n        \"summary\": \"吾从未见过如此高颜值之塔防\",\n        \"title\": \"山海战记\"\n      },\n      {\n        \"android_pkg_name\": \"com.act91.bbrr.bili\",\n        \"android_pkg_size\": 334878345,\n        \"android_pkg_ver\": 26332,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/cyzr/cyzr_v1.14.0_bili_app.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/cyzr/cyzr_v1.14.0_bili_app.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i2.hdslb.com/u_user/751e3223d97bad57bbb8b14a747d0724.png\",\n        \"id\": 20,\n        \"new\": 0,\n        \"summary\": \"无冷却手势连招格斗\",\n        \"title\": \"苍翼之刃\"\n      },\n      {\n        \"android_pkg_name\": \"com.happyelements.miraclecn.bilibili\",\n        \"android_pkg_size\": 171388291,\n        \"android_pkg_ver\": 1322,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/mlkwy/mlkwy_v3.5.0_bili_app_1487729027.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/mlkwy/mlkwy_v3.5.0_bili_app_1487729027.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/80c7c8202a52a484d18b2ac1cc7523fffbf4a70a.png\",\n        \"id\": 8,\n        \"new\": 0,\n        \"summary\": \"伦家是最萌的游戏，快来玩\",\n        \"title\": \"梅露可物语\"\n      },\n      {\n        \"android_pkg_name\": \"com.good.world2fbcn\",\n        \"android_pkg_size\": 63167960,\n        \"android_pkg_ver\": 20,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/sj2/bili/sj2_v2.6_bili_app.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/sj2/bili/sj2_v2.6_bili_app.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/u_user/9008d9b26e263285824979e21c0c18bd.png\",\n        \"id\": 9,\n        \"new\": 0,\n        \"summary\": \"新的风暴，已经出现\",\n        \"title\": \"风暴帝国-世界2\"\n      },\n      {\n        \"android_pkg_name\": \"com.yzr.bili\",\n        \"android_pkg_size\": 215393621,\n        \"android_pkg_ver\": 31,\n        \"android_sign\": \"5F6A75569A2D96109405E969C4F57AAA\",\n        \"download_link\": \"https://pkg.biligame.com/yzr/yzr_v1.16.0_bili_app_144782.apk\",\n        \"download_link2\": \"http://pkgdl.biligame.net/yzr/yzr_v1.16.0_bili_app_144782.apk\",\n        \"hot\": 0,\n        \"icon\": \"http://i0.hdslb.com/bfs/game/4c12a1516243b08cbdef2877459c48dffcb2fb52.png\",\n        \"id\": 10,\n        \"new\": 0,\n        \"summary\": \"雨，何时能停？敌之血，流干之时\",\n        \"title\": \"影之刃\"\n      }\n    ],\n    \"glist_display_cnt\": 10,\n    \"greetings\": [\n      {\n        \"context\": \"机战萌娘，等你来战！\"\n      },\n      {\n        \"context\": \"来和阿宝学功夫吧~\"\n      },\n      {\n        \"context\": \"纳尼，我中了二向箔？\"\n      },\n      {\n        \"context\": \"不摸鱼的人参，和咸鱼有什么区别？\"\n      },\n      {\n        \"context\": \"谁是拥你入怀的王子？\"\n      },\n      {\n        \"context\": \"纣王姐姐求嫁！\"\n      },\n      {\n        \"context\": \"洛天依要带回家吗？\"\n      },\n      {\n        \"context\": \"和香菜还有组长一起来拯救都市吧~\"\n      },\n      {\n        \"context\": \"拔出石中剑，成为不列颠的王吧！\"\n      },\n      {\n        \"context\": \"一起来玩有节操的游戏\"\n      },\n      {\n        \"context\": \"我从未见过如此魔性之消除\"\n      },\n      {\n        \"context\": \"带你重回红白机时代\"\n      },\n      {\n        \"context\": \"一根手指就能玩转世界~\"\n      },\n      {\n        \"context\": \"公主当然还是我家的最可爱了\"\n      },\n      {\n        \"context\": \"和我一起进入水墨风东方幻想世界吧~\"\n      },\n      {\n        \"context\": \"愿意来读读这本血影世界的暗黑物语吗？\"\n      },\n      {\n        \"context\": \"新的风暴已经出现，你可做好准备？\"\n      },\n      {\n        \"context\": \"看不见我看不见我看不见我......\"\n      },\n      {\n        \"context\": \"诸君，我喜欢战争\"\n      },\n      {\n        \"context\": \"其实好多烦恼切掉哔—就都没有了\"\n      },\n      {\n        \"context\": \"壮士！请干了这杯安利！\"\n      }\n    ],\n    \"last_play\": [],\n    \"publicities\": [],\n    \"uid\": 117143614\n  },\n  \"request-id\": \"b37ef810453711e7add752223300e22c\",\n  \"timestamp\": 1496149000000\n}"
  },
  {
    "path": "app/src/main/assets/recommend.json",
    "content": "\n{\"code\":0,\"data\":[{\"param\":\"0\",\"goto\":\"banner\",\"idx\":1496197869,\"banner_item\":[{\"id\":47954,\"title\":\"生活0531\",\"image\":\"http://i0.hdslb.com/bfs/archive/0316d456b65201d29c07c3b582c3ac5c48e6cc0d.jpg\",\"hash\":\"d2ea6b8394d9073665364da3a7dc8ccb\",\"uri\":\"http://www.bilibili.com/blackboard/topic/activity-S1bVTw8--.html\",\"request_id\":\"1496197858463\",\"server_type\":0,\"resource_id\":631,\"index\":1,\"cm_mark\":0},{\"id\":0,\"title\":\"碧蓝\",\"image\":\"https://i0.hdslb.com/bfs/archive/559e3d6b7030dca1bb9ef2f7350b60e6fc649655.jpg\",\"hash\":\"aed9daa33a476e7a441c24abc4c7dac9\",\"uri\":\"http://blhx.biligame.com/h5\",\"request_id\":\"1496197858507q172a18a61a110q206\",\"creative_id\":17595,\"src_id\":703,\"is_ad_loc\":true,\"ad_cb\":\"CLuJARCtMBiQNyAAKAAwADi/BUIfMTQ5NjE5Nzg1ODUwN3ExNzJhMThhNjFhMTEwcTIwNkjLid7ixStSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXABeACAAQCIAa8VkgEPMTI1LjEyMC4yMjUuMTc0\",\"client_ip\":\"125.120.225.174\",\"server_type\":1,\"resource_id\":631,\"index\":2,\"cm_mark\":2},{\"id\":0,\"title\":\"【深夜福利】这TM是要搞事啊！！！\",\"image\":\"https://i0.hdslb.com/bfs/archive/e0b75b518221b0f59352b169a27cbbc7525b966b.jpg\",\"hash\":\"aaa89e8e949ac95222e8d5bb591564f8\",\"uri\":\"bilibili://video/10815497\",\"request_id\":\"1496197858507q172a18a61a110q206\",\"creative_id\":17504,\"src_id\":704,\"is_ad\":true,\"is_ad_loc\":true,\"ad_cb\":\"COCIARCIMBjqNiAAKAAwADjABUIfMTQ5NjE5Nzg1ODUwN3ExNzJhMThhNjFhMTEwcTIwNkjLid7ixStSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXABeACAAQCIAbgYkgEPMTI1LjEyMC4yMjUuMTc0\",\"click_url\":\"http://t.cr-nielsen.com/hat?_t=r\\u0026type=clk\\u0026hat_id=MTM3JjI0MCY4MTAwNTI2NSYxMTI1OTE3JjMxODgwMjQ3JoTy\\u0026_z=m\\u0026rnd=42547380\",\"client_ip\":\"125.120.225.174\",\"server_type\":1,\"resource_id\":631,\"index\":3,\"cm_mark\":1},{\"id\":48016,\"title\":\"弹幕问卷\",\"image\":\"http://i0.hdslb.com/bfs/archive/a2daba1a34d7a19449d5447600ac4005f99d8b27.jpg\",\"hash\":\"011b676d7a00486edc29510c1f6b1136\",\"uri\":\"http://www.bilibili.com/blackboard/activity-rynk7IHZ-.html\",\"request_id\":\"1496197858463\",\"server_type\":0,\"resource_id\":631,\"index\":4,\"cm_mark\":0}]},{\"title\":\"明唐——定国篇（上）相遇\",\"cover\":\"http://i1.hdslb.com/bfs/archive/0ea061024e4aa81425d9cb84f00f8e76952020f1.jpg\",\"uri\":\"bilibili://video/10930244\",\"param\":\"10930244\",\"goto\":\"av\",\"desc\":\"因明唐CP玩起了剑三\\n没上80级就手痒开始玩剑网三视频编辑器\\n三天肝出来的视频  希望大家喜欢\\n另外  重点是\\n求各种段子  各种梗  各种剧情  以对白为主\\n只要维持住炮哥的正点的形象就行了\\n谢谢大家\",\"play\":380,\"danmaku\":17,\"reply\":23,\"favorite\":25,\"coin\":17,\"share\":1,\"idx\":1496197868,\"tid\":65,\"tname\":\"网络游戏\",\"tag\":{\"tag_id\":1052085,\"tag_name\":\"明唐大法好\",\"count\":{\"atten\":155}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:秋上君\"},{\"reason_id\":2,\"reason_name\":\"分区:网络游戏\"},{\"reason_id\":3,\"reason_name\":\"标签:明唐大法好\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1496085629,\"duration\":173,\"mid\":28650198,\"name\":\"秋上君\",\"face\":\"http://static.hdslb.com/images/member/noface.gif\"},{\"title\":\"【剑网三八周年（全门派）】天行九歌\",\"cover\":\"http://i1.hdslb.com/bfs/archive/008ee6111a0861a7e3827e3c379865e813ac93b7.jpg\",\"uri\":\"bilibili://video/10843644\",\"param\":\"10843644\",\"goto\":\"av\",\"desc\":\"BGM：霍尊-《天行九歌》。最近太喜欢这首歌了，又懒癌发作。。所以做了做，又剪了剪以前的视频，希望大家不要嫌弃~~喜欢请投票哦！~捂脸逃走~~~~\",\"play\":8742,\"danmaku\":153,\"reply\":96,\"favorite\":466,\"coin\":111,\"share\":30,\"idx\":1496197867,\"tid\":121,\"tname\":\"GMV\",\"tag\":{\"tag_id\":25483,\"tag_name\":\"GMV\",\"count\":{\"atten\":135}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:顾小幺不吃药\"},{\"reason_id\":2,\"reason_name\":\"分区:GMV\"},{\"reason_id\":3,\"reason_name\":\"标签:GMV\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1495827724,\"duration\":234,\"mid\":35770531,\"name\":\"顾小幺不吃药\",\"face\":\"http://i2.hdslb.com/bfs/face/6f3fd55979fae712ffdfd93cd1adb37a679cc132.jpg\"},{\"title\":\"刺客信条燃向混剪\",\"cover\":\"http://i1.hdslb.com/bfs/archive/7c0e26b22078fab89749194f2d8cfab6b009f6e6.png\",\"uri\":\"bilibili://video/10935834\",\"param\":\"10935834\",\"goto\":\"av\",\"desc\":\"BGM：In - Simple Plan\",\"play\":320,\"danmaku\":2,\"reply\":7,\"favorite\":18,\"coin\":10,\"share\":3,\"idx\":1496197866,\"tid\":121,\"tname\":\"GMV\",\"tag\":{\"tag_id\":6716,\"tag_name\":\"动作\",\"count\":{\"atten\":45489}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:中二の废宅\"},{\"reason_id\":2,\"reason_name\":\"分区:GMV\"},{\"reason_id\":3,\"reason_name\":\"标签:动作\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1496122029,\"duration\":220,\"mid\":16915049,\"name\":\"中二の废宅\",\"face\":\"http://i1.hdslb.com/bfs/face/ec8d29293a148fa3e59137e1b24822c3bc85fa32.jpg\"},{\"title\":\"【十点电影】交往劈腿、婚内出轨，何书桓这群人，才是真正的渣男\",\"cover\":\"http://i0.hdslb.com/bfs/archive/80e784f373a129725e9ca287b63e1ef3b84f9dcf.jpg\",\"uri\":\"bilibili://video/10939625\",\"param\":\"10939625\",\"goto\":\"av\",\"desc\":\"前女友童年都看了些啥玩意儿(⊙﹏⊙)\",\"play\":20463,\"danmaku\":315,\"reply\":287,\"favorite\":236,\"coin\":203,\"share\":63,\"idx\":1496197865,\"tid\":128,\"tname\":\"电视剧相关\",\"tag\":{\"tag_id\":1436580,\"tag_name\":\"十点电影\",\"count\":{\"atten\":114}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:十点电影\"},{\"reason_id\":2,\"reason_name\":\"分区:电视剧相关\"},{\"reason_id\":3,\"reason_name\":\"标签:十点电影\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1496127763,\"duration\":339,\"mid\":17518116,\"name\":\"十点电影\",\"face\":\"http://i1.hdslb.com/bfs/face/0979d1a0a9fa0fa115dfa275df48dbe6028a92ba.jpg\"},{\"title\":\"【桌面美化】win10剑灵桌面美化show\",\"cover\":\"http://i0.hdslb.com/bfs/archive/102a583155d24c104e0fd16774f60c18daa83f51.jpg\",\"uri\":\"bilibili://video/10941861\",\"param\":\"10941861\",\"goto\":\"av\",\"desc\":\"美化说明：\\n1.桌面软件为：Rainmeter\\n2.壁纸使用软件为：wallpaper engine,壁纸主题源自Steam创意工坊\\n3.任务栏修改软件为：StartIsBack\\n4.BGM为剑灵原声音乐：쾌검（快剑）  金致焕\\n\\nPS:Rainmeter这几款皮肤算是经典烂街了，wallpaper engine强大之处更不必多说，屏幕中间的是两个软件的组合装饰效果。本视频仅为个人兴趣，不喜勿喷，欢迎讨论交流。\",\"play\":4425,\"danmaku\":37,\"reply\":46,\"favorite\":172,\"coin\":12,\"share\":12,\"idx\":1496197864,\"tid\":122,\"tname\":\"野生技术协会\",\"tag\":{\"tag_id\":634574,\"tag_name\":\"经验分享\",\"count\":{\"atten\":41}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:晚明楼\"},{\"reason_id\":2,\"reason_name\":\"分区:野生技术协会\"},{\"reason_id\":3,\"reason_name\":\"标签:经验分享\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1496131314,\"duration\":127,\"mid\":3574152,\"name\":\"晚明楼\",\"face\":\"http://i0.hdslb.com/bfs/face/3980de96aed4b148af6dbfdd141e585fc159f483.jpg\"},{\"title\":\"【燃向-刺客信条cg混剪】为自由而战\",\"cover\":\"http://i0.hdslb.com/bfs/archive/60d1a95fe90f5e2bdfc3bb5031fe834d9917604b.jpg\",\"uri\":\"bilibili://video/10931370\",\"param\":\"10931370\",\"goto\":\"av\",\"desc\":\"BGM：Audio machine - Shadowfall - 纯音乐版\",\"play\":439,\"danmaku\":3,\"reply\":9,\"favorite\":20,\"coin\":4,\"share\":1,\"idx\":1496197863,\"tid\":121,\"tname\":\"GMV\",\"tag\":{\"tag_id\":12459,\"tag_name\":\"燃曲\",\"count\":{\"atten\":626}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:逗比作死的兔纸\"},{\"reason_id\":2,\"reason_name\":\"分区:GMV\"},{\"reason_id\":3,\"reason_name\":\"标签:燃曲\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1496088385,\"duration\":150,\"mid\":6083998,\"name\":\"逗比作死的兔纸\",\"face\":\"http://i2.hdslb.com/bfs/face/5b2aff65d8fb866138f8ee81fbcf3b5a802c36d3.jpg\"},{\"title\":\"【Eva Green】伊娃·格林电影混剪——《易燃易爆炸  》\",\"cover\":\"http://i1.hdslb.com/bfs/archive/1a8f0531be48080c6e15b4489c16708b25977521.jpg\",\"uri\":\"bilibili://video/10853527\",\"param\":\"10853527\",\"goto\":\"av\",\"desc\":\"伊娃·格林（Eva Green），法国演员，1980年7月5日出生于巴黎，烟不离手。\",\"play\":11513,\"danmaku\":83,\"reply\":46,\"favorite\":728,\"coin\":119,\"share\":68,\"idx\":1496197862,\"tid\":82,\"tname\":\"电影相关\",\"tag\":{\"tag_id\":2525771,\"tag_name\":\"Eva Green\",\"count\":{\"atten\":28}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:暴君吃葡萄\"},{\"reason_id\":2,\"reason_name\":\"分区:电影相关\"},{\"reason_id\":3,\"reason_name\":\"标签:Eva Green\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1495858559,\"duration\":636,\"mid\":24995335,\"name\":\"暴君吃葡萄\",\"face\":\"http://static.hdslb.com/images/member/noface.gif\"},{\"title\":\"【老范】射击版狼人杀，求关注，来开船吧\",\"cover\":\"http://i0.hdslb.com/bfs/live/0fe43a8106809de5fdb04ea4c7aac66f1d6c8185.jpg\",\"uri\":\"bilibili://live/4152345\",\"param\":\"4152345\",\"goto\":\"live\",\"desc\":\"野生的主播开播啦！不是每天都见得到哦。真的不进来看看咩？(°∀°)ﾉ\",\"idx\":1496197861,\"mid\":105563254,\"name\":\"老范I\",\"face\":\"http://i1.hdslb.com/bfs/face/ca739b66fae55f7255f95111256a73c05447d954.jpg\",\"online\":2772,\"area\":\"单机联机\",\"area_id\":1,\"open\":1496186842},{\"title\":\"【DMC】鬼泣的GMV小合集（黑历史合集）\",\"cover\":\"http://i2.hdslb.com/bfs/archive/91fb24b49d578c7da09401026e1ed0d5f4527b21.jpg\",\"uri\":\"bilibili://video/10942766\",\"param\":\"10942766\",\"goto\":\"av\",\"desc\":\"不是新作，很久以前做的GMV,因为某站药丸所以稍微搬到这里保存下来\",\"play\":1130,\"danmaku\":3,\"reply\":14,\"favorite\":29,\"coin\":14,\"share\":1,\"idx\":1496197860,\"tid\":121,\"tname\":\"GMV\",\"tag\":{\"tag_id\":11118,\"tag_name\":\"鬼泣3\",\"count\":{\"atten\":127}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:TsukiBito流流\"},{\"reason_id\":2,\"reason_name\":\"分区:GMV\"},{\"reason_id\":3,\"reason_name\":\"标签:鬼泣3\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1496134845,\"duration\":300,\"mid\":3250601,\"name\":\"TsukiBito流流\",\"face\":\"http://i1.hdslb.com/bfs/face/a4af7ecbc35f96341597fdcb5d003669e4aa7db5.jpg\"},{\"title\":\"QUEEN\",\"cover\":\"http://i2.hdslb.com/bfs/archive/1c83bdc94f443050ef35e433ac9daa4c33b31e3b.jpg\",\"uri\":\"bilibili://video/10834061\",\"param\":\"10834061\",\"goto\":\"av\",\"desc\":\"BGM:Zack Hemsey-I Can Get It Back (Instrumental)\",\"play\":10091,\"danmaku\":137,\"reply\":210,\"favorite\":835,\"coin\":1528,\"share\":87,\"idx\":1496197859,\"tid\":82,\"tname\":\"电影相关\",\"tag\":{\"tag_id\":305491,\"tag_name\":\"欧美群像\",\"count\":{\"atten\":16364}},\"dislike_reasons\":[{\"reason_id\":4,\"reason_name\":\"UP主:Man6on\"},{\"reason_id\":2,\"reason_name\":\"分区:电影相关\"},{\"reason_id\":3,\"reason_name\":\"标签:欧美群像\"},{\"reason_id\":1,\"reason_name\":\"不感兴趣\"}],\"ctime\":1495779750,\"duration\":100,\"mid\":25678461,\"name\":\"Man6on\",\"face\":\"http://i2.hdslb.com/bfs/face/e7180c21db07c15181dd198df47e4009eb9a80bf.jpg\"}],\"message\":\"\",\"ttl\":1}"
  },
  {
    "path": "app/src/main/assets/recommend_chase.json",
    "content": "{\"code\": 0,\n  \"message\": \"success\",\n  \"result\": {\n    \"ad\": [],\n    \"recommend_cn\": {\n      \"foot\": [\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/cdd184ce6e51aefd7055103d54753fd63d47e061.jpg\",\n          \"cursor\": 1496246400706,\n          \"desc\": \"叶峰要玩自己的音乐，楚天歌想让麦云洁另眼相看，盖世爱要出风头，石小松要当一流鼓手，四个男孩组成了乐队，感受到青春与音乐的魅力。\",\n          \"id\": 5046,\n          \"is_new\": 1,\n          \"link\": \"http://bangumi.bilibili.com/anime/2169\",\n          \"onDt\": \"2017-06-01 00:00:00\",\n          \"title\": \"六一快乐•童年的《我为歌狂》\"\n        }\n      ],\n      \"recommend\": [\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/186560d36c229efd888ef959f796d58abd2fd685.jpg\",\n          \"favourites\": \"18056\",\n          \"is_auto\": 0,\n          \"is_finish\": 0,\n          \"is_started\": 1,\n          \"last_time\": 1496318400,\n          \"newest_ep_index\": \"41\",\n          \"pub_time\": 1469116800,\n          \"season_id\": 6052,\n          \"season_status\": 2,\n          \"title\": \"叫我僵小鱼 日常篇\",\n          \"total_count\": -1,\n          \"watching_count\": 0\n        },\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/6e87284e07edb2a7bb0fbe6bd2af0e4601a13f7b.jpg\",\n          \"favourites\": \"12383\",\n          \"is_auto\": 0,\n          \"is_finish\": 0,\n          \"is_started\": 1,\n          \"last_time\": 1496304000,\n          \"newest_ep_index\": \"2\",\n          \"pub_time\": 1495641600,\n          \"season_id\": 6187,\n          \"season_status\": 2,\n          \"title\": \"盗墓笔记之沙海 第二季\",\n          \"total_count\": -1,\n          \"watching_count\": 0\n        },\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/6bf4ed92c56f6d9cb51d8e88f8eb8c599476b47b.jpg\",\n          \"favourites\": \"20689\",\n          \"is_auto\": 0,\n          \"is_finish\": 0,\n          \"is_started\": 1,\n          \"last_time\": 1496282400,\n          \"newest_ep_index\": \"23\",\n          \"pub_time\": 1482940800,\n          \"season_id\": 6022,\n          \"season_status\": 2,\n          \"title\": \"菊叔5岁画\",\n          \"total_count\": -1,\n          \"watching_count\": 0\n        }\n      ]\n    },\n    \"recommend_jp\": {\n      \"foot\": [\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/f57423fba6a308193cd4bf252c41b10ba9c91b62.jpg\",\n          \"cursor\": 1496102400307,\n          \"desc\": \"房东是个可爱的高中生！\",\n          \"id\": 4850,\n          \"link\": \"http://bangumi.bilibili.com/anime/3116\",\n          \"onDt\": \"2017-05-30 08:00:00\",\n          \"title\": \"【泡面档】房东妹子青春期！\"\n        }\n      ],\n      \"recommend\": [\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/8aa87787edd29b84c4091e8e483ae48422b7bbd0.jpg\",\n          \"favourites\": \"926481\",\n          \"is_auto\": 0,\n          \"is_finish\": 0,\n          \"is_started\": 1,\n          \"last_time\": 1496365202,\n          \"newest_ep_index\": \"9\",\n          \"pub_time\": 1491494400,\n          \"season_id\": 5996,\n          \"season_status\": 2,\n          \"title\": \"恋爱暴君\",\n          \"total_count\": 12,\n          \"watching_count\": 0\n        },\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/6fccd08f6f747343c2d3bbcd54e4912a9fa51418.jpg\",\n          \"favourites\": \"156031\",\n          \"is_auto\": 0,\n          \"is_finish\": 0,\n          \"is_started\": 1,\n          \"last_time\": 1496341680,\n          \"newest_ep_index\": \"9\",\n          \"pub_time\": 1491494400,\n          \"season_id\": 5991,\n          \"season_status\": 2,\n          \"title\": \"青春歌舞伎\",\n          \"total_count\": 12,\n          \"watching_count\": 0\n        },\n        {\n          \"cover\": \"http://i0.hdslb.com/bfs/bangumi/5ce66f68d54052e3a305524b9b06a76977e974fc.jpg\",\n          \"favourites\": \"688042\",\n          \"is_auto\": 0,\n          \"is_finish\": 0,\n          \"is_started\": 1,\n          \"last_time\": 1496335080,\n          \"newest_ep_index\": \"8\",\n          \"pub_time\": 1491408000,\n          \"season_id\": 5989,\n          \"season_status\": 2,\n          \"title\": \"月色真美\",\n          \"total_count\": 12,\n          \"watching_count\": 0\n        }\n      ]\n    }\n  }\n}"
  },
  {
    "path": "app/src/main/assets/region.json",
    "content": "{\n  \"code\": 0,\n  \"data\": [\n    {\n      \"tid\": 65537,\n      \"reid\": 0,\n      \"name\": \"直播\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 12,\n          \"reid\": 13,\n          \"name\": \"手游直播\",\n          \"logo\": \"http://i0.hdslb.com/bfs/live/9c7dad347d8bc25e56a53e9c6f65526ce8161065.jpg\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 8,\n          \"reid\": 13,\n          \"name\": \"萌宅推荐\",\n          \"logo\": \"http://i0.hdslb.com/u_user/18ad593e4b2f90b233f817e028bee71d.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 9,\n          \"reid\": 13,\n          \"name\": \"绘画专区\",\n          \"logo\": \"http://i0.hdslb.com/u_user/405774aed11d0538a3548109a598fd80.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 3,\n          \"reid\": 13,\n          \"name\": \"网络游戏\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 1,\n          \"reid\": 13,\n          \"name\": \"单机联机\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 4,\n          \"reid\": 13,\n          \"name\": \"电子竞技\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 10,\n          \"reid\": 13,\n          \"name\": \"唱见舞见\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 6,\n          \"reid\": 13,\n          \"name\": \"生活娱乐\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 2,\n          \"reid\": 13,\n          \"name\": \"御宅文化\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 7,\n          \"reid\": 13,\n          \"name\": \"放映厅\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 99,\n          \"reid\": 13,\n          \"name\": \"精彩轮播\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 13,\n      \"reid\": 0,\n      \"name\": \"番剧\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 33,\n          \"reid\": 13,\n          \"name\": \"连载动画\",\n          \"logo\": \"http://i0.hdslb.com/u_user/54f589cd0573f9ab5c735698ae156d19.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 32,\n          \"reid\": 13,\n          \"name\": \"完结动画\",\n          \"logo\": \"http://i0.hdslb.com/u_user/18ad593e4b2f90b233f817e028bee71d.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 153,\n          \"reid\": 13,\n          \"name\": \"国产动画\",\n          \"logo\": \"http://i0.hdslb.com/u_user/405774aed11d0538a3548109a598fd80.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 51,\n          \"reid\": 13,\n          \"name\": \"资讯\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 152,\n          \"reid\": 13,\n          \"name\": \"官方延伸\",\n          \"logo\": \"http://i0.hdslb.com/u_user/a78fa47e8f25772d51db1a19fe8b310f.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 1,\n      \"reid\": 0,\n      \"name\": \"动画\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 24,\n          \"reid\": 1,\n          \"name\": \"MAD·AMV\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 25,\n          \"reid\": 1,\n          \"name\": \"MMD·3D\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 47,\n          \"reid\": 1,\n          \"name\": \"短片·手书·配音\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 27,\n          \"reid\": 1,\n          \"name\": \"综合\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 3,\n      \"reid\": 0,\n      \"name\": \"音乐\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 31,\n          \"reid\": 3,\n          \"name\": \"翻唱\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 30,\n          \"reid\": 3,\n          \"name\": \"VOCALOID·UTAU\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 59,\n          \"reid\": 3,\n          \"name\": \"演奏\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 54,\n          \"reid\": 3,\n          \"name\": \"OP/ED/OST\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 28,\n          \"reid\": 3,\n          \"name\": \"原创音乐\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 29,\n          \"reid\": 3,\n          \"name\": \"三次元音乐\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 130,\n          \"reid\": 3,\n          \"name\": \"音乐选集\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 129,\n      \"reid\": 0,\n      \"name\": \"舞蹈\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 20,\n          \"reid\": 129,\n          \"name\": \"宅舞\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 154,\n          \"reid\": 129,\n          \"name\": \"三次元舞蹈\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 156,\n          \"reid\": 129,\n          \"name\": \"舞蹈教程\",\n          \"logo\": \"http://i0.hdslb.com/u_user/f2f446184c967b47dd8ceb19e8ad634c.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 4,\n      \"reid\": 0,\n      \"name\": \"游戏\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 17,\n          \"reid\": 4,\n          \"name\": \"单机联机\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 65,\n          \"reid\": 4,\n          \"name\": \"网游·电竞\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 136,\n          \"reid\": 4,\n          \"name\": \"音游\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 19,\n          \"reid\": 4,\n          \"name\": \"Mugen\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 121,\n          \"reid\": 4,\n          \"name\": \"GMV\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 36,\n      \"reid\": 0,\n      \"name\": \"科技\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 37,\n          \"reid\": 36,\n          \"name\": \"纪录片\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 124,\n          \"reid\": 36,\n          \"name\": \"趣味科普人文\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 122,\n          \"reid\": 36,\n          \"name\": \"野生技术协会\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 39,\n          \"reid\": 36,\n          \"name\": \"演讲·公开课\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 96,\n          \"reid\": 36,\n          \"name\": \"星海\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 95,\n          \"reid\": 36,\n          \"name\": \"数码\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 98,\n          \"reid\": 36,\n          \"name\": \"机械\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 160,\n      \"reid\": 0,\n      \"name\": \"生活\",\n      \"logo\": \"http://i0.hdslb.com/bfs/archive/c2387196e2a4d1e7b2d77c6774ff398005e4953f.png\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 138,\n          \"reid\": 160,\n          \"name\": \"搞笑\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 21,\n          \"reid\": 160,\n          \"name\": \"日常\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 76,\n          \"reid\": 160,\n          \"name\": \"美食圈\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 75,\n          \"reid\": 160,\n          \"name\": \"动物圈\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 161,\n          \"reid\": 160,\n          \"name\": \"手工\",\n          \"logo\": \"http://i0.hdslb.com/bfs/archive/f87bb34913e8f7eeef216aba813961c47117e783.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 162,\n          \"reid\": 160,\n          \"name\": \"绘画\",\n          \"logo\": \"http://i0.hdslb.com/bfs/archive/e6b66a76eb07f2acffd00b8f8c1cc0ff57e75e53.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 163,\n          \"reid\": 160,\n          \"name\": \"运动\",\n          \"logo\": \"http://i0.hdslb.com/bfs/archive/5cfa7ac649cc6b292e876a483062c04c4a2d9b6c.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 119,\n      \"reid\": 0,\n      \"name\": \"鬼畜\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 22,\n          \"reid\": 119,\n          \"name\": \"鬼畜调教\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 26,\n          \"reid\": 119,\n          \"name\": \"音MAD\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 126,\n          \"reid\": 119,\n          \"name\": \"人力VOCALOID\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 127,\n          \"reid\": 119,\n          \"name\": \"教程演示\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 155,\n      \"reid\": 0,\n      \"name\": \"时尚\",\n      \"logo\": \"http://i0.hdslb.com/bfs/static/abea372535e68ce4206f8bad68741380.png\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 157,\n          \"reid\": 155,\n          \"name\": \"美妆\",\n          \"logo\": \"http://i0.hdslb.com/u_user/6c6b75e7fa62b5a9711676aa1d58d40d.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 158,\n          \"reid\": 155,\n          \"name\": \"服饰\",\n          \"logo\": \"http://i0.hdslb.com/u_user/49ae98cf31cf190f8df27fdd665839ba.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 159,\n          \"reid\": 155,\n          \"name\": \"资讯\",\n          \"logo\": \"http://i0.hdslb.com/u_user/909e5df75af68fc953d8dc847f7918e9.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 164,\n          \"reid\": 155,\n          \"name\": \"健身\",\n          \"logo\": \"http://i0.hdslb.com/bfs/archive/c5da2d170056227118594ab2c70d40ad9d0eed5c.png\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 5,\n      \"reid\": 0,\n      \"name\": \"娱乐\",\n      \"logo\": \"http://i0.hdslb.com/bfs/archive/31fa219e86c646a45a3a054609892de1e7071f97.png\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 71,\n          \"reid\": 5,\n          \"name\": \"综艺\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 137,\n          \"reid\": 5,\n          \"name\": \"明星\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 131,\n          \"reid\": 5,\n          \"name\": \"Korea相关\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 23,\n      \"reid\": 0,\n      \"name\": \"电影\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 82,\n          \"reid\": 23,\n          \"name\": \"电影相关\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 85,\n          \"reid\": 23,\n          \"name\": \"短片\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 145,\n          \"reid\": 23,\n          \"name\": \"欧美电影\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 146,\n          \"reid\": 23,\n          \"name\": \"日本电影\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 147,\n          \"reid\": 23,\n          \"name\": \"国产电影\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 83,\n          \"reid\": 23,\n          \"name\": \"其他国家\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 11,\n      \"reid\": 0,\n      \"name\": \"电视剧\",\n      \"logo\": \"\",\n      \"goto\": \"\",\n      \"param\": \"\",\n      \"children\": [\n        {\n          \"tid\": 15,\n          \"reid\": 11,\n          \"name\": \"连载剧集\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 34,\n          \"reid\": 11,\n          \"name\": \"完结剧集\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 86,\n          \"reid\": 11,\n          \"name\": \"特摄·布袋戏\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        },\n        {\n          \"tid\": 128,\n          \"reid\": 11,\n          \"name\": \"电视剧相关\",\n          \"logo\": \"\",\n          \"goto\": \"\",\n          \"param\": \"\"\n        }\n      ]\n    },\n    {\n      \"tid\": 65539,\n      \"reid\": 0,\n      \"name\": \"游戏中心\",\n      \"logo\": \"http://i0.hdslb.com/bfs/archive/656df3124c81dd0e19bdc0a3e017091268b3db73.jpg\",\n      \"goto\": \"\",\n      \"param\": \"\"\n    }\n  ],\n  \"message\": \"\",\n  \"ver\": \"15966009282371228957\"\n}"
  },
  {
    "path": "app/src/main/assets/search.json",
    "content": "{\n  \"code\": 0,\n  \"data\": {\n    \"items\": {\n      \"archive\": [\n        {\n          \"attentions\": 0,\n          \"author\": \"Xiao番茄丶\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/0258e7dfbbfd767e42b5063c69450bfc91fe02ba.jpg\",\n          \"danmaku\": 24,\n          \"desc\": \"http://www.budejie.com/pc/25385657.html怎么没有蓝火？\",\n          \"duration\": \"0:8\",\n          \"goto\": \"av\",\n          \"param\": \"11345283\",\n          \"play\": 39302,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"社会王：我爱你，哪怕是你不经意的一句玩笑，我也跑遍世界找给你（你要的加特林）\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11345283\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"冬日蜀黍\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/6f785f0e87c4870a3dcd904bfc38eb3644702b0e.jpg\",\n          \"danmaku\": 1613,\n          \"desc\": \"一个大坑终于要完结了。游戏名：以罪之名。\",\n          \"duration\": \"41:51\",\n          \"goto\": \"av\",\n          \"param\": \"11400445\",\n          \"play\": 9073,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【悬疑剧场】最终回！国王游戏！！\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11400445\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"怕上火暴王老菊\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/01c7b8abe1f1b8107006108d11e24724a54aae60.jpg\",\n          \"danmaku\": 9006,\n          \"desc\": \"感觉尾巴肥肥肉肉好好吃\",\n          \"duration\": \"62:32\",\n          \"goto\": \"av\",\n          \"param\": \"11370914\",\n          \"play\": 304223,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王老菊】肉鸽之魂，神奇的天路~10\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11370914\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"泽野螳螂\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/5b84c45c82c42b3e89ec81a25013d7bba3950fe7.jpg\",\n          \"danmaku\": 1050,\n          \"desc\": \"最近玩了这游戏，一不小心就鬼畜了一下\",\n          \"duration\": \"1:48\",\n          \"goto\": \"av\",\n          \"param\": \"11337665\",\n          \"play\": 133669,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"双♂王咆哮\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11337665\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"OELoop\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/91fbace64632a65dab2f2751eae3e948ec6aab2c.png\",\n          \"danmaku\": 2760,\n          \"desc\": \"爷爷第一首凳上摇滚金曲！科科嗷！\",\n          \"duration\": \"1:13\",\n          \"goto\": \"av\",\n          \"param\": \"10550263\",\n          \"play\": 809482,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王健林】管它几亿！\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/10550263\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"友人么么哒\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/37f4bf3e36942c8dc324ce117f00023b7a649287.jpg\",\n          \"danmaku\": 3476,\n          \"desc\": \"《王者？别闹！》第一集，狄仁杰1V9？ 我可能有一帮假队友…… (╯°Д°)╯更多精彩请关注 微信公众号：友人么么哒微博：@友人在此\",\n          \"duration\": \"3:54\",\n          \"goto\": \"av\",\n          \"param\": \"11027659\",\n          \"play\": 145128,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"王者？别闹！第1集\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11027659\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"★⑥檤轮囬★\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/3c5275c187c5172946038bb68acc7c007b81372c.jpg\",\n          \"danmaku\": 1156,\n          \"desc\": \"欢迎关注新浪微博：http://weibo.com/liudao\",\n          \"duration\": \"12:25\",\n          \"goto\": \"av\",\n          \"param\": \"11391291\",\n          \"play\": 99130,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【六道杂谈】游戏王最终战：游戏VS亚图姆！内奸龙完成三杀\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11391291\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"水一大魔王\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/0930261fa3005dc86677e3262407a2620e56a1e3.jpg\",\n          \"danmaku\": 2778,\n          \"desc\": \"新浪微博水一亦寒\",\n          \"duration\": \"24:59\",\n          \"goto\": \"av\",\n          \"param\": \"11371504\",\n          \"play\": 68185,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王者荣耀】3000法强的嬴政伤害有多恐怖？逆风血战大神车队\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11371504\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"怕上火暴王老菊\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/d9c5de61bd83bd14762c280393b9740b5a8732f1.jpg\",\n          \"danmaku\": 2716,\n          \"desc\": \"新的夜世界模式我已经摸透了。开始我以为这是一个莽到极致的游戏，后来发现还需要智商时刻在线，这么说来，这游戏还真是适合我呢。\",\n          \"duration\": \"29:56\",\n          \"goto\": \"av\",\n          \"param\": \"11344178\",\n          \"play\": 308562,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"王老菊教你当部落酋长\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11344178\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"浣熊君\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/70401e732e6ce88d3b1ad1773ec793a1f78e98e2.png\",\n          \"danmaku\": 345,\n          \"desc\": \"《王者荣耀》逗比AG超玩会YY90006解说 虎牙主播浣熊致力于英雄尝鲜和新玩法的开辟，希望大家能帮忙点点订阅投个币收藏转发走一走，谢谢各位观众朋友！QQ2864670814。微博：浣熊君主播。虎牙直播搜索浣熊君头像和我一样或直播地址：http://www.huya.com/huanxiongjun 每天晚上6-10王者荣耀和周末早上7-11传说对决~\",\n          \"duration\": \"12:46\",\n          \"goto\": \"av\",\n          \"param\": \"11383437\",\n          \"play\": 29462,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"王者荣耀：这只熊从来没用过李白~掏出来屠杀直冲黑耀段位\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11383437\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"怕上火暴王老菊\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/0ef1012ad43b6ad145257de51b42d58e91076fcb.jpg\",\n          \"danmaku\": 11196,\n          \"desc\": \"轻轻松松\",\n          \"duration\": \"51:46\",\n          \"goto\": \"av\",\n          \"param\": \"11198197\",\n          \"play\": 308561,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王老菊】肉鸽之魂，电力靓基~07\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11198197\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"腾讯综艺\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/8092fb4aaa30d05c3fb3f7d2cbee738a79ae0f53.jpg\",\n          \"danmaku\": 7318,\n          \"desc\": \"是一档明星美食脱口秀节目。节目由何炅与王嘉尔一起担任主持，每期2位明星大咖和自己的冰箱一起来到节目现场，通过揭秘冰箱来与6位性格各异的主厨畅聊美食生活、八卦趣事，每期两位主厨利用明星冰箱食材进行15分钟创意料理对决，第3季特别出现X厨师，与原有八位冰箱家族厨师厨艺对决。\",\n          \"duration\": \"0:0\",\n          \"goto\": \"av\",\n          \"param\": \"11327809\",\n          \"play\": 104890,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【拜托了冰箱 第三季】第10期：全场大哭！姚晨现场打拳K.O王嘉尔，何炅神秘冰箱首次开启\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11327809\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"极帅GG小给给\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/a3b07375d650f38f5c9d0dcedea9affcdcc680d5.jpg\",\n          \"danmaku\": 1009,\n          \"desc\": \"微博:http://weibo.com/jishuaigg\",\n          \"duration\": \"5:51\",\n          \"goto\": \"av\",\n          \"param\": \"11283097\",\n          \"play\": 43460,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"[乱斗吧勇士VS王者荣耀]4399这游戏和王者荣耀很像啊！\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11283097\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"吾乃光标学徒\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/8e25d9e49296ac5e6d0204349468adf07d5d6d9d.jpg\",\n          \"danmaku\": 351,\n          \"desc\": \"huya.com/heigou自制 黑店百地直播录制，每天18:55直播（一般迟到20分钟），YY90077，虎牙直播，主打上单肉，常玩上单的同学可以关注下新浪微博：上单主播黑店百地非常感谢up主龙猫kiyomi提供的技术支持\",\n          \"duration\": \"193:28\",\n          \"goto\": \"av\",\n          \"param\": \"11397184\",\n          \"play\": 10157,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【黑狗直播】6.15合集，皇子蛮王船长狗头，又和妹狗包下打了一局\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11397184\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"影视狂魔老王\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/8b74d7f8bdc57022d9f3214e74ab236015ea1942.jpg\",\n          \"danmaku\": 158,\n          \"desc\": \"国产神作《整容游戏》05！小黑陈浩身份大揭秘！隐藏BOSS终于现身！\",\n          \"duration\": \"5:12\",\n          \"goto\": \"av\",\n          \"param\": \"11398947\",\n          \"play\": 24183,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【老王】国产神作《整容游戏》05！小黑陈浩身份大揭秘！隐藏BOSS终于现身！\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11398947\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"水一大魔王\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/2cabab9a35aadc9b20ff1b236d11030e70c87cea.jpg\",\n          \"danmaku\": 2848,\n          \"desc\": \"新浪微博水一亦寒\",\n          \"duration\": \"16:5\",\n          \"goto\": \"av\",\n          \"param\": \"11405493\",\n          \"play\": 42078,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王者荣耀】赵云韩信单挑谁强？国服第一赵云追着韩信跑！\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11405493\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"伊丽莎白鼠\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/615f086a40c2d1dde2087c69947ae05bed29a4e2.jpg\",\n          \"danmaku\": 13701,\n          \"desc\": \"广西南宁，广西南宁！王八牌皮鞋，原价一百多，现价三百多！买不了上当，买不了吃亏！------------------------------------------------------------------------（白鼠年纪大了，基本没时间做鬼畜啦，今天还能更新，就觉得是自己的福气，祝大家在新的一年里，有更多更好看的鬼畜，新年快乐！\",\n          \"duration\": \"0:58\",\n          \"goto\": \"av\",\n          \"param\": \"8247204\",\n          \"play\": 3566352,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【最强卖鞋哥】这双王八牌皮鞋，我买定了！\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/8247204\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"请与逗比同归于尽\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/6116b36db57891bf5457e34bf370653657578ab5.jpg\",\n          \"danmaku\": 305,\n          \"desc\": \"我是一名王者荣耀逗比主播~更多搞笑短片欢迎关注新浪微博 @请与逗比同归于尽。直播地点：斗鱼TV，房间2250040。如果你喜欢的话可以点顶，想看接下来内容可以点订阅哦。\",\n          \"duration\": \"2:0\",\n          \"goto\": \"av\",\n          \"param\": \"11366801\",\n          \"play\": 63116,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王者荣耀】高渐离：开口跪，没错！我开口就得跪\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11366801\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"会拉车的猫\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/4732a58edac2bedd219b05452c207c815ce4e21f.jpg\",\n          \"danmaku\": 327,\n          \"desc\": \"很感谢大家喜欢这个系列，既然大家这么热情，第二弹肯定是会有的。但是up主最近在考试，所以可能会晚一些。先放个小番外吧，两个小时剪完的，嘉尔跟这首歌实在太配了哈哈哈\",\n          \"duration\": \"1:32\",\n          \"goto\": \"av\",\n          \"param\": \"11345673\",\n          \"play\": 24238,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【王嘉尔x鹿晗x迪丽热巴】【陆地夫妇】用奇怪的方式打开鹿迪-番外篇\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11345673\"\n        },\n        {\n          \"attentions\": 0,\n          \"author\": \"艾尔十六\",\n          \"cover\": \"https://i0.hdslb.com/bfs/archive/c49b829d0bbb0ea0a1029ca003cb119dd548f14b.jpg\",\n          \"danmaku\": 6868,\n          \"desc\": \"自制：新·游戏王VS系列预告片：av4233538；第1集：av4377433；第2集：av4736126；第3集：av5221676；第4集：av6205823；第5集：av8538902；第6集：本视频；原作VS系列：av61421\",\n          \"duration\": \"17:12\",\n          \"goto\": \"av\",\n          \"param\": \"11230200\",\n          \"play\": 313241,\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"【新·游戏王VS系列】第6集：王様和吾王\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/11230200\"\n        }\n      ],\n      \"movie\": [\n        {\n          \"actors\": \"海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\",\n          \"area\": \"法国,英国,意大利\",\n          \"attentions\": 0,\n          \"cover\": \"https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\",\n          \"cover_mark\": \"免费观看\",\n          \"desc\": \"1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦•米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼•布莱尔（麦克•辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\",\n          \"goto\": \"av\",\n          \"length\": 103,\n          \"param\": \"4605417\",\n          \"screen_date\": \"2006-09-15 08:00:00\",\n          \"staff\": \"导演：斯蒂芬·弗雷斯编剧：皮特·摩根\",\n          \"started\": 0,\n          \"status\": 2,\n          \"title\": \"女王\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/4605417\"\n        },\n        {\n          \"actors\": \"卡尔·潘、Lauren Cohan、Daniel Percival、格伦·巴里\",\n          \"area\": \"美国\",\n          \"attentions\": 0,\n          \"cover\": \"https://i0.hdslb.com/bfs/bangumi/6951d420873bc41084b33b280139d223bbcdca42.jpg\",\n          \"cover_mark\": \"免费观看\",\n          \"desc\": \"泰吉•巴德兰德巴德（卡尔•潘 Kal Penn 饰）带着范•维尔德的精神和大学学位，远赴英国加尔福德大学——这里是他父亲曾经“战斗”过的地方，兄弟会“狐狸与猎犬”之屋留下了父亲风光的记忆，然而来这里担任助教的泰吉并不被对方认可，狐狸与猎犬的首脑皮普反而将泰吉戏弄了一通。泰吉来到自己负责的宿舍——被戏称为马厩的败落小屋，这里住着四个边缘化的学生：研究量子物理和男女关系的盖辛，暴躁的爱尔兰人谢莫斯，沉默的宅男赛门以及不检点的女生赛迪。泰吉为了让这几位问题青年重新振作，自组鸡公牛社团向皮普的狐狸与猎犬之屋发起挑战，而皮普的女友查莉令泰吉一见钟情，于是一场关乎学生尊严和助教爱情的奋战拉开了序幕……\",\n          \"goto\": \"av\",\n          \"length\": 96,\n          \"param\": \"3034493\",\n          \"screen_date\": \"2006-12-01 08:00:00\",\n          \"staff\": \"导演：Mort Nathan编剧：David Drew Gallagher\",\n          \"started\": 0,\n          \"status\": 2,\n          \"title\": \"留级之王2\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/3034493\"\n        },\n        {\n          \"actors\": \"王敏德、雷宇扬、张文慈\",\n          \"area\": \"中国香港\",\n          \"attentions\": 0,\n          \"cover\": \"https://i0.hdslb.com/bfs/bangumi/aea638908e68c87aeac7a9f8d455820085d75e5a.jpg\",\n          \"cover_mark\": \"免费观看\",\n          \"desc\": \"暑假到了，寄宿学校只留下总监Miss郑（张文慈饰）和四个学生愤祥（雷宇扬饰）、小丑（黄小莺饰）、Nokia（袁伟豪饰）及123（施念慈饰）。自从校工福婶（彭丹饰）的孙女离奇死亡，被弃置於冰箱内；而且福婶的小狗被割去头颅，一名转校生Connie（陈思颖饰）来到，连串怪事陆续发生。调查此案的于Sir（王敏德饰）险遇交通意外。Connie养父（李兆基饰）得悉一切时，便告之他们Connie是魔鬼的女儿，众人不信，反责他妖言惑众。\",\n          \"goto\": \"av\",\n          \"length\": 84,\n          \"param\": \"3954640\",\n          \"screen_date\": \"1999-11-18 08:00:00\",\n          \"staff\": \"导演：刘孝伟编剧：张荣耀、刘孝伟\",\n          \"started\": 0,\n          \"status\": 2,\n          \"title\": \"鬼片王之再现凶榜\",\n          \"total_count\": 0,\n          \"uri\": \"bilibili://video/3954640\"\n        }\n      ],\n      \"season\": [\n        {\n          \"attentions\": 0,\n          \"cat_desc\": \"TV(1) \",\n          \"cover\": \"https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\",\n          \"finish\": 1,\n          \"goto\": \"bangumi\",\n          \"index\": \"13\",\n          \"newest_cat\": \"tv\",\n          \"newest_season\": \"TV\",\n          \"param\": \"2932\",\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"打工吧！魔王大人\",\n          \"total_count\": 13,\n          \"uri\": \"bilibili://bangumi/season/2932\"\n        },\n        {\n          \"attentions\": 0,\n          \"cat_desc\": \"TV(2) OVA/OAD/SP(1)\",\n          \"cover\": \"https://i0.hdslb.com/bfs/bangumi/7ec9487f007c278733212908a6f607e4a245b1d4.jpg\",\n          \"finish\": 1,\n          \"goto\": \"bangumi\",\n          \"index\": \"1\",\n          \"newest_cat\": \"ova\",\n          \"newest_season\": \"OVA\",\n          \"param\": \"1588\",\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"罪恶王冠\",\n          \"total_count\": 1,\n          \"uri\": \"bilibili://bangumi/season/1588\"\n        },\n        {\n          \"attentions\": 0,\n          \"cat_desc\": \"TV(1) \",\n          \"cover\": \"https://i0.hdslb.com/bfs/bangumi/29d001c8083a224da99b72239be5680c6ac907e7.jpg\",\n          \"goto\": \"bangumi\",\n          \"index\": \"12\",\n          \"newest_cat\": \"tv\",\n          \"newest_season\": \"第一季\",\n          \"param\": \"6043\",\n          \"started\": 0,\n          \"status\": 0,\n          \"title\": \"第六天魔王\",\n          \"total_count\": -1,\n          \"uri\": \"bilibili://bangumi/season/6043\"\n        }\n      ]\n    },\n    \"nav\": [\n      {\n        \"name\": \"番剧\",\n        \"pages\": 3,\n        \"show_more\": 1,\n        \"total\": 42,\n        \"type\": 1\n      },\n      {\n        \"name\": \"UP主\",\n        \"pages\": 50,\n        \"total\": 1000,\n        \"type\": 2\n      },\n      {\n        \"name\": \"影视\",\n        \"pages\": 6,\n        \"show_more\": 1,\n        \"total\": 112,\n        \"type\": 3\n      }\n    ],\n    \"page\": 1,\n    \"trackid\": \"12211699165045075750\"\n  },\n  \"message\": \"\",\n  \"ttl\": 1\n}"
  },
  {
    "path": "app/src/main/assets/user_chase.json",
    "content": "{\"code\": 0,\n  \"message\": \"success\",\n  \"result\": {\n    \"delay_notice\": [],\n    \"follow_count\": 8,\n    \"follows\": [\n      {\n        \"brief\": \"神秘瑰丽的妖灵世界，奇奥无穷的时空妖灵之书，聂离追寻着世界的真相。美丽温柔的叶紫芸、倔强高傲的肖凝儿...\",\n        \"cover\": \"http://i0.hdslb.com/bfs/bangumi/c57c4f3a68a3df841cbbb534c407081b431ef2f7.jpg\",\n        \"ed_jump\": 5,\n        \"is_finish\": \"0\",\n        \"is_started\": 1,\n        \"limitGroupId\": 317,\n        \"new_ep\": {\n          \"episode_id\": \"107005\",\n          \"episode_status\": 2,\n          \"index\": \"7\",\n          \"update_time\": \"2017-05-30 12:00:00.0\"\n        },\n        \"newest_ep_id\": \"107005\",\n        \"newest_ep_index\": \"7\",\n        \"pub_time\": \"2017-05-09 12:00:00\",\n        \"season_id\": \"6159\",\n        \"season_status\": 2,\n        \"squareCover\": \"http://i0.hdslb.com/bfs/bangumi/427394ad2c27c23d90acd1b63fa17dde110fd24a.jpg\",\n        \"title\": \"妖神记\",\n        \"total_count\": \"40\",\n        \"trailerAid\": \"-1\",\n        \"user_season\": {\n          \"attention\": \"1\",\n          \"bp\": 0,\n          \"last_ep_id\": \"105246\",\n          \"last_ep_index\": \"1\",\n          \"last_time\": \"44\",\n          \"report_ts\": 1495900198000\n        },\n        \"weekday\": \"-1\"\n      },\n      {\n        \"brief\": \"总北高中自行车竞技部所属的一年级生·小野田坂道，与同年级的今泉俊辅和鸣子章吉、三年级的金城真护、卷岛...\",\n        \"cover\": \"http://i0.hdslb.com/bfs/bangumi/afcd8b966344aa3e085b19a955c5e721020d6ce1.jpg\",\n        \"ed_jump\": 5,\n        \"is_finish\": \"0\",\n        \"is_started\": 1,\n        \"limitGroupId\": 317,\n        \"new_ep\": {\n          \"episode_id\": \"100449\",\n          \"episode_status\": 2,\n          \"index\": \"21\",\n          \"update_time\": \"2017-05-30 09:00:02.0\"\n        },\n        \"newest_ep_id\": \"100449\",\n        \"newest_ep_index\": \"21\",\n        \"pub_time\": \"2017-01-10 01:35:00\",\n        \"season_id\": \"5794\",\n        \"season_status\": 2,\n        \"squareCover\": \"http://i0.hdslb.com/bfs/bangumi/b5a5f41250f4f1b114b478e80053401ee964be1a.jpg\",\n        \"title\": \"飙速宅男 新世代\",\n        \"total_count\": \"13\",\n        \"trailerAid\": \"7325921\",\n        \"user_season\": {\n          \"attention\": \"1\",\n          \"bp\": 0,\n          \"last_ep_id\": \"\",\n          \"last_ep_index\": \"\",\n          \"last_time\": \"0\",\n          \"report_ts\": 0\n        },\n        \"weekday\": \"2\"\n      },\n      {\n        \"brief\": \"某日早晨，普通的女子高校生・源内青收到一个神秘包裹。打开后发现里面放了名为FRAME ARMS G...\",\n        \"cover\": \"http://i0.hdslb.com/bfs/bangumi/2aca983b744cc949e2c3346a876f9f611be9352a.jpg\",\n        \"ed_jump\": 5,\n        \"is_finish\": \"0\",\n        \"is_started\": 1,\n        \"limitGroupId\": 317,\n        \"new_ep\": {\n          \"episode_id\": \"103195\",\n          \"episode_status\": 2,\n          \"index\": \"9\",\n          \"update_time\": \"2017-05-30 01:30:00.0\"\n        },\n        \"newest_ep_id\": \"103195\",\n        \"newest_ep_index\": \"9\",\n        \"pub_time\": \"2017-04-04 01:30:00\",\n        \"season_id\": \"5994\",\n        \"season_status\": 2,\n        \"squareCover\": \"http://i0.hdslb.com/bfs/bangumi/e7ad94b23f3060bfa0018115478785ca5f37f234.jpg\",\n        \"title\": \"机甲少女 FRAME ARMS GIRL\",\n        \"total_count\": \"12\",\n        \"trailerAid\": \"-1\",\n        \"user_season\": {\n          \"attention\": \"1\",\n          \"bp\": 0,\n          \"last_ep_id\": \"\",\n          \"last_ep_index\": \"\",\n          \"last_time\": \"0\",\n          \"report_ts\": 0\n        },\n        \"weekday\": \"2\"\n      }\n    ],\n    \"update_count\": 0\n  }\n}"
  },
  {
    "path": "app/src/main/assets/video_detail.json",
    "content": "{\n  \"code\": 0,\n  \"data\": {\n    \"aid\": 9938411,\n    \"attribute\": 49152,\n    \"copyright\": 1,\n    \"ctime\": 1497424534,\n    \"desc\": \"纯黑直播间：www.zhanqi.tv/666666新浪微博：weibo.com/chunheigk纯黑零食店：chlsd.taobao.com\",\n    \"dislike_reasons\": [\n      {\n        \"reason_id\": 5,\n        \"reason_name\": \"标题党/封面党\"\n      },\n      {\n        \"reason_id\": 6,\n        \"reason_name\": \"内容质量差\"\n      },\n      {\n        \"reason_id\": 7,\n        \"reason_name\": \"内容/封面令人不适\"\n      },\n      {\n        \"reason_id\": 8,\n        \"reason_name\": \"营销广告\"\n      }\n    ],\n    \"duration\": 1319,\n    \"elec\": {\n      \"count\": 83,\n      \"elec_num\": 0,\n      \"elec_set\": {\n        \"elec_list\": [\n          {\n            \"elec_num\": 20,\n            \"is_customize\": 0,\n            \"title\": \"20电池\"\n          },\n          {\n            \"elec_num\": 60,\n            \"is_customize\": 0,\n            \"title\": \"60电池\"\n          },\n          {\n            \"elec_num\": 450,\n            \"is_customize\": 0,\n            \"title\": \"450电池\"\n          },\n          {\n            \"elec_num\": 880,\n            \"is_customize\": 0,\n            \"title\": \"880电池\"\n          },\n          {\n            \"elec_num\": 0,\n            \"is_customize\": 1,\n            \"max_elec\": 99999,\n            \"min_elec\": 20,\n            \"title\": \"自定义\"\n          }\n        ],\n        \"elec_theme\": 0,\n        \"integrity_rate\": 10.00,\n        \"rmb_rate\": 10.00,\n        \"round_mode\": 0\n      },\n      \"show\": true,\n      \"total\": 10065\n    },\n    \"owner\": {\n      \"face\": \"http://i1.hdslb.com/bfs/face/e8ab7b02d6576f4141ea857734b68b9dd35a5730.jpg\",\n      \"mid\": 585267,\n      \"name\": \"纯黑叔\"\n    },\n    \"owner_ext\": {\n      \"fans\": 1391942,\n      \"vip\": {\n        \"accessStatus\": 1,\n        \"dueRemark\": \"\",\n        \"vipDueDate\": 1504195200000,\n        \"vipStatus\": 1,\n        \"vipStatusWarn\": \"\",\n        \"vipType\": 1\n      }\n    },\n    \"pages\": [\n      {\n        \"cid\": 16428959,\n        \"dmlink\": \"http://comment.bilibili.com/16428959.xml\",\n        \"duration\": 1319,\n        \"from\": \"vupload\",\n        \"metas\": [\n          {\n            \"format\": \"mp4\",\n            \"quality\": 1,\n            \"size\": 102288\n          },\n          {\n            \"format\": \"hdmp4\",\n            \"quality\": 2,\n            \"size\": 240849\n          },\n          {\n            \"format\": \"flv\",\n            \"quality\": 3,\n            \"size\": 470091\n          },\n          {\n            \"format\": \"flv\",\n            \"quality\": 4,\n            \"size\": 760271\n          }\n        ],\n        \"page\": 1,\n        \"part\": \"\",\n        \"vid\": \"\",\n        \"weblink\": \"\"\n      }\n    ],\n    \"pic\": \"http://i1.hdslb.com/bfs/archive/f350374ac3a130aec3c92e608fc3c72d72340394.jpg\",\n    \"pubdate\": 1492539219,\n    \"relates\": [\n      {\n        \"aid\": 2165903,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/7241c7de343ba7b106c39c2d2de30f15caa45640.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 6794,\n          \"favorite\": 6363,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 12844,\n          \"share\": 0,\n          \"view\": 563330\n        },\n        \"title\": \"本视频将封印至17年愚人节\"\n      },\n      {\n        \"aid\": 9083821,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"世界Wir\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/a55c668ab2eda23c535e0db49fa97ca762cd1b21.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 129,\n          \"favorite\": 669,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 189,\n          \"share\": 0,\n          \"view\": 110118\n        },\n        \"title\": \"震惊！！听说纯黑又爆（nve）照（fen）了！！？\"\n      },\n      {\n        \"aid\": 6984920,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"何悠悠玩VR\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/84308b4028ebdcf7a3528d6fc2efeed25edaed95.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 1080,\n          \"favorite\": 2896,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 1386,\n          \"share\": 0,\n          \"view\": 926137\n        },\n        \"title\": \"使用VR泄欲的正确姿势 ＃何悠悠玩VR＃\"\n      },\n      {\n        \"aid\": 10007398,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"拔总zz\"\n        },\n        \"pic\": \"http://i2.hdslb.com/bfs/archive/046e1174a2ea66bb18b981b63c294ebbf89ad29f.png\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 379,\n          \"favorite\": 171,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 217,\n          \"share\": 0,\n          \"view\": 23801\n        },\n        \"title\": \"【拔总】来自肌肉猛男的么么哒\"\n      },\n      {\n        \"aid\": 1707128,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i0.hdslb.com/bfs/archive/79b8d5490c8caf7037c3c567da33cc5f52f58752.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 32036,\n          \"favorite\": 7943,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 1985,\n          \"share\": 0,\n          \"view\": 1370296\n        },\n        \"title\": \"纯黑《刺客信条：大革命》第一期 完美同步攻略解说\"\n      },\n      {\n        \"aid\": 5100283,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i2.hdslb.com/bfs/archive/31d043e2863493f5f986e00b21d1a266f309b66d.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 19122,\n          \"favorite\": 3769,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 4147,\n          \"share\": 0,\n          \"view\": 644622\n        },\n        \"title\": \"纯黑《神秘海域4》惨烈超难攻略解说 第七期\"\n      },\n      {\n        \"aid\": 10434593,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"折腾5号\"\n        },\n        \"pic\": \"http://i2.hdslb.com/bfs/archive/04ffab757544a1624a3a793be84a5083f838796f.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 547,\n          \"favorite\": 96,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 215,\n          \"share\": 0,\n          \"view\": 38041\n        },\n        \"title\": \"《绝地求生大逃杀》还有这种吃鸡的方法？！\"\n      },\n      {\n        \"aid\": 7685893,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"陈瀚Siri\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/49d8ff0b83d7f440c6d9cbc855dc4d77863244af.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 651,\n          \"favorite\": 148,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 371,\n          \"share\": 0,\n          \"view\": 20200\n        },\n        \"title\": \"【陈瀚Siri】闲逛英国圣诞节市场\"\n      },\n      {\n        \"aid\": 10370651,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"轩雨星晴\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/e1119f6726578b6ae8c643bb1bf1d608bf082ef7.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 89,\n          \"favorite\": 4,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 69,\n          \"share\": 0,\n          \"view\": 1467\n        },\n        \"title\": \"【轩雨星晴语音解说】精灵宝可梦日月6V6对战实况05\"\n      },\n      {\n        \"aid\": 3852397,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i0.hdslb.com/bfs/archive/2090debbd2b07a9d554b18eec22f50f0da0ec7d1.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 32756,\n          \"favorite\": 6226,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 3492,\n          \"share\": 0,\n          \"view\": 779638\n        },\n        \"title\": \"纯黑《零：濡鸦之巫女》第一期 乳摇的污女\"\n      },\n      {\n        \"aid\": 10151928,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"敖厂长\"\n        },\n        \"pic\": \"http://i0.hdslb.com/bfs/archive/6001bf94a2ee8d58056b6a3fd4107a4badb40227.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 24730,\n          \"favorite\": 5558,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 9732,\n          \"share\": 0,\n          \"view\": 1967237\n        },\n        \"title\": \"【敖厂长】腾讯游戏惨遭停运\"\n      },\n      {\n        \"aid\": 10520722,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"渗透之C君\"\n        },\n        \"pic\": \"http://i0.hdslb.com/bfs/archive/82626ba9034eac2a2e8b9882861a53447e1e05c0.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 22785,\n          \"favorite\": 3747,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 5376,\n          \"share\": 0,\n          \"view\": 813535\n        },\n        \"title\": \"【C菌】分手! 那些和朋友玩了就会撕哔的游戏!【第二期】\"\n      },\n      {\n        \"aid\": 11159467,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"袜子ψ(｀∇´)ψ\"\n        },\n        \"pic\": \"http://i2.hdslb.com/bfs/archive/f0832d98d695c45297d3597f5c474d41936bc530.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 2813,\n          \"favorite\": 6688,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 397,\n          \"share\": 0,\n          \"view\": 499908\n        },\n        \"title\": \"【游戏集锦】那些意外搞笑的游戏失败瞬间 133 It's Spiderman!\"\n      },\n      {\n        \"aid\": 10204083,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i0.hdslb.com/bfs/archive/b542297a9f88270c717b5de11dfa6764e063c6ae.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 16327,\n          \"favorite\": 1373,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 2793,\n          \"share\": 0,\n          \"view\": 341422\n        },\n        \"title\": \"【纯黑】《逃生2》直播录像P5 血雨腥风\"\n      },\n      {\n        \"aid\": 3952940,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/70c348a1c5d2fce58506735cc040463328b3f77b.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 7823,\n          \"favorite\": 2133,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 1824,\n          \"share\": 0,\n          \"view\": 286055\n        },\n        \"title\": \"纯黑《零：濡鸦之巫女》第二期 湿身的污女\"\n      },\n      {\n        \"aid\": 8165165,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/5349e34c375e993743f3988bbbf3c95c8525cd50.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 12923,\n          \"favorite\": 1595,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 1729,\n          \"share\": 0,\n          \"view\": 325771\n        },\n        \"title\": \"纯黑直播《返校》我不怂的恐怖游戏 P2\"\n      },\n      {\n        \"aid\": 8145597,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/9619104d06012b74f256923a9b212d5b344e1b1e.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 29298,\n          \"favorite\": 4927,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 3133,\n          \"share\": 0,\n          \"view\": 688632\n        },\n        \"title\": \"纯黑直播《返校》我完全不怂的恐怖游戏\"\n      },\n      {\n        \"aid\": 8306491,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"纯黑叔\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/591fe61e3e20ba8dbb06884369576ccd1baf9e8e.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 10583,\n          \"favorite\": 866,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 2209,\n          \"share\": 0,\n          \"view\": 233841\n        },\n        \"title\": \"纯黑直播《返校》我不怂的惊悚游戏 P4\"\n      },\n      {\n        \"aid\": 11103774,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"起小点是大腿\"\n        },\n        \"pic\": \"http://i1.hdslb.com/bfs/archive/bb3c35d4128fa3ea606897206b6f7eae5e219301.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 6612,\n          \"favorite\": 448,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 1680,\n          \"share\": 0,\n          \"view\": 399020\n        },\n        \"title\": \"主播真会玩主机篇07：听说你是刺客大师？\"\n      },\n      {\n        \"aid\": 10033090,\n        \"owner\": {\n          \"face\": \"\",\n          \"mid\": 0,\n          \"name\": \"EdmundDZhang\"\n        },\n        \"pic\": \"http://i2.hdslb.com/bfs/archive/7ed762519c4c44b78bb3c3948bc9e4f1060c6600.jpg\",\n        \"stat\": {\n          \"aid\": 0,\n          \"coin\": 0,\n          \"danmaku\": 9780,\n          \"favorite\": 3359,\n          \"his_rank\": 0,\n          \"now_rank\": 0,\n          \"reply\": 3672,\n          \"share\": 0,\n          \"view\": 734743\n        },\n        \"title\": \"【老E】职业老王VS绿帽王\"\n      }\n    ],\n    \"req_user\": {\n      \"attention\": -999,\n      \"favorite\": 0\n    },\n    \"rights\": {\n      \"bp\": 0,\n      \"download\": 1,\n      \"elec\": 1,\n      \"hd5\": 0,\n      \"movie\": 0,\n      \"no_reprint\": 0,\n      \"pay\": 0\n    },\n    \"stat\": {\n      \"aid\": 9938411,\n      \"coin\": 15516,\n      \"danmaku\": 6411,\n      \"favorite\": 3362,\n      \"his_rank\": 3,\n      \"now_rank\": 0,\n      \"reply\": 3663,\n      \"share\": 658,\n      \"view\": 827412\n    },\n    \"state\": 0,\n    \"tag\": [\n      {\n        \"tag_id\": 723488,\n        \"tag_name\": \"失踪人口回归！\"\n      },\n      {\n        \"tag_id\": 125158,\n        \"tag_name\": \"纯黑\"\n      },\n      {\n        \"tag_id\": 3419954,\n        \"tag_name\": \"无伤吃鸡\"\n      },\n      {\n        \"tag_id\": 54705,\n        \"tag_name\": \"大逃杀\"\n      },\n      {\n        \"tag_id\": 3428143,\n        \"tag_name\": \"大吉大利，晚上吃鸡\"\n      },\n      {\n        \"tag_id\": 3243689,\n        \"tag_name\": \"绝地求生\"\n      },\n      {\n        \"tag_id\": 3473367,\n        \"tag_name\": \"HANDSOMEBlack\"\n      }\n    ],\n    \"tid\": 17,\n    \"title\": \"【纯黑】《我能吹一年》无伤吃鸡攻略解说？\",\n    \"tname\": \"单机联机\",\n    \"videos\": 1\n  },\n  \"message\": \"\",\n  \"ttl\": 1\n}"
  },
  {
    "path": "app/src/main/assets/video_detail_comment.json",
    "content": "{\n  \"code\": 0,\n  \"data\": {\n    \"hots\": [\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"犹豫了很久我还是决定发一下全的纯黑改名顺序(╯°Д°)╯纯黑酱→纯黑SAMA→纯黑君→纯黑桑→纯黑初号机→纯黑通行→纯黑神→纯黑神行→纯黑神行通→纯黑神行通机→纯黑神行通机号→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初桑君→纯黑昵称过长不能修改→纯黑少爷→纯黑大法好→纯黑老师→纯黑.奥迪托雷→纯黑.the ripper→纯黑骑士王→纯黑狂战士→纯黑大叔→纯黑哥居然被用了→纯黑叔\",\n          \"plat\": 2\n        },\n        \"count\": 533,\n        \"ctime\": 1492540652,\n        \"floor\": 546,\n        \"like\": 9087,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/a076329348d82164c3f54598ee90239c17817d21.jpg\",\n          \"level_info\": {\n            \"current_exp\": 3285,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"35666309\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"个性签名什么的好难写的，写多嫌麻烦，写少嫌不够，啊啊啊啊啊！\",\n          \"uname\": \"一只爱作死的鸡\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 35666309,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 527,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 239713209,\n        \"rpid_str\": \"239713209\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 4,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"我现在在b站，只从游戏区来说的话，打开弹幕我很害怕见到五种人：第一种——没玩过的人问什么问，想知道自己买游戏去；第二种——你懂不懂XX，不懂在这……；第三种——这有啥难的，我都是一遍过或者是，这有啥难的，我随随便便就过了；第四种——玩过游戏的人都知道，没玩过的人连这都不知道看什么视频；第五种——刷XX的是不是脑子有病？\",\n          \"plat\": 1\n        },\n        \"count\": 90,\n        \"ctime\": 1492618071,\n        \"floor\": 2068,\n        \"like\": 1227,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/24e5569de190530331bb79add588127b5867fe9c.jpg\",\n          \"level_info\": {\n            \"current_exp\": 12070,\n            \"current_level\": 5,\n            \"current_min\": 10800,\n            \"next_exp\": 28800\n          },\n          \"mid\": \"698302\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2011\",\n          \"sex\": \"保密\",\n          \"sign\": \"最喜歡的是畫漫畫和搞音樂，失敗的是靈魂畫風以及死亡曲風；最努力的是越挫越勇永不放棄，挫敗的是在靈魂畫手以及死亡歌者的道路上越走越遠。。。。喵的，這個世界還跟不跟我過了，過不了就趕緊離了我找我家蓋亞去！\",\n          \"uname\": \"偷抱走大和的提督姬\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 1489507200000,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 1\n          }\n        },\n        \"mid\": 698302,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 87,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 240261490,\n        \"rpid_str\": \"240261490\",\n        \"state\": 6,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"硬币改名纯黑叔拖更狂魔死不出有生之年何缘故无伤第一谁不服\",\n          \"plat\": 2\n        },\n        \"count\": 71,\n        \"ctime\": 1492543405,\n        \"floor\": 825,\n        \"like\": 2417,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/7259bff4b450b03fd44598da8ece826e373805c5.jpg\",\n          \"level_info\": {\n            \"current_exp\": 7396,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"45374791\",\n          \"nameplate\": {\n            \"condition\": \"单个自制视频总播放数>=1万\",\n            \"image\": \"http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png\",\n            \"image_small\": \"http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png\",\n            \"level\": \"普通勋章\",\n            \"name\": \"青铜殿堂\",\n            \"nid\": 4\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"微博【同名ID】:吾名为头像是也(￣～￣;)包括舞见唱见全部都可分为两个区！鬼畜区和鬼畜素材区！待我学成之日！便是鬼畜之时！\",\n          \"uname\": \"吾名为头像是也\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 45374791,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 69,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 239719003,\n        \"rpid_str\": \"239719003\",\n        \"state\": 0,\n        \"type\": 1\n      }\n    ],\n    \"page\": {\n      \"acount\": 3662,\n      \"count\": 2497,\n      \"num\": 1,\n      \"size\": 20\n    },\n    \"replies\": [\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"快要去上学了。。。临走前再来看一遍只为了少爷的笑声\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1497217492,\n        \"floor\": 2607,\n        \"like\": 4,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/eaa397628ca0d586e2e6b9d90992ba347c7f3337.jpg\",\n          \"level_info\": {\n            \"current_exp\": 240,\n            \"current_level\": 2,\n            \"current_min\": 200,\n            \"next_exp\": 1500\n          },\n          \"mid\": \"110842363\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2017\",\n          \"sex\": \"男\",\n          \"sign\": \"永爱教主~\",\n          \"uname\": \"忆尔旧容\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 110842363,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 282388969,\n        \"rpid_str\": \"282388969\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"求问九分左右的BGM名~\",\n          \"plat\": 1\n        },\n        \"count\": 0,\n        \"ctime\": 1497190982,\n        \"floor\": 2606,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i1.hdslb.com/bfs/face/3f990bb10706b7a5808f33a78a7dcb0bf4d3ad23.jpg\",\n          \"level_info\": {\n            \"current_exp\": 4019,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"7522768\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2014\",\n          \"sex\": \"女\",\n          \"sign\": \"错的不是我，是这个世界。\",\n          \"uname\": \"宇智波六道\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 1478707200000,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 1\n          }\n        },\n        \"mid\": 7522768,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 282181980,\n        \"rpid_str\": \"282181980\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"只有我觉得允大吊和纯黑的声音很像吗？\",\n          \"plat\": 1\n        },\n        \"count\": 0,\n        \"ctime\": 1496196985,\n        \"floor\": 2605,\n        \"like\": 7,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/154e19f906983e93ddeb08d0060b578ec21e48fd.jpg\",\n          \"level_info\": {\n            \"current_exp\": 3481,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"26718080\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"我是桐乃的小虎牙~\",\n          \"uname\": \"喵脸老太\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 26718080,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 272254379,\n        \"rpid_str\": \"272254379\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"phone\",\n          \"members\": [],\n          \"message\": \"封面看起来像土鸡(°∀°)ﾉ\",\n          \"plat\": 3\n        },\n        \"count\": 0,\n        \"ctime\": 1496155864,\n        \"floor\": 2604,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/dcafa424f65cbef144af04d12e56801309ef2def.jpg\",\n          \"level_info\": {\n            \"current_exp\": 6683,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"22086941\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"女\",\n          \"sign\": \"\",\n          \"uname\": \"long855\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 22086941,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 272015657,\n        \"rpid_str\": \"272015657\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"真以为是露脸吃鸡\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1496136331,\n        \"floor\": 2603,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"1040\",\n          \"avatar\": \"http://i1.hdslb.com/bfs/face/e55c3b51e282668c42c75e641008a9ec722cf3e5.jpg\",\n          \"level_info\": {\n            \"current_exp\": 10438,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"1836477\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2011\",\n          \"sex\": \"保密\",\n          \"sign\": \"壮哉！我大xzyx星\",\n          \"uname\": \"企鹅桑麻\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 1485187200000,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 1\n          }\n        },\n        \"mid\": 1836477,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 271694974,\n        \"rpid_str\": \"271694974\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"看封面，以为是户外视频\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1495936965,\n        \"floor\": 2602,\n        \"like\": 5,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i1.hdslb.com/bfs/face/67f7dce5ac4358d42c6e25a211f95d970c5905e3.jpg\",\n          \"level_info\": {\n            \"current_exp\": 7921,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"14702410\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"男\",\n          \"sign\": \"\",\n          \"uname\": \"OriginalWheat\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 14702410,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 269383496,\n        \"rpid_str\": \"269383496\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"大吉大利，今晚吃鸡，吧\",\n          \"plat\": 2\n        },\n        \"count\": 1,\n        \"ctime\": 1495282867,\n        \"floor\": 2601,\n        \"like\": 8,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg\",\n          \"level_info\": {\n            \"current_exp\": 4165,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"16511894\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"保密\",\n          \"sign\": \"=￣ω￣=\",\n          \"uname\": \"吃人的狮子\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 16511894,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 1,\n        \"replies\": [\n          {\n            \"action\": 0,\n            \"attr\": 0,\n            \"content\": {\n              \"device\": \"\",\n              \"members\": [],\n              \"message\": \"低仿球～(￣▽￣～)\",\n              \"plat\": 2\n            },\n            \"count\": 0,\n            \"ctime\": 1496133583,\n            \"floor\": 1,\n            \"like\": 1,\n            \"member\": {\n              \"DisplayRank\": \"0\",\n              \"avatar\": \"http://i0.hdslb.com/bfs/face/b82cb0bb8cd8cd1d97bc8b3313843267a58626e4.jpg\",\n              \"level_info\": {\n                \"current_exp\": 2345,\n                \"current_level\": 3,\n                \"current_min\": 1500,\n                \"next_exp\": 4500\n              },\n              \"mid\": \"37295447\",\n              \"nameplate\": {\n                \"condition\": \"\",\n                \"image\": \"\",\n                \"image_small\": \"\",\n                \"level\": \"\",\n                \"name\": \"\",\n                \"nid\": 0\n              },\n              \"official_verify\": {\n                \"desc\": \"\",\n                \"type\": -1\n              },\n              \"pendant\": {\n                \"expire\": 0,\n                \"image\": \"\",\n                \"name\": \"\",\n                \"pid\": 0\n              },\n              \"rank\": \"10000\",\n              \"reg_year\": \"2016\",\n              \"sex\": \"保密\",\n              \"sign\": \"嗯哼\",\n              \"uname\": \"cx阎哼哼\",\n              \"vip\": {\n                \"accessStatus\": 1,\n                \"dueRemark\": \"\",\n                \"vipDueDate\": 0,\n                \"vipStatus\": 0,\n                \"vipStatusWarn\": \"\",\n                \"vipType\": 0\n              }\n            },\n            \"mid\": 37295447,\n            \"oid\": 9938411,\n            \"parent\": 263465780,\n            \"parent_str\": \"263465780\",\n            \"rcount\": 0,\n            \"root\": 263465780,\n            \"root_str\": \"263465780\",\n            \"rpid\": 271654745,\n            \"rpid_str\": \"271654745\",\n            \"state\": 0,\n            \"type\": 1\n          }\n        ],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 263465780,\n        \"rpid_str\": \"263465780\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"有没有大神知道封面的鸡出自哪里？怎么做的？看得我好饿啊。\",\n          \"plat\": 2\n        },\n        \"count\": 1,\n        \"ctime\": 1495268302,\n        \"floor\": 2600,\n        \"like\": 9,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i1.hdslb.com/bfs/face/93ca945ad64a8ca634ef6f423e5f9962d0a94cb7.jpg\",\n          \"level_info\": {\n            \"current_exp\": 1598,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"9148371\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"男\",\n          \"sign\": \"\",\n          \"uname\": \"lawere\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 9148371,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 1,\n        \"replies\": [\n          {\n            \"action\": 0,\n            \"attr\": 0,\n            \"content\": {\n              \"device\": \"\",\n              \"members\": [],\n              \"message\": \"锅里=￣ω￣=\",\n              \"plat\": 2\n            },\n            \"count\": 0,\n            \"ctime\": 1495282800,\n            \"floor\": 1,\n            \"like\": 2,\n            \"member\": {\n              \"DisplayRank\": \"0\",\n              \"avatar\": \"http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg\",\n              \"level_info\": {\n                \"current_exp\": 4165,\n                \"current_level\": 3,\n                \"current_min\": 1500,\n                \"next_exp\": 4500\n              },\n              \"mid\": \"16511894\",\n              \"nameplate\": {\n                \"condition\": \"\",\n                \"image\": \"\",\n                \"image_small\": \"\",\n                \"level\": \"\",\n                \"name\": \"\",\n                \"nid\": 0\n              },\n              \"official_verify\": {\n                \"desc\": \"\",\n                \"type\": -1\n              },\n              \"pendant\": {\n                \"expire\": 0,\n                \"image\": \"\",\n                \"name\": \"\",\n                \"pid\": 0\n              },\n              \"rank\": \"10000\",\n              \"reg_year\": \"2015\",\n              \"sex\": \"保密\",\n              \"sign\": \"=￣ω￣=\",\n              \"uname\": \"吃人的狮子\",\n              \"vip\": {\n                \"accessStatus\": 1,\n                \"dueRemark\": \"\",\n                \"vipDueDate\": 0,\n                \"vipStatus\": 0,\n                \"vipStatusWarn\": \"\",\n                \"vipType\": 0\n              }\n            },\n            \"mid\": 16511894,\n            \"oid\": 9938411,\n            \"parent\": 263256410,\n            \"parent_str\": \"263256410\",\n            \"rcount\": 0,\n            \"root\": 263256410,\n            \"root_str\": \"263256410\",\n            \"rpid\": 263464752,\n            \"rpid_str\": \"263464752\",\n            \"state\": 0,\n            \"type\": 1\n          }\n        ],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 263256410,\n        \"rpid_str\": \"263256410\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 4,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"一开始纯黑：枪，枪，枪！拿到枪纯黑：叫我少爷！\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1495259620,\n        \"floor\": 2599,\n        \"like\": 7,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/a39edd4a8905c8e49a1dfeb0f573e18d19214d65.jpg\",\n          \"level_info\": {\n            \"current_exp\": 4912,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"24772731\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"小白啊，最喜欢的是妲己姐姐。\",\n          \"uname\": \"百年之狐_李小白\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 24772731,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 263157372,\n        \"rpid_str\": \"263157372\",\n        \"state\": 6,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"pad\",\n          \"members\": [],\n          \"message\": \"有没有大神知道封面的鸡出自哪里？怎么做的？看得我好饿啊。\",\n          \"plat\": 6\n        },\n        \"count\": 0,\n        \"ctime\": 1494719336,\n        \"floor\": 2597,\n        \"like\": 13,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/4688f58def420edaf625aa2f31e5e47d31667f94.jpg\",\n          \"level_info\": {\n            \"current_exp\": 4212,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"28732585\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"I hentai\",\n          \"uname\": \"老干爹辣子鸡\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 28732585,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 258391770,\n        \"rpid_str\": \"258391770\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"实力棒棒的。\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494604861,\n        \"floor\": 2596,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/a809a3b8407840ae00032360108261fcf503d38a.jpg\",\n          \"level_info\": {\n            \"current_exp\": 3845,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"32704916\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"男\",\n          \"sign\": \"暴力不能解决一切问题。但是可以解决制造出一切问题的那个人。\",\n          \"uname\": \"Planeswalker菲\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 1478707200000,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 1\n          }\n        },\n        \"mid\": 32704916,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 257369684,\n        \"rpid_str\": \"257369684\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"封面看得我好饿\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494505741,\n        \"floor\": 2595,\n        \"like\": 3,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/1c853b900f9e7db4ad65ae91c73aa2f5de1d6b65.jpg\",\n          \"level_info\": {\n            \"current_exp\": 5970,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"31610916\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"\",\n          \"uname\": \"幼齿萝莉八云紫\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 31610916,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 256445378,\n        \"rpid_str\": \"256445378\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"见封滚\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494391511,\n        \"floor\": 2594,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/248e3f11749b5726efdecbdaef8885ccf45c0ff9.jpg\",\n          \"level_info\": {\n            \"current_exp\": 3960,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"14102482\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"男\",\n          \"sign\": \"change never end\",\n          \"uname\": \"夏伯陽\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 14102482,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 255490068,\n        \"rpid_str\": \"255490068\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"原来黑叔也玩这个_(:з」∠)_\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494276406,\n        \"floor\": 2593,\n        \"like\": 1,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/954d7e784d44fed5d47c9f739bdb0bd0c794a783.jpg\",\n          \"level_info\": {\n            \"current_exp\": 4491,\n            \"current_level\": 3,\n            \"current_min\": 1500,\n            \"next_exp\": 4500\n          },\n          \"mid\": \"21071998\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2016\",\n          \"sex\": \"保密\",\n          \"sign\": \"独而不孤，行走天涯\",\n          \"uname\": \"耗子阿独\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 21071998,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 254688287,\n        \"rpid_str\": \"254688287\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"(=・ω・=)\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494249140,\n        \"floor\": 2592,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://static.hdslb.com/images/member/noface.gif\",\n          \"level_info\": {\n            \"current_exp\": 925,\n            \"current_level\": 2,\n            \"current_min\": 200,\n            \"next_exp\": 1500\n          },\n          \"mid\": \"102758826\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2017\",\n          \"sex\": \"保密\",\n          \"sign\": \"好冷啊\",\n          \"uname\": \"云雨老道\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 102758826,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 254451554,\n        \"rpid_str\": \"254451554\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"phone\",\n          \"members\": [],\n          \"message\": \"什么游戏\",\n          \"plat\": 3\n        },\n        \"count\": 1,\n        \"ctime\": 1494166451,\n        \"floor\": 2591,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i0.hdslb.com/bfs/face/cdde35d4074d5a811ebd34474d8e5f66a1bbebbe.jpg\",\n          \"level_info\": {\n            \"current_exp\": 5235,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"10399882\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"男\",\n          \"sign\": \"\",\n          \"uname\": \"姑苏一夜繁华梦\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 10399882,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 1,\n        \"replies\": [\n          {\n            \"action\": 0,\n            \"attr\": 0,\n            \"content\": {\n              \"device\": \"\",\n              \"members\": [],\n              \"message\": \"绝地求生大逃杀\",\n              \"plat\": 2\n            },\n            \"count\": 0,\n            \"ctime\": 1495282838,\n            \"floor\": 1,\n            \"like\": 0,\n            \"member\": {\n              \"DisplayRank\": \"0\",\n              \"avatar\": \"http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg\",\n              \"level_info\": {\n                \"current_exp\": 4165,\n                \"current_level\": 3,\n                \"current_min\": 1500,\n                \"next_exp\": 4500\n              },\n              \"mid\": \"16511894\",\n              \"nameplate\": {\n                \"condition\": \"\",\n                \"image\": \"\",\n                \"image_small\": \"\",\n                \"level\": \"\",\n                \"name\": \"\",\n                \"nid\": 0\n              },\n              \"official_verify\": {\n                \"desc\": \"\",\n                \"type\": -1\n              },\n              \"pendant\": {\n                \"expire\": 0,\n                \"image\": \"\",\n                \"name\": \"\",\n                \"pid\": 0\n              },\n              \"rank\": \"10000\",\n              \"reg_year\": \"2015\",\n              \"sex\": \"保密\",\n              \"sign\": \"=￣ω￣=\",\n              \"uname\": \"吃人的狮子\",\n              \"vip\": {\n                \"accessStatus\": 1,\n                \"dueRemark\": \"\",\n                \"vipDueDate\": 0,\n                \"vipStatus\": 0,\n                \"vipStatusWarn\": \"\",\n                \"vipType\": 0\n              }\n            },\n            \"mid\": 16511894,\n            \"oid\": 9938411,\n            \"parent\": 253837118,\n            \"parent_str\": \"253837118\",\n            \"rcount\": 0,\n            \"root\": 253837118,\n            \"root_str\": \"253837118\",\n            \"rpid\": 263465348,\n            \"rpid_str\": \"263465348\",\n            \"state\": 0,\n            \"type\": 1\n          }\n        ],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 253837118,\n        \"rpid_str\": \"253837118\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"急求BGM\",\n          \"plat\": 1\n        },\n        \"count\": 2,\n        \"ctime\": 1494157751,\n        \"floor\": 2590,\n        \"like\": 1,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/016bdf3f5879913fbc9e5db802bf5444c603b82d.jpg\",\n          \"level_info\": {\n            \"current_exp\": 1308,\n            \"current_level\": 2,\n            \"current_min\": 200,\n            \"next_exp\": 1500\n          },\n          \"mid\": \"87794382\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2017\",\n          \"sex\": \"保密\",\n          \"sign\": \"闲的慌,真的是闲的慌。\",\n          \"uname\": \"进撃のkv2\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 87794382,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 2,\n        \"replies\": [\n          {\n            \"action\": 0,\n            \"attr\": 0,\n            \"content\": {\n              \"device\": \"\",\n              \"members\": [],\n              \"message\": \"19分钟后的   美シキ歌-帆足圭吾    之前的我不知道\",\n              \"plat\": 2\n            },\n            \"count\": 0,\n            \"ctime\": 1494522352,\n            \"floor\": 1,\n            \"like\": 0,\n            \"member\": {\n              \"DisplayRank\": \"0\",\n              \"avatar\": \"http://i1.hdslb.com/bfs/face/0ac7d6d9626de10de6206c9f559842616cfdda3d.jpg\",\n              \"level_info\": {\n                \"current_exp\": 6475,\n                \"current_level\": 4,\n                \"current_min\": 4500,\n                \"next_exp\": 10800\n              },\n              \"mid\": \"8991975\",\n              \"nameplate\": {\n                \"condition\": \"\",\n                \"image\": \"\",\n                \"image_small\": \"\",\n                \"level\": \"\",\n                \"name\": \"\",\n                \"nid\": 0\n              },\n              \"official_verify\": {\n                \"desc\": \"\",\n                \"type\": -1\n              },\n              \"pendant\": {\n                \"expire\": 0,\n                \"image\": \"\",\n                \"name\": \"\",\n                \"pid\": 0\n              },\n              \"rank\": \"10000\",\n              \"reg_year\": \"2015\",\n              \"sex\": \"女\",\n              \"sign\": \"nemo\",\n              \"uname\": \"MisakiNemo\",\n              \"vip\": {\n                \"accessStatus\": 1,\n                \"dueRemark\": \"\",\n                \"vipDueDate\": 0,\n                \"vipStatus\": 0,\n                \"vipStatusWarn\": \"\",\n                \"vipType\": 0\n              }\n            },\n            \"mid\": 8991975,\n            \"oid\": 9938411,\n            \"parent\": 253703966,\n            \"parent_str\": \"253703966\",\n            \"rcount\": 0,\n            \"root\": 253703966,\n            \"root_str\": \"253703966\",\n            \"rpid\": 256682586,\n            \"rpid_str\": \"256682586\",\n            \"state\": 0,\n            \"type\": 1\n          },\n          {\n            \"action\": 0,\n            \"attr\": 0,\n            \"content\": {\n              \"device\": \"\",\n              \"members\": [],\n              \"message\": \"基本都是尼尔的BGM，去网易云直接搜，有专辑的\",\n              \"plat\": 1\n            },\n            \"count\": 0,\n            \"ctime\": 1494823719,\n            \"floor\": 2,\n            \"like\": 0,\n            \"member\": {\n              \"DisplayRank\": \"0\",\n              \"avatar\": \"http://i0.hdslb.com/bfs/face/2366b8a48439998fbd34b56ceefd35204c7c1388.jpg\",\n              \"level_info\": {\n                \"current_exp\": 3934,\n                \"current_level\": 3,\n                \"current_min\": 1500,\n                \"next_exp\": 4500\n              },\n              \"mid\": \"12625520\",\n              \"nameplate\": {\n                \"condition\": \"\",\n                \"image\": \"\",\n                \"image_small\": \"\",\n                \"level\": \"\",\n                \"name\": \"\",\n                \"nid\": 0\n              },\n              \"official_verify\": {\n                \"desc\": \"\",\n                \"type\": -1\n              },\n              \"pendant\": {\n                \"expire\": 0,\n                \"image\": \"\",\n                \"name\": \"\",\n                \"pid\": 0\n              },\n              \"rank\": \"10000\",\n              \"reg_year\": \"2015\",\n              \"sex\": \"女\",\n              \"sign\": \"\",\n              \"uname\": \"博丽灵梦♂节操\",\n              \"vip\": {\n                \"accessStatus\": 1,\n                \"dueRemark\": \"\",\n                \"vipDueDate\": 0,\n                \"vipStatus\": 0,\n                \"vipStatusWarn\": \"\",\n                \"vipType\": 0\n              }\n            },\n            \"mid\": 12625520,\n            \"oid\": 9938411,\n            \"parent\": 253703966,\n            \"parent_str\": \"253703966\",\n            \"rcount\": 0,\n            \"root\": 253703966,\n            \"root_str\": \"253703966\",\n            \"rpid\": 259412494,\n            \"rpid_str\": \"259412494\",\n            \"state\": 0,\n            \"type\": 1\n          }\n        ],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 253703966,\n        \"rpid_str\": \"253703966\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"急求BGM\",\n          \"plat\": 1\n        },\n        \"count\": 0,\n        \"ctime\": 1494157716,\n        \"floor\": 2589,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/016bdf3f5879913fbc9e5db802bf5444c603b82d.jpg\",\n          \"level_info\": {\n            \"current_exp\": 1308,\n            \"current_level\": 2,\n            \"current_min\": 200,\n            \"next_exp\": 1500\n          },\n          \"mid\": \"87794382\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2017\",\n          \"sex\": \"保密\",\n          \"sign\": \"闲的慌,真的是闲的慌。\",\n          \"uname\": \"进撃のkv2\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 87794382,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 253703527,\n        \"rpid_str\": \"253703527\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"讲道理一开始还以为少爷转行美食区了(=・ω・=)\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494080060,\n        \"floor\": 2588,\n        \"like\": 3,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i1.hdslb.com/bfs/face/cd1547ceb5a6eaa654a54e3b8510ff062ecf7465.jpg\",\n          \"level_info\": {\n            \"current_exp\": 8118,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"8989809\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"保密\",\n          \"sign\": \"看我一头乌黑靓丽的秀发，用飘柔，就是这么自信\",\n          \"uname\": \"长草的孔明\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 8989809,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 252874067,\n        \"rpid_str\": \"252874067\",\n        \"state\": 0,\n        \"type\": 1\n      },\n      {\n        \"action\": 0,\n        \"attr\": 0,\n        \"content\": {\n          \"device\": \"\",\n          \"members\": [],\n          \"message\": \"厉害厉害(=・ω・=)\",\n          \"plat\": 2\n        },\n        \"count\": 0,\n        \"ctime\": 1494061984,\n        \"floor\": 2587,\n        \"like\": 0,\n        \"member\": {\n          \"DisplayRank\": \"0\",\n          \"avatar\": \"http://i2.hdslb.com/bfs/face/1786752aebc7d41952b872dd3cb80aa39a96857b.jpg\",\n          \"level_info\": {\n            \"current_exp\": 5488,\n            \"current_level\": 4,\n            \"current_min\": 4500,\n            \"next_exp\": 10800\n          },\n          \"mid\": \"11328101\",\n          \"nameplate\": {\n            \"condition\": \"\",\n            \"image\": \"\",\n            \"image_small\": \"\",\n            \"level\": \"\",\n            \"name\": \"\",\n            \"nid\": 0\n          },\n          \"official_verify\": {\n            \"desc\": \"\",\n            \"type\": -1\n          },\n          \"pendant\": {\n            \"expire\": 0,\n            \"image\": \"\",\n            \"name\": \"\",\n            \"pid\": 0\n          },\n          \"rank\": \"10000\",\n          \"reg_year\": \"2015\",\n          \"sex\": \"女\",\n          \"sign\": \"事不能拖 话不能多 人不能作\",\n          \"uname\": \"Enril·云风\",\n          \"vip\": {\n            \"accessStatus\": 1,\n            \"dueRemark\": \"\",\n            \"vipDueDate\": 0,\n            \"vipStatus\": 0,\n            \"vipStatusWarn\": \"\",\n            \"vipType\": 0\n          }\n        },\n        \"mid\": 11328101,\n        \"oid\": 9938411,\n        \"parent\": 0,\n        \"parent_str\": \"0\",\n        \"rcount\": 0,\n        \"replies\": [],\n        \"root\": 0,\n        \"root_str\": \"0\",\n        \"rpid\": 252596582,\n        \"rpid_str\": \"252596582\",\n        \"state\": 0,\n        \"type\": 1\n      }\n    ],\n    \"upper\": {\n      \"mid\": 585267\n    }\n  },\n  \"message\": \"0\",\n  \"ttl\": 1\n}"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/CustomerLogo.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare;\n\nimport android.graphics.Bitmap;\nimport android.view.View.OnClickListener;\n\n/** 九宫格自定义的图标对象 */\npublic class CustomerLogo {\n\tpublic String label;\n\tpublic Bitmap logo;\n\tpublic OnClickListener listener;\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/OnekeyShare.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.text.TextUtils;\nimport android.view.View;\nimport android.view.View.OnClickListener;\n\nimport com.mob.MobSDK;\nimport com.mob.tools.utils.BitmapHelper;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.PlatformActionListener;\nimport cn.sharesdk.framework.ShareSDK;\n\n/**\n* 快捷分享的入口\n* <p>\n* 通过不同的setter设置参数，然后调用{@link #show(Context)}方法启动快捷分享\n*/\npublic class OnekeyShare {\n\tprivate HashMap<String, Object> params;\n\n\tpublic OnekeyShare() {\n\t\tparams = new HashMap<String, Object>();\n\t\tparams.put(\"customers\", new ArrayList<CustomerLogo>());\n\t\tparams.put(\"hiddenPlatforms\", new HashMap<String, String>());\n\t}\n\n\t/** address是接收人地址，仅在信息和邮件使用，否则可以不提供 */\n\tpublic void setAddress(String address) {\n\t\tparams.put(\"address\", address);\n\t}\n\n\t/**\n\t * title标题，在印象笔记、邮箱、信息、微信（包括好友、朋友圈和收藏）、\n\t * 易信（包括好友、朋友圈）、人人网和QQ空间使用，否则可以不提供\n\t */\n\tpublic void setTitle(String title) {\n\t\tparams.put(\"title\", title);\n\t}\n\n\t/** titleUrl是标题的网络链接，仅在人人网和QQ空间使用，否则可以不提供 */\n\tpublic void setTitleUrl(String titleUrl) {\n\t\tparams.put(\"titleUrl\", titleUrl);\n\t}\n\n\t/** text是分享文本，所有平台都需要这个字段 */\n\tpublic void setText(String text) {\n\t\tparams.put(\"text\", text);\n\t}\n\n\t/** 获取text字段的值 */\n\tpublic String getText() {\n\t\treturn params.containsKey(\"text\") ? String.valueOf(params.get(\"text\")) : null;\n\t}\n\n\t/** imagePath是本地的图片路径，除Linked-In外的所有平台都支持这个字段 */\n\tpublic void setImagePath(String imagePath) {\n\t\tif(!TextUtils.isEmpty(imagePath)) {\n\t\t\tparams.put(\"imagePath\", imagePath);\n\t\t}\n\t}\n\n\t/** imageUrl是图片的网络路径，新浪微博、人人网、QQ空间和Linked-In支持此字段 */\n\tpublic void setImageUrl(String imageUrl) {\n\t\tif (!TextUtils.isEmpty(imageUrl)) {\n\t\t\tparams.put(\"imageUrl\", imageUrl);\n\t\t}\n\t}\n\n\t/** url在微信（包括好友、朋友圈收藏）和易信（包括好友和朋友圈）中使用，否则可以不提供 */\n\tpublic void setUrl(String url) {\n\t\tparams.put(\"url\", url);\n\t}\n\n\t/** filePath是待分享应用程序的本地路劲，仅在微信（易信）好友和Dropbox中使用，否则可以不提供 */\n\tpublic void setFilePath(String filePath) {\n\t\tparams.put(\"filePath\", filePath);\n\t}\n\n\t/** comment是我对这条分享的评论，仅在人人网和QQ空间使用，否则可以不提供 */\n\tpublic void setComment(String comment) {\n\t\tparams.put(\"comment\", comment);\n\t}\n\n\t/** site是分享此内容的网站名称，仅在QQ空间使用，否则可以不提供 */\n\tpublic void setSite(String site) {\n\t\tparams.put(\"site\", site);\n\t}\n\n\t/** siteUrl是分享此内容的网站地址，仅在QQ空间使用，否则可以不提供 */\n\tpublic void setSiteUrl(String siteUrl) {\n\t\tparams.put(\"siteUrl\", siteUrl);\n\t}\n\n\t/** foursquare分享时的地方名 */\n\tpublic void setVenueName(String venueName) {\n\t\tparams.put(\"venueName\", venueName);\n\t}\n\n\t/** foursquare分享时的地方描述 */\n\tpublic void setVenueDescription(String venueDescription) {\n\t\tparams.put(\"venueDescription\", venueDescription);\n\t}\n\n\t/** 分享地纬度，新浪微博、腾讯微博和foursquare支持此字段 */\n\tpublic void setLatitude(float latitude) {\n\t\tparams.put(\"latitude\", latitude);\n\t}\n\n\t/** 分享地经度，新浪微博、腾讯微博和foursquare支持此字段 */\n\tpublic void setLongitude(float longitude) {\n\t\tparams.put(\"longitude\", longitude);\n\t}\n\n\t/** 是否直接分享 */\n\tpublic void setSilent(boolean silent) {\n\t\tparams.put(\"silent\", silent);\n\t}\n\n\t/** 设置编辑页的初始化选中平台 */\n\tpublic void setPlatform(String platform) {\n\t\tparams.put(\"platform\", platform);\n\t}\n\n\t/** 设置KakaoTalk的应用下载地址 */\n\tpublic void setInstallUrl(String installurl) {\n\t\tparams.put(\"installurl\", installurl);\n\t}\n\n\t/** 设置KakaoTalk的应用打开地址 */\n\tpublic void setExecuteUrl(String executeurl) {\n\t\tparams.put(\"executeurl\", executeurl);\n\t}\n\n\t/** 设置微信分享的音乐的地址 */\n\tpublic void setMusicUrl(String musicUrl) {\n\t\tparams.put(\"musicUrl\", musicUrl);\n\t}\n\n\t/** 设置自定义的外部回调 */\n\tpublic void setCallback(PlatformActionListener callback) {\n\t\tparams.put(\"callback\", callback);\n\t}\n\n\t/** 返回操作回调 */\n\tpublic PlatformActionListener getCallback() {\n\t\treturn ResHelper.forceCast(params.get(\"callback\"));\n\t}\n\n\t/** 设置用于分享过程中，根据不同平台自定义分享内容的回调 */\n\tpublic void setShareContentCustomizeCallback(ShareContentCustomizeCallback callback) {\n\t\tparams.put(\"customizeCallback\", callback);\n\t}\n\n\t/** 自定义不同平台分享不同内容的回调 */\n\tpublic ShareContentCustomizeCallback getShareContentCustomizeCallback() {\n\t\treturn ResHelper.forceCast(params.get(\"customizeCallback\"));\n\t}\n\n\t/** 设置自己图标和点击事件，可以重复调用添加多次 */\n\tpublic void setCustomerLogo(Bitmap logo, String label, OnClickListener ocl) {\n\t\tCustomerLogo cl = new CustomerLogo();\n\t\tcl.logo = logo;\n\t\tcl.label = label;\n\t\tcl.listener = ocl;\n\t\tArrayList<CustomerLogo> customers = ResHelper.forceCast(params.get(\"customers\"));\n\t\tcustomers.add(cl);\n\t}\n\n\t/** 设置一个总开关，用于在分享前若需要授权，则禁用sso功能 */\n\tpublic void disableSSOWhenAuthorize() {\n\t\tparams.put(\"disableSSO\", true);\n\t}\n\n\t/** 设置视频网络地址 */\n\tpublic void setVideoUrl(String url) {\n\t\tparams.put(\"url\", url);\n\t\tparams.put(\"shareType\", Platform.SHARE_VIDEO);\n\t}\n\n\t/** 设置编辑页面的显示模式为Dialog模式 */\n\t@Deprecated\n\tpublic void setDialogMode() {\n\t\tparams.put(\"dialogMode\", true);\n\t}\n\n\t/** 添加一个隐藏的platform */\n\tpublic void addHiddenPlatform(String platform) {\n\t\tHashMap<String, String> hiddenPlatforms = ResHelper.forceCast(params.get(\"hiddenPlatforms\"));\n\t\thiddenPlatforms.put(platform, platform);\n\t}\n\n\t/** 设置一个将被截图分享的View , surfaceView是截不了图片的*/\n\tpublic void setViewToShare(View viewToShare) {\n\t\ttry {\n\t\t\tBitmap bm = BitmapHelper.captureView(viewToShare, viewToShare.getWidth(), viewToShare.getHeight());\n\t\t\tparams.put(\"viewToShare\", bm);\n\t\t} catch (Throwable e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t}\n\n\t/** 腾讯微博分享多张图片 */\n\tpublic void setImageArray(String[] imageArray) {\n\t\tparams.put(\"imageArray\", imageArray);\n\t}\n\n\t/** 设置在执行分享到QQ或QZone的同时，分享相同的内容腾讯微博 */\n\tpublic void setShareToTencentWeiboWhenPerformingQQOrQZoneSharing() {\n\t\tparams.put(\"isShareTencentWeibo\", true);\n\t}\n\n\t/** 设置分享界面的样式，目前只有一种，不需要设置 */\n\tpublic void setTheme(OnekeyShareTheme theme) {\n\t\tparams.put(\"theme\", theme.getValue());\n\t}\n\n\t@SuppressWarnings(\"unchecked\")\n\tpublic void show(Context context) {\n\t\tHashMap<String, Object> shareParamsMap = new HashMap<String, Object>();\n\t\tshareParamsMap.putAll(params);\n\n\t\tMobSDK.init(context.getApplicationContext());\n\t\tShareSDK.initSDK(context);\n\n\t\t// 打开分享菜单的统计\n\t\tShareSDK.logDemoEvent(1, null);\n\n\t\tint iTheme = 0;\n\t\ttry {\n\t\t\tiTheme = ResHelper.parseInt(String.valueOf(shareParamsMap.remove(\"theme\")));\n\t\t} catch (Throwable t) {}\n\t\tOnekeyShareTheme theme = OnekeyShareTheme.fromValue(iTheme);\n\t\tOnekeyShareThemeImpl themeImpl = theme.getImpl();\n\n\t\tthemeImpl.setShareParamsMap(shareParamsMap);\n\t\tthemeImpl.setDialogMode(shareParamsMap.containsKey(\"dialogMode\") ? ((Boolean) shareParamsMap.remove(\"dialogMode\")) : false);\n\t\tthemeImpl.setSilent(shareParamsMap.containsKey(\"silent\") ? ((Boolean) shareParamsMap.remove(\"silent\")) : false);\n\t\tthemeImpl.setCustomerLogos((ArrayList<CustomerLogo>) shareParamsMap.remove(\"customers\"));\n\t\tthemeImpl.setHiddenPlatforms((HashMap<String, String>) shareParamsMap.remove(\"hiddenPlatforms\"));\n\t\tthemeImpl.setPlatformActionListener((PlatformActionListener) shareParamsMap.remove(\"callback\"));\n\t\tthemeImpl.setShareContentCustomizeCallback((ShareContentCustomizeCallback) shareParamsMap.remove(\"customizeCallback\"));\n\t\tif (shareParamsMap.containsKey(\"disableSSO\") ? ((Boolean) shareParamsMap.remove(\"disableSSO\")) : false) {\n\t\t\tthemeImpl.disableSSO();\n\t\t}\n\n\t\tthemeImpl.show(context.getApplicationContext());\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/OnekeySharePage.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare;\n\nimport com.mob.tools.FakeActivity;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.ShareParams;\nimport cn.sharesdk.framework.PlatformActionListener;\n\n/** 快捷分享的基类 */\npublic class OnekeySharePage extends FakeActivity {\n\tprivate OnekeyShareThemeImpl impl;\n\n\tpublic OnekeySharePage(OnekeyShareThemeImpl impl) {\n\t\tthis.impl = impl;\n\t}\n\n\t/** 分享界面是否弹窗模式 */\n\tprotected final boolean isDialogMode() {\n\t\treturn impl.dialogMode;\n\t}\n\n\tprotected final HashMap<String, Object> getShareParamsMap() {\n\t\treturn impl.shareParamsMap;\n\t}\n\n\t/** 静默分享开关（没有界面，直接分享 ）*/\n\tprotected final boolean isSilent() {\n\t\treturn impl.silent;\n\t}\n\n\tprotected final ArrayList<CustomerLogo> getCustomerLogos() {\n\t\treturn impl.customerLogos;\n\t}\n\n\tprotected final HashMap<String, String> getHiddenPlatforms() {\n\t\treturn impl.hiddenPlatforms;\n\t}\n\n\tprotected final PlatformActionListener getCallback() {\n\t\treturn impl.callback;\n\t}\n\n\tprotected final ShareContentCustomizeCallback getCustomizeCallback() {\n\t\treturn impl.customizeCallback;\n\t}\n\n\tprotected final boolean isDisableSSO() {\n\t\treturn impl.disableSSO;\n\t}\n\n\tprotected final void shareSilently(Platform platform) {\n\t\timpl.shareSilently(platform);\n\t}\n\n\tprotected final ShareParams formateShareData(Platform platform) {\n\t\tif (impl.formateShareData(platform)) {\n\t\t\treturn impl.shareDataToShareParams(platform);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprotected final boolean isUseClientToShare(Platform platform) {\n\t\treturn impl.isUseClientToShare(platform);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/OnekeyShareTheme.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare;\n\nimport cn.sharesdk.onekeyshare.themes.classic.ClassicTheme;\n\n/** 快捷分享的主题样式  */\npublic enum OnekeyShareTheme {\n\t/** 九格宫的主题样式 ,对应的实现类ClassicTheme */\n\tCLASSIC(0, new ClassicTheme());\n\n\tprivate final int value;\n\tprivate final OnekeyShareThemeImpl impl;\n\n\tprivate OnekeyShareTheme(int value, OnekeyShareThemeImpl impl) {\n\t\tthis.value = value;\n\t\tthis.impl = impl;\n\t}\n\n\tpublic int getValue() {\n\t\treturn value;\n\t}\n\n\tpublic OnekeyShareThemeImpl getImpl() {\n\t\treturn impl;\n\t}\n\n\tpublic static OnekeyShareTheme fromValue(int value) {\n\t\tfor (OnekeyShareTheme theme : OnekeyShareTheme.values()) {\n\t\t\tif (theme.value == value) {\n\t\t\t\treturn theme;\n\t\t\t}\n\t\t}\n\t\treturn CLASSIC;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/OnekeyShareThemeImpl.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.ResolveInfo;\nimport android.graphics.Bitmap;\nimport android.graphics.Bitmap.CompressFormat;\nimport android.os.Handler.Callback;\nimport android.os.Message;\nimport android.text.TextUtils;\nimport android.widget.Toast;\n\nimport com.mob.tools.utils.ResHelper;\nimport com.mob.tools.utils.UIHandler;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.CustomPlatform;\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.ShareParams;\nimport cn.sharesdk.framework.PlatformActionListener;\nimport cn.sharesdk.framework.ShareSDK;\n\n/** 快捷分享的主题样式的实现父类 */\npublic abstract class OnekeyShareThemeImpl implements PlatformActionListener, Callback {\n\tprotected boolean dialogMode;\n\tprotected HashMap<String, Object> shareParamsMap;\n\tprotected boolean silent;\n\tprotected ArrayList<CustomerLogo> customerLogos;\n\tprotected HashMap<String, String> hiddenPlatforms;\n\tprotected PlatformActionListener callback;\n\tprotected ShareContentCustomizeCallback customizeCallback;\n\tprotected boolean disableSSO;\n\tprotected Context context;\n\n\tpublic OnekeyShareThemeImpl() {\n\t\tcallback = this;\n\t}\n\n\tpublic final void setDialogMode(boolean dialogMode) {\n\t\tthis.dialogMode = dialogMode;\n\t}\n\n\tpublic final void setShareParamsMap(HashMap<String, Object> shareParamsMap) {\n\t\tthis.shareParamsMap = shareParamsMap;\n\t}\n\n\tpublic final void setSilent(boolean silent) {\n\t\tthis.silent = silent;\n\t}\n\n\tpublic final void setCustomerLogos(ArrayList<CustomerLogo> customerLogos) {\n\t\tthis.customerLogos = customerLogos;\n\t}\n\n\tpublic final void setHiddenPlatforms(HashMap<String, String> hiddenPlatforms) {\n\t\tthis.hiddenPlatforms = hiddenPlatforms;\n\t}\n\n\tpublic final void setPlatformActionListener(PlatformActionListener callback) {\n\t\tthis.callback = callback == null ? this : callback;\n\t}\n\n\tpublic final void setShareContentCustomizeCallback(ShareContentCustomizeCallback customizeCallback) {\n\t\tthis.customizeCallback = customizeCallback;\n\t}\n\n\tpublic final void disableSSO() {\n\t\tdisableSSO = true;\n\t}\n\n\tpublic final void show(Context context) {\n\t\tthis.context = context;\n\n\t\t// 显示方式是由platform和silent两个字段控制的\n\t\t// 如果platform设置了，则无须显示九宫格，否则都会显示；\n\t\t// 如果silent为true，表示不进入编辑页面，否则会进入。\n\t\tif (shareParamsMap.containsKey(\"platform\")) {\n\t\t\tString name = String.valueOf(shareParamsMap.get(\"platform\"));\n\t\t\tPlatform platform = ShareSDK.getPlatform(name);\n\t\t\tboolean isCustomPlatform = platform instanceof CustomPlatform;\n\t\t\tboolean isUseClientToShare = isUseClientToShare(platform);\n\t\t\tif (silent || isCustomPlatform || isUseClientToShare) {\n\t\t\t\tshareSilently(platform);\n\t\t\t} else {\n\t\t\t\tprepareForEditPage(platform);\n\t\t\t}\n\t\t} else {\n\t\t\tshowPlatformPage(context);\n\t\t}\n\t}\n\n\t/** 判断指定平台是否只能使用客户端分享 */\n\tfinal boolean isUseClientToShare(Platform platform) {\n\t\tString name = platform.getName();\n\t\tif (\"Wechat\".equals(name) || \"WechatMoments\".equals(name)\n\t\t\t\t|| \"WechatFavorite\".equals(name) || \"ShortMessage\".equals(name)\n\t\t\t\t|| \"Email\".equals(name) || \"Qzone\".equals(name)\n\t\t\t\t|| \"QQ\".equals(name) || \"Pinterest\".equals(name)\n\t\t\t\t|| \"Instagram\".equals(name) || \"Yixin\".equals(name)\n\t\t\t\t|| \"YixinMoments\".equals(name) || \"QZone\".equals(name)\n\t\t\t\t|| \"Mingdao\".equals(name) || \"Line\".equals(name)\n\t\t\t\t|| \"KakaoStory\".equals(name) || \"KakaoTalk\".equals(name)\n\t\t\t\t|| \"Bluetooth\".equals(name) || \"WhatsApp\".equals(name)\n\t\t\t\t|| \"BaiduTieba\".equals(name) || \"Laiwang\".equals(name)\n\t\t\t\t|| \"LaiwangMoments\".equals(name) || \"Alipay\".equals(name)\n\t\t\t\t|| \"AlipayMoments\".equals(name) || \"FacebookMessenger\".equals(name)\n\t\t\t\t|| \"GooglePlus\".equals(name) || \"Dingding\".equals(name)\n\t\t\t\t|| \"Youtube\".equals(name) || \"Meipai\".equals(name)\n\t\t\t\t) {\n\t\t\treturn true;\n\t\t} else if (\"Evernote\".equals(name)) {\n\t\t\tif (\"true\".equals(platform.getDevinfo(\"ShareByAppClient\"))) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (\"SinaWeibo\".equals(name)) {\n\t\t\tif (\"true\".equals(platform.getDevinfo(\"ShareByAppClient\"))) {\n\n\t\t\t\tIntent test = new Intent(Intent.ACTION_SEND);\n\t\t\t\ttest.setPackage(\"com.sina.weibo\");\n\t\t\t\ttest.setType(\"image/*\");\n\t\t\t\tResolveInfo ri = platform.getContext().getPackageManager().resolveActivity(test, 0);\n\t\t\t\tif(ri == null) {\n\t\t\t\t\ttest = new Intent(Intent.ACTION_SEND);\n\t\t\t\t\ttest.setPackage(\"com.sina.weibog3\");\n\t\t\t\t\ttest.setType(\"image/*\");\n\t\t\t\t\tri = platform.getContext().getPackageManager().resolveActivity(test, 0);\n\t\t\t\t}\n\t\t\t\treturn (ri != null);\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfinal void shareSilently(Platform platform) {\n\t\tif (formateShareData(platform)) {\n\t\t\tShareParams sp = shareDataToShareParams(platform);\n\t\t\tif (sp != null) {\n\t\t\t\ttoast(\"ssdk_oks_sharing\");\n\t\t\t\tif (customizeCallback != null) {\n\t\t\t\t\tcustomizeCallback.onShare(platform, sp);\n\t\t\t\t}\n\t\t\t\tif (disableSSO) {\n\t\t\t\t\tplatform.SSOSetting(disableSSO);\n\t\t\t\t}\n\t\t\t\tplatform.setPlatformActionListener(callback);\n\t\t\t\tplatform.share(sp);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate void prepareForEditPage(Platform platform) {\n\t\tif (formateShareData(platform)) {\n\t\t\tShareParams sp = shareDataToShareParams(platform);\n\t\t\tif (sp != null) {\n\t\t\t\t// 编辑分享内容的统计\n\t\t\t\tShareSDK.logDemoEvent(3, null);\n\t\t\t\tif (customizeCallback != null) {\n\t\t\t\t\tcustomizeCallback.onShare(platform, sp);\n\t\t\t\t}\n\t\t\t\tshowEditPage(context, platform, sp);\n\t\t\t}\n\t\t}\n\t}\n\n\tfinal boolean formateShareData(Platform plat) {\n\t\tString name = plat.getName();\n\n\t\tboolean isAlipay = \"Alipay\".equals(name) || \"AlipayMoments\".equals(name);\n\t\tif (isAlipay && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_alipay_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isKakaoTalk = \"KakaoTalk\".equals(name);\n\t\tif (isKakaoTalk && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_kakaotalk_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isKakaoStory = \"KakaoStory\".equals(name);\n\t\tif (isKakaoStory && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_kakaostory_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isLine = \"Line\".equals(name);\n\t\tif (isLine && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_line_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isWhatsApp = \"WhatsApp\".equals(name);\n\t\tif (isWhatsApp && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_whatsapp_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isPinterest = \"Pinterest\".equals(name);\n\t\tif (isPinterest && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_pinterest_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\"Instagram\".equals(name) && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_instagram_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\"QZone\".equals(name) && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_qq_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isLaiwang = \"Laiwang\".equals(name);\n\t\tboolean isLaiwangMoments = \"LaiwangMoments\".equals(name);\n\t\tif(isLaiwang || isLaiwangMoments){\n\t\t\tif (!plat.isClientValid()) {\n\t\t\t\ttoast(\"ssdk_laiwang_client_inavailable\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tboolean isYixin = \"YixinMoments\".equals(name) || \"Yixin\".equals(name);\n\t\tif (isYixin && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_yixin_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tboolean isWechat = \"WechatFavorite\".equals(name) || \"Wechat\".equals(name) || \"WechatMoments\".equals(name);\n\t\tif (isWechat && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_wechat_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\"FacebookMessenger\".equals(name) && !plat.isClientValid()) {\n\t\t\ttoast(\"ssdk_facebookmessenger_client_inavailable\");\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!shareParamsMap.containsKey(\"shareType\")) {\n\t\t\tint shareType = Platform.SHARE_TEXT;\n\t\t\tString imagePath = String.valueOf(shareParamsMap.get(\"imagePath\"));\n\t\t\tif (imagePath != null && (new File(imagePath)).exists()) {\n\t\t\t\tshareType = Platform.SHARE_IMAGE;\n\t\t\t\tif (imagePath.endsWith(\".gif\") && isWechat) {\n\t\t\t\t\tshareType = Platform.SHARE_EMOJI;\n\t\t\t\t} else if (shareParamsMap.containsKey(\"url\") && !TextUtils.isEmpty(shareParamsMap.get(\"url\").toString())) {\n\t\t\t\t\tshareType = Platform.SHARE_WEBPAGE;\n\t\t\t\t\tif (shareParamsMap.containsKey(\"musicUrl\") && !TextUtils.isEmpty(shareParamsMap.get(\"musicUrl\").toString()) && isWechat) {\n\t\t\t\t\t\tshareType = Platform.SHARE_MUSIC;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBitmap viewToShare = ResHelper.forceCast(shareParamsMap.get(\"viewToShare\"));\n\t\t\t\tif (viewToShare != null && !viewToShare.isRecycled()) {\n\t\t\t\t\tshareType = Platform.SHARE_IMAGE;\n\t\t\t\t\tif (shareParamsMap.containsKey(\"url\") && !TextUtils.isEmpty(shareParamsMap.get(\"url\").toString())) {\n\t\t\t\t\t\tshareType = Platform.SHARE_WEBPAGE;\n\t\t\t\t\t\tif (shareParamsMap.containsKey(\"musicUrl\") && !TextUtils.isEmpty(shareParamsMap.get(\"musicUrl\").toString()) && isWechat) {\n\t\t\t\t\t\t\tshareType = Platform.SHARE_MUSIC;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tObject imageUrl = shareParamsMap.get(\"imageUrl\");\n\t\t\t\t\tif (imageUrl != null && !TextUtils.isEmpty(String.valueOf(imageUrl))) {\n\t\t\t\t\t\tshareType = Platform.SHARE_IMAGE;\n\t\t\t\t\t\tif (String.valueOf(imageUrl).endsWith(\".gif\") && isWechat) {\n\t\t\t\t\t\t\tshareType = Platform.SHARE_EMOJI;\n\t\t\t\t\t\t} else if (shareParamsMap.containsKey(\"url\") && !TextUtils.isEmpty(shareParamsMap.get(\"url\").toString())) {\n\t\t\t\t\t\t\tshareType = Platform.SHARE_WEBPAGE;\n\t\t\t\t\t\t\tif (shareParamsMap.containsKey(\"musicUrl\") && !TextUtils.isEmpty(shareParamsMap.get(\"musicUrl\").toString()) && isWechat) {\n\t\t\t\t\t\t\t\tshareType = Platform.SHARE_MUSIC;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tshareParamsMap.put(\"shareType\", shareType);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfinal ShareParams shareDataToShareParams(Platform plat) {\n\t\tif (plat == null || shareParamsMap == null) {\n\t\t\ttoast(\"ssdk_oks_share_failed\");\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tString imagePath = ResHelper.forceCast(shareParamsMap.get(\"imagePath\"));\n\t\t\tBitmap viewToShare = ResHelper.forceCast(shareParamsMap.get(\"viewToShare\"));\n\t\t\tif (TextUtils.isEmpty(imagePath) && viewToShare != null && !viewToShare.isRecycled()) {\n\t\t\t\tString path = ResHelper.getCachePath(plat.getContext(), \"screenshot\");\n\t\t\t\tFile ss = new File(path, String.valueOf(System.currentTimeMillis()) + \".jpg\");\n\t\t\t\tFileOutputStream fos = new FileOutputStream(ss);\n\t\t\t\tviewToShare.compress(CompressFormat.JPEG, 100, fos);\n\t\t\t\tfos.flush();\n\t\t\t\tfos.close();\n\t\t\t\tshareParamsMap.put(\"imagePath\", ss.getAbsolutePath());\n\t\t\t}\n\t\t} catch (Throwable t) {\n\t\t\tt.printStackTrace();\n\t\t\ttoast(\"ssdk_oks_share_failed\");\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new ShareParams(shareParamsMap);\n\t}\n\n\tprivate void toast(final String resOrName) {\n\t\tUIHandler.sendEmptyMessage(0, new Callback() {\n\t\t\tpublic boolean handleMessage(Message msg) {\n\t\t\t\tint resId = ResHelper.getStringRes(context, resOrName);\n\t\t\t\tif (resId > 0) {\n\t\t\t\t\tToast.makeText(context, resId, Toast.LENGTH_SHORT).show();\n\t\t\t\t} else {\n\t\t\t\t\tToast.makeText(context, resOrName, Toast.LENGTH_SHORT).show();\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected abstract void showPlatformPage(Context context);\n\n\tprotected abstract void showEditPage(Context context, Platform platform, ShareParams sp);\n\n\tpublic final void onComplete(Platform platform, int action,\n\t\t\tHashMap<String, Object> res) {\n\t\tMessage msg = new Message();\n\t\tmsg.arg1 = 1;\n\t\tmsg.arg2 = action;\n\t\tmsg.obj = platform;\n\t\tUIHandler.sendMessage(msg, this);\n\t}\n\n\tpublic final void onError(Platform platform, int action, Throwable t) {\n\t\tt.printStackTrace();\n\n\t\tMessage msg = new Message();\n\t\tmsg.arg1 = 2;\n\t\tmsg.arg2 = action;\n\t\tmsg.obj = t;\n\t\tUIHandler.sendMessage(msg, this);\n\n\t\t// 分享失败的统计\n\t\tShareSDK.logDemoEvent(4, platform);\n\t}\n\n\tpublic final void onCancel(Platform platform, int action) {\n\t\tMessage msg = new Message();\n\t\tmsg.arg1 = 3;\n\t\tmsg.arg2 = action;\n\t\tmsg.obj = platform;\n\t\tUIHandler.sendMessage(msg, this);\n\n\t\t// 分享失败的统计\n\t\tShareSDK.logDemoEvent(5, platform);\n\t}\n\n\tpublic final boolean handleMessage(Message msg) {\n\t\tswitch (msg.arg1) {\n\t\t\tcase 1: {\n\t\t\t\t// 成功\n\t\t\t\tint resId = ResHelper.getStringRes(context, \"ssdk_oks_share_completed\");\n\t\t\t\tif (resId > 0) {\n\t\t\t\t\ttoast(context.getString(resId));\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase 2: {\n\t\t\t\t// 失败\n\t\t\t\tString expName = msg.obj.getClass().getSimpleName();\n\t\t\t\tif (\"WechatClientNotExistException\".equals(expName)\n\t\t\t\t\t\t|| \"WechatTimelineNotSupportedException\".equals(expName)\n\t\t\t\t\t\t|| \"WechatFavoriteNotSupportedException\".equals(expName)) {\n\t\t\t\t\ttoast(\"ssdk_wechat_client_inavailable\");\n\t\t\t\t} else if (\"GooglePlusClientNotExistException\".equals(expName)) {\n\t\t\t\t\ttoast(\"ssdk_google_plus_client_inavailable\");\n\t\t\t\t} else if (\"QQClientNotExistException\".equals(expName)) {\n\t\t\t\t\ttoast(\"ssdk_qq_client_inavailable\");\n\t\t\t\t} else if (\"YixinClientNotExistException\".equals(expName)\n\t\t\t\t\t\t|| \"YixinTimelineNotSupportedException\".equals(expName)) {\n\t\t\t\t\ttoast(\"ssdk_yixin_client_inavailable\");\n\t\t\t\t} else if (\"KakaoTalkClientNotExistException\".equals(expName)) {\n\t\t\t\t\ttoast(\"ssdk_kakaotalk_client_inavailable\");\n\t\t\t\t} else if (\"KakaoStoryClientNotExistException\".equals(expName)) {\n\t\t\t\t\ttoast(\"ssdk_kakaostory_client_inavailable\");\n\t\t\t\t} else if(\"WhatsAppClientNotExistException\".equals(expName)){\n\t\t\t\t\ttoast(\"ssdk_whatsapp_client_inavailable\");\n\t\t\t\t} else if(\"FacebookMessengerClientNotExistException\".equals(expName)){\n\t\t\t\t\ttoast(\"ssdk_facebookmessenger_client_inavailable\");\n\t\t\t\t} else {\n\t\t\t\t\ttoast(\"ssdk_oks_share_failed\");\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase 3: {\n\t\t\t\t// 取消\n\t\t\t\ttoast(\"ssdk_oks_share_canceled\");\n\t\t\t} break;\n\t\t}\n\t\treturn false;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/ShareContentCustomizeCallback.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.ShareParams;\n\n/** 自定义不同平台分享不同内容的接口 */\npublic interface ShareContentCustomizeCallback {\n\n\tpublic void onShare(Platform platform, ShareParams paramsToShare);\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/ClassicTheme.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.content.res.Configuration;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.ShareParams;\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.land.EditPageLand;\nimport cn.sharesdk.onekeyshare.themes.classic.land.PlatformPageLand;\nimport cn.sharesdk.onekeyshare.themes.classic.port.EditPagePort;\nimport cn.sharesdk.onekeyshare.themes.classic.port.PlatformPagePort;\n\n/** 九宫格经典主题样式的实现类*/\npublic class ClassicTheme extends OnekeyShareThemeImpl {\n\n\t/** 展示平台列表*/\n\tprotected void showPlatformPage(Context context) {\n\t\tPlatformPage page;\n\t\tint orientation = context.getResources().getConfiguration().orientation;\n\t\tif (orientation == Configuration.ORIENTATION_PORTRAIT) {\n\t\t\tpage = new PlatformPagePort(this);\n\t\t} else {\n\t\t\tpage = new PlatformPageLand(this);\n\t\t}\n\t\tpage.show(context, null);\n\t}\n\n\t/** 展示编辑界面*/\n\tprotected void showEditPage(Context context, Platform platform, ShareParams sp) {\n\t\tEditPage page;\n\t\tint orientation = context.getResources().getConfiguration().orientation;\n\t\tif (orientation == Configuration.ORIENTATION_PORTRAIT) {\n\t\t\tpage = new EditPagePort(this);\n\t\t} else {\n\t\t\tpage = new EditPageLand(this);\n\t\t}\n\t\tpage.setPlatform(platform);\n\t\tpage.setShareParams(sp);\n\t\tpage.show(context, null);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/EditPage.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.app.Activity;\nimport android.content.res.Configuration;\nimport android.graphics.Bitmap;\nimport android.graphics.drawable.ColorDrawable;\nimport android.text.Editable;\nimport android.text.TextUtils;\nimport android.text.TextWatcher;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup.LayoutParams;\nimport android.view.WindowManager;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.ScrollView;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport com.mob.tools.gui.AsyncImageView;\nimport com.mob.tools.utils.DeviceHelper;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.ShareParams;\nimport cn.sharesdk.framework.ShareSDK;\nimport cn.sharesdk.onekeyshare.OnekeySharePage;\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.land.FriendListPageLand;\nimport cn.sharesdk.onekeyshare.themes.classic.port.FriendListPagePort;\n\npublic class EditPage extends OnekeySharePage implements OnClickListener, TextWatcher, Runnable {\n\tprivate OnekeyShareThemeImpl impl;\n\tprotected Platform platform;\n\tprotected ShareParams sp;\n\n\tprotected LinearLayout llPage;\n\tprotected RelativeLayout rlTitle;\n\tprotected ScrollView svContent;\n\tprotected EditText etContent;\n\tprotected TextView tvCancel;\n\tprotected TextView tvShare;\n\tprotected RelativeLayout rlThumb;\n\t/** 异步加载图片的控件 */\n\tprotected AsyncImageView aivThumb;\n\tprotected XView xvRemove;\n\tprotected LinearLayout llBottom;\n\tprotected TextView tvAt;\n\tprotected TextView tvTextCouter;\n\n\tprotected Bitmap thumb;\n\tprotected int maxBodyHeight;\n\n\tpublic EditPage(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t\tthis.impl = impl;\n\t}\n\n\tpublic void setPlatform(Platform platform) {\n\t\tthis.platform = platform;\n\t}\n\n\tpublic void setShareParams(ShareParams sp) {\n\t\tthis.sp = sp;\n\t}\n\n\tpublic void setActivity(Activity activity) {\n\t\tsuper.setActivity(activity);\n\t\tif (isDialogMode()) {\n//\t\t\tactivity.setTheme(android.R.style.Theme_Dialog);\n//\t\t\tactivity.requestWindowFeature(Window.FEATURE_NO_TITLE);\n//\t\t\tif (Build.VERSION.SDK_INT >= 11) {\n//\t\t\t\ttry {\n//\t\t\t\t\tReflectHelper.invokeInstanceMethod(activity, \"setFinishOnTouchOutside\", false);\n//\t\t\t\t} catch (Throwable e) {}\n//\t\t\t}\n\t\t}\n\n\t\tactivity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE\n\t\t\t\t| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);\n\t}\n\n\tpublic void onCreate() {\n\t\tactivity.getWindow().setBackgroundDrawable(new ColorDrawable(0xfff3f3f3));\n\t}\n\n\t/** 取消分享时，执行的方法 */\n\tprivate void cancelAndFinish() {\n\t\t// 分享失败的统计\n\t\tShareSDK.logDemoEvent(5, platform);\n\t\tfinish();\n\t}\n\n\t/** 执行分享时的方法 */\n\tprivate void shareAndFinish() {\n\t\tint resId = ResHelper.getStringRes(activity, \"ssdk_oks_sharing\");\n\t\tif (resId > 0) {\n\t\t\tToast.makeText(activity, resId, Toast.LENGTH_SHORT).show();\n\t\t}\n\n\t\tif (isDisableSSO()) {\n\t\t\tplatform.SSOSetting(true);\n\t\t}\n\t\tplatform.setPlatformActionListener(getCallback());\n\t\tplatform.share(sp);\n\n\t\tfinish();\n\t}\n\n\t/** 编辑界面，显示的图片 */\n\tprivate void showThumb(Bitmap pic) {\n\t\tPicViewerPage page = new PicViewerPage(impl);\n\t\tpage.setImageBitmap(pic);\n\t\tpage.show(activity, null);\n\t}\n\n\tprivate void removeThumb() {\n\t\tsp.setImageArray(null);\n\t\tsp.setImageData(null);\n\t\tsp.setImagePath(null);\n\t\tsp.setImageUrl(null);\n\t}\n\n\t/** @ 好友时，展示的好友列表 */\n\tprivate void showFriendList() {\n\t\tFriendListPage page;\n\t\tint orientation = activity.getResources().getConfiguration().orientation;\n\t\tif (orientation == Configuration.ORIENTATION_PORTRAIT) {\n\t\t\tpage = new FriendListPagePort(impl);\n\t\t} else {\n\t\t\tpage = new FriendListPageLand(impl);\n\t\t}\n\t\tpage.setPlatform(platform);\n\t\tpage.showForResult(platform.getContext(), null, this);\n\t}\n\n\tpublic void onResult(HashMap<String, Object> data) {\n\t\tString atText = getJoinSelectedUser(data);\n\t\tif(!TextUtils.isEmpty(atText)) {\n\t\t\tetContent.append(atText);\n\t\t}\n\t}\n\n\tprivate String getJoinSelectedUser(HashMap<String, Object> data) {\n\t\tif (data != null && data.containsKey(\"selected\")) {\n\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\tArrayList<String> selected = (ArrayList<String>) data.get(\"selected\");\n\t\t\tString platform = ((Platform)data.get(\"platform\")).getName();\n\t\t\tif(\"FacebookMessenger\".equals(platform)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\tfor (String sel : selected) {\n\t\t\t\tsb.append('@').append(sel).append(' ');\n\t\t\t}\n\t\t\treturn sb.toString();\n\t\t}\n\t\treturn null;\n\t}\n\n\tprotected boolean isShowAtUserLayout(String platformName) {\n\t\treturn \"SinaWeibo\".equals(platformName)\n\t\t\t\t|| \"TencentWeibo\".equals(platformName)\n\t\t\t\t|| \"Facebook\".equals(platformName)\n\t\t\t\t|| \"Twitter\".equals(platformName);\n\t}\n\n\tpublic void onClick(View v) {\n\t\tif (v.equals(tvCancel)) {\n\t\t\tcancelAndFinish();\n\t\t} else if (v.equals(tvShare)) {\n\t\t\tsp.setText(etContent.getText().toString().trim());\n\t\t\tshareAndFinish();\n\t\t} else if (v.equals(aivThumb)) {\n\t\t\tshowThumb(thumb);\n\t\t} else if (v.equals(xvRemove)) {\n\t\t\tmaxBodyHeight = 0;\n\t\t\trlThumb.setVisibility(View.GONE);\n\t\t\tllPage.measure(0, 0);\n\t\t\tonTextChanged(etContent.getText(), 0, 0, 0);\n\t\t\tremoveThumb();\n\t\t} else if (v.equals(tvAt)) {\n\t\t\tshowFriendList();\n\t\t}\n\t}\n\n\tpublic void onTextChanged(CharSequence s, int start, int before, int count) {\n\t\ttvTextCouter.setText(String.valueOf(s.length()));\n\n\t\tif (maxBodyHeight == 0) {\n\t\t\tmaxBodyHeight = llPage.getHeight() - rlTitle.getHeight() - llBottom.getHeight();\n\t\t}\n\n\t\tif (maxBodyHeight > 0) {\n\t\t\tsvContent.post(this);\n\t\t}\n\t}\n\n\t/** 动态适配编辑界面的高度 */\n\tpublic void run() {\n\t\tint height = svContent.getChildAt(0).getHeight();\n\t\tRelativeLayout.LayoutParams lp = ResHelper.forceCast(svContent.getLayoutParams());\n\t\tif (height > maxBodyHeight && lp.height != maxBodyHeight) {\n\t\t\tlp.height = maxBodyHeight;\n\t\t\tsvContent.setLayoutParams(lp);\n\t\t} else if (height < maxBodyHeight && lp.height == maxBodyHeight) {\n\t\t\tlp.height = LayoutParams.WRAP_CONTENT;\n\t\t\tsvContent.setLayoutParams(lp);\n\t\t}\n\t}\n\n\tpublic void afterTextChanged(Editable s) {\n\n\t}\n\n\tpublic void beforeTextChanged(CharSequence s, int start, int count, int after) {\n\n\t}\n\n\tpublic void onPause() {\n\t\tDeviceHelper.getInstance(activity).hideSoftInput(getContentView());\n\t\tsuper.onPause();\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/FriendAdapter.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.graphics.drawable.ColorDrawable;\nimport android.os.Handler.Callback;\nimport android.os.Message;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.AdapterView.OnItemClickListener;\nimport android.widget.LinearLayout;\n\nimport com.mob.tools.gui.PullToRequestListAdapter;\nimport com.mob.tools.gui.PullToRequestView;\nimport com.mob.tools.utils.UIHandler;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.PlatformActionListener;\n\n/** 好友列表的适配器 */\npublic class FriendAdapter extends PullToRequestListAdapter implements PlatformActionListener {\n\tprivate FriendListPage activity;\n\tprivate boolean hasNext;\n\tprivate Platform platform;\n\t/** 请求好友列表时，每页15个 */\n\tprivate final int pageCount = 15;\n\t/** 当前的好友列表是第几页 */\n\tprivate int curPage;\n\t/** 好友列表数据 */\n\tprivate ArrayList<Following> follows;\n\t/** 判断当前的好友列表数据与请求的新数据是否有重复 */\n\tprivate HashMap<String, Boolean> map;\n\t/** 好友列表的头部View */\n\tprivate PRTHeader llHeader;\n\t/** 根据设计，按照比例来布局，以此来适配所有手机 */\n\tprivate float ratio;\n\n\tpublic FriendAdapter(FriendListPage activity, PullToRequestView view) {\n\t\tsuper(view);\n\t\tthis.activity = activity;\n\n\t\tcurPage = -1;\n\t\thasNext = true;\n\t\tmap = new HashMap<String, Boolean>();\n\t\tfollows = new ArrayList<Following>();\n\n\t\tgetListView().setDivider(new ColorDrawable(0xffeaeaea));\n\t}\n\n\tpublic void setRatio(float ratio) {\n\t\tthis.ratio = ratio;\n\t\tgetListView().setDividerHeight((int) (ratio < 1 ? 1 : ratio));\n\t}\n\n\tpublic void setOnItemClickListener(OnItemClickListener listener) {\n\t\tgetListView().setOnItemClickListener(listener);\n\t}\n\n\tpublic void setPlatform(Platform platform) {\n\t\tthis.platform = platform;\n\t\tplatform.setPlatformActionListener(this);\n\t}\n\n\tprivate void next() {\n\t\tif (hasNext) {\n\t\t\tplatform.listFriend(pageCount, curPage + 1, null);\n\t\t}\n\t}\n\n\tpublic void onComplete(Platform plat, int action, HashMap<String, Object> res) {\n\t\tfinal FollowersResult followersResult = parseFollowers(platform.getName(), res, map);\n\t\tif (followersResult == null) {\n\t\t\tUIHandler.sendEmptyMessage(0, new Callback() {\n\t\t\t\tpublic boolean handleMessage(Message msg) {\n\t\t\t\t\tnotifyDataSetChanged();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\thasNext = followersResult.hasNextPage;\n\t\tif (followersResult.list != null && followersResult.list.size() > 0) {\n\t\t\tcurPage++;\n\t\t\tMessage msg = new Message();\n\t\t\tmsg.what = 1;\n\t\t\tmsg.obj = followersResult.list;\n\t\t\tUIHandler.sendMessage(msg, new Callback() {\n\t\t\t\tpublic boolean handleMessage(Message msg) {\n\t\t\t\t\tif (curPage <= 0) {\n\t\t\t\t\t\tfollows.clear();\n\t\t\t\t\t}\n\t\t\t\t\tfollows.addAll(followersResult.list);\n\t\t\t\t\tnotifyDataSetChanged();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate FollowersResult parseFollowers(String platform, HashMap<String, Object> res, HashMap<String, Boolean> uidMap) {\n\t\tif (res == null || res.size() <= 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tboolean hasNext = false;\n\t\tArrayList<Following> data = new ArrayList<Following>();\n\t\tif (\"SinaWeibo\".equals(platform)) {\n\t\t\t// users[id, name, description]\n\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\tArrayList<HashMap<String, Object>> users = (ArrayList<HashMap<String,Object>>) res.get(\"users\");\n\t\t\tfor (HashMap<String, Object> user : users) {\n\t\t\t\tString uid = String.valueOf(user.get(\"id\"));\n\t\t\t\tif (!uidMap.containsKey(uid)) {\n\t\t\t\t\tFollowing following = new Following();\n\t\t\t\t\tfollowing.uid = uid;\n\t\t\t\t\tfollowing.screenName = String.valueOf(user.get(\"name\"));\n\t\t\t\t\tfollowing.description = String.valueOf(user.get(\"description\"));\n\t\t\t\t\tfollowing.icon = String.valueOf(user.get(\"profile_image_url\"));\n\t\t\t\t\tfollowing.atName = following.screenName;\n\t\t\t\t\tuidMap.put(following.uid, true);\n\t\t\t\t\tdata.add(following);\n\t\t\t\t}\n\t\t\t}\n\t\t\thasNext = (Integer) res.get(\"total_number\") > uidMap.size();\n\t\t} else if (\"TencentWeibo\".equals(platform)) {\n\t\t\thasNext = ((Integer)res.get(\"hasnext\") == 0);\n\t\t\t// info[nick, name, tweet[text]]\n\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\tArrayList<HashMap<String, Object>> infos = (ArrayList<HashMap<String,Object>>) res.get(\"info\");\n\t\t\tfor (HashMap<String, Object> info : infos) {\n\t\t\t\tString uid = String.valueOf(info.get(\"name\"));\n\t\t\t\tif (!uidMap.containsKey(uid)) {\n\t\t\t\t\tFollowing following = new Following();\n\t\t\t\t\tfollowing.screenName = String.valueOf(info.get(\"nick\"));\n\t\t\t\t\tfollowing.uid = uid;\n\t\t\t\t\tfollowing.atName = uid;\n\t\t\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\t\t\tArrayList<HashMap<String, Object>> tweets = (ArrayList<HashMap<String,Object>>) info.get(\"tweet\");\n\t\t\t\t\tfor (HashMap<String, Object> tweet : tweets) {\n\t\t\t\t\t\tfollowing.description = String.valueOf(tweet.get(\"text\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfollowing.icon = String.valueOf(info.get(\"head\")) + \"/100\";\n\t\t\t\t\tuidMap.put(following.uid, true);\n\t\t\t\t\tdata.add(following);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (\"Facebook\".equals(platform)) {\n\t\t\t// data[id, name]\n\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\tArrayList<HashMap<String, Object>> datas = (ArrayList<HashMap<String,Object>>) res.get(\"data\");\n\t\t\tfor (HashMap<String, Object> d : datas) {\n\t\t\t\tString uid = String.valueOf(d.get(\"id\"));\n\t\t\t\tif (!uidMap.containsKey(uid)) {\n\t\t\t\t\tFollowing following = new Following();\n\t\t\t\t\tfollowing.uid = uid;\n\t\t\t\t\tfollowing.atName = \"[\" + uid + \"]\";\n\t\t\t\t\tfollowing.screenName = String.valueOf(d.get(\"name\"));\n\t\t\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\t\t\tHashMap<String, Object> picture = (HashMap<String, Object>) d.get(\"picture\");\n\t\t\t\t\tif (picture != null) {\n\t\t\t\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\t\t\t\tHashMap<String, Object> pData = (HashMap<String, Object>) picture.get(\"data\");\n\t\t\t\t\t\tfollowing.icon = String.valueOf(pData.get(\"url\"));\n\t\t\t\t\t}\n\t\t\t\t\tuidMap.put(following.uid, true);\n\t\t\t\t\tdata.add(following);\n\t\t\t\t}\n\t\t\t}\n\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\tHashMap<String, Object> paging = (HashMap<String, Object>) res.get(\"paging\");\n\t\t\thasNext = paging.containsKey(\"next\");\n\t\t} else if (\"Twitter\".equals(platform)) {\n\t\t\t// users[screen_name, name, description]\n\t\t\t@SuppressWarnings(\"unchecked\")\n\t\t\tArrayList<HashMap<String, Object>> users = (ArrayList<HashMap<String,Object>>) res.get(\"users\");\n\t\t\tfor (HashMap<String, Object> user : users) {\n\t\t\t\tString uid = String.valueOf(user.get(\"screen_name\"));\n\t\t\t\tif (!uidMap.containsKey(uid)) {\n\t\t\t\t\tFollowing following = new Following();\n\t\t\t\t\tfollowing.uid = uid;\n\t\t\t\t\tfollowing.atName = uid;\n\t\t\t\t\tfollowing.screenName = String.valueOf(user.get(\"name\"));\n\t\t\t\t\tfollowing.description = String.valueOf(user.get(\"description\"));\n\t\t\t\t\tfollowing.icon = String.valueOf(user.get(\"profile_image_url\"));\n\t\t\t\t\tuidMap.put(following.uid, true);\n\t\t\t\t\tdata.add(following);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tFollowersResult ret = new FollowersResult();\n\t\tret.list = data;\n\t\tret.hasNextPage = hasNext;\n\t\treturn ret;\n\t}\n\n\tpublic void onError(Platform plat, int action, Throwable t) {\n\t\tt.printStackTrace();\n\t}\n\n\tpublic void onCancel(Platform plat, int action) {\n\t\tUIHandler.sendEmptyMessage(0, new Callback() {\n\t\t\tpublic boolean handleMessage(Message msg) {\n\t\t\t\tactivity.finish();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic Following getItem(int position) {\n\t\treturn follows.get(position);\n\t}\n\n\tpublic long getItemId(int position) {\n\t\treturn position;\n\t}\n\n\tpublic int getCount() {\n\t\treturn follows == null ? 0 : follows.size();\n\t}\n\n\tpublic View getHeaderView() {\n\t\tif (llHeader == null) {\n\t\t\tllHeader = new PRTHeader(getContext());\n\t\t}\n\t\treturn llHeader;\n\t}\n\n\tpublic void onPullDown(int percent) {\n\t\tllHeader.onPullDown(percent);\n\t}\n\n\tpublic void onRefresh() {\n\t\tllHeader.onRequest();\n\t\tcurPage = -1;\n\t\thasNext = true;\n\t\tmap.clear();\n\t\tnext();\n\t}\n\n\tpublic void onReversed() {\n\t\tllHeader.reverse();\n\t}\n\n\tpublic View getView(int position, View convertView, ViewGroup parent) {\n\t\tif (convertView == null) {\n\t\t\tFriendListItem llItem = new FriendListItem(parent.getContext(), ratio);\n\t\t\tconvertView = llItem;\n\t\t}\n\t\tFriendListItem llItem = (FriendListItem) convertView;\n\t\tllItem.update(getItem(position), isFling());\n\n\t\tif (position == getCount() - 1) {\n\t\t\tnext();\n\t\t}\n\t\treturn convertView;\n\t}\n\n\tpublic static class Following {\n\t\tpublic boolean checked;\n\t\tpublic String screenName;\n\t\tpublic String description;\n\t\tpublic String uid;\n\t\tpublic String icon;\n\t\t//@Name 用于微博等提示或关联某个人\n\t\tpublic String atName;\n\t}\n\n\tprivate static class FollowersResult {\n\t\tpublic ArrayList<Following> list;\n\t\tpublic boolean hasNextPage = false;\n\t}\n\n\tpublic View getFooterView() {\n\t\tLinearLayout footerView = new LinearLayout(getContext());\n\t\tfooterView.setMinimumHeight(10);\n\t\treturn footerView;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/FriendListItem.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.mob.tools.gui.AsyncImageView;\nimport com.mob.tools.gui.BitmapProcessor;\nimport com.mob.tools.utils.ResHelper;\n\nimport cn.sharesdk.onekeyshare.themes.classic.FriendAdapter.Following;\n\n/** 好友列表的item */\npublic class FriendListItem extends LinearLayout {\n\tprivate static final int DESIGN_AVATAR_WIDTH = 64;\n\tprivate static final int DESIGN_AVATAR_PADDING = 24;\n\tprivate static final int DESIGN_ITEM_HEIGHT = 96;\n\tprivate static final int DESIGN_ITEM_PADDING = 20;\n\n\tprivate ImageView ivCheck;\n\tprivate AsyncImageView aivIcon;\n\tprivate TextView tvName;\n\t/** 好友列表中，被选中的checkbox图标 */\n\tprivate Bitmap bmChd;\n\t/** 好友列表中，没选中的checkbox图标 */\n\tprivate Bitmap bmUnch;\n\n\tpublic FriendListItem(Context context, float ratio) {\n\t\tsuper(context);\n\t\tint itemPadding = (int) (ratio * DESIGN_ITEM_PADDING);\n\t\tsetPadding(itemPadding, 0, itemPadding, 0);\n\t\tsetMinimumHeight((int) (ratio * DESIGN_ITEM_HEIGHT));\n\t\tsetBackgroundColor(0xffffffff);\n\n\t\tivCheck = new ImageView(context);\n\t\tLayoutParams lp = new LayoutParams(\n\t\t\t\tLayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n\t\tlp.gravity = Gravity.CENTER_VERTICAL;\n\t\taddView(ivCheck, lp);\n\n\t\taivIcon = new AsyncImageView(context);\n\t\tint avatarWidth = (int) (ratio * DESIGN_AVATAR_WIDTH);\n\t\tlp = new LayoutParams(avatarWidth, avatarWidth);\n\t\tlp.gravity = Gravity.CENTER_VERTICAL;\n\t\tint avatarMargin = (int) (ratio * DESIGN_AVATAR_PADDING);\n\t\tlp.setMargins(avatarMargin, 0, avatarMargin, 0);\n\t\taddView(aivIcon, lp);\n\n\t\ttvName = new TextView(context);\n\t\ttvName.setTextColor(0xff000000);\n\t\ttvName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvName.setSingleLine();\n\t\tlp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n\t\tlp.gravity = Gravity.CENTER_VERTICAL;\n\t\tlp.weight = 1;\n\t\taddView(tvName, lp);\n\n\t\tint resId = ResHelper.getBitmapRes(context, \"ssdk_oks_classic_check_checked\");\n\t\tif (resId > 0) {\n\t\t\tbmChd = BitmapFactory.decodeResource(context.getResources(), resId);\n\t\t}\n\t\tresId = ResHelper.getBitmapRes(getContext(), \"ssdk_oks_classic_check_default\");\n\t\tif (resId > 0) {\n\t\t\tbmUnch = BitmapFactory.decodeResource(context.getResources(), resId);\n\t\t}\n\t}\n\n\tpublic void update(Following following, boolean fling) {\n\t\ttvName.setText(following.screenName);\n\t\tivCheck.setImageBitmap(following.checked ? bmChd : bmUnch);\n\t\tif (aivIcon != null) {\n\t\t\tif (fling) {\n\t\t\t\tBitmap bm = BitmapProcessor.getBitmapFromCache(following.icon);\n\t\t\t\tif (bm != null && !bm.isRecycled()) {\n\t\t\t\t\taivIcon.setImageBitmap(bm);\n\t\t\t\t} else {\n\t\t\t\t\taivIcon.execute(null, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taivIcon.execute(following.icon, 0);\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/FriendListPage.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.graphics.drawable.ColorDrawable;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup.LayoutParams;\nimport android.widget.AdapterView;\nimport android.widget.AdapterView.OnItemClickListener;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport com.mob.tools.gui.PullToRequestView;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.onekeyshare.OnekeySharePage;\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.FriendAdapter.Following;\n\n/** 编辑界面，@好友时，弹出的好友列表 */\npublic abstract class FriendListPage extends OnekeySharePage implements OnClickListener, OnItemClickListener {\n\tprivate static final int DESIGN_LEFT_PADDING = 40;\n\n\tprivate Platform platform;\n\tprivate LinearLayout llPage;\n\tprivate RelativeLayout rlTitle;\n\tprivate TextView tvCancel;\n\tprivate TextView tvConfirm;\n\tprivate FriendAdapter adapter;\n\tprivate int lastPosition = -1;\n\t/** 展示好友列表时，已选择要‘@’的好友个数 */\n\tprivate int checkNum = 0;\n\n\tpublic FriendListPage(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tpublic void setPlatform(Platform platform) {\n\t\tthis.platform = platform;\n\t}\n\n\tpublic void onCreate() {\n\t\tactivity.getWindow().setBackgroundDrawable(new ColorDrawable(0xfff3f3f3));\n\n\t\tllPage = new LinearLayout(activity);\n\t\tllPage.setOrientation(LinearLayout.VERTICAL);\n\t\tactivity.setContentView(llPage);\n\n\t\trlTitle = new RelativeLayout(activity);\n\t\tfloat ratio = getRatio();\n\t\tint titleHeight = (int) (getDesignTitleHeight() * ratio);\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(\n\t\t\t\tLayoutParams.MATCH_PARENT, titleHeight);\n\t\tllPage.addView(rlTitle, lp);\n\t\tinitTitle(rlTitle, ratio);\n\n\t\tView line = new View(activity);\n\t\tLinearLayout.LayoutParams lpline = new LinearLayout.LayoutParams(\n\t\t\t\tLayoutParams.MATCH_PARENT, (int) (ratio < 1 ? 1 : ratio));\n\t\tline.setBackgroundColor(0xffdad9d9);\n\t\tllPage.addView(line, lpline);\n\n\t\tFrameLayout flPage = new FrameLayout(getContext());\n\t\tLinearLayout.LayoutParams lpFl = new LinearLayout.LayoutParams(\n\t\t\t\tLayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tlpFl.weight = 1;\n\t\tflPage.setLayoutParams(lpFl);\n\t\tllPage.addView(flPage);\n\n\t\t// 关注（或朋友）列表\n\t\tPullToRequestView followList = new PullToRequestView(getContext());\n\t\tFrameLayout.LayoutParams lpLv = new FrameLayout.LayoutParams(\n\t\t\t\tLayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);\n\t\tfollowList.setLayoutParams(lpLv);\n\t\tflPage.addView(followList);\n\n\t\tadapter = new FriendAdapter(this, followList);\n\t\tadapter.setPlatform(platform);\n\t\tadapter.setRatio(ratio);\n\t\tadapter.setOnItemClickListener(this);\n\t\tfollowList.setAdapter(adapter);\n\n\t\t// 请求数据\n\t\tfollowList.performPullingDown(true);\n\t}\n\n\tprotected abstract float getRatio();\n\n\tprotected abstract int getDesignTitleHeight();\n\n\tprivate void initTitle(RelativeLayout rlTitle, float ratio) {\n\t\ttvCancel = new TextView(activity);\n\t\ttvCancel.setTextColor(0xff3b3b3b);\n\t\ttvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvCancel.setGravity(Gravity.CENTER);\n\t\tint resId = ResHelper.getStringRes(activity, \"ssdk_oks_cancel\");\n\t\tif (resId > 0) {\n\t\t\ttvCancel.setText(resId);\n\t\t}\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\ttvCancel.setPadding(padding, 0, padding, 0);\n\t\tRelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\trlTitle.addView(tvCancel, lp);\n\t\ttvCancel.setOnClickListener(this);\n\n\t\tTextView tvTitle = new TextView(activity);\n\t\ttvTitle.setTextColor(0xff3b3b3b);\n\t\ttvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);\n\t\ttvTitle.setGravity(Gravity.CENTER);\n\t\tresId = ResHelper.getStringRes(activity, \"ssdk_oks_contacts\");\n\t\tif (resId > 0) {\n\t\t\ttvTitle.setText(resId);\n\t\t}\n\t\tlp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.addRule(RelativeLayout.CENTER_IN_PARENT);\n\t\trlTitle.addView(tvTitle, lp);\n\n\t\ttvConfirm = new TextView(activity);\n\t\ttvConfirm.setTextColor(0xffff6d11);\n\t\ttvConfirm.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvConfirm.setGravity(Gravity.CENTER);\n\t\tresId = ResHelper.getStringRes(activity, \"ssdk_oks_confirm\");\n\t\tif (resId > 0) {\n\t\t\ttvConfirm.setText(resId);\n\t\t}\n\t\ttvConfirm.setPadding(padding, 0, padding, 0);\n\t\tlp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);\n\t\trlTitle.addView(tvConfirm, lp);\n\t\ttvConfirm.setOnClickListener(this);\n\t}\n\n\tpublic void onClick(View v) {\n\t\tif (v.equals(tvCancel)) {\n\t\t\tfinish();\n\t\t} else {\n\t\t\tArrayList<String> selected = new ArrayList<String>();\n\t\t\tfor (int i = 0, size = adapter.getCount(); i < size; i++) {\n\t\t\t\tif (adapter.getItem(i).checked) {\n\t\t\t\t\tselected.add(adapter.getItem(i).atName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tHashMap<String, Object> res = new HashMap<String, Object>();\n\t\t\tres.put(\"selected\", selected);\n\t\t\tres.put(\"platform\", platform);\n\t\t\tsetResult(res);\n\t\t\tfinish();\n\t\t}\n\t}\n\n\tpublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {\n\t\tif (\"FacebookMessenger\".equals(platform.getName())) {\n\t\t\tif(lastPosition >= 0) {\n\t\t\t\tFollowing lastFollwing = adapter.getItem(lastPosition);\n\t\t\t\tlastFollwing.checked = false;\n\t\t\t}\n\t\t\tlastPosition = position;\n\t\t}\n\t\tFollowing following = adapter.getItem(position);\n\t\tfollowing.checked = !following.checked;\n\n\t\tif(following.checked) {\n\t\t\tcheckNum++;\n\t\t} else {\n\t\t\tcheckNum--;\n\t\t}\n\n\t\tupdateConfirmView();\n\t\tadapter.notifyDataSetChanged();\n\t}\n\n\tprivate void updateConfirmView() {\n\t\tint resId = ResHelper.getStringRes(activity, \"ssdk_oks_confirm\");\n\t\tString confirm = \"Confirm\";\n\t\tif(resId > 0) {\n\t\t\tconfirm = getContext().getResources().getString(resId);\n\t\t}\n\t\tif(checkNum == 0) {\n\t\t\ttvConfirm.setText(confirm);\n\t\t} else if(checkNum > 0) {\n\t\t\ttvConfirm.setText(confirm + \"(\" + checkNum + \")\");\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/IndicatorView.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.view.View;\n\n/** 九宫格滑动时，下面显示的圆圈 */\npublic class IndicatorView extends View {\n\tprivate static final int DESIGN_INDICATOR_RADIUS = 6;\n\tprivate static final int DESIGN_INDICATOR_DISTANCE = 14;\n\tprivate static final int DESIGN_BOTTOM_HEIGHT = 52;\n\t/** 九格宫有多少页数 */\n\tprivate int count;\n\t/** 当前显示的是九格宫中的第几页 */\n\tprivate int current;\n\n\tpublic IndicatorView(Context context) {\n\t\tsuper(context);\n\t}\n\n\tpublic void setScreenCount(int count) {\n\t\tthis.count = count;\n\t}\n\n\tpublic void onScreenChange(int currentScreen, int lastScreen) {\n\t\tif (currentScreen != current) {\n\t\t\tcurrent = currentScreen;\n\t\t\tpostInvalidate();\n\t\t}\n\t}\n\n\tprotected void onDraw(Canvas canvas) {\n\t\tif (count <= 1) {\n\t\t\tthis.setVisibility(View.GONE);\n\t\t\treturn;\n\t\t}\n\t\tfloat height = getHeight();\n\t\tfloat radius = height * DESIGN_INDICATOR_RADIUS / DESIGN_BOTTOM_HEIGHT;\n\t\tfloat distance = height * DESIGN_INDICATOR_DISTANCE / DESIGN_BOTTOM_HEIGHT;\n\t\tfloat windowWidth = radius * 2 * count + distance * (count - 1);\n\t\tfloat left = (getWidth() - windowWidth) / 2;\n\t\tfloat cy = height / 2;\n\n\t\tcanvas.drawColor(0xffffffff);\n\t\tPaint paint = new Paint();\n\t\tpaint.setAntiAlias(true);\n\t\tfor (int i = 0; i < count; i++) {\n\t\t\tif (i == current) {\n\t\t\t\tpaint.setColor(0xff5d71a0);\n\t\t\t} else {\n\t\t\t\tpaint.setColor(0xffafb1b7);\n\t\t\t}\n\t\t\tfloat cx = left + (radius * 2 + distance) * i;\n\t\t\tcanvas.drawCircle(cx, cy, radius, paint);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PRTHeader.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.graphics.drawable.Drawable;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.LinearLayout;\nimport android.widget.ProgressBar;\nimport android.widget.TextView;\n\nimport com.mob.tools.utils.ResHelper;\n\n/** 下拉刷新的头部控件  */\npublic class PRTHeader extends LinearLayout {\n\tprivate static final int DESIGN_SCREEN_WIDTH = 720;\n\tprivate static final int DESIGN_AVATAR_WIDTH = 64;\n\tprivate static final int DESIGN_AVATAR_PADDING = 24;\n\n\tprivate TextView tvHeader;\n\tprivate RotateImageView ivArrow;\n\tprivate ProgressBar pbRefreshing;\n\n\tpublic PRTHeader(Context context) {\n\t\tsuper(context);\n\t\tint[] size = ResHelper.getScreenSize(context);\n\t\tfloat screenWidth = size[0] < size[1] ? size[0] : size[1];\n\t\tfloat ratio = screenWidth / DESIGN_SCREEN_WIDTH;\n\n\t\tsetOrientation(VERTICAL);\n\n\t\tLinearLayout llInner = new LinearLayout(context);\n\t\tLayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n\t\tlp.gravity = Gravity.CENTER_HORIZONTAL;\n\t\taddView(llInner, lp);\n\n\t\tivArrow = new RotateImageView(context);\n\t\tint resId = ResHelper.getBitmapRes(context, \"ssdk_oks_ptr_ptr\");\n\t\tif (resId > 0) {\n\t\t\tivArrow.setImageResource(resId);\n\t\t}\n\t\tint avatarWidth = (int) (ratio * DESIGN_AVATAR_WIDTH);\n\t\tlp = new LayoutParams(avatarWidth, avatarWidth);\n\t\tlp.gravity = Gravity.CENTER_VERTICAL;\n\t\tint avataPadding = (int) (ratio * DESIGN_AVATAR_PADDING);\n\t\tlp.topMargin = lp.bottomMargin = avataPadding;\n\t\tllInner.addView(ivArrow, lp);\n\n\t\tpbRefreshing = new ProgressBar(context);\n\t\tresId = ResHelper.getBitmapRes(context, \"ssdk_oks_classic_progressbar\");\n\t\tDrawable pbdrawable = context.getResources().getDrawable(resId);\n\t\tpbRefreshing.setIndeterminateDrawable(pbdrawable);\n\t\tllInner.addView(pbRefreshing, lp);\n\t\tpbRefreshing.setVisibility(View.GONE);\n\n\t\ttvHeader = new TextView(getContext());\n\t\ttvHeader.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvHeader.setPadding(avataPadding, 0, avataPadding, 0);\n\t\ttvHeader.setTextColor(0xff09bb07);\n\t\tlp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n\t\tlp.gravity = Gravity.CENTER_VERTICAL;\n\t\tllInner.addView(tvHeader, lp);\n\t}\n\n\tpublic void onPullDown(int percent) {\n\t\tif (percent > 100) {\n\t\t\tint degree = (percent - 100) * 180 / 20;\n\t\t\tif (degree > 180) {\n\t\t\t\tdegree = 180;\n\t\t\t}\n\t\t\tif (degree < 0) {\n\t\t\t\tdegree = 0;\n\t\t\t}\n\t\t\tivArrow.setRotation(degree);\n\t\t} else {\n\t\t\tivArrow.setRotation(0);\n\t\t}\n\n\t\tif (percent < 100) {\n\t\t\tint resId = ResHelper.getStringRes(getContext(), \"ssdk_oks_pull_to_refresh\");\n\t\t\tif (resId > 0) {\n\t\t\t\ttvHeader.setText(resId);\n\t\t\t}\n\t\t} else {\n\t\t\tint resId = ResHelper.getStringRes(getContext(), \"ssdk_oks_release_to_refresh\");\n\t\t\tif (resId > 0) {\n\t\t\t\ttvHeader.setText(resId);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic void onRequest() {\n\t\tivArrow.setVisibility(View.GONE);\n\t\tpbRefreshing.setVisibility(View.VISIBLE);\n\t\tint resId = ResHelper.getStringRes(getContext(), \"ssdk_oks_refreshing\");\n\t\tif (resId > 0) {\n\t\t\ttvHeader.setText(resId);\n\t\t}\n\t}\n\n\tpublic void reverse() {\n\t\tpbRefreshing.setVisibility(View.GONE);\n\t\tivArrow.setRotation(180);\n\t\tivArrow.setVisibility(View.VISIBLE);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PicViewerPage.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.graphics.Bitmap;\nimport android.graphics.drawable.ColorDrawable;\nimport android.view.ViewTreeObserver.OnGlobalLayoutListener;\nimport android.widget.ImageView.ScaleType;\n\nimport com.mob.tools.gui.ScaledImageView;\n\nimport cn.sharesdk.onekeyshare.OnekeySharePage;\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\n\n/** 图片浏览的视图类 */\npublic class PicViewerPage extends OnekeySharePage implements OnGlobalLayoutListener {\n\tprivate Bitmap pic;\n\t/** 图片浏览的缩放控件 */\n\tprivate ScaledImageView sivViewer;\n\n\tpublic PicViewerPage(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\t/** 设置图片用于浏览 */\n\tpublic void setImageBitmap(Bitmap pic) {\n\t\tthis.pic = pic;\n\t}\n\n\tpublic void onCreate() {\n\t\tactivity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000));\n\n\t\tsivViewer = new ScaledImageView(activity);\n\t\tsivViewer.setScaleType(ScaleType.MATRIX);\n\t\tactivity.setContentView(sivViewer);\n\t\tif (pic != null) {\n\t\t\tsivViewer.getViewTreeObserver().addOnGlobalLayoutListener(this);\n\t\t}\n\t}\n\n\tpublic void onGlobalLayout() {\n\t\tsivViewer.getViewTreeObserver().removeGlobalOnLayoutListener(this);\n\t\tsivViewer.post(new Runnable() {\n\t\t\tpublic void run() {\n\t\t\t\tsivViewer.setBitmap(pic);\n\t\t\t}\n\t\t});\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PlatformPage.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.graphics.drawable.ColorDrawable;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup.LayoutParams;\nimport android.view.animation.Animation;\nimport android.view.animation.TranslateAnimation;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.mob.tools.gui.MobViewPager;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n\nimport cn.sharesdk.framework.CustomPlatform;\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.framework.Platform.ShareParams;\nimport cn.sharesdk.framework.ShareSDK;\nimport cn.sharesdk.onekeyshare.CustomerLogo;\nimport cn.sharesdk.onekeyshare.OnekeySharePage;\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\n\n/** 九宫格的抽象类 */\npublic abstract class PlatformPage extends OnekeySharePage {\n\tprivate ClassicTheme impl;\n\t/** 点击九格宫，展示编辑界面，要执行的子线程 */\n\tprivate Runnable beforeFinish;\n\t/** 九宫格显示时的动画 */\n\tprivate Animation animShow;\n\t/** 九宫格隐藏时的动画 */\n\tprivate Animation animHide;\n\tprivate LinearLayout llPanel;\n\tprivate boolean finished;\n\n\tpublic PlatformPage(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t\tthis.impl = ResHelper.forceCast(impl);\n\t}\n\n\tpublic void onCreate() {\n\t\tactivity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000));\n\t\tinitAnims();\n\n\t\tLinearLayout llPage = new LinearLayout(activity);\n\t\tllPage.setOrientation(LinearLayout.VERTICAL);\n\t\tactivity.setContentView(llPage);\n\n\t\tTextView vTop = new TextView(activity);\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(\n\t\t\t\tLayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tlp.weight = 1;\n\t\tvTop.setOnClickListener(new OnClickListener() {\n\t\t\tpublic void onClick(View v) {\n\t\t\t\tfinish();\n\t\t\t}\n\t\t});\n\t\tllPage.addView(vTop, lp);\n\n\t\tllPanel = new LinearLayout(activity);\n\t\tllPanel.setOrientation(LinearLayout.VERTICAL);\n\t\tlp = new LinearLayout.LayoutParams(\n\t\t\t\tLayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tllPanel.setAnimation(animShow);\n\t\tllPage.addView(llPanel, lp);\n\n\t\tMobViewPager mvp = new MobViewPager(activity);\n\t\tArrayList<Object> cells = collectCells();\n\t\tPlatformPageAdapter adapter = newAdapter(cells);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getPanelHeight());\n\t\tllPanel.addView(mvp, lp);\n\n\t\tIndicatorView vInd = new IndicatorView(activity);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getBottomHeight());\n\t\tllPanel.addView(vInd, lp);\n\n\t\tvInd.setScreenCount(adapter.getCount());\n\t\tvInd.onScreenChange(0, 0);\n\t\tadapter.setIndicator(vInd);\n\t\tmvp.setAdapter(adapter);\n\t}\n\n\tprotected abstract PlatformPageAdapter newAdapter(ArrayList<Object> cells);\n\n\tprotected ArrayList<Object> collectCells() {\n\t\tArrayList<Object> cells = new ArrayList<Object>();\n\n\t\tPlatform[] platforms = ShareSDK.getPlatformList();\n\t\tif (platforms == null) {\n\t\t\tplatforms = new Platform[0];\n\t\t}\n\t\tHashMap<String, String> hides = getHiddenPlatforms();\n\t\tif (hides == null) {\n\t\t\thides = new HashMap<String, String>();\n\t\t}\n\t\tfor (Platform p : platforms) {\n\t\t\tif (!hides.containsKey(p.getName())) {\n\t\t\t\tcells.add(p);\n\t\t\t}\n\t\t}\n\n\t\tArrayList<CustomerLogo> customers = getCustomerLogos();\n\t\tif (customers != null && customers.size() > 0) {\n\t\t\tcells.addAll(customers);\n\t\t}\n\n\t\treturn cells;\n\t}\n\n\tpublic final void showEditPage(final Platform platform) {\n\t\tbeforeFinish = new Runnable() {\n\t\t\tpublic void run() {\n\t\t\t\tboolean isSilent = isSilent();\n\t\t\t\tboolean isCustomPlatform = platform instanceof CustomPlatform;\n\t\t\t\tboolean isUseClientToShare = isUseClientToShare(platform);\n\t\t\t\tif (isSilent || isCustomPlatform || isUseClientToShare) {\n\t\t\t\t\tshareSilently(platform);\n\t\t\t\t} else {\n\t\t\t\t\tShareParams sp = formateShareData(platform);\n\t\t\t\t\tif (sp != null) {\n\t\t\t\t\t\t// 编辑分享内容的统计\n\t\t\t\t\t\tShareSDK.logDemoEvent(3, null);\n\t\t\t\t\t\tif (getCustomizeCallback() != null) {\n\t\t\t\t\t\t\tgetCustomizeCallback().onShare(platform, sp);\n\t\t\t\t\t\t}\n\t\t\t\t\t\timpl.showEditPage(activity, platform, sp);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tfinish();\n\t}\n\n\tpublic final void performCustomLogoClick(final View v, final CustomerLogo logo) {\n\t\tbeforeFinish = new Runnable() {\n\t\t\tpublic void run() {\n\t\t\t\tlogo.listener.onClick(v);\n\t\t\t}\n\t\t};\n\t\tfinish();\n\t}\n\n\tprivate void initAnims() {\n\t\tanimShow = new TranslateAnimation(\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 0,\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 0,\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 1,\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 0);\n\t\tanimShow.setDuration(300);\n\n\t\tanimHide = new TranslateAnimation(\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 0,\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 0,\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 0,\n\t\t\t\tAnimation.RELATIVE_TO_SELF, 1);\n\t\tanimHide.setDuration(300);\n\t}\n\n\tpublic boolean onFinish() {\n\t\tif (finished) {\n\t\t\tfinished = false;\n\t\t\treturn false;\n\t\t}\n\n\t\tanimHide.setAnimationListener(new Animation.AnimationListener() {\n\t\t\tpublic void onAnimationStart(Animation animation) {\n\n\t\t\t}\n\n\t\t\tpublic void onAnimationRepeat(Animation animation) {\n\n\t\t\t}\n\n\t\t\tpublic void onAnimationEnd(Animation animation) {\n\t\t\t\tif (beforeFinish == null) {\n\t\t\t\t\t// 取消分享菜单的统计\n\t\t\t\t\tShareSDK.logDemoEvent(2, null);\n\t\t\t\t} else {\n\t\t\t\t\tbeforeFinish.run();\n\t\t\t\t\tbeforeFinish = null;\n\t\t\t\t}\n\n\t\t\t\tfinished = true;\n\t\t\t\tfinish();\n\t\t\t}\n\t\t});\n\t\tllPanel.clearAnimation();\n\t\tllPanel.setAnimation(animHide);\n\t\tllPanel.setVisibility(View.GONE);\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/PlatformPageAdapter.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup;\nimport android.view.ViewGroup.LayoutParams;\nimport android.widget.ImageView;\nimport android.widget.ImageView.ScaleType;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.mob.tools.gui.ViewPagerAdapter;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\n\nimport cn.sharesdk.framework.Platform;\nimport cn.sharesdk.onekeyshare.CustomerLogo;\n\n/** 九宫格的适配器抽象类 */\npublic abstract class PlatformPageAdapter extends ViewPagerAdapter implements OnClickListener {\n\t/** 1秒内多次点击九格宫内的图标无效 */\n\tprotected static final int MIN_CLICK_INTERVAL = 1000;\n\tpublic static final int DESIGN_BOTTOM_HEIGHT = 52;\n\n\t/** 九格宫内图标排列的二维数组，一维对应平台，二维对应页数 */\n\tprotected Object[][] cells;\n\tprivate PlatformPage page;\n\tprivate IndicatorView vInd;\n\n\tprotected int bottomHeight;\n\tprotected int panelHeight;\n\tprotected int cellHeight;\n\tprotected int lineSize;\n\tprotected int sepLineWidth;\n\tprotected int paddingTop;\n\tprotected int logoHeight;\n\n\tprivate long lastClickTime;\n\n\tpublic PlatformPageAdapter(PlatformPage page, ArrayList<Object> cells) {\n\t\tthis.page = page;\n\t\tif (cells != null && !cells.isEmpty()) {\n\t\t\tcalculateSize(page.getContext(), cells);\n\t\t\tcollectCells(cells);\n\t\t}\n\t}\n\n\t/** 计算九宫格的格数，行数，格高，行高，图标大小 */\n\tprotected abstract void calculateSize(Context context, ArrayList<Object> plats);\n\n\t/** 计算九宫格的格数，行数 */\n\tprotected abstract void collectCells(ArrayList<Object> plats);\n\n\tpublic int getBottomHeight() {\n\t\treturn bottomHeight;\n\t}\n\n\tpublic int getPanelHeight() {\n\t\treturn panelHeight;\n\t}\n\n\tpublic int getCount() {\n\t\treturn cells == null ? 0 : cells.length;\n\t}\n\n\tpublic void setIndicator(IndicatorView view) {\n\t\tvInd = view;\n\t}\n\n\tpublic void onScreenChange(int currentScreen, int lastScreen) {\n\t\tif (vInd != null) {\n\t\t\tvInd.setScreenCount(getCount());\n\t\t\tvInd.onScreenChange(currentScreen, lastScreen);\n\t\t}\n\t}\n\n\tpublic View getView(int index, View convertView, ViewGroup parent) {\n\t\tif (convertView == null) {\n\t\t\tconvertView = createPanel(parent.getContext());\n\t\t}\n\n\t\tLinearLayout llPanel = ResHelper.forceCast(convertView);\n\t\tLinearLayout[] llCells = ResHelper.forceCast(llPanel.getTag());\n\t\trefreshPanel(llCells, cells[index]);\n\t\treturn convertView;\n\t}\n\n\tprivate View createPanel(Context context) {\n\t\tLinearLayout llPanel = new LinearLayout(context);\n\t\tllPanel.setOrientation(LinearLayout.VERTICAL);\n\t\tllPanel.setBackgroundColor(0xfff2f2f2);\n\n\t\tint lineCount = panelHeight / cellHeight;\n\t\tLinearLayout[] llCells = new LinearLayout[lineCount * lineSize];\n\t\tllPanel.setTag(llCells);\n\t\tint cellBack = ResHelper.getBitmapRes(context, \"ssdk_oks_classic_platform_cell_back\");\n\t\tLinearLayout.LayoutParams lp;\n\t\tfor (int i = 0; i < lineCount; i++) {\n\t\t\tLinearLayout llLine = new LinearLayout(context);\n\t\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, cellHeight);\n\t\t\tllPanel.addView(llLine, lp);\n\n\t\t\tfor (int j = 0; j < lineSize; j++) {\n\t\t\t\tllCells[i * lineSize + j] = new LinearLayout(context);\n\t\t\t\tllCells[i * lineSize + j].setBackgroundResource(cellBack);\n\t\t\t\tllCells[i * lineSize + j].setOrientation(LinearLayout.VERTICAL);\n\t\t\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, cellHeight);\n\t\t\t\tlp.weight = 1;\n\t\t\t\tllLine.addView(llCells[i * lineSize + j], lp);\n\n\t\t\t\tif (j < lineSize - 1) {\n\t\t\t\t\tView vSep = new View(context);\n\t\t\t\t\tlp = new LinearLayout.LayoutParams(sepLineWidth, LayoutParams.MATCH_PARENT);\n\t\t\t\t\tllLine.addView(vSep, lp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tView vSep = new View(context);\n\t\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, sepLineWidth);\n\t\t\tllPanel.addView(vSep, lp);\n\t\t}\n\n\t\tfor (LinearLayout llCell : llCells) {\n\t\t\tImageView ivLogo = new ImageView(context);\n\t\t\tivLogo.setScaleType(ScaleType.CENTER_INSIDE);\n\t\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, logoHeight);\n\t\t\tlp.topMargin = paddingTop;\n\t\t\tllCell.addView(ivLogo, lp);\n\n\t\t\tTextView tvName = new TextView(context);\n\t\t\ttvName.setTextColor(0xff646464);\n\t\t\ttvName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);\n\t\t\ttvName.setGravity(Gravity.CENTER);\n\t\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\t\tlp.weight = 1;\n\t\t\tllCell.addView(tvName, lp);\n\t\t}\n\n\t\treturn llPanel;\n\t}\n\n\tprivate void refreshPanel(LinearLayout[] llCells, Object[] logos) {\n\t\tint cellBack = ResHelper.getBitmapRes(page.getContext(), \"ssdk_oks_classic_platform_cell_back\");\n\t\tint disableBack = ResHelper.getBitmapRes(page.getContext(), \"ssdk_oks_classic_platfrom_cell_back_nor\");\n\t\tfor (int i = 0; i < logos.length; i++) {\n\t\t\tImageView ivLogo = ResHelper.forceCast(llCells[i].getChildAt(0));\n\t\t\tTextView tvName = ResHelper.forceCast(llCells[i].getChildAt(1));\n\t\t\tif (logos[i] == null) {\n\t\t\t\tivLogo.setVisibility(View.INVISIBLE);\n\t\t\t\ttvName.setVisibility(View.INVISIBLE);\n\t\t\t\tllCells[i].setBackgroundResource(disableBack);\n\t\t\t\tllCells[i].setOnClickListener(null);\n\t\t\t} else {\n\t\t\t\tivLogo.setVisibility(View.VISIBLE);\n\t\t\t\ttvName.setVisibility(View.VISIBLE);\n\t\t\t\tivLogo.requestLayout();\n\t\t\t\ttvName.requestLayout();\n\t\t\t\tllCells[i].setBackgroundResource(cellBack);\n\t\t\t\tllCells[i].setOnClickListener(this);\n\t\t\t\tllCells[i].setTag(logos[i]);\n\n\t\t\t\tif (logos[i] instanceof CustomerLogo) {\n\t\t\t\t\tCustomerLogo logo = ResHelper.forceCast(logos[i]);\n\t\t\t\t\tif (logo.logo != null) {\n\t\t\t\t\t\tivLogo.setImageBitmap(logo.logo);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tivLogo.setImageBitmap(null);\n\t\t\t\t\t}\n\t\t\t\t\tif (logo.label != null) {\n\t\t\t\t\t\ttvName.setText(logo.label);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttvName.setText(\"\");\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tPlatform plat = ResHelper.forceCast(logos[i]);\n\t\t\t\t\tString name = plat.getName().toLowerCase();\n\t\t\t\t\tint resId = ResHelper.getBitmapRes(ivLogo.getContext(),\"ssdk_oks_classic_\" + name);\n\t\t\t\t\tif (resId > 0) {\n\t\t\t\t\t\tivLogo.setImageResource(resId);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tivLogo.setImageBitmap(null);\n\t\t\t\t\t}\n\t\t\t\t\tresId = ResHelper.getStringRes(tvName.getContext(), \"ssdk_\" + name);\n\t\t\t\t\tif (resId > 0) {\n\t\t\t\t\t\ttvName.setText(resId);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttvName.setText(\"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic void onClick(View v) {\n\t\tlong time = System.currentTimeMillis();\n\t\tif (time - lastClickTime < MIN_CLICK_INTERVAL) {\n\t\t\treturn;\n\t\t}\n\t\tlastClickTime = time;\n\n\t\tif (v.getTag() instanceof CustomerLogo) {\n\t\t\tCustomerLogo logo = ResHelper.forceCast(v.getTag());\n\t\t\tpage.performCustomLogoClick(v, logo);\n\t\t} else {\n\t\t\tPlatform plat = ResHelper.forceCast(v.getTag());\n\t\t\tpage.showEditPage(plat);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/RotateImageView.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.widget.ImageView;\n\n/** 在At好友页面中，下拉刷新列表头部的旋转箭头 */\npublic class RotateImageView extends ImageView {\n\tprivate float rotation;\n\n\tpublic RotateImageView(Context context) {\n\t\tsuper(context);\n\t}\n\n\tpublic void setRotation(float rotation) {\n\t\tthis.rotation = rotation;\n\t\tinvalidate();\n\t}\n\n\tprotected void onDraw(Canvas canvas) {\n\t\tcanvas.rotate(rotation, getWidth() / 2, getHeight() / 2);\n\t\tsuper.onDraw(canvas);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/XView.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.view.View;\n\n/** 编辑页面中删除图片“X”按钮 */\npublic class XView extends View {\n\tprivate float ratio;\n\n\tpublic XView(Context context) {\n\t\tsuper(context);\n\t}\n\n\tpublic void setRatio(float ratio) {\n\t\tthis.ratio = ratio;\n\t}\n\n\tprotected void onDraw(Canvas canvas) {\n\t\tint width = getWidth() / 2;\n\t\tint height = getHeight() / 2;\n\n\t\tPaint paint = new Paint();\n\t\tpaint.setAntiAlias(true);\n\t\tpaint.setColor(0xffa0a0a0);\n\t\tcanvas.drawRect(width, 0, getWidth(), height, paint);\n\n\t\tpaint = new Paint();\n\t\tpaint.setAntiAlias(true);\n\t\tpaint.setStrokeWidth(3f * ratio);\n\t\tpaint.setColor(0xffffffff);\n\t\tfloat left = 8f * ratio;\n\t\tcanvas.drawLine(width + left, left, getWidth() - left, width - left, paint);\n\t\tcanvas.drawLine(width + left, width - left, getWidth() - left, left, paint);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/EditPageLand.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.land;\n\nimport android.graphics.Bitmap;\nimport android.text.TextUtils;\nimport android.text.TextWatcher;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup.LayoutParams;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.ScrollView;\nimport android.widget.TextView;\n\nimport com.mob.tools.gui.AsyncImageView;\nimport com.mob.tools.utils.BitmapHelper;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.io.File;\n\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.EditPage;\nimport cn.sharesdk.onekeyshare.themes.classic.XView;\n\n/** 横屏的编辑页 */\npublic class EditPageLand extends EditPage implements OnClickListener, TextWatcher, Runnable {\n\tprivate static final int DESIGN_SCREEN_WIDTH= 720;\n\tprivate static final int DESIGN_BOTTOM_HEIGHT = 75;\n\tprivate static final int DESIGN_LEFT_PADDING = 40;\n\tprivate static final int DESIGN_TITLE_HEIGHT_L = 70;\n\tprivate static final int DESIGN_THUMB_HEIGHT_L = 280;\n\tprivate static final int DESIGN_REMOVE_THUMB_HEIGHT_L = 60;\n\n\tpublic EditPageLand(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tpublic void onCreate() {\n\t\tsuper.onCreate();\n\n\t\tint screenHeight = ResHelper.getScreenHeight(activity);\n\t\tfloat ratio = ((float) screenHeight) / DESIGN_SCREEN_WIDTH;\n\n\t\tmaxBodyHeight = 0;\n\n\t\tllPage = new LinearLayout(activity);\n\t\tllPage.setOrientation(LinearLayout.VERTICAL);\n\t\tactivity.setContentView(llPage);\n\n\t\trlTitle = new RelativeLayout(activity);\n\t\trlTitle.setBackgroundColor(0xffe6e9ec);\n\t\tint titleHeight = (int) (DESIGN_TITLE_HEIGHT_L * ratio);\n\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, titleHeight);\n\t\tllPage.addView(rlTitle, lp);\n\t\tinitTitle(rlTitle, ratio);\n\n\t\tRelativeLayout rlBody = new RelativeLayout(activity);\n\t\trlBody.setBackgroundColor(0xffffffff);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tllPage.addView(rlBody, lp);\n\t\tinitBody(rlBody, ratio);\n\n\t\tLinearLayout llShadow = new LinearLayout(activity);\n\t\tllShadow.setOrientation(LinearLayout.VERTICAL);\n\t\trlBody.addView(llShadow, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));\n\t\tinitShadow(llShadow, ratio);\n\n\t\tllBottom = new LinearLayout(activity);\n\t\tllBottom.setOrientation(LinearLayout.VERTICAL);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tllPage.addView(llBottom, lp);\n\t\tinitBottom(llBottom, ratio);\n\t}\n\n\tprivate void initTitle(RelativeLayout rlTitle, float ratio) {\n\t\ttvCancel = new TextView(activity);\n\t\ttvCancel.setTextColor(0xff3b3b3b);\n\t\ttvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvCancel.setGravity(Gravity.CENTER);\n\t\tint resId = ResHelper.getStringRes(activity, \"ssdk_oks_cancel\");\n\t\tif (resId > 0) {\n\t\t\ttvCancel.setText(resId);\n\t\t}\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\ttvCancel.setPadding(padding, 0, padding, 0);\n\t\tRelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\trlTitle.addView(tvCancel, lp);\n\t\ttvCancel.setOnClickListener(this);\n\n\t\tTextView tvTitle = new TextView(activity);\n\t\ttvTitle.setTextColor(0xff3b3b3b);\n\t\ttvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);\n\t\ttvTitle.setGravity(Gravity.CENTER);\n\t\tresId = ResHelper.getStringRes(activity, \"ssdk_oks_multi_share\");\n\t\tif (resId > 0) {\n\t\t\ttvTitle.setText(resId);\n\t\t}\n\t\tlp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.addRule(RelativeLayout.CENTER_IN_PARENT);\n\t\trlTitle.addView(tvTitle, lp);\n\n\t\ttvShare = new TextView(activity);\n\t\ttvShare.setTextColor(0xffff6d11);\n\t\ttvShare.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvShare.setGravity(Gravity.CENTER);\n\t\tresId = ResHelper.getStringRes(activity, \"ssdk_oks_share\");\n\t\tif (resId > 0) {\n\t\t\ttvShare.setText(resId);\n\t\t}\n\t\ttvShare.setPadding(padding, 0, padding, 0);\n\t\tlp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);\n\t\trlTitle.addView(tvShare, lp);\n\t\ttvShare.setOnClickListener(this);\n\t}\n\n\tprivate void initBody(RelativeLayout rlBody, float ratio) {\n\t\tsvContent = new ScrollView(activity);\n\t\trlBody.addView(svContent, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));\n\n\t\tLinearLayout llContent = new LinearLayout(activity);\n\t\tllContent.setOrientation(LinearLayout.HORIZONTAL);\n\t\tsvContent.addView(llContent, new ScrollView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));\n\n\t\tetContent = new EditText(activity);\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\tetContent.setPadding(padding, padding, padding, padding);\n\t\tetContent.setBackgroundDrawable(null);\n\t\tetContent.setTextColor(0xff3b3b3b);\n\t\tetContent.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21);\n\t\tetContent.setText(sp.getText());\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);\n\t\tlp.weight = 1;\n\t\tllContent.addView(etContent, lp);\n\t\tetContent.addTextChangedListener(this);\n\n\t\trlThumb = new RelativeLayout(activity);\n\t\trlThumb.setBackgroundColor(0xff313131);\n\t\tint\tthumbWidth = (int) (DESIGN_THUMB_HEIGHT_L * ratio);\n\t\tint\txWidth = (int) (DESIGN_REMOVE_THUMB_HEIGHT_L * ratio);\n\t\tlp = new LinearLayout.LayoutParams(thumbWidth, thumbWidth);\n\t\tlp.rightMargin = lp.bottomMargin = lp.topMargin = padding;\n\t\tllContent.addView(rlThumb, lp);\n\n\t\taivThumb = new AsyncImageView(activity) {\n\t\t\tpublic void onImageGot(String url, Bitmap bm) {\n\t\t\t\tthumb = bm;\n\t\t\t\tsuper.onImageGot(url, bm);\n\t\t\t}\n\t\t};\n\t\taivThumb.setScaleToCropCenter(true);\n\t\tRelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(thumbWidth, thumbWidth);\n\t\trlThumb.addView(aivThumb, rllp);\n\t\taivThumb.setOnClickListener(this);\n\t\tinitThumb(aivThumb);\n\n\t\txvRemove = new XView(activity);\n\t\txvRemove.setRatio(ratio);\n\t\trllp = new RelativeLayout.LayoutParams(xWidth, xWidth);\n\t\trllp.addRule(RelativeLayout.ALIGN_PARENT_TOP);\n\t\trllp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);\n\t\trlThumb.addView(xvRemove, rllp);\n\t\txvRemove.setOnClickListener(this);\n\t}\n\n\tprivate void initBottom(LinearLayout llBottom, float ratio) {\n\t\tLinearLayout llAt = new LinearLayout(activity);\n\t\tllAt.setPadding(0, 0, 0, 5);\n\t\tllAt.setBackgroundColor(0xffffffff);\n\t\tint bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio);\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, bottomHeight);\n\t\tllBottom.addView(llAt, lp);\n\n\t\ttvAt = new TextView(activity);\n\t\ttvAt.setTextColor(0xff3b3b3b);\n\t\ttvAt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21);\n\t\ttvAt.setGravity(Gravity.BOTTOM);\n\t\ttvAt.setText(\"@\");\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\ttvAt.setPadding(padding, 0, padding, 0);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tllAt.addView(tvAt, lp);\n\t\ttvAt.setOnClickListener(this);\n\t\tif (isShowAtUserLayout(platform.getName())) {\n\t\t\ttvAt.setVisibility(View.VISIBLE);\n\t\t} else {\n\t\t\ttvAt.setVisibility(View.INVISIBLE);\n\t\t}\n\n\t\ttvTextCouter = new TextView(activity);\n\t\ttvTextCouter.setTextColor(0xff3b3b3b);\n\t\ttvTextCouter.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvTextCouter.setGravity(Gravity.BOTTOM | Gravity.RIGHT);\n\t\tonTextChanged(etContent.getText(), 0, 0, 0);\n\t\ttvTextCouter.setPadding(padding, 0, padding, 0);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.weight = 1;\n\t\tllAt.addView(tvTextCouter, lp);\n\n\t\tView v = new View(activity);\n\t\tv.setBackgroundColor(0xffcccccc);\n\t\tint px1 = ratio > 1 ? ((int) ratio) : 1;\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1);\n\t\tllBottom.addView(v, lp);\n\t}\n\n\tprivate void initShadow(LinearLayout llShadow, float ratio) {\n\t\tint px1 = ratio > 1 ? ((int) ratio) : 1;\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1);\n\n\t\tView v = new View(activity);\n\t\tv.setBackgroundColor(0x29000000);\n\t\tllShadow.addView(v, lp);\n\n\t\tv = new View(activity);\n\t\tv.setBackgroundColor(0x14000000);\n\t\tllShadow.addView(v, lp);\n\n\t\tv = new View(activity);\n\t\tv.setBackgroundColor(0x07000000);\n\t\tllShadow.addView(v, lp);\n\t}\n\n\tprivate void initThumb(AsyncImageView aivThumb) {\n\t\tString imageUrl = sp.getImageUrl();\n\t\tString imagePath = sp.getImagePath();\n\t\tString[] imageArray = sp.getImageArray();\n\n\t\tBitmap pic = null;\n\t\trlThumb.setVisibility(View.VISIBLE);\n\t\tif(!TextUtils.isEmpty(imagePath) && new File(imagePath).exists()) {\n\t\t\ttry {\n\t\t\t\tpic = BitmapHelper.getBitmap(imagePath);\n\t\t\t} catch (Throwable e) {\n\t\t\t\te.printStackTrace();\n\t\t\t}\n\t\t}\n\n\t\tif (pic != null) {\n\t\t\tthumb = pic;\n\t\t\taivThumb.setBitmap(pic);\n\t\t} else if (imageArray != null && imageArray.length > 0) {\n\t\t\tif (!TextUtils.isEmpty(imageArray[0]) && new File(imageArray[0]).exists()) {\n\t\t\t\ttry {\n\t\t\t\t\tpic = BitmapHelper.getBitmap(imagePath);\n\t\t\t\t} catch (Throwable e) {\n\t\t\t\t\te.printStackTrace();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (pic != null) {\n\t\t\tthumb = pic;\n\t\t\taivThumb.setBitmap(pic);\n\t\t} else if (pic == null && !TextUtils.isEmpty(imageUrl)) {\n\t\t\taivThumb.execute(imageUrl, 0);\n\t\t} else {\n\t\t\trlThumb.setVisibility(View.GONE);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/FriendListPageLand.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.land;\n\nimport com.mob.tools.utils.ResHelper;\n\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.FriendListPage;\n\n/** 横屏的好友列表 */\npublic class FriendListPageLand extends FriendListPage {\n\tprivate static final int DESIGN_SCREEN_WIDTH = 1280;\n\tprivate static final int DESIGN_TITLE_HEIGHT = 70;\n\n\tpublic FriendListPageLand(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tprotected float getRatio() {\n\t\tfloat screenWidth = ResHelper.getScreenWidth(activity);\n\t\treturn screenWidth / DESIGN_SCREEN_WIDTH;\n\t}\n\n\tprotected int getDesignTitleHeight() {\n\t\treturn DESIGN_TITLE_HEIGHT;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/PlatformPageAdapterLand.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.land;\n\nimport android.content.Context;\n\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\n\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPage;\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter;\n\n/** 横屏的九宫格页面适配器 */\npublic class PlatformPageAdapterLand extends PlatformPageAdapter {\n\tprivate static final int DESIGN_SCREEN_WIDTH_L = 1280;\n\tprivate static final int DESIGN_CELL_WIDTH_L = 160;\n\tprivate static final int DESIGN_SEP_LINE_WIDTH = 1;\n\tprivate static final int DESIGN_LOGO_HEIGHT = 76;\n\tprivate static final int DESIGN_PADDING_TOP = 20;\n\n\tpublic PlatformPageAdapterLand(PlatformPage page, ArrayList<Object> cells) {\n\t\tsuper(page, cells);\n\t}\n\n\tprotected void calculateSize(Context context, ArrayList<Object> plats) {\n\t\tint screenWidth = ResHelper.getScreenWidth(context);\n\t\tfloat ratio = ((float) screenWidth) / DESIGN_SCREEN_WIDTH_L;\n\t\tint cellWidth = (int) (DESIGN_CELL_WIDTH_L * ratio);\n\t\tlineSize = screenWidth / cellWidth;\n\n\t\tsepLineWidth = (int) (DESIGN_SEP_LINE_WIDTH * ratio);\n\t\tsepLineWidth = sepLineWidth < 1 ? 1 : sepLineWidth;\n\t\tlogoHeight = (int) (DESIGN_LOGO_HEIGHT * ratio);\n\t\tpaddingTop = (int) (DESIGN_PADDING_TOP * ratio);\n\t\tbottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio);\n\t\tcellHeight = (screenWidth - sepLineWidth * 3) / (lineSize - 1);\n\t\tpanelHeight = cellHeight + sepLineWidth;\n\t}\n\n\tprotected void collectCells(ArrayList<Object> plats) {\n\t\tint count = plats.size();\n\t\tif (count < lineSize) {\n\t\t\tint lineCount = (count / lineSize);\n\t\t\tif (count % lineSize != 0) {\n\t\t\t\tlineCount++;\n\t\t\t}\n\t\t\tcells = new Object[1][lineCount * lineSize];\n\t\t} else {\n\t\t\tint pageCount = (count / lineSize);\n\t\t\tif (count % lineSize != 0) {\n\t\t\t\tpageCount++;\n\t\t\t}\n\t\t\tcells = new Object[pageCount][lineSize];\n\t\t}\n\n\t\tfor (int i = 0; i < count; i++) {\n\t\t\tint p = i / lineSize;\n\t\t\tcells[p][i - lineSize * p] = plats.get(i);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/land/PlatformPageLand.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.land;\n\nimport java.util.ArrayList;\n\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPage;\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter;\n\n/** 横屏的九宫格页面 */\npublic class PlatformPageLand extends PlatformPage {\n\n\tpublic PlatformPageLand(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tpublic void onCreate() {\n\t\trequestLandscapeOrientation();\n\t\tsuper.onCreate();\n\t}\n\n\tprotected PlatformPageAdapter newAdapter(ArrayList<Object> cells) {\n\t\treturn new PlatformPageAdapterLand(this, cells);\n\t}\n\n}\n\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/EditPagePort.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.port;\n\nimport android.graphics.Bitmap;\nimport android.text.TextUtils;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup.LayoutParams;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.ScrollView;\nimport android.widget.TextView;\n\nimport com.mob.tools.gui.AsyncImageView;\nimport com.mob.tools.utils.BitmapHelper;\nimport com.mob.tools.utils.ResHelper;\n\nimport java.io.File;\n\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.EditPage;\nimport cn.sharesdk.onekeyshare.themes.classic.XView;\n\n/** 竖屏的编辑页 */\npublic class EditPagePort extends EditPage  {\n\tprivate static final int DESIGN_SCREEN_HEIGHT= 1280;\n\tprivate static final int DESIGN_TITLE_HEIGHT = 96;\n\tprivate static final int DESIGN_BOTTOM_HEIGHT = 75;\n\tprivate static final int DESIGN_LEFT_PADDING = 40;\n\tprivate static final int DESIGN_THUMB_HEIGHT = 300;\n\tprivate static final int DESIGN_REMOVE_THUMB_HEIGHT = 70;\n\n\tpublic EditPagePort(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tpublic void onCreate() {\n\t\tsuper.onCreate();\n\n\t\tint screenHeight = ResHelper.getScreenHeight(activity);\n\t\tfloat ratio = ((float) screenHeight) / DESIGN_SCREEN_HEIGHT;\n\n\t\tmaxBodyHeight = 0;\n\n\t\tllPage = new LinearLayout(activity);\n\t\tllPage.setOrientation(LinearLayout.VERTICAL);\n\t\tactivity.setContentView(llPage);\n\n\t\trlTitle = new RelativeLayout(activity);\n\t\trlTitle.setBackgroundColor(0xffe6e9ec);\n\t\tint titleHeight = (int) (DESIGN_TITLE_HEIGHT * ratio);\n\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, titleHeight);\n\t\tllPage.addView(rlTitle, lp);\n\t\tinitTitle(rlTitle, ratio);\n\n\t\tRelativeLayout rlBody = new RelativeLayout(activity);\n\t\trlBody.setBackgroundColor(0xffffffff);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tllPage.addView(rlBody, lp);\n\t\tinitBody(rlBody, ratio);\n\n\t\tLinearLayout llShadow = new LinearLayout(activity);\n\t\tllShadow.setOrientation(LinearLayout.VERTICAL);\n\t\trlBody.addView(llShadow, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));\n\t\tinitShadow(llShadow, ratio);\n\n\t\tllBottom = new LinearLayout(activity);\n\t\tllBottom.setOrientation(LinearLayout.VERTICAL);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tllPage.addView(llBottom, lp);\n\t\tinitBottom(llBottom, ratio);\n\t}\n\n\tprivate void initTitle(RelativeLayout rlTitle, float ratio) {\n\t\ttvCancel = new TextView(activity);\n\t\ttvCancel.setTextColor(0xff3b3b3b);\n\t\ttvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvCancel.setGravity(Gravity.CENTER);\n\t\tint resId = ResHelper.getStringRes(activity, \"ssdk_oks_cancel\");\n\t\tif (resId > 0) {\n\t\t\ttvCancel.setText(resId);\n\t\t}\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\ttvCancel.setPadding(padding, 0, padding, 0);\n\t\tRelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\trlTitle.addView(tvCancel, lp);\n\t\ttvCancel.setOnClickListener(this);\n\n\t\tTextView tvTitle = new TextView(activity);\n\t\ttvTitle.setTextColor(0xff3b3b3b);\n\t\ttvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);\n\t\ttvTitle.setGravity(Gravity.CENTER);\n\t\tresId = ResHelper.getStringRes(activity, \"ssdk_oks_multi_share\");\n\t\tif (resId > 0) {\n\t\t\ttvTitle.setText(resId);\n\t\t}\n\t\tlp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.addRule(RelativeLayout.CENTER_IN_PARENT);\n\t\trlTitle.addView(tvTitle, lp);\n\n\t\ttvShare = new TextView(activity);\n\t\ttvShare.setTextColor(0xffff6d11);\n\t\ttvShare.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);\n\t\ttvShare.setGravity(Gravity.CENTER);\n\t\tresId = ResHelper.getStringRes(activity, \"ssdk_oks_share\");\n\t\tif (resId > 0) {\n\t\t\ttvShare.setText(resId);\n\t\t}\n\t\ttvShare.setPadding(padding, 0, padding, 0);\n\t\tlp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);\n\t\trlTitle.addView(tvShare, lp);\n\t\ttvShare.setOnClickListener(this);\n\t}\n\n\tprivate void initBody(RelativeLayout rlBody, float ratio) {\n\t\tsvContent = new ScrollView(activity);\n\t\trlBody.addView(svContent, new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));\n\n\t\tLinearLayout llContent = new LinearLayout(activity);\n\t\tllContent.setOrientation(LinearLayout.VERTICAL);\n\t\tsvContent.addView(llContent, new ScrollView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));\n\n\t\tetContent = new EditText(activity);\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\tetContent.setPadding(padding, padding, padding, padding);\n\t\tetContent.setBackgroundDrawable(null);\n\t\tetContent.setTextColor(0xff3b3b3b);\n\t\tetContent.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21);\n\t\tetContent.setText(sp.getText());\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n\t\tllContent.addView(etContent, lp);\n\t\tetContent.addTextChangedListener(this);\n\n\t\trlThumb = new RelativeLayout(activity);\n\t\trlThumb.setBackgroundColor(0xff313131);\n\t\tint\tthumbWidth = (int) (DESIGN_THUMB_HEIGHT * ratio);\n\t\tint\txWidth = (int) (DESIGN_REMOVE_THUMB_HEIGHT * ratio);\n\t\tlp = new LinearLayout.LayoutParams(thumbWidth, thumbWidth);\n\t\tlp.leftMargin = lp.rightMargin = lp.bottomMargin = lp.topMargin = padding;\n\t\tllContent.addView(rlThumb, lp);\n\n\t\taivThumb = new AsyncImageView(activity) {\n\t\t\tpublic void onImageGot(String url, Bitmap bm) {\n\t\t\t\tthumb = bm;\n\t\t\t\tsuper.onImageGot(url, bm);\n\t\t\t}\n\t\t};\n\t\taivThumb.setScaleToCropCenter(true);\n\t\tRelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(thumbWidth, thumbWidth);\n\t\trlThumb.addView(aivThumb, rllp);\n\t\taivThumb.setOnClickListener(this);\n\t\tinitThumb(aivThumb);\n\n\t\txvRemove = new XView(activity);\n\t\txvRemove.setRatio(ratio);\n\t\trllp = new RelativeLayout.LayoutParams(xWidth, xWidth);\n\t\trllp.addRule(RelativeLayout.ALIGN_PARENT_TOP);\n\t\trllp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);\n\t\trlThumb.addView(xvRemove, rllp);\n\t\txvRemove.setOnClickListener(this);\n\t}\n\n\tprivate void initBottom(LinearLayout llBottom, float ratio) {\n\t\tLinearLayout llAt = new LinearLayout(activity);\n\t\tllAt.setPadding(0, 0, 0, 5);\n\t\tllAt.setBackgroundColor(0xffffffff);\n\t\tint bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio);\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, bottomHeight);\n\t\tllBottom.addView(llAt, lp);\n\n\t\ttvAt = new TextView(activity);\n\t\ttvAt.setTextColor(0xff3b3b3b);\n\t\ttvAt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);\n\t\ttvAt.setGravity(Gravity.BOTTOM);\n\t\ttvAt.setText(\"@\");\n\t\tint padding = (int) (DESIGN_LEFT_PADDING * ratio);\n\t\ttvAt.setPadding(padding, 0, padding, 0);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tllAt.addView(tvAt, lp);\n\t\ttvAt.setOnClickListener(this);\n\t\tif (isShowAtUserLayout(platform.getName())) {\n\t\t\ttvAt.setVisibility(View.VISIBLE);\n\t\t} else {\n\t\t\ttvAt.setVisibility(View.INVISIBLE);\n\t\t}\n\n\t\ttvTextCouter = new TextView(activity);\n\t\ttvTextCouter.setTextColor(0xff3b3b3b);\n\t\ttvTextCouter.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21);\n\t\ttvTextCouter.setGravity(Gravity.BOTTOM | Gravity.RIGHT);\n\t\tonTextChanged(etContent.getText(), 0, 0, 0);\n\t\ttvTextCouter.setPadding(padding, 0, padding, 0);\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);\n\t\tlp.weight = 1;\n\t\tllAt.addView(tvTextCouter, lp);\n\n\t\tView v = new View(activity);\n\t\tv.setBackgroundColor(0xffcccccc);\n\t\tint px1 = ratio > 1 ? ((int) ratio) : 1;\n\t\tlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1);\n\t\tllBottom.addView(v, lp);\n\t}\n\n\tprivate void initShadow(LinearLayout llShadow, float ratio) {\n\t\tint px1 = ratio > 1 ? ((int) ratio) : 1;\n\t\tLinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, px1);\n\n\t\tView v = new View(activity);\n\t\tv.setBackgroundColor(0x29000000);\n\t\tllShadow.addView(v, lp);\n\n\t\tv = new View(activity);\n\t\tv.setBackgroundColor(0x14000000);\n\t\tllShadow.addView(v, lp);\n\n\t\tv = new View(activity);\n\t\tv.setBackgroundColor(0x07000000);\n\t\tllShadow.addView(v, lp);\n\t}\n\n\tprivate void initThumb(AsyncImageView aivThumb) {\n\t\tString imageUrl = sp.getImageUrl();\n\t\tString imagePath = sp.getImagePath();\n\t\tString[] imageArray = sp.getImageArray();\n\n\t\tBitmap pic = null;\n\t\trlThumb.setVisibility(View.VISIBLE);\n\t\tif(!TextUtils.isEmpty(imagePath) && new File(imagePath).exists()) {\n\t\t\ttry {\n\t\t\t\tpic = BitmapHelper.getBitmap(imagePath);\n\t\t\t} catch (Throwable e) {\n\t\t\t\te.printStackTrace();\n\t\t\t}\n\t\t}\n\n\t\tif (pic != null) {\n\t\t\tthumb = pic;\n\t\t\taivThumb.setBitmap(pic);\n\t\t} else if (imageArray != null && imageArray.length > 0) {\n\t\t\tif (!TextUtils.isEmpty(imageArray[0]) && new File(imageArray[0]).exists()) {\n\t\t\t\ttry {\n\t\t\t\t\tpic = BitmapHelper.getBitmap(imagePath);\n\t\t\t\t} catch (Throwable e) {\n\t\t\t\t\te.printStackTrace();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (pic != null) {\n\t\t\tthumb = pic;\n\t\t\taivThumb.setBitmap(pic);\n\t\t} else if (pic == null && !TextUtils.isEmpty(imageUrl)) {\n\t\t\taivThumb.execute(imageUrl, 0);\n\t\t} else {\n\t\t\trlThumb.setVisibility(View.GONE);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/FriendListPagePort.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.port;\n\nimport com.mob.tools.utils.ResHelper;\n\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.FriendListPage;\n\n/** 竖屏的好友列表 */\npublic class FriendListPagePort extends FriendListPage {\n\tprivate static final int DESIGN_SCREEN_WIDTH = 720;\n\tprivate static final int DESIGN_TITLE_HEIGHT = 96;\n\n\tpublic FriendListPagePort(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tprotected float getRatio() {\n\t\tfloat screenWidth = ResHelper.getScreenWidth(activity);\n\t\treturn screenWidth / DESIGN_SCREEN_WIDTH;\n\t}\n\n\tprotected int getDesignTitleHeight() {\n\t\treturn DESIGN_TITLE_HEIGHT;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/PlatformPageAdapterPort.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.port;\n\nimport android.content.Context;\n\nimport com.mob.tools.utils.ResHelper;\n\nimport java.util.ArrayList;\n\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPage;\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter;\n\n/** 竖屏的九宫格页面适配器 */\npublic class PlatformPageAdapterPort extends PlatformPageAdapter {\n\tprivate static final int DESIGN_SCREEN_WIDTH_P = 720;\n\tprivate static final int DESIGN_SEP_LINE_WIDTH = 1;\n\tprivate static final int DESIGN_LOGO_HEIGHT = 76;\n\tprivate static final int DESIGN_PADDING_TOP = 20;\n\tprivate static final int PAGE_SIZE_P = 12;\n\tprivate static final int LINE_SIZE_P = 4;\n\n\tpublic PlatformPageAdapterPort(PlatformPage page, ArrayList<Object> cells) {\n\t\tsuper(page, cells);\n\t}\n\n\tprotected void calculateSize(Context context, ArrayList<Object> plats) {\n\t\tint screenWidth = ResHelper.getScreenWidth(context);\n\t\tlineSize = LINE_SIZE_P;\n\n\t\tfloat ratio = ((float) screenWidth) / DESIGN_SCREEN_WIDTH_P;\n\t\tsepLineWidth = (int) (DESIGN_SEP_LINE_WIDTH * ratio);\n\t\tsepLineWidth = sepLineWidth < 1 ? 1 : sepLineWidth;\n\t\tlogoHeight = (int) (DESIGN_LOGO_HEIGHT * ratio);\n\t\tpaddingTop = (int) (DESIGN_PADDING_TOP * ratio);\n\t\tbottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio);\n\t\tcellHeight = (screenWidth - sepLineWidth * 3) / 4;\n\t\tif (plats.size() <= lineSize) {\n\t\t\tpanelHeight = cellHeight + sepLineWidth;\n\t\t} else if (plats.size() <= PAGE_SIZE_P - lineSize) {\n\t\t\tpanelHeight = (cellHeight + sepLineWidth) * 2;\n\t\t} else {\n\t\t\tpanelHeight = (cellHeight + sepLineWidth) * 3;\n\t\t}\n\t}\n\n\tprotected void collectCells(ArrayList<Object> plats) {\n\t\tint count = plats.size();\n\t\tif (count < PAGE_SIZE_P) {\n\t\t\tint lineCount = (count / lineSize);\n\t\t\tif (count % lineSize != 0) {\n\t\t\t\tlineCount++;\n\t\t\t}\n\t\t\tcells = new Object[1][lineCount * lineSize];\n\t\t} else {\n\t\t\tint pageCount = (count / PAGE_SIZE_P);\n\t\t\tif (count % PAGE_SIZE_P != 0) {\n\t\t\t\tpageCount++;\n\t\t\t}\n\t\t\tcells = new Object[pageCount][PAGE_SIZE_P];\n\t\t}\n\n\t\tfor (int i = 0; i < count; i++) {\n\t\t\tint p = i / PAGE_SIZE_P;\n\t\t\tcells[p][i - PAGE_SIZE_P * p] = plats.get(i);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/cn/sharesdk/onekeyshare/themes/classic/port/PlatformPagePort.java",
    "content": "/*\n * 官网地站:http://www.mob.com\n * 技术支持QQ: 4006852216\n * 官方微信:ShareSDK   （如果发布新版本的话，我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题，也可以通过微信与我们取得联系，我们将会在24小时内给予回复）\n *\n * Copyright (c) 2013年 mob.com. All rights reserved.\n */\n\npackage cn.sharesdk.onekeyshare.themes.classic.port;\n\nimport java.util.ArrayList;\n\nimport cn.sharesdk.onekeyshare.OnekeyShareThemeImpl;\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPage;\nimport cn.sharesdk.onekeyshare.themes.classic.PlatformPageAdapter;\n\n/** 竖屏的九宫格页面 */\npublic class PlatformPagePort extends PlatformPage {\n\n\tpublic PlatformPagePort(OnekeyShareThemeImpl impl) {\n\t\tsuper(impl);\n\t}\n\n\tpublic void onCreate() {\n\t\trequestPortraitOrientation();\n\t\tsuper.onCreate();\n\t}\n\n\tprotected PlatformPageAdapter newAdapter(ArrayList<Object> cells) {\n\t\treturn new PlatformPageAdapterPort(this, cells);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/App.kt",
    "content": "package com.yoyiyi.soleil\n\nimport android.app.Activity\nimport android.app.Application\nimport android.content.Context\nimport android.support.multidex.MultiDex\nimport com.facebook.stetho.Stetho\nimport com.yoyiyi.soleil.di.component.AppComponent\nimport com.yoyiyi.soleil.di.component.DaggerAppComponent\nimport com.yoyiyi.soleil.di.module.ApiModule\nimport com.yoyiyi.soleil.di.module.AppModule\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.CrashHandler\nimport com.yoyiyi.soleil.utils.LogUtils\nimport com.yoyiyi.soleil.utils.PrefsUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport java.util.*\n\n@Suppress(\"DEPRECATION\")\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/28 11:27\n * * 描述:APP\n * * #                                                   #\n * * #                       _oo0oo_                     #\n * * #                      o8888888o                    #\n * * #                      88\" . \"88                    #\n * * #                      (| -_- |)                    #\n * * #                      0\\  =  /0                    #\n * * #                    ___/`---'\\___                  #\n * * #                  .' \\\\|     |# '.                 #\n * * #                 / \\\\|||  :  |||# \\                #\n * * #                / _||||| -:- |||||- \\              #\n * * #               |   | \\\\\\  -  #/ |   |              #\n * * #               | \\_|  ''\\---/''  |_/ |             #\n * * #               \\  .-\\__  '-'  ___/-. /             #\n * * #             ___'. .'  /--.--\\  `. .'___           #\n * * #          .\"\" '<  `.___\\_<|>_/___.' >' \"\".         #\n * * #         | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |       #\n * * #         \\  \\ `_.   \\_ __\\ /__ _/   .-` /  /       #\n * * #     =====`-.____`.___ \\_____/___.-`___.-'=====    #\n * * #                       `=---='                     #\n * * #     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   #\n * * #                                                   #\n * * #               佛祖保佑         永无BUG             #\n * * #                                                   #\n */\nclass App : Application() {\n\n    private var allActivities: HashSet<Activity>? = null\n    val appComponent: AppComponent by lazy {\n        DaggerAppComponent.builder()\n                .apiModule(ApiModule())\n                .appModule(AppModule(this))\n                .build()\n    }\n\n    companion object {\n        lateinit var instance: App\n\n    }\n\n\n    override fun onCreate() {\n        super.onCreate()\n        AppUtils.init(this)\n        instance = this\n        initNetwork()\n        initStetho()\n        initCrashHandler()\n        initLog()\n        initPrefs()\n    }\n\n    override fun attachBaseContext(base: Context?) {\n        super.attachBaseContext(base)\n        MultiDex.install(this)\n    }\n\n\n    /**\n     * 增加Activity\n     * @param act act\n     */\n    fun addActivity(act: Activity) {\n        if (allActivities == null) {\n            allActivities = HashSet<Activity>()\n        } else {\n            allActivities?.add(act)\n        }\n    }\n\n    /**\n     * 移除Activity\n     * @param act act\n     */\n    fun removeActivity(act: Activity) {\n        allActivities?.remove(act)\n    }\n\n    /**\n     * 退出应用\n     */\n    @Synchronized fun exitApp() {\n        allActivities?.let {\n            for (act in it) {\n                act.finish()\n            }\n        }\n        android.os.Process.killProcess(android.os.Process.myPid())\n        System.exit(0)\n    }\n\n    /**\n     * 初始化sp\n     */\n    private fun initPrefs() {\n        PrefsUtils.init(this, packageName + \"_preference\", Context.MODE_MULTI_PROCESS)\n    }\n\n    /**\n     * 初始化调试\n     */\n    private fun initStetho() {\n        Stetho.initialize(\n                Stetho.newInitializerBuilder(this)\n                        .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))\n                        .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))\n                        .build())\n    }\n\n    /**\n     * 开启网络监听\n     */\n    private fun initNetwork() {\n        NetworkUtils.startNetService(this)\n\n    }\n\n\n    /**\n     * 初始化崩溃日志\n     */\n    private fun initCrashHandler() {\n        CrashHandler.getInstance().init(this)\n    }\n\n\n    /**\n     * 初始化log\n     */\n    private fun initLog() {\n        LogUtils.init(this)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/up/ArchiveAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.up\n\nimport android.support.v7.widget.RecyclerView\nimport android.support.v7.widget.StaggeredGridLayoutManager\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 16:06\n * * 描述:\n */\n\nclass ArchiveAdapter(data: List<MulUpDetail>) : BaseMultiItemQuickAdapter<MulUpDetail, BaseViewHolder>(data) {\n    init {\n        addItemType(MulUpDetail.TYPE_ARCHIVE_LIVE, R.layout.layout_item_up_detail_archive_live)\n        addItemType(MulUpDetail.TYPE_ARCHIVE_HEAD, R.layout.layout_item_up_detail_archive_head)\n        addItemType(MulUpDetail.TYPE_ARCHIVE_ALL_SUBMIT_VIDEO, R.layout.layout_item_up_detail_archive_submited_video_item)\n        addItemType(MulUpDetail.TYPE_ARCHIVE_FAVOURITE, R.layout.layout_item_up_detail_archive_favourite)\n\n    }\n\n\n    override fun convert(holder: BaseViewHolder, mulUpDetail: MulUpDetail) {\n        when (mulUpDetail.itemType) {\n            MulUpDetail.TYPE_ARCHIVE_LIVE -> holder.setText(R.id.tv_live_state, \"正在轮播: ${mulUpDetail.live?.title}\")\n            MulUpDetail.TYPE_ARCHIVE_HEAD -> {\n                val span = SpanUtils()\n                if (mulUpDetail.state == 0) {\n                    span.append(\"${mulUpDetail.title}\")\n                            .appendSpace(10)\n                            .append(\"${mulUpDetail.count}\")\n                            .setForegroundColor(AppUtils.getColor(R.color.font_gray))\n                            .appendSpace(10)\n                            .appendImage(R.drawable.ic_invisible)\n                            .append(\"未公开\")\n                            .setForegroundColor(AppUtils.getColor(R.color.font_gray))\n                } else {\n                    span.append(\"${mulUpDetail.title}\")\n                            .append(\"${mulUpDetail.count}\")\n                            .setForegroundColor(AppUtils.getColor(R.color.font_gray))\n                }\n                holder.setText(R.id.tv_title, span.create())\n                holder.setVisible(R.id.tv_more, mulUpDetail.count != 0)\n            }\n\n            MulUpDetail.TYPE_ARCHIVE_ALL_SUBMIT_VIDEO//全部投稿\n            -> {\n                mulUpDetail.archiveBean?.let {\n                    holder.setText(R.id.tv_video_title, it.title)\n                            .setText(R.id.tv_video_play_num, NumberUtils.format(\"${it.play}\"))\n                            .setText(R.id.tv_video_favourite, NumberUtils.format(\"${it.danmaku}\"))\n                    Glide.with(mContext)\n                            .load(it.cover)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n                    if (mulUpDetail.position % 2 == 0) {\n                        val params = holder.itemView.layoutParams as ViewGroup.MarginLayoutParams\n                        params.setMargins(\n                                mContext.resources.getDimension(R.dimen.dp10).toInt(),\n                                mContext.resources.getDimension(R.dimen.dp10).toInt(),\n                                mContext.resources.getDimension(R.dimen.dp5).toInt(),\n                                mContext.resources.getDimension(R.dimen.dp10).toInt())\n                        holder.itemView.layoutParams = params\n                    } else {\n                        val params = holder.itemView.layoutParams as ViewGroup.MarginLayoutParams\n                        params.setMargins(\n                                mContext.resources.getDimension(R.dimen.dp5).toInt(),\n                                mContext.resources.getDimension(R.dimen.dp10).toInt(),\n                                mContext.resources.getDimension(R.dimen.dp10).toInt(),\n                                mContext.resources.getDimension(R.dimen.dp10).toInt())\n                        holder.itemView.layoutParams = params\n                    }\n\n\n                }\n\n            }\n\n            MulUpDetail.TYPE_ARCHIVE_FAVOURITE -> {\n                val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerView.setHasFixedSize(true)\n                val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)\n                recyclerView.layoutManager = layoutManager\n                mulUpDetail.favourite?.let {\n                    recyclerView.adapter = ArchiveFavouriteAdapter(it.item)\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/up/ArchiveFavouriteAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.up\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.user.UpDetail\nimport com.yoyiyi.soleil.utils.EmptyUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 19:24\n * * 描述:\n */\n\nclass ArchiveFavouriteAdapter(data: List<UpDetail.DataBean.FavouriteBean.ItemBeanX>?) : BaseQuickAdapter<UpDetail.DataBean.FavouriteBean.ItemBeanX, BaseViewHolder>(R.layout.item_up_detail_archive_favourite, data) {\n\n    override fun convert(holder: BaseViewHolder, item: UpDetail.DataBean.FavouriteBean.ItemBeanX) {\n        val cover = item.cover\n        val coverId = intArrayOf(R.id.iv_view1, R.id.iv_view2, R.id.iv_view3)\n        if (EmptyUtils.isNotEmpty(cover)) {\n            for (i in cover.indices) {\n                Glide.with(mContext)\n                        .load(cover[i].pic)\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .dontAnimate()\n                        .into(holder.getView<ImageView>(coverId[i]))\n            }\n            holder.setText(R.id.tv_favourite_title, item.name)\n                    .setText(R.id.tv_favourite_count, \"${item.cur_count}\")\n            if (holder.adapterPosition == itemCount - 1) {\n                holder.setVisible(R.id.space, true)\n            } else {\n                holder.setVisible(R.id.space, false)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/up/FavouriteAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.up\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\n\nimport jp.wasabeef.glide.transformations.RoundedCornersTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 16:06\n * * 描述:\n */\n\nclass FavouriteAdapter(data: List<MulUpDetail>) : BaseMultiItemQuickAdapter<MulUpDetail, BaseViewHolder>(data) {\n\n    init {\n        addItemType(MulUpDetail.TYPE_FAVOURITE_ITEM, R.layout.item_up_detail_favourite)\n    }\n\n\n    override fun convert(holder: BaseViewHolder, mulUpDetail: MulUpDetail) {\n        when (mulUpDetail.itemType) {\n            MulUpDetail.TYPE_FAVOURITE_ITEM -> {\n                mulUpDetail.favouriteBean?.let {\n\n                    Glide.with(mContext)\n                            .load<Any>(it.cover[0].pic)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0))\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n                    holder.setText(R.id.tv_video_title, it.name)\n                            .setText(R.id.tv_favourite_count, \"${it.cur_count}\")\n                            .setText(R.id.tv_video_state, if (it.state == 2) \"公开 · ${it.cur_count} 个内容\" else \"私密\")\n\n                }\n\n\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/up/SubmitedVideoAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.up\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.time.FormatUtils\nimport jp.wasabeef.glide.transformations.RoundedCornersTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 13:23\n * * 描述:\n */\n\nclass SubmitedVideoAdapter(data: List<MulUpDetail>) : BaseMultiItemQuickAdapter<MulUpDetail, BaseViewHolder>(data) {\n\n    init {\n        addItemType(MulUpDetail.TYPE_SUBMITED_VIDEO_ELEC, R.layout.layout_item_up_submited_video_electricize)\n        addItemType(MulUpDetail.TYPE_SUBMITED_VIDEO_ITEM, R.layout.layout_item_up_submited_video_item)\n\n    }\n\n    override fun convert(holder: BaseViewHolder, mulUpDetail: MulUpDetail) {\n        when (mulUpDetail.itemType) {\n            MulUpDetail.TYPE_SUBMITED_VIDEO_ELEC -> {\n            }\n\n            MulUpDetail.TYPE_SUBMITED_VIDEO_ITEM -> {\n                mulUpDetail.archiveBean?.let {\n                    Glide.with(mContext)\n                            .load(it.cover)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0))\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n                    holder.setText(R.id.tv_video_title, it.title)\n                            .setText(R.id.tv_video_play, NumberUtils.format(\"${it.play}\"))\n                            .setText(R.id.tv_video_danmaku, NumberUtils.format(\"${it.danmaku}\"))\n                            .setText(R.id.tv_duration, FormatUtils.formatDuration(\"${it.duration}\"))\n\n                }\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/up/UpAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.up\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.search.Up\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/21 9:20\n * * 描述:up主\n */\n\nclass UpAdapter(data: List<Up.DataBean.ItemsBean>) : BaseQuickAdapter<Up.DataBean.ItemsBean, BaseViewHolder>(R.layout.item_search_up, data) {\n\n    override fun convert(holder: BaseViewHolder, item: Up.DataBean.ItemsBean) {\n        holder.setText(R.id.tv_uname, item.title)\n                .setText(R.id.tv_des, if (item.sign.isNotEmpty()) item.sign else \"\")\n                .setText(R.id.tv_fans, \"粉丝数: \" + NumberUtils.format(\"${item.fans}\"))\n                .setText(R.id.tv_videos, \"视频数: \" + NumberUtils.format(\"${item.archives}\"))\n        Glide.with(mContext)\n                .load<Any>(item.cover)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_avatar)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_avatar))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/video/CommentAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.video\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.app.video.MulComment\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport com.yoyiyi.soleil.utils.time.TimeUtils\nimport com.yoyiyi.soleil.widget.CircleImageView\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/15 10:07\n * * 描述:\n */\n\nclass CommentAdapter(data: List<MulComment>) : BaseMultiItemQuickAdapter<MulComment, BaseViewHolder>(data) {\n    init {\n        addItemType(MulComment.TYPE_COMMENT_HOT_ITEM, R.layout.layout_item_video_detail_comment)\n        addItemType(MulComment.TYPE_COMMENT_MORE, R.layout.layout_item_video_detail_more)\n        addItemType(MulComment.TYPE_COMMENT_NOMAL_ITEM, R.layout.layout_item_video_detail_comment)\n\n    }\n\n    override fun convert(holder: BaseViewHolder, mulComment: MulComment) {\n        when (mulComment.itemType) {\n\n            MulComment.TYPE_COMMENT_HOT_ITEM -> {\n                mulComment.hotsBean?.let {\n\n                    holder.setText(R.id.tv_uname, SpanUtils()\n                            .append(it.member.uname)\n                            .setForegroundColor(AppUtils.getColor(R.color.gray_20))\n                            .appendSpace(10)\n                            .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER)\n                            .create())\n                            .setText(R.id.tv_like, \"${it.like}\")\n                            .setText(R.id.tv_floor, \"#${it.floor}\")\n                            .setText(R.id.tv_time, TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong()))\n                            .setText(R.id.tv_message, it.content.message)\n                            .setText(R.id.tv_rcount, \"共有${it.rcount}条回复 >\")\n                    Glide.with(mContext)\n                            .load(it.member.avatar)\n                            .centerCrop()\n                            .placeholder(R.drawable.bili_default_avatar)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<CircleImageView>(R.id.iv_avatar))\n                }\n\n            }\n            MulComment.TYPE_COMMENT_MORE -> {\n            }\n\n            MulComment.TYPE_COMMENT_NOMAL_ITEM -> {\n                mulComment.repliesBean?.let {\n                    holder.setVisible(R.id.tv_rcount, false)\n                            .setText(R.id.tv_like, \"${it.like}\")\n                            .setText(R.id.tv_uname, SpanUtils()\n                                    .append(it.member.uname)\n                                    .setForegroundColor(AppUtils.getColor(R.color.gray_20))\n                                    .appendSpace(10)\n                                    .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER)\n                                    .create())\n                            .setText(R.id.tv_floor, \"#${it.floor}\")\n                            .setText(R.id.tv_time, com.yoyiyi.soleil.utils.time.TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong()))\n                            .setText(R.id.tv_message, it.content.message)\n                    Glide.with(mContext)\n                            .load(it.member.avatar)\n                            .centerCrop()\n                            .placeholder(R.drawable.bili_default_avatar)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<CircleImageView>(R.id.iv_avatar))\n                }\n\n            }\n        }\n    }\n\n    private fun getIdRes(lv: Int): Int = when (lv) {\n        1 -> R.drawable.ic_lv1\n        2 -> R.drawable.ic_lv2\n        3 -> R.drawable.ic_lv3\n        4 -> R.drawable.ic_lv4\n        5 -> R.drawable.ic_lv5\n        6 -> R.drawable.ic_lv6\n        7 -> R.drawable.ic_lv7\n        8 -> R.drawable.ic_lv8\n        9 -> R.drawable.ic_lv9\n        else -> R.drawable.ic_lv0\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/app/video/SummaryAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.app.video\n\nimport android.content.Intent\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.app.video.MulSummary\nimport com.yoyiyi.soleil.module.app.up.UpDetailActivity\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.time.TimeUtils\nimport com.yoyiyi.soleil.widget.flowlayout.FlowLayout\nimport com.yoyiyi.soleil.widget.flowlayout.TagAdapter\nimport com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/15 10:07\n * * 描述:\n */\n\nclass SummaryAdapter(data: List<MulSummary>) : BaseMultiItemQuickAdapter<MulSummary, BaseViewHolder>(data) {\n\n    init {\n        addItemType(MulSummary.TYPE_DES, R.layout.layout_item_video_detail_summary_des)\n        addItemType(MulSummary.TYPE_OWNER, R.layout.layout_item_video_detail_summary_owner)\n        addItemType(MulSummary.TYPE_RELATE, R.layout.layout_item_video_detail_summary_relate)\n        addItemType(MulSummary.TYPE_RELATE_HEAD, R.layout.layout_item_video_detail_summary_relate_head)\n    }\n\n    override fun convert(holder: BaseViewHolder, mulSummary: MulSummary) {\n        when (mulSummary.itemType) {\n            MulSummary.TYPE_DES ->\n\n                mulSummary.state?.let {\n\n                    holder.setText(R.id.tv_title, mulSummary.title)\n                            .setText(R.id.tv_video_play_num, NumberUtils.format(\"${it.view}\"))\n                            .setText(R.id.tv_video_danmaku, NumberUtils.format(\"${it.danmaku}\"))\n                            .setText(R.id.tv_share, NumberUtils.format(\"${it.share}\"))\n                            .setText(R.id.tv_coin, NumberUtils.format(\"${it.coin}\"))\n                            .setText(R.id.tv_favourite, NumberUtils.format(\"${it.favorite}\"))\n                            .setText(R.id.tv_down, \"缓存\")\n                            .setText(R.id.tv_des, mulSummary.desc)\n\n                }\n\n\n            MulSummary.TYPE_OWNER -> {\n                mulSummary.owner?.let {\n                    Glide.with(mContext)\n                            .load(it.face)\n                            .centerCrop()\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_avatar))\n                    holder.getView<View>(R.id.iv_avatar).setOnClickListener { mContext.startActivity(Intent(mContext, UpDetailActivity::class.java)) }\n\n                    val date = TimeUtils.millis2String((mulSummary.ctime * Math.pow(10.0, 3.0)).toLong())\n                    val split = date.split(\"-\".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()\n\n                    holder.setText(R.id.tv_name, it.name)\n                            .setText(R.id.tv_time, split[0] + \"年\" + split[1] + \"月\" + split[2].split(\" \".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[0] + \"日\" + \"投递\")\n\n                    val tagsLayout = holder.getView<TagFlowLayout>(R.id.tags_layout)\n\n                    val tag = ArrayList<String>()\n\n                    mulSummary.tags?.forEach { tagBean -> tag.add(tagBean.tag_name) }\n\n                    tagsLayout.adapter = object : TagAdapter<String>(tag) {\n                        override fun getView(flowLayout: FlowLayout, i: Int, listBean: String): View {\n                            val mTags = LayoutInflater.from(mContext).inflate(R.layout.layout_hot_tags_item, flowLayout, false) as TextView\n                            mTags.text = listBean\n                           //   mTags.setOnClickListener{ TotalSearchActivity.startActivity(mContext, listBean.key)}\n                            return mTags\n                        }\n                    }\n                }\n            }\n\n            MulSummary.TYPE_RELATE_HEAD -> {\n            }\n            MulSummary.TYPE_RELATE -> {\n                mulSummary.relates?.let {\n                    Glide.with(mContext)\n                            .load<Any>(it.pic)\n                            .centerCrop()\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<View>(R.id.iv_video_preview) as ImageView)\n                    holder.setText(R.id.tv_video_title, it.title)\n                            .setText(R.id.tv_video_up, it.owner.name)\n                            .setText(R.id.tv_video_play, NumberUtils.format(\"${it.stat.view}\"))\n                            .setText(R.id.tv_video_danmaku, NumberUtils.format(\"${it.stat.danmaku}\"))\n\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.bangumi\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.LinearLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport android.text.TextUtils\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetail\nimport com.yoyiyi.soleil.bean.bangumi.MulBangumiDetail\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.EmptyUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport com.yoyiyi.soleil.utils.time.TimeUtils\nimport com.yoyiyi.soleil.widget.CircleImageView\nimport com.yoyiyi.soleil.widget.flowlayout.FlowLayout\nimport com.yoyiyi.soleil.widget.flowlayout.TagAdapter\nimport com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout\nimport jp.wasabeef.glide.transformations.BlurTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/11 22:02\n * * 描述:番剧详情\n */\nclass BangumiDetailAdapter(data: List<MulBangumiDetail>) : BaseMultiItemQuickAdapter<MulBangumiDetail, BaseViewHolder>(data) {\n\n\n    init {\n        addItemType(MulBangumiDetail.TYPE_HEAD, R.layout.layout_item_bangumi_detail_info)//头部信息\n        addItemType(MulBangumiDetail.TYPE_SEASON, R.layout.layout_item_bangumi_detail_recycler)//分季\n        addItemType(MulBangumiDetail.TYPE_EPISODE_HEAD, R.layout.layout_item_bangumi_detail_head)//分集头部\n        addItemType(MulBangumiDetail.TYPE_EPISODE_ITEM, R.layout.layout_item_bangumi_detail_recycler)//分集\n        addItemType(MulBangumiDetail.TYPE_CONTRACTED, R.layout.layout_bangumi_detail_contracted)//承包\n        addItemType(MulBangumiDetail.TYPE_DES, R.layout.layout_item_bangumi_detail_des)//简介\n        addItemType(MulBangumiDetail.TYPE_RECOMMEND_HEAD, R.layout.layout_item_bangumi_detail_head)//推荐头部\n        addItemType(MulBangumiDetail.TYPE_RECOMMEND_ITEM, R.layout.layout_item_bangumi_detail_recommend)//推荐item\n        addItemType(MulBangumiDetail.TYPE_COMMENT_HEAD, R.layout.layout_item_bangumi_detail_head)//评论头部\n        addItemType(MulBangumiDetail.TYPE_COMMENT_HOT_ITEM, R.layout.layout_item_bangumi_detail_comment)//热门评论\n        addItemType(MulBangumiDetail.TYPE_COMMENT_MORE, R.layout.layout_item_bangumi_detail_more)//更多推荐\n        addItemType(MulBangumiDetail.TYPE_COMMENT_NOMAL_ITEM, R.layout.layout_item_bangumi_detail_comment)//评论\n\n    }\n\n    override fun convert(holder: BaseViewHolder, mulBangumiDetail: MulBangumiDetail) {\n        when (mulBangumiDetail.itemType) {\n            MulBangumiDetail.TYPE_HEAD//头部信息\n            -> if (!mulBangumiDetail.isPrepare) {\n                holder.setText(R.id.tv_play, \"播放:${NumberUtils.format(\"${mulBangumiDetail.playCount}\")}\")\n                        .setText(R.id.tv_follow, \"追番${NumberUtils.format(\"${mulBangumiDetail.favorites}\")}\")\n                        .setText(R.id.tv_state, if (mulBangumiDetail.isFinish == \"0\") \"连载中\" else \"已完结\")\n                Glide.with(mContext)\n                        .load(mulBangumiDetail.cover)\n                        .centerCrop()\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .dontAnimate()\n                        .into(holder.getView<ImageView>(R.id.iv_pic))\n\n                Glide.with(mContext)\n                        .load(mulBangumiDetail.cover)\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .placeholder(R.drawable.bili_default_image_tv)\n                        .bitmapTransform(BlurTransformation(mContext, 26))\n                        .dontAnimate()\n                        .into(holder.getView<ImageView>(R.id.iv_pic_big))\n            }\n\n            MulBangumiDetail.TYPE_SEASON//分季\n            -> {\n                val recyclerSeason = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerSeason.setHasFixedSize(true)\n                val layoutManagerSeason = LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)\n                recyclerSeason.layoutManager = layoutManagerSeason\n                mulBangumiDetail.seasonsTitle?.let {\n                    recyclerSeason.adapter = BangumiDetailSeasonAdapter(mulBangumiDetail.seasonsBeanList, it)\n                }\n            }\n            MulBangumiDetail.TYPE_EPISODE_ITEM//选集\n            -> {\n                val recyclerEpisode = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerEpisode.setHasFixedSize(true)\n                val layoutManagerEpisode = LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)\n                recyclerEpisode.layoutManager = layoutManagerEpisode\n                recyclerEpisode.adapter = BangumiDetailEpisodeAdapter(mulBangumiDetail.episodesBeans)\n            }\n            MulBangumiDetail.TYPE_EPISODE_HEAD//选集头部\n            -> {\n                holder.setText(R.id.tv_title, \"选集\")\n                if (TextUtils.equals(mulBangumiDetail.isFinish, \"1\")) {\n                    holder.setText(R.id.tv_online, \"一共 ${mulBangumiDetail.totalCount} 话\")\n                } else {\n                    holder.setText(R.id.tv_online, \"更新至第 ${mulBangumiDetail.totalCount} 话\")\n                }\n            }\n            MulBangumiDetail.TYPE_CONTRACTED//承包\n            -> {\n                holder.setText(R.id.tv_pay_count, \"已有${mulBangumiDetail.totalBpCount}人承包了这部番\")\n                        .setText(R.id.tv_week_count, \"等${mulBangumiDetail.weekBpCount}人七日内承包了这部番\")\n                val ids = intArrayOf(R.id.iv_avatar1, R.id.iv_avatar2, R.id.iv_avatar3, R.id.iv_avatar1, R.id.iv_avatar4)\n                val beanList = mulBangumiDetail.listBeanList\n                if (EmptyUtils.isNotEmpty(beanList)) {\n                    beanList?.forEach {\n                        Glide.with(mContext)\n                                .load(it.face)\n                                .centerCrop()\n                                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                                .placeholder(R.drawable.bili_default_avatar)\n                                .dontAnimate()\n                                .into(holder.getView<CircleImageView>(ids[beanList.indexOf(it)]))\n                    }\n                }\n            }\n            MulBangumiDetail.TYPE_DES//简介\n            -> {\n                holder.setText(R.id.tv_des, mulBangumiDetail.evaluate)\n                        .setText(R.id.tv_title, \"简介\")\n                        .setText(R.id.tv_online, \"更多\")\n                val tagsLayout = holder.getView<TagFlowLayout>(R.id.tags_layout)\n                tagsLayout.adapter = object : TagAdapter<BangumiDetail.TagsBean>(mulBangumiDetail.tagsBeanList) {\n                    override fun getView(flowLayout: FlowLayout, i: Int, listBean: BangumiDetail.TagsBean): View {\n                        val mTags = LayoutInflater.from(mContext)\n                                .inflate(R.layout.layout_hot_tags_item, flowLayout, false) as TextView\n                        mTags.text = listBean.tag_name\n                       // mTags.setOnClickListener{ TotalSearchActivity.startActivity(mContext, listBean.keyword)}\n                        return mTags\n                    }\n                }\n            }\n            MulBangumiDetail.TYPE_RECOMMEND_HEAD//推荐头部\n            -> holder.setText(R.id.tv_title, \"更多推荐\")\n                    .setText(R.id.tv_online, \"换一换\")\n                    .setVisible(R.id.iv_trans, true)\n                    .setVisible(R.id.iv_arrow, false)\n\n            MulBangumiDetail.TYPE_RECOMMEND_ITEM//推荐内容\n            -> {\n                val recyclerRecommend = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerRecommend.setHasFixedSize(true)\n                recyclerRecommend.isNestedScrollingEnabled = false\n                val layoutManager = GridLayoutManager(mContext, 3)\n                recyclerRecommend.layoutManager = layoutManager\n                mulBangumiDetail.bangumiRecommendList?.let {\n                    recyclerRecommend.adapter = BangumiDetailRecommendAdapter(it.subList(0, 6))\n                }\n\n            }\n\n            MulBangumiDetail.TYPE_COMMENT_HEAD//评论头部\n            -> holder.setText(R.id.tv_title, SpanUtils()\n                    .append(\"评论  \")\n                    .append(\"第\")\n                    .append(\"${mulBangumiDetail.num}\")\n                    .append(\"话\")\n                    .append(\"(${mulBangumiDetail.account})\").setForegroundColor(AppUtils.getColor(R.color.black_alpha_30))\n                    .create())\n                    .setText(R.id.tv_online, \"选集\")\n            MulBangumiDetail.TYPE_COMMENT_HOT_ITEM//热门评论\n            -> {\n                mulBangumiDetail.hotsBean?.let {\n                    holder.setText(R.id.tv_uname, SpanUtils()\n                            .append(it.member.uname)\n                            .setForegroundColor(AppUtils.getColor(R.color.gray_20))\n                            .appendSpace(10)\n                            .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER)\n                            .create())\n                            .setText(R.id.tv_like, \"${it.like}\")\n                            .setText(R.id.tv_floor, \"#${it.floor}\")\n                            .setText(R.id.tv_time, TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong()))\n                            .setText(R.id.tv_message, it.content.message)\n                            .setText(R.id.tv_rcount, \"共有${it.rcount}条回复 >\")\n                    Glide.with(mContext)\n                            .load(it.member.avatar)\n                            .centerCrop()\n                            .placeholder(R.drawable.bili_default_avatar)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<View>(R.id.iv_avatar) as CircleImageView)\n                }\n\n            }\n            MulBangumiDetail.TYPE_COMMENT_MORE//更多评论\n            -> {\n            }\n            MulBangumiDetail.TYPE_COMMENT_NOMAL_ITEM//普通评论\n            -> {\n                mulBangumiDetail.repliesBean?.let {\n\n                    holder.setVisible(R.id.tv_rcount, false)\n                            .setText(R.id.tv_like, \"${it.like}\")\n                            .setText(R.id.tv_uname, SpanUtils()\n                                    .append(it.member.uname)\n                                    .setForegroundColor(AppUtils.getColor(R.color.gray_20))\n                                    .appendSpace(10)\n                                    .appendImage(getIdRes(it.member.level_info.current_level), SpanUtils.ALIGN_CENTER)\n                                    .create())\n                            .setText(R.id.tv_floor, \"#${it.floor}\")\n                            .setText(R.id.tv_time, com.yoyiyi.soleil.utils.time.TimeUtils.millis2String((it.ctime * Math.pow(10.0, 3.0)).toLong()))\n                            .setText(R.id.tv_message, it.content.message)\n                    Glide.with(mContext)\n                            .load(it.member.avatar)\n                            .centerCrop()\n                            .placeholder(R.drawable.bili_default_avatar)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<CircleImageView>(R.id.iv_avatar))\n\n\n                }\n            }\n        }\n    }\n\n    private fun getIdRes(lv: Int): Int = when (lv) {\n        1 -> R.drawable.ic_lv1\n        2 -> R.drawable.ic_lv2\n        3 -> R.drawable.ic_lv3\n        4 -> R.drawable.ic_lv4\n        5 -> R.drawable.ic_lv5\n        6 -> R.drawable.ic_lv6\n        7 -> R.drawable.ic_lv7\n        8 -> R.drawable.ic_lv8\n        9 -> R.drawable.ic_lv9\n        else -> R.drawable.ic_lv0\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailEpisodeAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.bangumi\n\nimport android.content.Intent\nimport android.view.View\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetail\nimport com.yoyiyi.soleil.module.app.video.VideoPlayerActivity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/12 17:31\n * * 描述:\n */\n\nclass BangumiDetailEpisodeAdapter(data: List<BangumiDetail.EpisodesBean>?) : BaseQuickAdapter<BangumiDetail.EpisodesBean, BaseViewHolder>(R.layout.item_bangumi_detail_episodes, data) {\n\n    private var mOldPos: Int = 0\n    private var mNewPos: Int = 0\n\n    override fun convert(holder: BaseViewHolder, episodesBean: BangumiDetail.EpisodesBean) {\n        holder.setText(R.id.tv_index, \"第${episodesBean.index}话\")\n        holder.setText(R.id.tv_index_title, episodesBean.index_title)\n        holder.itemView.setOnClickListener {\n            mNewPos = holder.adapterPosition//新位置\n            mOldPos = mNewPos\n            notifyDataSetChanged()\n        }\n        if (holder.adapterPosition == mNewPos) {\n            holder.getView<View>(R.id.tv_index_title).isEnabled = true\n            holder.getView<View>(R.id.tv_index).isEnabled = true\n            holder.getView<View>(R.id.ll_root).isEnabled = true\n        } else {\n            holder.getView<View>(R.id.tv_index_title).isEnabled = false\n            holder.getView<View>(R.id.tv_index).isEnabled = false\n            holder.getView<View>(R.id.ll_root).isEnabled = false\n        }\n        if (mNewPos != mOldPos) {\n            holder.getView<View>(R.id.tv_index_title).isEnabled = false\n            holder.getView<View>(R.id.tv_index).isEnabled = false\n            holder.getView<View>(R.id.ll_root).isEnabled = false\n        }\n        if (holder.adapterPosition == itemCount - 1) {\n            holder.setVisible(R.id.space, true)\n        } else {\n            holder.setVisible(R.id.space, false)\n        }\n        //跳转到播放界面\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoPlayerActivity::class.java)) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailRecommendAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.bangumi\n\nimport android.content.Intent\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetailRecommend\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/12 19:05\n * * 描述:\n */\n\ninternal class BangumiDetailRecommendAdapter(data: List<BangumiDetailRecommend.ListBean>?) : BaseQuickAdapter<BangumiDetailRecommend.ListBean, BaseViewHolder>(R.layout.item_bangumi_detail_recommend, data) {\n\n    override fun convert(holder: BaseViewHolder, listBean: BangumiDetailRecommend.ListBean) {\n        Glide.with(mContext)\n                .load(listBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_follow, \"${NumberUtils.format(\"${listBean.follow}\")}追番\")\n                .setText(R.id.tv_video_title, listBean.title)\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiDetailSeasonAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.bangumi\n\nimport android.text.TextUtils\nimport android.view.View\n\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/12 17:31\n * * 描述:分季\n */\n\nclass BangumiDetailSeasonAdapter(data: List<BangumiDetail.SeasonsBean>?, private val mSeasonTitle: String) : BaseQuickAdapter<BangumiDetail.SeasonsBean, BaseViewHolder>(R.layout.item_bangumi_detail_seasons, data) {\n\n    private var mOldPos: Int = 0\n    private var mNewPos = -1\n\n    private var mFlag = true\n\n    override fun convert(holder: BaseViewHolder, seasonsBean: BangumiDetail.SeasonsBean) {\n        holder.setText(R.id.tv_index, seasonsBean.title)\n        if (mFlag) {\n            if (TextUtils.equals(seasonsBean.title, mSeasonTitle)) {\n                mNewPos = holder.adapterPosition\n                mOldPos = mNewPos\n                mFlag = false\n            }\n        }\n        holder.itemView.setOnClickListener {\n            mNewPos = holder.adapterPosition//新位置\n            mOldPos = mNewPos\n            notifyDataSetChanged()\n        }\n        if (holder.adapterPosition == mNewPos) {\n            holder.getView<View>(R.id.tv_index).isEnabled = true\n            holder.getView<View>(R.id.ll_root).isEnabled = true\n        } else {\n            holder.getView<View>(R.id.tv_index).isEnabled = false\n            holder.getView<View>(R.id.ll_root).isEnabled = false\n        }\n        if (mNewPos != mOldPos) {\n            holder.getView<View>(R.id.tv_index).isEnabled = false\n            holder.getView<View>(R.id.ll_root).isEnabled = false\n        }\n        if (holder.adapterPosition == itemCount - 1) {\n            holder.setVisible(R.id.space, true)\n        } else {\n            holder.setVisible(R.id.space, false)\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiIndexSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.bangumi\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.bangumi.BangumiIndex\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/9 16:19\n * * 描述:\n */\n\nclass BangumiIndexSection(data: List<BangumiIndex.CategoryBean>) : StatelessSection<BangumiIndex.CategoryBean>(R.layout.layout_item_bangumi_index_head, R.layout.layout_item_bangumi_index_body, data) {\n\n    override fun convert(holder: ViewHolder, categoryBean: BangumiIndex.CategoryBean, position: Int) {\n        holder.setText(R.id.tv_title, categoryBean.tag_name)\n        Glide.with(mContext)\n                .load(categoryBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_icon))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/bangumi/BangumiScheduleSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.bangumi\n\nimport android.content.Intent\nimport android.content.res.ColorStateList\nimport android.os.Build\nimport android.support.annotation.RequiresApi\nimport android.text.TextUtils\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.bangumi.BangumiSchedule\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\nimport java.text.SimpleDateFormat\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/8 17:45\n * * 描述:\n */\n\nclass BangumiScheduleSection(private val mWeek: String, list: List<BangumiSchedule>, private val mDate: String) : StatelessSection<BangumiSchedule>(R.layout.layout_item_bangumi_schedule_head, R.layout.layout_item_bangumi_schedule_body, list) {\n\n    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        when (mWeek) {\n            \"周一\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_1)\n            \"周二\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_2)\n            \"周三\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_3)\n            \"周四\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_4)\n            \"周五\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_5)\n            \"周六\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_6)\n            \"周日\" -> setWeekData(holder, R.drawable.bangumi_timeline_weekday_7)\n        }\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)\n    private fun setWeekData(holder: ViewHolder, iconRes: Int) {\n        val nowDate = com.yoyiyi.soleil.utils.time.TimeUtils.getNowDate()\n        val date2String = com.yoyiyi.soleil.utils.time.TimeUtils.date2String(nowDate, SimpleDateFormat(\"yyyy-MM-dd\", Locale.getDefault()))\n        if (TextUtils.equals(mDate, date2String /*TimeUtils.formatDate(TimeUtils.getCurrentTime(\"yyyy-MM-dd\")))*/)) {\n            holder.setText(R.id.tv_date, \"今天\")\n                    .setTextColor(R.id.tv_date, AppUtils.getColor(R.color.colorPrimary))\n                    .setTextColor(R.id.tv_title, AppUtils.getColor(R.color.colorPrimary))\n            val icon = holder.getView<ImageView>(R.id.iv_icon)\n            icon.imageTintList = ColorStateList.valueOf(AppUtils.getColor(R.color.colorPrimary))\n        } else {\n            holder.setText(R.id.tv_date, mDate)\n                    .setTextColor(R.id.tv_date, AppUtils.getColor(R.color.black_alpha_30))\n                    .setTextColor(R.id.tv_title, AppUtils.getColor(R.color.gray_80))\n            val icon = holder.getView<ImageView>(R.id.iv_icon)\n            icon.imageTintList = ColorStateList.valueOf(AppUtils.getColor(R.color.gray_80))\n        }\n        holder.setImageResource(R.id.iv_icon, iconRes)\n                .setText(R.id.tv_title, mWeek)\n    }\n\n    override fun convert(holder: ViewHolder, schedule: BangumiSchedule, position: Int) {\n        Glide.with(mContext)\n                .load(schedule.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, schedule.title)\n                .setText(R.id.tv_video_time, schedule.ontime)\n                .setText(R.id.tv_video_update, \"第 ${schedule.ep_index} 话\")\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/ActivityCenterAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.discover.ActivityCenter\nimport com.yoyiyi.soleil.module.app.BrowerActivity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 23:15\n * * 描述:活动中心\n */\nclass ActivityCenterAdapter(data: List<ActivityCenter.ListBean>?) : BaseQuickAdapter<ActivityCenter.ListBean, BaseViewHolder>(R.layout.item_activity_center, data) {\n\n\n    override fun convert(holder: BaseViewHolder, listBean: ActivityCenter.ListBean) {\n        Glide.with(mContext)\n                .load(listBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_preview))\n        holder.setText(R.id.tv_title, listBean.title).setImageResource(R.id.iv_state, if (listBean.state == 1) R.drawable.ic_badge_end else R.drawable.ic_badge_going)\n        holder.itemView.setOnClickListener { BrowerActivity.startActivity(mContext, listBean.link, listBean.title, listBean.cover) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/GameCenterBookGiftAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover\n\nimport android.widget.FrameLayout\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.discover.GameCenter\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.utils.AppUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/6 12:57\n * * 描述:\n */\n\nclass GameCenterBookGiftAdapter(data: List<GameCenter.BookGiftBean>?) : BaseQuickAdapter<GameCenter.BookGiftBean, BaseViewHolder>(R.layout.item_game_center_book_gift, data) {\n\n\n    override fun convert(holder: BaseViewHolder, bookGiftBean: GameCenter.BookGiftBean) {\n        holder.setText(R.id.tv_title, bookGiftBean.name)\n        Glide.with(mContext)\n                .load(bookGiftBean.image)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_preview))\n        holder.itemView.setOnClickListener { BrowerActivity.startActivity(mContext, bookGiftBean.link, bookGiftBean.name, bookGiftBean.image) }\n        val position = holder.adapterPosition\n        if (position == itemCount - 1) {\n            val params = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,\n                    FrameLayout.LayoutParams.MATCH_PARENT)\n            params.setMargins(AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n            holder.itemView.layoutParams = params\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/InterestAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.youth.banner.Banner\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.discover.MulInterest\nimport com.yoyiyi.soleil.ext.startAnim\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.utils.TimeUtils\nimport com.yoyiyi.soleil.widget.CircleImageView\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 22:45\n * * 描述:\n */\nclass InterestAdapter(data: List<MulInterest>) : BaseMultiItemQuickAdapter<MulInterest, BaseViewHolder>(data) {\n\n    init {\n        addItemType(MulInterest.TYPE_BANNER, R.layout.layout_banner)\n        addItemType(MulInterest.TYPE_CATEGRORY, R.layout.layout_item_interest_categroty)\n        addItemType(MulInterest.TYPR_HEADER, R.layout.layout_item_interest_head)\n        addItemType(MulInterest.TYPR_ITEM, R.layout.layout_item_interest_item)\n\n    }\n\n    override fun convert(holder: BaseViewHolder, mulInterest: MulInterest) {\n        when (mulInterest.itemType) {\n            MulInterest.TYPE_BANNER -> {\n                val banner = holder.getView<Banner>(R.id.banner)\n                val adList = mulInterest.interestAdList?.result\n                val urls = adList?.map({ bannerBean -> bannerBean.ads_image })\n                banner.startAnim(urls)\n                banner.setOnBannerListener { i ->\n                    adList?.let {\n                        val interestAd = it[i]\n                        BrowerActivity.startActivity(mContext, interestAd.ads_image_link, interestAd.ads_title, interestAd.ads_image)\n                    }\n                }\n            }\n            MulInterest.TYPE_CATEGRORY -> {\n                val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerView.setHasFixedSize(false)\n                recyclerView.isNestedScrollingEnabled = false\n                val layoutManager = GridLayoutManager(mContext, 4)\n                recyclerView.layoutManager = layoutManager\n                recyclerView.adapter = IntersetCategroyAdapter(mulInterest.interestCategroryList)\n            }\n            MulInterest.TYPR_HEADER -> {\n            }\n            MulInterest.TYPR_ITEM -> {\n                mulInterest.community?.let {\n                    Glide.with(mContext)\n                            .load(it.post_info.author_avatar)\n                            .centerCrop()\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<CircleImageView>(R.id.iv_author_avatar))\n                    holder.setText(R.id.tv_name, it.post_info.author_name)\n                            .setText(R.id.tv_summary, it.post_info.post_summary)\n                            .setText(R.id.tv_title, it.post_info.post_title)\n                            .setText(R.id.tv_group, \"[${it.community_info.community_name}]\")\n                            .setText(R.id.tv_time, TimeUtils.formatDate(com.yoyiyi.soleil.utils.time.TimeUtils.millis2String(it.post_info.post_time)))\n                            .setText(R.id.tv_img_count, \"${it.post_info.image_count}\")\n                            .setText(R.id.tv_reply_count, \"${it.post_info.reply_count}\")\n                            .setVisible(R.id.iv_image, it.post_info.image_count != 0)\n                            .setVisible(R.id.tv_img_count, it.post_info.image_count != 0)\n                    if (it.post_info.image_count != 0) {\n                        Glide.with(mContext)\n                                .load(it.post_info.post_image_list[0].image_url)\n                                .centerCrop()\n                                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                                .dontAnimate()\n                                .into(holder.getView<ImageView>(R.id.iv_image))\n                    }\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/IntersetCategroyAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.discover.InterestCategrory\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/6 12:57\n * * 描述:\n */\n\nclass IntersetCategroyAdapter(data: List<InterestCategrory.ResultBean>?) : BaseQuickAdapter<InterestCategrory.ResultBean, BaseViewHolder>(R.layout.item_interest_category, data) {\n\n    override fun convert(holder: BaseViewHolder, interestCategrory: InterestCategrory.ResultBean) {\n        Glide.with(mContext)\n                .load(interestCategrory.avatar)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_icon))\n        holder.setText(R.id.tv_title, interestCategrory.name)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/TopicCenterAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.discover.TopicCenter\nimport com.yoyiyi.soleil.module.app.BrowerActivity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 23:15\n * * 描述:话题中心\n */\nclass TopicCenterAdapter(data: List<TopicCenter.ListBean>?) : BaseQuickAdapter<TopicCenter.ListBean, BaseViewHolder>(R.layout.item_topic_center, data) {\n\n\n    override fun convert(holder: BaseViewHolder, listBean: TopicCenter.ListBean) {\n        Glide.with(mContext)\n                .load(listBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_preview))\n        holder.setText(R.id.tv_title, listBean.title)\n        holder.itemView.setOnClickListener { BrowerActivity.startActivity(mContext, listBean.link, listBean.title, listBean.cover) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/section/GameCenterBookGiftSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover.section\n\nimport android.support.v7.widget.RecyclerView\nimport android.support.v7.widget.StaggeredGridLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.discover.GameCenterBookGiftAdapter\nimport com.yoyiyi.soleil.bean.discover.GameCenter\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 21:44\n * * 描述:新游预约\n */\nclass GameCenterBookGiftSection(private val list: List<GameCenter.BookGiftBean>) : StatelessSection<Nothing>(R.layout.layout_item_game_center_head, R.layout.layout_item_game_center_book_gift, R.layout.layout_empty) {\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"新游预约\")\n    }\n\n    override fun onBindFooterViewHolder(holder: ViewHolder) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(true)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = GameCenterBookGiftAdapter(list)\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/section/GameCenterGameListSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover.section\n\nimport android.content.Intent\nimport android.view.View\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.discover.GameCenter\nimport com.yoyiyi.soleil.module.discover.AllGameActivity\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 21:44\n * * 描述:精品推荐游戏\n */\nclass GameCenterGameListSection(private val mFlag: Boolean, data: List<GameCenter.GameListBean>) : StatelessSection<GameCenter.GameListBean>(R.layout.layout_item_game_center_head, R.layout.layout_item_game_center_footer, R.layout.layout_item_game_center_body, data) {\n\n    override fun convert(holder: ViewHolder, gameListBean: GameCenter.GameListBean, position: Int) {\n        Glide.with(mContext)\n                .load(gameListBean.icon)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(holder.getView<View>(R.id.iv_preview) as ImageView)\n        holder.setText(R.id.tv_title, gameListBean.title)\n                .setText(R.id.tv_des, gameListBean.summary)\n        if (gameListBean.hot == 1) {\n            holder.setImageResource(R.id.iv_state, R.drawable.ic_game_center_hot)\n        } else if (gameListBean.new == 1) {\n            holder.setImageResource(R.id.iv_state, R.drawable.ic_game_center_new)\n        } else {\n            holder.setImageResource(R.id.iv_state, R.color.transparent)\n        }\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        if (mFlag) {\n            holder.setText(R.id.tv_title, \"精品推荐游戏\")\n        } else {\n            gone(holder.itemView)\n        }\n    }\n\n    override fun onBindFooterViewHolder(holder: ViewHolder) {\n        if (mFlag) {\n            holder.itemView.visibility = View.VISIBLE\n            holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, AllGameActivity::class.java)) }\n        } else {\n            gone(holder.itemView)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/discover/section/GameCenterUserSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.discover.section\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.widget.section.StatelessSection\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 21:44\n * * 描述:用户\n */\nclass GameCenterUserSection : StatelessSection<Nothing>(R.layout.layout_item_game_center_user)\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/ChaseFllowAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/7 23:28\n * * 描述:\n */\nclass ChaseFllowAdapter(data: List<ChaseBangumi.Follows>?) : BaseQuickAdapter<ChaseBangumi.Follows, BaseViewHolder>(R.layout.item_home_chase_body, data) {\n\n    override fun convert(holder: BaseViewHolder, followsBean: ChaseBangumi.Follows) {\n        Glide.with(mContext)\n                .load(followsBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, followsBean.title)//\n        holder.setText(R.id.tv_video_update, SpanUtils()\n                .append(\"更新至第 ${followsBean.new_ep.index} 话\")\n                .setForegroundColor(AppUtils.getColor(R.color.pink_text_color)).create())\n        holder.setText(R.id.tv_video_state, \"尚未观看\")\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/ChaseRecommendCNAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/7 23:31\n * * 描述:\n */\nclass ChaseRecommendCNAdapter(data: List<RecommendBangumi.RecommendCn.Recommend>?) : BaseQuickAdapter<RecommendBangumi.RecommendCn.Recommend, BaseViewHolder>(R.layout.item_home_chase_body, data) {\n\n    override fun convert(holder: BaseViewHolder, recommendBean: RecommendBangumi.RecommendCn.Recommend) {\n        Glide.with(mContext)\n                .load(recommendBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_follow, \"${NumberUtils.format(recommendBean.favourites)}人追番\")\n                .setText(R.id.tv_video_title, recommendBean.title)\n                .setText(R.id.tv_video_update, \"更新至第 ${recommendBean.newest_ep_index} 话\")\n                .setVisible(R.id.tv_video_state, false)\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/ChaseRecommendJPAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/7 23:31\n * * 描述:\n */\nclass ChaseRecommendJPAdapter(data: List<RecommendBangumi.RecommendJp.Recommend>?) : BaseQuickAdapter<RecommendBangumi.RecommendJp.Recommend, BaseViewHolder>(R.layout.item_home_chase_body, data) {\n\n    override fun convert(holder: BaseViewHolder, recommendBean: RecommendBangumi.RecommendJp.Recommend) {\n        Glide.with(mContext)\n                .load(recommendBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview) )\n        holder.setText(R.id.tv_video_follow, \"${NumberUtils.format(recommendBean.favourites)}人追番\")\n                .setText(R.id.tv_video_title, recommendBean.title)\n                .setText(R.id.tv_video_update, \"更新至第 ${recommendBean.newest_ep_index} 话\")\n                .setVisible(R.id.tv_video_state, false)\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/DynamicAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport android.widget.RelativeLayout\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.dynamic.MulDynamic\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.time.FormatUtils\nimport com.yoyiyi.soleil.utils.time.TimeUtils\nimport com.yoyiyi.soleil.widget.CircleImageView\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/13 16:09\n * * 描述:动态Adapter\n */\n\nclass DynamicAdapter(data: List<MulDynamic>?) : BaseMultiItemQuickAdapter<MulDynamic, BaseViewHolder>(data) {\n    init {\n        addItemType(MulDynamic.TYPE_LV0, R.layout.item_home_dynamic)\n        addItemType(MulDynamic.TYPE_LV1, R.layout.item_home_dynamic)\n    }\n\n    override fun convert(holder: BaseViewHolder, mulDynamic: MulDynamic) {\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n        when (holder.itemViewType) {\n            MulDynamic.TYPE_LV0 -> {\n                val itemBean = mulDynamic.group\n                holder.setVisible(R.id.fl_recent, itemBean?.isRecent == 1)\n                holder.getView<RelativeLayout>(R.id.fl_recent)\n                        .setOnClickListener {\n                            mulDynamic.flag = false\n                            val pos = holder.adapterPosition\n                            notifyItemChanged(pos)\n                            expand(pos, false)\n\n                        }\n                if (mulDynamic.flag) {\n                    holder.setVisible(R.id.fl_recent, true)\n                    holder.setText(R.id.tv_recent, \"还有${itemBean?.recent_count}个视频被隐藏\")\n                } else {\n                    holder.setVisible(R.id.fl_recent, false)\n                }\n                when (itemBean?.type) {\n                    0//关注up\n                    -> {\n                        holder.setVisible(R.id.iv_avatar, true)\n                                .setVisible(R.id.tv_tag, false)\n                                .setVisible(R.id.tv_title_time, true)\n                                .setVisible(R.id.tv_title_tag_time, false)\n                                .setVisible(R.id.tv_title, true)\n                                .setText(R.id.tv_title_time,\n                                        TimeUtils.getFriendlyTimeSpanByNow((itemBean.ctime * Math.pow(10.0, 3.0)).toLong()))\n                                .setText(R.id.tv_title, itemBean.name)\n                                .setText(R.id.tv_video_title, itemBean.title)\n                                .setText(R.id.tv_duration, FormatUtils.formatDuration(\"${itemBean.duration}\"))\n                                .setVisible(R.id.tv_duration, true)\n                                .setVisible(R.id.iv_video_play_num, true)\n                                .setVisible(R.id.tv_video_play_num, true)\n                                .setVisible(R.id.tv_video_favourite, true)\n                                .setVisible(R.id.iv_video_online_region, true)\n                                .setText(R.id.tv_video_play_num, \" \" + NumberUtils.format(itemBean.play.toString() + \"\"))\n                                .setText(R.id.tv_video_favourite, \" \" + NumberUtils.format(itemBean.favorite.toString() + \"\"))\n                                .setVisible(R.id.iv_tag_video_play_num, false)\n                                .setVisible(R.id.tv_tag_video_favourite, false)\n                                .setVisible(R.id.iv_tag_video_online_region, false)\n                                .setText(R.id.tv_tag_video_play_num,\n                                        \"${itemBean.name}${itemBean.tag.let { \"·${it.tag_name}\" }}\")\n\n                        Glide.with(mContext)\n                                .load(itemBean.face)\n                                .centerCrop()\n                                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                                .placeholder(R.drawable.bili_default_avatar)\n                                .dontAnimate()\n                                .into(holder.getView<CircleImageView>(R.id.iv_avatar))\n                        Glide.with(mContext)\n                                .load(itemBean.cover)\n                                .centerCrop()\n                                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                                .placeholder(R.drawable.bili_default_image_tv)\n                                .dontAnimate()\n                                .into(holder.getView<ImageView>(R.id.iv_preview))\n                    }\n                    2//国产动画\n                    -> {\n                        holder.setVisible(R.id.iv_avatar, false)\n                                .setVisible(R.id.tv_title, false)\n                                .setVisible(R.id.tv_title_time, false)\n                                .setVisible(R.id.tv_title_tag_time, true).setVisible(R.id.tv_duration, false)\n                                .setText(R.id.tv_title_tag_time, TimeUtils.getFriendlyTimeSpanByNow((itemBean.ctime.times(Math.pow(10.0, 3.0))).toLong()))\n                                .setVisible(R.id.tv_tag, true)\n                                .setText(R.id.tv_tag, \"国产动画\")\n                                .setBackgroundColor(R.id.tv_tag, AppUtils.getColor(R.color.yellow_30))\n                                .setText(R.id.tv_video_title, itemBean.title)\n                                .setVisible(R.id.iv_video_play_num, false)\n                                .setVisible(R.id.tv_video_play_num, true)\n                                .setVisible(R.id.tv_video_favourite, false)\n                                .setVisible(R.id.iv_video_online_region, false)\n                                .setText(R.id.tv_video_play_num, \"第${itemBean.index}话${itemBean.index_title}\")\n                                .setText(R.id.tv_tag_video_play_num, NumberUtils.format(\"${itemBean.play}\"))\n                                .setVisible(R.id.iv_tag_video_play_num, true)\n                                .setVisible(R.id.tv_tag_video_play_num, true)\n                                .setVisible(R.id.iv_tag_video_online_region, true)\n                                .setVisible(R.id.tv_tag_video_favourite, true)\n                                .setText(R.id.tv_tag_video_favourite, NumberUtils.format(\"${itemBean.danmaku}\"))\n                        Glide.with(mContext)\n                                .load(itemBean.cover)\n                                .centerCrop()\n                                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                                .placeholder(R.drawable.bili_default_image_tv)\n                                .dontAnimate()\n                                .into(holder.getView<ImageView>(R.id.iv_preview))\n                    }\n\n                    1//可能是番剧 不知道参数意思\n                    -> {\n                        holder.setVisible(R.id.iv_avatar, false)\n                                .setVisible(R.id.tv_tag, true)\n                                .setVisible(R.id.tv_title, false)\n                                .setVisible(R.id.tv_title_time, false)\n                                .setVisible(R.id.tv_title_tag_time, true)\n                                .setVisible(R.id.tv_duration, false)\n                                .setText(R.id.tv_title_tag_time, TimeUtils.getFriendlyTimeSpanByNow((itemBean.ctime.times(Math.pow(10.0, 3.0))).toLong()))\n                                .setText(R.id.tv_tag, \"番剧\")\n                                .setBackgroundColor(R.id.tv_tag, AppUtils.getColor(R.color.pink_text_color))\n                                .setText(R.id.tv_video_title, itemBean.title)\n                                .setVisible(R.id.iv_video_play_num, false)\n                                .setVisible(R.id.tv_video_play_num, true)\n                                .setVisible(R.id.tv_video_favourite, false)\n                                .setVisible(R.id.iv_video_online_region, false)\n                                .setText(R.id.tv_video_play_num, \"第${itemBean.index}话${itemBean.index_title}\")\n                                .setText(R.id.tv_tag_video_play_num, NumberUtils.format(\"${itemBean.play}\"))\n                                .setVisible(R.id.iv_tag_video_play_num, true)\n                                .setVisible(R.id.tv_tag_video_play_num, true)\n                                .setVisible(R.id.iv_tag_video_online_region, true)\n                                .setVisible(R.id.tv_tag_video_favourite, true)\n                                .setText(R.id.tv_tag_video_favourite, NumberUtils.format(\"${itemBean.danmaku}\"))\n                        Glide.with(mContext)\n                                .load(itemBean.cover)\n                                .centerCrop()\n                                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                                .placeholder(R.drawable.bili_default_image_tv)\n                                .dontAnimate()\n                                .into(holder.getView<ImageView>(R.id.iv_preview))\n                    }\n                }\n            }\n            MulDynamic.TYPE_LV1 -> {\n                mulDynamic.recent?.let {\n                    holder.setVisible(R.id.iv_avatar, true)\n                            .setVisible(R.id.tv_tag, false)\n                            .setText(R.id.tv_title, it.name)\n                            .setText(R.id.tv_title_time, TimeUtils.getFriendlyTimeSpanByNow((it.ctime.times(Math.pow(10.0, 3.0))).toLong()))\n                            .setVisible(R.id.fl_recent, false)\n                            .setText(R.id.tv_video_title, it.title)\n                            .setText(R.id.tv_duration, FormatUtils.formatDuration(\"${it.duration}\"))\n                            .setVisible(R.id.tv_duration, true)\n                            .setVisible(R.id.iv_video_play_num, true)\n                            .setVisible(R.id.tv_video_play_num, true)\n                            .setVisible(R.id.tv_video_favourite, true)\n                            .setVisible(R.id.iv_video_online_region, true)\n                            .setText(R.id.tv_video_play_num, \" \" + NumberUtils.format(\"${it.play}\"))\n                            .setText(R.id.tv_video_favourite, \" \" + NumberUtils.format(\"${it.favorite}\"))\n                            .setVisible(R.id.iv_tag_video_play_num, false)\n                            .setVisible(R.id.tv_tag_video_favourite, false)\n                            .setVisible(R.id.iv_tag_video_online_region, false)\n                            .setText(R.id.tv_tag_video_play_num,\n                                    \"${it.name}${it.tag.let { \"·${it.tag_name}\" }}\")\n                    Glide.with(mContext)\n                            .load(it.face)\n                            .centerCrop()\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_avatar)\n                            .dontAnimate()\n                            .into(holder.getView<CircleImageView>(R.id.iv_avatar))\n                    Glide.with(mContext)\n                            .load(it.cover)\n                            .centerCrop()\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_preview))\n\n\n                }\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/MainAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.support.v4.app.Fragment\nimport android.support.v4.app.FragmentManager\nimport android.support.v4.app.FragmentPagerAdapter\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.module.home.*\nimport com.yoyiyi.soleil.utils.AppUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 18:25\n * 描述:主页Tag\n */\n\nclass MainAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {\n    private val mTitle = AppUtils.getStringArray(R.array.main_title)\n    private val mFragment = arrayOfNulls<Fragment>(mTitle.size)\n\n    override fun getItem(position: Int): Fragment? {\n        if (mFragment[position] == null) {\n            when (position) {\n                0 ->\n                    //直播\n                    mFragment[position] = LiveFragment.newInstance()\n                1 ->\n                    //推荐\n                    mFragment[position] = RecommendFragment.newInstance()\n                2 ->\n                    //追番\n                    mFragment[position] = ChaseBangumiFragment.newInstance()\n                3 ->\n                    //分区\n                    mFragment[position] = RegionFragment.newInstance()\n                4 ->\n                    //动态\n                    mFragment[position] = DynamicFragment.newInstance()\n                5 ->\n                    //发现\n                    mFragment[position] = DiscoverFragment.newInstance()\n            }\n        }\n        return mFragment[position]\n    }\n\n    override fun getCount(): Int = mTitle.size\n\n\n    override fun getPageTitle(position: Int): CharSequence = mTitle[position]\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/RecommendAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.youth.banner.Banner\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.recommend.MulRecommend\nimport com.yoyiyi.soleil.bean.recommend.Recommend\nimport com.yoyiyi.soleil.ext.startAnim\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.time.FormatUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/31 11:28\n * * 描述:推荐Adapter\n */\n\nclass RecommendAdapter(data: List<MulRecommend>) : BaseMultiItemQuickAdapter<MulRecommend, BaseViewHolder>(data) {\n    init {\n        addItemType(MulRecommend.TYPE_HEADER, R.layout.layout_recommend_banner)\n        addItemType(MulRecommend.TYPE_ITEM, R.layout.layout_item_home_recommend_body)\n    }\n\n    override fun convert(holder: BaseViewHolder, mulRecommend: MulRecommend) {\n        when (holder.itemViewType) {\n            MulRecommend.TYPE_HEADER -> {\n                val banner = holder.getView<Banner>(R.id.banner)\n                val banner_item = mulRecommend.data\n                val urls = banner_item?.map(Recommend.BannerItem::image)\n                banner.startAnim(urls)\n                banner.setOnBannerListener {\n                    val i = it\n                    banner_item?.let {\n                        val bannerBean = it[i]\n                        BrowerActivity.startActivity(mContext, bannerBean.uri, bannerBean.title, bannerBean.image)\n\n                    }\n                }\n            }\n\n            MulRecommend.TYPE_ITEM -> {\n                Glide.with(mContext)\n                        .load(mulRecommend.recommend?.cover)\n                        .centerCrop()\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .placeholder(R.drawable.bili_default_image_tv)\n                        .dontAnimate()\n                        .into(holder.getView<ImageView>(R.id.iv_video_preview))\n                holder.setText(R.id.tv_video_play_num, NumberUtils.format(\"${mulRecommend.recommend?.play}\"))\n                        .setText(R.id.tv_video_time, FormatUtils.formatDuration(\"${mulRecommend.recommend?.duration}\"))\n                        .setText(R.id.tv_video_danmaku, NumberUtils.format(\"${mulRecommend.recommend?.danmaku}\"))\n                        .setText(R.id.tv_video_title, mulRecommend.recommend?.title)\n                if (mulRecommend.recommend?.open != 0) {\n                    //直播\n                    holder.setText(R.id.tv_video_tag, mulRecommend.recommend?.area)\n                } else {\n                    //推荐\n                    holder.setText(R.id.tv_video_tag, \"${mulRecommend.recommend?.tname}·${mulRecommend.recommend?.tag?.tag_name}\")\n                }\n                 holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/RegionActivityCenterAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.Region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/27 16:06\n * * 描述: 分区界面活动中心\n */\n\nclass RegionActivityCenterAdapter(data: List<Region.Body>?) : BaseQuickAdapter<Region.Body, BaseViewHolder>(R.layout.item_home_region_activity_center, data) {\n\n    override fun convert(holder: BaseViewHolder, bodyBean: Region.Body) {\n        Glide.with(mContext)\n                .load(bodyBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, bodyBean.title)\n        val position = holder.adapterPosition\n        if (position == itemCount - 1) {\n            holder.setVisible(R.id.space, true)\n        } else {\n            holder.setVisible(R.id.space, false)\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/RegionEntranceAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home\n\nimport android.content.Intent\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionEnter\nimport com.yoyiyi.soleil.bean.region.RegionTagType\nimport com.yoyiyi.soleil.module.region.AdActivity\nimport com.yoyiyi.soleil.module.region.RegionTypeActivity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 23:30\n * * 描述:\n */\nclass RegionEntranceAdapter(data: List<RegionEnter>?, private val regionTypeList: List<RegionTagType>) : BaseQuickAdapter<RegionEnter, BaseViewHolder>(R.layout.item_home_region_entrance, data) {\n\n\n    override fun convert(helper: BaseViewHolder, item: RegionEnter) {\n        helper.setText(R.id.tv_title, item.title)\n                .setImageResource(R.id.iv_icon, item.img)\n       helper.itemView.setOnClickListener {\n            when (helper.adapterPosition) {\n                0//直播\n                -> {\n                }\n                1 -> RegionTypeActivity.startActivity(mContext, regionTypeList[1])\n                2 -> RegionTypeActivity.startActivity(mContext, regionTypeList[2])\n                3//国创\n                -> {\n                }\n                4 -> RegionTypeActivity.startActivity(mContext, regionTypeList[3])\n                5 -> RegionTypeActivity.startActivity(mContext, regionTypeList[4])\n                6 -> RegionTypeActivity.startActivity(mContext, regionTypeList[5])\n                7 -> RegionTypeActivity.startActivity(mContext, regionTypeList[6])\n                8 -> RegionTypeActivity.startActivity(mContext, regionTypeList[7])\n                9 -> RegionTypeActivity.startActivity(mContext, regionTypeList[8])\n                10 -> RegionTypeActivity.startActivity(mContext, regionTypeList[9])\n                11//广告\n                -> mContext.startActivity(Intent(mContext, AdActivity::class.java))\n                12 -> RegionTypeActivity.startActivity(mContext, regionTypeList[10])\n                13 -> RegionTypeActivity.startActivity(mContext, regionTypeList[11])\n                14 -> RegionTypeActivity.startActivity(mContext, regionTypeList[12])\n                15 ->{\n\n                }\n                    //游戏中心\n                   // mContext.startActivity(Intent(mContext, GameCenterActivity::class.java))\n            }//LiveRegionActivity.startActivity(mContext);\n            //RegionTypeActivity.startActivity(mContext, mRegionTypeList.get(0));\n            // RegionTypeActivity.startActivity(mContext, mRegionTypeList.get(1), \"国创\");\n\n\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/live/LiveAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.live\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport android.view.animation.LinearInterpolator\nimport android.widget.Button\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.youth.banner.Banner\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.live.MulLive\nimport com.yoyiyi.soleil.bean.live.support.LiveEnter\nimport com.yoyiyi.soleil.ext.startAnim\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/6/7 11:38\n * 描述:直播界面的Adapter\n */\n\nclass LiveAdapter(data: List<MulLive>) : BaseMultiItemQuickAdapter<MulLive, BaseViewHolder>(data) {\n\n    init {\n        addItemType(MulLive.TYPE_BANNER, R.layout.layout_banner)\n        addItemType(MulLive.TYPE_ENTRANCE, R.layout.layout_item_home_live_entrance)\n        addItemType(MulLive.TYPR_HEADER, R.layout.layout_item_home_live_head)\n        addItemType(MulLive.TYPE_RECOMMEND_ITEM, R.layout.common_item_recycler)\n        addItemType(MulLive.TYPE_RECOMMEND_BANNER, R.layout.layout_item_home_live_body)\n        addItemType(MulLive.TYPE_PARTY_ITEM, R.layout.common_item_recycler)\n        addItemType(MulLive.TYPE_FOOTER, R.layout.layout_item_home_live_footer)\n    }\n\n    override fun convert(holder: BaseViewHolder, mulLive: MulLive) {\n        when (holder.itemViewType) {\n            MulLive.TYPE_BANNER -> {\n                val banner = holder.getView<Banner>(R.id.banner)\n                val bannerBeanList = mulLive.bannerBeanList\n                val urls = bannerBeanList?.map({ (img) -> img })\n                banner.startAnim(urls)\n                banner?.setOnBannerListener { i ->\n                    val bannerBean = bannerBeanList?.get(i)\n                    BrowerActivity.startActivity(mContext, bannerBean?.link ?: \"\", bannerBean?.title ?: \"\", bannerBean?.img ?: \"\")\n                }\n\n            }\n            MulLive.TYPE_ENTRANCE -> {\n                val liveEnterList = initEntrance()\n                val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerView.setHasFixedSize(false)\n                recyclerView.isNestedScrollingEnabled = false\n                val layoutManager = GridLayoutManager(mContext, 5)\n                recyclerView.layoutManager = layoutManager\n                recyclerView.adapter = LiveEntranceAdapter(liveEnterList)\n            }\n            MulLive.TYPE_RECOMMEND_BANNER -> {\n                val bannerDataBean = mulLive.bannerData\n                Glide.with(mContext)\n                        .load(bannerDataBean?.cover?.src)\n                        .centerCrop()\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .placeholder(R.drawable.bili_default_image_tv)\n                        .dontAnimate()\n                        .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n                holder.setText(R.id.tv_video_live_up, bannerDataBean?.owner?.name ?: \"未知\")//up\n                        .setText(R.id.tv_video_online, \"${bannerDataBean?.online}\")//在线人数;\n\n                holder.setText(R.id.tv_video_title, SpanUtils()\n                        .append(\"#${bannerDataBean?.area}#\")\n                        .append(\"${bannerDataBean?.title}\")\n                        .setForegroundColor(AppUtils.getColor(R.color.pink_text_color))\n                        .create())\n            }\n            MulLive.TYPR_HEADER -> {\n                Glide.with(mContext)\n                        .load(mulLive.url)\n                        .centerCrop()\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .dontAnimate()\n                        .into(holder.getView<ImageView>(R.id.iv_icon))\n                holder.setText(R.id.tv_title, mulLive.title)\n                holder.setText(R.id.tv_online, SpanUtils()\n                        .append(\"当前\")\n                        .append(\"${mulLive.count}\")\n                        .setForegroundColor(AppUtils.getColor(R.color.pink_text_color))\n                        .append(\"个直播\")\n                        .create())\n            }\n            MulLive.TYPE_RECOMMEND_ITEM -> {\n                val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerView.setHasFixedSize(false)\n                recyclerView.isNestedScrollingEnabled = false\n                val layoutManager = GridLayoutManager(mContext, 2)\n                recyclerView.layoutManager = layoutManager\n                recyclerView.adapter = LiveRecommendAdapter(mulLive.recommendLives!!)\n\n            }\n            MulLive.TYPE_PARTY_ITEM -> {\n                val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n                recyclerView.setHasFixedSize(false)\n                recyclerView.isNestedScrollingEnabled = false\n                val layoutManager = GridLayoutManager(mContext, 2)\n                recyclerView.layoutManager = layoutManager\n                recyclerView.adapter = LivePartitionAdapter(mulLive.partityLives!!)\n\n            }\n            MulLive.TYPE_FOOTER -> {\n                val random = Random()\n                mulLive.hasMore?.let {\n                    if (it) {\n                        holder.setVisible(R.id.bt_more_live, true)\n                    } else {\n                        holder.setVisible(R.id.bt_more_live, false)\n                        holder.getView<Button>(R.id.bt_more_live).setOnClickListener({ })\n                    }\n                }\n\n                holder.setText(R.id.tv_dynamic, \"${random.nextInt(200)}条新动态，点击这里刷新\")\n                holder.getView<ImageView>(R.id.iv_refresh).setOnClickListener({ view ->\n                    view.animate()\n                            .rotation(360f)\n                            .setInterpolator(LinearInterpolator())\n                            .setDuration(1000)\n                            .start()\n                })\n            }\n        }\n    }\n\n\n    /**\n     * 初始化入口\n     */\n    private fun initEntrance(): List<LiveEnter> = arrayListOf(\n            LiveEnter(\"关注\", R.drawable.live_home_follow_anchor),\n            LiveEnter(\"中心\", R.drawable.live_home_live_center),\n            LiveEnter(\"小视频\", R.drawable.live_home_clip_video),\n            LiveEnter(\"搜索\", R.drawable.live_home_search_room),\n            LiveEnter(\"分类\", R.drawable.live_home_all_category))\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/live/LiveEntranceAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.live\n\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.live.support.LiveEnter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 23:30\n * 描述:\n */\nclass LiveEntranceAdapter(data: List<LiveEnter>?) : BaseQuickAdapter<LiveEnter, BaseViewHolder>(R.layout.item_live_entrance, data) {\n\n    override fun convert(helper: BaseViewHolder, item: LiveEnter) {\n        helper.setText(R.id.tv_title, item.title)\n                .setImageResource(R.id.iv_icon, item.img)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/live/LivePartitionAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.live\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.live.LivePartition\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/14 15:38\n * 描述:\n */\nclass LivePartitionAdapter(data: List<LivePartition.Partitions.Lives>)\n    : BaseQuickAdapter<LivePartition.Partitions.Lives, BaseViewHolder>(R.layout.layout_item_home_live_body_mul, data) {\n    override fun convert(holder: BaseViewHolder, item: LivePartition.Partitions.Lives) {\n        Glide.with(mContext)\n                .load(item.cover.src)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n        holder.setText(R.id.tv_video_live_up, item.owner.name)//up\n                .setText(R.id.tv_video_online, NumberUtils.format(\"${item.online}\"))//在线人数;\n\n        holder.setText(R.id.tv_video_title, item.title)\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/live/LiveRecommendAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.live\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.live.LiveRecommend\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/14 15:38\n * 描述:\n */\nclass LiveRecommendAdapter(data: List<LiveRecommend.RecommendData.Lives>)\n    : BaseQuickAdapter<LiveRecommend.RecommendData.Lives, BaseViewHolder>(R.layout.layout_item_home_live_body_mul, data) {\n    override fun convert(holder: BaseViewHolder, item: LiveRecommend.RecommendData.Lives) {\n        Glide.with(mContext)\n                .load(item.cover.src)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n        holder.setText(R.id.tv_video_live_up, item.owner.name)//up\n                .setText(R.id.tv_video_online, NumberUtils.format(\"${item.online}\"))//在线人数;\n\n        holder.setText(R.id.tv_video_title, item.title)\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/chase/ChaseAdSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.chase\n\nimport android.view.View\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass ChaseAdSection(private val ad: RecommendBangumi.Ad) : StatelessSection<Nothing>(R.layout.layout_item_home_chase_footer, R.layout.layout_empty) {\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        Glide.with(mContext)\n                .load<Any>(ad.img)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<View>(R.id.iv_video_preview) as ImageView)\n        holder.setVisible(R.id.tv_title, false)\n                .setVisible(R.id.tv_new_tag, false)\n                .setVisible(R.id.tv_des, false)\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/chase/ChaseFollowSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.chase\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.ChaseFllowAdapter\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/21 11:57\n * * 描述:首页直播推荐主播section\n */\nclass ChaseFollowSection(private val count: String, private val mList: List<ChaseBangumi.Follows>) : StatelessSection<Nothing>(R.layout.layout_item_home_chase_head, R.layout.layout_item_home_chase_body) {\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        //设置标题图片\n        holder.setText(R.id.tv_title, \"我的追番\")\n                .setImageResource(R.id.iv_icon, R.drawable.bangumi_follow_home_ic_mine)\n        if (\"0\" == count) {\n            holder.setText(R.id.tv_more, \"查看更多\")\n        } else {\n            holder.setText(R.id.tv_more, SpanUtils()\n                    .append(\"最近更新 \")\n                    .append(count)\n                    .setForegroundColor(AppUtils.getColor(R.color.pink_text_color)).create())\n        }\n    }\n\n    override fun onBindItemViewHolder(holder: ViewHolder, position: Int) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(true)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = GridLayoutManager(mContext, 3)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = ChaseFllowAdapter(mList)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/chase/ChaseIndexSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.chase\n\nimport android.content.Intent\nimport android.view.View\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.module.bangumi.BangumiIndexActivity\nimport com.yoyiyi.soleil.module.bangumi.BangumiScheduleActivity\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass ChaseIndexSection : StatelessSection<Nothing>(R.layout.layout_item_home_chase_bangumi_index, R.layout.layout_empty) {\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.getView<View>(R.id.ll_bangumi_timeline)\n                .setOnClickListener({ mContext.startActivity(Intent(mContext, BangumiScheduleActivity::class.java)) })\n        holder.getView<View>(R.id.ll_bangumi_index)\n                .setOnClickListener({ mContext.startActivity(Intent(mContext, BangumiIndexActivity::class.java))})\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/chase/ChaseRecommendCNSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.chase\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.ChaseRecommendCNAdapter\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass ChaseRecommendCNSection(private val list: List<RecommendBangumi.RecommendCn.Recommend>, private val foot: RecommendBangumi.RecommendCn.Foot) : StatelessSection<Nothing>(R.layout.layout_item_home_chase_head, R.layout.layout_item_home_chase_footer, R.layout.layout_item_home_chase_body) {\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"国产动画推荐\")\n                .setImageResource(R.id.iv_icon, R.drawable.bangumi_follow_home_ic_domestic)\n\n    }\n\n    override fun onBindItemViewHolder(holder: ViewHolder, position: Int) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(true)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = GridLayoutManager(mContext, 3)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = ChaseRecommendCNAdapter(list)\n\n\n    }\n\n    override fun onBindFooterViewHolder(holder: ViewHolder) {\n        Glide.with(mContext)\n                .load(foot.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_title, foot.title)\n                .setText(R.id.tv_des, foot.desc)\n        if (foot.is_new == 1) {\n            holder.setVisible(R.id.tv_new_tag, true)\n        } else {\n            holder.setVisible(R.id.tv_new_tag, false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/chase/ChaseRecommendJPSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.chase\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.ChaseRecommendJPAdapter\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass ChaseRecommendJPSection(private val list: List<RecommendBangumi.RecommendJp.Recommend>, private val foot: RecommendBangumi.RecommendJp.Foot) : StatelessSection<Nothing>(R.layout.layout_item_home_chase_head, R.layout.layout_item_home_chase_footer, R.layout.layout_item_home_chase_body) {\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"番剧推荐\")\n                .setImageResource(R.id.iv_icon, R.drawable.bangumi_follow_home_ic_bangumi)\n    }\n\n    override fun onBindItemViewHolder(holder: ViewHolder, position: Int) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(true)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = GridLayoutManager(mContext, 3)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = ChaseRecommendJPAdapter(list)\n\n    }\n\n    override fun onBindFooterViewHolder(holder: ViewHolder) {\n        Glide.with(mContext)\n                .load<Any>(foot.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_title, foot.title)\n                .setText(R.id.tv_des, foot.desc)\n        if (foot.is_new == 1) {\n            holder.setVisible(R.id.tv_new_tag, true)\n        } else {\n            holder.setVisible(R.id.tv_new_tag, false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/region/RegionActivityCenterSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.region\n\nimport android.support.v7.widget.RecyclerView\nimport android.support.v7.widget.StaggeredGridLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.RegionActivityCenterAdapter\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass RegionActivityCenterSection(private val list: List<Region.Body>) : StatelessSection<Nothing>(R.layout.layout_item_home_region_head, R.layout.layout_item_home_region_activity_center, R.layout.layout_empty) {\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"活动中心\")\n                .setImageResource(R.id.iv_icon, R.drawable.ic_header_activity_center)\n    }\n\n    override fun onBindFooterViewHolder(holder: ViewHolder) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(true)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = StaggeredGridLayoutManager(1,\n                StaggeredGridLayoutManager.HORIZONTAL)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = RegionActivityCenterAdapter(list)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/region/RegionEntranceSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.region\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.RegionEntranceAdapter\nimport com.yoyiyi.soleil.bean.region.RegionEnter\nimport com.yoyiyi.soleil.bean.region.RegionTagType\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass RegionEntranceSection(private val regionTypeList: List<RegionTagType>) : StatelessSection<Nothing>(R.layout.layout_item_home_region_entrance, R.layout.layout_empty) {\n\n    private var mList: List<RegionEnter>? = null\n\n    init {\n        init()\n    }\n\n    private fun init() {\n        mList = arrayListOf(\n                RegionEnter(\"直播\", R.mipmap.ic_category_live),\n                RegionEnter(\"番剧\", R.mipmap.ic_category_t13),\n                RegionEnter(\"动画\", R.mipmap.ic_category_t1),\n                RegionEnter(\"国创\", R.mipmap.ic_category_t167),\n                RegionEnter(\"音乐\", R.mipmap.ic_category_t3),\n                RegionEnter(\"舞蹈\", R.mipmap.ic_category_t129),\n                RegionEnter(\"游戏\", R.mipmap.ic_category_t4),\n                RegionEnter(\"科技\", R.mipmap.ic_category_t36),\n                RegionEnter(\"生活\", R.mipmap.ic_category_t160),\n                RegionEnter(\"鬼畜\", R.mipmap.ic_category_t11),\n                RegionEnter(\"时尚\", R.mipmap.ic_category_t155),\n                RegionEnter(\"广告\", R.mipmap.ic_category_t165),\n                RegionEnter(\"娱乐\", R.mipmap.ic_category_t5),\n                RegionEnter(\"电影\", R.mipmap.ic_category_t23),\n                RegionEnter(\"电视剧\", R.mipmap.ic_category_t11),\n                RegionEnter(\"游戏中心\", R.mipmap.ic_category_game_center))\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(false)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = GridLayoutManager(mContext, 4)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = RegionEntranceAdapter(mList, regionTypeList)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/region/RegionSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.region\n\nimport android.content.Intent\nimport android.text.TextUtils\nimport android.view.animation.LinearInterpolator\nimport android.widget.Button\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.module.discover.GameCenterActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/21 11:57\n * * 描述:首页直播推荐主播section\n */\nclass RegionSection(private val title: String, data: List<Region.Body>) : StatelessSection<Region.Body>(R.layout.layout_item_home_region_head, R.layout.layout_item_home_region_footer, R.layout.layout_item_home_region_body, data) {\n    private val mRandom: Random = Random()\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        //设置标题图片\n        setTypeIcon(holder, title)\n        holder.setText(R.id.tv_title, title)\n    }\n\n\n    override fun convert(holder: ViewHolder, bodyBean: Region.Body, position: Int) {\n        Glide.with(mContext)\n                .load(bodyBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, bodyBean.title)\n        holder.setText(R.id.tv_video_play_num, NumberUtils.format(\"${bodyBean.play}\"))\n        if (TextUtils.equals(\"番剧区\", title)) {\n            holder.setVisible(R.id.iv_video_online_region, false)\n                    .setVisible(R.id.iv_video_online, true)\n                    .setText(R.id.tv_video_favourite, NumberUtils.format(\"${bodyBean.favourite}\"))\n        } else {\n            holder.setVisible(R.id.iv_video_online_region, true)\n                    .setVisible(R.id.iv_video_online, false)\n                    .setText(R.id.tv_video_favourite, NumberUtils.format(\"${bodyBean.danmaku}\"))\n        }\n        if (position % 2 == 0) {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        } else {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        }\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, BangumiDetailActivity::class.java)) }\n    }\n\n    override fun onBindFooterViewHolder(holder: ViewHolder) {\n        setButtonMore(holder, title)\n        if (TextUtils.equals(\"游戏区\", title)) {\n            holder.setVisible(R.id.bt_more, false)\n                    .setVisible(R.id.bt_more_game, true)\n                    .setVisible(R.id.bt_game_center, true)\n            //跳转到游戏中心\n            holder.getView<Button>(R.id.bt_game_center)\n                    .setOnClickListener({ mContext.startActivity(Intent(mContext, GameCenterActivity::class.java)) })\n        } else {\n            holder.setVisible(R.id.bt_more, true)\n                    .setVisible(R.id.bt_more_game, false)\n                    .setVisible(R.id.bt_game_center, false)\n        }\n        holder.setText(R.id.tv_dynamic, \"${mRandom.nextInt(200)}条新动态，点击这里刷新\")\n        holder.getView<ImageView>(R.id.iv_refresh).setOnClickListener({ view ->\n            view.animate()\n                    .rotation(360f)\n                    .setInterpolator(LinearInterpolator())\n                    .setDuration(1000).start()\n        })\n        holder.getView<ImageView>(R.id.iv_refresh).setOnClickListener({ view ->\n            view.animate()\n                    .rotation(360f)\n                    .setInterpolator(LinearInterpolator())\n                    .setDuration(1000).start()\n        })\n    }\n\n    private fun setTypeIcon(holder: ViewHolder, title: String) {\n        when (title) {\n            \"番剧区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t13)\n            \"动画区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t1)\n            \"国创区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t167)\n            \"音乐区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t3)\n            \"舞蹈区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t129)\n            \"游戏区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t4)\n            \"科技区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t36)\n            \"生活区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t160)\n            \"鬼畜区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t13)\n            \"时尚区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t155)\n            \"广告区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t165)\n            \"娱乐区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t5)\n            \"电影区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t23)\n            \"电视剧区\" -> holder.setImageResource(R.id.iv_icon, R.mipmap.ic_category_t11)\n        }\n    }\n\n    private fun setButtonMore(holder: ViewHolder, title: String) {\n        when (title) {\n            \"番剧区\" -> holder.setText(R.id.bt_more, \"更多番剧\")\n            \"动画区\" -> holder.setText(R.id.bt_more, \"更多动画\")\n            \"国创区\" -> holder.setText(R.id.bt_more, \"更多国创\")\n            \"音乐区\" -> holder.setText(R.id.bt_more, \"更多音乐\")\n            \"舞蹈区\" -> holder.setText(R.id.bt_more, \"更多舞蹈\")\n            \"游戏区\" -> holder.setText(R.id.bt_more_game, \"更多游戏\")\n            \"科技区\" -> holder.setText(R.id.bt_more, \"更多科技\")\n            \"生活区\" -> holder.setText(R.id.bt_more, \"更多生活\")\n            \"鬼畜区\" -> holder.setText(R.id.bt_more, \"更多鬼畜\")\n            \"时尚区\" -> holder.setText(R.id.bt_more, \"更多时尚\")\n            \"广告区\" -> holder.setText(R.id.bt_more, \"更多广告\")\n            \"娱乐区\" -> holder.setText(R.id.bt_more, \"更多娱乐\")\n            \"电影区\" -> holder.setText(R.id.bt_more, \"更多电影\")\n            \"电视剧区\" -> holder.setText(R.id.bt_more, \"更多电视剧\")\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/home/section/region/RegionTopicSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.home.section.region\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/21 11:57\n * * 描述:首页分区话题section\n */\nclass RegionTopicSection(private val bodyBean: Region.Body) : StatelessSection<Region.Body>(R.layout.layout_item_home_region_topic, R.layout.layout_empty) {\n\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        //设置标题图片\n        holder.setText(R.id.tv_title, \"话题\")\n                .setImageResource(R.id.iv_icon, R.drawable.ic_header_topic)\n        Glide.with(mContext)\n                .load(bodyBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/recommend/AllStationRankAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.recommend\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.recommend.AllStationRank\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport jp.wasabeef.glide.transformations.RoundedCornersTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 14:09\n * * 描述: 全站排行\n */\n\nclass AllStationRankAdapter(data: List<AllStationRank.RankBean.ListBean>) : BaseQuickAdapter<AllStationRank.RankBean.ListBean, BaseViewHolder>(R.layout.item_all_region, data) {\n\n    override fun convert(holder: BaseViewHolder, allRegionRank: AllStationRank.RankBean.ListBean) {\n        Glide.with(mContext)\n                .load(allRegionRank.pic)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0))\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n        val position = holder.adapterPosition\n        if (position < 3) {\n            holder.setText(R.id.tv_rank, SpanUtils()\n                    .append(\"${position + 1}\").setForegroundColor(AppUtils.getColor(R.color.pink_text_color))\n                    .create())\n        } else {\n            holder.setText(R.id.tv_rank, \"${position + 1}\")\n        }\n\n        holder.setText(R.id.tv_video_title, allRegionRank.title)\n                .setText(R.id.tv_video_up, allRegionRank.author)\n                .setText(R.id.tv_video_play, allRegionRank.play)\n                .setText(R.id.tv_video_danmaku, \"${allRegionRank.favorites}\")\n        holder.itemView.setOnClickListener{mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java))}\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/AllRegionRankAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.region\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.AllRegionRank\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport jp.wasabeef.glide.transformations.RoundedCornersTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 14:09\n * * 描述: 全区排行\n */\n\nclass AllRegionRankAdapter(data: List<AllRegionRank.RankBean.ListBean>?) : BaseQuickAdapter<AllRegionRank.RankBean.ListBean, BaseViewHolder>(R.layout.item_all_region, data) {\n\n    override fun convert(holder: BaseViewHolder, allRegionRank: AllRegionRank.RankBean.ListBean) {\n        Glide.with(mContext)\n                .load(allRegionRank.pic)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0))\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n        val position = holder.adapterPosition\n        if (position < 3) {\n            holder.setText(R.id.tv_rank, SpanUtils()\n                    .append(\"${position + 1}\")\n                    .setForegroundColor(AppUtils.getColor(R.color.pink_text_color))\n                    .create())\n        } else {\n            holder.setText(R.id.tv_rank, \"${position + 1}\")\n        }\n\n        holder.setText(R.id.tv_video_title, allRegionRank.title)\n                .setText(R.id.tv_video_up, allRegionRank.author)\n                .setText(R.id.tv_video_play, \"${allRegionRank.play}\")\n                .setText(R.id.tv_video_danmaku, \"${allRegionRank.favorites}\")\n         holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/RegionRecommendEntranceAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.region\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionEnter\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.rx.RxBus\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 23:30\n * * 描述:分区入口\n */\nclass RegionRecommendEntranceAdapter(data: List<RegionEnter>?) : BaseQuickAdapter<RegionEnter, BaseViewHolder>(R.layout.item_live_entrance, data) {\n\n    override fun convert(holder: BaseViewHolder, item: RegionEnter) {\n        Glide.with(mContext)\n                .load(item.img)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_icon))\n        holder.setText(R.id.tv_title, item.title)\n        holder.itemView.setOnClickListener {\n            //发送点击事件\n            val positionEvent = Event.RegionEntrancePositionEvent()\n            positionEvent.position = holder.adapterPosition\n            RxBus.post(positionEvent)\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionRecommendBannerSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\nimport com.youth.banner.Banner\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.ext.startAnim\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/21 11:57\n * * 描述:分区推荐主播section\n */\nclass RegionRecommendBannerSection(private val list: List<RegionRecommend.BannerBean.TopBean>) : StatelessSection<Nothing>(R.layout.layout_banner, R.layout.layout_empty) {\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        val banner = holder.getView<Banner>(R.id.banner)\n        val urls = list.map { it.image }\n        banner.startAnim(urls)\n        banner.setOnBannerListener { i ->\n            val bannerBean = list[i]\n            BrowerActivity.startActivity(mContext, bannerBean.uri, bannerBean.title, bannerBean.image)\n        }\n    }\n\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionRecommendDynamicSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 17:07\n * * 描述:\n */\nclass  RegionRecommendDynamicSection(dynamicBeanList: List<RegionRecommend.DynamicBean>) : StatelessSection<RegionRecommend.DynamicBean>(R.layout.layout_item_region_head, R.layout.layout_item_region_footer, R.layout.layout_item_region_body, dynamicBeanList) {\n\n    override fun convert(holder: ViewHolder, dynamicBean: RegionRecommend.DynamicBean, position: Int) {\n        Glide.with(mContext)\n                .load(dynamicBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, dynamicBean.title)\n                .setText(R.id.tv_video_play_num, NumberUtils.format(\"${dynamicBean.play}\"))\n                .setText(R.id.tv_video_favourite, NumberUtils.format(\"${dynamicBean.danmaku}\"))\n        if (position % 2 == 0) {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        } else {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        }\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n\n\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"全区动态\")\n                .setImageResource(R.id.iv_icon, R.drawable.ic_header_ding)\n                .setVisible(R.id.tv_rank, false)\n                .setVisible(R.id.tv_look_up, false)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionRecommendEntranceSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/15 16:28\n * * 描述:分区入口Section\n */\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.region.RegionRecommendEntranceAdapter\nimport com.yoyiyi.soleil.bean.region.RegionEnter\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/26 21:59\n * * 描述:\n */\nclass RegionRecommendEntranceSection(private val tid: Int) : StatelessSection<Nothing>(R.layout.layout_item_region_recommend_entrance, R.layout.layout_empty) {\n\n    private var mList: List<RegionEnter> = ArrayList()\n\n    init {\n        init()\n    }\n\n    private fun init() {\n        when (tid) {\n            13//番剧\n            -> mList = arrayListOf(RegionEnter(\"连载动画\", R.mipmap.ic_category_t33),\n                    RegionEnter(\"完结动画\", R.mipmap.ic_category_t32),\n                    RegionEnter(\"国产动画\", R.mipmap.ic_category_t153),\n                    RegionEnter(\"资讯\", R.mipmap.ic_category_t51),\n                    RegionEnter(\"官方延伸\", R.mipmap.ic_category_t152))\n            1//动画\n            -> mList = arrayListOf(RegionEnter(\"MAD·AMV\", R.mipmap.ic_category_t24),\n                    RegionEnter(\"MMD·3D\", R.mipmap.ic_category_t25),\n                    RegionEnter(\"短片·手书·配音\", R.mipmap.ic_category_t47),\n                    RegionEnter(\"综合\", R.mipmap.ic_category_t27))\n            3//音乐\n            -> mList = arrayListOf(RegionEnter(\"翻唱\", R.mipmap.ic_category_t31),\n                    RegionEnter(\"VOCALOID·UTAU\", R.mipmap.ic_category_t30),\n                    RegionEnter(\"演奏\", R.mipmap.ic_category_t59),\n                    RegionEnter(\"OP/ED/OST\", R.mipmap.ic_category_t54),\n                    RegionEnter(\"原创音乐\", R.mipmap.ic_category_t28),\n                    RegionEnter(\"三次元音乐\", R.mipmap.ic_category_t29),\n                    RegionEnter(\"音乐选集\", R.mipmap.ic_category_t130))\n            129//舞蹈\n            -> mList = arrayListOf(RegionEnter(\"宅舞\", R.mipmap.ic_category_t20),\n                    RegionEnter(\"三次元舞蹈\", R.mipmap.ic_category_t154),\n                    RegionEnter(\"舞蹈教程\", R.mipmap.ic_category_t156))\n            4//游戏\n            -> mList = arrayListOf(RegionEnter(\"单机联机\", R.mipmap.ic_category_t17),\n                    RegionEnter(\"网游·电竞\", R.mipmap.ic_category_t65),\n                    RegionEnter(\"音游\", R.mipmap.ic_category_t136),\n                    RegionEnter(\"MUGEN\", R.mipmap.ic_category_t19),\n                    RegionEnter(\"GMV\", R.mipmap.ic_category_t121),\n                    RegionEnter(\"游戏中心\", R.mipmap.ic_category_game_center2))\n            36//科技\n            -> mList = arrayListOf(RegionEnter(\"纪录片\", R.mipmap.ic_category_t37),\n                    RegionEnter(\"趣味科普人文\", R.mipmap.ic_category_t124),\n                    RegionEnter(\"野生技术协会\", R.mipmap.ic_category_t122),\n                    RegionEnter(\"演讲·公开课\", R.mipmap.ic_category_t39),\n                    RegionEnter(\"星海\", R.mipmap.ic_category_t96),\n                    RegionEnter(\"数码\", R.mipmap.ic_category_t95),\n                    RegionEnter(\"机械\", R.mipmap.ic_category_t98))\n            160//生活\n            -> mList = arrayListOf(RegionEnter(\"搞笑\", R.mipmap.ic_category_t138),\n                    RegionEnter(\"日常\", R.mipmap.ic_category_t21),\n                    RegionEnter(\"美食圈\", R.mipmap.ic_category_t76),\n                    RegionEnter(\"动物圈\", R.mipmap.ic_category_t75),\n                    RegionEnter(\"手工\", R.mipmap.ic_category_t161),\n                    RegionEnter(\"绘画\", R.mipmap.ic_category_t162),\n                    RegionEnter(\"运动\", R.mipmap.ic_category_t163))\n            119//鬼畜\n            -> mList = arrayListOf(RegionEnter(\"鬼畜调教\", R.mipmap.ic_category_t22),\n                    RegionEnter(\"音MAD\", R.mipmap.ic_category_t26),\n                    RegionEnter(\"人力VOCALOID\", R.mipmap.ic_category_t126),\n                    RegionEnter(\"教程演示\", R.mipmap.ic_category_t127))\n            155//时尚\n            -> mList = arrayListOf(RegionEnter(\"美妆\", R.mipmap.ic_category_t157),\n                    RegionEnter(\"服饰\", R.mipmap.ic_category_t158),\n                    RegionEnter(\"资讯\", R.mipmap.ic_category_t159),\n                    RegionEnter(\"健身\", R.mipmap.ic_category_t164))\n            5//娱乐\n            -> mList = arrayListOf(RegionEnter(\"综艺\", R.mipmap.ic_category_t71),\n                    RegionEnter(\"明星\", R.mipmap.ic_category_t137),\n                    RegionEnter(\"KOREA相关\", R.mipmap.ic_category_t131))\n            23//电影\n            -> mList = arrayListOf(RegionEnter(\"电影相关\", R.mipmap.ic_category_t82),\n                    RegionEnter(\"短片\", R.mipmap.ic_category_t85),\n                    RegionEnter(\"欧美电影\", R.mipmap.ic_category_t145),\n                    RegionEnter(\"日本电影\", R.mipmap.ic_category_t146),\n                    RegionEnter(\"国产电影\", R.mipmap.ic_category_t147),\n                    RegionEnter(\"其他国家\", R.mipmap.ic_category_t83))\n            11//电视剧\n            -> mList = arrayListOf(RegionEnter(\"连载剧集\", R.mipmap.ic_category_t15),\n                    RegionEnter(\"完结剧集\", R.mipmap.ic_category_t34),\n                    RegionEnter(\"特辑·布袋戏\", R.mipmap.ic_category_t86),\n                    RegionEnter(\"电视剧相关\", R.mipmap.ic_category_t128))\n        }\n\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        val recyclerView = holder.getView<RecyclerView>(R.id.recycler)\n        recyclerView.setHasFixedSize(false)\n        recyclerView.isNestedScrollingEnabled = false\n        val layoutManager = GridLayoutManager(mContext, if (mList.size >= 4) 4 else mList.size)\n        recyclerView.layoutManager = layoutManager\n        recyclerView.adapter = RegionRecommendEntranceAdapter(mList)\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionRecommendNewSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 17:07\n * * 描述:\n */\nclass RegionRecommendNewSection(newBeanList: List<RegionRecommend.NewBean>) : StatelessSection<RegionRecommend.NewBean>(R.layout.layout_item_region_head, R.layout.layout_item_region_body, newBeanList) {\n\n    override fun convert(holder: ViewHolder, newBean: RegionRecommend.NewBean, position: Int) {\n        Glide.with(mContext)\n                .load(newBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, newBean.title)\n                .setText(R.id.tv_video_play_num, NumberUtils.format(\"${newBean.play}\"))\n                .setText(R.id.tv_video_favourite, NumberUtils.format(\"${newBean.danmaku}\"))\n        if (position % 2 == 0) {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        } else {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        }\n          holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n\n\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"最新视频\")\n                .setImageResource(R.id.iv_icon, R.drawable.ic_header_new)\n                .setVisible(R.id.tv_rank, false)\n                .setVisible(R.id.tv_look_up, true)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionRecommendRecommendSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.module.region.AllRegionRankActivity\nimport com.yoyiyi.soleil.module.region.RegionTypeActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 17:07\n * * 描述:\n */\nclass RegionRecommendRecommendSection(recommendBeanList: List<RegionRecommend.RecommendBean>) : StatelessSection<RegionRecommend.RecommendBean>(R.layout.layout_item_region_head, R.layout.layout_item_region_body, recommendBeanList) {\n\n    override fun convert(holder: ViewHolder, recommendBean: RegionRecommend.RecommendBean, position: Int) {\n        Glide.with(mContext)\n                .load(recommendBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, recommendBean.title)\n                .setText(R.id.tv_video_play_num, NumberUtils.format(\"${recommendBean.play}\"))\n                .setText(R.id.tv_video_favourite, NumberUtils.format(\"${recommendBean.danmaku}\"))\n        if (position % 2 == 0) {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        } else {\n            setMargins(holder.itemView, AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt(),\n                    AppUtils.getDimension(R.dimen.dp10).toInt(),\n                    AppUtils.getDimension(R.dimen.dp5).toInt())\n        }\n          holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n\n\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"热门推荐\")\n                .setImageResource(R.id.iv_icon, R.mipmap.ic_category_promo)\n                .setVisible(R.id.tv_rank, true)\n                .setVisible(R.id.tv_look_up, false)\n        holder.getView<TextView>(R.id.tv_rank)\n                .setOnClickListener({\n                    if (mContext is RegionTypeActivity) {\n                        val activity = mContext as RegionTypeActivity\n                        AllRegionRankActivity.startActivity(mContext, activity.mTitle)\n                    }\n                })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionTypeNewSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionType\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\nimport jp.wasabeef.glide.transformations.RoundedCornersTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 17:07\n * * 描述:最热视频\n */\nclass RegionTypeNewSection(newBeanList: List<RegionType.NewBean>) : StatelessSection<RegionType.NewBean>(R.layout.layout_item_region_type_head, R.layout.layout_item_region_type_body, newBeanList) {\n\n    override fun convert(holder: ViewHolder, newBean: RegionType.NewBean, position: Int) {\n        Glide.with(mContext)\n                .load(newBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0))\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, newBean.title)\n                .setText(R.id.tv_video_up, newBean.name)\n                .setText(R.id.tv_video_play,\"${newBean.play}\")\n                .setText(R.id.tv_video_danmaku,\"${newBean.danmaku}\")\n        holder.itemView.setOnClickListener { mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"最新视频\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/region/sectiton/RegionTypeRecommendSection.kt",
    "content": "package com.yoyiyi.soleil.adapter.region.sectiton\n\nimport android.content.Intent\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionType\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.widget.section.StatelessSection\nimport com.yoyiyi.soleil.widget.section.ViewHolder\nimport jp.wasabeef.glide.transformations.RoundedCornersTransformation\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 17:07\n * * 描述:最热视频\n */\nclass RegionTypeRecommendSection(recommendBeanList: List<RegionType.RecommendBean>) : StatelessSection<RegionType.RecommendBean>(R.layout.layout_item_region_type_head, R.layout.layout_item_region_type_body, recommendBeanList) {\n\n    override fun convert(holder: ViewHolder, recommendBean: RegionType.RecommendBean, position: Int) {\n        Glide.with(mContext)\n                .load(recommendBean.cover)\n                .centerCrop()\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .bitmapTransform(RoundedCornersTransformation(mContext, 5, 0))\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n        holder.setText(R.id.tv_video_title, recommendBean.title)\n                .setText(R.id.tv_video_up, recommendBean.name)\n                .setText(R.id.tv_video_play, \"${recommendBean.play}\")\n                .setText(R.id.tv_video_danmaku, \"${recommendBean.danmaku}\")\n         holder.itemView.setOnClickListener { view -> mContext.startActivity(Intent(mContext, VideoDetailActivity::class.java)) }\n\n\n    }\n\n    override fun onBindHeaderViewHolder(holder: ViewHolder) {\n        holder.setText(R.id.tv_title, \"最热视频\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/search/MovieAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.search\n\nimport android.text.TextUtils\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.search.Movie\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 20:49\n * * 描述:\n */\nclass MovieAdapter(data: List<Movie.DataBean.ItemsBean>?) : BaseQuickAdapter<Movie.DataBean.ItemsBean, BaseViewHolder>(R.layout.item_search_movie, data) {\n\n    override fun convert(holder: BaseViewHolder, itemsBean: Movie.DataBean.ItemsBean) {\n        if (!TextUtils.isEmpty(itemsBean.screen_date)) {\n            val split = itemsBean.screen_date.split(\" \".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()\n            val spanUtils = SpanUtils().append(itemsBean.title)\n                    .appendSpace(10)\n                    .append(split[0].substring(0, 4))\n                    .setFontSize(mContext.resources.getDimension(R.dimen.text_size_12).toInt())\n                    .setForegroundColor(AppUtils.getColor(R.color.font_gray))\n            holder.setText(R.id.tv_video_title, spanUtils.create())\n        } else {\n            holder.setText(R.id.tv_video_title, itemsBean.title)\n        }\n        holder.setText(R.id.tv_video_area, if (itemsBean.area.isEmpty()) \"\" else \"地区:${itemsBean.area}\")\n                .setText(R.id.tv_video_staff, itemsBean.staff)\n                .setText(R.id.tv_video_actors, itemsBean.actors)\n        Glide.with(mContext)\n                .load(itemsBean.cover)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/search/MulArchiveAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.search\n\nimport android.view.View\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.search.MulSearchArchive\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 9:56\n * * 描述:\n */\n\nclass MulArchiveAdapter(data: List<MulSearchArchive>) : BaseMultiItemQuickAdapter<MulSearchArchive, BaseViewHolder>(data) {\n\n    init {\n        addItemType(MulSearchArchive.TYPE_SEASON, R.layout.layout_item_search_archive_season)\n        addItemType(MulSearchArchive.TYPE_SEASON_MORE, R.layout.layout_item_search_archive_seanson_more)\n        addItemType(MulSearchArchive.TYPE_MOVIE, R.layout.layout_item_search_archive_movie)\n        addItemType(MulSearchArchive.TYPE_MOVIE_MORE, R.layout.layout_item_search_archive_movie_more)\n        addItemType(MulSearchArchive.TYPE_ARCHIVE, R.layout.layout_item_search_archive_video)\n\n    }\n\n    override fun convert(holder: BaseViewHolder, mulSearchArchive: MulSearchArchive) {\n        when (mulSearchArchive.itemType) {\n            MulSearchArchive.TYPE_SEASON -> {\n                mulSearchArchive.season?.let {\n\n                    holder.setText(R.id.tv_video_title, it.title)\n                    val des: String\n                    if (it.finish == 1) {\n                        des = \"${it.newest_season} ·  ${it.total_count} 话全\"\n                    } else {\n                        des = \"${it.newest_season} · 更新至第 ${it.index} 话\"\n                    }\n                    holder.setText(R.id.tv_video_des, des)\n                            .setText(R.id.tv_video_newest_season, it.cat_desc)\n                    Glide.with(mContext)\n                            .load(it.cover)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n\n                }\n\n\n            }\n            MulSearchArchive.TYPE_SEASON_MORE -> {\n                val seasonCount = mulSearchArchive.seasonCount\n                if (seasonCount == 0) {\n                    holder.itemView.visibility = View.GONE\n                } else {\n                    holder.itemView.visibility = View.VISIBLE\n                    holder.setText(R.id.tv_more, \"更多番剧($seasonCount) >>\")\n                }\n            }\n            MulSearchArchive.TYPE_MOVIE -> {\n                mulSearchArchive.movie?.let {\n                    val split = it.screen_date.split(\" \".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()\n                    val spanUtils = SpanUtils().append(it.title)\n                            .appendSpace(10)\n                            .append(split[0].substring(0, 4))\n                            .setFontSize(mContext.resources.getDimension(R.dimen.text_size_12).toInt())\n                            .setForegroundColor(AppUtils.getColor(R.color.font_gray))\n                    holder.setText(R.id.tv_video_title, spanUtils.create())\n                            .setText(R.id.tv_video_area, \"地区:${it.area}\")\n                            .setText(R.id.tv_video_staff, it.staff)\n                            .setText(R.id.tv_video_actors, it.actors)\n                    Glide.with(mContext)\n                            .load(it.cover)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .dontAnimate()\n                            .into(holder.getView<ImageView>(R.id.iv_video_preview))\n\n\n                }\n            }\n            MulSearchArchive.TYPE_MOVIE_MORE -> {\n                val movieCount = mulSearchArchive.movieCount\n                if (movieCount == 0) {\n                    holder.itemView.visibility = View.GONE\n                } else {\n                    holder.itemView.visibility = View.VISIBLE\n                    holder.setText(R.id.tv_more, \"更多影视($movieCount) >>\")\n                }\n            }\n            MulSearchArchive.TYPE_ARCHIVE -> {\n                mulSearchArchive.archive?.let {\n                    Glide.with(mContext)\n                            .load(it.cover)\n                            .centerCrop()\n                            .placeholder(R.drawable.bili_default_image_tv)\n                            .diskCacheStrategy(DiskCacheStrategy.ALL)\n                            .dontAnimate()\n                            .into(holder.getView<View>(R.id.iv_video_preview) as ImageView)\n                    holder.setText(R.id.tv_video_title, it.title)\n                            .setText(R.id.tv_video_up, it.author)\n                            .setText(R.id.tv_duration, it.duration)\n                            .setText(R.id.tv_video_play, NumberUtils.format(\"${it.play}\"))\n                            .setText(R.id.tv_video_danmaku, NumberUtils.format(\"${it.danmaku}\"))\n\n                }\n\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/search/SeasonAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.search\n\nimport android.widget.ImageView\n\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.search.Season\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 20:40\n * * 描述:\n */\nclass SeasonAdapter(data: List<Season.DataBean.ItemsBean>) : BaseQuickAdapter<Season.DataBean.ItemsBean, BaseViewHolder>(R.layout.item_search_season, data) {\n\n    override fun convert(holder: BaseViewHolder, itemsBean: Season.DataBean.ItemsBean) {\n        holder.setText(R.id.tv_video_title, itemsBean.title)\n        val des = if (itemsBean.finish == 1) {\n            \"${itemsBean.newest_season} · ${itemsBean.total_count}话全\"\n        } else {\n            \"${itemsBean.newest_season} · 更新至第${itemsBean.index}话\"\n        }\n        holder.setText(R.id.tv_video_des, des)\n                .setText(R.id.tv_video_newest_season, itemsBean.cat_desc)\n        Glide.with(mContext)\n                .load(itemsBean.cover)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_image_tv)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_video_preview))\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/adapter/search/UpAdapter.kt",
    "content": "package com.yoyiyi.soleil.adapter.search\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.search.Up\nimport com.yoyiyi.soleil.utils.NumberUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 20:45\n * * 描述:\n */\nclass UpAdapter(data: List<Up.DataBean.ItemsBean>?) : BaseQuickAdapter<Up.DataBean.ItemsBean, BaseViewHolder>(R.layout.item_search_up, data) {\n\n    override fun convert(holder: BaseViewHolder, item: Up.DataBean.ItemsBean) {\n        holder.setText(R.id.tv_uname, item.title)\n                .setText(R.id.tv_des, if (item.sign.isEmpty()) item.sign else \"\")\n                .setText(R.id.tv_fans, \"粉丝数: ${NumberUtils.format(\"${item.fans}\")}\")\n                .setText(R.id.tv_videos, \"视频数: ${NumberUtils.format(\"${item.archives}\")}\")\n        Glide.with(mContext)\n                .load(item.cover)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .placeholder(R.drawable.bili_default_avatar)\n                .dontAnimate()\n                .into(holder.getView<ImageView>(R.id.iv_avatar))\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseActivity.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport android.app.Activity\nimport android.content.Context\nimport android.os.Bundle\nimport android.support.constraint.ConstraintLayout\nimport android.support.v7.widget.Toolbar\nimport android.view.View\nimport com.trello.rxlifecycle2.components.support.RxAppCompatActivity\nimport com.yoyiyi.soleil.App\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\n\n\n/**\n * 基础Activity\n * Created by zzq on 2016/12/5.\n */\nabstract class BaseActivity : RxAppCompatActivity() {\n\n    protected var mToolbar: Toolbar? = null//Toolbar\n    protected var mContext: Context? = null//上下文环境\n    protected open val mBack = true //是否返回\n    protected var mError: ConstraintLayout? = null\n\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(getLayoutId())\n        mContext = this\n        mToolbar = findViewById(R.id.toolbar) as? Toolbar\n        mError = findViewById(R.id.cl_error) as? ConstraintLayout\n        initStatusBar()\n        initInject()\n        initPresenter()\n        initVariables()\n        App.instance.addActivity(this)\n        mToolbar?.let {\n            //初始化Toolbar\n            initToolbar()\n            //让组件支持Toolbar\n            setSupportActionBar(it)\n            // supportActionBar\n            if (mBack) it.setNavigationOnClickListener { finish() }\n        }\n        initWidget()\n        initDatas()\n    }\n\n\n    /**\n     * 注入依赖\n     */\n    open fun initInject() {\n\n    }\n\n    open fun initRecyclerView() {\n    }\n\n    /**\n     * 完成请求\n     */\n    open fun finishTask() {}\n\n    /**\n     * 初始化StatusBar\n     */\n    open fun initStatusBar() {\n        StatusBarUtil.setColorNoTranslucent(mContext as Activity, AppUtils.getColor(R.color.colorPrimary))\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n\n    }\n\n    /**\n     * 初始化Presenter\n     */\n    open fun initPresenter() {\n        //  mPresenter?.attachView(this)\n    }\n\n\n\n\n    /**\n     * 初始化Toolbar\n     */\n    open fun initToolbar() {\n        if (mBack) mToolbar?.setNavigationIcon(R.drawable.ic_clip_back_white)\n    }\n\n    /**\n     * 布局文件\n\n     * @return 布局文件\n     */\n\n    abstract fun getLayoutId(): Int\n\n    /**\n     * 初始化控件\n     */\n    open fun initWidget() {}\n\n    /**\n     * 加载数据\n     */\n    open fun loadData() {}\n\n    /**\n     * 初始化数据\n     */\n    open fun initDatas() {\n        loadData()\n    }\n\n    /**\n     * 初始化变量\n     */\n    open fun initVariables() {}\n\n    /**\n     * 隐藏View\n     * @param views 视图\n     */\n    fun gone(vararg views: View) {\n        if (views.isNotEmpty()) {\n            for (view in views) {\n                view.visibility = View.GONE\n            }\n        }\n    }\n\n    /**\n     * 显示View\n     * @param views 视图\n     */\n    fun visible(vararg views: View) {\n        if (views.isNotEmpty()) {\n            for (view in views) {\n                view.visibility = View.VISIBLE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseContract.kt",
    "content": "package com.yoyiyi.soleil.base\n\n/**\n * 基础契约类 用来管理 presenter 与 view\n * Created by zzq on 2016/12/20.\n */\n\ninterface BaseContract {\n\n    interface BaseView {\n\n        /**\n         * 请求出错\n         */\n        fun showError(msg: String)\n\n        /**\n         * 请求完成\n         */\n        fun complete()\n    }\n\n    interface BasePresenter<in T> {\n\n        /**\n         * 绑定\n\n         * @param view view\n         */\n        fun  attachView(view: T)\n\n        /**\n         * 解绑\n         */\n        fun detachView()\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseFragment.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.content.Context\nimport android.os.Bundle\nimport android.support.constraint.ConstraintLayout\nimport android.support.v4.app.FragmentActivity\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport com.trello.rxlifecycle2.components.support.RxFragment\nimport com.yoyiyi.soleil.R\n\n/**\n * 基础Fragment\n * Created by zzq on 2016/12/27.\n */\n\nabstract class BaseFragment : RxFragment() {\n\n\n    protected var mRootView: View? = null\n    protected var mActivity: Activity? = null\n    protected var mInflater: LayoutInflater? = null\n    protected var mContext: Context? = null\n    // 标志位 标志已经初始化完成。\n    protected var mIsPrepared: Boolean = false\n    //标志位 fragment是否可见\n    protected var mIsVisible: Boolean = false\n    protected var mError: ConstraintLayout? = null\n\n\n\n    override fun onAttach(context: Context?) {\n        mActivity = context as? Activity\n        mContext = context\n        super.onAttach(context)\n    }\n\n\n    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, state: Bundle?): View? {\n        if (mRootView != null) {\n            val parent = mRootView?.parent as ViewGroup\n            parent.removeView(mRootView)\n        } else {\n            mRootView = inflater?.inflate(getLayoutId(), container, false)\n            mActivity = getSupportActivity()\n            mContext = mActivity\n            this.mInflater = inflater\n        }\n        return mRootView\n    }\n\n    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        initInject()\n        initPresenter()\n        initVariables()\n        mError = mRootView?.findViewById(R.id.cl_error) as ConstraintLayout?\n        initWidget()\n        initSetListener()\n        finishCreateView(savedInstanceState)\n        initDatas()\n    }\n\n    protected open fun initSetListener() {\n\n    }\n\n    protected open fun lazyLoadData() {\n\n    }\n\n    protected open fun initDatas() {\n        loadData()\n    }\n\n    open fun finishCreateView(state: Bundle?) {\n        mIsPrepared = true\n        lazyLoad()\n    }\n\n\n\n    /**\n     * 分离\n     */\n    override fun onDetach() {\n        this.mActivity = null\n        super.onDetach()\n    }\n\n\n    /**\n     * 初始化RV\n     */\n    protected open fun initRecyclerView() {\n\n    }\n\n    /**\n     * 初始化刷新\n     */\n    @SuppressLint(\"CheckResult\")\n    protected open fun initRefreshLayout() {\n\n    }\n\n    /**\n     * 清除数据\n     */\n    protected open fun clearData() {\n\n    }\n\n    /**\n     * 初始化Presenter\n     */\n    protected open fun initPresenter() {\n//        mPresenter?.attachView(this as Nothing)\n    }\n\n\n    /**\n     * 初始化变量\n     */\n    open fun initVariables() {}\n\n    /**\n     * 懒加载\n     */\n    protected open fun lazyLoad() {\n        if (!mIsPrepared || !mIsVisible) return@lazyLoad\n        lazyLoadData()\n        mIsPrepared = false\n    }\n\n    protected open fun onInvisible() {\n\n    }\n\n    /**\n     * 加载数据\n     */\n    protected open fun loadData() {}\n\n    /**\n     * 注入dagger2依赖\n     */\n    protected open fun initInject() {\n\n    }\n\n\n\n\n\n    protected open fun finishTask() {\n\n    }\n\n    /**\n     * 布局\n     * @return int\n     */\n    abstract fun getLayoutId(): Int\n\n    /**\n     * 对各种控件进行设置、适配、填充数据\n     */\n    open fun initWidget() {\n\n    }\n\n    protected open fun onVisible() {\n        lazyLoad()\n    }\n\n    /**\n     * Fragment数据的懒加载\n\n     * @param isVisibleToUser\n     */\n    override fun setUserVisibleHint(isVisibleToUser: Boolean) {\n        super.setUserVisibleHint(isVisibleToUser)\n        if (userVisibleHint) {\n            mIsVisible = true\n            onVisible()\n        } else {\n            mIsVisible = false\n            onInvisible()\n        }\n    }\n\n\n    /**\n     * 获取Activity\n\n     * @return FragmentActivity\n     */\n    fun getSupportActivity(): FragmentActivity = super.getActivity()\n\n\n    /**\n     * 获取ApplicationContext 信息\n     * @return Context\n     */\n    fun getApplicationContext(): Context? =\n            if (this.mContext == null) {\n                if (activity == null) {\n                    null\n                } else {\n                    activity.application\n                }\n            } else {\n                this.mContext?.applicationContext\n            }\n    /**\n     * 隐藏View\n     * @param views 视图\n     */\n    fun gone(vararg views: View) {\n        if (views.isNotEmpty()) {\n            for (view in views) {\n                view.visibility = View.GONE\n            }\n        }\n    }\n\n    /**\n     * 显示View\n     * @param views 视图\n     */\n    fun visible(vararg views: View) {\n        if (views.isNotEmpty()) {\n            for (view in views) {\n                view.visibility = View.VISIBLE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseInjectActivity.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport android.view.View\nimport com.yoyiyi.soleil.App\nimport com.yoyiyi.soleil.di.component.ActivityComponent\nimport com.yoyiyi.soleil.di.component.DaggerActivityComponent\nimport com.yoyiyi.soleil.di.module.ActivityModule\nimport com.yoyiyi.soleil.ext.getComponent\nimport javax.inject.Inject\n\n\n/**\n * 基础Activity\n * Created by zzq on 2016/12/5.\n */\nabstract class BaseInjectActivity<T : BaseContract.BasePresenter<*>> : BaseActivity(), BaseContract.BaseView {\n\n    @Inject\n    lateinit var mPresenter: T\n    //优先使用属性\n    protected val activityModule: ActivityModule get() = ActivityModule(this)\n\n    protected val activityComponent: ActivityComponent get() = DaggerActivityComponent.builder()\n            .appComponent(getComponent())\n            .activityModule(activityModule)\n            .build()\n\n    override fun showError(msg: String) {\n        mError?.visibility = View.VISIBLE\n    }\n\n    override fun complete() {\n        mError?.visibility = View.GONE\n    }\n\n    /**\n     * 销毁\n     */\n    override fun onDestroy() {\n        mPresenter.detachView()\n        App.instance.removeActivity(this)\n        super.onDestroy()\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseInjectFragment.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport android.view.View\nimport com.yoyiyi.soleil.App\nimport com.yoyiyi.soleil.di.component.DaggerFragmentComponent\nimport com.yoyiyi.soleil.di.component.FragmentComponent\nimport com.yoyiyi.soleil.di.module.FragmentModule\nimport javax.inject.Inject\n\n/**\n * 基础Fragment\n * Created by zzq on 2016/12/27.\n */\n\nabstract class BaseInjectFragment<T : BaseContract.BasePresenter<*>> : BaseFragment(), BaseContract.BaseView {\n\n    @Inject\n    lateinit var mPresenter: T\n\n\n    val fragmentModule: FragmentModule get() = FragmentModule(this)\n\n    val fragmentComponent: FragmentComponent get() = DaggerFragmentComponent.builder()\n            .appComponent(App.instance.appComponent)\n            .fragmentModule(fragmentModule)\n            .build()\n\n\n    override fun onDestroy() {\n        mPresenter.detachView()\n        super.onDestroy()\n    }\n\n\n\n    override fun showError(msg: String) {\n        mError?.visibility = View.VISIBLE\n    }\n\n    override fun complete() {\n        mError?.visibility = View.GONE\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseListSubscriber.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport com.yoyiyi.soleil.network.exception.ApiException\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.LogUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport io.reactivex.subscribers.ResourceSubscriber\nimport retrofit2.HttpException\nimport java.net.SocketTimeoutException\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 11:40\n * * 描述:统一处理订阅者\n */\n\nabstract class BaseListSubscriber<T>(private val view: BaseContract.BaseView?) : ResourceSubscriber<HttpResponse<List<T>>>() {\n    private val msg: String? = null\n\n\n    override fun onStart() {\n        super.onStart()\n        if (!NetworkUtils.isConnected(AppUtils.getAppContext())) {\n            // Logger.d(\"没有网络\");\n        } else {\n\n        }\n    }\n\n    override fun onComplete() {\n\n    }\n\n    override fun onNext(response: HttpResponse<List<T>>) {\n        view ?: return\n        view.complete()\n        if (response.code == 0) {\n            response.data?.let { onSuccess(it) }\n            response.result?.let { onSuccess(it) }\n        } else {\n            //可以不处理任何东西\n            onFailure(response.code, response.message ?: \"未知错误\")\n        }\n    }\n\n    abstract fun onSuccess(t: List<T>)\n\n    fun onFailure(code: Int, message: String) {\n\n    }\n\n\n    override fun onError(e: Throwable) {\n        view?.let {\n            if (!msg.isNullOrEmpty()) it.showError(msg!!)\n            else {\n                when (e) {\n                    is ApiException -> it.showError(e.toString())\n                    is SocketTimeoutException -> it.showError(\"服务器响应超时ヽ(≧Д≦)ノ\")\n                    is HttpException -> view.showError(\"数据加载失败ヽ(≧Д≦)ノ\")\n                    else -> {\n                        it.showError(\"未知错误ヽ(≧Д≦)ノ\")\n                        LogUtils.e(\"MYERROR:\" + e.toString())\n                    }\n                }\n            }\n        } ?: return\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseObjectSubscriber.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport com.yoyiyi.soleil.network.exception.ApiException\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.LogUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport io.reactivex.subscribers.ResourceSubscriber\nimport retrofit2.HttpException\nimport java.net.SocketTimeoutException\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 11:40\n * * 描述:统一处理订阅者\n */\n\nabstract class BaseObjectSubscriber<T>(private val view: BaseContract.BaseView?) : ResourceSubscriber<HttpResponse<T>>() {\n\n\n    private var msg: String? = null\n\n\n    constructor(view: BaseContract.BaseView?, msg: String?) : this(view) {\n        this.msg = msg\n    }\n\n    abstract fun onSuccess(t: T)\n\n    fun onFailure(code: Int, message: String) {\n\n    }\n\n    override fun onStart() {\n        super.onStart()\n        if (!NetworkUtils.isConnected(AppUtils.getAppContext())) {\n            // Logger.d(\"没有网络\");\n        } else {\n\n        }\n    }\n\n    override fun onComplete() {\n\n    }\n\n    override fun onNext(response: HttpResponse<T>) {\n        view ?: return\n        view.complete()\n        if (response.code == 0) {\n            response.data?.let { onSuccess(it) }\n            response.result?.let { onSuccess(it) }\n        } else {\n            //可以不处理任何东西\n            onFailure(response.code, response.message ?: \"未知错误\")\n        }\n    }\n\n\n    override fun onError(e: Throwable) {\n        view?.let {\n            if (!msg.isNullOrEmpty()) it.showError(msg!!)\n            else {\n                when (e) {\n                    is ApiException -> it.showError(e.toString())\n                    is SocketTimeoutException -> it.showError(\"服务器响应超时ヽ(≧Д≦)ノ\")\n                    is HttpException -> view.showError(\"数据加载失败ヽ(≧Д≦)ノ\")\n                    else -> {\n                        it.showError(\"未知错误ヽ(≧Д≦)ノ\")\n                        LogUtils.e(\"MYERROR:\" + e.toString())\n                    }\n                }\n            }\n        } ?: return\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseRefreshActivity.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport android.support.v4.widget.SwipeRefreshLayout\nimport android.support.v7.widget.RecyclerView\nimport android.view.View\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.widget.ProgressWheel\nimport org.jetbrains.anko.toast\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/6/5 22:43\n * 描述:基础刷新Activity\n */\nabstract class BaseRefreshActivity<T : BaseContract.BasePresenter<*>, K> : BaseInjectActivity<T>(), SwipeRefreshLayout.OnRefreshListener {\n    protected var mRecycler: RecyclerView? = null\n    protected var mRefresh: SwipeRefreshLayout? = null\n    protected var mIsRefreshing = false\n    protected var mList: MutableList<K>? = ArrayList()\n    private var mLoading: ProgressWheel? = null\n\n    protected fun initRefreshLayout() {\n        mRefresh?.let {\n            it.setColorSchemeResources(R.color.colorPrimary)\n            mRecycler?.post {\n               it.isRefreshing = true\n                loadData()\n            }\n            it.setOnRefreshListener(this)\n        }\n    }\n\n\n    override fun initWidget() {\n        mRefresh = findViewById(R.id.refresh) as? SwipeRefreshLayout\n        mRecycler = findViewById(R.id.recycler) as? RecyclerView\n        mLoading = findViewById(R.id.pw_loading) as? ProgressWheel\n        initRefreshLayout()\n        initRecyclerView()\n    }\n\n    override fun onRefresh() {\n        clearData()\n        loadData()\n    }\n\n    protected open fun clearData() {\n        mIsRefreshing = true\n    }\n\n    override fun complete() {\n        super.complete()\n        AppUtils.runOnUIDelayed({ mRefresh?.isRefreshing = false }, 650)\n        if (mIsRefreshing) {\n            mList?.clear()\n            clear()\n            toast(\"刷新成功\")\n        }\n        mIsRefreshing = false\n        mLoading?.visibility = View.GONE\n    }\n\n    protected open fun clear() {\n\n    }\n\n    override fun initDatas() {\n        mRefresh?.let {\n            mLoading?.let {\n                it.visibility = View.VISIBLE\n                AppUtils.runOnUIDelayed({ loadData() }, 650)\n            }\n        }?: super.initDatas()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseRefreshFragment.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport android.os.Bundle\nimport android.support.v4.widget.SwipeRefreshLayout\nimport android.support.v7.widget.RecyclerView\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.utils.AppUtils\nimport org.jetbrains.anko.toast\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/15 11:13\n * * 描述:基础刷新的Fragment\n */\n\nabstract class BaseRefreshFragment<T : BaseContract.BasePresenter<*>, K> : BaseInjectFragment<T>(), SwipeRefreshLayout.OnRefreshListener {\n    protected var mRecycler: RecyclerView? = null\n    protected var mRefresh: SwipeRefreshLayout? = null\n    protected var mIsRefreshing = false\n    protected var mList = mutableListOf<K>()\n\n    override fun initRefreshLayout() {\n        mRefresh?.let {\n            it.setColorSchemeResources(R.color.colorPrimary)\n            mRecycler?.post {\n                it.isRefreshing = true\n                lazyLoadData()\n            }\n            it.setOnRefreshListener(this)\n        }\n    }\n\n    override fun onRefresh() {\n        clearData()\n        lazyLoadData()\n    }\n\n\n    override fun clearData() {\n        mIsRefreshing = true\n\n    }\n\n    override fun finishCreateView(state: Bundle?) {\n        mRefresh = mRootView?.findViewById(R.id.refresh) as SwipeRefreshLayout?\n        mRecycler = mRootView?.findViewById(R.id.recycler) as RecyclerView?\n        mIsPrepared = true\n        lazyLoad()\n    }\n\n    override fun lazyLoad() {\n        if (!mIsPrepared || !mIsVisible) return@lazyLoad\n        initRefreshLayout()\n        initRecyclerView()\n        mRefresh ?: lazyLoadData()\n        mIsPrepared = false\n    }\n\n    override fun complete() {\n        super.complete()\n        AppUtils.runOnUIDelayed({ mRefresh?.let { it.isRefreshing = false } }, 650)\n        if (mIsRefreshing) {\n            mList.clear()\n            clear()\n            getApplicationContext()?.toast(\"刷新成功\")\n        }\n        mIsRefreshing = false\n    }\n\n    protected open fun clear() {\n\n    }\n\n\n    override fun initWidget() {\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/BaseSubscriber.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport com.yoyiyi.soleil.network.exception.ApiException\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.LogUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport io.reactivex.subscribers.ResourceSubscriber\nimport retrofit2.HttpException\nimport java.net.SocketTimeoutException\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/12 11:40\n * 描述:统一处理订阅者\n */\n\nabstract class BaseSubscriber<T>(private val view: BaseContract.BaseView?) : ResourceSubscriber<T>() {\n\n    private var msg: String? = null\n\n    abstract fun onSuccess(t: T)\n\n    constructor(view: BaseContract.BaseView?, msg: String?) : this(view) {\n        this.msg = msg\n    }\n\n    open fun onFailure(code: Int, message: String) {\n\n    }\n\n    override fun onStart() {\n        super.onStart()\n        if (!NetworkUtils.isConnected(AppUtils.getAppContext())) {\n            // Logger.d(\"没有网络\");\n        } else {\n\n        }\n    }\n\n    override fun onComplete() {\n\n    }\n\n    override fun onNext(response: T) {\n        view?.let {\n            it.complete()\n            onSuccess(response)\n        } ?: return@onNext\n    }\n\n\n    override fun onError(e: Throwable) {\n        view?.let {\n            if (!msg.isNullOrEmpty()) it.showError(msg!!)\n            else {\n                when (e) {\n                    is ApiException -> it.showError(e.toString())\n                    is SocketTimeoutException -> it.showError(\"服务器响应超时ヽ(≧Д≦)ノ\")\n                    is HttpException -> it.showError(\"数据加载失败ヽ(≧Д≦)ノ\")\n                    else -> {\n                        view.showError(\"未知错误ヽ(≧Д≦)ノ\")\n                        LogUtils.e(\"MYERROR:\" + e.toString())\n                    }\n                }\n            }\n        } ?: return\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/base/RxPresenter.kt",
    "content": "package com.yoyiyi.soleil.base\n\nimport com.yoyiyi.soleil.rx.RxBus\nimport io.reactivex.disposables.CompositeDisposable\nimport io.reactivex.disposables.Disposable\nimport io.reactivex.functions.Consumer\n\n/**\n * Created by zzq on 2016/12/20.\n * 基于Rx的Presenter封装,控制订阅的生命周期\n */\nopen class RxPresenter<T : BaseContract.BaseView> : BaseContract.BasePresenter<T> {\n\n    var mView: T? = null\n    var mCompositeDisposable: CompositeDisposable? = null\n\n    fun unSubscribe() {\n        mCompositeDisposable?.dispose()\n    }\n\n    fun addSubscribe(disposable: Disposable) {\n        if (mCompositeDisposable == null) {\n            mCompositeDisposable = CompositeDisposable()\n        } else {\n            mCompositeDisposable?.add(disposable)\n        }\n    }\n\n    fun <K> addRxBusSubscribe(eventType: Class<K>, act: Consumer<K>) {\n        if (mCompositeDisposable == null) {\n            mCompositeDisposable = CompositeDisposable()\n        } else {\n            mCompositeDisposable?.add(RxBus.toDefaultFlowable(eventType, act))\n        }\n    }\n\n    override fun detachView() {\n        this.mView = null\n        unSubscribe()\n    }\n\n    override fun attachView(view: T) {\n        this.mView = view\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/Recommend.kt",
    "content": "package com.yoyiyi.soleil.bean.app\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/7/20 17:10\n * 描述:\n */\ndata class Recommend(var code: Int,\n                     var message: String,\n                     var ttl: Int,\n                     var data: List<Data>) {\n    data class Data(var param: String,\n                    var `type`: String,\n                    var style: String,\n                    var title: String,\n                    var body: List<Body>) {\n        data class Body(var title: String,\n                        var cover: String,\n                        var uri: String,\n                        var param: String,\n                        var goto: String,\n                        var play: Int,\n                        var index: String,\n                        var total_count: String,\n                        var mtime: String,\n                        var status: Int,\n                        var favourite: Int,\n                        var is_ad: Boolean,\n                        var cm_mark: Int)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/Splash.kt",
    "content": "package com.yoyiyi.soleil.bean.app\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/7/20 17:15\n * 描述:欢迎界面\n */\ndata class Splash(var code: Int,\n                  var message: String,\n                  var ttl: Int,\n                  var ver: String,\n                  var data: List<Data>) {\n    data class Data(var id: Int,\n                    var `type`: Int,\n                    var animate: Int,\n                    var duration: Int,\n                    var start_time: Int,\n                    var end_time: Int,\n                    var thumb: String,\n                    var hash: String,\n                    var times: Int,\n                    var skip: Int,\n                    var uri: String)\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/video/MulComment.kt",
    "content": "package com.yoyiyi.soleil.bean.app.video\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/15 10:08\n * * 描述:\n */\n\nclass MulComment(var itemTypez: Int = 0,\n        var hotsBean: VideoDetailComment.DataBean.HotsBean? = null,\n        var repliesBean: VideoDetailComment.DataBean.RepliesBean? = null)\n    : MultiItemEntity {\n\n\n\n    override fun getItemType(): Int = itemTypez\n\n\n    companion object {\n\n\n        val TYPE_COMMENT_HOT_ITEM = 2\n\n        val TYPE_COMMENT_MORE = 3\n\n        val TYPE_COMMENT_NOMAL_ITEM = 4\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/video/MulSummary.kt",
    "content": "package com.yoyiyi.soleil.bean.app.video\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/15 10:08\n * * 描述:\n */\n\nclass MulSummary(var itemTypez: Int = 0,\n                 var desc: String? = null,\n                 var title: String? = null,\n                 var tags: List<VideoDetail.DataBean.TagBean>? = null, //标签\n                 var state: VideoDetail.DataBean.StatBean? = null, //硬币 播放相关\n                 var relates: VideoDetail.DataBean.RelatesBean? = null, //视频推荐\n                 var ctime: Long = 0,\n                 var owner: VideoDetail.DataBean.OwnerBean?= null) : MultiItemEntity {\n\n\n    override fun getItemType(): Int = itemTypez\n\n\n    companion object {\n\n        val TYPE_DES = 34\n        val TYPE_OWNER = 35\n        val TYPE_RELATE = 36\n        val TYPE_RELATE_HEAD = 37\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/video/VideoDetail.kt",
    "content": "package com.yoyiyi.soleil.bean.app.video\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 14:48\n * * 描述:视频详情\n */\n\ndata class VideoDetail(var code: Int,\n                       var data: DataBean,\n                       var message: String,\n                       var ttl: Int) {\n\n    /**\n     * code : 0\n     * data : {\"aid\":9938411,\"videos\":1,\"tid\":17,\"tname\":\"单机联机\",\"copyright\":1,\"pic\":\"http://i1.hdslb.com/bfs/archive/f350374ac3a130aec3c92e608fc3c72d72340394.jpg\",\"title\":\"【纯黑】《我能吹一年》无伤吃鸡攻略解说？\",\"pubdate\":1492539219,\"ctime\":1497424534,\"desc\":\"纯黑直播间：www.zhanqi.tv/666666 \\n\\n新浪微博：weibo.com/chunheigk  \\n\\n纯黑零食店：chlsd.taobao.com\",\"state\":0,\"attribute\":49152,\"tags\":null,\"duration\":1319,\"rights\":{\"bp\":0,\"elec\":1,\"download\":1,\"movie\":0,\"pay\":0,\"hd5\":0,\"no_reprint\":0},\"owner\":{\"mid\":585267,\"name\":\"纯黑叔\",\"face\":\"http://i1.hdslb.com/bfs/face/e8ab7b02d6576f4141ea857734b68b9dd35a5730.jpg\"},\"stat\":{\"aid\":9938411,\"view\":827412,\"danmaku\":6411,\"reply\":3663,\"favorite\":3362,\"coin\":15516,\"share\":658,\"now_rank\":0,\"his_rank\":3},\"pages\":[{\"cid\":16428959,\"page\":1,\"from\":\"vupload\",\"part\":\"\",\"duration\":1319,\"vid\":\"\",\"weblink\":\"\",\"metas\":[{\"quality\":1,\"format\":\"mp4\",\"size\":102288},{\"quality\":2,\"format\":\"hdmp4\",\"size\":240849},{\"quality\":3,\"format\":\"flv\",\"size\":470091},{\"quality\":4,\"format\":\"flv\",\"size\":760271}],\"dmlink\":\"http://comment.bilibili.com/16428959.xml\"}],\"dislike_reasons\":[{\"reason_id\":5,\"reason_name\":\"标题党/封面党\"},{\"reason_id\":6,\"reason_name\":\"内容质量差\"},{\"reason_id\":7,\"reason_name\":\"内容/封面令人不适\"},{\"reason_id\":8,\"reason_name\":\"营销广告\"}],\"owner_ext\":{\"vip\":{\"vipType\":1,\"vipDueDate\":1504195200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":1,\"vipStatusWarn\":\"\"},\"fans\":1391942},\"req_user\":{\"attention\":-999,\"favorite\":0},\"tag\":[{\"tag_id\":723488,\"tag_name\":\"失踪人口回归！\"},{\"tag_id\":125158,\"tag_name\":\"纯黑\"},{\"tag_id\":3419954,\"tag_name\":\"无伤吃鸡\"},{\"tag_id\":54705,\"tag_name\":\"大逃杀\"},{\"tag_id\":3428143,\"tag_name\":\"大吉大利，晚上吃鸡\"},{\"tag_id\":3243689,\"tag_name\":\"绝地求生\"},{\"tag_id\":3473367,\"tag_name\":\"HANDSOMEBlack\"}],\"elec\":{\"show\":true,\"total\":10065,\"count\":83,\"elec_num\":0,\"elec_set\":{\"elec_theme\":0,\"rmb_rate\":10,\"integrity_rate\":10,\"round_mode\":0,\"elec_list\":[{\"title\":\"20电池\",\"elec_num\":20,\"is_customize\":0},{\"title\":\"60电池\",\"elec_num\":60,\"is_customize\":0},{\"title\":\"450电池\",\"elec_num\":450,\"is_customize\":0},{\"title\":\"880电池\",\"elec_num\":880,\"is_customize\":0},{\"title\":\"自定义\",\"elec_num\":0,\"is_customize\":1,\"min_elec\":20,\"max_elec\":99999}]}},\"relates\":[{\"aid\":2165903,\"pic\":\"http://i1.hdslb.com/bfs/archive/7241c7de343ba7b106c39c2d2de30f15caa45640.jpg\",\"title\":\"本视频将封印至17年愚人节\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":563330,\"danmaku\":6794,\"reply\":12844,\"favorite\":6363,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":9083821,\"pic\":\"http://i1.hdslb.com/bfs/archive/a55c668ab2eda23c535e0db49fa97ca762cd1b21.jpg\",\"title\":\"震惊！！听说纯黑又爆（nve）照（fen）了！！？\",\"owner\":{\"mid\":0,\"name\":\"世界Wir\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":110118,\"danmaku\":129,\"reply\":189,\"favorite\":669,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":6984920,\"pic\":\"http://i1.hdslb.com/bfs/archive/84308b4028ebdcf7a3528d6fc2efeed25edaed95.jpg\",\"title\":\"使用VR泄欲的正确姿势 ＃何悠悠玩VR＃\",\"owner\":{\"mid\":0,\"name\":\"何悠悠玩VR\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":926137,\"danmaku\":1080,\"reply\":1386,\"favorite\":2896,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10007398,\"pic\":\"http://i2.hdslb.com/bfs/archive/046e1174a2ea66bb18b981b63c294ebbf89ad29f.png\",\"title\":\"【拔总】来自肌肉猛男的么么哒\",\"owner\":{\"mid\":0,\"name\":\"拔总zz\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":23801,\"danmaku\":379,\"reply\":217,\"favorite\":171,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":1707128,\"pic\":\"http://i0.hdslb.com/bfs/archive/79b8d5490c8caf7037c3c567da33cc5f52f58752.jpg\",\"title\":\"纯黑《刺客信条：大革命》第一期 完美同步攻略解说\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":1370296,\"danmaku\":32036,\"reply\":1985,\"favorite\":7943,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":5100283,\"pic\":\"http://i2.hdslb.com/bfs/archive/31d043e2863493f5f986e00b21d1a266f309b66d.jpg\",\"title\":\"纯黑《神秘海域4》惨烈超难攻略解说 第七期\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":644622,\"danmaku\":19122,\"reply\":4147,\"favorite\":3769,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10434593,\"pic\":\"http://i2.hdslb.com/bfs/archive/04ffab757544a1624a3a793be84a5083f838796f.jpg\",\"title\":\"《绝地求生大逃杀》还有这种吃鸡的方法？！\",\"owner\":{\"mid\":0,\"name\":\"折腾5号\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":38041,\"danmaku\":547,\"reply\":215,\"favorite\":96,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":7685893,\"pic\":\"http://i1.hdslb.com/bfs/archive/49d8ff0b83d7f440c6d9cbc855dc4d77863244af.jpg\",\"title\":\"【陈瀚Siri】闲逛英国圣诞节市场\",\"owner\":{\"mid\":0,\"name\":\"陈瀚Siri\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":20200,\"danmaku\":651,\"reply\":371,\"favorite\":148,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10370651,\"pic\":\"http://i1.hdslb.com/bfs/archive/e1119f6726578b6ae8c643bb1bf1d608bf082ef7.jpg\",\"title\":\"【轩雨星晴语音解说】精灵宝可梦日月6V6对战实况05\",\"owner\":{\"mid\":0,\"name\":\"轩雨星晴\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":1467,\"danmaku\":89,\"reply\":69,\"favorite\":4,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":3852397,\"pic\":\"http://i0.hdslb.com/bfs/archive/2090debbd2b07a9d554b18eec22f50f0da0ec7d1.jpg\",\"title\":\"纯黑《零：濡鸦之巫女》第一期 乳摇的污女\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":779638,\"danmaku\":32756,\"reply\":3492,\"favorite\":6226,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10151928,\"pic\":\"http://i0.hdslb.com/bfs/archive/6001bf94a2ee8d58056b6a3fd4107a4badb40227.jpg\",\"title\":\"【敖厂长】腾讯游戏惨遭停运\",\"owner\":{\"mid\":0,\"name\":\"敖厂长\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":1967237,\"danmaku\":24730,\"reply\":9732,\"favorite\":5558,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10520722,\"pic\":\"http://i0.hdslb.com/bfs/archive/82626ba9034eac2a2e8b9882861a53447e1e05c0.jpg\",\"title\":\"【C菌】分手! 那些和朋友玩了就会撕哔的游戏!【第二期】\",\"owner\":{\"mid\":0,\"name\":\"渗透之C君\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":813535,\"danmaku\":22785,\"reply\":5376,\"favorite\":3747,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":11159467,\"pic\":\"http://i2.hdslb.com/bfs/archive/f0832d98d695c45297d3597f5c474d41936bc530.jpg\",\"title\":\"【游戏集锦】那些意外搞笑的游戏失败瞬间 133 It's Spiderman!\",\"owner\":{\"mid\":0,\"name\":\"袜子ψ(｀∇´)ψ\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":499908,\"danmaku\":2813,\"reply\":397,\"favorite\":6688,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10204083,\"pic\":\"http://i0.hdslb.com/bfs/archive/b542297a9f88270c717b5de11dfa6764e063c6ae.jpg\",\"title\":\"【纯黑】《逃生2》直播录像P5 血雨腥风\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":341422,\"danmaku\":16327,\"reply\":2793,\"favorite\":1373,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":3952940,\"pic\":\"http://i1.hdslb.com/bfs/archive/70c348a1c5d2fce58506735cc040463328b3f77b.jpg\",\"title\":\"纯黑《零：濡鸦之巫女》第二期 湿身的污女\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":286055,\"danmaku\":7823,\"reply\":1824,\"favorite\":2133,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":8165165,\"pic\":\"http://i1.hdslb.com/bfs/archive/5349e34c375e993743f3988bbbf3c95c8525cd50.jpg\",\"title\":\"纯黑直播《返校》我不怂的恐怖游戏 P2\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":325771,\"danmaku\":12923,\"reply\":1729,\"favorite\":1595,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":8145597,\"pic\":\"http://i1.hdslb.com/bfs/archive/9619104d06012b74f256923a9b212d5b344e1b1e.jpg\",\"title\":\"纯黑直播《返校》我完全不怂的恐怖游戏\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":688632,\"danmaku\":29298,\"reply\":3133,\"favorite\":4927,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":8306491,\"pic\":\"http://i1.hdslb.com/bfs/archive/591fe61e3e20ba8dbb06884369576ccd1baf9e8e.jpg\",\"title\":\"纯黑直播《返校》我不怂的惊悚游戏 P4\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":233841,\"danmaku\":10583,\"reply\":2209,\"favorite\":866,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":11103774,\"pic\":\"http://i1.hdslb.com/bfs/archive/bb3c35d4128fa3ea606897206b6f7eae5e219301.jpg\",\"title\":\"主播真会玩主机篇07：听说你是刺客大师？\",\"owner\":{\"mid\":0,\"name\":\"起小点是大腿\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":399020,\"danmaku\":6612,\"reply\":1680,\"favorite\":448,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10033090,\"pic\":\"http://i2.hdslb.com/bfs/archive/7ed762519c4c44b78bb3c3948bc9e4f1060c6600.jpg\",\"title\":\"【老E】职业老王VS绿帽王\",\"owner\":{\"mid\":0,\"name\":\"EdmundDZhang\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":734743,\"danmaku\":9780,\"reply\":3672,\"favorite\":3359,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}}]}\n     * message :\n     * ttl : 1\n     */\n\n\n    data class DataBean(var aid: Int,\n                        var videos: Int,\n                        var tid: Int,\n                        var tname: String,\n                        var copyright: Int,\n                        var pic: String,\n                        var title: String,\n                        var pubdate: Int,\n                        var ctime: Long,\n                        var desc: String,\n                        var state: Int,\n                        var attribute: Int,\n                        var tags: Any,\n                        var duration: Int,\n                        var rights: RightsBean,\n                        var owner: OwnerBean,\n                        var stat: StatBean,\n                        var owner_ext: OwnerExtBean,\n                        var req_user: ReqUserBean,\n                        var elec: ElecBean,\n                        var pages: List<PagesBean>,\n                        var dislike_reasons: List<DislikeReasonsBean>,\n                        var tag: List<TagBean>,\n                        var relates: List<RelatesBean>) {\n        /**\n         * aid : 9938411\n         * videos : 1\n         * tid : 17\n         * tname : 单机联机\n         * copyright : 1\n         * pic : http://i1.hdslb.com/bfs/archive/f350374ac3a130aec3c92e608fc3c72d72340394.jpg\n         * title : 【纯黑】《我能吹一年》无伤吃鸡攻略解说？\n         * pubdate : 1492539219\n         * ctime : 1497424534\n         * desc : 纯黑直播间：www.zhanqi.tv/666666\n\n         * 新浪微博：weibo.com/chunheigk\n\n         * 纯黑零食店：chlsd.taobao.com\n         * state : 0\n         * attribute : 49152\n         * tags : null\n         * duration : 1319\n         * rights : {\"bp\":0,\"elec\":1,\"download\":1,\"movie\":0,\"pay\":0,\"hd5\":0,\"no_reprint\":0}\n         * owner : {\"mid\":585267,\"name\":\"纯黑叔\",\"face\":\"http://i1.hdslb.com/bfs/face/e8ab7b02d6576f4141ea857734b68b9dd35a5730.jpg\"}\n         * stat : {\"aid\":9938411,\"view\":827412,\"danmaku\":6411,\"reply\":3663,\"favorite\":3362,\"coin\":15516,\"share\":658,\"now_rank\":0,\"his_rank\":3}\n         * pages : [{\"cid\":16428959,\"page\":1,\"from\":\"vupload\",\"part\":\"\",\"duration\":1319,\"vid\":\"\",\"weblink\":\"\",\"metas\":[{\"quality\":1,\"format\":\"mp4\",\"size\":102288},{\"quality\":2,\"format\":\"hdmp4\",\"size\":240849},{\"quality\":3,\"format\":\"flv\",\"size\":470091},{\"quality\":4,\"format\":\"flv\",\"size\":760271}],\"dmlink\":\"http://comment.bilibili.com/16428959.xml\"}]\n         * dislike_reasons : [{\"reason_id\":5,\"reason_name\":\"标题党/封面党\"},{\"reason_id\":6,\"reason_name\":\"内容质量差\"},{\"reason_id\":7,\"reason_name\":\"内容/封面令人不适\"},{\"reason_id\":8,\"reason_name\":\"营销广告\"}]\n         * owner_ext : {\"vip\":{\"vipType\":1,\"vipDueDate\":1504195200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":1,\"vipStatusWarn\":\"\"},\"fans\":1391942}\n         * req_user : {\"attention\":-999,\"favorite\":0}\n         * tag : [{\"tag_id\":723488,\"tag_name\":\"失踪人口回归！\"},{\"tag_id\":125158,\"tag_name\":\"纯黑\"},{\"tag_id\":3419954,\"tag_name\":\"无伤吃鸡\"},{\"tag_id\":54705,\"tag_name\":\"大逃杀\"},{\"tag_id\":3428143,\"tag_name\":\"大吉大利，晚上吃鸡\"},{\"tag_id\":3243689,\"tag_name\":\"绝地求生\"},{\"tag_id\":3473367,\"tag_name\":\"HANDSOMEBlack\"}]\n         * elec : {\"show\":true,\"total\":10065,\"count\":83,\"elec_num\":0,\"elec_set\":{\"elec_theme\":0,\"rmb_rate\":10,\"integrity_rate\":10,\"round_mode\":0,\"elec_list\":[{\"title\":\"20电池\",\"elec_num\":20,\"is_customize\":0},{\"title\":\"60电池\",\"elec_num\":60,\"is_customize\":0},{\"title\":\"450电池\",\"elec_num\":450,\"is_customize\":0},{\"title\":\"880电池\",\"elec_num\":880,\"is_customize\":0},{\"title\":\"自定义\",\"elec_num\":0,\"is_customize\":1,\"min_elec\":20,\"max_elec\":99999}]}}\n         * relates : [{\"aid\":2165903,\"pic\":\"http://i1.hdslb.com/bfs/archive/7241c7de343ba7b106c39c2d2de30f15caa45640.jpg\",\"title\":\"本视频将封印至17年愚人节\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":563330,\"danmaku\":6794,\"reply\":12844,\"favorite\":6363,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":9083821,\"pic\":\"http://i1.hdslb.com/bfs/archive/a55c668ab2eda23c535e0db49fa97ca762cd1b21.jpg\",\"title\":\"震惊！！听说纯黑又爆（nve）照（fen）了！！？\",\"owner\":{\"mid\":0,\"name\":\"世界Wir\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":110118,\"danmaku\":129,\"reply\":189,\"favorite\":669,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":6984920,\"pic\":\"http://i1.hdslb.com/bfs/archive/84308b4028ebdcf7a3528d6fc2efeed25edaed95.jpg\",\"title\":\"使用VR泄欲的正确姿势 ＃何悠悠玩VR＃\",\"owner\":{\"mid\":0,\"name\":\"何悠悠玩VR\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":926137,\"danmaku\":1080,\"reply\":1386,\"favorite\":2896,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10007398,\"pic\":\"http://i2.hdslb.com/bfs/archive/046e1174a2ea66bb18b981b63c294ebbf89ad29f.png\",\"title\":\"【拔总】来自肌肉猛男的么么哒\",\"owner\":{\"mid\":0,\"name\":\"拔总zz\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":23801,\"danmaku\":379,\"reply\":217,\"favorite\":171,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":1707128,\"pic\":\"http://i0.hdslb.com/bfs/archive/79b8d5490c8caf7037c3c567da33cc5f52f58752.jpg\",\"title\":\"纯黑《刺客信条：大革命》第一期 完美同步攻略解说\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":1370296,\"danmaku\":32036,\"reply\":1985,\"favorite\":7943,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":5100283,\"pic\":\"http://i2.hdslb.com/bfs/archive/31d043e2863493f5f986e00b21d1a266f309b66d.jpg\",\"title\":\"纯黑《神秘海域4》惨烈超难攻略解说 第七期\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":644622,\"danmaku\":19122,\"reply\":4147,\"favorite\":3769,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10434593,\"pic\":\"http://i2.hdslb.com/bfs/archive/04ffab757544a1624a3a793be84a5083f838796f.jpg\",\"title\":\"《绝地求生大逃杀》还有这种吃鸡的方法？！\",\"owner\":{\"mid\":0,\"name\":\"折腾5号\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":38041,\"danmaku\":547,\"reply\":215,\"favorite\":96,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":7685893,\"pic\":\"http://i1.hdslb.com/bfs/archive/49d8ff0b83d7f440c6d9cbc855dc4d77863244af.jpg\",\"title\":\"【陈瀚Siri】闲逛英国圣诞节市场\",\"owner\":{\"mid\":0,\"name\":\"陈瀚Siri\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":20200,\"danmaku\":651,\"reply\":371,\"favorite\":148,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10370651,\"pic\":\"http://i1.hdslb.com/bfs/archive/e1119f6726578b6ae8c643bb1bf1d608bf082ef7.jpg\",\"title\":\"【轩雨星晴语音解说】精灵宝可梦日月6V6对战实况05\",\"owner\":{\"mid\":0,\"name\":\"轩雨星晴\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":1467,\"danmaku\":89,\"reply\":69,\"favorite\":4,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":3852397,\"pic\":\"http://i0.hdslb.com/bfs/archive/2090debbd2b07a9d554b18eec22f50f0da0ec7d1.jpg\",\"title\":\"纯黑《零：濡鸦之巫女》第一期 乳摇的污女\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":779638,\"danmaku\":32756,\"reply\":3492,\"favorite\":6226,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10151928,\"pic\":\"http://i0.hdslb.com/bfs/archive/6001bf94a2ee8d58056b6a3fd4107a4badb40227.jpg\",\"title\":\"【敖厂长】腾讯游戏惨遭停运\",\"owner\":{\"mid\":0,\"name\":\"敖厂长\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":1967237,\"danmaku\":24730,\"reply\":9732,\"favorite\":5558,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10520722,\"pic\":\"http://i0.hdslb.com/bfs/archive/82626ba9034eac2a2e8b9882861a53447e1e05c0.jpg\",\"title\":\"【C菌】分手! 那些和朋友玩了就会撕哔的游戏!【第二期】\",\"owner\":{\"mid\":0,\"name\":\"渗透之C君\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":813535,\"danmaku\":22785,\"reply\":5376,\"favorite\":3747,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":11159467,\"pic\":\"http://i2.hdslb.com/bfs/archive/f0832d98d695c45297d3597f5c474d41936bc530.jpg\",\"title\":\"【游戏集锦】那些意外搞笑的游戏失败瞬间 133 It's Spiderman!\",\"owner\":{\"mid\":0,\"name\":\"袜子ψ(｀∇´)ψ\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":499908,\"danmaku\":2813,\"reply\":397,\"favorite\":6688,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10204083,\"pic\":\"http://i0.hdslb.com/bfs/archive/b542297a9f88270c717b5de11dfa6764e063c6ae.jpg\",\"title\":\"【纯黑】《逃生2》直播录像P5 血雨腥风\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":341422,\"danmaku\":16327,\"reply\":2793,\"favorite\":1373,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":3952940,\"pic\":\"http://i1.hdslb.com/bfs/archive/70c348a1c5d2fce58506735cc040463328b3f77b.jpg\",\"title\":\"纯黑《零：濡鸦之巫女》第二期 湿身的污女\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":286055,\"danmaku\":7823,\"reply\":1824,\"favorite\":2133,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":8165165,\"pic\":\"http://i1.hdslb.com/bfs/archive/5349e34c375e993743f3988bbbf3c95c8525cd50.jpg\",\"title\":\"纯黑直播《返校》我不怂的恐怖游戏 P2\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":325771,\"danmaku\":12923,\"reply\":1729,\"favorite\":1595,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":8145597,\"pic\":\"http://i1.hdslb.com/bfs/archive/9619104d06012b74f256923a9b212d5b344e1b1e.jpg\",\"title\":\"纯黑直播《返校》我完全不怂的恐怖游戏\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":688632,\"danmaku\":29298,\"reply\":3133,\"favorite\":4927,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":8306491,\"pic\":\"http://i1.hdslb.com/bfs/archive/591fe61e3e20ba8dbb06884369576ccd1baf9e8e.jpg\",\"title\":\"纯黑直播《返校》我不怂的惊悚游戏 P4\",\"owner\":{\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":233841,\"danmaku\":10583,\"reply\":2209,\"favorite\":866,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":11103774,\"pic\":\"http://i1.hdslb.com/bfs/archive/bb3c35d4128fa3ea606897206b6f7eae5e219301.jpg\",\"title\":\"主播真会玩主机篇07：听说你是刺客大师？\",\"owner\":{\"mid\":0,\"name\":\"起小点是大腿\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":399020,\"danmaku\":6612,\"reply\":1680,\"favorite\":448,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}},{\"aid\":10033090,\"pic\":\"http://i2.hdslb.com/bfs/archive/7ed762519c4c44b78bb3c3948bc9e4f1060c6600.jpg\",\"title\":\"【老E】职业老王VS绿帽王\",\"owner\":{\"mid\":0,\"name\":\"EdmundDZhang\",\"face\":\"\"},\"stat\":{\"aid\":0,\"view\":734743,\"danmaku\":9780,\"reply\":3672,\"favorite\":3359,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}}]\n         */\n\n\n        data class RightsBean(var bp: Int,\n                              var elec: Int,\n                              var download: Int,\n                              var movie: Int,\n                              var pay: Int,\n                              var hd5: Int,\n                              var no_reprint: Int) {\n            /**\n             * bp : 0\n             * elec : 1\n             * download : 1\n             * movie : 0\n             * pay : 0\n             * hd5 : 0\n             * no_reprint : 0\n             */\n\n\n        }\n\n        data class OwnerBean(var mid: Int,\n                             var name: String,\n                             var face: String) {\n            /**\n             * mid : 585267\n             * name : 纯黑叔\n             * face : http://i1.hdslb.com/bfs/face/e8ab7b02d6576f4141ea857734b68b9dd35a5730.jpg\n             */\n\n\n        }\n\n        data class StatBean(var aid: Int,\n                            var view: Int,\n                            var danmaku: Int,\n                            var reply: Int,\n                            var favorite: Int,\n                            var coin: Int,\n                            var share: Int,\n                            var now_rank: Int,\n                            var his_rank: Int) {\n            /**\n             * aid : 9938411\n             * view : 827412\n             * danmaku : 6411\n             * reply : 3663\n             * favorite : 3362\n             * coin : 15516\n             * share : 658\n             * now_rank : 0\n             * his_rank : 3\n             */\n\n\n        }\n\n        data class OwnerExtBean(var vip: VipBean,\n                                var fans: Int) {\n            /**\n             * vip : {\"vipType\":1,\"vipDueDate\":1504195200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":1,\"vipStatusWarn\":\"\"}\n             * fans : 1391942\n             */\n\n\n            data class VipBean(var vipType: Int,\n                               var vipDueDate: Long,\n                               var dueRemark: String,\n                               var accessStatus: Int,\n                               var vipStatus: Int,\n                               var vipStatusWarn: String) {\n                /**\n                 * vipType : 1\n                 * vipDueDate : 1504195200000\n                 * dueRemark :\n                 * accessStatus : 1\n                 * vipStatus : 1\n                 * vipStatusWarn :\n                 */\n\n\n            }\n        }\n\n        data class ReqUserBean(var attention: Int,\n                               var favorite: Int) {\n            /**\n             * attention : -999\n             * favorite : 0\n             */\n\n\n        }\n\n        data class ElecBean(var show: Boolean,\n                            var total: Int,\n                            var count: Int,\n                            var elec_num: Int,\n                            var elec_set: ElecSetBean) {\n            /**\n             * show : true\n             * total : 10065\n             * count : 83\n             * elec_num : 0\n             * elec_set : {\"elec_theme\":0,\"rmb_rate\":10,\"integrity_rate\":10,\"round_mode\":0,\"elec_list\":[{\"title\":\"20电池\",\"elec_num\":20,\"is_customize\":0},{\"title\":\"60电池\",\"elec_num\":60,\"is_customize\":0},{\"title\":\"450电池\",\"elec_num\":450,\"is_customize\":0},{\"title\":\"880电池\",\"elec_num\":880,\"is_customize\":0},{\"title\":\"自定义\",\"elec_num\":0,\"is_customize\":1,\"min_elec\":20,\"max_elec\":99999}]}\n             */\n\n\n            data class ElecSetBean(var elec_theme: Int,\n                                   var rmb_rate: Double,\n                                   var integrity_rate: Double,\n                                   var round_mode: Int,\n                                   var elec_list: List<ElecListBean>) {\n                /**\n                 * elec_theme : 0\n                 * rmb_rate : 10.0\n                 * integrity_rate : 10.0\n                 * round_mode : 0\n                 * elec_list : [{\"title\":\"20电池\",\"elec_num\":20,\"is_customize\":0},{\"title\":\"60电池\",\"elec_num\":60,\"is_customize\":0},{\"title\":\"450电池\",\"elec_num\":450,\"is_customize\":0},{\"title\":\"880电池\",\"elec_num\":880,\"is_customize\":0},{\"title\":\"自定义\",\"elec_num\":0,\"is_customize\":1,\"min_elec\":20,\"max_elec\":99999}]\n                 */\n\n\n                data class ElecListBean(var title: String,\n                                        var elec_num: Int,\n                                        var is_customize: Int,\n                                        var min_elec: Int,\n                                        var max_elec: Int) {\n                    /**\n                     * title : 20电池\n                     * elec_num : 20\n                     * is_customize : 0\n                     * min_elec : 20\n                     * max_elec : 99999\n                     */\n\n\n                }\n            }\n        }\n\n        data class PagesBean(var cid: Int,\n                             var page: Int,\n                             var from: String,\n                             var part: String,\n                             var duration: Int,\n                             var vid: String,\n                             var weblink: String,\n                             var dmlink: String,\n                             var metas: List<MetasBean>) {\n            /**\n             * cid : 16428959\n             * page : 1\n             * from : vupload\n             * part :\n             * duration : 1319\n             * vid :\n             * weblink :\n             * metas : [{\"quality\":1,\"format\":\"mp4\",\"size\":102288},{\"quality\":2,\"format\":\"hdmp4\",\"size\":240849},{\"quality\":3,\"format\":\"flv\",\"size\":470091},{\"quality\":4,\"format\":\"flv\",\"size\":760271}]\n             * dmlink : http://comment.bilibili.com/16428959.xml\n             */\n\n\n            data class MetasBean(var quality: Int,\n                                 var format: String,\n                                 var size: Int) {\n                /**\n                 * quality : 1\n                 * format : mp4\n                 * size : 102288\n                 */\n\n\n            }\n        }\n\n        data class DislikeReasonsBean(var reason_id: Int,\n                                      var reason_name: String) {\n            /**\n             * reason_id : 5\n             * reason_name : 标题党/封面党\n             */\n\n\n        }\n\n        data class TagBean(var tag_id: Int,\n                           var tag_name: String) {\n            /**\n             * tag_id : 723488\n             * tag_name : 失踪人口回归！\n             */\n\n\n        }\n\n        data class RelatesBean(var aid: Int,\n                               var pic: String,\n                               var title: String,\n                               var owner: OwnerBeanX,\n                               var stat: StatBeanX) {\n            /**\n             * aid : 2165903\n             * pic : http://i1.hdslb.com/bfs/archive/7241c7de343ba7b106c39c2d2de30f15caa45640.jpg\n             * title : 本视频将封印至17年愚人节\n             * owner : {\"mid\":0,\"name\":\"纯黑叔\",\"face\":\"\"}\n             * stat : {\"aid\":0,\"view\":563330,\"danmaku\":6794,\"reply\":12844,\"favorite\":6363,\"coin\":0,\"share\":0,\"now_rank\":0,\"his_rank\":0}\n             */\n\n\n            data class OwnerBeanX(var mid: Int,\n                                  var name: String,\n                                  var face: String) {\n                /**\n                 * mid : 0\n                 * name : 纯黑叔\n                 * face :\n                 */\n\n\n            }\n\n            data class StatBeanX(var aid: Int,\n                                 var view: Int,\n                                 var danmaku: Int,\n                                 var reply: Int,\n                                 var favorite: Int,\n                                 var coin: Int,\n                                 var share: Int,\n                                 var now_rank: Int,\n                                 var his_rank: Int) {\n                /**\n                 * aid : 0\n                 * view : 563330\n                 * danmaku : 6794\n                 * reply : 12844\n                 * favorite : 6363\n                 * coin : 0\n                 * share : 0\n                 * now_rank : 0\n                 * his_rank : 0\n                 */\n\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/video/VideoDetailComment.kt",
    "content": "package com.yoyiyi.soleil.bean.app.video\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 14:48\n * * 描述:视频详情评论\n */\n\ndata class VideoDetailComment(var code: Int,\n                              var data: VideoDetailComment.DataBean,\n                              var message: String,\n                              var ttl: Int) {\n\n    data class DataBean(var notice: Any,\n                        var page: PageBean,\n                        var top: Any,\n                        var upper: UpperBean,\n                        var hots: List<HotsBean>,\n                        var replies: List<RepliesBean>) {\n\n        /**\n         * hots : [{\"rpid\":239713209,\"oid\":9938411,\"type\":1,\"mid\":35666309,\"root\":0,\"parent\":0,\"count\":533,\"rcount\":527,\"floor\":546,\"state\":0,\"attr\":0,\"ctime\":1492540652,\"rpid_str\":\"239713209\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":9087,\"action\":0,\"member\":{\"mid\":\"35666309\",\"uname\":\"一只爱作死的鸡\",\"sex\":\"保密\",\"sign\":\"个性签名什么的好难写的，写多嫌麻烦，写少嫌不够，啊啊啊啊啊！\",\"avatar\":\"http://i2.hdslb.com/bfs/face/a076329348d82164c3f54598ee90239c17817d21.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3285,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"犹豫了很久我还是决定发一下全的\\n\\n纯黑改名顺序(╯°Д°)╯ \\n\\n纯黑酱→纯黑SAMA→纯黑君→纯黑桑→纯黑初号机→纯黑通行→纯黑神→纯黑神行→纯黑神行通→纯黑神行通机→纯黑神行通机号→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初桑君→纯黑昵称过长不能修改→纯黑少爷→纯黑大法好→纯黑老师→纯黑.奥迪托雷→纯黑.the ripper→纯黑骑士王→纯黑狂战士→纯黑大叔→纯黑哥居然被用了→纯黑叔\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":240261490,\"oid\":9938411,\"type\":1,\"mid\":698302,\"root\":0,\"parent\":0,\"count\":90,\"rcount\":87,\"floor\":2068,\"state\":6,\"attr\":4,\"ctime\":1492618071,\"rpid_str\":\"240261490\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1227,\"action\":0,\"member\":{\"mid\":\"698302\",\"uname\":\"偷抱走大和的提督姬\",\"sex\":\"保密\",\"sign\":\"最喜歡的是畫漫畫和搞音樂，失敗的是靈魂畫風以及死亡曲風；最努力的是越挫越勇永不放棄，挫敗的是在靈魂畫手以及死亡歌者的道路上越走越遠。。。。喵的，這個世界還跟不跟我過了，過不了就趕緊離了我找我家蓋亞去！\",\"avatar\":\"http://i2.hdslb.com/bfs/face/24e5569de190530331bb79add588127b5867fe9c.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":5,\"current_min\":10800,\"current_exp\":12070,\"next_exp\":28800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1489507200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2011\"},\"content\":{\"message\":\"我现在在b站，只从游戏区来说的话，打开弹幕我很害怕见到五种人：\\n第一种\\u2014\\u2014没玩过的人问什么问，想知道自己买游戏去；\\n第二种\\u2014\\u2014你懂不懂XX，不懂在这\\u2026\\u2026；\\n第三种\\u2014\\u2014这有啥难的，我都是一遍过或者是，这有啥难的，我随随便便就过了；\\n第四种\\u2014\\u2014玩过游戏的人都知道，没玩过的人连这都不知道看什么视频；\\n第五种\\u2014\\u2014刷XX的是不是脑子有病？\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":239719003,\"oid\":9938411,\"type\":1,\"mid\":45374791,\"root\":0,\"parent\":0,\"count\":71,\"rcount\":69,\"floor\":825,\"state\":0,\"attr\":0,\"ctime\":1492543405,\"rpid_str\":\"239719003\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":2417,\"action\":0,\"member\":{\"mid\":\"45374791\",\"uname\":\"吾名为头像是也\",\"sex\":\"保密\",\"sign\":\"微博【同名ID】:吾名为头像是也\\n(￣～￣;)包括舞见唱见全部都可分为两个区！\\n鬼畜区和鬼畜素材区！\\n待我学成之日！\\n便是鬼畜之时！\",\"avatar\":\"http://i2.hdslb.com/bfs/face/7259bff4b450b03fd44598da8ece826e373805c5.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":7396,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":4,\"name\":\"青铜殿堂\",\"image\":\"http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png\",\"image_small\":\"http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png\",\"level\":\"普通勋章\",\"condition\":\"单个自制视频总播放数>=1万\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"硬币改名纯黑叔\\n拖更狂魔死不出\\n有生之年何缘故\\n无伤第一谁不服\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]}]\n         * notice : null\n         * page : {\"acount\":3662,\"count\":2497,\"num\":1,\"size\":20}\n         * replies : [{\"rpid\":282388969,\"oid\":9938411,\"type\":1,\"mid\":110842363,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2607,\"state\":0,\"attr\":0,\"ctime\":1497217492,\"rpid_str\":\"282388969\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":4,\"action\":0,\"member\":{\"mid\":\"110842363\",\"uname\":\"忆尔旧容\",\"sex\":\"男\",\"sign\":\"永爱教主~\",\"avatar\":\"http://i0.hdslb.com/bfs/face/eaa397628ca0d586e2e6b9d90992ba347c7f3337.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":240,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2017\"},\"content\":{\"message\":\"快要去上学了。。。临走前再来看一遍只为了少爷的笑声\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":282181980,\"oid\":9938411,\"type\":1,\"mid\":7522768,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2606,\"state\":0,\"attr\":0,\"ctime\":1497190982,\"rpid_str\":\"282181980\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"7522768\",\"uname\":\"宇智波六道\",\"sex\":\"女\",\"sign\":\"错的不是我，是这个世界。\",\"avatar\":\"http://i1.hdslb.com/bfs/face/3f990bb10706b7a5808f33a78a7dcb0bf4d3ad23.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":4019,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2014\"},\"content\":{\"message\":\"求问九分左右的BGM名~\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":272254379,\"oid\":9938411,\"type\":1,\"mid\":26718080,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2605,\"state\":0,\"attr\":0,\"ctime\":1496196985,\"rpid_str\":\"272254379\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":7,\"action\":0,\"member\":{\"mid\":\"26718080\",\"uname\":\"喵脸老太\",\"sex\":\"保密\",\"sign\":\"我是桐乃的小虎牙~\",\"avatar\":\"http://i2.hdslb.com/bfs/face/154e19f906983e93ddeb08d0060b578ec21e48fd.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3481,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"只有我觉得允大吊和纯黑的声音很像吗？\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":272015657,\"oid\":9938411,\"type\":1,\"mid\":22086941,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2604,\"state\":0,\"attr\":0,\"ctime\":1496155864,\"rpid_str\":\"272015657\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"22086941\",\"uname\":\"long855\",\"sex\":\"女\",\"sign\":\"\",\"avatar\":\"http://i2.hdslb.com/bfs/face/dcafa424f65cbef144af04d12e56801309ef2def.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":6683,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"封面看起来像土鸡(°∀°)ﾉ\",\"plat\":3,\"device\":\"phone\",\"members\":[]},\"replies\":[]},{\"rpid\":271694974,\"oid\":9938411,\"type\":1,\"mid\":1836477,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2603,\"state\":0,\"attr\":0,\"ctime\":1496136331,\"rpid_str\":\"271694974\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"1836477\",\"uname\":\"企鹅桑麻\",\"sex\":\"保密\",\"sign\":\"壮哉！我大xzyx星\",\"avatar\":\"http://i1.hdslb.com/bfs/face/e55c3b51e282668c42c75e641008a9ec722cf3e5.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"1040\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":10438,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1485187200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2011\"},\"content\":{\"message\":\"真以为是露脸吃鸡\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":269383496,\"oid\":9938411,\"type\":1,\"mid\":14702410,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2602,\"state\":0,\"attr\":0,\"ctime\":1495936965,\"rpid_str\":\"269383496\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":5,\"action\":0,\"member\":{\"mid\":\"14702410\",\"uname\":\"OriginalWheat\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i1.hdslb.com/bfs/face/67f7dce5ac4358d42c6e25a211f95d970c5905e3.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":7921,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"看封面，以为是户外视频\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":263465780,\"oid\":9938411,\"type\":1,\"mid\":16511894,\"root\":0,\"parent\":0,\"count\":1,\"rcount\":1,\"floor\":2601,\"state\":0,\"attr\":0,\"ctime\":1495282867,\"rpid_str\":\"263465780\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":8,\"action\":0,\"member\":{\"mid\":\"16511894\",\"uname\":\"吃人的狮子\",\"sex\":\"保密\",\"sign\":\"=￣ω￣=\",\"avatar\":\"http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":4165,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"大吉大利，今晚吃鸡，吧\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":271654745,\"oid\":9938411,\"type\":1,\"mid\":37295447,\"root\":263465780,\"parent\":263465780,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1496133583,\"rpid_str\":\"271654745\",\"root_str\":\"263465780\",\"parent_str\":\"263465780\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"37295447\",\"uname\":\"cx阎哼哼\",\"sex\":\"保密\",\"sign\":\"嗯哼\",\"avatar\":\"http://i0.hdslb.com/bfs/face/b82cb0bb8cd8cd1d97bc8b3313843267a58626e4.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2345,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"低仿球～(￣▽￣～)\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":263256410,\"oid\":9938411,\"type\":1,\"mid\":9148371,\"root\":0,\"parent\":0,\"count\":1,\"rcount\":1,\"floor\":2600,\"state\":0,\"attr\":0,\"ctime\":1495268302,\"rpid_str\":\"263256410\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":9,\"action\":0,\"member\":{\"mid\":\"9148371\",\"uname\":\"lawere\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i1.hdslb.com/bfs/face/93ca945ad64a8ca634ef6f423e5f9962d0a94cb7.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":1598,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"有没有大神知道封面的鸡出自哪里？怎么做的？看得我好饿啊。\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":263464752,\"oid\":9938411,\"type\":1,\"mid\":16511894,\"root\":263256410,\"parent\":263256410,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1495282800,\"rpid_str\":\"263464752\",\"root_str\":\"263256410\",\"parent_str\":\"263256410\",\"like\":2,\"action\":0,\"member\":{\"mid\":\"16511894\",\"uname\":\"吃人的狮子\",\"sex\":\"保密\",\"sign\":\"=￣ω￣=\",\"avatar\":\"http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":4165,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"锅里=￣ω￣=\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":263157372,\"oid\":9938411,\"type\":1,\"mid\":24772731,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2599,\"state\":6,\"attr\":4,\"ctime\":1495259620,\"rpid_str\":\"263157372\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":7,\"action\":0,\"member\":{\"mid\":\"24772731\",\"uname\":\"百年之狐_李小白\",\"sex\":\"保密\",\"sign\":\"小白啊，最喜欢的是妲己姐姐。\",\"avatar\":\"http://i0.hdslb.com/bfs/face/a39edd4a8905c8e49a1dfeb0f573e18d19214d65.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":4912,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"一开始\\n纯黑：枪，枪，枪！\\n拿到枪\\n纯黑：叫我少爷！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":258391770,\"oid\":9938411,\"type\":1,\"mid\":28732585,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2597,\"state\":0,\"attr\":0,\"ctime\":1494719336,\"rpid_str\":\"258391770\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":13,\"action\":0,\"member\":{\"mid\":\"28732585\",\"uname\":\"老干爹辣子鸡\",\"sex\":\"保密\",\"sign\":\"I hentai\",\"avatar\":\"http://i0.hdslb.com/bfs/face/4688f58def420edaf625aa2f31e5e47d31667f94.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":4212,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"有没有大神知道封面的鸡出自哪里？怎么做的？看得我好饿啊。\",\"plat\":6,\"device\":\"pad\",\"members\":[]},\"replies\":[]},{\"rpid\":257369684,\"oid\":9938411,\"type\":1,\"mid\":32704916,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2596,\"state\":0,\"attr\":0,\"ctime\":1494604861,\"rpid_str\":\"257369684\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"32704916\",\"uname\":\"Planeswalker菲\",\"sex\":\"男\",\"sign\":\"暴力不能解决一切问题。但是可以解决制造出一切问题的那个人。\",\"avatar\":\"http://i0.hdslb.com/bfs/face/a809a3b8407840ae00032360108261fcf503d38a.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3845,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"实力棒棒的。\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":256445378,\"oid\":9938411,\"type\":1,\"mid\":31610916,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2595,\"state\":0,\"attr\":0,\"ctime\":1494505741,\"rpid_str\":\"256445378\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":3,\"action\":0,\"member\":{\"mid\":\"31610916\",\"uname\":\"幼齿萝莉八云紫\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i2.hdslb.com/bfs/face/1c853b900f9e7db4ad65ae91c73aa2f5de1d6b65.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5970,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"封面看得我好饿\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":255490068,\"oid\":9938411,\"type\":1,\"mid\":14102482,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2594,\"state\":0,\"attr\":0,\"ctime\":1494391511,\"rpid_str\":\"255490068\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"14102482\",\"uname\":\"夏伯陽\",\"sex\":\"男\",\"sign\":\"change never end\",\"avatar\":\"http://i0.hdslb.com/bfs/face/248e3f11749b5726efdecbdaef8885ccf45c0ff9.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3960,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"见封滚\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":254688287,\"oid\":9938411,\"type\":1,\"mid\":21071998,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2593,\"state\":0,\"attr\":0,\"ctime\":1494276406,\"rpid_str\":\"254688287\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"21071998\",\"uname\":\"耗子阿独\",\"sex\":\"保密\",\"sign\":\"独而不孤，行走天涯\",\"avatar\":\"http://i0.hdslb.com/bfs/face/954d7e784d44fed5d47c9f739bdb0bd0c794a783.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":4491,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"},\"content\":{\"message\":\"原来黑叔也玩这个_(:з」∠)_\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":254451554,\"oid\":9938411,\"type\":1,\"mid\":102758826,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2592,\"state\":0,\"attr\":0,\"ctime\":1494249140,\"rpid_str\":\"254451554\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"102758826\",\"uname\":\"云雨老道\",\"sex\":\"保密\",\"sign\":\"好冷啊\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":925,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2017\"},\"content\":{\"message\":\"(=・ω・=)\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":253837118,\"oid\":9938411,\"type\":1,\"mid\":10399882,\"root\":0,\"parent\":0,\"count\":1,\"rcount\":1,\"floor\":2591,\"state\":0,\"attr\":0,\"ctime\":1494166451,\"rpid_str\":\"253837118\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"10399882\",\"uname\":\"姑苏一夜繁华梦\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/cdde35d4074d5a811ebd34474d8e5f66a1bbebbe.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5235,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"什么游戏\",\"plat\":3,\"device\":\"phone\",\"members\":[]},\"replies\":[{\"rpid\":263465348,\"oid\":9938411,\"type\":1,\"mid\":16511894,\"root\":253837118,\"parent\":253837118,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1495282838,\"rpid_str\":\"263465348\",\"root_str\":\"253837118\",\"parent_str\":\"253837118\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"16511894\",\"uname\":\"吃人的狮子\",\"sex\":\"保密\",\"sign\":\"=￣ω￣=\",\"avatar\":\"http://i1.hdslb.com/bfs/face/18fa303e4b14b179435ea590842d3f6811f7a4ed.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":4165,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"绝地求生大逃杀\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":253703966,\"oid\":9938411,\"type\":1,\"mid\":87794382,\"root\":0,\"parent\":0,\"count\":2,\"rcount\":2,\"floor\":2590,\"state\":0,\"attr\":0,\"ctime\":1494157751,\"rpid_str\":\"253703966\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"87794382\",\"uname\":\"进撃のkv2\",\"sex\":\"保密\",\"sign\":\"闲的慌,真的是闲的慌。\",\"avatar\":\"http://i2.hdslb.com/bfs/face/016bdf3f5879913fbc9e5db802bf5444c603b82d.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":1308,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2017\"},\"content\":{\"message\":\"急求BGM\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":256682586,\"oid\":9938411,\"type\":1,\"mid\":8991975,\"root\":253703966,\"parent\":253703966,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1494522352,\"rpid_str\":\"256682586\",\"root_str\":\"253703966\",\"parent_str\":\"253703966\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"8991975\",\"uname\":\"MisakiNemo\",\"sex\":\"女\",\"sign\":\"nemo\",\"avatar\":\"http://i1.hdslb.com/bfs/face/0ac7d6d9626de10de6206c9f559842616cfdda3d.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":6475,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"19分钟后的   美シキ歌-帆足圭吾    之前的我不知道\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null},{\"rpid\":259412494,\"oid\":9938411,\"type\":1,\"mid\":12625520,\"root\":253703966,\"parent\":253703966,\"count\":0,\"rcount\":0,\"floor\":2,\"state\":0,\"attr\":0,\"ctime\":1494823719,\"rpid_str\":\"259412494\",\"root_str\":\"253703966\",\"parent_str\":\"253703966\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"12625520\",\"uname\":\"博丽灵梦♂节操\",\"sex\":\"女\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/2366b8a48439998fbd34b56ceefd35204c7c1388.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3934,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"基本都是尼尔的BGM，去网易云直接搜，有专辑的\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":253703527,\"oid\":9938411,\"type\":1,\"mid\":87794382,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2589,\"state\":0,\"attr\":0,\"ctime\":1494157716,\"rpid_str\":\"253703527\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"87794382\",\"uname\":\"进撃のkv2\",\"sex\":\"保密\",\"sign\":\"闲的慌,真的是闲的慌。\",\"avatar\":\"http://i2.hdslb.com/bfs/face/016bdf3f5879913fbc9e5db802bf5444c603b82d.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":1308,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2017\"},\"content\":{\"message\":\"急求BGM\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":252874067,\"oid\":9938411,\"type\":1,\"mid\":8989809,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2588,\"state\":0,\"attr\":0,\"ctime\":1494080060,\"rpid_str\":\"252874067\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":3,\"action\":0,\"member\":{\"mid\":\"8989809\",\"uname\":\"长草的孔明\",\"sex\":\"保密\",\"sign\":\"看我一头乌黑靓丽的秀发，用飘柔，就是这么自信\",\"avatar\":\"http://i1.hdslb.com/bfs/face/cd1547ceb5a6eaa654a54e3b8510ff062ecf7465.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":8118,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"讲道理一开始还以为少爷转行美食区了(=・ω・=)\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":252596582,\"oid\":9938411,\"type\":1,\"mid\":11328101,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":2587,\"state\":0,\"attr\":0,\"ctime\":1494061984,\"rpid_str\":\"252596582\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"11328101\",\"uname\":\"Enril·云风\",\"sex\":\"女\",\"sign\":\"事不能拖 话不能多 人不能作\",\"avatar\":\"http://i2.hdslb.com/bfs/face/1786752aebc7d41952b872dd3cb80aa39a96857b.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5488,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2015\"},\"content\":{\"message\":\"厉害厉害(=・ω・=)\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]}]\n         * top : null\n         * upper : {\"mid\":585267,\"top\":null}\n         */\n\n\n        data class PageBean(var acount: Int,\n                            var count: Int,\n                            var num: Int,\n                            var size: Int) {\n            /**\n             * acount : 3662\n             * count : 2497\n             * num : 1\n             * size : 20\n             */\n\n\n        }\n\n        data class UpperBean(\n                var mid: Int,\n                var top: Any) {\n            /**\n             * mid : 585267\n             * top : null\n             */\n\n        }\n\n        data class HotsBean(var rpid: Int,\n                            var oid: Int,\n                            var type: Int,\n                            var mid: Int,\n                            var root: Int,\n                            var parent: Int,\n                            var count: Int,\n                            var rcount: Int,\n                            var floor: Int,\n                            var state: Int,\n                            var attr: Int,\n                            var ctime: Int,\n                            var rpid_str: String,\n                            var root_str: String,\n                            var parent_str: String,\n                            var like: Int,\n                            var action: Int,\n                            var member: MemberBean,\n                            var content: ContentBean,\n                            var replies: List<Any>) {\n            /**\n             * rpid : 239713209\n             * oid : 9938411\n             * type : 1\n             * mid : 35666309\n             * root : 0\n             * parent : 0\n             * count : 533\n             * rcount : 527\n             * floor : 546\n             * state : 0\n             * attr : 0\n             * ctime : 1492540652\n             * rpid_str : 239713209\n             * root_str : 0\n             * parent_str : 0\n             * like : 9087\n             * action : 0\n             * member : {\"mid\":\"35666309\",\"uname\":\"一只爱作死的鸡\",\"sex\":\"保密\",\"sign\":\"个性签名什么的好难写的，写多嫌麻烦，写少嫌不够，啊啊啊啊啊！\",\"avatar\":\"http://i2.hdslb.com/bfs/face/a076329348d82164c3f54598ee90239c17817d21.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3285,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2016\"}\n             * content : {\"message\":\"犹豫了很久我还是决定发一下全的\\n\\n纯黑改名顺序(╯°Д°)╯ \\n\\n纯黑酱→纯黑SAMA→纯黑君→纯黑桑→纯黑初号机→纯黑通行→纯黑神→纯黑神行→纯黑神行通→纯黑神行通机→纯黑神行通机号→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初桑君→纯黑昵称过长不能修改→纯黑少爷→纯黑大法好→纯黑老师→纯黑.奥迪托雷→纯黑.the ripper→纯黑骑士王→纯黑狂战士→纯黑大叔→纯黑哥居然被用了→纯黑叔\",\"plat\":2,\"device\":\"\",\"members\":[]}\n             * replies : []\n             */\n\n\n            data class MemberBean(var mid: String,\n                                  var uname: String,\n                                  var sex: String,\n                                  var sign: String,\n                                  var avatar: String,\n                                  var rank: String,\n                                  var DisplayRank: String,\n                                  var level_info: LevelInfoBean,\n                                  var pendant: PendantBean,\n                                  var nameplate: NameplateBean,\n                                  var official_verify: OfficialVerifyBean,\n                                  var vip: VipBean,\n                                  var reg_year: String) {\n                /**\n                 * mid : 35666309\n                 * uname : 一只爱作死的鸡\n                 * sex : 保密\n                 * sign : 个性签名什么的好难写的，写多嫌麻烦，写少嫌不够，啊啊啊啊啊！\n                 * avatar : http://i2.hdslb.com/bfs/face/a076329348d82164c3f54598ee90239c17817d21.jpg\n                 * rank : 10000\n                 * DisplayRank : 0\n                 * level_info : {\"current_level\":3,\"current_min\":1500,\"current_exp\":3285,\"next_exp\":4500}\n                 * pendant : {\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0}\n                 * nameplate : {\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"}\n                 * official_verify : {\"type\":-1,\"desc\":\"\"}\n                 * vip : {\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}\n                 * reg_year : 2016\n                 */\n\n\n                data class LevelInfoBean(var current_level: Int,\n                                         var current_min: Int,\n                                         var current_exp: Int,\n                                         var next_exp: Int) {\n                    /**\n                     * current_level : 3\n                     * current_min : 1500\n                     * current_exp : 3285\n                     * next_exp : 4500\n                     */\n\n\n                }\n\n                data class PendantBean(var pid: Int,\n                                       var name: String,\n                                       var image: String,\n                                       var expire: Long) {\n                    /**\n                     * pid : 0\n                     * name :\n                     * image :\n                     * expire : 0\n                     */\n\n\n                }\n\n                data class NameplateBean(var nid: Int,\n                                         var name: String,\n                                         var image: String,\n                                         var image_small: String,\n                                         var level: String,\n                                         var condition: String) {\n                    /**\n                     * nid : 0\n                     * name :\n                     * image :\n                     * image_small :\n                     * level :\n                     * condition :\n                     */\n\n\n                }\n\n                data class OfficialVerifyBean(\n                        var type: Int,\n                        var desc: String) {\n                    /**\n                     * type : -1\n                     * desc :\n                     */\n\n                }\n\n                data class VipBean(var vipType: Int,\n                                   var vipDueDate: String,\n                                   var dueRemark: String,\n                                   var accessStatus: Int,\n                                   var vipStatus: Int,\n                                   var vipStatusWarn: String) {\n                    /**\n                     * vipType : 0\n                     * vipDueDate : 0\n                     * dueRemark :\n                     * accessStatus : 1\n                     * vipStatus : 0\n                     * vipStatusWarn :\n                     */\n\n\n                }\n            }\n\n            data class ContentBean(var message: String,\n                                   var plat: Int,\n                                   var device: String,\n                                   var members: List<Any>) {\n                /**\n                 * message : 犹豫了很久我还是决定发一下全的\n                 *\n                 *\n                 * 纯黑改名顺序(╯°Д°)╯\n                 *\n                 *\n                 * 纯黑酱→纯黑SAMA→纯黑君→纯黑桑→纯黑初号机→纯黑通行→纯黑神→纯黑神行→纯黑神行通→纯黑神行通机→纯黑神行通机号→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初→纯黑神行通机号初桑→纯黑神行通机号初桑君→纯黑昵称过长不能修改→纯黑少爷→纯黑大法好→纯黑老师→纯黑.奥迪托雷→纯黑.the ripper→纯黑骑士王→纯黑狂战士→纯黑大叔→纯黑哥居然被用了→纯黑叔\n                 * plat : 2\n                 * device :\n                 * members : []\n                 */\n\n\n            }\n        }\n\n        data class RepliesBean(var rpid: Int,\n                               var oid: Int,\n                               var type: Int,\n                               var mid: Int,\n                               var root: Int,\n                               var parent: Int,\n                               var count: Int,\n                               var rcount: Int,\n                               var floor: Int,\n                               var state: Int,\n                               var attr: Int,\n                               var ctime: Long,\n                               var rpid_str: String,\n                               var root_str: String,\n                               var parent_str: String,\n                               var like: Int,\n                               var action: Int,\n                               var member: MemberBeanX,\n                               var content: ContentBeanX,\n                               var replies: List<Any>) {\n            /**\n             * rpid : 282388969\n             * oid : 9938411\n             * type : 1\n             * mid : 110842363\n             * root : 0\n             * parent : 0\n             * count : 0\n             * rcount : 0\n             * floor : 2607\n             * state : 0\n             * attr : 0\n             * ctime : 1497217492\n             * rpid_str : 282388969\n             * root_str : 0\n             * parent_str : 0\n             * like : 4\n             * action : 0\n             * member : {\"mid\":\"110842363\",\"uname\":\"忆尔旧容\",\"sex\":\"男\",\"sign\":\"永爱教主~\",\"avatar\":\"http://i0.hdslb.com/bfs/face/eaa397628ca0d586e2e6b9d90992ba347c7f3337.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":240,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"},\"reg_year\":\"2017\"}\n             * content : {\"message\":\"快要去上学了。。。临走前再来看一遍只为了少爷的笑声\",\"plat\":2,\"device\":\"\",\"members\":[]}\n             * replies : []\n             */\n\n\n            data class MemberBeanX(var mid: String,\n                                   var uname: String,\n                                   var sex: String,\n                                   var sign: String,\n                                   var avatar: String,\n                                   var rank: String,\n                                   var DisplayRank: String,\n                                   var level_info: LevelInfoBeanX,\n                                   var pendant: PendantBeanX,\n                                   var nameplate: NameplateBeanX,\n                                   var official_verify: OfficialVerifyBeanX,\n                                   var vip: VipBeanX,\n                                   var reg_year: String) {\n                /**\n                 * mid : 110842363\n                 * uname : 忆尔旧容\n                 * sex : 男\n                 * sign : 永爱教主~\n                 * avatar : http://i0.hdslb.com/bfs/face/eaa397628ca0d586e2e6b9d90992ba347c7f3337.jpg\n                 * rank : 10000\n                 * DisplayRank : 0\n                 * level_info : {\"current_level\":2,\"current_min\":200,\"current_exp\":240,\"next_exp\":1500}\n                 * pendant : {\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0}\n                 * nameplate : {\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"}\n                 * official_verify : {\"type\":-1,\"desc\":\"\"}\n                 * vip : {\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}\n                 * reg_year : 2017\n                 */\n\n\n                data class LevelInfoBeanX(var current_level: Int,\n                                          var current_min: Int,\n                                          var current_exp: Int,\n                                          var next_exp: Int) {\n                    /**\n                     * current_level : 2\n                     * current_min : 200\n                     * current_exp : 240\n                     * next_exp : 1500\n                     */\n\n\n                }\n\n                data class PendantBeanX(var pid: Int,\n                                        var name: String,\n                                        var image: String,\n                                        var expire: Long) {\n                    /**\n                     * pid : 0\n                     * name :\n                     * image :\n                     * expire : 0\n                     */\n\n\n                }\n\n                data class NameplateBeanX(var nid: Int,\n                                          var name: String,\n                                          var image: String,\n                                          var image_small: String,\n                                          var level: String,\n                                          var condition: String) {\n                    /**\n                     * nid : 0\n                     * name :\n                     * image :\n                     * image_small :\n                     * level :\n                     * condition :\n                     */\n\n\n                }\n\n                data class OfficialVerifyBeanX(var type: Int,\n                                               var desc: String) {\n                    /**\n                     * type : -1\n                     * desc :\n                     */\n\n\n                }\n\n                data class VipBeanX(var vipType: Int,\n                                    var vipDueDate: String,\n                                    var dueRemark: String,\n                                    var accessStatus: Int,\n                                    var vipStatus: Int,\n                                    var vipStatusWarn: String) {\n                    /**\n                     * vipType : 0\n                     * vipDueDate : 0\n                     * dueRemark :\n                     * accessStatus : 1\n                     * vipStatus : 0\n                     * vipStatusWarn :\n                     */\n\n\n                }\n            }\n\n            data class ContentBeanX(\n                    var message: String,\n                    var plat: Int,\n                    var device: String,\n                    var members: List<Any>) {\n                /**\n                 * message : 快要去上学了。。。临走前再来看一遍只为了少爷的笑声\n                 * plat : 2\n                 * device :\n                 * members : []\n                 */\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/app/video/VideoPlayer.kt",
    "content": "package com.yoyiyi.soleil.bean.app.video\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/28 16:12\n * * 描述:视频播放\n */\n\ndata class VideoPlayer(var from: String,\n                  var result: String,\n                  var format: String,\n                  var timelength: Int,\n                  var accept_format: String,\n                  var seek_param: String,\n                  var seek_type: String,\n                  var accept_quality: List<Int>,\n                  var durl: List<DurlBean>\n) {\n\n    /**\n     * from : local\n     * result : suee\n     * format : mp4\n     * timelength : 2401795\n     * accept_format : flv,hdmp4,mp4\n     * accept_quality : [80,48,16]\n     * seek_param : start\n     * seek_type : second\n     * durl : [{\"order\":1,\"length\":2401795,\"size\":145182349,\"url\":\"http://122.228.103.130/vg5/2/c0/6191437-1.mp4?expires=1498647600&platform=android&ssig=ccG6v0orsCMxz4TScpdJcA&oi=3080483261&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2069907006\",\"backup_url\":[\"http://58.220.29.4/vg7/e/33/6191437-1.mp4?expires=1498647600&platform=android&ssig=L6Bx5smjA8bVbMUepGmFbg&oi=3080483261&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2069907006\",\"http://116.207.118.5/vg6/4/4c/6191437-1.mp4?expires=1498647600&platform=android&ssig=3WdIhs49V_e1Dt7jfONEIg&oi=3080483261&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2069907006\"]}]\n     */\n\n\n    data class DurlBean(var order: Int,\n                   var length: Int,\n                   var size: Int,\n                   var url: String,\n                   var backup_url: List<String>) {\n        /**\n         * order : 1\n         * length : 2401795\n         * size : 145182349\n         * url : http://122.228.103.130/vg5/2/c0/6191437-1.mp4?expires=1498647600&platform=android&ssig=ccG6v0orsCMxz4TScpdJcA&oi=3080483261&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2069907006\n         * backup_url : [\"http://58.220.29.4/vg7/e/33/6191437-1.mp4?expires=1498647600&platform=android&ssig=L6Bx5smjA8bVbMUepGmFbg&oi=3080483261&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2069907006\",\"http://116.207.118.5/vg6/4/4c/6191437-1.mp4?expires=1498647600&platform=android&ssig=3WdIhs49V_e1Dt7jfONEIg&oi=3080483261&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2069907006\"]\n         */\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/bangumi/BangumiDetail.kt",
    "content": "package com.yoyiyi.soleil.bean.bangumi\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 14:39\n * * 描述:番剧详情界面\n */\ndata class BangumiDetail(var alias: String,\n                         var allow_bp: String,\n                         var allow_download: String,\n                         var area: String,\n                         var arealimit: Int,\n                         var bangumi_id: String,\n                         var bangumi_title: String,\n                         var brief: String,\n                         var coins: String,\n                         var copyright: String,\n                         var cover: String,\n                         var danmaku_count: String,\n                         var ed_jump: Int,\n                         var evaluate: String,\n                         var favorites: String,\n                         var has_unfollow: Int,\n                         var is_finish: String,\n                         var is_guide_follow: Int,\n                         var jp_title: String,\n                         var limit_info: LimitInfoBean,\n                         var newest_ep_id: String,\n                         var newest_ep_index: String,\n                         var play_count: String,\n                         var pub_time: String,\n                         var rank: RankBean,\n                         var rights: RightsBean,\n                         var season_id: String,\n                         var season_status: Int,\n                         var season_title: String,\n                         var share_url: String,\n                         var squareCover: String,\n                         var staff: String,\n                         var title: String,\n                         var total_count: String,\n                         var user_season: UserSeasonBean,\n                         var viewRank: Int,\n                         var vip_quality: Int,\n                         var watchingCount: String,\n                         var weekday: String,\n                         var actor: List<ActorBean>,\n                         var episodes: List<EpisodesBean>,\n                         var related_seasons: List<Any>,\n                         var seasons: List<SeasonsBean>,\n                         var tag2s: List<Any>,\n                         var tags: List<TagsBean>) {\n    //  https://bangumi.bilibili.com/api/season_v5?access_key=ccfbb1b10ce8ab8418a2e00b9ca9a3a0&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&season_id=6066&ts=1497169313&type=bangumi&sign=c6796f6ea4a6cae28a4d8fc555fde2da\n    /**\n     * actor : [{\"actor\":\"林美秀\",\"actor_id\":0,\"role\":\"小奇\"},{\"actor\":\"四刀辉彰\",\"actor_id\":0,\"role\":\"洋平\"}]\n     * alias : こねこのチー ポンポンらー大冒険,甜甜起司猫,起司猫,甜甜私房猫 第三季\n     * allow_bp : 1\n     * allow_download : 0\n     * area : 日本\n     * arealimit : 0\n     * bangumi_id : 727\n     * bangumi_title : 甜甜私房猫\n     * brief : 中配版由北斗企鹅工作室配音。描述一只黑灰斑纹的小猫跟丢母亲又找不到回家的路，在筋疲力尽累瘫之际巧遇一...\n     * coins : 310\n     * copyright : bilibili\n     * cover : http://i0.hdslb.com/bfs/bangumi/e4eaa21feb4449abe887ca50618638e953d05413.jpg\n     * danmaku_count : 1672\n     * ed_jump : 5\n     * episodes : [{\"av_id\":\"11233465\",\"coins\":\"6\",\"cover\":\"http://i0.hdslb.com/bfs/archive/69264d3d920edc4a402ee489399ca22eecdc35b1.jpg\",\"danmaku\":\"18580541\",\"episode_id\":\"108754\",\"episode_status\":2,\"index\":\"19\",\"index_title\":\"大黑，要巡逻\",\"is_new\":\"1\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-06-11 12:00:03.0\"},{\"av_id\":\"11183534\",\"coins\":\"6\",\"cover\":\"http://i2.hdslb.com/bfs/archive/a33d2fcdf23237c6f64839b65443ce2efca06c39.jpg\",\"danmaku\":\"18502719\",\"episode_id\":\"108752\",\"episode_status\":2,\"index\":\"18\",\"index_title\":\"小奇、当教练\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-06-09 12:00:03.0\"},{\"av_id\":\"11051889\",\"coins\":\"6\",\"cover\":\"http://i1.hdslb.com/bfs/archive/644d43fb82e1c61c058e194717de58b8c73cfdc8.jpg\",\"danmaku\":\"18290105\",\"episode_id\":\"108133\",\"episode_status\":2,\"index\":\"17\",\"index_title\":\"小奇，又又学习\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-06-04 12:00:02.0\"},{\"av_id\":\"11009671\",\"coins\":\"6\",\"cover\":\"http://i1.hdslb.com/bfs/archive/9e90370c70231523fa02010fc8ec54363f5c2374.jpg\",\"danmaku\":\"18221908\",\"episode_id\":\"108132\",\"episode_status\":2,\"index\":\"16\",\"index_title\":\"小奇、要工作\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-06-02 12:00:02.0\"},{\"av_id\":\"10880355\",\"coins\":\"10\",\"cover\":\"http://i1.hdslb.com/bfs/archive/4e9a5f2eac2ff26d5adee8d53f0d2a95ed51c6f2.jpg\",\"danmaku\":\"18015450\",\"episode_id\":\"107658\",\"episode_status\":2,\"index\":\"15\",\"index_title\":\"小奇，又学习\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-28 12:07:02.0\"},{\"av_id\":\"10831038\",\"coins\":\"10\",\"cover\":\"http://i2.hdslb.com/bfs/archive/ea494e65d13522fc515019f100759ecc9208035a.jpg\",\"danmaku\":\"17873480\",\"episode_id\":\"107657\",\"episode_status\":2,\"index\":\"14\",\"index_title\":\"小奇、要暖和\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-26 12:00:02.0\"},{\"av_id\":\"10716677\",\"coins\":\"12\",\"cover\":\"http://i2.hdslb.com/bfs/archive/195ac2834e4c5415141faba03735c82882e94ded.jpg\",\"danmaku\":\"17682923\",\"episode_id\":\"107004\",\"episode_status\":2,\"index\":\"13\",\"index_title\":\"小奇，回来了\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-21 12:00:02.0\"},{\"av_id\":\"10661305\",\"coins\":\"10\",\"cover\":\"http://i2.hdslb.com/bfs/archive/84779956e6466153f72b6d54145ddf837b7ea8f8.jpg\",\"danmaku\":\"17596927\",\"episode_id\":\"107003\",\"episode_status\":2,\"index\":\"12\",\"index_title\":\"小奇，去好地方\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-19 12:00:02.0\"},{\"av_id\":\"10549012\",\"coins\":\"11\",\"cover\":\"http://i1.hdslb.com/bfs/archive/f3e78eff1fec61c7e37a8170beac789e1616c3cb.jpg\",\"danmaku\":\"17416310\",\"episode_id\":\"106290\",\"episode_status\":2,\"index\":\"11\",\"index_title\":\"小奇，出门\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-14 12:00:02.0\"},{\"av_id\":\"10494123\",\"coins\":\"8\",\"cover\":\"http://i0.hdslb.com/bfs/archive/8ca68ac8b4b2e21ed399a7319b7fa8adebf5ae60.jpg\",\"danmaku\":\"17329563\",\"episode_id\":\"106289\",\"episode_status\":2,\"index\":\"10\",\"index_title\":\"小奇，遇见鹦鹉\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-12 12:00:02.0\"},{\"av_id\":\"10378572\",\"coins\":\"10\",\"cover\":\"http://i1.hdslb.com/bfs/archive/55ef301ab2c1c51c84ca4e52f08944d606915685.jpg\",\"danmaku\":\"17141538\",\"episode_id\":\"105083\",\"episode_status\":2,\"index\":\"9\",\"index_title\":\"小奇，比试\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-07 12:00:03.0\"},{\"av_id\":\"10322929\",\"coins\":\"8\",\"cover\":\"http://i2.hdslb.com/bfs/archive/0d0525b0a1f4e04f175f73c8109522df5f61015b.jpg\",\"danmaku\":\"17054699\",\"episode_id\":\"105082\",\"episode_status\":2,\"index\":\"8\",\"index_title\":\"小奇，要冒险\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-05-05 12:02:02.0\"},{\"av_id\":\"10198610\",\"coins\":\"18\",\"cover\":\"http://i1.hdslb.com/bfs/archive/62926a462d742f956c7a5e49c4799664ecac7d32.jpg\",\"danmaku\":\"16849196\",\"episode_id\":\"104932\",\"episode_status\":2,\"index\":\"7\",\"index_title\":\"小奇，野营\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-30 12:00:00.0\"},{\"av_id\":\"10147216\",\"coins\":\"14\",\"cover\":\"http://i1.hdslb.com/bfs/archive/b0aa148da8dd168eb8a540cf41dc70a78bfc7cbf.jpg\",\"danmaku\":\"16765765\",\"episode_id\":\"104931\",\"episode_status\":2,\"index\":\"6\",\"index_title\":\"小奇，被刷毛\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-28 12:01:02.0\"},{\"av_id\":\"10036211\",\"coins\":\"19\",\"cover\":\"http://i0.hdslb.com/bfs/archive/a3e32d2825a5b1a29208bc6713976b84117a2363.jpg\",\"danmaku\":\"16587085\",\"episode_id\":\"104243\",\"episode_status\":2,\"index\":\"5\",\"index_title\":\"小奇，过万圣节\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-23 12:00:02.0\"},{\"av_id\":\"9979397\",\"coins\":\"16\",\"cover\":\"http://i2.hdslb.com/bfs/archive/a6fe346ddc04ef3bf4ba3cd65b60943d328c41bd.jpg\",\"danmaku\":\"16497147\",\"episode_id\":\"104242\",\"episode_status\":2,\"index\":\"4\",\"index_title\":\"小奇，吃奶酪\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-21 12:00:02.0\"},{\"av_id\":\"9871622\",\"coins\":\"23\",\"cover\":\"http://i1.hdslb.com/bfs/archive/ab0f1f5e2e45524f9939a8665c0835be478430a2.jpg\",\"danmaku\":\"16319807\",\"episode_id\":\"104065\",\"episode_status\":2,\"index\":\"3\",\"index_title\":\"小奇，要学习\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-16 12:00:02.0\"},{\"av_id\":\"9825634\",\"coins\":\"43\",\"cover\":\"http://i0.hdslb.com/bfs/archive/c5637914b8495ec63b075ca6bb96eec8d56319b5.jpg\",\"danmaku\":\"16245293\",\"episode_id\":\"103954\",\"episode_status\":2,\"index\":\"2\",\"index_title\":\"小奇，被阻止了\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-14 12:00:03.0\"},{\"av_id\":\"9716141\",\"coins\":\"74\",\"cover\":\"http://i0.hdslb.com/bfs/archive/d9ae122e067a673072c939a1a63349231fb23ad5.jpg\",\"danmaku\":\"16058191\",\"episode_id\":\"103953\",\"episode_status\":2,\"index\":\"1\",\"index_title\":\"小奇、回来啦\",\"is_webplay\":\"0\",\"mid\":\"928123\",\"page\":\"1\",\"up\":{},\"update_time\":\"2017-04-09 12:00:02.0\"}]\n     * evaluate : 中配版由北斗企鹅工作室配音。描述一只黑灰斑纹的小猫跟丢母亲又找不到回家的路，在筋疲力尽累瘫之际巧遇一个跌倒的小男孩，从此由男孩一家暂时照顾。因男孩家为禁止饲养宠物的公寓，一家人还得费尽心机不让邻居发现小猫的存在，只是偏偏一直找不到饲主又和小猫日久生情。在经历某些事情后，一家人终于搬到新公寓展开全新的生活。\n     * favorites : 6572\n     * has_unfollow : 0\n     * is_finish : 0\n     * is_guide_follow : 1\n     * jp_title : こねこのチー ポンポンらー大冒険\n     * limit_info : {\"code\":0,\"data\":{\"down\":0,\"play\":2},\"message\":\"\"}\n     * newest_ep_id : 108754\n     * newest_ep_index : 19\n     * play_count : 241198\n     * pub_time : 2017-04-09 12:00:00\n     * rank : {\"list\":[{\"face\":\"http://i1.hdslb.com/bfs/face/88da15affaa670c507769395529abf7b128eb36d.jpg\",\"uid\":\"749010\",\"uname\":\"ruanlis\"},{\"face\":\"http://i2.hdslb.com/bfs/face/c3c46064847f822b63700b3a7feb784896e61d01.jpg\",\"uid\":\"4672892\",\"uname\":\"DesideRatus\"},{\"face\":\"http://i0.hdslb.com/bfs/face/fa11da3b651ecbb2422feb1fbf02e4d3c40eec4c.jpg\",\"uid\":\"555152\",\"uname\":\"gaborsun\"},{\"face\":\"http://static.hdslb.com/images/member/noface.gif\",\"uid\":\"45365953\",\"uname\":\"郁闷的团子\"}],\"total_bp_count\":119,\"week_bp_count\":21}\n     * related_seasons : []\n     * rights : {\"arealimit\":0,\"is_started\":1}\n     * season_id : 6066\n     * season_status : 2\n     * season_title : 中配版\n     * seasons : [{\"bangumi_id\":\"727\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/29dfb0679a873a44e2609cc7bca31f6a2a3791b6.jpg\",\"is_finish\":\"1\",\"newest_ep_id\":\"34146\",\"newest_ep_index\":\"104\",\"season_id\":\"1119\",\"season_status\":2,\"title\":\"第一季\",\"total_count\":\"104\"},{\"bangumi_id\":\"727\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/8d5f4764d793629b952625278bae69eebfd528a0.jpg\",\"is_finish\":\"1\",\"newest_ep_id\":\"34360\",\"newest_ep_index\":\"104\",\"season_id\":\"1772\",\"season_status\":2,\"title\":\"第二季\",\"total_count\":\"104\"},{\"bangumi_id\":\"727\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/e4eaa21feb4449abe887ca50618638e953d05413.jpg\",\"is_finish\":\"0\",\"is_new\":\"1\",\"newest_ep_id\":\"104073\",\"newest_ep_index\":\"36\",\"season_id\":\"5563\",\"season_status\":2,\"title\":\"第三季\",\"total_count\":\"12\"},{\"bangumi_id\":\"727\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/e4eaa21feb4449abe887ca50618638e953d05413.jpg\",\"is_finish\":\"0\",\"is_new\":\"1\",\"newest_ep_id\":\"108754\",\"newest_ep_index\":\"19\",\"season_id\":\"6066\",\"season_status\":2,\"title\":\"中配版\",\"total_count\":\"51\"},{\"bangumi_id\":\"727\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/4f15b9e37aa99750e5d7bcb9d8b5d4f3bad0c227.jpg\",\"is_finish\":\"1\",\"newest_ep_index\":\"-1\",\"season_id\":\"3774\",\"season_status\":2,\"title\":\"OAD\",\"total_count\":\"1\"}]\n     * share_url : http://bangumi.bilibili.com/anime/6066/\n     * squareCover : http://i0.hdslb.com/bfs/bangumi/56fa9a3e45129f7387fa88c9a05b9fad51cef4fc.jpg\n     * staff : 原作：こなみかなた\n     * 音乐：近藤研二\n     * 剪辑：伊藤潤一\n     * 音响监督：中嶋聡彦\n     * 音响：HALF H・P STUDIO\n     * 副导演：沓名健一\n     * 官方网站：http：//chissweethome.com/\n     * 播放电视台：テレビ東京\n     * Copyright：©こなみかなた・講談社／こねこのチー製作委員会\n     * 总监修：北本かおり\n     * 导演：草野公紀\n     * 系列构成：千葉美鈴\n     * 人物设计：皆川恵美里、鴻巣智\n     * 艺术监督：梅田年哉\n     * 音效：山田香織\n     * 动画制作：マーザ・アニメーションプラネット\n     * tag2s : []\n     * tags : [{\"cover\":\"http://i0.hdslb.com/bfs/bangumi/596fc0d465852dbda114dffc931d74c8342af3f6.jpg\",\"tag_id\":\"16\",\"tag_name\":\"日常\"},{\"cover\":\"http://i0.hdslb.com/bfs/bangumi/2dd9492da6692e5254e0240d10ea23f4cfec3461.png\",\"tag_id\":\"81\",\"tag_name\":\"萌系\"}]\n     * title : 甜甜私房猫 第三季 中配版\n     * total_count : 51\n     * user_season : {\"attention\":\"0\",\"bp\":0,\"last_ep_id\":\"\",\"last_ep_index\":\"\",\"last_time\":\"0\",\"report_ts\":0}\n     * viewRank : 0\n     * vip_quality : 1\n     * watchingCount : 0\n     * weekday : -1\n     */\n\n\n    data class LimitInfoBean(var code: Int,\n                             var data: DataBean,\n                             var message: String) {\n        /**\n         * code : 0\n         * data : {\"down\":0,\"play\":2}\n         * message :\n         */\n\n\n        data class DataBean(var down: Int,\n                            var play: Int) {\n            /**\n             * down : 0\n             * play : 2\n             */\n\n        }\n    }\n\n    data class RankBean(var total_bp_count: Int,\n                        var week_bp_count: Int,\n                        var list: List<ListBean>) {\n        /**\n         * list : [{\"face\":\"http://i1.hdslb.com/bfs/face/88da15affaa670c507769395529abf7b128eb36d.jpg\",\"uid\":\"749010\",\"uname\":\"ruanlis\"},{\"face\":\"http://i2.hdslb.com/bfs/face/c3c46064847f822b63700b3a7feb784896e61d01.jpg\",\"uid\":\"4672892\",\"uname\":\"DesideRatus\"},{\"face\":\"http://i0.hdslb.com/bfs/face/fa11da3b651ecbb2422feb1fbf02e4d3c40eec4c.jpg\",\"uid\":\"555152\",\"uname\":\"gaborsun\"},{\"face\":\"http://static.hdslb.com/images/member/noface.gif\",\"uid\":\"45365953\",\"uname\":\"郁闷的团子\"}]\n         * total_bp_count : 119\n         * week_bp_count : 21\n         */\n\n\n        data class ListBean(var face: String,\n                            var uid: String,\n                            var uname: String) {\n            /**\n             * face : http://i1.hdslb.com/bfs/face/88da15affaa670c507769395529abf7b128eb36d.jpg\n             * uid : 749010\n             * uname : ruanlis\n             */\n\n\n        }\n    }\n\n    data class RightsBean(var arealimit: Int,\n                          var is_started: Int) {\n        /**\n         * arealimit : 0\n         * is_started : 1\n         */\n\n\n    }\n\n    data class UserSeasonBean(var attention: String,\n                              var bp: Int,\n                              var last_ep_id: String,\n                              var last_ep_index: String,\n                              var last_time: String,\n                              var report_ts: Int) {\n        /**\n         * attention : 0\n         * bp : 0\n         * last_ep_id :\n         * last_ep_index :\n         * last_time : 0\n         * report_ts : 0\n         */\n\n\n    }\n\n    data class ActorBean(var actor: String,\n                         var actor_id: Int,\n                         var role: String) {\n        /**\n         * actor : 林美秀\n         * actor_id : 0\n         * role : 小奇\n         */\n\n\n    }\n\n    data class EpisodesBean(var av_id: String,\n                            var coins: String,\n                            var cover: String,\n                            var danmaku: String,\n                            var episode_id: String,\n                            var episode_status: Int,\n                            var index: String,\n                            var index_title: String,\n                            var is_new: String,\n                            var is_webplay: String,\n                            var mid: String,\n                            var page: String,\n                            var up: UpBean,\n                            var update_time: String) {\n        /**\n         * av_id : 11233465\n         * coins : 6\n         * cover : http://i0.hdslb.com/bfs/archive/69264d3d920edc4a402ee489399ca22eecdc35b1.jpg\n         * danmaku : 18580541\n         * episode_id : 108754\n         * episode_status : 2\n         * index : 19\n         * index_title : 大黑，要巡逻\n         * is_new : 1\n         * is_webplay : 0\n         * mid : 928123\n         * page : 1\n         * up : {}\n         * update_time : 2017-06-11 12:00:03.0\n         */\n\n\n        data class UpBean(var data: Any)\n    }\n\n    data class SeasonsBean(var bangumi_id: String,\n                           var cover: String,\n                           var is_finish: String,\n                           var newest_ep_id: String,\n                           var newest_ep_index: String,\n                           var season_id: String,\n                           var season_status: Int,\n                           var title: String,\n                           var total_count: String,\n                           var is_new: String) {\n        /**\n         * bangumi_id : 727\n         * cover : http://i0.hdslb.com/bfs/bangumi/29dfb0679a873a44e2609cc7bca31f6a2a3791b6.jpg\n         * is_finish : 1\n         * newest_ep_id : 34146\n         * newest_ep_index : 104\n         * season_id : 1119\n         * season_status : 2\n         * title : 第一季\n         * total_count : 104\n         * is_new : 1\n         */\n\n\n    }\n\n    data class TagsBean(var cover: String,\n                        var tag_id: String,\n                        var tag_name: String) {\n        /**\n         * cover : http://i0.hdslb.com/bfs/bangumi/596fc0d465852dbda114dffc931d74c8342af3f6.jpg\n         * tag_id : 16\n         * tag_name : 日常\n         */\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/bangumi/BangumiDetailComment.kt",
    "content": "package com.yoyiyi.soleil.bean.bangumi\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 14:48\n * * 描述:\n */\ndata class BangumiDetailComment(var code: Int,\n                                var data: DataBean,\n                                var message: String,\n                                var ttl: Int) {\n\n\n    /**\n     * code : 0\n     * data : {\"hots\":[{\"rpid\":233279383,\"oid\":9716141,\"type\":1,\"mid\":825142,\"root\":0,\"parent\":0,\"count\":12,\"rcount\":11,\"floor\":17,\"state\":0,\"attr\":0,\"ctime\":1491710726,\"rpid_str\":\"233279383\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":156,\"action\":0,\"member\":{\"mid\":\"825142\",\"uname\":\"Ke_Rio\",\"sex\":\"保密\",\"sign\":\"ルパパ\",\"avatar\":\"http://i1.hdslb.com/bfs/face/7189bc2b5654a3f1e8bbf34bf9719b7403e21bac.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":5,\"current_min\":10800,\"current_exp\":12430,\"next_exp\":28800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1485100800000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"港真 还没习惯日配先来听中配的话没什么违和感 还挺不错的(｀・ω・´)\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":233316451,\"oid\":9716141,\"type\":1,\"mid\":89595,\"root\":0,\"parent\":0,\"count\":8,\"rcount\":8,\"floor\":59,\"state\":0,\"attr\":0,\"ctime\":1491713408,\"rpid_str\":\"233316451\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":54,\"action\":0,\"member\":{\"mid\":\"89595\",\"uname\":\"声动音缘-叮当\",\"sex\":\"男\",\"sign\":\"配音的\\u2026作品有《那年那兔那些事》鹰酱 《仙剑客栈》李逍遥 《雏蜂》孙浩轩 《灵剑山》王忠 微博是 @叮当-声动音缘 =w=\",\"avatar\":\"http://i1.hdslb.com/bfs/face/777af34c5afeee13fe13418f8ea5218bf50ffde6.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":6,\"current_min\":28800,\"current_exp\":47434,\"next_exp\":\"-\"},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":1,\"name\":\"黄金殿堂\",\"image\":\"http://i0.hdslb.com/bfs/face/82896ff40fcb4e7c7259cb98056975830cb55695.png\",\"image_small\":\"http://i0.hdslb.com/bfs/face/627e342851dfda6fe7380c2fa0cbd7fae2e61533.png\",\"level\":\"稀有勋章\",\"condition\":\"单个自制视频总播放数>=100万\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1504886400000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":1,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"美秀姐配音的角色有很多哦，静香、孙小美、朝比奈实玖留、花橘子、c.c等\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":233303106,\"oid\":9716141,\"type\":1,\"mid\":14790663,\"root\":0,\"parent\":0,\"count\":22,\"rcount\":21,\"floor\":49,\"state\":0,\"attr\":0,\"ctime\":1491712468,\"rpid_str\":\"233303106\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":64,\"action\":0,\"member\":{\"mid\":\"14790663\",\"uname\":\"百度了一个名字\",\"sex\":\"女\",\"sign\":\"一路伴晗\",\"avatar\":\"http://i2.hdslb.com/bfs/face/e5977f66aedb5705a8a4b8e1ab842eefc13fef94.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":6683,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1488729600000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"弯弯腔好可怕\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]}],\"page\":{\"acount\":354,\"count\":255,\"num\":1,\"size\":20},\"replies\":[{\"rpid\":281876224,\"oid\":9716141,\"type\":1,\"mid\":129377365,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":294,\"state\":0,\"attr\":0,\"ctime\":1497170348,\"rpid_str\":\"281876224\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"129377365\",\"uname\":\"a1379488\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":213,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"好可爱\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281820912,\"oid\":9716141,\"type\":1,\"mid\":5398071,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":293,\"state\":2,\"attr\":8,\"ctime\":1497165758,\"rpid_str\":\"281820912\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"5398071\",\"uname\":\"吾谶\",\"sex\":\"女\",\"sign\":\"CP可以逆  本命不能移               \\r\",\"avatar\":\"http://i2.hdslb.com/bfs/face/762e47bb9f9a728ab2e67937868cf824348d1a16.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":7274,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"***\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281805343,\"oid\":9716141,\"type\":1,\"mid\":12752126,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":292,\"state\":0,\"attr\":0,\"ctime\":1497164408,\"rpid_str\":\"281805343\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"12752126\",\"uname\":\"凉风有性胖次尹\",\"sex\":\"男\",\"sign\":\"这个人特勤快，什么都没有写(･_･`)\",\"avatar\":\"http://i2.hdslb.com/bfs/face/c0cd67a80e7125478bae17ad4e97ca7794e7bf4c.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"1043\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5676,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"中配\\u2026\\u2026高配呢？有没有顶配的啊\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281722086,\"oid\":9716141,\"type\":1,\"mid\":3289630,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":291,\"state\":0,\"attr\":0,\"ctime\":1497158060,\"rpid_str\":\"281722086\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"3289630\",\"uname\":\"翻海神疾风\",\"sex\":\"男\",\"sign\":\"\\u201d破喉咙！破喉咙！！\\u201c\",\"avatar\":\"http://i1.hdslb.com/bfs/face/8a135c1b14964672e18ffc01838c3acd329a406d.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":10510,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1487088000000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"中配，哇⊙∀⊙！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281698661,\"oid\":9716141,\"type\":1,\"mid\":85581896,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":290,\"state\":0,\"attr\":0,\"ctime\":1497156547,\"rpid_str\":\"281698661\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"85581896\",\"uname\":\"凶牙重战车\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":1397,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"其实这准确说是台湾配音，因为说话腔调的问题，有的角色的配音显得没有日语好听，比如小奇的配音，不过爸爸妈妈之类的配音却很好听。如果是大陆配音的话，我觉得让山新配音最合适！\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281666153,\"oid\":9716141,\"type\":1,\"mid\":11483392,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":289,\"state\":0,\"attr\":0,\"ctime\":1497154535,\"rpid_str\":\"281666153\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"11483392\",\"uname\":\"泪断紫胤\",\"sex\":\"男\",\"sign\":\"正努力向完美转变中。\",\"avatar\":\"http://i0.hdslb.com/bfs/face/8a18d185e94e2bdc7d9f8945ae8c38c4672ac597.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5530,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"有中配版，有没有高配或者顶配呀\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":280191258,\"oid\":9716141,\"type\":1,\"mid\":2552666,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":288,\"state\":0,\"attr\":0,\"ctime\":1497014052,\"rpid_str\":\"280191258\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"2552666\",\"uname\":\"市场铁\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/95f67f019fc334488dde16d951eca7449606aebd.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"1040\",\"level_info\":{\"current_level\":5,\"current_min\":10800,\"current_exp\":16297,\"next_exp\":28800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1494777600000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"我想到了哆啦A梦\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279894444,\"oid\":9716141,\"type\":1,\"mid\":39671885,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":286,\"state\":0,\"attr\":0,\"ctime\":1496991136,\"rpid_str\":\"279894444\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"39671885\",\"uname\":\"宁培竣\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i2.hdslb.com/bfs/face/4c2cac6cc275a30f64dd01b2cbce42d05e22854c.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5593,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"啥时候出中文3D版了？\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279882402,\"oid\":9716141,\"type\":1,\"mid\":43314145,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":285,\"state\":6,\"attr\":4,\"ctime\":1496989818,\"rpid_str\":\"279882402\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"43314145\",\"uname\":\"尘锁于忆\",\"sex\":\"保密\",\"sign\":\"        如果生活已经充满压力，那不如放纵的当一回看客。\",\"avatar\":\"http://i0.hdslb.com/bfs/face/e453da54755616fba2544120862efb281c6bc732.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3068,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"姚明？羊皮？\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279852848,\"oid\":9716141,\"type\":1,\"mid\":16821529,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":284,\"state\":0,\"attr\":0,\"ctime\":1496986822,\"rpid_str\":\"279852848\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"16821529\",\"uname\":\"stayslience\",\"sex\":\"男\",\"sign\":\"有权保持沉默\",\"avatar\":\"http://i2.hdslb.com/bfs/face/ebb6b24c49c53fba919d28bab885673516fb04a6.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3924,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"中配版。。。拜托我想要高配版\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279806093,\"oid\":9716141,\"type\":1,\"mid\":6969072,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":283,\"state\":0,\"attr\":0,\"ctime\":1496983371,\"rpid_str\":\"279806093\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"6969072\",\"uname\":\"杀生丸丸子\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i1.hdslb.com/bfs/face/19d5a46867f722afab774d810d4887644167c947.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3450,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"不错的\",\"plat\":3,\"device\":\"phone\",\"members\":[]},\"replies\":[]},{\"rpid\":279282867,\"oid\":9716141,\"type\":1,\"mid\":44978376,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":281,\"state\":6,\"attr\":4,\"ctime\":1496924010,\"rpid_str\":\"279282867\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"44978376\",\"uname\":\"堆稿昂画手_竹倾隐\",\"sex\":\"女\",\"sign\":\"/弯眸笑，要画的小可爱们记得先预约哦\",\"avatar\":\"http://i2.hdslb.com/bfs/face/ca780aefa0ea72665c3ec651c62b7e8d3f167deb.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2295,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"各位，我受不了这里小奇的配音，先走了\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":275778872,\"oid\":9716141,\"type\":1,\"mid\":40563245,\"root\":0,\"parent\":0,\"count\":2,\"rcount\":2,\"floor\":280,\"state\":0,\"attr\":0,\"ctime\":1496565920,\"rpid_str\":\"275778872\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"40563245\",\"uname\":\"昔年旧忆i\",\"sex\":\"保密\",\"sign\":\"我也不知道要写什么诶。\",\"avatar\":\"http://i2.hdslb.com/bfs/face/5ac4bb668042c70a4339e49200a8980b44b948d8.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":1554,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"终于知道罗小黑战记里的皇受是出自哪里的了\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":276007159,\"oid\":9716141,\"type\":1,\"mid\":22505348,\"root\":275778872,\"parent\":275778872,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1496583250,\"rpid_str\":\"276007159\",\"root_str\":\"275778872\",\"parent_str\":\"275778872\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"22505348\",\"uname\":\"古里古怪sx\",\"sex\":\"保密\",\"sign\":\"坚强的胖妹子٩(ˊvˋ*)و做自己就好\",\"avatar\":\"http://i2.hdslb.com/bfs/face/b6e7c63362f0475aa92937c7f1da14ec1e8854ed.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":4943,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"你想表达？\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null},{\"rpid\":279023596,\"oid\":9716141,\"type\":1,\"mid\":14043921,\"root\":275778872,\"parent\":275778872,\"count\":0,\"rcount\":0,\"floor\":2,\"state\":0,\"attr\":0,\"ctime\":1496902754,\"rpid_str\":\"279023596\",\"root_str\":\"275778872\",\"parent_str\":\"275778872\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"14043921\",\"uname\":\"又又柚\",\"sex\":\"女\",\"sign\":\"这个人懒死了，什么都没有写|v･`)\",\"avatar\":\"http://i0.hdslb.com/bfs/face/7d9eedc299a1eb96568f5acdaa41516ee21f32d1.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":7788,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1485187200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"小皇不是这个花纹→_→不过应该同属于虎斑\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":275176258,\"oid\":9716141,\"type\":1,\"mid\":17884331,\"root\":0,\"parent\":0,\"count\":1,\"rcount\":1,\"floor\":278,\"state\":6,\"attr\":4,\"ctime\":1496499607,\"rpid_str\":\"275176258\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":2,\"action\":0,\"member\":{\"mid\":\"17884331\",\"uname\":\"Hu0华哥\",\"sex\":\"保密\",\"sign\":\"华哥人品粉！\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2127,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"对不起劳资忍受不了这个配音再见（#-_-)┯━┯\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":279283139,\"oid\":9716141,\"type\":1,\"mid\":44978376,\"root\":275176258,\"parent\":275176258,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1496924029,\"rpid_str\":\"279283139\",\"root_str\":\"275176258\",\"parent_str\":\"275176258\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"44978376\",\"uname\":\"堆稿昂画手_竹倾隐\",\"sex\":\"女\",\"sign\":\"/弯眸笑，要画的小可爱们记得先预约哦\",\"avatar\":\"http://i2.hdslb.com/bfs/face/ca780aefa0ea72665c3ec651c62b7e8d3f167deb.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2295,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"我也，受不了\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":274835250,\"oid\":9716141,\"type\":1,\"mid\":5831313,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":277,\"state\":0,\"attr\":0,\"ctime\":1496473270,\"rpid_str\":\"274835250\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"5831313\",\"uname\":\"鲛潇玉透\",\"sex\":\"女\",\"sign\":\"  酷爱来咬我吖\\\\\\\\(^o^)/~\",\"avatar\":\"http://i0.hdslb.com/bfs/face/8625d654cf5bcc93f74287202313d98aeda498c5.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":4725,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"没有1、2季了喵？！Σ( ￣□￣||)\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274283648,\"oid\":9716141,\"type\":1,\"mid\":23237333,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":275,\"state\":0,\"attr\":0,\"ctime\":1496411335,\"rpid_str\":\"274283648\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"23237333\",\"uname\":\"源子橙\",\"sex\":\"女\",\"sign\":\"今天的风甚是喧嚣！\",\"avatar\":\"http://i2.hdslb.com/bfs/face/5f70b2860677a92268598f3e6021c10225615675.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2448,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"同样是猫，还是罗小黑可爱～这个甜甜猫给我一种我还在读幼儿园的错觉╮(￣▽￣)╭\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274251320,\"oid\":9716141,\"type\":1,\"mid\":30203449,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":274,\"state\":0,\"attr\":0,\"ctime\":1496409372,\"rpid_str\":\"274251320\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":2,\"action\":0,\"member\":{\"mid\":\"30203449\",\"uname\":\"白映＠\",\"sex\":\"男\",\"sign\":\"这个人很勤快写了这么多\",\"avatar\":\"http://i1.hdslb.com/bfs/face/14686527d8d715e986ddd29a208775a29a0030c8.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3747,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"我要看高配版的！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274180412,\"oid\":9716141,\"type\":1,\"mid\":38597616,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":273,\"state\":0,\"attr\":0,\"ctime\":1496404663,\"rpid_str\":\"274180412\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"38597616\",\"uname\":\"yellow黄女\",\"sex\":\"保密\",\"sign\":\"太阳是我胯下金灿灿的G丸\",\"avatar\":\"http://i1.hdslb.com/bfs/face/32622cba679366524729d4119e7a76d7be67f7ae.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":1077,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"好想看\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274115046,\"oid\":9716141,\"type\":1,\"mid\":55469518,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":272,\"state\":0,\"attr\":0,\"ctime\":1496400268,\"rpid_str\":\"274115046\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"55469518\",\"uname\":\"漫界中二患者\",\"sex\":\"保密\",\"sign\":\"我不是懒，我只是忙的不明显～\",\"avatar\":\"http://i0.hdslb.com/bfs/face/4995a56692ae2018234c5c0ff1c5d799a17e0565.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":709,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"其实一开始我是拒绝的\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":273883801,\"oid\":9716141,\"type\":1,\"mid\":40526333,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":271,\"state\":0,\"attr\":0,\"ctime\":1496378204,\"rpid_str\":\"273883801\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"40526333\",\"uname\":\"最最最可爱的萌新\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/8f93ea3bf15d94fd9264725562d542279fb700c7.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":1861,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"！！！！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]}],\"upper\":{\"mid\":928123}}\n     * message : 0\n     * ttl : 1\n     */\n\n\n    data class DataBean(var page: PageBean,\n                        var upper: UpperBean,\n                        var hots: List<HotsBean>,\n                        var replies: List<RepliesBean>) {\n        /**\n         * hots : [{\"rpid\":233279383,\"oid\":9716141,\"type\":1,\"mid\":825142,\"root\":0,\"parent\":0,\"count\":12,\"rcount\":11,\"floor\":17,\"state\":0,\"attr\":0,\"ctime\":1491710726,\"rpid_str\":\"233279383\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":156,\"action\":0,\"member\":{\"mid\":\"825142\",\"uname\":\"Ke_Rio\",\"sex\":\"保密\",\"sign\":\"ルパパ\",\"avatar\":\"http://i1.hdslb.com/bfs/face/7189bc2b5654a3f1e8bbf34bf9719b7403e21bac.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":5,\"current_min\":10800,\"current_exp\":12430,\"next_exp\":28800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1485100800000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"港真 还没习惯日配先来听中配的话没什么违和感 还挺不错的(｀・ω・´)\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":233316451,\"oid\":9716141,\"type\":1,\"mid\":89595,\"root\":0,\"parent\":0,\"count\":8,\"rcount\":8,\"floor\":59,\"state\":0,\"attr\":0,\"ctime\":1491713408,\"rpid_str\":\"233316451\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":54,\"action\":0,\"member\":{\"mid\":\"89595\",\"uname\":\"声动音缘-叮当\",\"sex\":\"男\",\"sign\":\"配音的\\u2026作品有《那年那兔那些事》鹰酱 《仙剑客栈》李逍遥 《雏蜂》孙浩轩 《灵剑山》王忠 微博是 @叮当-声动音缘 =w=\",\"avatar\":\"http://i1.hdslb.com/bfs/face/777af34c5afeee13fe13418f8ea5218bf50ffde6.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":6,\"current_min\":28800,\"current_exp\":47434,\"next_exp\":\"-\"},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":1,\"name\":\"黄金殿堂\",\"image\":\"http://i0.hdslb.com/bfs/face/82896ff40fcb4e7c7259cb98056975830cb55695.png\",\"image_small\":\"http://i0.hdslb.com/bfs/face/627e342851dfda6fe7380c2fa0cbd7fae2e61533.png\",\"level\":\"稀有勋章\",\"condition\":\"单个自制视频总播放数>=100万\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1504886400000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":1,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"美秀姐配音的角色有很多哦，静香、孙小美、朝比奈实玖留、花橘子、c.c等\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":233303106,\"oid\":9716141,\"type\":1,\"mid\":14790663,\"root\":0,\"parent\":0,\"count\":22,\"rcount\":21,\"floor\":49,\"state\":0,\"attr\":0,\"ctime\":1491712468,\"rpid_str\":\"233303106\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":64,\"action\":0,\"member\":{\"mid\":\"14790663\",\"uname\":\"百度了一个名字\",\"sex\":\"女\",\"sign\":\"一路伴晗\",\"avatar\":\"http://i2.hdslb.com/bfs/face/e5977f66aedb5705a8a4b8e1ab842eefc13fef94.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":6683,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1488729600000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"弯弯腔好可怕\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]}]\n         * page : {\"acount\":354,\"count\":255,\"num\":1,\"size\":20}\n         * replies : [{\"rpid\":281876224,\"oid\":9716141,\"type\":1,\"mid\":129377365,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":294,\"state\":0,\"attr\":0,\"ctime\":1497170348,\"rpid_str\":\"281876224\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"129377365\",\"uname\":\"a1379488\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":213,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"好可爱\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281820912,\"oid\":9716141,\"type\":1,\"mid\":5398071,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":293,\"state\":2,\"attr\":8,\"ctime\":1497165758,\"rpid_str\":\"281820912\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"5398071\",\"uname\":\"吾谶\",\"sex\":\"女\",\"sign\":\"CP可以逆  本命不能移               \\r\",\"avatar\":\"http://i2.hdslb.com/bfs/face/762e47bb9f9a728ab2e67937868cf824348d1a16.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":7274,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"***\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281805343,\"oid\":9716141,\"type\":1,\"mid\":12752126,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":292,\"state\":0,\"attr\":0,\"ctime\":1497164408,\"rpid_str\":\"281805343\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"12752126\",\"uname\":\"凉风有性胖次尹\",\"sex\":\"男\",\"sign\":\"这个人特勤快，什么都没有写(･_･`)\",\"avatar\":\"http://i2.hdslb.com/bfs/face/c0cd67a80e7125478bae17ad4e97ca7794e7bf4c.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"1043\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5676,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"中配\\u2026\\u2026高配呢？有没有顶配的啊\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281722086,\"oid\":9716141,\"type\":1,\"mid\":3289630,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":291,\"state\":0,\"attr\":0,\"ctime\":1497158060,\"rpid_str\":\"281722086\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"3289630\",\"uname\":\"翻海神疾风\",\"sex\":\"男\",\"sign\":\"\\u201d破喉咙！破喉咙！！\\u201c\",\"avatar\":\"http://i1.hdslb.com/bfs/face/8a135c1b14964672e18ffc01838c3acd329a406d.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":10510,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1487088000000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"中配，哇⊙∀⊙！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281698661,\"oid\":9716141,\"type\":1,\"mid\":85581896,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":290,\"state\":0,\"attr\":0,\"ctime\":1497156547,\"rpid_str\":\"281698661\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"85581896\",\"uname\":\"凶牙重战车\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":1397,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"其实这准确说是台湾配音，因为说话腔调的问题，有的角色的配音显得没有日语好听，比如小奇的配音，不过爸爸妈妈之类的配音却很好听。如果是大陆配音的话，我觉得让山新配音最合适！\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":281666153,\"oid\":9716141,\"type\":1,\"mid\":11483392,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":289,\"state\":0,\"attr\":0,\"ctime\":1497154535,\"rpid_str\":\"281666153\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"11483392\",\"uname\":\"泪断紫胤\",\"sex\":\"男\",\"sign\":\"正努力向完美转变中。\",\"avatar\":\"http://i0.hdslb.com/bfs/face/8a18d185e94e2bdc7d9f8945ae8c38c4672ac597.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5530,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"有中配版，有没有高配或者顶配呀\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":280191258,\"oid\":9716141,\"type\":1,\"mid\":2552666,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":288,\"state\":0,\"attr\":0,\"ctime\":1497014052,\"rpid_str\":\"280191258\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"2552666\",\"uname\":\"市场铁\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/95f67f019fc334488dde16d951eca7449606aebd.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"1040\",\"level_info\":{\"current_level\":5,\"current_min\":10800,\"current_exp\":16297,\"next_exp\":28800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1494777600000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"我想到了哆啦A梦\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279894444,\"oid\":9716141,\"type\":1,\"mid\":39671885,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":286,\"state\":0,\"attr\":0,\"ctime\":1496991136,\"rpid_str\":\"279894444\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"39671885\",\"uname\":\"宁培竣\",\"sex\":\"男\",\"sign\":\"\",\"avatar\":\"http://i2.hdslb.com/bfs/face/4c2cac6cc275a30f64dd01b2cbce42d05e22854c.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":5593,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"啥时候出中文3D版了？\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279882402,\"oid\":9716141,\"type\":1,\"mid\":43314145,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":285,\"state\":6,\"attr\":4,\"ctime\":1496989818,\"rpid_str\":\"279882402\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"43314145\",\"uname\":\"尘锁于忆\",\"sex\":\"保密\",\"sign\":\"        如果生活已经充满压力，那不如放纵的当一回看客。\",\"avatar\":\"http://i0.hdslb.com/bfs/face/e453da54755616fba2544120862efb281c6bc732.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3068,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"姚明？羊皮？\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279852848,\"oid\":9716141,\"type\":1,\"mid\":16821529,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":284,\"state\":0,\"attr\":0,\"ctime\":1496986822,\"rpid_str\":\"279852848\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"16821529\",\"uname\":\"stayslience\",\"sex\":\"男\",\"sign\":\"有权保持沉默\",\"avatar\":\"http://i2.hdslb.com/bfs/face/ebb6b24c49c53fba919d28bab885673516fb04a6.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3924,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"中配版。。。拜托我想要高配版\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":279806093,\"oid\":9716141,\"type\":1,\"mid\":6969072,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":283,\"state\":0,\"attr\":0,\"ctime\":1496983371,\"rpid_str\":\"279806093\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"6969072\",\"uname\":\"杀生丸丸子\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i1.hdslb.com/bfs/face/19d5a46867f722afab774d810d4887644167c947.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3450,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"不错的\",\"plat\":3,\"device\":\"phone\",\"members\":[]},\"replies\":[]},{\"rpid\":279282867,\"oid\":9716141,\"type\":1,\"mid\":44978376,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":281,\"state\":6,\"attr\":4,\"ctime\":1496924010,\"rpid_str\":\"279282867\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"44978376\",\"uname\":\"堆稿昂画手_竹倾隐\",\"sex\":\"女\",\"sign\":\"/弯眸笑，要画的小可爱们记得先预约哦\",\"avatar\":\"http://i2.hdslb.com/bfs/face/ca780aefa0ea72665c3ec651c62b7e8d3f167deb.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2295,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"各位，我受不了这里小奇的配音，先走了\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":275778872,\"oid\":9716141,\"type\":1,\"mid\":40563245,\"root\":0,\"parent\":0,\"count\":2,\"rcount\":2,\"floor\":280,\"state\":0,\"attr\":0,\"ctime\":1496565920,\"rpid_str\":\"275778872\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":1,\"action\":0,\"member\":{\"mid\":\"40563245\",\"uname\":\"昔年旧忆i\",\"sex\":\"保密\",\"sign\":\"我也不知道要写什么诶。\",\"avatar\":\"http://i2.hdslb.com/bfs/face/5ac4bb668042c70a4339e49200a8980b44b948d8.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":1554,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"终于知道罗小黑战记里的皇受是出自哪里的了\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":276007159,\"oid\":9716141,\"type\":1,\"mid\":22505348,\"root\":275778872,\"parent\":275778872,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1496583250,\"rpid_str\":\"276007159\",\"root_str\":\"275778872\",\"parent_str\":\"275778872\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"22505348\",\"uname\":\"古里古怪sx\",\"sex\":\"保密\",\"sign\":\"坚强的胖妹子٩(ˊvˋ*)و做自己就好\",\"avatar\":\"http://i2.hdslb.com/bfs/face/b6e7c63362f0475aa92937c7f1da14ec1e8854ed.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":4943,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"你想表达？\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null},{\"rpid\":279023596,\"oid\":9716141,\"type\":1,\"mid\":14043921,\"root\":275778872,\"parent\":275778872,\"count\":0,\"rcount\":0,\"floor\":2,\"state\":0,\"attr\":0,\"ctime\":1496902754,\"rpid_str\":\"279023596\",\"root_str\":\"275778872\",\"parent_str\":\"275778872\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"14043921\",\"uname\":\"又又柚\",\"sex\":\"女\",\"sign\":\"这个人懒死了，什么都没有写|v･`)\",\"avatar\":\"http://i0.hdslb.com/bfs/face/7d9eedc299a1eb96568f5acdaa41516ee21f32d1.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":7788,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1485187200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"小皇不是这个花纹→_→不过应该同属于虎斑\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":275176258,\"oid\":9716141,\"type\":1,\"mid\":17884331,\"root\":0,\"parent\":0,\"count\":1,\"rcount\":1,\"floor\":278,\"state\":6,\"attr\":4,\"ctime\":1496499607,\"rpid_str\":\"275176258\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":2,\"action\":0,\"member\":{\"mid\":\"17884331\",\"uname\":\"Hu0华哥\",\"sex\":\"保密\",\"sign\":\"华哥人品粉！\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2127,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"对不起劳资忍受不了这个配音再见（#-_-)┯━┯\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[{\"rpid\":279283139,\"oid\":9716141,\"type\":1,\"mid\":44978376,\"root\":275176258,\"parent\":275176258,\"count\":0,\"rcount\":0,\"floor\":1,\"state\":0,\"attr\":0,\"ctime\":1496924029,\"rpid_str\":\"279283139\",\"root_str\":\"275176258\",\"parent_str\":\"275176258\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"44978376\",\"uname\":\"堆稿昂画手_竹倾隐\",\"sex\":\"女\",\"sign\":\"/弯眸笑，要画的小可爱们记得先预约哦\",\"avatar\":\"http://i2.hdslb.com/bfs/face/ca780aefa0ea72665c3ec651c62b7e8d3f167deb.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2295,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"我也，受不了\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":null}]},{\"rpid\":274835250,\"oid\":9716141,\"type\":1,\"mid\":5831313,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":277,\"state\":0,\"attr\":0,\"ctime\":1496473270,\"rpid_str\":\"274835250\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"5831313\",\"uname\":\"鲛潇玉透\",\"sex\":\"女\",\"sign\":\"  酷爱来咬我吖\\\\\\\\(^o^)/~\",\"avatar\":\"http://i0.hdslb.com/bfs/face/8625d654cf5bcc93f74287202313d98aeda498c5.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":4,\"current_min\":4500,\"current_exp\":4725,\"next_exp\":10800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"没有1、2季了喵？！Σ( ￣□￣||)\",\"plat\":1,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274283648,\"oid\":9716141,\"type\":1,\"mid\":23237333,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":275,\"state\":0,\"attr\":0,\"ctime\":1496411335,\"rpid_str\":\"274283648\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"23237333\",\"uname\":\"源子橙\",\"sex\":\"女\",\"sign\":\"今天的风甚是喧嚣！\",\"avatar\":\"http://i2.hdslb.com/bfs/face/5f70b2860677a92268598f3e6021c10225615675.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":2448,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"同样是猫，还是罗小黑可爱～这个甜甜猫给我一种我还在读幼儿园的错觉╮(￣▽￣)╭\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274251320,\"oid\":9716141,\"type\":1,\"mid\":30203449,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":274,\"state\":0,\"attr\":0,\"ctime\":1496409372,\"rpid_str\":\"274251320\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":2,\"action\":0,\"member\":{\"mid\":\"30203449\",\"uname\":\"白映＠\",\"sex\":\"男\",\"sign\":\"这个人很勤快写了这么多\",\"avatar\":\"http://i1.hdslb.com/bfs/face/14686527d8d715e986ddd29a208775a29a0030c8.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":3747,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1478707200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"我要看高配版的！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274180412,\"oid\":9716141,\"type\":1,\"mid\":38597616,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":273,\"state\":0,\"attr\":0,\"ctime\":1496404663,\"rpid_str\":\"274180412\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"38597616\",\"uname\":\"yellow黄女\",\"sex\":\"保密\",\"sign\":\"太阳是我胯下金灿灿的G丸\",\"avatar\":\"http://i1.hdslb.com/bfs/face/32622cba679366524729d4119e7a76d7be67f7ae.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":1077,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"好想看\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":274115046,\"oid\":9716141,\"type\":1,\"mid\":55469518,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":272,\"state\":0,\"attr\":0,\"ctime\":1496400268,\"rpid_str\":\"274115046\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"55469518\",\"uname\":\"漫界中二患者\",\"sex\":\"保密\",\"sign\":\"我不是懒，我只是忙的不明显～\",\"avatar\":\"http://i0.hdslb.com/bfs/face/4995a56692ae2018234c5c0ff1c5d799a17e0565.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":709,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"其实一开始我是拒绝的\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]},{\"rpid\":273883801,\"oid\":9716141,\"type\":1,\"mid\":40526333,\"root\":0,\"parent\":0,\"count\":0,\"rcount\":0,\"floor\":271,\"state\":0,\"attr\":0,\"ctime\":1496378204,\"rpid_str\":\"273883801\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":0,\"action\":0,\"member\":{\"mid\":\"40526333\",\"uname\":\"最最最可爱的萌新\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/8f93ea3bf15d94fd9264725562d542279fb700c7.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":3,\"current_min\":1500,\"current_exp\":1861,\"next_exp\":4500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}},\"content\":{\"message\":\"！！！！\",\"plat\":2,\"device\":\"\",\"members\":[]},\"replies\":[]}]\n         * upper : {\"mid\":928123}\n         */\n\n\n        data class PageBean(var acount: Int,\n                            var count: Int,\n                            var num: Int,\n                            var size: Int) {\n            /**\n             * acount : 354\n             * count : 255\n             * num : 1\n             * size : 20\n             */\n\n\n        }\n\n        data class UpperBean(var mid: Int) {\n            /**\n             * mid : 928123\n             */\n\n\n        }\n\n        data class HotsBean(var rpid: Int,\n                            var oid: Int,\n                            var type: Int,\n                            var mid: Int,\n                            var root: Int,\n                            var parent: Int,\n                            var count: Int,\n                            var rcount: Int,\n                            var floor: Int,\n                            var state: Int,\n                            var attr: Int,\n                            var ctime: Int,\n                            var rpid_str: String,\n                            var root_str: String,\n                            var parent_str: String,\n                            var like: Int,\n                            var action: Int,\n                            var member: MemberBean,\n                            var content: ContentBean,\n                            var replies: List<Any>) {\n            /**\n             * rpid : 233279383\n             * oid : 9716141\n             * type : 1\n             * mid : 825142\n             * root : 0\n             * parent : 0\n             * count : 12\n             * rcount : 11\n             * floor : 17\n             * state : 0\n             * attr : 0\n             * ctime : 1491710726\n             * rpid_str : 233279383\n             * root_str : 0\n             * parent_str : 0\n             * like : 156\n             * action : 0\n             * member : {\"mid\":\"825142\",\"uname\":\"Ke_Rio\",\"sex\":\"保密\",\"sign\":\"ルパパ\",\"avatar\":\"http://i1.hdslb.com/bfs/face/7189bc2b5654a3f1e8bbf34bf9719b7403e21bac.jpg\",\"rank\":\"10000\",\"DisplayRank\":\"10000\",\"level_info\":{\"current_level\":5,\"current_min\":10800,\"current_exp\":12430,\"next_exp\":28800},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1485100800000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\"}}\n             * content : {\"message\":\"港真 还没习惯日配先来听中配的话没什么违和感 还挺不错的(｀・ω・´)\",\"plat\":2,\"device\":\"\",\"members\":[]}\n             * replies : []\n             */\n\n\n            data class MemberBean(var mid: String,\n                                  var uname: String,\n                                  var sex: String,\n                                  var sign: String,\n                                  var avatar: String,\n                                  var rank: String,\n                                  var DisplayRank: String,\n                                  var level_info: LevelInfoBean,\n                                  var pendant: PendantBean,\n                                  var nameplate: NameplateBean,\n                                  var official_verify: OfficialVerifyBean,\n                                  var vip: VipBean) {\n                /**\n                 * mid : 825142\n                 * uname : Ke_Rio\n                 * sex : 保密\n                 * sign : ルパパ\n                 * avatar : http://i1.hdslb.com/bfs/face/7189bc2b5654a3f1e8bbf34bf9719b7403e21bac.jpg\n                 * rank : 10000\n                 * DisplayRank : 10000\n                 * level_info : {\"current_level\":5,\"current_min\":10800,\"current_exp\":12430,\"next_exp\":28800}\n                 * pendant : {\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0}\n                 * nameplate : {\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"}\n                 * official_verify : {\"type\":-1,\"desc\":\"\"}\n                 * vip : {\"vipType\":1,\"vipDueDate\":1485100800000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\"}\n                 */\n\n\n                data class LevelInfoBean(var current_level: Int,\n                                         var current_min: Int,\n                                         var current_exp: Int,\n                                         var next_exp: String) {\n                    /**\n                     * current_level : 5\n                     * current_min : 10800\n                     * current_exp : 12430\n                     * next_exp : 28800\n                     */\n\n\n                }\n\n                data class PendantBean(var pid: Int,\n                                       var name: String,\n                                       var image: String,\n                                       var expire: Long) {\n                    /**\n                     * pid : 0\n                     * name :\n                     * image :\n                     * expire : 0\n                     */\n\n\n                }\n\n                data class NameplateBean(var nid: Int,\n                                         var name: String,\n                                         var image: String,\n                                         var image_small: String,\n                                         var level: String,\n                                         var condition: String) {\n                    /**\n                     * nid : 0\n                     * name :\n                     * image :\n                     * image_small :\n                     * level :\n                     * condition :\n                     */\n\n\n                }\n\n                data class OfficialVerifyBean(var type: Int,\n                                              var desc: String) {\n                    /**\n                     * type : -1\n                     * desc :\n                     */\n\n\n                }\n\n                data class VipBean(var vipType: Int,\n                                   var vipDueDate: Long,\n                                   var dueRemark: String,\n                                   var accessStatus: Int,\n                                   var vipStatus: Int,\n                                   var vipStatusWarn: String) {\n                    /**\n                     * vipType : 1\n                     * vipDueDate : 1485100800000\n                     * dueRemark :\n                     * accessStatus : 0\n                     * vipStatus : 0\n                     * vipStatusWarn :\n                     */\n\n\n                }\n            }\n\n            data class ContentBean(var message: String,\n                                   var plat: Int,\n                                   var device: String,\n                                   var members: List<Any>) {\n                /**\n                 * message : 港真 还没习惯日配先来听中配的话没什么违和感 还挺不错的(｀・ω・´)\n                 * plat : 2\n                 * device :\n                 * members : []\n                 */\n\n\n            }\n        }\n\n        data class RepliesBean(var rpid: Int,\n                               var oid: Int,\n                               var type: Int,\n                               var mid: Int,\n                               var root: Int,\n                               var parent: Int,\n                               var count: Int,\n                               var rcount: Int,\n                               var floor: Int,\n                               var state: Int,\n                               var attr: Int,\n                               var ctime: Int,\n                               var rpid_str: String,\n                               var root_str: String,\n                               var parent_str: String,\n                               var like: Int,\n                               var action: Int,\n                               var member: MemberBeanX,\n                               var content: ContentBeanX,\n                               var replies: List<Any>) {\n            /**\n             * rpid : 281876224\n             * oid : 9716141\n             * type : 1\n             * mid : 129377365\n             * root : 0\n             * parent : 0\n             * count : 0\n             * rcount : 0\n             * floor : 294\n             * state : 0\n             * attr : 0\n             * ctime : 1497170348\n             * rpid_str : 281876224\n             * root_str : 0\n             * parent_str : 0\n             * like : 0\n             * action : 0\n             * member : {\"mid\":\"129377365\",\"uname\":\"a1379488\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"rank\":\"10000\",\"DisplayRank\":\"0\",\"level_info\":{\"current_level\":2,\"current_min\":200,\"current_exp\":213,\"next_exp\":1500},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}}\n             * content : {\"message\":\"好可爱\",\"plat\":2,\"device\":\"\",\"members\":[]}\n             * replies : []\n             */\n\n\n            data class MemberBeanX(var mid: String,\n                                   var uname: String,\n                                   var sex: String,\n                                   var sign: String,\n                                   var avatar: String,\n                                   var rank: String,\n                                   var DisplayRank: String,\n                                   var level_info: LevelInfoBeanX,\n                                   var pendant: PendantBeanX,\n                                   var nameplate: NameplateBeanX,\n                                   var official_verify: OfficialVerifyBeanX,\n                                   var vip: VipBeanX) {\n                /**\n                 * mid : 129377365\n                 * uname : a1379488\n                 * sex : 保密\n                 * sign :\n                 * avatar : http://static.hdslb.com/images/member/noface.gif\n                 * rank : 10000\n                 * DisplayRank : 0\n                 * level_info : {\"current_level\":2,\"current_min\":200,\"current_exp\":213,\"next_exp\":1500}\n                 * pendant : {\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0}\n                 * nameplate : {\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"}\n                 * official_verify : {\"type\":-1,\"desc\":\"\"}\n                 * vip : {\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":1,\"vipStatus\":0,\"vipStatusWarn\":\"\"}\n                 */\n\n\n                data class LevelInfoBeanX(var current_level: Int,\n                                          var current_min: Int,\n                                          var current_exp: Int,\n                                          var next_exp: String) {\n                    /**\n                     * current_level : 2\n                     * current_min : 200\n                     * current_exp : 213\n                     * next_exp : 1500\n                     */\n\n\n                }\n\n                data class PendantBeanX(var pid: Int,\n                                        var name: String,\n                                        var image: String,\n                                        var expire: Long) {\n                    /**\n                     * pid : 0\n                     * name :\n                     * image :\n                     * expire : 0\n                     */\n\n\n                }\n\n                data class NameplateBeanX(var nid: Int,\n                                          var name: String,\n                                          var image: String,\n                                          var image_small: String,\n                                          var level: String,\n                                          var condition: String) {\n                    /**\n                     * nid : 0\n                     * name :\n                     * image :\n                     * image_small :\n                     * level :\n                     * condition :\n                     */\n\n\n                }\n\n                data class OfficialVerifyBeanX(var type: Int,\n                                               var desc: String) {\n                    /**\n                     * type : -1\n                     * desc :\n                     */\n\n\n                }\n\n                data class VipBeanX(var vipType: Int,\n                                    var vipDueDate: Long,\n                                    var dueRemark: String,\n                                    var accessStatus: Int,\n                                    var vipStatus: Int,\n                                    var vipStatusWarn: String) {\n                    /**\n                     * vipType : 0\n                     * vipDueDate : 0\n                     * dueRemark :\n                     * accessStatus : 1\n                     * vipStatus : 0\n                     * vipStatusWarn :\n                     */\n\n\n                }\n            }\n\n            data class ContentBeanX(var message: String,\n                                    var plat: Int,\n                                    var device: String,\n                                    var members: List<Any>) {\n                /**\n                 * message : 好可爱\n                 * plat : 2\n                 * device :\n                 * members : []\n                 */\n\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/bangumi/BangumiDetailRecommend.kt",
    "content": "package com.yoyiyi.soleil.bean.bangumi\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 14:45\n * * 描述:番剧详情界面推荐\n */\nclass BangumiDetailRecommend(var from: Int,\n                             var season_id: String,\n                             var title: String,\n                             var list: List<ListBean>){\n\n    /**\n     * from : 1\n     * list : [{\"bangumi_id\":\"970\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/a77f4cc1417d9065722ff467ef919ff0d2ae7c3a.jpg\",\"follow\":\"23351\",\"isfinish\":\"1\",\"newest_ep_index\":\"13\",\"pub_time\":\"2006-10-02 00:00:00\",\"season_id\":\"1427\",\"season_status\":2,\"tags\":[{\"tag_name\":\"基腐\"},{\"tag_name\":\"乙女\"}],\"title\":\"月桂树的王子们\",\"total_count\":\"13\"},{\"bangumi_id\":\"3520\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/950493f731008fc3e3de7bb2df3c833a2c6a9cc4.jpg\",\"follow\":\"211734\",\"isfinish\":\"1\",\"newest_ep_index\":\"20\",\"pub_time\":\"2017-01-12 00:00:00\",\"season_id\":\"5854\",\"season_status\":2,\"tags\":[{\"tag_name\":\"热血\"},{\"tag_name\":\"奇幻\"},{\"tag_name\":\"漫改\"}],\"title\":\"超游世界\",\"total_count\":\"20\"},{\"bangumi_id\":\"3290\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/d1d6774866c5bb897a2edb6f3fe7de0fc8bc5e8f.jpg\",\"follow\":\"4214\",\"isfinish\":\"1\",\"newest_ep_index\":\"12\",\"pub_time\":\"2016-10-03 00:30:00\",\"season_id\":\"5566\",\"season_status\":2,\"tags\":[{\"tag_name\":\"科幻\"},{\"tag_name\":\"偶像\"},{\"tag_name\":\"原创\"},{\"tag_name\":\"励志\"}],\"title\":\"星梦手记 声优节目\",\"total_count\":\"12\"},{\"bangumi_id\":\"1146\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/36c65fddf9b2a4f615c61fa493081cd8e9fadeca.jpg\",\"follow\":\"7305\",\"isfinish\":\"1\",\"newest_ep_index\":\"49\",\"pub_time\":\"2014-02-03 00:00:00\",\"season_id\":\"1711\",\"season_status\":2,\"tags\":[{\"tag_name\":\"热血\"},{\"tag_name\":\"奇幻\"},{\"tag_name\":\"萌系\"},{\"tag_name\":\"魔法\"}],\"title\":\"HappinessCharge光之美少女！\",\"total_count\":\"49\"},{\"bangumi_id\":\"3074\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/9ba139747aa9f1c576fd09bbf05d2e7b00b61a4b.jpg\",\"follow\":\"3529\",\"isfinish\":\"1\",\"newest_ep_index\":\"22-24\",\"pub_time\":\"2002-10-01 00:00:00\",\"season_id\":\"5169\",\"season_status\":2,\"tags\":[{\"tag_name\":\"校园\"}],\"title\":\"煌罗万象\",\"total_count\":\"24\"},{\"bangumi_id\":\"1647\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/ebb20431ffcb1aaa16983d3b30130e17a3d27b87.jpg\",\"follow\":\"2952\",\"isfinish\":\"1\",\"newest_ep_index\":\"3\",\"pub_time\":\"1985-03-25 00:00:00\",\"season_id\":\"2426\",\"season_status\":2,\"tags\":[{\"tag_name\":\"少女\"},{\"tag_name\":\"日常\"},{\"tag_name\":\"热血\"},{\"tag_name\":\"运动\"},{\"tag_name\":\"社团\"}],\"title\":\"棒球英豪 剧场版\",\"total_count\":\"3\"},{\"bangumi_id\":\"3447\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/a7270e8eb83e28ef5f71c66c379a850549f3d1c5.jpg\",\"follow\":\"2099\",\"isfinish\":\"0\",\"newest_ep_index\":\"-1\",\"pub_time\":\"2017-04-01 00:00:00\",\"season_id\":\"6028\",\"season_status\":2,\"tags\":[{\"tag_name\":\"战斗\"}],\"title\":\"霹雳开天记之创神篇\",\"total_count\":\"-1\"},{\"bangumi_id\":\"590\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/ab3ab705b4715033598b558392517cc28b615e16.jpg\",\"follow\":\"3614\",\"isfinish\":\"1\",\"newest_ep_index\":\"26\",\"pub_time\":\"2011-04-08 00:00:00\",\"season_id\":\"926\",\"season_status\":2,\"tags\":[{\"tag_name\":\"泡面\"},{\"tag_name\":\"日常\"},{\"tag_name\":\"搞笑\"},{\"tag_name\":\"猎奇\"}],\"title\":\"47都道府犬\",\"total_count\":\"47\"},{\"bangumi_id\":\"3457\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/bef2c7c08e62134387681eacec7694b992fab484.jpg\",\"follow\":\"1563\",\"isfinish\":\"1\",\"newest_ep_index\":\"13\",\"pub_time\":\"1992-01-01 00:00:00\",\"season_id\":\"5760\",\"season_status\":2,\"tags\":[{\"tag_name\":\"少儿\"}],\"title\":\"特别车队\",\"total_count\":\"13\"},{\"bangumi_id\":\"837\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/a3d0d788d7c5540738346feba308e36f88fd33b3.jpg\",\"follow\":\"6410\",\"isfinish\":\"1\",\"newest_ep_index\":\"13\",\"pub_time\":\"2008-01-07 00:00:00\",\"season_id\":\"1265\",\"season_status\":2,\"tags\":[{\"tag_name\":\"热血\"},{\"tag_name\":\"致郁\"},{\"tag_name\":\"战斗\"}],\"title\":\"神枪少女 -IL TEATRINO-\",\"total_count\":\"13\"},{\"bangumi_id\":\"1618\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/39902f4cfe99110216bf12f4fbd2aa938ac145b3.jpg\",\"follow\":\"7263\",\"isfinish\":\"1\",\"newest_ep_index\":\"48\",\"pub_time\":\"1990-10-18 00:00:00\",\"season_id\":\"2360\",\"season_status\":2,\"tags\":[{\"tag_name\":\"热血\"},{\"tag_name\":\"奇幻\"}],\"title\":\"三眼神童 TV版\",\"total_count\":\"48\"},{\"bangumi_id\":\"282\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/c0b0c2fb9eb9ea35488fc7a7b5336a515ee97a44.jpg\",\"follow\":\"82235\",\"isfinish\":\"1\",\"newest_ep_index\":\"25\",\"pub_time\":\"2013-10-06 00:00:00\",\"season_id\":\"471\",\"season_status\":2,\"tags\":[{\"tag_name\":\"奇幻\"},{\"tag_name\":\"战斗\"}],\"title\":\"魔笛MAGI 第二季\",\"total_count\":\"25\"},{\"bangumi_id\":\"3449\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/48733d26aee6f25ef3162f37a18bc6c59dba199d.jpg\",\"follow\":\"2041\",\"isfinish\":\"0\",\"newest_ep_index\":\"-1\",\"pub_time\":\"2017-04-01 00:00:00\",\"season_id\":\"6033\",\"season_status\":2,\"tags\":[{\"tag_name\":\"战斗\"}],\"title\":\"霹雳狼烟之古原爭霸\",\"total_count\":\"-1\"},{\"bangumi_id\":\"1194\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/e6f8e9b24804298c6db1656b36f617bb9af282b2.jpg\",\"follow\":\"24495\",\"isfinish\":\"1\",\"newest_ep_index\":\"EX02\",\"pub_time\":\"2008-05-02 00:00:00\",\"season_id\":\"1789\",\"season_status\":2,\"tags\":[{\"tag_name\":\"百合\"},{\"tag_name\":\"日常\"}],\"title\":\"CANDY BOY\",\"total_count\":\"9\"},{\"bangumi_id\":\"911\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/4397265d61c3b5a9c87864217369adbc20f15b5c.jpg\",\"follow\":\"7224\",\"isfinish\":\"1\",\"newest_ep_index\":\"12\",\"pub_time\":\"2007-07-03 00:00:00\",\"season_id\":\"3353\",\"season_status\":2,\"tags\":[{\"tag_name\":\"日常\"},{\"tag_name\":\"萌系\"}],\"title\":\"同人WORK\",\"total_count\":\"12\"},{\"bangumi_id\":\"1037\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/cb536ffb951d5730075012375785d649ce8bccc8.jpg\",\"follow\":\"926558\",\"isfinish\":\"1\",\"newest_ep_index\":\"12\",\"pub_time\":\"2015-01-08 00:00:00\",\"season_id\":\"1512\",\"season_status\":2,\"tags\":[{\"tag_name\":\"后宫\"},{\"tag_name\":\"恋爱\"},{\"tag_name\":\"轻改\"}],\"title\":\"路人女主的养成方法\",\"total_count\":\"13\"},{\"bangumi_id\":\"1866\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/dfd7ab1a996650852405f2e7f91cae13ca1bb553.jpg\",\"follow\":\"168669\",\"isfinish\":\"1\",\"newest_ep_index\":\"12\",\"pub_time\":\"2015-10-07 02:00:00\",\"season_id\":\"2746\",\"season_status\":2,\"tags\":[{\"tag_name\":\"后宫\"},{\"tag_name\":\"校园\"},{\"tag_name\":\"乙女\"}],\"title\":\"Dance with Devils\",\"total_count\":\"12\"},{\"bangumi_id\":\"1273\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/2a290dade1c5d8c09190388c2118c595d4364c1a.jpg\",\"follow\":\"3327\",\"isfinish\":\"1\",\"newest_ep_index\":\"26\",\"pub_time\":\"2004-10-04 00:00:00\",\"season_id\":\"1889\",\"season_status\":2,\"tags\":[{\"tag_name\":\"科幻\"}],\"title\":\"奇幻旅程\",\"total_count\":\"26\"},{\"bangumi_id\":\"3682\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/8c760f62b315a31bbab68d34da5cae7cd108c1cc.jpg\",\"follow\":\"111295\",\"isfinish\":\"0\",\"newest_ep_index\":\"10\",\"pub_time\":\"2017-05-09 12:00:00\",\"season_id\":\"6159\",\"season_status\":2,\"tags\":[{\"tag_name\":\"奇幻\"}],\"title\":\"妖神记\",\"total_count\":\"40\"},{\"bangumi_id\":\"724\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/e5ce601538cb44c75a5d0e8cb1cfe26de3a54b93.jpg\",\"follow\":\"1599\",\"isfinish\":\"1\",\"newest_ep_index\":\"1\",\"pub_time\":\"1995-08-05 00:00:00\",\"season_id\":\"3905\",\"season_status\":2,\"tags\":[{\"tag_name\":\"战斗\"},{\"tag_name\":\"魔法\"}],\"title\":\"秀逗魔导士 完全无欠版\",\"total_count\":\"1\"},{\"bangumi_id\":\"2994\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/c70cb401c95300511efa8bc651c76cf065499225.jpg\",\"follow\":\"631862\",\"isfinish\":\"1\",\"newest_ep_index\":\"12\",\"pub_time\":\"2016-07-15 00:00:00\",\"season_id\":\"5057\",\"season_status\":2,\"tags\":[{\"tag_name\":\"热血\"},{\"tag_name\":\"校园\"},{\"tag_name\":\"智斗\"}],\"title\":\"弹丸论破3 -绝望篇-\",\"total_count\":\"12\"},{\"bangumi_id\":\"2002\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/6b4e9290d166e2250ff1e7f4f5924add97ddab38.jpg\",\"follow\":\"123190\",\"isfinish\":\"1\",\"newest_ep_index\":\"12\",\"pub_time\":\"2016-01-11 00:15:00\",\"season_id\":\"3126\",\"season_status\":2,\"tags\":[{\"tag_name\":\"日常\"},{\"tag_name\":\"萌系\"},{\"tag_name\":\"魔法\"}],\"title\":\"魔法少女什么的已经够了啦。\",\"total_count\":\"12\"},{\"bangumi_id\":\"441\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/5e273558ff8d966533a5cb44112ac257edc337a5.jpg\",\"follow\":\"191743\",\"isfinish\":\"1\",\"newest_ep_index\":\"13\",\"pub_time\":\"2012-01-10 00:00:00\",\"season_id\":\"714\",\"season_status\":2,\"tags\":[{\"tag_name\":\"后宫\"},{\"tag_name\":\"日常\"},{\"tag_name\":\"治愈\"},{\"tag_name\":\"萌系\"}],\"title\":\"要听爸爸的话！\",\"total_count\":\"13\"},{\"bangumi_id\":\"3595\",\"cover\":\"http://i0.hdslb.com/bfs/bangumi/3bc8f9150d1d5de3d991e451e21c355aa839083f.jpg\",\"follow\":\"447337\",\"isfinish\":\"0\",\"newest_ep_index\":\"9\",\"pub_time\":\"2017-04-02 23:00:00\",\"season_id\":\"5995\",\"season_status\":2,\"tags\":[{\"tag_name\":\"日常\"},{\"tag_name\":\"治愈\"},{\"tag_name\":\"魔法\"},{\"tag_name\":\"萝莉\"}],\"title\":\"爱丽丝与藏六\",\"total_count\":\"12\"}]\n     * season_id : 6066\n     * title : 甜甜私房猫 第三季 中配版\n     */\n\n\n    class ListBean(var bangumi_id: String,\n                   var cover: String,\n                   var follow: String,\n                   var isfinish: String,\n                   var newest_ep_index: String,\n                   var pub_time: String,\n                   var season_id: String,\n                   var season_status: Int,\n                   var title: String,\n                   var total_count: String,\n                   var tags: List<TagsBean>){\n        /**\n         * bangumi_id : 970\n         * cover : http://i0.hdslb.com/bfs/bangumi/a77f4cc1417d9065722ff467ef919ff0d2ae7c3a.jpg\n         * follow : 23351\n         * isfinish : 1\n         * newest_ep_index : 13\n         * pub_time : 2006-10-02 00:00:00\n         * season_id : 1427\n         * season_status : 2\n         * tags : [{\"tag_name\":\"基腐\"},{\"tag_name\":\"乙女\"}]\n         * title : 月桂树的王子们\n         * total_count : 13\n         */\n\n\n        class TagsBean(var tag_name: String){\n            /**\n             * tag_name : 基腐\n             */\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/bangumi/BangumiIndex.kt",
    "content": "package com.yoyiyi.soleil.bean.bangumi\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/9 9:30\n * * 描述:番剧索引\n */\n\ndata class BangumiIndex(var category: List<CategoryBean>,\n\n                        var years: List<String>) {\n\n    /**\n     * cover : http://i2.hdslb.com/u_user/f7a16e4a28fe524ceddfe0860b52d057.jpg\n     * tag_id : 117\n     * tag_name : 轻改\n     */\n\n\n    data class CategoryBean(var cover: String,\n\n                            var tag_id: String,\n\n                            var tag_name: String)\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/bangumi/BangumiSchedule.kt",
    "content": "package com.yoyiyi.soleil.bean.bangumi\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/8 9:48\n * * 描述:番剧时间表\n */\n\ndata class BangumiSchedule(var area_id: Int ,\n                           var cover: String,\n                           var date: Int ,\n                           var delay: Int ,\n                           var ep_id: Int ,\n                           var ep_index: String,\n                           var favorites: Int ,\n                           var follow: Int ,\n                           var id: Int ,\n                           var is_published: Int ,\n                           var ontime: String,\n                           var pub_date: String,\n                           var pub_time: String,\n                           var pub_ts: Int ,\n                           var season_id: Int ,\n                           var season_status: Int ,\n                           var square_cover: String,\n                           var title: String) {\n\n\n    /**\n     * area_id : 2\n     * cover : http://i0.hdslb.com/bfs/bangumi/967a10dc935388c0426d38a53b0a3cd3d58fa84f.jpg\n     * date : 1496678400\n     * delay : 0\n     * ep_id : 103208\n     * ep_index : 10\n     * favorites : 99487\n     * follow : 0\n     * id : 0\n     * is_published : 1\n     * ontime : 00:00\n     * pub_date : 2017-06-06\n     * pub_time : 00:00\n     * pub_ts : 1496678400\n     * season_id : 5973\n     * season_status : 2\n     * square_cover : http://i0.hdslb.com/bfs/bangumi/0d39fdbb8aee16ab5e85dd8507f3c5fbcc39f7e5.jpg\n     * title : 月光\n     */\n\n    \n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/bangumi/MulBangumiDetail.kt",
    "content": "package com.yoyiyi.soleil.bean.bangumi\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/11 21:52\n * * 描述:番剧详情\n */\nclass MulBangumiDetail(var itemTypez: Int = 0,\n                       var hotsBean: BangumiDetailComment.DataBean.HotsBean?=null,\n                       var repliesBean: BangumiDetailComment.DataBean.RepliesBean?=null,\n                       var isPrepare: Boolean = false,\n                       var bangumiRecommendList: List<BangumiDetailRecommend.ListBean>?=null,\n                       var evaluate: String?=null,\n                       var tagsBeanList: List<BangumiDetail.TagsBean>?=null,\n                       var totalCount: String?=null,\n                       var playCount: String?=null,\n                       var favorites: String?=null,\n                       var isFinish: String?=null,\n                       var cover: String?=null,\n                       var episodesBeans: List<BangumiDetail.EpisodesBean>?=null,\n                       var seasonsBeanList: List<BangumiDetail.SeasonsBean>?=null,\n                       var seasonsTitle: String?=null,\n                       var listBeanList: List<BangumiDetail.RankBean.ListBean>?=null,\n                       var num: Int = 0,\n                       var account: Int = 0,\n                       var totalBpCount: Int = 0,\n                       var weekBpCount: Int = 0\n) : MultiItemEntity {\n\n    override fun getItemType(): Int = itemTypez\n\n\n    companion object {\n        val TYPE_HEAD = 1\n\n        val TYPE_SEASON = 2\n\n        val TYPE_EPISODE_ITEM = 3\n\n        val TYPE_EPISODE_HEAD = 4\n\n        val TYPE_CONTRACTED = 5\n\n        val TYPE_DES = 6\n\n        val TYPE_RECOMMEND_HEAD = 7\n\n        val TYPE_RECOMMEND_ITEM = 8\n\n        val TYPE_COMMENT_HEAD = 9\n\n        val TYPE_COMMENT_HOT_ITEM = 10\n\n        val TYPE_COMMENT_MORE = 11\n\n        val TYPE_COMMENT_NOMAL_ITEM = 12\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/chase/ChaseBangumi.kt",
    "content": "package com.yoyiyi.soleil.bean.chase\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/18 10:48\n * 描述:\n */\ndata class ChaseBangumi(var follow_count: Int,\n                        var update_count: Int,\n                        var delay_notice: List<*>,\n                        var follows: List<Follows>) {\n    data class Follows(var brief: String,\n                       var cover: String,\n                       var ed_jump: Int,\n                       var is_finish: String,\n                       var is_started: Int,\n                       var limitGroupId: Int,\n                       var new_ep: NewEp,\n                       var newest_ep_id: String,\n                       var newest_ep_index: String,\n                       var pub_time: String,\n                       var season_id: String,\n                       var season_status: Int,\n                       var squareCover: String,\n                       var title: String,\n                       var total_count: String,\n                       var trailerAid: String,\n                       var user_season: UserSeason,\n                       var weekday: String) {\n        data class NewEp(var episode_id: String,\n                         var episode_status: Int,\n                         var index: String,\n                         var update_time: String)\n\n        data class UserSeason(var attention: String,\n                              var bp: Int,\n                              var last_ep_id: String,\n                              var last_ep_index: String,\n                              var last_time: String,\n                              var report_ts: Long)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/chase/RecommendBangumi.kt",
    "content": "package com.yoyiyi.soleil.bean.chase\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/18 10:49\n * 描述:\n */\ndata class RecommendBangumi(var recommend_cn: RecommendCn,\n                            var recommend_jp: RecommendJp,\n                            var ad: List<Ad>) {\n\n    data class Ad(var img: String,\n                  var index: Int,\n                  var link: String,\n                  var title: String) {\n        /**\n         * img : http://i0.hdslb.com/bfs/bangumi/095df0181442362ac1bc445d7f542eb6bf66f7da.jpg\n         * index : 1\n         * link : http://bangumi.bilibili.com/anime/5997\n         * title : 黄漫老师\n         */\n\n\n    }\n\n    data class RecommendCn(var foot: List<Foot>,\n                           var recommend: List<Recommend>) {\n        data class Foot(var cover: String,\n                        var cursor: Long,\n                        var desc: String,\n                        var id: Int,\n                        var is_new: Int,\n                        var link: String,\n                        var onDt: String,\n                        var title: String)\n\n        data class Recommend(var cover: String,\n                             var favourites: String,\n                             var is_auto: Int,\n                             var is_finish: Int,\n                             var is_started: Int,\n                             var last_time: Int,\n                             var newest_ep_index: String,\n                             var pub_time: Int,\n                             var season_id: Int,\n                             var season_status: Int,\n                             var title: String,\n                             var total_count: Int,\n                             var watching_count: Int)\n    }\n\n    data class RecommendJp(var foot: List<Foot>,\n                           var recommend: List<Recommend>) {\n        data class Foot(var cover: String,\n                        var cursor: Long,\n                        var desc: String,\n                        var id: Int,\n                        var is_new: Int,\n                        var link: String,\n                        var onDt: String,\n                        var title: String)\n\n        data class Recommend(var cover: String,\n                             var favourites: String,\n                             var is_auto: Int,\n                             var is_finish: Int,\n                             var is_started: Int,\n                             var last_time: Int,\n                             var newest_ep_index: String,\n                             var pub_time: Int,\n                             var season_id: Int,\n                             var season_status: Int,\n                             var title: String,\n                             var total_count: Int,\n                             var watching_count: Int)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/ActivityCenter.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 22:58\n * * 描述:活动中心\n */\ndata class ActivityCenter(var code: Int,\n                          var total: Int,\n                          var pages: Int,\n                          var list: List<ListBean>) {\n\n    data class ListBean(var cover: String,\n                        var link: String,\n                        var title: String,\n                        var state: Int) {\n\n        /**\n         * cover : http://i0.hdslb.com/bfs/activity-plat/cover/20170605/r9vj2n3964.jpg\n         * link : http://www.bilibili.com/blackboard/topic/activity-H12uuAGzZ.html\n         * title : 加油！奋斗的六月\n         * state : 0\n         */\n\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/Ceshi.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/11 10:30\n * * 描述:\n */\nclass Ceshi {\n\n    /**\n     * ts : 1497101501\n     * code : 0\n     * data : {\"total_count\":1996,\"total_page\":67,\"result\":[{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11636,\"post_title\":\"为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\",\"post_summary\":\"灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\",\"author_mid\":3061924,\"author_name\":\"路过的小轩\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\",\"post_image_list\":[{\"id\":43197,\"img_suffix\":\"jpg\",\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":220,\"height\":155},{\"id\":43198,\"img_suffix\":\"jpg\",\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":640,\"height\":359}],\"image_count\":2,\"reply_count\":80,\"praise_count\":17,\"last_reply_time\":1496979724000,\"post_time\":1481049163000,\"last_reply_mid\":82581258,\"last_reply_author\":\"51xx点info\",\"chosen_time\":1481107581000,\"modify_time\":1481049163000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":176,\"community_name\":\"steam\",\"community_url\":\"http://www.im9.com/community.html?community_id=176\",\"community_avatar\":\"http://img.yo9.com/68a3c7d09c3211e5bc7900163e000cde\",\"member_num\":76694,\"post_count\":1955,\"certification\":0},\"post_info\":{\"post_id\":14174,\"post_title\":\"你们是怎么知道steam的\",\"post_summary\":\"我是在找unturned联机方法时找到的\",\"author_mid\":46303062,\"author_name\":\"实况主亦空\",\"author_avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"image_count\":0,\"reply_count\":619,\"praise_count\":58,\"last_reply_time\":1497090045000,\"post_time\":1478582651000,\"last_reply_mid\":66636164,\"last_reply_author\":\"安宝茹\",\"chosen_time\":1481107569000,\"modify_time\":1478582651000,\"sex\":1,\"level\":1,\"tags\":[]}},{\"community_info\":{\"community_id\":166,\"community_name\":\"galgame\",\"community_url\":\"http://www.im9.com/community.html?community_id=166\",\"community_avatar\":\"http://img.yo9.com/629b14409b4411e5858800163e00043c\",\"member_num\":35709,\"post_count\":541,\"certification\":0},\"post_info\":{\"post_id\":14705,\"post_title\":\"小调查&征集：你喜欢什么样的妹妹/女票/男票/哥哥\",\"post_summary\":\"希望看到的米娜能回答下这两个个问题1.你理想中的妹妹/女朋友/哥哥/男朋友都是什么性格（属性）的2.你喜欢你能和妹妹/女朋友/哥哥都发生什么样子的故事（事件）什...\",\"author_mid\":6578647,\"author_name\":\"Congeal丶梦游\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/cd9bef49ad4da80440a902abc20ad6fa01c25d5f.jpg\",\"post_image_list\":[{\"id\":46689,\"img_suffix\":\"jpg\",\"image_id\":\"31b5fff0b7ba11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/31b5fff0b7ba11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1920,\"height\":1200}],\"image_count\":1,\"reply_count\":104,\"praise_count\":8,\"last_reply_time\":1496848461000,\"post_time\":1480592103000,\"last_reply_mid\":11379344,\"last_reply_author\":\"收胖次的瞳酱\",\"chosen_time\":1481107538000,\"modify_time\":1480592103000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":133,\"community_name\":\"物语系列\",\"community_url\":\"http://www.im9.com/community.html?community_id=133\",\"community_avatar\":\"http://img.yo9.com/6e07fb20295311e6910600163e000cdb\",\"member_num\":23405,\"post_count\":514,\"certification\":0},\"post_info\":{\"post_id\":11537,\"post_title\":\"拉基君的呆毛\",\"post_summary\":\":-I\",\"author_mid\":5084932,\"author_name\":\"Mondegreen\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/bad0a7939fea7277990d4c1f9a0d39cf7b56ced0.jpg\",\"post_image_list\":[{\"id\":45795,\"img_suffix\":\"png\",\"image_id\":\"3b1a7490b89b11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/3b1a7490b89b11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1920,\"height\":1080},{\"id\":45796,\"img_suffix\":\"png\",\"image_id\":\"42167af0b89b11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/42167af0b89b11e6a35400163e000cdb\",\"praise_count\":0,\"width\":1920,\"height\":1080},{\"id\":45797,\"img_suffix\":\"png\",\"image_id\":\"5a3da590b89b11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/5a3da590b89b11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1920,\"height\":1080},{\"id\":45798,\"img_suffix\":\"png\",\"image_id\":\"5f553480b89b11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/5f553480b89b11e6a35400163e000cdb\",\"praise_count\":0,\"width\":1920,\"height\":1080}],\"image_count\":4,\"reply_count\":14,\"praise_count\":7,\"last_reply_time\":1496151475000,\"post_time\":1480688814000,\"last_reply_mid\":30753300,\"last_reply_author\":\"跨越七海的风\\u2026\\u2026\",\"chosen_time\":1481107527000,\"modify_time\":1480688814000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11666,\"post_title\":\"486的努力究竟换来了什么\",\"post_summary\":\"喜欢昂的蕾姆  喜欢昂的艾米丽娅  喜欢昂的路人甲 乙 丙 丁  都已经是种子选手 反过来看昂呢 整部动漫最辛苦 最努里 &nbs...\",\"author_mid\":750609,\"author_name\":\"关妙鑫\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/2b6bdf4a1dcef17256416de07f99157a2652a7a5.jpg\",\"post_image_list\":[{\"id\":43326,\"img_suffix\":\"jpg\",\"image_id\":\"a6bda950bc4d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/a6bda950bc4d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":2200,\"height\":3048}],\"image_count\":1,\"reply_count\":85,\"praise_count\":45,\"last_reply_time\":1496753387000,\"post_time\":1481095283000,\"last_reply_mid\":2156625,\"last_reply_author\":\"未末杉\",\"chosen_time\":1481107514000,\"modify_time\":1481095283000,\"sex\":0,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11663,\"post_title\":\"文野党良心帮拉票帖~~想带票的别家粉可以戳(¯▽¯)~\",\"post_summary\":\"        作为一个良心的文野党，最近除了应援没什么事可干啦。为了给文豪野犬攒下良好的人品，别家粉如果有想让我们帮带票的可以戳这里评论。复活赛之前，我们会尽...\",\"author_mid\":7810372,\"author_name\":\"MargaretWindsor\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/f98f70b9119dea7300f764cba923093f0f7eeaaf.jpg\",\"post_image_list\":[{\"id\":43290,\"img_suffix\":\"jpg\",\"image_id\":\"20ba5c50bc3d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/20ba5c50bc3d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":720,\"height\":720},{\"id\":43291,\"img_suffix\":\"jpg\",\"image_id\":\"20de8620bc3d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/20de8620bc3d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":540,\"height\":960},{\"id\":43292,\"img_suffix\":\"jpg\",\"image_id\":\"21191e20bc3d11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/21191e20bc3d11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":720,\"height\":1280},{\"id\":43293,\"img_suffix\":\"jpg\",\"image_id\":\"213d47f0bc3d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/213d47f0bc3d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":540,\"height\":960}],\"image_count\":6,\"reply_count\":67,\"praise_count\":34,\"last_reply_time\":1496427662000,\"post_time\":1481088142000,\"last_reply_mid\":33624615,\"last_reply_author\":\"高速公鹿，，\",\"chosen_time\":1481107503000,\"modify_time\":1481088142000,\"sex\":2,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11640,\"post_title\":\"物语从第五变第四，应该高兴才对，可想要更多(>﹏<)\",\"post_summary\":\"今天的咩咩、斧乃木等等暂且不提，毕竟化物语的认知还要高一些。恳请您带八九寺真霄( ´▽` )ﾉ超可爱小学生！（心理年龄其实是合法萝莉大雾）物语系列口...\",\"author_mid\":13336910,\"author_name\":\"Victorivan\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/5645e247298bdcdbe68f42db81be74fba4f635f3.jpg\",\"post_image_list\":[{\"id\":43224,\"img_suffix\":\"jpg\",\"image_id\":\"974bc940bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/974bc940bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":500},{\"id\":43225,\"img_suffix\":\"jpg\",\"image_id\":\"9782ded0bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/9782ded0bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":43226,\"img_suffix\":\"jpg\",\"image_id\":\"98406270bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/98406270bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":580,\"height\":409},{\"id\":43227,\"img_suffix\":\"jpg\",\"image_id\":\"98d50150bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/98d50150bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":848,\"height\":480}],\"image_count\":5,\"reply_count\":17,\"praise_count\":7,\"last_reply_time\":1496797537000,\"post_time\":1481066439000,\"last_reply_mid\":61626579,\"last_reply_author\":\"アイエァオイタザギセ\",\"chosen_time\":1481107493000,\"modify_time\":1481066439000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11633,\"post_title\":\"【晒票-战报】12.6-萌战day16回顾，还是需要学习一个。\",\"post_summary\":\"海选第十六天，燃组复活赛纷纷创造了最高票和最低票纪录，心情复杂。燃组第四：杰诺斯票数\\u2014\\u201441135；燃组第七：梅瑟·埃勒菲...\",\"author_mid\":10924476,\"author_name\":\"Luli_聲之形要上映了\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/cc684b25549e9b5be84c46723892f8028a269e82.jpg\",\"post_image_list\":[{\"id\":43182,\"img_suffix\":\"jpg\",\"image_id\":\"93e68a90bbd011e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/93e68a90bbd011e6ab9800163e000cdb\",\"praise_count\":0,\"width\":700,\"height\":290},{\"id\":43183,\"img_suffix\":\"jpg\",\"image_id\":\"eb215240bbd011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/eb215240bbd011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":700,\"height\":290},{\"id\":43184,\"img_suffix\":\"png\",\"image_id\":\"12aaef10bbd111e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/12aaef10bbd111e6ab9800163e000cdb\",\"praise_count\":0,\"width\":521,\"height\":116}],\"image_count\":3,\"reply_count\":4,\"praise_count\":2,\"last_reply_time\":1495506898000,\"post_time\":1481041891000,\"last_reply_mid\":98834059,\"last_reply_author\":\"故城故里\",\"chosen_time\":1481107486000,\"modify_time\":1481041891000,\"sex\":0,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":176,\"community_name\":\"steam\",\"community_url\":\"http://www.im9.com/community.html?community_id=176\",\"community_avatar\":\"http://img.yo9.com/68a3c7d09c3211e5bc7900163e000cde\",\"member_num\":76694,\"post_count\":1955,\"certification\":0},\"post_info\":{\"post_id\":14707,\"post_title\":\"为什么steam在国内总是被\\u201c被封杀\\u201d？\",\"post_summary\":\"今天天气不错，某论坛站长:steam乙烷确定！\",\"author_mid\":13704982,\"author_name\":\"Desvl\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/f3e938770c3e56bf71c4f10cf1b473cb672da018.jpg\",\"image_count\":0,\"reply_count\":38,\"praise_count\":8,\"last_reply_time\":1496331903000,\"post_time\":1480597339000,\"last_reply_mid\":61756844,\"last_reply_author\":\"萌静静静静静静静静i\",\"chosen_time\":1481107466000,\"modify_time\":1480597339000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":1,\"community_name\":\"bilibili\",\"community_url\":\"http://www.im9.com/community.html?community_id=1\",\"community_avatar\":\"http://img.yo9.com/a355a8a09a9611e5907700163e000cdb\",\"member_num\":209294,\"post_count\":12011,\"certification\":0},\"post_info\":{\"post_id\":22828,\"post_title\":\"科普:谁是诚哥？\",\"post_summary\":\"大家在看番时，一遇到较福利的情节，就有人刷\\u201c人在做，诚在看\\u201d \\u201c你笑诚哥日不了，诚哥笑你日得少\\u201d 等弹幕，评论区...\",\"author_mid\":37431437,\"author_name\":\"高能吐槽君007\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/9648b38359a111fc06f44b101dabd97182c2055c.jpg\",\"image_count\":0,\"reply_count\":79,\"praise_count\":57,\"last_reply_time\":1497056573000,\"post_time\":1480686441000,\"last_reply_mid\":40467366,\"last_reply_author\":\"晓晓浅陌\",\"chosen_time\":1481021581000,\"modify_time\":1480686441000,\"sex\":1,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11514,\"post_title\":\"BilibiliMoe 萌报 第二期 日本动画场 保护爱和本心\",\"post_summary\":\"-总编：从不脱稿的Luli引言欢迎各位来到Bilibili萌战日本动画场兴趣圈！激动人心的萌战在日本动画场进入第二周啦！！这一周的b站简直处处都充满了大家的参与...\",\"author_mid\":10924476,\"author_name\":\"Luli_聲之形要上映了\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/cc684b25549e9b5be84c46723892f8028a269e82.jpg\",\"post_image_list\":[{\"id\":42865,\"img_suffix\":\"jpg\",\"image_id\":\"cfb0d170bafe11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/cfb0d170bafe11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":1920,\"height\":453}],\"image_count\":1,\"reply_count\":20,\"praise_count\":8,\"last_reply_time\":1495450940000,\"post_time\":1480951532000,\"last_reply_mid\":32911291,\"last_reply_author\":\"Kisseve\",\"chosen_time\":1481021569000,\"modify_time\":1480951532000,\"sex\":0,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12157,\"post_title\":\"不搞噱头直面青春，京吹部监督石原立也与小说作者武田绫乃对谈\",\"post_summary\":\" 京吹部第二季动画还有 4 话就要落幕，相较于第一季动画的高黄剧情，第二季久美子快成了救火队长，社团里谁有事久美子都要去担心解决，目前是久美子要解决明...\",\"author_mid\":22262843,\"author_name\":\"databox\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/8668cf0cd77d5bc6ce667c65ede69ab0e0bc7448.jpg\",\"post_image_list\":[{\"id\":53784,\"img_suffix\":\"jpg\",\"image_id\":\"36ac6fa0bb5a11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/36ac6fa0bb5a11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53785,\"img_suffix\":\"jpg\",\"image_id\":\"4e11d0e0bb5a11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/4e11d0e0bb5a11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53786,\"img_suffix\":\"jpg\",\"image_id\":\"80dc49b0bb5a11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/80dc49b0bb5a11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53787,\"img_suffix\":\"jpg\",\"image_id\":\"ccb05de0bb5a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/ccb05de0bb5a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281}],\"image_count\":6,\"reply_count\":2,\"praise_count\":1,\"last_reply_time\":1481077856000,\"post_time\":1480991552000,\"last_reply_mid\":22262843,\"last_reply_author\":\"databox\",\"chosen_time\":1481021546000,\"modify_time\":1480991552000,\"sex\":0,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24586,\"post_title\":\"【老张的酒后脑洞】一般的京都四人组都有啥\",\"post_summary\":\"自从上回沉迷电铁无法自拔之后就一直被工作牵制住手脚今天一边哈啤一边沉迷久丽 然后想到一些好玩的东西 厄\\u2026或者说是酒后幻觉？总之 哈啤小麦王很好喝 ...\",\"author_mid\":409007,\"author_name\":\"100%低地板轻轨车\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/9cce572fdde47dcbcaaba260c3be4216714d0f25.jpg\",\"post_image_list\":[{\"id\":277136,\"img_suffix\":\"jpg\",\"image_id\":\"57c2b100b7cb11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/57c2b100b7cb11e6a35400163e000cdb\",\"praise_count\":0,\"width\":480,\"height\":270},{\"id\":277137,\"img_suffix\":\"jpg\",\"image_id\":\"58162830b7cb11e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/58162830b7cb11e6aafb00163e000cde\",\"praise_count\":0,\"width\":480,\"height\":270},{\"id\":277138,\"img_suffix\":\"jpg\",\"image_id\":\"59261190b7cb11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/59261190b7cb11e6a35400163e000cdb\",\"praise_count\":0,\"width\":480,\"height\":270}],\"image_count\":3,\"reply_count\":14,\"praise_count\":16,\"last_reply_time\":1494209885000,\"post_time\":1480599469000,\"last_reply_mid\":11845267,\"last_reply_author\":\"鳴ると233333\",\"chosen_time\":1481021516000,\"modify_time\":1480599469000,\"sex\":1,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":183,\"community_name\":\"洛天依\",\"community_url\":\"http://www.im9.com/community.html?community_id=183\",\"community_avatar\":\"http://img.yo9.com/456f97b09c0c11e5b7cb00163e00043c\",\"member_num\":53870,\"post_count\":1039,\"certification\":0},\"post_info\":{\"post_id\":23160,\"post_title\":\"做作业前的标配\",\"post_summary\":\"大家做作业一般都听什么歌呢!\",\"author_mid\":40858837,\"author_name\":\"开播啦准备好板凳和瓜子\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/6aff0237714382d424c2ce2591cf7ff19b92ea55.jpg\",\"post_image_list\":[{\"id\":386576,\"img_suffix\":\"jpg\",\"image_id\":\"29cb8870a68311e6932700163e000cdb\",\"image_url\":\"http://img.yo9.com/29cb8870a68311e6932700163e000cdb\",\"praise_count\":0,\"width\":1728,\"height\":2304},{\"id\":386577,\"img_suffix\":\"jpg\",\"image_id\":\"2a905f10a68311e6b5ce00163e000cde\",\"image_url\":\"http://img.yo9.com/2a905f10a68311e6b5ce00163e000cde\",\"praise_count\":0,\"width\":640,\"height\":906},{\"id\":386578,\"img_suffix\":\"jpg\",\"image_id\":\"2afe3c10a68311e6a2b400163e00043c\",\"image_url\":\"http://img.yo9.com/2afe3c10a68311e6a2b400163e00043c\",\"praise_count\":0,\"width\":720,\"height\":450},{\"id\":386579,\"img_suffix\":\"jpg\",\"image_id\":\"2bc95440a68311e6932700163e000cdb\",\"image_url\":\"http://img.yo9.com/2bc95440a68311e6932700163e000cdb\",\"praise_count\":0,\"width\":720,\"height\":1280}],\"image_count\":6,\"reply_count\":131,\"praise_count\":42,\"last_reply_time\":1497019001000,\"post_time\":1478699301000,\"last_reply_mid\":28331258,\"last_reply_author\":\"筱黑是咸鱼\",\"chosen_time\":1481021505000,\"modify_time\":1478699301000,\"sex\":1,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":316,\"community_name\":\"火影忍者\",\"community_url\":\"http://www.im9.com/community.html?community_id=316\",\"community_avatar\":\"http://img.yo9.com/e15ef780b4f611e5838500163e000cde\",\"member_num\":39033,\"post_count\":1586,\"certification\":0},\"post_info\":{\"post_id\":28100,\"post_title\":\"此生无悔入火影，来世愿往木叶村。\",\"post_summary\":\"某一天，你穿越了，来到忍者世界。你想去到哪个家族，结识哪些人，和谁建立羁绊，和谁建立家庭？\",\"author_mid\":4043522,\"author_name\":\"沈小学\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/9df35129535d61c841ac44ec3f92a253969c79bc.jpg\",\"post_image_list\":[{\"id\":94810,\"img_suffix\":\"jpg\",\"image_id\":\"1333abf0b84011e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/1333abf0b84011e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":688}],\"image_count\":1,\"reply_count\":64,\"praise_count\":29,\"last_reply_time\":1496924505000,\"post_time\":1480649602000,\"last_reply_mid\":9026874,\"last_reply_author\":\"慕鸣而来\",\"chosen_time\":1481021483000,\"modify_time\":1480649602000,\"sex\":1,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24958,\"post_title\":\"【12月6日⭐话题】【B萌】对于作品带动角色票数的事你怎么看！\",\"post_summary\":\"现在B萌的正在如火如荼的进行中每天投投票好像也蛮有意思的但是经常看数据的小伙伴可能就发现了一个现象经常会有一些角色魅力并不是很出众但是因为所属作品本身人气很高而...\",\"author_mid\":14272321,\"author_name\":\"丨两仪式-\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/6e46555e5643dd8d2738dabda62c1d1172f506f0.jpg\",\"post_image_list\":[{\"id\":282250,\"img_suffix\":\"jpeg\",\"image_id\":\"90dc0eb0bb9911e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/90dc0eb0bb9911e6b4bb00163e00043c\",\"praise_count\":0,\"width\":1200,\"height\":700}],\"image_count\":1,\"reply_count\":13,\"praise_count\":13,\"last_reply_time\":1482026309000,\"post_time\":1481017898000,\"last_reply_mid\":40645201,\"last_reply_author\":\"某梧桐树下的西柚\",\"chosen_time\":1481021470000,\"modify_time\":1481017898000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":304,\"community_name\":\"银魂\",\"community_url\":\"http://www.im9.com/community.html?community_id=304\",\"community_avatar\":\"http://img.yo9.com/f27bc4209bed11e5bc7900163e000cde\",\"member_num\":33379,\"post_count\":907,\"certification\":0},\"post_info\":{\"post_id\":8882,\"post_title\":\"开你们手机里第二张，第五张与第十九张图，为它们编个完整小故事\",\"post_summary\":\"[诶嘿]银桑和十四漫游在雨后的街道上，从居酒屋出来的他们扶持着往万事屋去。当他们感到脚下积水泛凉，当夜里的灯终于映着冷凝的光，当夜里风的轨迹能清晰被感知到，终于...\",\"author_mid\":8315285,\"author_name\":\"黄昏雪之诗\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/ac6ebd1a2f57e00b2ce4acf28b3bf55956ab7241.jpg\",\"post_image_list\":[{\"id\":33105,\"img_suffix\":\"jpg\",\"image_id\":\"45cc2680b97811e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/45cc2680b97811e6ab9a00163e00043c\",\"praise_count\":0,\"width\":600,\"height\":847},{\"id\":33106,\"img_suffix\":\"jpg\",\"image_id\":\"46173940b97811e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/46173940b97811e6a35400163e000cdb\",\"praise_count\":0,\"width\":580,\"height\":388},{\"id\":33107,\"img_suffix\":\"jpg\",\"image_id\":\"466224f0b97811e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/466224f0b97811e6aafb00163e000cde\",\"praise_count\":0,\"width\":640,\"height\":640}],\"image_count\":3,\"reply_count\":58,\"praise_count\":29,\"last_reply_time\":1497018194000,\"post_time\":1480783691000,\"last_reply_mid\":88844112,\"last_reply_author\":\"春原冈崎哥俩好\",\"chosen_time\":1481021457000,\"modify_time\":1480783691000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24794,\"post_title\":\"这次是Kanon，我京的STAFF留言\",\"post_summary\":\"本帖转自新浪微博@京阿尼应援团 石原监督kanon快要开始播放了。虽然有些悲伤的故事展开，但是就像冬去春来一般肯定会迎来happyend的。最后希望这...\",\"author_mid\":6851880,\"author_name\":\"灬星空雨夜灬\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/f50d86f2a7b7ba8e8cf689a846cc7912d77ada74.jpg\",\"post_image_list\":[{\"id\":280286,\"img_suffix\":\"jpg\",\"image_id\":\"e5c0f180b9c211e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/e5c0f180b9c211e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":562},{\"id\":280287,\"img_suffix\":\"jpg\",\"image_id\":\"25ff7a00b9c311e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/25ff7a00b9c311e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":562},{\"id\":280288,\"img_suffix\":\"jpg\",\"image_id\":\"4784b6e0b9c311e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/4784b6e0b9c311e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1000,\"height\":562},{\"id\":280289,\"img_suffix\":\"jpg\",\"image_id\":\"66566c80b9c311e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/66566c80b9c311e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":562}],\"image_count\":13,\"reply_count\":3,\"praise_count\":1,\"last_reply_time\":1480907076000,\"post_time\":1480818186000,\"last_reply_mid\":31554605,\"last_reply_author\":\"凉未凑\",\"chosen_time\":1481021443000,\"modify_time\":1480818186000,\"sex\":1,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24955,\"post_title\":\"【声之形】扩大上映范围\",\"post_summary\":\"根据日本媒体报道，9月17日上映的京阿尼动画电影《声之形》日前票房突破了22亿日元（约合人民币1.34亿元），观影人数突破170万人，从本月开始该电影还将扩大上...\",\"author_mid\":12681259,\"author_name\":\"露★子\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/bca95880531e3cafd552603aa86cc1b137b739bb.jpg\",\"post_image_list\":[{\"id\":282226,\"img_suffix\":\"jpg\",\"image_id\":\"398f22c0bb9211e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/398f22c0bb9211e6ab9800163e000cdb\",\"praise_count\":0,\"width\":2000,\"height\":1214}],\"image_count\":1,\"reply_count\":11,\"praise_count\":12,\"last_reply_time\":1497085820000,\"post_time\":1481014812000,\"last_reply_mid\":85487399,\"last_reply_author\":\"你在装纯\",\"chosen_time\":1481021432000,\"modify_time\":1481014812000,\"sex\":2,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":23,\"community_name\":\"东方\",\"community_url\":\"http://www.im9.com/community.html?community_id=23\",\"community_avatar\":\"http://img.yo9.com/4b713fe0273211e6910600163e000cdb\",\"member_num\":46778,\"post_count\":701,\"certification\":0},\"post_info\":{\"post_id\":10551,\"post_title\":\"神主有女儿了\",\"post_summary\":\"刚刚逛了一下微博，突然发现的，现在神主有一男一女两个孩子，感觉好幸福啊\",\"author_mid\":16680335,\"author_name\":\"兰梦洲\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/5f6bbfda12e3eabbe01f58d7ceade852f7719fdf.jpg\",\"post_image_list\":[{\"id\":59513,\"img_suffix\":\"png\",\"image_id\":\"1ea60650bb0011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/1ea60650bb0011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":1071,\"height\":537}],\"image_count\":1,\"reply_count\":25,\"praise_count\":56,\"last_reply_time\":1493828444000,\"post_time\":1480951987000,\"last_reply_mid\":12311793,\"last_reply_author\":\"东方天空璋\",\"chosen_time\":1481021420000,\"modify_time\":1480951987000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":1930,\"community_name\":\"你居然没有表情包\",\"community_url\":\"http://www.im9.com/community.html?community_id=1930\",\"community_avatar\":\"http://img.yo9.com/6c5f93d0a00211e5b15f00163e000cde\",\"member_num\":185308,\"post_count\":9465,\"certification\":0},\"post_info\":{\"post_id\":22530,\"post_title\":\"自制表情包【杂图】\",\"post_summary\":\"不知道有没有人和我一样，喜欢制作一大堆表情包却不怎么使用，几乎全都尘封在手机相册的底部，所以我来到了这里_(:з」∠)_如果各位喜欢呢就抱走顺手请点个赞...\",\"author_mid\":27290840,\"author_name\":\"鬼畜型痴汉\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/5baf7be27bacf08cf5c74051e4127309d79e3496.jpg\",\"post_image_list\":[{\"id\":263006,\"img_suffix\":\"jpg\",\"image_id\":\"7522e050bb7011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/7522e050bb7011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":919,\"height\":665},{\"id\":263007,\"img_suffix\":\"jpg\",\"image_id\":\"76118610bb7011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/76118610bb7011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":956,\"height\":720},{\"id\":263008,\"img_suffix\":\"jpg\",\"image_id\":\"766ec140bb7011e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/766ec140bb7011e6ab9800163e000cdb\",\"praise_count\":0,\"width\":833,\"height\":720},{\"id\":263009,\"img_suffix\":\"jpg\",\"image_id\":\"76b78a10bb7011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/76b78a10bb7011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":515,\"height\":521}],\"image_count\":9,\"reply_count\":23,\"praise_count\":22,\"last_reply_time\":1496932036000,\"post_time\":1481000244000,\"last_reply_mid\":25097892,\"last_reply_author\":\"大雪雪雪雪雪雪雪雪雪\",\"chosen_time\":1481021409000,\"modify_time\":1481000244000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":9377,\"community_name\":\"冷笑话\",\"community_url\":\"http://www.im9.com/community.html?community_id=9377\",\"community_avatar\":\"http://img.yo9.com/48f06c7045b211e6ab5200163e000cdb\",\"member_num\":29101,\"post_count\":521,\"certification\":0},\"post_info\":{\"post_id\":20105,\"post_title\":\"【冷笑话】住嘴，我知道你想问什么！\",\"post_summary\":\"三年起步，最高死刑。各位亲，考虑好了奥！\",\"author_mid\":33826008,\"author_name\":\"绝粮莫兴\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/87ec8feea353f294c0c912b55eba5284b2d67519.jpg\",\"post_image_list\":[{\"id\":140058,\"img_suffix\":\"jpg\",\"image_id\":\"d3256610b94e11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/d3256610b94e11e6a35400163e000cdb\",\"praise_count\":0,\"width\":1080,\"height\":1920}],\"image_count\":1,\"reply_count\":40,\"praise_count\":42,\"last_reply_time\":1487648184000,\"post_time\":1480765888000,\"last_reply_mid\":18397034,\"last_reply_author\":\"单身loser\",\"chosen_time\":1481021396000,\"modify_time\":1480765888000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":488,\"community_name\":\"摄影\",\"community_url\":\"http://www.im9.com/community.html?community_id=488\",\"community_avatar\":\"http://img.yo9.com/3b9138c09fb811e5b15f00163e000cde\",\"member_num\":39158,\"post_count\":2301,\"certification\":0},\"post_info\":{\"post_id\":7394,\"post_title\":\"湖与草原\",\"post_summary\":\"\",\"author_mid\":18161373,\"author_name\":\"公子别跑\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/567640e69e91112bc66a03f6253904341574c463.jpg\",\"post_image_list\":[{\"id\":27920,\"img_suffix\":\"jpg\",\"image_id\":\"d2eefee0b97111e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/d2eefee0b97111e6aafb00163e000cde\",\"praise_count\":0,\"width\":1200,\"height\":1600},{\"id\":27921,\"img_suffix\":\"jpg\",\"image_id\":\"d37fcd30b97111e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/d37fcd30b97111e6aafb00163e000cde\",\"praise_count\":0,\"width\":1200,\"height\":1600},{\"id\":27922,\"img_suffix\":\"jpg\",\"image_id\":\"d3f153b0b97111e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/d3f153b0b97111e6a35400163e000cdb\",\"praise_count\":0,\"width\":1200,\"height\":1600},{\"id\":27923,\"img_suffix\":\"jpg\",\"image_id\":\"d52f51f0b97111e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/d52f51f0b97111e6a35400163e000cdb\",\"praise_count\":0,\"width\":2400,\"height\":3200}],\"image_count\":6,\"reply_count\":6,\"praise_count\":7,\"last_reply_time\":1492666999000,\"post_time\":1480780928000,\"last_reply_mid\":40896571,\"last_reply_author\":\"丶DouM\",\"chosen_time\":1481021385000,\"modify_time\":1480780928000,\"sex\":2,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12158,\"post_title\":\"只有偶像才能救日本，1 月新番《偶像事变》 PV 公开\",\"post_summary\":\" 日本的娱乐产业已经进化到了一个「娱乐至死」的境界，从生到死都能有相应配套的娱乐产品，像是连墓碑都能有 LoveLive! μ\\u2019s ...\",\"author_mid\":22262843,\"author_name\":\"databox\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/8668cf0cd77d5bc6ce667c65ede69ab0e0bc7448.jpg\",\"post_image_list\":[{\"id\":53797,\"img_suffix\":\"jpg\",\"image_id\":\"9c88cdb0bb5e11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/9c88cdb0bb5e11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":498,\"height\":497},{\"id\":53798,\"img_suffix\":\"jpg\",\"image_id\":\"343f26e0bb5f11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/343f26e0bb5f11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53799,\"img_suffix\":\"jpg\",\"image_id\":\"3ede1d90bb5f11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3ede1d90bb5f11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53800,\"img_suffix\":\"jpg\",\"image_id\":\"58e070d0bb5f11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/58e070d0bb5f11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281}],\"image_count\":10,\"reply_count\":10,\"praise_count\":3,\"last_reply_time\":1496825245000,\"post_time\":1480993049000,\"last_reply_mid\":15265860,\"last_reply_author\":\"月见游\",\"chosen_time\":1481021374000,\"modify_time\":1480993049000,\"sex\":0,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12143,\"post_title\":\"作家渡航专访：大春物年内或有最新发表？\",\"post_summary\":\"改编自渡航著作的轻小说，今季新番动画《少女编号》正在放送中，剧情也快进入尾声高潮，而渡航的另一部人气作品《果然我的青春恋爱喜剧搞错了。》目前第12卷还在难产中，...\",\"author_mid\":23108143,\"author_name\":\"提灯喵新闻组\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/7212a0e213616ca495ce0e1eead8914763e895f5.jpg\",\"post_image_list\":[{\"id\":53749,\"img_suffix\":\"jpg\",\"image_id\":\"0c3df2b0baa711e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/0c3df2b0baa711e6aafb00163e000cde\",\"praise_count\":0,\"width\":400,\"height\":600},{\"id\":53750,\"img_suffix\":\"jpg\",\"image_id\":\"0cb6cc30baa711e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/0cb6cc30baa711e6ab9a00163e00043c\",\"praise_count\":0,\"width\":435,\"height\":289}],\"image_count\":2,\"reply_count\":9,\"praise_count\":5,\"last_reply_time\":1495080756000,\"post_time\":1480913732000,\"last_reply_mid\":8984244,\"last_reply_author\":\"兔子杀了萝卜\",\"chosen_time\":1481021364000,\"modify_time\":1480913732000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12134,\"post_title\":\"再续经典！《圣斗士星矢》将拍摄真人版并推出CG动画\",\"post_summary\":\"根据外媒报道，车田正美知名少年漫画作品《圣斗士星矢》将启动三大新企划，包括拍摄真人电影和制作全新CG动画电影。今天（12月3日）在巴西圣保罗举办的漫展Comic...\",\"author_mid\":23108143,\"author_name\":\"提灯喵新闻组\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/7212a0e213616ca495ce0e1eead8914763e895f5.jpg\",\"post_image_list\":[{\"id\":53719,\"img_suffix\":\"jpg\",\"image_id\":\"bcb61cc0ba8f11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/bcb61cc0ba8f11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":538,\"height\":399},{\"id\":53720,\"img_suffix\":\"jpg\",\"image_id\":\"be5e9ca0ba8f11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/be5e9ca0ba8f11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":559,\"height\":317},{\"id\":53721,\"img_suffix\":\"jpg\",\"image_id\":\"c7c1b7f0ba8f11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/c7c1b7f0ba8f11e6a35400163e000cdb\",\"praise_count\":0,\"width\":680,\"height\":921}],\"image_count\":3,\"reply_count\":5,\"praise_count\":1,\"last_reply_time\":1497030945000,\"post_time\":1480903738000,\"last_reply_mid\":109349212,\"last_reply_author\":\"丽安的书架\",\"chosen_time\":1481021355000,\"modify_time\":1480903738000,\"sex\":0,\"level\":4,\"tags\":[]}}]}\n     */\n\n    var ts: String? = null\n    var code: Int = 0\n    var data: DataBean? = null\n\n    class DataBean {\n        /**\n         * total_count : 1996\n         * total_page : 67\n         * result : [{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11636,\"post_title\":\"为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\",\"post_summary\":\"灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\",\"author_mid\":3061924,\"author_name\":\"路过的小轩\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\",\"post_image_list\":[{\"id\":43197,\"img_suffix\":\"jpg\",\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":220,\"height\":155},{\"id\":43198,\"img_suffix\":\"jpg\",\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":640,\"height\":359}],\"image_count\":2,\"reply_count\":80,\"praise_count\":17,\"last_reply_time\":1496979724000,\"post_time\":1481049163000,\"last_reply_mid\":82581258,\"last_reply_author\":\"51xx点info\",\"chosen_time\":1481107581000,\"modify_time\":1481049163000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":176,\"community_name\":\"steam\",\"community_url\":\"http://www.im9.com/community.html?community_id=176\",\"community_avatar\":\"http://img.yo9.com/68a3c7d09c3211e5bc7900163e000cde\",\"member_num\":76694,\"post_count\":1955,\"certification\":0},\"post_info\":{\"post_id\":14174,\"post_title\":\"你们是怎么知道steam的\",\"post_summary\":\"我是在找unturned联机方法时找到的\",\"author_mid\":46303062,\"author_name\":\"实况主亦空\",\"author_avatar\":\"http://static.hdslb.com/images/member/noface.gif\",\"image_count\":0,\"reply_count\":619,\"praise_count\":58,\"last_reply_time\":1497090045000,\"post_time\":1478582651000,\"last_reply_mid\":66636164,\"last_reply_author\":\"安宝茹\",\"chosen_time\":1481107569000,\"modify_time\":1478582651000,\"sex\":1,\"level\":1,\"tags\":[]}},{\"community_info\":{\"community_id\":166,\"community_name\":\"galgame\",\"community_url\":\"http://www.im9.com/community.html?community_id=166\",\"community_avatar\":\"http://img.yo9.com/629b14409b4411e5858800163e00043c\",\"member_num\":35709,\"post_count\":541,\"certification\":0},\"post_info\":{\"post_id\":14705,\"post_title\":\"小调查&征集：你喜欢什么样的妹妹/女票/男票/哥哥\",\"post_summary\":\"希望看到的米娜能回答下这两个个问题1.你理想中的妹妹/女朋友/哥哥/男朋友都是什么性格（属性）的2.你喜欢你能和妹妹/女朋友/哥哥都发生什么样子的故事（事件）什...\",\"author_mid\":6578647,\"author_name\":\"Congeal丶梦游\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/cd9bef49ad4da80440a902abc20ad6fa01c25d5f.jpg\",\"post_image_list\":[{\"id\":46689,\"img_suffix\":\"jpg\",\"image_id\":\"31b5fff0b7ba11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/31b5fff0b7ba11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1920,\"height\":1200}],\"image_count\":1,\"reply_count\":104,\"praise_count\":8,\"last_reply_time\":1496848461000,\"post_time\":1480592103000,\"last_reply_mid\":11379344,\"last_reply_author\":\"收胖次的瞳酱\",\"chosen_time\":1481107538000,\"modify_time\":1480592103000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":133,\"community_name\":\"物语系列\",\"community_url\":\"http://www.im9.com/community.html?community_id=133\",\"community_avatar\":\"http://img.yo9.com/6e07fb20295311e6910600163e000cdb\",\"member_num\":23405,\"post_count\":514,\"certification\":0},\"post_info\":{\"post_id\":11537,\"post_title\":\"拉基君的呆毛\",\"post_summary\":\":-I\",\"author_mid\":5084932,\"author_name\":\"Mondegreen\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/bad0a7939fea7277990d4c1f9a0d39cf7b56ced0.jpg\",\"post_image_list\":[{\"id\":45795,\"img_suffix\":\"png\",\"image_id\":\"3b1a7490b89b11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/3b1a7490b89b11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1920,\"height\":1080},{\"id\":45796,\"img_suffix\":\"png\",\"image_id\":\"42167af0b89b11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/42167af0b89b11e6a35400163e000cdb\",\"praise_count\":0,\"width\":1920,\"height\":1080},{\"id\":45797,\"img_suffix\":\"png\",\"image_id\":\"5a3da590b89b11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/5a3da590b89b11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1920,\"height\":1080},{\"id\":45798,\"img_suffix\":\"png\",\"image_id\":\"5f553480b89b11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/5f553480b89b11e6a35400163e000cdb\",\"praise_count\":0,\"width\":1920,\"height\":1080}],\"image_count\":4,\"reply_count\":14,\"praise_count\":7,\"last_reply_time\":1496151475000,\"post_time\":1480688814000,\"last_reply_mid\":30753300,\"last_reply_author\":\"跨越七海的风\\u2026\\u2026\",\"chosen_time\":1481107527000,\"modify_time\":1480688814000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11666,\"post_title\":\"486的努力究竟换来了什么\",\"post_summary\":\"喜欢昂的蕾姆  喜欢昂的艾米丽娅  喜欢昂的路人甲 乙 丙 丁  都已经是种子选手 反过来看昂呢 整部动漫最辛苦 最努里 &nbs...\",\"author_mid\":750609,\"author_name\":\"关妙鑫\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/2b6bdf4a1dcef17256416de07f99157a2652a7a5.jpg\",\"post_image_list\":[{\"id\":43326,\"img_suffix\":\"jpg\",\"image_id\":\"a6bda950bc4d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/a6bda950bc4d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":2200,\"height\":3048}],\"image_count\":1,\"reply_count\":85,\"praise_count\":45,\"last_reply_time\":1496753387000,\"post_time\":1481095283000,\"last_reply_mid\":2156625,\"last_reply_author\":\"未末杉\",\"chosen_time\":1481107514000,\"modify_time\":1481095283000,\"sex\":0,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11663,\"post_title\":\"文野党良心帮拉票帖~~想带票的别家粉可以戳(¯▽¯)~\",\"post_summary\":\"        作为一个良心的文野党，最近除了应援没什么事可干啦。为了给文豪野犬攒下良好的人品，别家粉如果有想让我们帮带票的可以戳这里评论。复活赛之前，我们会尽...\",\"author_mid\":7810372,\"author_name\":\"MargaretWindsor\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/f98f70b9119dea7300f764cba923093f0f7eeaaf.jpg\",\"post_image_list\":[{\"id\":43290,\"img_suffix\":\"jpg\",\"image_id\":\"20ba5c50bc3d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/20ba5c50bc3d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":720,\"height\":720},{\"id\":43291,\"img_suffix\":\"jpg\",\"image_id\":\"20de8620bc3d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/20de8620bc3d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":540,\"height\":960},{\"id\":43292,\"img_suffix\":\"jpg\",\"image_id\":\"21191e20bc3d11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/21191e20bc3d11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":720,\"height\":1280},{\"id\":43293,\"img_suffix\":\"jpg\",\"image_id\":\"213d47f0bc3d11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/213d47f0bc3d11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":540,\"height\":960}],\"image_count\":6,\"reply_count\":67,\"praise_count\":34,\"last_reply_time\":1496427662000,\"post_time\":1481088142000,\"last_reply_mid\":33624615,\"last_reply_author\":\"高速公鹿，，\",\"chosen_time\":1481107503000,\"modify_time\":1481088142000,\"sex\":2,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11640,\"post_title\":\"物语从第五变第四，应该高兴才对，可想要更多(>﹏<)\",\"post_summary\":\"今天的咩咩、斧乃木等等暂且不提，毕竟化物语的认知还要高一些。恳请您带八九寺真霄( ´▽` )ﾉ超可爱小学生！（心理年龄其实是合法萝莉大雾）物语系列口...\",\"author_mid\":13336910,\"author_name\":\"Victorivan\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/5645e247298bdcdbe68f42db81be74fba4f635f3.jpg\",\"post_image_list\":[{\"id\":43224,\"img_suffix\":\"jpg\",\"image_id\":\"974bc940bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/974bc940bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":500},{\"id\":43225,\"img_suffix\":\"jpg\",\"image_id\":\"9782ded0bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/9782ded0bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":43226,\"img_suffix\":\"jpg\",\"image_id\":\"98406270bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/98406270bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":580,\"height\":409},{\"id\":43227,\"img_suffix\":\"jpg\",\"image_id\":\"98d50150bc0a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/98d50150bc0a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":848,\"height\":480}],\"image_count\":5,\"reply_count\":17,\"praise_count\":7,\"last_reply_time\":1496797537000,\"post_time\":1481066439000,\"last_reply_mid\":61626579,\"last_reply_author\":\"アイエァオイタザギセ\",\"chosen_time\":1481107493000,\"modify_time\":1481066439000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11633,\"post_title\":\"【晒票-战报】12.6-萌战day16回顾，还是需要学习一个。\",\"post_summary\":\"海选第十六天，燃组复活赛纷纷创造了最高票和最低票纪录，心情复杂。燃组第四：杰诺斯票数\\u2014\\u201441135；燃组第七：梅瑟·埃勒菲...\",\"author_mid\":10924476,\"author_name\":\"Luli_聲之形要上映了\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/cc684b25549e9b5be84c46723892f8028a269e82.jpg\",\"post_image_list\":[{\"id\":43182,\"img_suffix\":\"jpg\",\"image_id\":\"93e68a90bbd011e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/93e68a90bbd011e6ab9800163e000cdb\",\"praise_count\":0,\"width\":700,\"height\":290},{\"id\":43183,\"img_suffix\":\"jpg\",\"image_id\":\"eb215240bbd011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/eb215240bbd011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":700,\"height\":290},{\"id\":43184,\"img_suffix\":\"png\",\"image_id\":\"12aaef10bbd111e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/12aaef10bbd111e6ab9800163e000cdb\",\"praise_count\":0,\"width\":521,\"height\":116}],\"image_count\":3,\"reply_count\":4,\"praise_count\":2,\"last_reply_time\":1495506898000,\"post_time\":1481041891000,\"last_reply_mid\":98834059,\"last_reply_author\":\"故城故里\",\"chosen_time\":1481107486000,\"modify_time\":1481041891000,\"sex\":0,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":176,\"community_name\":\"steam\",\"community_url\":\"http://www.im9.com/community.html?community_id=176\",\"community_avatar\":\"http://img.yo9.com/68a3c7d09c3211e5bc7900163e000cde\",\"member_num\":76694,\"post_count\":1955,\"certification\":0},\"post_info\":{\"post_id\":14707,\"post_title\":\"为什么steam在国内总是被\\u201c被封杀\\u201d？\",\"post_summary\":\"今天天气不错，某论坛站长:steam乙烷确定！\",\"author_mid\":13704982,\"author_name\":\"Desvl\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/f3e938770c3e56bf71c4f10cf1b473cb672da018.jpg\",\"image_count\":0,\"reply_count\":38,\"praise_count\":8,\"last_reply_time\":1496331903000,\"post_time\":1480597339000,\"last_reply_mid\":61756844,\"last_reply_author\":\"萌静静静静静静静静i\",\"chosen_time\":1481107466000,\"modify_time\":1480597339000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":1,\"community_name\":\"bilibili\",\"community_url\":\"http://www.im9.com/community.html?community_id=1\",\"community_avatar\":\"http://img.yo9.com/a355a8a09a9611e5907700163e000cdb\",\"member_num\":209294,\"post_count\":12011,\"certification\":0},\"post_info\":{\"post_id\":22828,\"post_title\":\"科普:谁是诚哥？\",\"post_summary\":\"大家在看番时，一遇到较福利的情节，就有人刷\\u201c人在做，诚在看\\u201d \\u201c你笑诚哥日不了，诚哥笑你日得少\\u201d 等弹幕，评论区...\",\"author_mid\":37431437,\"author_name\":\"高能吐槽君007\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/9648b38359a111fc06f44b101dabd97182c2055c.jpg\",\"image_count\":0,\"reply_count\":79,\"praise_count\":57,\"last_reply_time\":1497056573000,\"post_time\":1480686441000,\"last_reply_mid\":40467366,\"last_reply_author\":\"晓晓浅陌\",\"chosen_time\":1481021581000,\"modify_time\":1480686441000,\"sex\":1,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0},\"post_info\":{\"post_id\":11514,\"post_title\":\"BilibiliMoe 萌报 第二期 日本动画场 保护爱和本心\",\"post_summary\":\"-总编：从不脱稿的Luli引言欢迎各位来到Bilibili萌战日本动画场兴趣圈！激动人心的萌战在日本动画场进入第二周啦！！这一周的b站简直处处都充满了大家的参与...\",\"author_mid\":10924476,\"author_name\":\"Luli_聲之形要上映了\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/cc684b25549e9b5be84c46723892f8028a269e82.jpg\",\"post_image_list\":[{\"id\":42865,\"img_suffix\":\"jpg\",\"image_id\":\"cfb0d170bafe11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/cfb0d170bafe11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":1920,\"height\":453}],\"image_count\":1,\"reply_count\":20,\"praise_count\":8,\"last_reply_time\":1495450940000,\"post_time\":1480951532000,\"last_reply_mid\":32911291,\"last_reply_author\":\"Kisseve\",\"chosen_time\":1481021569000,\"modify_time\":1480951532000,\"sex\":0,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12157,\"post_title\":\"不搞噱头直面青春，京吹部监督石原立也与小说作者武田绫乃对谈\",\"post_summary\":\" 京吹部第二季动画还有 4 话就要落幕，相较于第一季动画的高黄剧情，第二季久美子快成了救火队长，社团里谁有事久美子都要去担心解决，目前是久美子要解决明...\",\"author_mid\":22262843,\"author_name\":\"databox\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/8668cf0cd77d5bc6ce667c65ede69ab0e0bc7448.jpg\",\"post_image_list\":[{\"id\":53784,\"img_suffix\":\"jpg\",\"image_id\":\"36ac6fa0bb5a11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/36ac6fa0bb5a11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53785,\"img_suffix\":\"jpg\",\"image_id\":\"4e11d0e0bb5a11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/4e11d0e0bb5a11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53786,\"img_suffix\":\"jpg\",\"image_id\":\"80dc49b0bb5a11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/80dc49b0bb5a11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53787,\"img_suffix\":\"jpg\",\"image_id\":\"ccb05de0bb5a11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/ccb05de0bb5a11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281}],\"image_count\":6,\"reply_count\":2,\"praise_count\":1,\"last_reply_time\":1481077856000,\"post_time\":1480991552000,\"last_reply_mid\":22262843,\"last_reply_author\":\"databox\",\"chosen_time\":1481021546000,\"modify_time\":1480991552000,\"sex\":0,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24586,\"post_title\":\"【老张的酒后脑洞】一般的京都四人组都有啥\",\"post_summary\":\"自从上回沉迷电铁无法自拔之后就一直被工作牵制住手脚今天一边哈啤一边沉迷久丽 然后想到一些好玩的东西 厄\\u2026或者说是酒后幻觉？总之 哈啤小麦王很好喝 ...\",\"author_mid\":409007,\"author_name\":\"100%低地板轻轨车\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/9cce572fdde47dcbcaaba260c3be4216714d0f25.jpg\",\"post_image_list\":[{\"id\":277136,\"img_suffix\":\"jpg\",\"image_id\":\"57c2b100b7cb11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/57c2b100b7cb11e6a35400163e000cdb\",\"praise_count\":0,\"width\":480,\"height\":270},{\"id\":277137,\"img_suffix\":\"jpg\",\"image_id\":\"58162830b7cb11e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/58162830b7cb11e6aafb00163e000cde\",\"praise_count\":0,\"width\":480,\"height\":270},{\"id\":277138,\"img_suffix\":\"jpg\",\"image_id\":\"59261190b7cb11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/59261190b7cb11e6a35400163e000cdb\",\"praise_count\":0,\"width\":480,\"height\":270}],\"image_count\":3,\"reply_count\":14,\"praise_count\":16,\"last_reply_time\":1494209885000,\"post_time\":1480599469000,\"last_reply_mid\":11845267,\"last_reply_author\":\"鳴ると233333\",\"chosen_time\":1481021516000,\"modify_time\":1480599469000,\"sex\":1,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":183,\"community_name\":\"洛天依\",\"community_url\":\"http://www.im9.com/community.html?community_id=183\",\"community_avatar\":\"http://img.yo9.com/456f97b09c0c11e5b7cb00163e00043c\",\"member_num\":53870,\"post_count\":1039,\"certification\":0},\"post_info\":{\"post_id\":23160,\"post_title\":\"做作业前的标配\",\"post_summary\":\"大家做作业一般都听什么歌呢!\",\"author_mid\":40858837,\"author_name\":\"开播啦准备好板凳和瓜子\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/6aff0237714382d424c2ce2591cf7ff19b92ea55.jpg\",\"post_image_list\":[{\"id\":386576,\"img_suffix\":\"jpg\",\"image_id\":\"29cb8870a68311e6932700163e000cdb\",\"image_url\":\"http://img.yo9.com/29cb8870a68311e6932700163e000cdb\",\"praise_count\":0,\"width\":1728,\"height\":2304},{\"id\":386577,\"img_suffix\":\"jpg\",\"image_id\":\"2a905f10a68311e6b5ce00163e000cde\",\"image_url\":\"http://img.yo9.com/2a905f10a68311e6b5ce00163e000cde\",\"praise_count\":0,\"width\":640,\"height\":906},{\"id\":386578,\"img_suffix\":\"jpg\",\"image_id\":\"2afe3c10a68311e6a2b400163e00043c\",\"image_url\":\"http://img.yo9.com/2afe3c10a68311e6a2b400163e00043c\",\"praise_count\":0,\"width\":720,\"height\":450},{\"id\":386579,\"img_suffix\":\"jpg\",\"image_id\":\"2bc95440a68311e6932700163e000cdb\",\"image_url\":\"http://img.yo9.com/2bc95440a68311e6932700163e000cdb\",\"praise_count\":0,\"width\":720,\"height\":1280}],\"image_count\":6,\"reply_count\":131,\"praise_count\":42,\"last_reply_time\":1497019001000,\"post_time\":1478699301000,\"last_reply_mid\":28331258,\"last_reply_author\":\"筱黑是咸鱼\",\"chosen_time\":1481021505000,\"modify_time\":1478699301000,\"sex\":1,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":316,\"community_name\":\"火影忍者\",\"community_url\":\"http://www.im9.com/community.html?community_id=316\",\"community_avatar\":\"http://img.yo9.com/e15ef780b4f611e5838500163e000cde\",\"member_num\":39033,\"post_count\":1586,\"certification\":0},\"post_info\":{\"post_id\":28100,\"post_title\":\"此生无悔入火影，来世愿往木叶村。\",\"post_summary\":\"某一天，你穿越了，来到忍者世界。你想去到哪个家族，结识哪些人，和谁建立羁绊，和谁建立家庭？\",\"author_mid\":4043522,\"author_name\":\"沈小学\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/9df35129535d61c841ac44ec3f92a253969c79bc.jpg\",\"post_image_list\":[{\"id\":94810,\"img_suffix\":\"jpg\",\"image_id\":\"1333abf0b84011e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/1333abf0b84011e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":688}],\"image_count\":1,\"reply_count\":64,\"praise_count\":29,\"last_reply_time\":1496924505000,\"post_time\":1480649602000,\"last_reply_mid\":9026874,\"last_reply_author\":\"慕鸣而来\",\"chosen_time\":1481021483000,\"modify_time\":1480649602000,\"sex\":1,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24958,\"post_title\":\"【12月6日⭐话题】【B萌】对于作品带动角色票数的事你怎么看！\",\"post_summary\":\"现在B萌的正在如火如荼的进行中每天投投票好像也蛮有意思的但是经常看数据的小伙伴可能就发现了一个现象经常会有一些角色魅力并不是很出众但是因为所属作品本身人气很高而...\",\"author_mid\":14272321,\"author_name\":\"丨两仪式-\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/6e46555e5643dd8d2738dabda62c1d1172f506f0.jpg\",\"post_image_list\":[{\"id\":282250,\"img_suffix\":\"jpeg\",\"image_id\":\"90dc0eb0bb9911e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/90dc0eb0bb9911e6b4bb00163e00043c\",\"praise_count\":0,\"width\":1200,\"height\":700}],\"image_count\":1,\"reply_count\":13,\"praise_count\":13,\"last_reply_time\":1482026309000,\"post_time\":1481017898000,\"last_reply_mid\":40645201,\"last_reply_author\":\"某梧桐树下的西柚\",\"chosen_time\":1481021470000,\"modify_time\":1481017898000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":304,\"community_name\":\"银魂\",\"community_url\":\"http://www.im9.com/community.html?community_id=304\",\"community_avatar\":\"http://img.yo9.com/f27bc4209bed11e5bc7900163e000cde\",\"member_num\":33379,\"post_count\":907,\"certification\":0},\"post_info\":{\"post_id\":8882,\"post_title\":\"开你们手机里第二张，第五张与第十九张图，为它们编个完整小故事\",\"post_summary\":\"[诶嘿]银桑和十四漫游在雨后的街道上，从居酒屋出来的他们扶持着往万事屋去。当他们感到脚下积水泛凉，当夜里的灯终于映着冷凝的光，当夜里风的轨迹能清晰被感知到，终于...\",\"author_mid\":8315285,\"author_name\":\"黄昏雪之诗\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/ac6ebd1a2f57e00b2ce4acf28b3bf55956ab7241.jpg\",\"post_image_list\":[{\"id\":33105,\"img_suffix\":\"jpg\",\"image_id\":\"45cc2680b97811e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/45cc2680b97811e6ab9a00163e00043c\",\"praise_count\":0,\"width\":600,\"height\":847},{\"id\":33106,\"img_suffix\":\"jpg\",\"image_id\":\"46173940b97811e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/46173940b97811e6a35400163e000cdb\",\"praise_count\":0,\"width\":580,\"height\":388},{\"id\":33107,\"img_suffix\":\"jpg\",\"image_id\":\"466224f0b97811e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/466224f0b97811e6aafb00163e000cde\",\"praise_count\":0,\"width\":640,\"height\":640}],\"image_count\":3,\"reply_count\":58,\"praise_count\":29,\"last_reply_time\":1497018194000,\"post_time\":1480783691000,\"last_reply_mid\":88844112,\"last_reply_author\":\"春原冈崎哥俩好\",\"chosen_time\":1481021457000,\"modify_time\":1480783691000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24794,\"post_title\":\"这次是Kanon，我京的STAFF留言\",\"post_summary\":\"本帖转自新浪微博@京阿尼应援团 石原监督kanon快要开始播放了。虽然有些悲伤的故事展开，但是就像冬去春来一般肯定会迎来happyend的。最后希望这...\",\"author_mid\":6851880,\"author_name\":\"灬星空雨夜灬\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/f50d86f2a7b7ba8e8cf689a846cc7912d77ada74.jpg\",\"post_image_list\":[{\"id\":280286,\"img_suffix\":\"jpg\",\"image_id\":\"e5c0f180b9c211e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/e5c0f180b9c211e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":562},{\"id\":280287,\"img_suffix\":\"jpg\",\"image_id\":\"25ff7a00b9c311e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/25ff7a00b9c311e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":562},{\"id\":280288,\"img_suffix\":\"jpg\",\"image_id\":\"4784b6e0b9c311e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/4784b6e0b9c311e6ab9a00163e00043c\",\"praise_count\":0,\"width\":1000,\"height\":562},{\"id\":280289,\"img_suffix\":\"jpg\",\"image_id\":\"66566c80b9c311e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/66566c80b9c311e6aafb00163e000cde\",\"praise_count\":0,\"width\":1000,\"height\":562}],\"image_count\":13,\"reply_count\":3,\"praise_count\":1,\"last_reply_time\":1480907076000,\"post_time\":1480818186000,\"last_reply_mid\":31554605,\"last_reply_author\":\"凉未凑\",\"chosen_time\":1481021443000,\"modify_time\":1480818186000,\"sex\":1,\"level\":5,\"tags\":[]}},{\"community_info\":{\"community_id\":154,\"community_name\":\"京都动画\",\"community_url\":\"http://www.im9.com/community.html?community_id=154\",\"community_avatar\":\"http://img.yo9.com/a2d4321014f411e695b100163e000cdb\",\"member_num\":34484,\"post_count\":922,\"certification\":0},\"post_info\":{\"post_id\":24955,\"post_title\":\"【声之形】扩大上映范围\",\"post_summary\":\"根据日本媒体报道，9月17日上映的京阿尼动画电影《声之形》日前票房突破了22亿日元（约合人民币1.34亿元），观影人数突破170万人，从本月开始该电影还将扩大上...\",\"author_mid\":12681259,\"author_name\":\"露★子\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/bca95880531e3cafd552603aa86cc1b137b739bb.jpg\",\"post_image_list\":[{\"id\":282226,\"img_suffix\":\"jpg\",\"image_id\":\"398f22c0bb9211e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/398f22c0bb9211e6ab9800163e000cdb\",\"praise_count\":0,\"width\":2000,\"height\":1214}],\"image_count\":1,\"reply_count\":11,\"praise_count\":12,\"last_reply_time\":1497085820000,\"post_time\":1481014812000,\"last_reply_mid\":85487399,\"last_reply_author\":\"你在装纯\",\"chosen_time\":1481021432000,\"modify_time\":1481014812000,\"sex\":2,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":23,\"community_name\":\"东方\",\"community_url\":\"http://www.im9.com/community.html?community_id=23\",\"community_avatar\":\"http://img.yo9.com/4b713fe0273211e6910600163e000cdb\",\"member_num\":46778,\"post_count\":701,\"certification\":0},\"post_info\":{\"post_id\":10551,\"post_title\":\"神主有女儿了\",\"post_summary\":\"刚刚逛了一下微博，突然发现的，现在神主有一男一女两个孩子，感觉好幸福啊\",\"author_mid\":16680335,\"author_name\":\"兰梦洲\",\"author_avatar\":\"http://i0.hdslb.com/bfs/face/5f6bbfda12e3eabbe01f58d7ceade852f7719fdf.jpg\",\"post_image_list\":[{\"id\":59513,\"img_suffix\":\"png\",\"image_id\":\"1ea60650bb0011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/1ea60650bb0011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":1071,\"height\":537}],\"image_count\":1,\"reply_count\":25,\"praise_count\":56,\"last_reply_time\":1493828444000,\"post_time\":1480951987000,\"last_reply_mid\":12311793,\"last_reply_author\":\"东方天空璋\",\"chosen_time\":1481021420000,\"modify_time\":1480951987000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":1930,\"community_name\":\"你居然没有表情包\",\"community_url\":\"http://www.im9.com/community.html?community_id=1930\",\"community_avatar\":\"http://img.yo9.com/6c5f93d0a00211e5b15f00163e000cde\",\"member_num\":185308,\"post_count\":9465,\"certification\":0},\"post_info\":{\"post_id\":22530,\"post_title\":\"自制表情包【杂图】\",\"post_summary\":\"不知道有没有人和我一样，喜欢制作一大堆表情包却不怎么使用，几乎全都尘封在手机相册的底部，所以我来到了这里_(:з」∠)_如果各位喜欢呢就抱走顺手请点个赞...\",\"author_mid\":27290840,\"author_name\":\"鬼畜型痴汉\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/5baf7be27bacf08cf5c74051e4127309d79e3496.jpg\",\"post_image_list\":[{\"id\":263006,\"img_suffix\":\"jpg\",\"image_id\":\"7522e050bb7011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/7522e050bb7011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":919,\"height\":665},{\"id\":263007,\"img_suffix\":\"jpg\",\"image_id\":\"76118610bb7011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/76118610bb7011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":956,\"height\":720},{\"id\":263008,\"img_suffix\":\"jpg\",\"image_id\":\"766ec140bb7011e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/766ec140bb7011e6ab9800163e000cdb\",\"praise_count\":0,\"width\":833,\"height\":720},{\"id\":263009,\"img_suffix\":\"jpg\",\"image_id\":\"76b78a10bb7011e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/76b78a10bb7011e6b4bb00163e00043c\",\"praise_count\":0,\"width\":515,\"height\":521}],\"image_count\":9,\"reply_count\":23,\"praise_count\":22,\"last_reply_time\":1496932036000,\"post_time\":1481000244000,\"last_reply_mid\":25097892,\"last_reply_author\":\"大雪雪雪雪雪雪雪雪雪\",\"chosen_time\":1481021409000,\"modify_time\":1481000244000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":9377,\"community_name\":\"冷笑话\",\"community_url\":\"http://www.im9.com/community.html?community_id=9377\",\"community_avatar\":\"http://img.yo9.com/48f06c7045b211e6ab5200163e000cdb\",\"member_num\":29101,\"post_count\":521,\"certification\":0},\"post_info\":{\"post_id\":20105,\"post_title\":\"【冷笑话】住嘴，我知道你想问什么！\",\"post_summary\":\"三年起步，最高死刑。各位亲，考虑好了奥！\",\"author_mid\":33826008,\"author_name\":\"绝粮莫兴\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/87ec8feea353f294c0c912b55eba5284b2d67519.jpg\",\"post_image_list\":[{\"id\":140058,\"img_suffix\":\"jpg\",\"image_id\":\"d3256610b94e11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/d3256610b94e11e6a35400163e000cdb\",\"praise_count\":0,\"width\":1080,\"height\":1920}],\"image_count\":1,\"reply_count\":40,\"praise_count\":42,\"last_reply_time\":1487648184000,\"post_time\":1480765888000,\"last_reply_mid\":18397034,\"last_reply_author\":\"单身loser\",\"chosen_time\":1481021396000,\"modify_time\":1480765888000,\"sex\":1,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":488,\"community_name\":\"摄影\",\"community_url\":\"http://www.im9.com/community.html?community_id=488\",\"community_avatar\":\"http://img.yo9.com/3b9138c09fb811e5b15f00163e000cde\",\"member_num\":39158,\"post_count\":2301,\"certification\":0},\"post_info\":{\"post_id\":7394,\"post_title\":\"湖与草原\",\"post_summary\":\"\",\"author_mid\":18161373,\"author_name\":\"公子别跑\",\"author_avatar\":\"http://i2.hdslb.com/bfs/face/567640e69e91112bc66a03f6253904341574c463.jpg\",\"post_image_list\":[{\"id\":27920,\"img_suffix\":\"jpg\",\"image_id\":\"d2eefee0b97111e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/d2eefee0b97111e6aafb00163e000cde\",\"praise_count\":0,\"width\":1200,\"height\":1600},{\"id\":27921,\"img_suffix\":\"jpg\",\"image_id\":\"d37fcd30b97111e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/d37fcd30b97111e6aafb00163e000cde\",\"praise_count\":0,\"width\":1200,\"height\":1600},{\"id\":27922,\"img_suffix\":\"jpg\",\"image_id\":\"d3f153b0b97111e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/d3f153b0b97111e6a35400163e000cdb\",\"praise_count\":0,\"width\":1200,\"height\":1600},{\"id\":27923,\"img_suffix\":\"jpg\",\"image_id\":\"d52f51f0b97111e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/d52f51f0b97111e6a35400163e000cdb\",\"praise_count\":0,\"width\":2400,\"height\":3200}],\"image_count\":6,\"reply_count\":6,\"praise_count\":7,\"last_reply_time\":1492666999000,\"post_time\":1480780928000,\"last_reply_mid\":40896571,\"last_reply_author\":\"丶DouM\",\"chosen_time\":1481021385000,\"modify_time\":1480780928000,\"sex\":2,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12158,\"post_title\":\"只有偶像才能救日本，1 月新番《偶像事变》 PV 公开\",\"post_summary\":\" 日本的娱乐产业已经进化到了一个「娱乐至死」的境界，从生到死都能有相应配套的娱乐产品，像是连墓碑都能有 LoveLive! μ\\u2019s ...\",\"author_mid\":22262843,\"author_name\":\"databox\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/8668cf0cd77d5bc6ce667c65ede69ab0e0bc7448.jpg\",\"post_image_list\":[{\"id\":53797,\"img_suffix\":\"jpg\",\"image_id\":\"9c88cdb0bb5e11e6ab9800163e000cdb\",\"image_url\":\"http://img.yo9.com/9c88cdb0bb5e11e6ab9800163e000cdb\",\"praise_count\":0,\"width\":498,\"height\":497},{\"id\":53798,\"img_suffix\":\"jpg\",\"image_id\":\"343f26e0bb5f11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/343f26e0bb5f11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53799,\"img_suffix\":\"jpg\",\"image_id\":\"3ede1d90bb5f11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3ede1d90bb5f11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281},{\"id\":53800,\"img_suffix\":\"jpg\",\"image_id\":\"58e070d0bb5f11e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/58e070d0bb5f11e6b4bb00163e00043c\",\"praise_count\":0,\"width\":500,\"height\":281}],\"image_count\":10,\"reply_count\":10,\"praise_count\":3,\"last_reply_time\":1496825245000,\"post_time\":1480993049000,\"last_reply_mid\":15265860,\"last_reply_author\":\"月见游\",\"chosen_time\":1481021374000,\"modify_time\":1480993049000,\"sex\":0,\"level\":3,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12143,\"post_title\":\"作家渡航专访：大春物年内或有最新发表？\",\"post_summary\":\"改编自渡航著作的轻小说，今季新番动画《少女编号》正在放送中，剧情也快进入尾声高潮，而渡航的另一部人气作品《果然我的青春恋爱喜剧搞错了。》目前第12卷还在难产中，...\",\"author_mid\":23108143,\"author_name\":\"提灯喵新闻组\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/7212a0e213616ca495ce0e1eead8914763e895f5.jpg\",\"post_image_list\":[{\"id\":53749,\"img_suffix\":\"jpg\",\"image_id\":\"0c3df2b0baa711e6aafb00163e000cde\",\"image_url\":\"http://img.yo9.com/0c3df2b0baa711e6aafb00163e000cde\",\"praise_count\":0,\"width\":400,\"height\":600},{\"id\":53750,\"img_suffix\":\"jpg\",\"image_id\":\"0cb6cc30baa711e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/0cb6cc30baa711e6ab9a00163e00043c\",\"praise_count\":0,\"width\":435,\"height\":289}],\"image_count\":2,\"reply_count\":9,\"praise_count\":5,\"last_reply_time\":1495080756000,\"post_time\":1480913732000,\"last_reply_mid\":8984244,\"last_reply_author\":\"兔子杀了萝卜\",\"chosen_time\":1481021364000,\"modify_time\":1480913732000,\"sex\":0,\"level\":4,\"tags\":[]}},{\"community_info\":{\"community_id\":5562,\"community_name\":\"新番情报\",\"community_url\":\"http://www.im9.com/community.html?community_id=5562\",\"community_avatar\":\"http://img.yo9.com/50e19a10b3ab11e5806400163e000cdb\",\"member_num\":68191,\"post_count\":1695,\"certification\":0},\"post_info\":{\"post_id\":12134,\"post_title\":\"再续经典！《圣斗士星矢》将拍摄真人版并推出CG动画\",\"post_summary\":\"根据外媒报道，车田正美知名少年漫画作品《圣斗士星矢》将启动三大新企划，包括拍摄真人电影和制作全新CG动画电影。今天（12月3日）在巴西圣保罗举办的漫展Comic...\",\"author_mid\":23108143,\"author_name\":\"提灯喵新闻组\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/7212a0e213616ca495ce0e1eead8914763e895f5.jpg\",\"post_image_list\":[{\"id\":53719,\"img_suffix\":\"jpg\",\"image_id\":\"bcb61cc0ba8f11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/bcb61cc0ba8f11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":538,\"height\":399},{\"id\":53720,\"img_suffix\":\"jpg\",\"image_id\":\"be5e9ca0ba8f11e6ab9a00163e00043c\",\"image_url\":\"http://img.yo9.com/be5e9ca0ba8f11e6ab9a00163e00043c\",\"praise_count\":0,\"width\":559,\"height\":317},{\"id\":53721,\"img_suffix\":\"jpg\",\"image_id\":\"c7c1b7f0ba8f11e6a35400163e000cdb\",\"image_url\":\"http://img.yo9.com/c7c1b7f0ba8f11e6a35400163e000cdb\",\"praise_count\":0,\"width\":680,\"height\":921}],\"image_count\":3,\"reply_count\":5,\"praise_count\":1,\"last_reply_time\":1497030945000,\"post_time\":1480903738000,\"last_reply_mid\":109349212,\"last_reply_author\":\"丽安的书架\",\"chosen_time\":1481021355000,\"modify_time\":1480903738000,\"sex\":0,\"level\":4,\"tags\":[]}}]\n         */\n\n        var total_count: Int = 0\n        var total_page: Int = 0\n        var result: List<ResultBean>? = null\n\n        class ResultBean {\n            /**\n             * community_info : {\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"member_num\":22608,\"post_count\":4900,\"certification\":0}\n             * post_info : {\"post_id\":11636,\"post_title\":\"为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\",\"post_summary\":\"灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\",\"author_mid\":3061924,\"author_name\":\"路过的小轩\",\"author_avatar\":\"http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\",\"post_image_list\":[{\"id\":43197,\"img_suffix\":\"jpg\",\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":220,\"height\":155},{\"id\":43198,\"img_suffix\":\"jpg\",\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":640,\"height\":359}],\"image_count\":2,\"reply_count\":80,\"praise_count\":17,\"last_reply_time\":1496979724000,\"post_time\":1481049163000,\"last_reply_mid\":82581258,\"last_reply_author\":\"51xx点info\",\"chosen_time\":1481107581000,\"modify_time\":1481049163000,\"sex\":0,\"level\":4,\"tags\":[]}\n             */\n\n            var community_info: CommunityInfoBean? = null\n            var post_info: PostInfoBean? = null\n\n            class CommunityInfoBean {\n                /**\n                 * community_id : 12\n                 * community_name : Bilibili萌战日本动画场\n                 * community_url : http://www.im9.com/community.html?community_id=12\n                 * community_avatar : http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\n                 * member_num : 22608\n                 * post_count : 4900\n                 * certification : 0\n                 */\n\n                var community_id: Int = 0\n                var community_name: String? = null\n                var community_url: String? = null\n                var community_avatar: String? = null\n                var member_num: Int = 0\n                var post_count: Int = 0\n                var certification: Int = 0\n            }\n\n            class PostInfoBean {\n                /**\n                 * post_id : 11636\n                 * post_title : 为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\n                 * post_summary : 灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\n                 * author_mid : 3061924\n                 * author_name : 路过的小轩\n                 * author_avatar : http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\n                 * post_image_list : [{\"id\":43197,\"img_suffix\":\"jpg\",\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":220,\"height\":155},{\"id\":43198,\"img_suffix\":\"jpg\",\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"praise_count\":0,\"width\":640,\"height\":359}]\n                 * image_count : 2\n                 * reply_count : 80\n                 * praise_count : 17\n                 * last_reply_time : 1496979724000\n                 * post_time : 1481049163000\n                 * last_reply_mid : 82581258\n                 * last_reply_author : 51xx点info\n                 * chosen_time : 1481107581000\n                 * modify_time : 1481049163000\n                 * sex : 0\n                 * level : 4\n                 * tags : []\n                 */\n\n                var post_id: Int = 0\n                var post_title: String? = null\n                var post_summary: String? = null\n                var author_mid: Int = 0\n                var author_name: String? = null\n                var author_avatar: String? = null\n                var image_count: Int = 0\n                var reply_count: Int = 0\n                var praise_count: Int = 0\n                var last_reply_time: Long = 0\n                var post_time: Long = 0\n                var last_reply_mid: Int = 0\n                var last_reply_author: String? = null\n                var chosen_time: Long = 0\n                var modify_time: Long = 0\n                var sex: Int = 0\n                var level: Int = 0\n                var post_image_list: List<PostImageListBean>? = null\n                var tags: List<*>? = null\n\n                class PostImageListBean {\n                    /**\n                     * id : 43197\n                     * img_suffix : jpg\n                     * image_id : 49e55c70bbe211e6b4bb00163e00043c\n                     * image_url : http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\n                     * praise_count : 0\n                     * width : 220\n                     * height : 155\n                     */\n\n                    var id: Int = 0\n                    var img_suffix: String? = null\n                    var image_id: String? = null\n                    var image_url: String? = null\n                    var praise_count: Int = 0\n                    var width: Int = 0\n                    var height: Int = 0\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/Community.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 21:36\n * * 描述:兴趣圈\n */\ndata class Community(var result: List<ResultBean>,\n                     var total_count: Int,\n                     var total_page: Int) {\n    /*  total_count\":1996,\"total_page\":67,\"result\":[*/\n\n\n    /**\n     * community_info : {\"certification\":0,\"community_avatar\":\"http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\",\"community_id\":12,\"community_name\":\"Bilibili萌战日本动画场\",\"community_url\":\"http://www.im9.com/community.html?community_id=12\",\"member_num\":22608,\"post_count\":4900}\n     * post_info : {\"author_avatar\":\"http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\",\"author_mid\":3061924,\"author_name\":\"路过的小轩\",\"chosen_time\":1481107581000,\"image_count\":2,\"last_reply_author\":\"51xx点info\",\"last_reply_mid\":82581258,\"last_reply_time\":1496979724000,\"level\":4,\"modify_time\":1481049163000,\"post_id\":11636,\"post_image_list\":[{\"height\":155,\"id\":43197,\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"img_suffix\":\"jpg\",\"praise_count\":0,\"width\":220},{\"height\":359,\"id\":43198,\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"img_suffix\":\"jpg\",\"praise_count\":0,\"width\":640}],\"post_summary\":\"灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\",\"post_time\":1481049163000,\"post_title\":\"为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\",\"praise_count\":17,\"reply_count\":80,\"sex\":0,\"tags\":[]}\n     */\n    data class ResultBean(var community_info: CommunityInfoBean,\n                          var post_info: PostInfoBean) {\n\n\n        data class CommunityInfoBean(var certification: Int,\n                                     var community_avatar: String,\n                                     var community_id: Int,\n                                     var community_name: String,\n                                     var community_url: String,\n                                     var member_num: Int,\n                                     var post_count: Int) {\n            /**\n             * certification : 0\n             * community_avatar : http://img.yo9.com/ffb5c320978711e6bd4a00163e000128\n             * community_id : 12\n             * community_name : Bilibili萌战日本动画场\n             * community_url : http://www.im9.com/community.html?community_id=12\n             * member_num : 22608\n             * post_count : 4900\n             */\n\n\n        }\n\n        class PostInfoBean(var author_avatar: String,\n                           var author_mid: Int,\n                           var author_name: String,\n                           var chosen_time: Long,\n                           var image_count: Int,\n                           var last_reply_author: String,\n                           var last_reply_mid: Int,\n                           var last_reply_time: Long,\n                           var level: Int,\n                           var modify_time: Long,\n                           var post_id: Int,\n                           var post_summary: String,\n                           var post_time: Long,\n                           var post_title: String,\n                           var praise_count: Int,\n                           var reply_count: Int,\n                           var sex: Int,\n                           var post_image_list: List<PostImageListBean>,\n                           var tags: List<*>) {\n            /**\n             * author_avatar : http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\n             * author_mid : 3061924\n             * author_name : 路过的小轩\n             * chosen_time : 1481107581000\n             * image_count : 2\n             * last_reply_author : 51xx点info\n             * last_reply_mid : 82581258\n             * last_reply_time : 1496979724000\n             * level : 4\n             * modify_time : 1481049163000\n             * post_id : 11636\n             * post_image_list : [{\"height\":155,\"id\":43197,\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"img_suffix\":\"jpg\",\"praise_count\":0,\"width\":220},{\"height\":359,\"id\":43198,\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"img_suffix\":\"jpg\",\"praise_count\":0,\"width\":640}]\n             * post_summary : 灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\n             * post_time : 1481049163000\n             * post_title : 为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\n             * praise_count : 17\n             * reply_count : 80\n             * sex : 0\n             * tags : []\n             */\n\n\n            data class PostImageListBean(var height: Int,\n                                         var id: Int,\n                                         var image_id: String,\n                                         var image_url: String,\n                                         var img_suffix: String,\n                                         var praise_count: Int,\n                                         var width: Int) {\n                /**\n                 * height : 155\n                 * id : 43197\n                 * image_id : 49e55c70bbe211e6b4bb00163e00043c\n                 * image_url : http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\n                 * img_suffix : jpg\n                 * praise_count : 0\n                 * width : 220\n                 */\n\n\n            }\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/GameCenter.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 21:07\n * * 描述:游戏中心\n */\ndata class GameCenter(var uid: Int,\n                      var glist_display_cnt: Int,\n                      var cache_time: Int,\n                      var greetings: List<GreetingsBean>,\n                      var publicities: List<Any>,\n                      var last_play: List<Any>,\n                      var book_gift: List<BookGiftBean>,\n                      var game_list: List<GameListBean>) {\n\n    /**\n     * uid : 117143614\n     * greetings : [{\"context\":\"机战萌娘，等你来战！\"},{\"context\":\"来和阿宝学功夫吧~\"},{\"context\":\"纳尼，我中了二向箔？\"},{\"context\":\"不摸鱼的人参，和咸鱼有什么区别？\"},{\"context\":\"谁是拥你入怀的王子？\"},{\"context\":\"纣王姐姐求嫁！\"},{\"context\":\"洛天依要带回家吗？\"},{\"context\":\"和香菜还有组长一起来拯救都市吧~\"},{\"context\":\"拔出石中剑，成为不列颠的王吧！\"},{\"context\":\"一起来玩有节操的游戏\"},{\"context\":\"我从未见过如此魔性之消除\"},{\"context\":\"带你重回红白机时代\"},{\"context\":\"一根手指就能玩转世界~\"},{\"context\":\"公主当然还是我家的最可爱了\"},{\"context\":\"和我一起进入水墨风东方幻想世界吧~\"},{\"context\":\"愿意来读读这本血影世界的暗黑物语吗？\"},{\"context\":\"新的风暴已经出现，你可做好准备？\"},{\"context\":\"看不见我看不见我看不见我......\"},{\"context\":\"诸君，我喜欢战争\"},{\"context\":\"其实好多烦恼切掉哔\\u2014就都没有了\"},{\"context\":\"壮士！请干了这杯安利！\"}]\n     * publicities : []\n     * last_play : []\n     * book_gift : [{\"id\":1546,\"name\":\"碧蓝航线\",\"image\":\"http://i0.hdslb.com/bfs/game/9e985c4405efe7ae920aabd9b8d418a499566864.jpg\",\"link\":\"http://blhx.biligame.com/h5/\",\"book_status\":0},{\"id\":1504,\"name\":\"梦间集\",\"image\":\"http://i0.hdslb.com/bfs/game/89971792dc7e089a783fb888db4d6030a564e98f.jpg\",\"link\":\"http://mjj.biligame.com/yuyue/h5/\",\"book_status\":0},{\"id\":1700,\"name\":\"魔法禁书目录\",\"image\":\"http://i0.hdslb.com/bfs/game/8a166ba50006cbd3ce812929d90eb17477f42cad.jpg\",\"link\":\"http://acg.tv/u1jy\",\"book_status\":0},{\"id\":10086,\"name\":\"罗小黑妖灵簿\",\"image\":\"http://i0.hdslb.com/bfs/game/27d33b3c91c6c3c4a3ab97fed38327fb7faae6f0.jpg\",\"link\":\"http://lxhzj.biligame.com/yuyue/h5/\",\"book_status\":0},{\"id\":8897,\"name\":\"一血万杰\",\"image\":\"http://i0.hdslb.com/bfs/game/74483f0edf606c2b4039bb5318ccaf2f23be1755.jpg\",\"link\":\"http://yxwj.biligame.com/h5/\",\"book_status\":0},{\"id\":5000,\"name\":\"妃十三学园\",\"image\":\"http://i0.hdslb.com/bfs/game/4cc73a138adb5cfa1681f77d4600fbe0cd1f9d0f.octet-stream\",\"link\":\"http://girl.biligame.com/yuyue/h5/\",\"book_status\":0},{\"id\":9821,\"name\":\"叛逆性百万亚瑟王\",\"image\":\"http://i0.hdslb.com/bfs/game/6594d31cbb10d8e0aa9f03ed63e18605da0b5ac8.jpg\",\"link\":\"http://ma3.biligame.com/yuyue/h5/\",\"book_status\":0},{\"id\":1254,\"name\":\"战争工厂\",\"image\":\"http://i0.hdslb.com/bfs/game/ce172f0021a38801119a03e2bed05d4db97341cd.jpg\",\"link\":\"http://zzgc.biligame.com/yuyue/h5/\",\"book_status\":0},{\"id\":1486,\"name\":\"萌王EX\",\"image\":\"http://i0.hdslb.com/bfs/game/a9b47c32367ac376279017334a5e153a5f2587cd.jpg\",\"link\":\"http://moe.biligame.com/yuyue/h5/\",\"book_status\":0},{\"id\":1233,\"name\":\"妖精的衣橱\",\"image\":\"http://i0.hdslb.com/bfs/game/1d30d0516f4365439fcb009b52c9b54e3ace65ed.jpg\",\"link\":\"https://yjdyc.biligame.com/h5/\",\"book_status\":0},{\"id\":1445,\"name\":\"神代梦华谭\",\"image\":\"http://i0.hdslb.com/bfs/game/371733ae28d3f8898832fe1472fe379b1923648d.jpg\",\"link\":\"http://sdmht.biligame.com/yuyueH5.html\",\"book_status\":0}]\n     * game_list : [{\"id\":61,\"title\":\"命运-冠位指定（Fate/GO）\",\"summary\":\"全平台公测开启！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.bilibili.fatego\",\"android_pkg_size\":300515257,\"android_pkg_ver\":49,\"download_link\":\"https://pkg.biligame.com/fatego/fatego_v1.15.0_bili_app_183545.apk\",\"download_link2\":\"http://pkgdl.biligame.net/8ee23f/d1799f.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/0a114c837d9f8fae8f2489a4bf91bf912c61edae.png\",\"hot\":1,\"new\":0},{\"id\":55,\"title\":\"阴阳师\",\"summary\":\"唯美如樱，百鬼物语\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.netease.onmyoji.bili\",\"android_pkg_size\":961880258,\"android_pkg_ver\":20,\"download_link\":\"https://pkg.biligame.com/yys/yys_v1.0.20_bili_app_166723.apk\",\"download_link2\":\"http://pkgdl.biligame.net/yys/yys_v1.0.20_bili_app_166723.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/36ee7db87a0d27aa5bb4672fffc22fb5ff8ec68c.png\",\"hot\":1,\"new\":0},{\"id\":67,\"title\":\"崩坏3\",\"summary\":\"点燃ACG动作之魂！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.miHoYo.bh3.bilibili\",\"android_pkg_size\":974686164,\"android_pkg_ver\":50,\"download_link\":\"https://pkg.biligame.com/bh3/bh3_v1.5.0_bili_703764.apk\",\"download_link2\":\"http://pkgdl.biligame.net/bh3/bh3_v1.5.0_bili_703764.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/00ca761705a75f51072931503092e5d0ccd42623.png\",\"hot\":1,\"new\":0},{\"id\":75,\"title\":\"仙剑奇侠传幻璃镜\",\"summary\":\"入境成妖，破界重生！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.shangruan.huanlijing.bili\",\"android_pkg_size\":404192009,\"android_pkg_ver\":2,\"download_link\":\"https://pkg.biligame.com/xjqxzhlj/xjqxzhlj_v1.2_bili_741923.apk\",\"download_link2\":\"http://pkgdl.biligame.net/xjqxzhlj/xjqxzhlj_v1.2_bili_741923.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/914f8c00352afe5a2d99a62863634baf1db3d5c7.jpg\",\"hot\":0,\"new\":1},{\"id\":49,\"title\":\"少女前线\",\"summary\":\"战地誓约，守护羁绊\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.digitalsky.girlsfrontline.cn.bili\",\"android_pkg_size\":156409992,\"android_pkg_ver\":125,\"download_link\":\"https://pkg.biligame.com/snqx/snqx_v1.122_bili_250437.apk\",\"download_link2\":\"http://pkgdl.biligame.net/snqx/snqx_v1.122_bili_250437.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/5fe1986506abe7a519a47fa5e505b097b3e7178d.png\",\"hot\":1,\"new\":0},{\"id\":76,\"title\":\"刀剑乱舞\",\"summary\":\"刀剑男士，即刻出阵！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.youzu.djlw.bili\",\"android_pkg_size\":234043222,\"android_pkg_ver\":13,\"download_link\":\"https://pkg.biligame.com/djlw/djlw_v1.0.43_bili_196537.apk\",\"download_link2\":\"http://pkgdl.biligame.net/djlw/djlw_v1.0.43_bili_196537.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/2950e1d94aa49a740f0d69a6ca64d60f97b68564.png\",\"hot\":0,\"new\":1},{\"id\":1,\"title\":\"崩坏学园2\",\"summary\":\"崩坏学园2-银狼之逐\",\"android_sign\":\"8B4FADF1EDA8B3D382873DECEBDAECC2\",\"android_pkg_name\":\"com.miHoYo.HSoDv2BiliBiliRelease\",\"android_pkg_size\":276075913,\"android_pkg_ver\":1,\"download_link\":\"http://pkg.biligame.com/bhxy/bhxy_v4.1.7_bili_754921.apk\",\"download_link2\":\"http://pkgdl.biligame.net/bhxy/bhxy_v4.1.7_bili_754921.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/622bc1d70006d595c11f1f30802fcd578096cb76.png\",\"hot\":1,\"new\":0},{\"id\":4,\"title\":\"梦王国与沉睡的100王子\",\"summary\":\"谁才是能够拥你入怀的王子？\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.gcrest.yume100prince.android.bili\",\"android_pkg_size\":172685183,\"android_pkg_ver\":133,\"download_link\":\"https://pkg.biligame.com/100p/bili/100p_v1.16.0_bili_app_321456.apk\",\"download_link2\":\"http://pkgdl.biligame.net/100p/bili/100p_v1.16.0_bili_app_321456.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/f9ceae3c2f1655170391fe975fc1988d1a222bff.png\",\"hot\":1,\"new\":0},{\"id\":69,\"title\":\"造物法则\",\"summary\":\"一部可以玩的漫画！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.baitian.pjm.zwfz.bili\",\"android_pkg_size\":238971576,\"android_pkg_ver\":7,\"download_link\":\"https://pkg.biligame.com/zwfz/zwfz_v1.0.6_bili_582014.apk\",\"download_link2\":\"http://pkgdl.biligame.net/zwfz/zwfz_v1.0.6_bili_582014.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/2018fb15ec09429459528cf8242105ffdae928a9.png\",\"hot\":0,\"new\":1},{\"id\":41,\"title\":\"偶像梦幻祭\",\"summary\":\"响彻世界吧！青春×偶像×高校生！\",\"android_sign\":\"EFBE39FB97E1A843AD33BEFFD333502B\",\"android_pkg_name\":\"com.tencent.tmgp.starscn\",\"android_pkg_size\":276450470,\"android_pkg_ver\":563725,\"download_link\":\"https://pkg.biligame.com/oxmhj/oxmhj_v2.1.1_bili_846732.apk\",\"download_link2\":\"http://pkgdl.biligame.net/oxmhj/oxmhj_v2.1.1_bili_846732.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/1775ec5694d85d0e2e40d4c8b47fd4d1fccdc0b0.png\",\"hot\":1,\"new\":0},{\"id\":23,\"title\":\"消灭都市\",\"summary\":\"拯救都市，寻找真相\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.opd2c.athena.bili\",\"android_pkg_size\":636258143,\"android_pkg_ver\":42,\"download_link\":\"https://pkg.biligame.com/xmds/xmds_v4.0.0_bili_app_351146.apk\",\"download_link2\":\"ttp://pkgdl.biligame.net/xmds/xmds_v4.0.0_bili_app_351146.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/2ab2c01bc1fc7502bfed472d7da6b5cfd9fafbf4.png\",\"hot\":1,\"new\":0},{\"id\":34,\"title\":\"ICHU偶像进行曲\",\"summary\":\"把我变成真正的偶像吧！\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.bilibili.ichu\",\"android_pkg_size\":274833590,\"android_pkg_ver\":10,\"download_link\":\"https://pkg.biligame.com/ichu/ichu_v1.2.0.7_bili_app.apk\",\"download_link2\":\"http://pkgdl.biligame.net/ichu/ichu_v1.2.0.7_bili_app.apk\",\"icon\":\"http://i0.hdslb.com/u_user/7baceb341073fe823faad36d2e1c805e.png\",\"hot\":1,\"new\":0},{\"id\":56,\"title\":\"少女咖啡枪\",\"summary\":\"咖啡馆x少女x枪战\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.xsj.girlcafegun.bili\",\"android_pkg_size\":571557005,\"android_pkg_ver\":101200003,\"download_link\":\"https://pkg.biligame.com/snkfq/snkfq_v1.12.3_bili_586472.apk\",\"download_link2\":\"http://pkgdl.biligame.net/snkfq/snkfq_v1.12.3_bili_586472.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/330cd44350eff6e080a3859517485cb89e372429.png\",\"hot\":0,\"new\":1},{\"id\":73,\"title\":\"EVA:破晓\",\"summary\":\"使徒来袭 指尖激战\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.qzgame.eva.bili\",\"android_pkg_size\":525278216,\"android_pkg_ver\":28212,\"download_link\":\"https://pkg.biligame.com/eva/eva_v2.1.8_bili_385631.apk\",\"download_link2\":\"http://pkgdl.biligame.net/eva/eva_v2.1.8_bili_385631.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/20a7cb3e539906cb6d0e328dd24a0be3dd39d69b.png\",\"hot\":0,\"new\":1},{\"id\":78,\"title\":\"光明大陆\",\"summary\":\"再一次 并肩作战\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.netease.gmdl.bili\",\"android_pkg_size\":436441747,\"android_pkg_ver\":333423,\"download_link\":\"https://pkg.biligame.com/gmdl/gmdl_v1.165917.167505_bili_app_268533.apk\",\"download_link2\":\"http://pkgdl.biligame.net/gmdl/gmdl_v1.165917.167505_bili_app_268533.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/0ef9e591ce4867f85c3fd05365faa745d21a75c4.png\",\"hot\":0,\"new\":0},{\"id\":44,\"title\":\"魔法少女小圆\",\"summary\":\"全平台公测正式开启！\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.zhuoyan.mfsn.bili\",\"android_pkg_size\":539692557,\"android_pkg_ver\":237,\"download_link\":\"http://pkgdl.biligame.net/mfsnxy/mfsnxy_v1.0.1.237_bili_app_636852.apk\",\"download_link2\":\"https://pkg.biligame.com/mfsnxy/mfsnxy_v1.0.1.237_bili_app_636852.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/1536b32e82ea4fb44a8037f4604f2e80269cbb67.png\",\"hot\":0,\"new\":1},{\"id\":22,\"title\":\"Zion载音\",\"summary\":\"呐，一起来打歌吧！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.zion.aquatrax\",\"android_pkg_size\":228110068,\"android_pkg_ver\":4,\"download_link\":\"https://pkg.biligame.com/zy/zy_v20.0.1_bili_568920.apk\",\"download_link2\":\"http://pkgdl.biligame.net/zy/zy_v20.0.1_bili_568920.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/32abcd8ae83f337623d13728f063e81eed5a07df.png\",\"hot\":0,\"new\":1},{\"id\":47,\"title\":\"幻游猎人\",\"summary\":\"全平台公测！妹系战争爆发\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.sywl.hylr.bili\",\"android_pkg_size\":214895716,\"android_pkg_ver\":1,\"download_link\":\"https://pkg.biligame.com/hylr/hylr_v1.4.0_bili_app_363226.apk\",\"download_link2\":\"http://pkgdl.biligame.net/hylr/hylr_v1.4.0_bili_app_363226.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/5deda073214a544e4571c097fd98de92e00aa8b3.png\",\"hot\":0,\"new\":1},{\"id\":68,\"title\":\"幻影纹章\",\"summary\":\"重燃纹章之火！\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.denachina.g10000002.bili\",\"android_pkg_size\":50187939,\"android_pkg_ver\":25,\"download_link\":\"https://pkg.biligame.com/hywz/hywz_v2.0.0_bili_892350.apk\",\"download_link2\":\"http://pkgdl.biligame.net/hywz/hywz_v2.0.0_bili_892350.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/277759569f1593fd29b836a19b4f9f76ba33ab27.png\",\"hot\":0,\"new\":1},{\"id\":70,\"title\":\"影之刃2\",\"summary\":\"东方武侠竞技扛鼎之作\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.zy.yzr2.bz\",\"android_pkg_size\":400465450,\"android_pkg_ver\":77,\"download_link\":\"https://pkg.biligame.com/yzr2/yzr2_v1.0.20_bili_842512.apk\",\"download_link2\":\"http://pkgdl.biligame.net/yzr2/yzr2_v1.0.20_bili_842512.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/497c062d9c39facf02e175569207af403f8fdc04.png\",\"hot\":0,\"new\":1},{\"id\":74,\"title\":\"诺诺来自异世界\",\"summary\":\"异世界 x 少女 x 羁绊\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.StudioGM.Nico.bili\",\"android_pkg_size\":434717113,\"android_pkg_ver\":59,\"download_link\":\"https://pkg.biligame.com/nnlzysj/nnlzysj_v0.7.3_bili_734807.apk\",\"download_link2\":\"http://pkgdl.biligame.net/nnlzysj/nnlzysj_v0.7.3_bili_734807.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/30651b513ab0f5533c4dd79fc6e7aa4322b76420.png\",\"hot\":0,\"new\":1},{\"id\":60,\"title\":\"装甲联盟\",\"summary\":\"萌娘X坦克 大作战\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.tank.yx.bili\",\"android_pkg_size\":266983654,\"android_pkg_ver\":645,\"download_link\":\"https://pkg.biligame.com/zjlm/zjlm_v1.328.2_bili_app_834742.apk\",\"download_link2\":\"http://pkgdl.biligame.net/zjlm/zjlm_v1.328.2_bili_app_834742.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/96d87c7dfdc6a24e9adf7866dc14af12e2a0a5bd.png\",\"hot\":0,\"new\":1},{\"id\":50,\"title\":\"三国罗曼史\",\"summary\":\"意料之外却又情理之中的三国\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.xd.sglms.bilibili\",\"android_pkg_size\":506188325,\"android_pkg_ver\":9044,\"download_link\":\"https://pkg.biligame.com/sglms/sglms_v1.0.9044_bili_app_864243.apk\",\"download_link2\":\"http://pkgdl.biligame.net/sglms/sglms_v1.0.9044_bili_app_864243.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/d95f6c858126086762976d60eec2c2e395f69e04.jpg\",\"hot\":0,\"new\":1},{\"id\":66,\"title\":\"那兔之大国梦\",\"summary\":\"每只兔子都有一个大国梦\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.xianyugame.natuwy.bili\",\"android_pkg_size\":141172906,\"android_pkg_ver\":7,\"download_link\":\"https://pkg.biligame.com/ntzdgm/ntzdgm_v1.0.7_bili_389653.apk\",\"download_link2\":\"http://pkgdl.biligame.net/ntzdgm/ntzdgm_v1.0.7_bili_389653.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/9c9848b308e41b902b16dac77d290b4702c2e031.png\",\"hot\":0,\"new\":0},{\"id\":58,\"title\":\"螺旋境界线\",\"summary\":\"幻想之境，触手可及\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.longtugame.lxjjx.bili\",\"android_pkg_size\":526337987,\"android_pkg_ver\":776,\"download_link\":\"https://pkg.biligame.com/lxjjx/lxjjx_v1.8.0_bili_app_118024.apk\",\"download_link2\":\"http://pkgdl.biligame.net/lxjjx/lxjjx_v1.8.0_bili_app_118024.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/5e61cba9d062f2d333b883c044660bfe85f088bd.png\",\"hot\":0,\"new\":0},{\"id\":59,\"title\":\"如果的世界\",\"summary\":\"动漫回合，协力冒险\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.ledo.areal.bili\",\"android_pkg_size\":214714919,\"android_pkg_ver\":10400,\"download_link\":\"https://pkg.biligame.com/rgdsj/rgdsj_v1.4.0_bili_245991.apk\",\"download_link2\":\"http://pkgdl.biligame.net/rgdsj/rgdsj_v1.4.0_bili_245991.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/2db63de24a6eea18bfad2938ce3d216b0c6f2641.png\",\"hot\":0,\"new\":0},{\"id\":62,\"title\":\"剑侠世界\",\"summary\":\"一生不容错过的浪漫武侠\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.wali.jianxiashijie3D.bili\",\"android_pkg_size\":757442067,\"android_pkg_ver\":3881,\"download_link\":\"https://pkg.biligame.com/jxsj/jxsj_v1.2.3881_bili_app.apk\",\"download_link2\":\"http://pkgdl.biligame.net/jxsj/jxsj_v1.2.3881_bili_app.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/4b161990beecaa61e1effb1f2865d6c04bd49118.png\",\"hot\":0,\"new\":1},{\"id\":64,\"title\":\"暴风战舰\",\"summary\":\"次世代3D战争策略手游\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.chyo.fleet.bili\",\"android_pkg_size\":128312007,\"android_pkg_ver\":25,\"download_link\":\"https://pkg.biligame.com/bfzj/bfzj_v1.10.0_bili_app_754264.apk\",\"download_link2\":\"http://pkgdl.biligame.net/bfzj/bfzj_v1.10.0_bili_app_754264.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/63fef8556c3465dea12e3c0849bd12761cdf664b.png\",\"hot\":0,\"new\":0},{\"id\":42,\"title\":\"刀剑神域黑衣剑士\",\"summary\":\"虽然是游戏，但可不是闹着玩的\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.yunchang.djsy.bili\",\"android_pkg_size\":451454434,\"android_pkg_ver\":2100,\"download_link\":\"https://pkg.biligame.com/djsy/djsy_v2.0.0_bili_app_562245.apk\",\"download_link2\":\"http://pkgdl.biligame.net/djsy/djsy_v2.0.0_bili_app_562245.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/764f761e9fd67a4e9d07155e7a621e39c2987cc0.png\",\"hot\":1,\"new\":0},{\"id\":53,\"title\":\"妖刀少女异闻录\",\"summary\":\"花泽香菜陪你一同黑化！\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.netease.ma56.bili\",\"android_pkg_size\":284813313,\"android_pkg_ver\":4,\"download_link\":\"https://pkg.biligame.com/ydsnywl/ydsnywl_v4.0_bili_488294.apk\",\"download_link2\":\"http://pkgdl.biligame.net/ydsnywl/ydsnywl_v4.0_bili_488294.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/2298be435121301d750025fbd1d6f4856ba06ec8.png\",\"hot\":0,\"new\":1},{\"id\":63,\"title\":\"大航海之路\",\"summary\":\"全3D真实航海冒险MMO手游\",\"android_sign\":\"4502A02A00395DEC05A4134AD593224D\",\"android_pkg_name\":\"com.netease.dhhzl.bili\",\"android_pkg_size\":496783735,\"android_pkg_ver\":17,\"download_link\":\"https://pkg.biligame.com/dhhzl/dhhzl_v1.1.7_bili_app_312258.apk\",\"download_link2\":\"http://pkgdl.biligame.net/dhhzl/dhhzl_v1.1.7_bili_app_312258.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/034ee658a62595cfce63dc89c59e9db4434b743e.png\",\"hot\":0,\"new\":1},{\"id\":3,\"title\":\"乖离性百万亚瑟王\",\"summary\":\"新老玩家登录 领特别礼包哟\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.netease.ma.bili\",\"android_pkg_size\":76142153,\"android_pkg_ver\":51000,\"download_link\":\"https://pkg.biligame.com/ma/bili/ma2_v5.1.0_bili_app_843974.apk\",\"download_link2\":\"http://pkgdl.biligame.net/ma/bili/ma2_v5.1.0_bili_app_843974.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/138e5dfdb5059d94e6e6b23b0bcb8ca43f6cf111.png\",\"hot\":1,\"new\":0},{\"id\":57,\"title\":\"皇牌机娘\",\"summary\":\"二次元战机娘化游戏\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.netease.av.bili\",\"android_pkg_size\":498438674,\"android_pkg_ver\":16,\"download_link\":\"https://pkg.biligame.com/hpjn/hpjn_v1.6.5_bili_app_946756.apk\",\"download_link2\":\"http://pkgdl.biligame.net/hpjn/hpjn_v1.6.5_bili_app_946756.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/14db819c78ab79c3f18e7fa5e9acf0c191594d02.png\",\"hot\":0,\"new\":0},{\"id\":45,\"title\":\"战场双马尾\",\"summary\":\"萌即正义！\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.kurogame.oppai.bili\",\"android_pkg_size\":548252109,\"android_pkg_ver\":45,\"download_link\":\"https://pkg.biligame.com/zcsmw/zcsmw_v2.1.0_bili_app_478446.apk\",\"download_link2\":\"http://pkgdl.biligame.net/zcsmw/zcsmw_v2.1.0_bili_app_478446.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/633e5dc3e361ac868aa14f38978bd227869677b3.png\",\"hot\":0,\"new\":0},{\"id\":26,\"title\":\"克鲁赛德战记\",\"summary\":\"日式萌系像素风RPG\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.nhnst.SKCQCN.bili\",\"android_pkg_size\":295042802,\"android_pkg_ver\":93,\"download_link\":\"https://pkg.biligame.com/klsdzj/klsdzj_v3.5.13_bili_app_452114.apk\",\"download_link2\":\"http://pkgdl.biligame.net/klsdzj/klsdzj_v3.5.13_bili_app_452114.apk\",\"icon\":\"http://i2.hdslb.com/u_user/503113dc29417f5c53abfeb9b520dbeb.png\",\"hot\":0,\"new\":0},{\"id\":43,\"title\":\"天天打波利\",\"summary\":\"吃饭、睡觉、打波利！\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.xd.ttdbl.bili\",\"android_pkg_size\":153064355,\"android_pkg_ver\":10123,\"download_link\":\"https://pkg.biligame.com/ttdbl/ttdbl_v2.4.0_bili_app_257548.apk\",\"download_link2\":\"http://pkgdl.biligame.net/ttdbl/ttdbl_v2.4.0_bili_app_257548.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/048a359bdb40cfb521130396a6b4b4d3912a4e76.png\",\"hot\":0,\"new\":0},{\"id\":31,\"title\":\"战舞幻想曲\",\"summary\":\"出发，大小姐探宝团！\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.zxlf.zwhx.bili\",\"android_pkg_size\":381836314,\"android_pkg_ver\":5,\"download_link\":\"https://pkg.biligame.com/zwhx/zwhxq_v1.12.001_bili_291592.apk\",\"download_link2\":\"http://pkgdl.biligame.net/zwhx/zwhxq_v1.12.001_bili_291592.apk\",\"icon\":\"http://i2.hdslb.com/u_user/5ea559c4f8d18294617cec080e1b43b9.png\",\"hot\":1,\"new\":0},{\"id\":28,\"title\":\"艾尔战记\",\"summary\":\"原汁原味二次元萌格斗\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.koramgame.els.kl.bili\",\"android_pkg_size\":436721681,\"android_pkg_ver\":415,\"download_link\":\"https://pkg.biligame.com/aezj/aezj_v0.20712.20_bili_app_353064.apk\",\"download_link2\":\"http://pkgdl.biligame.net/aezj/aezj_v0.20712.20_bili_app_353064.apk\",\"icon\":\"http://i2.hdslb.com/u_user/7d4187201faf0669a45c77ccfb665b38.png\",\"hot\":0,\"new\":0},{\"id\":40,\"title\":\"银时之魂\",\"summary\":\"银魂万事屋今日开业!\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"cn.mobage.g12000145.bili\",\"android_pkg_size\":304714100,\"android_pkg_ver\":420,\"download_link\":\"https://pkg.biligame.com/yszh/yszh_v4.2.0_bili_app_510925.apk\",\"download_link2\":\"http://pkgdl.biligame.net/yszh/yszh_v4.2.0_bili_app_510925.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/24e41b1d981a461fd6779d72239185b9f702b12a.png\",\"hot\":0,\"new\":0},{\"id\":27,\"title\":\"山海战记\",\"summary\":\"吾从未见过如此高颜值之塔防\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.smiletech.shzj.bili\",\"android_pkg_size\":528955815,\"android_pkg_ver\":8,\"download_link\":\"https://pkg.biligame.com/shzj/shzj_v4.17.1_bili_app_373816.apk\",\"download_link2\":\"http://pkgdl.biligame.net/shzj/shzj_v4.17.1_bili_app_373816.apk\",\"icon\":\"http://i0.hdslb.com/u_user/1126584600b7332152f5cd2bc56960e6.png\",\"hot\":0,\"new\":0},{\"id\":20,\"title\":\"苍翼之刃\",\"summary\":\"无冷却手势连招格斗\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.act91.bbrr.bili\",\"android_pkg_size\":334878345,\"android_pkg_ver\":26332,\"download_link\":\"https://pkg.biligame.com/cyzr/cyzr_v1.14.0_bili_app.apk\",\"download_link2\":\"http://pkgdl.biligame.net/cyzr/cyzr_v1.14.0_bili_app.apk\",\"icon\":\"http://i2.hdslb.com/u_user/751e3223d97bad57bbb8b14a747d0724.png\",\"hot\":0,\"new\":0},{\"id\":8,\"title\":\"梅露可物语\",\"summary\":\"伦家是最萌的游戏，快来玩\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.happyelements.miraclecn.bilibili\",\"android_pkg_size\":171388291,\"android_pkg_ver\":1322,\"download_link\":\"https://pkg.biligame.com/mlkwy/mlkwy_v3.5.0_bili_app_1487729027.apk\",\"download_link2\":\"http://pkgdl.biligame.net/mlkwy/mlkwy_v3.5.0_bili_app_1487729027.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/80c7c8202a52a484d18b2ac1cc7523fffbf4a70a.png\",\"hot\":0,\"new\":0},{\"id\":9,\"title\":\"风暴帝国-世界2\",\"summary\":\"新的风暴，已经出现\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.good.world2fbcn\",\"android_pkg_size\":63167960,\"android_pkg_ver\":20,\"download_link\":\"https://pkg.biligame.com/sj2/bili/sj2_v2.6_bili_app.apk\",\"download_link2\":\"http://pkgdl.biligame.net/sj2/bili/sj2_v2.6_bili_app.apk\",\"icon\":\"http://i0.hdslb.com/u_user/9008d9b26e263285824979e21c0c18bd.png\",\"hot\":0,\"new\":0},{\"id\":10,\"title\":\"影之刃\",\"summary\":\"雨，何时能停？敌之血，流干之时\",\"android_sign\":\"5F6A75569A2D96109405E969C4F57AAA\",\"android_pkg_name\":\"com.yzr.bili\",\"android_pkg_size\":215393621,\"android_pkg_ver\":31,\"download_link\":\"https://pkg.biligame.com/yzr/yzr_v1.16.0_bili_app_144782.apk\",\"download_link2\":\"http://pkgdl.biligame.net/yzr/yzr_v1.16.0_bili_app_144782.apk\",\"icon\":\"http://i0.hdslb.com/bfs/game/4c12a1516243b08cbdef2877459c48dffcb2fb52.png\",\"hot\":0,\"new\":0}]\n     * glist_display_cnt : 10\n     * cache_time : 30\n     */\n\n\n    data class GreetingsBean(var context: String) {\n        /**\n         * context : 机战萌娘，等你来战！\n         */\n\n    }\n\n    data class BookGiftBean(var id: Int,\n                            var name: String,\n                            var image: String,\n                            var link: String,\n                            var book_status: Int) {\n        /**\n         * id : 1546\n         * name : 碧蓝航线\n         * image : http://i0.hdslb.com/bfs/game/9e985c4405efe7ae920aabd9b8d418a499566864.jpg\n         * link : http://blhx.biligame.com/h5/\n         * book_status : 0\n         */\n\n\n    }\n\n    data class GameListBean(var id: Int,\n                            var title: String,\n                            var summary: String,\n                            var android_sign: String,\n                            var android_pkg_name: String,\n                            var android_pkg_size: Int,\n                            var android_pkg_ver: Int,\n                            var download_link: String,\n                            var download_link2: String,\n                            var icon: String,\n                            var hot: Int,\n                            var new: Int) {\n        /**\n         * id : 61\n         * title : 命运-冠位指定（Fate/GO）\n         * summary : 全平台公测开启！\n         * android_sign : 4502A02A00395DEC05A4134AD593224D\n         * android_pkg_name : com.bilibili.fatego\n         * android_pkg_size : 300515257\n         * android_pkg_ver : 49\n         * download_link : https://pkg.biligame.com/fatego/fatego_v1.15.0_bili_app_183545.apk\n         * download_link2 : http://pkgdl.biligame.net/8ee23f/d1799f.apk\n         * icon : http://i0.hdslb.com/bfs/game/0a114c837d9f8fae8f2489a4bf91bf912c61edae.png\n         * hot : 1\n         * new : 0\n         */\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/HotSearchTag.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/22 13:19\n * * 描述:发现界面热门搜索界面\n */\n\ndata class HotSearchTag(var trackid: String,\n                        var list: List<ListBean>) {\n\n\n    /**\n     * trackid : 10987946868864499550\n     * list : [{\"keyword\":\"王者荣耀\",\"status\":\"keep\"},{\"keyword\":\"全职高手\",\"status\":\"up\"},{\"keyword\":\"自由之翼\",\"status\":\"down\"},{\"keyword\":\"桃源恋歌\",\"status\":\"down\"},{\"keyword\":\"逐月之月\",\"status\":\"down\"},{\"keyword\":\"崩坏3\",\"status\":\"up\"},{\"keyword\":\"剑网3\",\"status\":\"up\"},{\"keyword\":\"埃罗芒阿老师\",\"status\":\"down\"},{\"keyword\":\"大司马\",\"status\":\"down\"},{\"keyword\":\"阴阳师\",\"status\":\"up\"},{\"keyword\":\"fate/go\",\"status\":\"up\"},{\"keyword\":\"dnf\",\"status\":\"down\"},{\"keyword\":\"英雄联盟\",\"status\":\"up\"},{\"keyword\":\"守望先锋\",\"status\":\"down\"},{\"keyword\":\"炉石传说\",\"status\":\"down\"},{\"keyword\":\"爱来了别错过2\",\"status\":\"down\"},{\"keyword\":\"唱歌\",\"status\":\"up\"},{\"keyword\":\"暴走大事件\",\"status\":\"up\"},{\"keyword\":\"天府泰剧\",\"status\":\"down\"},{\"keyword\":\"主播炸了\",\"status\":\"keep\"},{\"keyword\":\"哥哥太爱我怎么办\",\"status\":\"up\"},{\"keyword\":\"300英雄\",\"status\":\"up\"},{\"keyword\":\"超人回来了\",\"status\":\"up\"},{\"keyword\":\"学习\",\"status\":\"down\"},{\"keyword\":\"running+man\",\"status\":\"up\"},{\"keyword\":\"嗨氏\",\"status\":\"down\"},{\"keyword\":\"dota2\",\"status\":\"up\"},{\"keyword\":\"进击的巨人第二季\",\"status\":\"up\"},{\"keyword\":\"skam\",\"status\":\"up\"},{\"keyword\":\"龙珠传奇\",\"status\":\"up\"},{\"keyword\":\"csgo\",\"status\":\"down\"},{\"keyword\":\"cf\",\"status\":\"up\"},{\"keyword\":\"msi\",\"status\":\"down\"},{\"keyword\":\"rm\",\"status\":\"up\"},{\"keyword\":\"瞎看什么\",\"status\":\"up\"},{\"keyword\":\"主播真会玩\",\"status\":\"down\"},{\"keyword\":\"摔跤吧爸爸\",\"status\":\"up\"},{\"keyword\":\"火影忍者\",\"status\":\"down\"},{\"keyword\":\"声之形\",\"status\":\"up\"},{\"keyword\":\"坦克世界\",\"status\":\"up\"},{\"keyword\":\"minecraft\",\"status\":\"down\"},{\"keyword\":\"假面骑士\",\"status\":\"up\"},{\"keyword\":\"极乐净土\",\"status\":\"down\"},{\"keyword\":\"狼人杀\",\"status\":\"down\"},{\"keyword\":\"三世情缘\",\"status\":\"up\"},{\"keyword\":\"周星驰\",\"status\":\"down\"},{\"keyword\":\"snh48\",\"status\":\"down\"},{\"keyword\":\"海贼王\",\"status\":\"up\"},{\"keyword\":\"逗鱼时刻\",\"status\":\"down\"},{\"keyword\":\"狐妖小红娘\",\"status\":\"up\"}]\n     */\n\n\n    data class ListBean(\n            var keyword: String,\n            var status: String) {\n        /**\n         * keyword : 王者荣耀\n         * status : keep\n         */\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/InterestAd.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 21:54\n * * 描述:\n */\ndata class InterestAd(var total_count: Int,\n                      var result: List<ResultBean>) {\n\n\n    /**\n     * total_count : 6\n     * result : [{\"ads_title\":\"月刊\",\"ads_image\":\"http://img.yo9.com/21017e60086311e79c2500163e000128\",\"ads_image_link\":\"bilibili://group/1154?post_id=10839\"},{\"ads_title\":\"沙发\",\"ads_image\":\"http://img.yo9.com/2e8dfc00e93e11e685e400163e000128\",\"ads_image_link\":\"bilibili://group/133?post_id=12486\"},{\"ads_title\":\"净网\",\"ads_image\":\"http://img.yo9.com/96570850d7fe11e68ae800163e000128\",\"ads_image_link\":\"bilibili://group/1?post_id=25273\"},{\"ads_title\":\"月刊\",\"ads_image\":\"http://img.yo9.com/0273b290231d11e78a4900163e000128\",\"ads_image_link\":\"bilibili://group/1154?post_id=11216\"},{\"ads_title\":\"京蜜13\",\"ads_image\":\"http://img.yo9.com/de537ec099d011e6bd4a00163e000128\",\"ads_image_link\":\"bilibili://group/154?post_id=22242\"},{\"ads_title\":\"物语第二期\",\"ads_image\":\"http://img.yo9.com/1ae78e407d7411e6b42f00163e000128\",\"ads_image_link\":\"bilibili://group/133?post_id=9907\"}]\n     */\n\n\n    data class ResultBean(var ads_title: String,\n                          var ads_image: String,\n                          var ads_image_link: String) {\n        /**\n         * ads_title : 月刊\n         * ads_image : http://img.yo9.com/21017e60086311e79c2500163e000128\n         * ads_image_link : bilibili://group/1154?post_id=10839\n         */\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/InterestCategrory.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 21:43\n * * 描述:兴趣圈分类\n */\ndata class InterestCategrory(var result: List<ResultBean>) {\n\n\n    data class ResultBean(var id: Int,\n                          var name: String,\n                          var avatar: String) {\n        /**\n         * id : 71\n         * name : 萌战赢家\n         * avatar : http://img.yo9.com/f4bef5d099b311e6bd4a00163e000128\n         */\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/MulInterest.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 22:35\n * * 描述:\n */\nclass MulInterest(var itemTypez: Int = 0,\n                  var interestCategroryList: List<InterestCategrory.ResultBean>? = null,\n                  var community: Community.ResultBean? = null,\n                  var interestAdList: InterestAd? = null) : MultiItemEntity {\n\n\n    override fun getItemType(): Int = itemTypez\n\n\n    companion object {\n        val TYPR_HEADER = 1//\n        val TYPE_BANNER = 2\n        val TYPE_CATEGRORY = 3\n        val TYPR_ITEM = 4\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/discover/TopicCenter.kt",
    "content": "package com.yoyiyi.soleil.bean.discover\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 22:58\n * * 描述:话题中心\n */\ndata class TopicCenter(var code: Int,\n                       var total: Int,\n                       var pages: Int,\n                       var list: List<ListBean>) {\n\n\n    data class ListBean(var cover: String,\n                        var link: String,\n                        var title: String) {\n\n        /**\n         * cover : http://i0.hdslb.com/bfs/activity-plat/cover/20170605/r9vj2n3964.jpg\n         * link : http://www.bilibili.com/blackboard/topic/activity-H12uuAGzZ.html\n         * title : 加油！奋斗的六月\n         */\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/dynamic/Dynamic.kt",
    "content": "package com.yoyiyi.soleil.bean.dynamic\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/18 14:07\n * 描述:\n */\ndata class Dynamic(var item: List<ItemBean>) {\n    data class ItemBean(\n            var isRecent: Int,\n            var position: Int,\n            var title: String,\n            var cover: String,\n            var uri: String,\n            var param: String,\n            var gotoX: String,\n            var desc: String,\n            var play: Int,\n            var danmaku: Int,\n            var reply: Int,\n            var favorite: Int,\n            var tid: Int,\n            var tname: String,\n            var tag: RecentBean.TagBean,\n            var ctime: Long,\n            var duration: Int,\n            var mid: Int,\n            var name: String,\n            var face: String,\n            var is_atten: Int,\n            var recent_count: Int,\n            var coin: Int,\n            var share: Int,\n            var count: Int,\n            var type: Int,\n            var index: String,\n            var index_title: String,\n            var updates: Int,\n            var recent: List<RecentBean>\n\n            ) {\n\n        data class RecentBean(var coin: Int,\n                              var cover: String,\n                              var ctime: Int,\n                              var danmaku: Int,\n                              var desc: String,\n                              var duration: Int,\n                              var face: String,\n                              var favorite: Int,\n                              var goto: String,\n                              var is_atten: Int,\n                              var mid: Int,\n                              var name: String,\n                              var param: String,\n                              var play: Int,\n                              var reply: Int,\n                              var share: Int,\n                              var tag: TagBean,\n                              var tid: Int,\n                              var title: String,\n                              var tname: String,\n                              var uri: String) {\n            data class TagBean(var count: CountBean,\n                               var tag_id: Int,\n                               var tag_name: String) {\n                data class CountBean(var atten: Int)\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/dynamic/MulDynamic.kt",
    "content": "package com.yoyiyi.soleil.bean.dynamic\n\nimport com.chad.library.adapter.base.entity.AbstractExpandableItem\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/13 18:40\n * * 描述:\n */\n\nclass MulDynamic(var itemTypez: Int = 0,\n                 var group: Dynamic.ItemBean? = null,\n                 var flag: Boolean = false,\n                 var recent: Dynamic.ItemBean.RecentBean? = null,\n                 var lv: Int = 0) : AbstractExpandableItem<MulDynamic>(), MultiItemEntity {\n\n\n    var child: List<MulDynamic>? = null\n        set(value) {\n            field = value\n            field?.let {\n                if (it.isNotEmpty()) {\n                    it.forEach { item -> addSubItem(item) }\n                }\n            }\n        }\n\n    override fun getItemType(): Int = itemTypez\n\n\n    override fun getLevel(): Int = lv\n\n\n    companion object {\n        val TYPE_LV0 = 0\n        val TYPE_LV1 = 1\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/live/LiveEntrance.kt",
    "content": "package com.yoyiyi.soleil.bean.live\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 12:03\n * * 描述:直播入口\n */\ndata class LiveEntrance(var entrance_icon: EntranceIconBean,\n                        var id: Int,\n                        var name: String) {\n\n    /**\n     * entrance_icon : {\"height\":120,\"src\":\"http://static.hdslb.com/live-static/live-app/areaicon/android/xxhdpi/12.png?20170525111300\",\"width\":120}\n     * id : 12\n     * name : 手游直播\n     */\n\n\n    data class EntranceIconBean(var height: Int,\n                                var src: String,\n                                var width: Int) {\n        /**\n         * height : 120\n         * src : http://static.hdslb.com/live-static/live-app/areaicon/android/xxhdpi/12.png?20170525111300\n         * width : 120\n         */\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/live/LivePartition.kt",
    "content": "package com.yoyiyi.soleil.bean.live\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/14 17:02\n * 描述:直播分区\n */\ndata class LivePartition(var banner: List<Banner>,\n                         var entranceIcons: List<EntranceIcons>,\n                         var navigator: List<Navigator>,\n                         var partitions: List<Partitions>) {\n    data class Banner(var img: String,\n                      var link: String,\n                      var remark: String,\n                      var title: String)\n\n    data class EntranceIcons(var entrance_icon: EntranceIcon,\n                             var id: Int,\n                             var name: String) {\n        data class EntranceIcon(var height: String,\n                                var src: String,\n                                var width: String)\n    }\n\n    data class Navigator(var entrance_icon: EntranceIcon,\n                         var id: Int,\n                         var name: String) {\n        data class EntranceIcon(var height: String,\n                                var src: String,\n                                var width: String)\n    }\n\n    data class Partitions(var partition: Partition,\n                          var lives: List<Lives>) {\n\n        data class Partition(var area: String,\n                             var count: Int,\n                             var id: Int,\n                             var name: String,\n                             var sub_icon: SubIcon) {\n            data class SubIcon(var height: String,\n                               var src: String,\n                               var width: String)\n        }\n\n        data class Lives(var accept_quality: String,\n                         var area: String,\n                         var area_id: Int,\n                         var broadcast_type: Int,\n                         var check_version: Int,\n                         var cover: Cover,\n                         var is_tv: Int,\n                         var online: Int,\n                         var owner: Owner,\n                         var playurl: String,\n                         var room_id: Int,\n                         var title: String) {\n            data class Cover(var height: Int,\n                             var src: String,\n                             var width: Int)\n\n            data class Owner(var face: String,\n                             var mid: Int,\n                             var name: String)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/live/LiveRecommend.kt",
    "content": "package com.yoyiyi.soleil.bean.live\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/14 17:04\n * 描述:直播推荐\n */\ndata class LiveRecommend(var recommend_data: RecommendData) {\n    data class RecommendData(var partition: Partition,\n                             var banner_data: List<BannerData>,\n                             var lives: List<Lives>) {\n        data class Partition(var area: String,\n                             var count: Int,\n                             var id: Int,\n                             var name: String,\n                             var sub_icon: SubIcon) {\n            data class SubIcon(var height: String,\n                               var src: String,\n                               var width: String)\n        }\n\n        data class BannerData(var accept_quality: String,\n                              var area: String,\n                              var area_id: Int,\n                              var broadcast_type: Int,\n                              var check_version: Int,\n                              var cover: Cover,\n                              var is_tv: Int,\n                              var online: Int,\n                              var owner: Owner,\n                              var playurl: String,\n                              var room_id: Int,\n                              var title: String) {\n            data class Cover(var height: Int,\n                             var src: String,\n                             var width: Int)\n\n            data class Owner(var face: String,\n                             var mid: Int,\n                             var name: String)\n        }\n\n        data class Lives(var accept_quality: String,\n                         var area: String,\n                         var area_id: Int,\n                         var broadcast_type: Int,\n                         var check_version: Int,\n                         var cover: Cover,\n                         var is_tv: Int,\n                         var online: Int,\n                         var owner: Owner,\n                         var playurl: String,\n                         var room_id: Int,\n                         var title: String) {\n            data class Cover(var height: Int,\n                             var src: String,\n                             var width: Int)\n\n            data class Owner(var face: String,\n                             var mid: Int,\n                             var name: String)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/live/MulLive.kt",
    "content": "package com.yoyiyi.soleil.bean.live\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/6/7 11:03\n * 描述:直播多布局 帮助类\n */\n\nclass MulLive(val title: String? = null,\n              val url: String? = null,\n              val count: Int? = null,\n              val itemTypez: Int,\n              val hasMore: Boolean? = null,\n              val bannerData: LiveRecommend.RecommendData.BannerData? = null,\n              val bannerBeanList: List<LivePartition.Banner>? = null,\n              val recommendLives: List<LiveRecommend.RecommendData.Lives>? = null,\n              val partityLives: List<LivePartition.Partitions.Lives>? = null)\n    : MultiItemEntity {\n\n\n    companion object {\n\n        val TYPR_HEADER = 1//\n        val TYPE_RECOMMEND_ITEM = 2\n        val TYPE_PARTY_ITEM = 3\n        val TYPE_FOOTER = 4//\n        val TYPE_RECOMMEND_BANNER = 9\n\n        val TYPE_BANNER = 5//\n        val TYPE_ENTRANCE = 6//\n\n    }\n\n    override fun getItemType(): Int = itemTypez\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/live/support/LiveEnter.kt",
    "content": "package com.yoyiyi.soleil.bean.live.support\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/18 15:24\n * * 描述:直播入口\n */\n\nclass LiveEnter(var title: String, var img: Int)\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/recommend/AllStationRank.kt",
    "content": "package com.yoyiyi.soleil.bean.recommend\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 20:54\n * * 描述:全站排行\n */\ndata class AllStationRank(var rank: RankBean) {\n    data class RankBean(var list: List<ListBean>) {\n        /**\n         * aid : 6482189\n         * typename : 鬼畜调教\n         * title : 【高能Rap】你从未看过的家有儿女\n         * subtitle :\n         * play : 642497\n         * review : 48\n         * video_review : 12428\n         * favorites : 43142\n         * mid : 375375\n         * author : 伊丽莎白鼠\n         * description : 花了2个多月终于把这个大坑填完了，顺便也把小时候很喜欢的家有儿女复习了一遍，果然小时候还是太纯洁，长大之后发现了许多有意思的地方，       *\n         * 值得当代年轻人细细回味学习。只可惜自己已经不如晚年，不知道下次做鬼畜又是什么时候了，不得不说，做鬼畜真有意思。\n         *\n         *\n         * BGM：Unity - TheFatRat\n         *\n         *\n         * 营销号简直要逼死我，这次上了动态水印，转载请勿遮挡水印并注明出处。\n         * create : 2016-10-01 13:52\n         * pic : http://i1.hdslb.com/bfs/archive/4e812d44fcfd9fcadcaf1195d28eb24bc63eaccc.jpg_320x200.jpg\n         * coins : 65355\n         * duration : 2:30\n         * badgepay : false\n         * pts : 880957\n         */\n        data class ListBean(var aid: Int,\n                            var typename: String,\n                            var title: String,\n                            var subtitle: String,\n                            var play: String,\n                            var review: Int,\n                            var video_review: Int,\n                            var favorites: Int,\n                            var mid: Int,\n                            var author: String,\n                            var description: String,\n                            var create: String,\n                            var pic: String,\n                            var coins: Int,\n                            var duration: String,\n                            var badgepay: Boolean,\n                            var pts: Int)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/recommend/MulRecommend.kt",
    "content": "package com.yoyiyi.soleil.bean.recommend\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/31 10:57\n * * 描述:推荐多布局\n */\n\nclass MulRecommend(val itemTypez: Int = 0,\n                   var spanSize: Int = 0,\n                   var recommend: Recommend? = null,\n                   var data: List<Recommend.BannerItem>? = null) : MultiItemEntity {\n\n    companion object {\n        val TYPE_HEADER = 1\n        val TYPE_ITEM = 2\n        val HEADER_SPAN_SIZE = 2// 占2\n        val ITEM_SPAN_SIZE = 1// 占1\n    }\n\n\n    override fun getItemType(): Int = itemTypez\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/recommend/Recommend.kt",
    "content": "package com.yoyiyi.soleil.bean.recommend\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/17 15:25\n * 描述:\n */\ndata class Recommend/*(var code: Int,\n                     var message: String,\n                     var ttl: Int,\n                     var data: List<Data>)*/\n   /* data class Data*/(var param: String,\n                    var goto: String,\n                    var idx: Int,\n                    var title: String,\n                    var cover: String,\n                    var uri: String,\n                    var desc: String,\n                    var play: Int,\n                    var danmaku: Int,\n                    var reply: Int,\n                    var favorite: Int,\n                    var coin: Int,\n                    var share: Int,\n                    var tid: Int,\n                    var tname: String,\n                    var tag: Tag,\n                    var ctime: Int,\n                    var duration: Int,\n                    var mid: Int,\n                    var name: String,\n                    var face: String,\n                    var online: Int,\n                    var area: String,\n                    var area_id: Int,\n                    var `open`: Int,\n                    var banner_item: List<BannerItem>,\n                    var dislike_reasons: List<DislikeReasons>) {\n        data class Tag(var tag_id: Int,\n                       var tag_name: String,\n                       var count: Count) {\n            data class Count(var atten: Int)\n        }\n\n        data class BannerItem(var id: Int,\n                              var title: String,\n                              var image: String,\n                              var hash: String,\n                              var uri: String,\n                              var request_id: String,\n                              var server_type: Int,\n                              var resource_id: Int,\n                              var index: Int,\n                              var cm_mark: Int,\n                              var creative_id: Int,\n                              var src_id: Int,\n                              var is_ad_loc: Boolean,\n                              var ad_cb: String,\n                              var client_ip: String,\n                              var is_ad: Boolean,\n                              var click_url: String)\n\n        data class DislikeReasons(var reason_id: Int,\n                                  var reason_name: String)\n    }\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/Ad.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/9 21:19\n * * 描述:广告\n */\n class Ad\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/AllRegionRank.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 22:04\n * * 描述:全区排行\n */\ndata class AllRegionRank(var rank: RankBean) {\n\n\n    data class RankBean(var list: List<ListBean>) {\n\n\n        data class ListBean(\n                var aid: String,\n                var author: String,\n                var badgepay: Boolean,\n                var coins: Int,\n                var create: String,\n                var description: String,\n                var duration: String,\n                var favorites: Int,\n                var mid: Int,\n                var pic: String?,\n                var play: Int,\n                var pts: Int,\n                var review: Int,\n                var subtitle: String?,\n                var title: String?,\n                var typename: String?,\n                var video_review: Int\n        ) {\n            /**\n             * aid : 11028727\n             * author : LexBurner\n             * badgepay : false\n             * coins : 33732\n             * create : 2017-06-03 12:00\n             * description : 新浪微博@LexBurner\n             * duration : 11:16\n             * favorites : 19262\n             * mid : 777536\n             * pic : http://i2.hdslb.com/bfs/archive/329920d269aec76fe55e29a14f1c15ced95e1534.jpg_320x200.jpg\n             * play : 597006\n             * pts : 604256\n             * review : 8966\n             * subtitle :\n             * title : 【Lex】纪念诚哥十周年，小评后宫奇番《日在校园》\n             * typename : 综合\n             * video_review : 19655\n             */\n\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/Region.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/18 11:51\n * 描述:\n */\ndata class Region(var param: String,\n                  var `type`: String,\n                  var style: String,\n                  var title: String,\n                  var banner: Banner,\n                  var body: List<Body>) {\n    data class Banner(var top: List<Top>) {\n        data class Top(var id: Int,\n                       var title: String,\n                       var image: String,\n                       var hash: String,\n                       var uri: String,\n                       var resource_id: Int,\n                       var request_id: String,\n                       var is_ad: Boolean,\n                       var cm_mark: Int,\n                       var index: Int,\n                       var server_type: Int)\n    }\n\n    data class Body(var title: String,\n                    var cover: String,\n                    var uri: String,\n                    var param: String,\n                    var goto: String,\n                    var play: Int,\n                    var index: String,\n                    var total_count: String,\n                    var mtime: String,\n                    var danmaku:Int,\n                    var status: Int,\n                    var favourite: Int,\n                    var is_ad: Boolean,\n                    var cm_mark: Int)\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/RegionEnter.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/18 15:24\n * * 描述：分区入口\n */\n\ndata class RegionEnter(var title: String, var img: Int)\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/RegionRecommend.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/3 13:47\n * * 描述:分区推荐\n */\ndata class RegionRecommend(var banner: BannerBean,\n                           var recommend: List<RecommendBean>,\n                           var new: List<NewBean>,\n                           var dynamic: List<DynamicBean>) {\n\n    /**\n     * banner : {\"top\":[{\"id\":48905,\"title\":\"东成西就\",\"image\":\"http://i0.hdslb.com/bfs/archive/2b3fc7406907c1ed522a8ce9d03087340fc47424.jpg\",\"hash\":\"02ad5c3fb943d7e94aab179ad0f5bddd\",\"uri\":\"bilibili://video/11014607\",\"resource_id\":460,\"request_id\":\"1496469366467\",\"is_ad\":false,\"cm_mark\":0,\"index\":1,\"server_type\":0,\"creative_id\":17843,\"src_id\":525,\"is_ad_loc\":true,\"ad_cb\":\"CLOLARCeMRiCOCAAKAAwADiNBEIfMTQ5NjQ2OTM2NjQ1OHExNzJhMThhNjFhMjUzcTI5MEi6zZnkxitSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXAAeHeAAQCIAcMVkgEMMTEyLjEwLjk1LjIx\",\"click_url\":\"https://ad-bili-data.biligame.com/api/mobile/clickBili?ad_plan_id=1115&mid=__MID__&os=__OS__&idfa=__IDFA__&buvid=__BUVID__&android_id=__ANDROIDID__&imei=__IMEI__&mac=__MAC__&duid=__DUID__&ip=__IP__&request_id=__REQUESTID__&ts=__TS__&ua=__UA__\",\"client_ip\":\"112.10.95.21\"},{\"id\":0,\"title\":\"碧蓝\",\"image\":\"https://i0.hdslb.com/bfs/archive/8028cd44c8aeacfdff051def1c081bf6be13d3e9.jpg\",\"hash\":\"866a4c3d1b5d581d32c2d3a57b77b42e\",\"uri\":\"https://itunes.apple.com/cn/app/id1170457573?l=zh&ls=1&mt=8\",\"resource_id\":460,\"request_id\":\"1496469366458q172a18a61a253q290\",\"creative_id\":17843,\"src_id\":525,\"is_ad\":true,\"is_ad_loc\":true,\"cm_mark\":1,\"ad_cb\":\"CLOLARCeMRiCOCAAKAAwADiNBEIfMTQ5NjQ2OTM2NjQ1OHExNzJhMThhNjFhMjUzcTI5MEi6zZnkxitSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXAAeHeAAQCIAcMVkgEMMTEyLjEwLjk1LjIx\",\"click_url\":\"https://ad-bili-data.biligame.com/api/mobile/clickBili?ad_plan_id=1115&mid=__MID__&os=__OS__&idfa=__IDFA__&buvid=__BUVID__&android_id=__ANDROIDID__&imei=__IMEI__&mac=__MAC__&duid=__DUID__&ip=__IP__&request_id=__REQUESTID__&ts=__TS__&ua=__UA__\",\"client_ip\":\"112.10.95.21\",\"index\":2,\"server_type\":1},{\"id\":48701,\"title\":\"人工智障\",\"image\":\"http://i0.hdslb.com/bfs/archive/9cf37c24a3537a16eaae9d3139320d4c43a91a28.jpg\",\"hash\":\"1ef7bad1acc72183efa34ca03f72f082\",\"uri\":\"bilibili://video/10983731\",\"resource_id\":460,\"request_id\":\"1496469366467\",\"is_ad\":false,\"cm_mark\":0,\"index\":3,\"server_type\":0},{\"id\":48593,\"title\":\"灌篮高手\",\"image\":\"http://i0.hdslb.com/bfs/archive/67dd7772b730e6b3e569c0ef9a4b22d9396a1aff.jpg\",\"hash\":\"b1edf20188d3cb67e4155c3cca493555\",\"uri\":\"bilibili://video/10947676\",\"resource_id\":460,\"request_id\":\"1496469366467\",\"is_ad\":false,\"cm_mark\":0,\"index\":4,\"server_type\":0},{\"id\":48346,\"title\":\"婚纱\",\"image\":\"http://i0.hdslb.com/bfs/archive/1036738a1465ede0bda72ba19e6e469761b93fd4.jpg\",\"hash\":\"c06d5b4cdf80245699a6dab3ab070b6b\",\"uri\":\"bilibili://video/10949307\",\"resource_id\":460,\"request_id\":\"1496469366467\",\"is_ad\":false,\"cm_mark\":0,\"index\":5,\"server_type\":0},{\"id\":48177,\"title\":\"李云龙\",\"image\":\"http://i0.hdslb.com/bfs/archive/326b1edf5a92ac11e8f25ebde36a4e1e6df4f675.jpg\",\"hash\":\"1b67bb4bca6fa83bb7ad743a40a4d155\",\"uri\":\"bilibili://video/10893014\",\"resource_id\":460,\"request_id\":\"1496469366467\",\"is_ad\":false,\"cm_mark\":0,\"index\":6,\"server_type\":0}]}\n     * recommend : [{\"title\":\"【兄贵】蕉忍♂疾风传\",\"cover\":\"http://i1.hdslb.com/bfs/archive/a1c9860fff5068a6ce8cb100bc4384c676543d9b.jpg\",\"uri\":\"bilibili://video/11009508\",\"param\":\"11009508\",\"goto\":\"av\",\"name\":\"泽野螳螂\",\"play\":270648,\"danmaku\":6437,\"reply\":5656,\"favourite\":25160,\"pubdate\":1496394023,\"duration\":185,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【兄贵】盯♂裆♂猫 BOY A梦\",\"cover\":\"http://i0.hdslb.com/bfs/archive/39f8193ab0b995980818247534a0415f042f3e8f.jpg\",\"uri\":\"bilibili://video/10996329\",\"param\":\"10996329\",\"goto\":\"av\",\"name\":\"痒局长\",\"play\":138224,\"danmaku\":1022,\"reply\":1431,\"favourite\":6064,\"pubdate\":1496318938,\"duration\":74,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【波澜哥X高音哥】青藏高原\\u2014\\u2014把小红红灭掉的高音！！\",\"cover\":\"http://i0.hdslb.com/bfs/archive/7bb01a6ce4303558dc6d4773dd55f8e927478f63.jpg\",\"uri\":\"bilibili://video/11013530\",\"param\":\"11013530\",\"goto\":\"av\",\"name\":\"还有一天就放假了\",\"play\":39102,\"danmaku\":1336,\"reply\":596,\"favourite\":3598,\"pubdate\":1496388490,\"duration\":220,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【妹控必备】和泉纱雾哄哥哥睡觉\",\"cover\":\"http://i1.hdslb.com/bfs/archive/6c5c3f21b5ab9febf0e40991ed0ad9a50a68c4b7.jpg\",\"uri\":\"bilibili://video/11012923\",\"param\":\"11012923\",\"goto\":\"av\",\"name\":\"爱穹妹的小浪浪\",\"play\":27647,\"danmaku\":167,\"reply\":249,\"favourite\":2914,\"pubdate\":1496401233,\"rid\":22,\"rname\":\"鬼畜调教\"}]\n     * new : [{\"title\":\"我想有个家之咒怨\",\"cover\":\"http://i2.hdslb.com/bfs/archive/ebda6794388ff4744df82625bfd93e048e13cb4e.jpg\",\"uri\":\"bilibili://video/11035612\",\"param\":\"11035612\",\"goto\":\"av\",\"name\":\"少女怪力\",\"pubdate\":1496468970,\"duration\":315,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【一点都不污的鬼畜】王者荣耀鬼畜，有点小污\",\"cover\":\"http://i2.hdslb.com/bfs/archive/16258b765d624cf0ac667888900e601a115ff1d2.jpg\",\"uri\":\"bilibili://video/11035754\",\"param\":\"11035754\",\"goto\":\"av\",\"name\":\"SV-苏打熊\",\"play\":1,\"pubdate\":1496468921,\"duration\":114,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"[MV] Red Fusion\",\"cover\":\"http://i1.hdslb.com/bfs/archive/ac9743f67e67a07c79d3912fad6ba0a6350a57e6.jpg\",\"uri\":\"bilibili://video/11035444\",\"param\":\"11035444\",\"goto\":\"av\",\"name\":\"catfiveyolo\",\"pubdate\":1496468424,\"duration\":127,\"rid\":26,\"rname\":\"音MAD\"},{\"title\":\"帅锅\",\"cover\":\"http://i1.hdslb.com/bfs/archive/fe70eb5290d432bf56c240d5bbd95f143b6622fe.jpg\",\"uri\":\"bilibili://video/11035303\",\"param\":\"11035303\",\"goto\":\"av\",\"name\":\"emptykim2\",\"play\":26,\"pubdate\":1496467820,\"duration\":26,\"rid\":22,\"rname\":\"鬼畜调教\"}]\n     * dynamic : [{\"title\":\"有毒！你有见过这么魔性的爱情公寓吗？\",\"cover\":\"http://i1.hdslb.com/bfs/archive/dbb7050acb936fa7ce956c4c0a7864ffa693bf74.jpg\",\"uri\":\"bilibili://video/6136321\",\"param\":\"6136321\",\"goto\":\"av\",\"name\":\"潮汕好男人\",\"play\":751371,\"danmaku\":4010,\"reply\":1033,\"favourite\":25395,\"pubdate\":1472874247,\"duration\":66,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"电影《哈利炮特与施肥圣器》\\u2014\\u2014圣地亚戈特技学校最终决战篇\",\"cover\":\"http://i2.hdslb.com/bfs/archive/a7f6b78c3510cdbf56d47dc4c75b49b3a629297e.jpg\",\"uri\":\"bilibili://video/4183256\",\"param\":\"4183256\",\"goto\":\"av\",\"name\":\"泽野螳螂\",\"play\":1043580,\"danmaku\":15217,\"reply\":3391,\"favourite\":36734,\"pubdate\":1458896403,\"duration\":505,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【王尼玛】我的妹妹是暴漫老师\",\"cover\":\"http://i0.hdslb.com/bfs/archive/4a2f5501f4079c84bc8466d6623971b5d4df95ae.jpg\",\"uri\":\"bilibili://video/10789268\",\"param\":\"10789268\",\"goto\":\"av\",\"name\":\"咸鱼醬\",\"play\":316790,\"danmaku\":1812,\"reply\":1191,\"favourite\":10399,\"pubdate\":1495616420,\"duration\":90,\"rid\":126,\"rname\":\"人力VOCALOID\"},{\"title\":\"【大秦嘴炮帝国（一）】浴火重生·变法大成（下）\",\"cover\":\"http://i2.hdslb.com/bfs/archive/d794870c2cd630b2650d7648a4ece1d1f2628717.jpg\",\"uri\":\"bilibili://video/7923312\",\"param\":\"7923312\",\"goto\":\"av\",\"name\":\"非桥段\",\"play\":1225380,\"danmaku\":9109,\"reply\":5313,\"favourite\":40947,\"pubdate\":1483935872,\"duration\":306,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【后方高能】诸葛琴魔的桃源恋歌\",\"cover\":\"http://i2.hdslb.com/bfs/archive/d217b5b052c16fd94ede7e325b3f2cabb9d0d868.jpg\",\"uri\":\"bilibili://video/11032816\",\"param\":\"11032816\",\"goto\":\"av\",\"name\":\"啊五元你比四元少一元\",\"play\":53,\"danmaku\":7,\"reply\":8,\"favourite\":3,\"pubdate\":1496459520,\"duration\":228,\"rid\":26,\"rname\":\"音MAD\"},{\"title\":\"【妹控必备】和泉纱雾哄哥哥睡觉\",\"cover\":\"http://i1.hdslb.com/bfs/archive/6c5c3f21b5ab9febf0e40991ed0ad9a50a68c4b7.jpg\",\"uri\":\"bilibili://video/11012923\",\"param\":\"11012923\",\"goto\":\"av\",\"name\":\"爱穹妹的小浪浪\",\"play\":27647,\"danmaku\":167,\"reply\":249,\"favourite\":2914,\"pubdate\":1496401233,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"这土拨鼠叫得人撕心裂肺\",\"cover\":\"http://i0.hdslb.com/bfs/archive/63fa19824fa17883cfed509fcb50e869a58d123a.jpg\",\"uri\":\"bilibili://video/5260479\",\"param\":\"5260479\",\"goto\":\"av\",\"name\":\"边duang边搞比利\",\"play\":2404337,\"danmaku\":55945,\"reply\":3002,\"favourite\":77708,\"pubdate\":1468038598,\"duration\":217,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【哲学 x LL】Fantasy♂Maker！属于大家的哲♀学盛宴\",\"cover\":\"http://i1.hdslb.com/bfs/archive/81c6ab65415c4d621b4cc83169c39620c3c5f482.jpg\",\"uri\":\"bilibili://video/11013165\",\"param\":\"11013165\",\"goto\":\"av\",\"name\":\"POI社副副副社长投稿台\",\"play\":2418,\"danmaku\":315,\"reply\":27,\"favourite\":45,\"pubdate\":1496387219,\"duration\":317,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"气动♂东京\",\"cover\":\"http://i1.hdslb.com/bfs/archive/dbbbc3423a63da4ed4fa11ed0bb2a38c5a1c0950.jpg\",\"uri\":\"bilibili://video/10778952\",\"param\":\"10778952\",\"goto\":\"av\",\"name\":\"香港駐非特種部隊隊長\",\"play\":10083,\"danmaku\":127,\"reply\":83,\"favourite\":448,\"pubdate\":1495556489,\"duration\":228,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"崩坏3《姬子崩吧》\",\"cover\":\"http://i2.hdslb.com/bfs/archive/816cb243ee0becc96986c360de24a1cb8e55ae86.jpg\",\"uri\":\"bilibili://video/10978071\",\"param\":\"10978071\",\"goto\":\"av\",\"name\":\"灵魂氏\",\"play\":6406,\"danmaku\":85,\"reply\":105,\"favourite\":231,\"pubdate\":1496243059,\"duration\":208,\"rid\":126,\"rname\":\"人力VOCALOID\"},{\"title\":\"【哲♂学】Uptown Fuck\",\"cover\":\"http://i0.hdslb.com/bfs/archive/343ee40cdb01595b258ba5d74f459e69557eff49.jpg\",\"uri\":\"bilibili://video/6236543\",\"param\":\"6236543\",\"goto\":\"av\",\"name\":\"疯狂囧大叔\",\"play\":449753,\"danmaku\":2976,\"reply\":940,\"favourite\":16247,\"pubdate\":1473567152,\"duration\":192,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【Rap】曾小贤：从0开始的爱情公寓生活\",\"cover\":\"http://i1.hdslb.com/bfs/archive/8339c9df6d67cf489b56f21a2b0981884791b5a2.jpg\",\"uri\":\"bilibili://video/6168691\",\"param\":\"6168691\",\"goto\":\"av\",\"name\":\"贫道只是凡人\",\"play\":983066,\"danmaku\":3858,\"reply\":992,\"favourite\":26925,\"pubdate\":1473068367,\"duration\":86,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【狐妖小红娘】这部番彻底拯救了我的萝莉控！(°∀°)ﾉ\",\"cover\":\"http://i2.hdslb.com/bfs/archive/acc4bde499dc22a15cf72b479994a6a81173c689.jpg\",\"uri\":\"bilibili://video/7659952\",\"param\":\"7659952\",\"goto\":\"av\",\"name\":\"啊不Promethues\",\"play\":408778,\"danmaku\":1192,\"reply\":745,\"favourite\":9910,\"pubdate\":1482493198,\"duration\":75,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【我是Singer】 吔屎篇4\",\"cover\":\"http://i2.hdslb.com/bfs/archive/a8be6a47648d3a357f6e6ce1036a4aecba7c729a.jpg\",\"uri\":\"bilibili://video/5487664\",\"param\":\"5487664\",\"goto\":\"av\",\"name\":\"OELoop\",\"play\":829383,\"danmaku\":8044,\"reply\":3060,\"favourite\":28363,\"pubdate\":1469437776,\"duration\":139,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【兄贵】only my railgun♂某科学♂超电磁炮\",\"cover\":\"http://i0.hdslb.com/bfs/archive/713456ffdadef5e0d8b6a22abd313a9473b592fd.jpg\",\"uri\":\"bilibili://video/10971830\",\"param\":\"10971830\",\"goto\":\"av\",\"name\":\"谁家雒樱\",\"play\":13890,\"danmaku\":237,\"reply\":207,\"favourite\":229,\"pubdate\":1496225856,\"duration\":239,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【周星驰】本草纲目\",\"cover\":\"http://i1.hdslb.com/bfs/archive/0c29ea9037c4806f85347e204484e39f090913c1.jpg\",\"uri\":\"bilibili://video/10856929\",\"param\":\"10856929\",\"goto\":\"av\",\"name\":\"倒悬的橘子\",\"play\":92636,\"danmaku\":304,\"reply\":272,\"favourite\":1290,\"pubdate\":1495868797,\"duration\":139,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【全明星&超时空要塞Δ】禁忌的边境线\",\"cover\":\"http://i1.hdslb.com/bfs/archive/e743222d8db607fc538a51e5dba791449b8746bd.jpg\",\"uri\":\"bilibili://video/4785304\",\"param\":\"4785304\",\"goto\":\"av\",\"name\":\"浅澄月\",\"play\":2521747,\"danmaku\":28230,\"reply\":5510,\"favourite\":120695,\"pubdate\":1464386161,\"duration\":276,\"rid\":126,\"rname\":\"人力VOCALOID\"},{\"title\":\"【三国杀】这个rap有点带感\",\"cover\":\"http://i1.hdslb.com/bfs/archive/a8538e4932f9bc22800861778f1dfbfe53dd7431.jpg\",\"uri\":\"bilibili://video/10992049\",\"param\":\"10992049\",\"goto\":\"av\",\"name\":\"树深时见鹿dear\",\"play\":36512,\"danmaku\":372,\"reply\":305,\"favourite\":1967,\"pubdate\":1496306654,\"duration\":133,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【全明星】灌篮高手\",\"cover\":\"http://i1.hdslb.com/bfs/archive/fa0c2f7cfd6eb47ccd11e279bd50c13a26eace1f.jpg\",\"uri\":\"bilibili://video/10947676\",\"param\":\"10947676\",\"goto\":\"av\",\"name\":\"毒岛星空\",\"play\":82115,\"danmaku\":1586,\"reply\":295,\"favourite\":2384,\"pubdate\":1496142940,\"duration\":602,\"rid\":22,\"rname\":\"鬼畜调教\"},{\"title\":\"【全明星】自由自在-凤凰传奇\",\"cover\":\"http://i1.hdslb.com/bfs/archive/65e8a76be364c0df4a362a6f81dfe5661b5baf46.jpg\",\"uri\":\"bilibili://video/7897985\",\"param\":\"7897985\",\"goto\":\"av\",\"name\":\"惜缘、过去\",\"play\":1074957,\"danmaku\":18395,\"reply\":2306,\"favourite\":47945,\"pubdate\":1483792856,\"duration\":469,\"rid\":22,\"rname\":\"鬼畜调教\"}]\n     */\n\n\n    data class BannerBean(var top: List<TopBean>) {\n\n\n        class TopBean(var id: Int,\n                      var title: String,\n                      var image: String,\n                      var hash: String,\n                      var uri: String,\n                      var resource_id: Int,\n                      var request_id: String,\n                      var is_ad: Boolean,\n                      var cm_mark: Int,\n                      var index: Int,\n                      var server_type: Int,\n                      var creative_id: Int,\n                      var src_id: Int,\n                      var is_ad_loc: Boolean,\n                      var ad_cb: String,\n                      var click_url: String,\n                      var client_ip: String ) {\n            /**\n             * id : 48905\n             * title : 东成西就\n             * image : http://i0.hdslb.com/bfs/archive/2b3fc7406907c1ed522a8ce9d03087340fc47424.jpg\n             * hash : 02ad5c3fb943d7e94aab179ad0f5bddd\n             * uri : bilibili://video/11014607\n             * resource_id : 460\n             * request_id : 1496469366467\n             * is_ad : false\n             * cm_mark : 0\n             * index : 1\n             * server_type : 0\n             * creative_id : 17843\n             * src_id : 525\n             * is_ad_loc : true\n             * ad_cb : CLOLARCeMRiCOCAAKAAwADiNBEIfMTQ5NjQ2OTM2NjQ1OHExNzJhMThhNjFhMjUzcTI5MEi6zZnkxitSCeadreW3nuW4gloJ5rWZ5rGf55yBYgbkuK3lm71oAXAAeHeAAQCIAcMVkgEMMTEyLjEwLjk1LjIx\n             * click_url : https://ad-bili-data.biligame.com/api/mobile/clickBili?ad_plan_id=1115&mid=__MID__&os=__OS__&idfa=__IDFA__&buvid=__BUVID__&android_id=__ANDROIDID__&imei=__IMEI__&mac=__MAC__&duid=__DUID__&ip=__IP__&request_id=__REQUESTID__&ts=__TS__&ua=__UA__\n             * client_ip : 112.10.95.21\n             */\n\n        }\n    }\n\n    data class RecommendBean(var title: String,\n                             var cover: String,\n                             var uri: String,\n                             var param: String,\n                             var goto: String,\n                             var name: String,\n                             var play: Int,\n                             var danmaku: Int,\n                             var reply: Int,\n                             var favourite: Int,\n                             var pubdate: Int,\n                             var duration: Int,\n                             var rid: Int,\n                             var rname: String) {\n        /**\n         * title : 【兄贵】蕉忍♂疾风传\n         * cover : http://i1.hdslb.com/bfs/archive/a1c9860fff5068a6ce8cb100bc4384c676543d9b.jpg\n         * uri : bilibili://video/11009508\n         * param : 11009508\n         * goto : av\n         * name : 泽野螳螂\n         * play : 270648\n         * danmaku : 6437\n         * reply : 5656\n         * favourite : 25160\n         * pubdate : 1496394023\n         * duration : 185\n         * rid : 22\n         * rname : 鬼畜调教\n         */\n\n    }\n\n    data class NewBean(var title: String,\n                       var cover: String,\n                       var uri: String,\n                       var param: String,\n                       var goto: String,\n                       var danmaku: Int,\n                       var name: String,\n                       var pubdate: Int,\n                       var duration: Int,\n                       var rid: Int,\n                       var rname: String,\n                       var play: Int) {\n        /**\n         * title : 我想有个家之咒怨\n         * cover : http://i2.hdslb.com/bfs/archive/ebda6794388ff4744df82625bfd93e048e13cb4e.jpg\n         * uri : bilibili://video/11035612\n         * param : 11035612\n         * goto : av\n         * name : 少女怪力\n         * pubdate : 1496468970\n         * duration : 315\n         * rid : 22\n         * rname : 鬼畜调教\n         * play : 1\n         */\n\n    }\n\n    class DynamicBean(\n            var title: String,\n            var cover: String,\n            var uri: String,\n            var param: String,\n            var goto: String,\n            var name: String,\n            var play: Int,\n            var danmaku: Int,\n            var reply: Int,\n            var favourite: Int,\n            var pubdate: Int,\n            var duration: Int,\n            var rid: Int,\n            var rname: String) {\n        /**\n         * title : 有毒！你有见过这么魔性的爱情公寓吗？\n         * cover : http://i1.hdslb.com/bfs/archive/dbb7050acb936fa7ce956c4c0a7864ffa693bf74.jpg\n         * uri : bilibili://video/6136321\n         * param : 6136321\n         * goto : av\n         * name : 潮汕好男人\n         * play : 751371\n         * danmaku : 4010\n         * reply : 1033\n         * favourite : 25395\n         * pubdate : 1472874247\n         * duration : 66\n         * rid : 22\n         * rname : 鬼畜调教\n         */\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/RegionTagType.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\nimport android.os.Parcel\nimport android.os.Parcelable\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/18 11:47\n * 描述:\n */\ndata class RegionTagType(var tid: Int,\n                         var reid: Int,\n                         var name: String,\n                         var logo: String,\n                         var goto: String,\n                         var param: String,\n                         var children: List<Children>) : Parcelable {\n\n\n    constructor(`in`: Parcel) : this(`in`.readInt(),\n            `in`.readInt(),\n            `in`.readString(),\n            `in`.readString(),\n            `in`.readString(),\n            `in`.readString(),\n            children = arrayListOf()) {\n        `in`.readList(children, Children::class.java.classLoader)\n\n    }\n\n    override fun writeToParcel(dest: Parcel, flags: Int) {\n        dest.writeInt(this.tid)\n        dest.writeInt(this.reid)\n        dest.writeString(this.name)\n        dest.writeString(this.logo)\n        dest.writeString(this.goto)\n        dest.writeString(this.param)\n        dest.writeList(this.children)\n\n    }\n\n    override fun describeContents(): Int = 0\n\n    companion object {\n        @JvmField val CREATOR: Parcelable.Creator<RegionTagType> = object : Parcelable.Creator<RegionTagType> {\n            override fun createFromParcel(source: Parcel): RegionTagType {\n                return RegionTagType(source)\n            }\n\n            override fun newArray(size: Int): Array<RegionTagType?> {\n                return arrayOfNulls(size)\n            }\n        }\n    }\n\n\n    data class Children(var tid: Int,\n                        var reid: Int,\n                        var name: String,\n                        var logo: String,\n                        var goto: String,\n                        var param: String) : Parcelable {\n        constructor(`in`: Parcel) : this(`in`.readInt(),\n                `in`.readInt(),\n                `in`.readString(),\n                `in`.readString(),\n                `in`.readString(),\n                `in`.readString()\n        )\n\n        companion object {\n            @JvmField val CREATOR: Parcelable.Creator<Children> = object : Parcelable.Creator<Children> {\n                override fun createFromParcel(source: Parcel): Children {\n                    return Children(source)\n                }\n\n                override fun newArray(size: Int): Array<Children?> {\n                    return arrayOfNulls(size)\n                }\n            }\n\n        }\n\n\n        override fun describeContents(): Int = 0\n\n\n        override fun writeToParcel(dest: Parcel, flags: Int) {\n            dest.writeInt(this.tid)\n            dest.writeInt(this.reid)\n            dest.writeString(this.name)\n            dest.writeString(this.logo)\n            dest.writeString(this.goto)\n            dest.writeString(this.param)\n\n\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/region/RegionType.kt",
    "content": "package com.yoyiyi.soleil.bean.region\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/4 18:46\n * * 描述:分区tag详情\n */\ndata class RegionType(var recommend: List<RecommendBean>,\n                      var new: List<NewBean>) {\n    /**\n     * title : 【AMV/60fps】视觉的极致盛宴 Umbrella Corp【Nostromo】\n     * cover : http://i0.hdslb.com/bfs/archive/70315d46e396d55cc6785a1bf8caf114cef0cbcc.jpg\n     * uri : bilibili://video/6733923\n     * param : 6733923\n     * goto : av\n     * name : ここにいるよ\n     * play : 224795\n     * danmaku : 1858\n     * reply : 1280\n     * favourite : 40890\n     */\n\n\n    /**\n     * title : 【超燃/AMV】• Runnin ♫♪\n     * cover : http://i1.hdslb.com/bfs/archive/ddbd80d656994ff6d9b1250ca8da7c3fc9154fc1.jpg\n     * uri : bilibili://video/6770288\n     * param : 6770288\n     * goto : av\n     * name : 来自火星的小火龙\n     */\n\n\n    data class RecommendBean(var title: String,\n                             var cover: String,\n                             var uri: String,\n                             var param: String,\n                             var goto: String,\n                             var name: String,\n                             var play: Int,\n                             var danmaku: Int,\n                             var reply: Int,\n                             var favourite: Int)\n\n    data class NewBean(var title: String,\n                       var cover: String,\n                       var uri: String,\n                       var param: String,\n\n                       var goto: String,\n                       var name: String,\n                       var play: Int,\n                       var danmaku: Int)\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/search/Movie.kt",
    "content": "package com.yoyiyi.soleil.bean.search\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 13:06\n * * 描述:\n */\n\ndata class Movie(var code: Int,\n                 var data: DataBean,\n                 var message: String,\n                 var ttl: Int) {\n\n    /**\n     * code : 0\n     * data : {\"trackid\":\"5366355170602595779\",\"pages\":6,\"items\":[{\"title\":\"女王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\",\"uri\":\"bilibili://video/4605417\",\"param\":\"4605417\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦\\u2022米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼\\u2022布莱尔（麦克\\u2022辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\",\"screen_date\":\"2006-09-15 08:00:00\",\"area\":\"法国,英国,意大利\",\"cover_mark\":\"免费观看\",\"actors\":\"海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\",\"staff\":\"导演：斯蒂芬·弗雷斯\\n编剧：皮特·摩根\",\"length\":103,\"status\":2,\"attentions\":0},{\"title\":\"留级之王2\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6951d420873bc41084b33b280139d223bbcdca42.jpg\",\"uri\":\"bilibili://video/3034493\",\"param\":\"3034493\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"泰吉\\u2022巴德兰德巴德（卡尔\\u2022潘 Kal Penn 饰）带着范\\u2022维尔德的精神和大学学位，远赴英国加尔福德大学\\u2014\\u2014这里是他父亲曾经\\u201c战斗\\u201d过的地方，兄弟会\\u201c狐狸与猎犬\\u201d之屋留下了父亲风光的记忆，然而来这里担任助教的泰吉并不被对方认可，狐狸与猎犬的首脑皮普反而将泰吉戏弄了一通。泰吉来到自己负责的宿舍\\u2014\\u2014被戏称为马厩的败落小屋，这里住着四个边缘化的学生：研究量子物理和男女关系的盖辛，暴躁的爱尔兰人谢莫斯，沉默的宅男赛门以及不检点的女生赛迪。泰吉为了让这几位问题青年重新振作，自组鸡公牛社团向皮普的狐狸与猎犬之屋发起挑战，而皮普的女友查莉令泰吉一见钟情，于是一场关乎学生尊严和助教爱情的奋战拉开了序幕\\u2026\\u2026\",\"screen_date\":\"2006-12-01 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"卡尔·潘、Lauren Cohan、Daniel Percival、格伦·巴里\",\"staff\":\"导演：Mort Nathan\\n编剧：David Drew Gallagher\",\"length\":96,\"status\":2,\"attentions\":0},{\"title\":\"鬼片王之再现凶榜\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/aea638908e68c87aeac7a9f8d455820085d75e5a.jpg\",\"uri\":\"bilibili://video/3954640\",\"param\":\"3954640\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"暑假到了，寄宿学校只留下总监Miss郑（张文慈饰）和四个学生愤祥（雷宇扬饰）、小丑（黄小莺饰）、Nokia（袁伟豪饰）及123（施念慈饰）。自从校工福婶（彭丹饰）的孙女离奇死亡，被弃置於冰箱内；而且福婶的小狗被割去头颅，一名转校生Connie（陈思颖饰）来到，连串怪事陆续发生。调查此案的于Sir（王敏德饰）险遇交通意外。Connie养父（李兆基饰）得悉一切时，便告之他们Connie是魔鬼的女儿，众人不信，反责他妖言惑众。\",\"screen_date\":\"1999-11-18 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"王敏德、雷宇扬、张文慈\",\"staff\":\"导演：刘孝伟\\n编剧：张荣耀、刘孝伟\",\"length\":84,\"status\":2,\"attentions\":0},{\"title\":\"冒险王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/e7524e17d478db73bc8c63856ce2e26111c8a63e.jpg\",\"uri\":\"bilibili://video/5075431\",\"param\":\"5075431\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"电视剧编剧周世杰（李连杰）被妻子莫尼卡（关之琳）闹离婚，郁闷之下开始编写剧集《冒险王》的剧本，想象中他成了民国时代的冒险王卫亦信，莫妮卡变作日本特务美加子，藉此宣泄郁闷。\\n唐三藏当年西天取得、今下落不明的无字真经成为中国及日本政府争抢的目标，为免日本人捷足先登，中国政府邀请考古专家卫亦信及其徒弟包教晓（金城武）追查真经下落，得知线索在经盒表面，两人混入日本领事馆，结识身份神秘的美女美加子，后两人又追线索到某日报社，从编辑英叔（罗家英）口中知晓经盒下落，但消息亦被美加子得知。\",\"screen_date\":\"1996-02-10 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"李连杰、关之琳、金城武、杨采妮、罗家英\",\"staff\":\"导演：程小东\\n编剧：林伟伦、绍丽琼\",\"length\":90,\"status\":2,\"attentions\":0},{\"title\":\"王者之剑\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/a742b92832d66b0c123bd96ebddcf653273abb30.jpg\",\"uri\":\"bilibili://video/4046810\",\"param\":\"4046810\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"本片根据1932年罗伯特·霍华德的漫画《剑上的凤凰》改编而成，是《蛮王柯南》三部曲的第一部。\\n在地球蛮荒时期，一切以武力来解决争斗。远古大陆上，两支兵强马壮的部落军队正在进行厮杀，而其中有一位勇敢的战士率领自己的部落获得了战争的胜利，他就是蛮王柯南（杰森·莫玛 Jason Momoa 饰）。得胜归来的柯南受到了部落的爱戴，他诛杀可怕的怪物，为部落开拓疆土，但一场阴谋正在谋划当中\\u2026\\u2026\\n超自然的邪恶势力正意图侵蚀柯南的部落，它控制部落里的心腹，整个部落惨遭屠杀，连柯南的父亲科灵（朗·普尔曼 Ron Perlman 饰）也未能幸免。意外活下来的柯南，将穿越西伯利亚冰原寻找盟友的帮助，他身负血海深仇，将用最原始、最野蛮的方式，为自己的父亲和同族报仇\\u2026\\u2026\",\"screen_date\":\"2011-08-19 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"杰森·莫玛、朗·普尔曼、罗丝·麦高恩、史蒂芬·朗、瑞秋·尼科尔斯、萨伊德·塔格马奥\",\"staff\":\"导演： 马库斯·尼斯佩尔\\n编剧： 托马斯·迪恩·唐纳利、约书亚·奥本海默\",\"length\":108,\"status\":2,\"attentions\":0},{\"title\":\"查理的王国\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/00d06fbe4683b21f2ff3da08b392335f43e7de34.jpg\",\"uri\":\"bilibili://video/2651164\",\"param\":\"2651164\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"黑人查理感到手足无措。在他遥远的王国里，白人法律的干涉令他感到生活变得更加困难了。于是查理下定决定，要按照古老的方式生活，但是他这样的做法给他和周围的人带来了一系列意想不到的后果。\",\"screen_date\":\"2013-10-12 08:00:00\",\"area\":\"澳大利亚\",\"cover_mark\":\"免费观看\",\"actors\":\"大卫·古皮利、卢克·福特、博亚娜·诺瓦科维奇、加里·思韦特、Peter Djigirr、Bobby Bunungurr、Frances Djulibing、Jennifer Budukpuduk Gaykamangu、Peter Minygululu、Ritchie Singer、Garry Waddell、J.B. Williams\",\"staff\":\"导演：洛夫·德·希尔\\n编剧：洛夫·德·希尔、大卫·古皮利\",\"length\":107,\"status\":2,\"attentions\":0},{\"title\":\"拳王阿里\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/4634cd0ecc7c953ff751f5743ca0715847656df9.jpg\",\"uri\":\"bilibili://video/4241254\",\"param\":\"4241254\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"1964年，年轻的阿里（Will Smith 威尔\\u2022 史密斯 饰）凭着高超的拳术，坚韧的毅力战胜尼桑\\u2022里斯顿成为了新的拳王！时值越南战争期间，阿里拒绝服兵役，因为\\u201c越共没有管我叫黑鬼\\u201d。正因为阿里直率的性格，拒绝向自己认为错误的事屈服，阿里因此吃尽苦头：美国政府用尽方法企图将阿里投进监狱；拳击理事会剥夺了阿里拳王的金腰带，等等。\\n在1964至1974这社会动荡的10年里，阿里表现出的坚忍不拔的毅力和决不屈服的独立性不仅对他个人，对拳击界甚至对整个社会都产生了巨大的回响，阿里亦因此成为黑人运动和反越战运动的精神领袖。\\n最终在1974年，阿里凭着过人的毅力，以34岁的运动高龄，再次向拳王发出了挑战！\",\"screen_date\":\"2001-12-25 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"威尔·史密斯、杰米·福克斯、强·沃特、马里奥·范·皮布尔斯、罗恩·西维尔、杰弗里·怀特、贾达·萍克·史密斯、麦凯尔泰·威廉逊、诺娜·加耶、迈克尔·米歇尔\",\"staff\":\"导演： 迈克尔·曼\\n编剧： 史蒂芬·里维尔、Christopher Wilkinson、艾瑞克·罗斯、迈克尔·曼\",\"length\":157,\"status\":2,\"attentions\":0},{\"title\":\"河王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/5ea5e6a17f471b74059a39954b6d4220bb8c0bf5.jpg\",\"uri\":\"bilibili://video/3865817\",\"param\":\"3865817\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"Abel去调查当地一间\\u2018高档\\u2019学校里一个男孩的死亡事件, 他尸体在河上被发现。学校高层恐惧会引起丑闻，坚持这只是一宗普通的自杀案。但Abel从男孩的女友处得知,他常常被人家欺负, Abel 怀疑一个危险的学生入会仪式搞砸了，于是他秘密地请求一位有同情心的老师Betsy来帮忙。可Abel的上司警告他别再调查下去, 因为学校赞助警察慈善资金不少款项。Abel, 不能就此罢手, 不仅因为几年前他的兄弟自杀了, 而且男孩的鬼魂好像给他们留下了线索，解释当晚到底发生了什么事情。\",\"screen_date\":\"2005-10-21 08:00:00\",\"area\":\"英国,加拿大\",\"cover_mark\":\"免费观看\",\"actors\":\"Edward Burns、Jennifer Ehle\",\"staff\":\"导演： Nick Willing\\n编剧： 大卫·凯恩\",\"length\":99,\"status\":2,\"attentions\":0},{\"title\":\"地狱魔王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/e299bc902d0c281d1057160b7831229e63f50afe.jpg\",\"uri\":\"bilibili://video/8475188\",\"param\":\"8475188\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"一位考古学家不慎打开了一处封印，地狱魔王被放了出来。虽沉睡多年，但是地狱魔王仍在慢慢地积聚力量，现在他要开始统治整个世界的计划了。他首先在附近的小镇上制造了多起自杀事件。勇敢的记者凯尔（柯宾·伯恩森 饰）负责调查这案件，他发现了有关地狱魔王的可怕真相。现在他和几名幸存者要凭着仅有的几件武器把地狱魔王及其爪牙送回封印的地方。\\n这几乎是一个不可能完成的任务。但是整个世界的安危都系于他们身上！\",\"screen_date\":\"2011-01-01 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"柯宾·伯恩森、Raw Leiba、唐·詹尼斯\",\"staff\":\"导演：Robert Stock\\n编剧：Robert Stock\",\"length\":91,\"status\":2,\"attentions\":0},{\"title\":\"赌王千霸之胜者为王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/c69257f53de69076b000d88881629af96be3307b.jpg\",\"uri\":\"bilibili://video/5344012\",\"param\":\"5344012\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"阿浩与阿劲是一对共患难的好兄弟，兄弟二人为黑社会老大黑哥以赌为生。当阿劲的孩子出世后，他便不想过卖命赌钱的日子了，他想给妻子和儿子一个安定的家，平平安安地过日子。此时阿浩也遇到了自己心爱的姑娘阿莲，兄弟二人决心洗心革面，不再为他人卖命。谁知，他们的动机被黑哥的伙同龙哥看出，他们便不则手段对付阿劲和阿浩，想控制他们继续为其卖命。\",\"screen_date\":\"2001-01-01 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"孙国明、陈国邦\",\"staff\":\"导演：彭俊伟\\n编剧：蔡春燕\",\"length\":87,\"status\":2,\"attentions\":0},{\"title\":\"极速枪王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/fb09dfe1e388a6d79108fd618600d8ff35cd18b0.jpg\",\"uri\":\"bilibili://video/3954519\",\"param\":\"3954519\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"四少年枪王，誓破无情宿命。保方、碧咸、奥云破了\\u201c枪神\\u201d案后，在警队中被封为\\u201c破案三剑侠\\u201d。总督察黎SIR再次召集三人，参与一项保护内政要女儿阿雪来港参展的任务，三人起初不以为然，后来却发现，在阿雪的背后隐藏着重大阴谋\\u2026\\u2026\",\"screen_date\":\"2001-01-01 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"陈国邦、黎耀祥、罗兰、梁焯满\",\"staff\":\"导演：刘孝伟\\n编剧：刘孝伟\",\"length\":87,\"status\":2,\"attentions\":0},{\"title\":\"拳王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/fdff76bdc73e3ac7cacf4886064b56f2fb007985.jpg\",\"uri\":\"bilibili://video/5415163\",\"param\":\"5415163\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"沉默寡言的师兄阿明一向沉迷拳击，但他在一次胸有成竹的比赛中惨被击倒后，决心到泰国学艺，当地严格的训练不单改造拳手的体能，更能升拳手的尊严和擂台上无惧的精神。阿德自少随父学习国术，但有感中国武术在擂台不能尽展所长，故此便上拳馆苦练泰拳，企图扩阔搏击艺术的包容性和宽容度。\",\"screen_date\":\"1991-11-10 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"吕颂贤、林敬刚、杜少津、刘玉翠 \",\"staff\":\"导演：刘国昌\\n编剧：陈文强、冼锦青 \",\"length\":104,\"status\":2,\"attentions\":0},{\"title\":\"铁路之王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/9bb3703717f231e27ec2ac4b9ae415ab74879e64.jpg\",\"uri\":\"bilibili://video/3868079\",\"param\":\"3868079\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"一个不负责任的大学预科生Preston West被怀疑为了一笔可观的遗产杀害了他的父母。所以他逃跑试图寻找到真正的凶手：13号\\u201c幽灵\\u201d，一个疯狂的火车装卸游民。Preston开着货车，遇见了不怀好意的铁路工人，恶毒的铁路警察，隐藏的无业游民，神秘的女人，臭名昭著的Baron和他形形色色的游民帮。在一个出乎意料的结局中，他终于面对第13号\\u201c幽灵\\u201d。\",\"screen_date\":\"2005-01-01 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"Ernest Borgnine、W.M. Comartin、Bobb Hopkins | See full cast & crew \",\"staff\":\"导演： Bobb Hopkins\\n编剧： Bobb Hopkins\",\"length\":92,\"status\":2,\"attentions\":0},{\"title\":\"城市王子\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/a7ab0215f76261a6ae96939eeac6da92011a219f.jpg\",\"uri\":\"bilibili://video/8475181\",\"param\":\"8475181\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"王子拉，他的养子马来西亚的亿万富翁jaggoi锡布延，更使他比纯种的儿子太子锡布延是家庭的骄傲。当Dana公...\",\"screen_date\":\"2012-01-01 08:00:00\",\"area\":\"马来西亚\",\"cover_mark\":\"免费观看\",\"actors\":\"Julian Cheah、迈克尔·马德森\",\"staff\":\"导演：Roslan Hussin \\n编剧：Roslan Hussin \",\"length\":83,\"status\":2,\"attentions\":0},{\"title\":\"胡桃夹子：魔境冒险\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/4d77bf510f295c3ad54e39246ab7ad53b9056111.jpg\",\"uri\":\"bilibili://video/3954607\",\"param\":\"3954607\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"九岁的小女孩玛丽（艾丽·范宁 Elle Fanning 饰）拥有锦衣玉食的生活，却缺乏父母的陪伴。圣诞节前夜，玛丽收到了叔叔送来的一份珍贵礼物\\u2014\\u2014一个装木偶的小房子和一只胡桃夹子。喜出望外的玛丽将胡桃夹子视作自己的知心伙伴，竟意外地发现它会说话，并声称自己名叫NC（查理·罗 Charlie Rowe 饰），是玩具王国的王子，然而在一场噩梦中，美好的王国被凶残的鼠王（约翰·特托罗 John Turturro 饰）占领了，他还将王子变成一只木偶永远驱逐出境，只有找到真正相信童话的人才能解除咒语。在雪仙子（朱莉娅·维斯托斯卡亚 Yuliya Vysotskaya 饰）的指引下，玛丽帮NC恢复了肉身，并勇敢地答应与他一起回王国打败鼠王，解放子民。然而，这两个毫无武力只有一颗纯真之心的孩子，能否对抗整支血腥残暴的老鼠大军和卑鄙狡猾的鼠王呢？\\n片中歌曲多数改编自柴可夫斯基的交响乐，其中一部分来自芭蕾舞剧《胡桃夹子》。\",\"screen_date\":\"2010-11-24 08:00:00\",\"area\":\"英国\",\"cover_mark\":\"免费观看\",\"actors\":\"艾丽·范宁、内森·连恩、约翰·特托罗、查理·罗、弗朗西斯·德·拉·图瓦\",\"staff\":\"导演：安德烈·康查洛夫斯基\\n编剧：安德烈·康查洛夫斯基、Chris Solimine\",\"length\":108,\"status\":2,\"attentions\":0},{\"title\":\"冰球坏小子\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/2565d1fbcbab86a5aab19bc6c15d55140380dfa8.jpg\",\"uri\":\"bilibili://video/3034374\",\"param\":\"3034374\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"酒吧保安道格·格拉特（西恩·威廉·斯科特 Seann William Scott 饰）体格强壮，行事略有呆气，在一次观看冰球比赛时将不满观众嘘声的球员痛揍，他的壮举经好友拍摄公布后引起大众注意，阴差阳错加入当地一支冰球队从头学起，充当队中暴徒角色。一场场血战为道格赢来了知名度，在教练的请托和引荐下，道格进入职业小联盟的刺客队，刺客队中有因为受伤而产生心理阴影的昔日王牌球员泽维尔，而道格的任务，即是保证泽维尔等队友在场上的安全。道格在比赛之外结识了热爱冰球的姑娘伊娃（艾丽森·皮尔 Alison Pill 饰），他向姑娘笨拙的表达着自己的爱慕。另一方面，王牌冰场打手罗斯在前方等待着道格的挑战\\u2026\\u2026\",\"screen_date\":\"2011-09-10 08:00:00\",\"area\":\"美国,加拿大\",\"cover_mark\":\"免费观看\",\"actors\":\"西恩·威廉·斯科特、杰伊·巴鲁切尔、马克-安德烈·格隆丁、金·寇兹、艾丽森·皮尔、列维·施瑞博尔、里基·马比\",\"staff\":\"导演：迈克尔·道斯\\n编剧：杰伊·巴鲁切尔、埃文·戈德堡\",\"length\":91,\"status\":2,\"attentions\":0},{\"title\":\"本X\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/a2902b973fd05bf3bd8ae393dd048351f795c3e6.jpg\",\"uri\":\"bilibili://video/8764697\",\"param\":\"8764697\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"本X是本（格雷格·提姆曼斯 Greg Timmermans 饰）在游戏《霸王》里的名字，游戏里他技压群雄、所向披靡。然而现实中的本却是一个患有自闭症的少年，沉默寡言的他在同学们眼中犹如异类并且受尽那帮同学的欺负和侮辱。本时常幻想着自己就是游戏里面的勇士，可是现实的残酷却将一切幻想纷纷击碎。本游走于现实和游戏的之间，两者的界限逐渐模糊起来。本在游戏中结识一个叫斯嘉莱（劳拉·沃林登 Laura Verlinden 饰）的女孩，女孩用她的真诚和勇气鼓舞着本重拾自我，最终在本的臆想中女孩陪伴他走上了一条\\u201c置之死地而后生\\u201d的道路\\u2026\\u2026\\n在2007年的第31届蒙特利尔电影节上，本片获得了美洲大奖以及评审团和观众的最高奖。\",\"screen_date\":\"2007-09-26 08:00:00\",\"area\":\"比利时,荷兰\",\"cover_mark\":\"免费观看\",\"actors\":\"格雷格·提姆曼斯、Laura Verlinden、Pol Goossen\",\"staff\":\"导演：尼克·巴斯阿扎\\n编剧：尼克·巴斯阿扎\",\"length\":93,\"status\":2,\"attentions\":0},{\"title\":\"一个赌波的传说\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/5ef1ad0c73a86ede8ad65a7d0f5449276181aea9.jpg\",\"uri\":\"bilibili://video/4120650\",\"param\":\"4120650\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"讲波佬钟仔将细鬼因贪念而死在母亲兰寿宴上的故事告诉英超酒吧内各酒客，以警惕他们不要沉迷赌博。可是每天还是有人向他索取，令他极为反感，一次更因不胜其烦乱中押中了一只必败球队，从此被人奉为波神.英超老板车仔因生意不佳而兼职替赌球杂志波经写文章,由于过分投入，其妻波波提出离婚。对足球一窍不通的榕榕，乐乐和芳芳都来凑热闹，不料意外大获全胜。\",\"screen_date\":\"2003-03-12 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"王喜\",\"staff\":\"导演： 刘孝伟\\n编剧： 吴奕龙、岑智敏\",\"length\":93,\"status\":2,\"attentions\":0},{\"title\":\"搏击之霸\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/db33a6a2ba7614ed95f65981a5406e7db7a74070.jpg\",\"uri\":\"bilibili://video/3934652\",\"param\":\"3934652\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"罗伟辰又称\\u201c拳神\\u201d，是泰国华侨，他以快速的拳脚闻名于泰国街头。他已经将拳击看作一种艺术，他听说香港拳术天才成志退出拳击界，并隐居国内，拳神便决定找成志切磋。在国内拳神碰上贪杯的小芬，小芬带他到酒吧，老板洪强的弟弟洪力欺凌酒客，小芬利用拳神为酒客解围。成志常常喝酒麻痹自己，洪力迫成志对付拳神抵偿欠债，并暗设拳击赌赛图利，小芬破坏洪力计划，令洪力损失惨重，拳神向成志讨教，成志不肯，原因是他在拳赛中曾误杀对手，芬妈引发成志出手，成志终于明白，练武已经是赋予拳术生命，拳术已成为自己的生命的一部分，挥不走，甩不掉，洪力绑架小芬又破坏芬妈货仓，拳神被电单车队埋伏，险象环生，成志相助，众人逃生，洪强却找来几个武术高手埋伏，疲惫的拳神，成志只好施展混身解数对敌\\u2026\\u2026\",\"screen_date\":\"2005-01-01 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"陈治良、林泉、桑伟淋、徐宝华、赵毅\",\"staff\":\"导演：夏占士\\n编剧：廖志强\",\"length\":85,\"status\":2,\"attentions\":0},{\"title\":\"故事王StoryMan\",\"cover\":\"https://i0.hdslb.com/bfs/active/9c1ec29c8bb40755bbabf3fcb92675de00765ef6.jpg\",\"uri\":\"bilibili://splist/71977\",\"param\":\"71977\",\"goto\":\"sp\",\"started\":0,\"total_count\":0,\"desc\":\"每一场比赛，参赛选手都将利用随机发放的比赛卡牌，讲出一段或搞笑或动人或悬疑的剧情，而评委们则根据选手们的临场表现进行打分，最终在残酷激烈的淘汰赛后选出能够拯救故事王国的最强故事王。\\r\\n\",\"status\":0,\"attentions\":0}]}\n     * message :\n     * ttl : 1\n     */\n\n\n    data class DataBean(var trackid: String,\n                        var pages: Int,\n                        var items: List<ItemsBean>) {\n        /**\n         * trackid : 5366355170602595779\n         * pages : 6\n         * items : [{\"title\":\"女王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\",\"uri\":\"bilibili://video/4605417\",\"param\":\"4605417\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦\\u2022米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼\\u2022布莱尔（麦克\\u2022辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\",\"screen_date\":\"2006-09-15 08:00:00\",\"area\":\"法国,英国,意大利\",\"cover_mark\":\"免费观看\",\"actors\":\"海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\",\"staff\":\"导演：斯蒂芬·弗雷斯\\n编剧：皮特·摩根\",\"length\":103,\"status\":2,\"attentions\":0},{\"title\":\"留级之王2\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6951d420873bc41084b33b280139d223bbcdca42.jpg\",\"uri\":\"bilibili://video/3034493\",\"param\":\"3034493\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"泰吉\\u2022巴德兰德巴德（卡尔\\u2022潘 Kal Penn 饰）带着范\\u2022维尔德的精神和大学学位，远赴英国加尔福德大学\\u2014\\u2014这里是他父亲曾经\\u201c战斗\\u201d过的地方，兄弟会\\u201c狐狸与猎犬\\u201d之屋留下了父亲风光的记忆，然而来这里担任助教的泰吉并不被对方认可，狐狸与猎犬的首脑皮普反而将泰吉戏弄了一通。泰吉来到自己负责的宿舍\\u2014\\u2014被戏称为马厩的败落小屋，这里住着四个边缘化的学生：研究量子物理和男女关系的盖辛，暴躁的爱尔兰人谢莫斯，沉默的宅男赛门以及不检点的女生赛迪。泰吉为了让这几位问题青年重新振作，自组鸡公牛社团向皮普的狐狸与猎犬之屋发起挑战，而皮普的女友查莉令泰吉一见钟情，于是一场关乎学生尊严和助教爱情的奋战拉开了序幕\\u2026\\u2026\",\"screen_date\":\"2006-12-01 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"卡尔·潘、Lauren Cohan、Daniel Percival、格伦·巴里\",\"staff\":\"导演：Mort Nathan\\n编剧：David Drew Gallagher\",\"length\":96,\"status\":2,\"attentions\":0},{\"title\":\"鬼片王之再现凶榜\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/aea638908e68c87aeac7a9f8d455820085d75e5a.jpg\",\"uri\":\"bilibili://video/3954640\",\"param\":\"3954640\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"暑假到了，寄宿学校只留下总监Miss郑（张文慈饰）和四个学生愤祥（雷宇扬饰）、小丑（黄小莺饰）、Nokia（袁伟豪饰）及123（施念慈饰）。自从校工福婶（彭丹饰）的孙女离奇死亡，被弃置於冰箱内；而且福婶的小狗被割去头颅，一名转校生Connie（陈思颖饰）来到，连串怪事陆续发生。调查此案的于Sir（王敏德饰）险遇交通意外。Connie养父（李兆基饰）得悉一切时，便告之他们Connie是魔鬼的女儿，众人不信，反责他妖言惑众。\",\"screen_date\":\"1999-11-18 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"王敏德、雷宇扬、张文慈\",\"staff\":\"导演：刘孝伟\\n编剧：张荣耀、刘孝伟\",\"length\":84,\"status\":2,\"attentions\":0},{\"title\":\"冒险王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/e7524e17d478db73bc8c63856ce2e26111c8a63e.jpg\",\"uri\":\"bilibili://video/5075431\",\"param\":\"5075431\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"电视剧编剧周世杰（李连杰）被妻子莫尼卡（关之琳）闹离婚，郁闷之下开始编写剧集《冒险王》的剧本，想象中他成了民国时代的冒险王卫亦信，莫妮卡变作日本特务美加子，藉此宣泄郁闷。\\n唐三藏当年西天取得、今下落不明的无字真经成为中国及日本政府争抢的目标，为免日本人捷足先登，中国政府邀请考古专家卫亦信及其徒弟包教晓（金城武）追查真经下落，得知线索在经盒表面，两人混入日本领事馆，结识身份神秘的美女美加子，后两人又追线索到某日报社，从编辑英叔（罗家英）口中知晓经盒下落，但消息亦被美加子得知。\",\"screen_date\":\"1996-02-10 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"李连杰、关之琳、金城武、杨采妮、罗家英\",\"staff\":\"导演：程小东\\n编剧：林伟伦、绍丽琼\",\"length\":90,\"status\":2,\"attentions\":0},{\"title\":\"王者之剑\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/a742b92832d66b0c123bd96ebddcf653273abb30.jpg\",\"uri\":\"bilibili://video/4046810\",\"param\":\"4046810\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"本片根据1932年罗伯特·霍华德的漫画《剑上的凤凰》改编而成，是《蛮王柯南》三部曲的第一部。\\n在地球蛮荒时期，一切以武力来解决争斗。远古大陆上，两支兵强马壮的部落军队正在进行厮杀，而其中有一位勇敢的战士率领自己的部落获得了战争的胜利，他就是蛮王柯南（杰森·莫玛 Jason Momoa 饰）。得胜归来的柯南受到了部落的爱戴，他诛杀可怕的怪物，为部落开拓疆土，但一场阴谋正在谋划当中\\u2026\\u2026\\n超自然的邪恶势力正意图侵蚀柯南的部落，它控制部落里的心腹，整个部落惨遭屠杀，连柯南的父亲科灵（朗·普尔曼 Ron Perlman 饰）也未能幸免。意外活下来的柯南，将穿越西伯利亚冰原寻找盟友的帮助，他身负血海深仇，将用最原始、最野蛮的方式，为自己的父亲和同族报仇\\u2026\\u2026\",\"screen_date\":\"2011-08-19 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"杰森·莫玛、朗·普尔曼、罗丝·麦高恩、史蒂芬·朗、瑞秋·尼科尔斯、萨伊德·塔格马奥\",\"staff\":\"导演： 马库斯·尼斯佩尔\\n编剧： 托马斯·迪恩·唐纳利、约书亚·奥本海默\",\"length\":108,\"status\":2,\"attentions\":0},{\"title\":\"查理的王国\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/00d06fbe4683b21f2ff3da08b392335f43e7de34.jpg\",\"uri\":\"bilibili://video/2651164\",\"param\":\"2651164\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"黑人查理感到手足无措。在他遥远的王国里，白人法律的干涉令他感到生活变得更加困难了。于是查理下定决定，要按照古老的方式生活，但是他这样的做法给他和周围的人带来了一系列意想不到的后果。\",\"screen_date\":\"2013-10-12 08:00:00\",\"area\":\"澳大利亚\",\"cover_mark\":\"免费观看\",\"actors\":\"大卫·古皮利、卢克·福特、博亚娜·诺瓦科维奇、加里·思韦特、Peter Djigirr、Bobby Bunungurr、Frances Djulibing、Jennifer Budukpuduk Gaykamangu、Peter Minygululu、Ritchie Singer、Garry Waddell、J.B. Williams\",\"staff\":\"导演：洛夫·德·希尔\\n编剧：洛夫·德·希尔、大卫·古皮利\",\"length\":107,\"status\":2,\"attentions\":0},{\"title\":\"拳王阿里\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/4634cd0ecc7c953ff751f5743ca0715847656df9.jpg\",\"uri\":\"bilibili://video/4241254\",\"param\":\"4241254\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"1964年，年轻的阿里（Will Smith 威尔\\u2022 史密斯 饰）凭着高超的拳术，坚韧的毅力战胜尼桑\\u2022里斯顿成为了新的拳王！时值越南战争期间，阿里拒绝服兵役，因为\\u201c越共没有管我叫黑鬼\\u201d。正因为阿里直率的性格，拒绝向自己认为错误的事屈服，阿里因此吃尽苦头：美国政府用尽方法企图将阿里投进监狱；拳击理事会剥夺了阿里拳王的金腰带，等等。\\n在1964至1974这社会动荡的10年里，阿里表现出的坚忍不拔的毅力和决不屈服的独立性不仅对他个人，对拳击界甚至对整个社会都产生了巨大的回响，阿里亦因此成为黑人运动和反越战运动的精神领袖。\\n最终在1974年，阿里凭着过人的毅力，以34岁的运动高龄，再次向拳王发出了挑战！\",\"screen_date\":\"2001-12-25 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"威尔·史密斯、杰米·福克斯、强·沃特、马里奥·范·皮布尔斯、罗恩·西维尔、杰弗里·怀特、贾达·萍克·史密斯、麦凯尔泰·威廉逊、诺娜·加耶、迈克尔·米歇尔\",\"staff\":\"导演： 迈克尔·曼\\n编剧： 史蒂芬·里维尔、Christopher Wilkinson、艾瑞克·罗斯、迈克尔·曼\",\"length\":157,\"status\":2,\"attentions\":0},{\"title\":\"河王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/5ea5e6a17f471b74059a39954b6d4220bb8c0bf5.jpg\",\"uri\":\"bilibili://video/3865817\",\"param\":\"3865817\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"Abel去调查当地一间\\u2018高档\\u2019学校里一个男孩的死亡事件, 他尸体在河上被发现。学校高层恐惧会引起丑闻，坚持这只是一宗普通的自杀案。但Abel从男孩的女友处得知,他常常被人家欺负, Abel 怀疑一个危险的学生入会仪式搞砸了，于是他秘密地请求一位有同情心的老师Betsy来帮忙。可Abel的上司警告他别再调查下去, 因为学校赞助警察慈善资金不少款项。Abel, 不能就此罢手, 不仅因为几年前他的兄弟自杀了, 而且男孩的鬼魂好像给他们留下了线索，解释当晚到底发生了什么事情。\",\"screen_date\":\"2005-10-21 08:00:00\",\"area\":\"英国,加拿大\",\"cover_mark\":\"免费观看\",\"actors\":\"Edward Burns、Jennifer Ehle\",\"staff\":\"导演： Nick Willing\\n编剧： 大卫·凯恩\",\"length\":99,\"status\":2,\"attentions\":0},{\"title\":\"地狱魔王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/e299bc902d0c281d1057160b7831229e63f50afe.jpg\",\"uri\":\"bilibili://video/8475188\",\"param\":\"8475188\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"一位考古学家不慎打开了一处封印，地狱魔王被放了出来。虽沉睡多年，但是地狱魔王仍在慢慢地积聚力量，现在他要开始统治整个世界的计划了。他首先在附近的小镇上制造了多起自杀事件。勇敢的记者凯尔（柯宾·伯恩森 饰）负责调查这案件，他发现了有关地狱魔王的可怕真相。现在他和几名幸存者要凭着仅有的几件武器把地狱魔王及其爪牙送回封印的地方。\\n这几乎是一个不可能完成的任务。但是整个世界的安危都系于他们身上！\",\"screen_date\":\"2011-01-01 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"柯宾·伯恩森、Raw Leiba、唐·詹尼斯\",\"staff\":\"导演：Robert Stock\\n编剧：Robert Stock\",\"length\":91,\"status\":2,\"attentions\":0},{\"title\":\"赌王千霸之胜者为王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/c69257f53de69076b000d88881629af96be3307b.jpg\",\"uri\":\"bilibili://video/5344012\",\"param\":\"5344012\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"阿浩与阿劲是一对共患难的好兄弟，兄弟二人为黑社会老大黑哥以赌为生。当阿劲的孩子出世后，他便不想过卖命赌钱的日子了，他想给妻子和儿子一个安定的家，平平安安地过日子。此时阿浩也遇到了自己心爱的姑娘阿莲，兄弟二人决心洗心革面，不再为他人卖命。谁知，他们的动机被黑哥的伙同龙哥看出，他们便不则手段对付阿劲和阿浩，想控制他们继续为其卖命。\",\"screen_date\":\"2001-01-01 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"孙国明、陈国邦\",\"staff\":\"导演：彭俊伟\\n编剧：蔡春燕\",\"length\":87,\"status\":2,\"attentions\":0},{\"title\":\"极速枪王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/fb09dfe1e388a6d79108fd618600d8ff35cd18b0.jpg\",\"uri\":\"bilibili://video/3954519\",\"param\":\"3954519\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"四少年枪王，誓破无情宿命。保方、碧咸、奥云破了\\u201c枪神\\u201d案后，在警队中被封为\\u201c破案三剑侠\\u201d。总督察黎SIR再次召集三人，参与一项保护内政要女儿阿雪来港参展的任务，三人起初不以为然，后来却发现，在阿雪的背后隐藏着重大阴谋\\u2026\\u2026\",\"screen_date\":\"2001-01-01 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"陈国邦、黎耀祥、罗兰、梁焯满\",\"staff\":\"导演：刘孝伟\\n编剧：刘孝伟\",\"length\":87,\"status\":2,\"attentions\":0},{\"title\":\"拳王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/fdff76bdc73e3ac7cacf4886064b56f2fb007985.jpg\",\"uri\":\"bilibili://video/5415163\",\"param\":\"5415163\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"沉默寡言的师兄阿明一向沉迷拳击，但他在一次胸有成竹的比赛中惨被击倒后，决心到泰国学艺，当地严格的训练不单改造拳手的体能，更能升拳手的尊严和擂台上无惧的精神。阿德自少随父学习国术，但有感中国武术在擂台不能尽展所长，故此便上拳馆苦练泰拳，企图扩阔搏击艺术的包容性和宽容度。\",\"screen_date\":\"1991-11-10 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"吕颂贤、林敬刚、杜少津、刘玉翠 \",\"staff\":\"导演：刘国昌\\n编剧：陈文强、冼锦青 \",\"length\":104,\"status\":2,\"attentions\":0},{\"title\":\"铁路之王\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/9bb3703717f231e27ec2ac4b9ae415ab74879e64.jpg\",\"uri\":\"bilibili://video/3868079\",\"param\":\"3868079\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"一个不负责任的大学预科生Preston West被怀疑为了一笔可观的遗产杀害了他的父母。所以他逃跑试图寻找到真正的凶手：13号\\u201c幽灵\\u201d，一个疯狂的火车装卸游民。Preston开着货车，遇见了不怀好意的铁路工人，恶毒的铁路警察，隐藏的无业游民，神秘的女人，臭名昭著的Baron和他形形色色的游民帮。在一个出乎意料的结局中，他终于面对第13号\\u201c幽灵\\u201d。\",\"screen_date\":\"2005-01-01 08:00:00\",\"area\":\"美国\",\"cover_mark\":\"免费观看\",\"actors\":\"Ernest Borgnine、W.M. Comartin、Bobb Hopkins | See full cast & crew \",\"staff\":\"导演： Bobb Hopkins\\n编剧： Bobb Hopkins\",\"length\":92,\"status\":2,\"attentions\":0},{\"title\":\"城市王子\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/a7ab0215f76261a6ae96939eeac6da92011a219f.jpg\",\"uri\":\"bilibili://video/8475181\",\"param\":\"8475181\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"王子拉，他的养子马来西亚的亿万富翁jaggoi锡布延，更使他比纯种的儿子太子锡布延是家庭的骄傲。当Dana公...\",\"screen_date\":\"2012-01-01 08:00:00\",\"area\":\"马来西亚\",\"cover_mark\":\"免费观看\",\"actors\":\"Julian Cheah、迈克尔·马德森\",\"staff\":\"导演：Roslan Hussin \\n编剧：Roslan Hussin \",\"length\":83,\"status\":2,\"attentions\":0},{\"title\":\"胡桃夹子：魔境冒险\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/4d77bf510f295c3ad54e39246ab7ad53b9056111.jpg\",\"uri\":\"bilibili://video/3954607\",\"param\":\"3954607\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"九岁的小女孩玛丽（艾丽·范宁 Elle Fanning 饰）拥有锦衣玉食的生活，却缺乏父母的陪伴。圣诞节前夜，玛丽收到了叔叔送来的一份珍贵礼物\\u2014\\u2014一个装木偶的小房子和一只胡桃夹子。喜出望外的玛丽将胡桃夹子视作自己的知心伙伴，竟意外地发现它会说话，并声称自己名叫NC（查理·罗 Charlie Rowe 饰），是玩具王国的王子，然而在一场噩梦中，美好的王国被凶残的鼠王（约翰·特托罗 John Turturro 饰）占领了，他还将王子变成一只木偶永远驱逐出境，只有找到真正相信童话的人才能解除咒语。在雪仙子（朱莉娅·维斯托斯卡亚 Yuliya Vysotskaya 饰）的指引下，玛丽帮NC恢复了肉身，并勇敢地答应与他一起回王国打败鼠王，解放子民。然而，这两个毫无武力只有一颗纯真之心的孩子，能否对抗整支血腥残暴的老鼠大军和卑鄙狡猾的鼠王呢？\\n片中歌曲多数改编自柴可夫斯基的交响乐，其中一部分来自芭蕾舞剧《胡桃夹子》。\",\"screen_date\":\"2010-11-24 08:00:00\",\"area\":\"英国\",\"cover_mark\":\"免费观看\",\"actors\":\"艾丽·范宁、内森·连恩、约翰·特托罗、查理·罗、弗朗西斯·德·拉·图瓦\",\"staff\":\"导演：安德烈·康查洛夫斯基\\n编剧：安德烈·康查洛夫斯基、Chris Solimine\",\"length\":108,\"status\":2,\"attentions\":0},{\"title\":\"冰球坏小子\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/2565d1fbcbab86a5aab19bc6c15d55140380dfa8.jpg\",\"uri\":\"bilibili://video/3034374\",\"param\":\"3034374\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"酒吧保安道格·格拉特（西恩·威廉·斯科特 Seann William Scott 饰）体格强壮，行事略有呆气，在一次观看冰球比赛时将不满观众嘘声的球员痛揍，他的壮举经好友拍摄公布后引起大众注意，阴差阳错加入当地一支冰球队从头学起，充当队中暴徒角色。一场场血战为道格赢来了知名度，在教练的请托和引荐下，道格进入职业小联盟的刺客队，刺客队中有因为受伤而产生心理阴影的昔日王牌球员泽维尔，而道格的任务，即是保证泽维尔等队友在场上的安全。道格在比赛之外结识了热爱冰球的姑娘伊娃（艾丽森·皮尔 Alison Pill 饰），他向姑娘笨拙的表达着自己的爱慕。另一方面，王牌冰场打手罗斯在前方等待着道格的挑战\\u2026\\u2026\",\"screen_date\":\"2011-09-10 08:00:00\",\"area\":\"美国,加拿大\",\"cover_mark\":\"免费观看\",\"actors\":\"西恩·威廉·斯科特、杰伊·巴鲁切尔、马克-安德烈·格隆丁、金·寇兹、艾丽森·皮尔、列维·施瑞博尔、里基·马比\",\"staff\":\"导演：迈克尔·道斯\\n编剧：杰伊·巴鲁切尔、埃文·戈德堡\",\"length\":91,\"status\":2,\"attentions\":0},{\"title\":\"本X\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/a2902b973fd05bf3bd8ae393dd048351f795c3e6.jpg\",\"uri\":\"bilibili://video/8764697\",\"param\":\"8764697\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"本X是本（格雷格·提姆曼斯 Greg Timmermans 饰）在游戏《霸王》里的名字，游戏里他技压群雄、所向披靡。然而现实中的本却是一个患有自闭症的少年，沉默寡言的他在同学们眼中犹如异类并且受尽那帮同学的欺负和侮辱。本时常幻想着自己就是游戏里面的勇士，可是现实的残酷却将一切幻想纷纷击碎。本游走于现实和游戏的之间，两者的界限逐渐模糊起来。本在游戏中结识一个叫斯嘉莱（劳拉·沃林登 Laura Verlinden 饰）的女孩，女孩用她的真诚和勇气鼓舞着本重拾自我，最终在本的臆想中女孩陪伴他走上了一条\\u201c置之死地而后生\\u201d的道路\\u2026\\u2026\\n在2007年的第31届蒙特利尔电影节上，本片获得了美洲大奖以及评审团和观众的最高奖。\",\"screen_date\":\"2007-09-26 08:00:00\",\"area\":\"比利时,荷兰\",\"cover_mark\":\"免费观看\",\"actors\":\"格雷格·提姆曼斯、Laura Verlinden、Pol Goossen\",\"staff\":\"导演：尼克·巴斯阿扎\\n编剧：尼克·巴斯阿扎\",\"length\":93,\"status\":2,\"attentions\":0},{\"title\":\"一个赌波的传说\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/5ef1ad0c73a86ede8ad65a7d0f5449276181aea9.jpg\",\"uri\":\"bilibili://video/4120650\",\"param\":\"4120650\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"讲波佬钟仔将细鬼因贪念而死在母亲兰寿宴上的故事告诉英超酒吧内各酒客，以警惕他们不要沉迷赌博。可是每天还是有人向他索取，令他极为反感，一次更因不胜其烦乱中押中了一只必败球队，从此被人奉为波神.英超老板车仔因生意不佳而兼职替赌球杂志波经写文章,由于过分投入，其妻波波提出离婚。对足球一窍不通的榕榕，乐乐和芳芳都来凑热闹，不料意外大获全胜。\",\"screen_date\":\"2003-03-12 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"王喜\",\"staff\":\"导演： 刘孝伟\\n编剧： 吴奕龙、岑智敏\",\"length\":93,\"status\":2,\"attentions\":0},{\"title\":\"搏击之霸\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/db33a6a2ba7614ed95f65981a5406e7db7a74070.jpg\",\"uri\":\"bilibili://video/3934652\",\"param\":\"3934652\",\"goto\":\"av\",\"started\":0,\"total_count\":0,\"desc\":\"罗伟辰又称\\u201c拳神\\u201d，是泰国华侨，他以快速的拳脚闻名于泰国街头。他已经将拳击看作一种艺术，他听说香港拳术天才成志退出拳击界，并隐居国内，拳神便决定找成志切磋。在国内拳神碰上贪杯的小芬，小芬带他到酒吧，老板洪强的弟弟洪力欺凌酒客，小芬利用拳神为酒客解围。成志常常喝酒麻痹自己，洪力迫成志对付拳神抵偿欠债，并暗设拳击赌赛图利，小芬破坏洪力计划，令洪力损失惨重，拳神向成志讨教，成志不肯，原因是他在拳赛中曾误杀对手，芬妈引发成志出手，成志终于明白，练武已经是赋予拳术生命，拳术已成为自己的生命的一部分，挥不走，甩不掉，洪力绑架小芬又破坏芬妈货仓，拳神被电单车队埋伏，险象环生，成志相助，众人逃生，洪强却找来几个武术高手埋伏，疲惫的拳神，成志只好施展混身解数对敌\\u2026\\u2026\",\"screen_date\":\"2005-01-01 08:00:00\",\"area\":\"中国香港\",\"cover_mark\":\"免费观看\",\"actors\":\"陈治良、林泉、桑伟淋、徐宝华、赵毅\",\"staff\":\"导演：夏占士\\n编剧：廖志强\",\"length\":85,\"status\":2,\"attentions\":0},{\"title\":\"故事王StoryMan\",\"cover\":\"https://i0.hdslb.com/bfs/active/9c1ec29c8bb40755bbabf3fcb92675de00765ef6.jpg\",\"uri\":\"bilibili://splist/71977\",\"param\":\"71977\",\"goto\":\"sp\",\"started\":0,\"total_count\":0,\"desc\":\"每一场比赛，参赛选手都将利用随机发放的比赛卡牌，讲出一段或搞笑或动人或悬疑的剧情，而评委们则根据选手们的临场表现进行打分，最终在残酷激烈的淘汰赛后选出能够拯救故事王国的最强故事王。\\r\\n\",\"status\":0,\"attentions\":0}]\n         */\n\n\n        data class ItemsBean(var title: String,\n                             var cover: String,\n                             var uri: String,\n                             var param: String,\n                             var goto: String,\n                             var started: Int,\n                             var total_count: Int,\n                             var desc: String,\n                             var screen_date: String,\n                             var area: String,\n                             var cover_mark: String,\n                             var actors: String,\n                             var staff: String,\n                             var length: Int,\n                             var status: Int,\n                             var attentions: Int) {\n            /**\n             * title : 女王\n             * cover : https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\n             * uri : bilibili://video/4605417\n             * param : 4605417\n             * goto : av\n             * started : 0\n             * total_count : 0\n             * desc : 1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦•米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼•布莱尔（麦克•辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\n             * screen_date : 2006-09-15 08:00:00\n             * area : 法国,英国,意大利\n             * cover_mark : 免费观看\n             * actors : 海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\n             * staff : 导演：斯蒂芬·弗雷斯\n             * 编剧：皮特·摩根\n             * length : 103\n             * status : 2\n             * attentions : 0\n             */\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/search/MulSearchArchive.kt",
    "content": "package com.yoyiyi.soleil.bean.search\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/18 15:06\n * * 描述:\n */\n\nclass MulSearchArchive(\n        var itemTypez: Int = 0,\n        var seasonCount: Int = 0,\n        var movieCount: Int = 0,\n        var archive: Search.DataBean.ItemsBean.ArchiveBean? = null,\n        var movie: Search.DataBean.ItemsBean.MovieBean? = null,\n        var season: Search.DataBean.ItemsBean.SeasonBean? = null\n) : MultiItemEntity {\n\n\n\n    override fun getItemType(): Int= itemTypez\n\n\n    companion object {\n        val TYPE_SEASON = 1\n        val TYPE_SEASON_MORE = 2\n        val TYPE_MOVIE = 3\n        val TYPE_MOVIE_MORE = 4\n        val TYPE_ARCHIVE = 5\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/search/Search.kt",
    "content": "package com.yoyiyi.soleil.bean.search\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/18 13:48\n * * 描述:\n */\n\ndata class Search(var code: Int,\n                  var data: DataBean,\n                  var message: String,\n                  var ttl: Int) {\n\n    /**\n     * code : 0\n     * data : {\"items\":{\"archive\":[{\"attentions\":0,\"author\":\"Xiao番茄丶\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0258e7dfbbfd767e42b5063c69450bfc91fe02ba.jpg\",\"danmaku\":24,\"desc\":\"http://www.budejie.com/pc/25385657.html 怎么没有蓝火？\",\"duration\":\"0:8\",\"goto\":\"av\",\"param\":\"11345283\",\"play\":39302,\"started\":0,\"status\":0,\"title\":\"社会王：我爱你，哪怕是你不经意的一句玩笑，我也跑遍世界找给你（你要的加特林）\",\"total_count\":0,\"uri\":\"bilibili://video/11345283\"},{\"attentions\":0,\"author\":\"冬日蜀黍\",\"cover\":\"https://i0.hdslb.com/bfs/archive/6f785f0e87c4870a3dcd904bfc38eb3644702b0e.jpg\",\"danmaku\":1613,\"desc\":\"一个大坑终于要完结了。  游戏名：以罪之名。\",\"duration\":\"41:51\",\"goto\":\"av\",\"param\":\"11400445\",\"play\":9073,\"started\":0,\"status\":0,\"title\":\"【悬疑剧场】最终回！国王游戏！！\",\"total_count\":0,\"uri\":\"bilibili://video/11400445\"},{\"attentions\":0,\"author\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/01c7b8abe1f1b8107006108d11e24724a54aae60.jpg\",\"danmaku\":9006,\"desc\":\"感觉尾巴肥肥肉肉好好吃\",\"duration\":\"62:32\",\"goto\":\"av\",\"param\":\"11370914\",\"play\":304223,\"started\":0,\"status\":0,\"title\":\"【王老菊】肉鸽之魂，神奇的天路~10\",\"total_count\":0,\"uri\":\"bilibili://video/11370914\"},{\"attentions\":0,\"author\":\"泽野螳螂\",\"cover\":\"https://i0.hdslb.com/bfs/archive/5b84c45c82c42b3e89ec81a25013d7bba3950fe7.jpg\",\"danmaku\":1050,\"desc\":\"最近玩了这游戏，一不小心就鬼畜了一下\",\"duration\":\"1:48\",\"goto\":\"av\",\"param\":\"11337665\",\"play\":133669,\"started\":0,\"status\":0,\"title\":\"双♂王咆哮\",\"total_count\":0,\"uri\":\"bilibili://video/11337665\"},{\"attentions\":0,\"author\":\"OELoop\",\"cover\":\"https://i0.hdslb.com/bfs/archive/91fbace64632a65dab2f2751eae3e948ec6aab2c.png\",\"danmaku\":2760,\"desc\":\"爷爷第一首凳上摇滚金曲！科科嗷！\",\"duration\":\"1:13\",\"goto\":\"av\",\"param\":\"10550263\",\"play\":809482,\"started\":0,\"status\":0,\"title\":\"【王健林】管它几亿！\",\"total_count\":0,\"uri\":\"bilibili://video/10550263\"},{\"attentions\":0,\"author\":\"友人么么哒\",\"cover\":\"https://i0.hdslb.com/bfs/archive/37f4bf3e36942c8dc324ce117f00023b7a649287.jpg\",\"danmaku\":3476,\"desc\":\"《王者？别闹！》第一集，狄仁杰1V9？ 我可能有一帮假队友\\u2026\\u2026 (╯°Д°)╯  更多精彩请关注 微信公众号：友人么么哒  微博：@友人在此\",\"duration\":\"3:54\",\"goto\":\"av\",\"param\":\"11027659\",\"play\":145128,\"started\":0,\"status\":0,\"title\":\"王者？别闹！第1集\",\"total_count\":0,\"uri\":\"bilibili://video/11027659\"},{\"attentions\":0,\"author\":\"★⑥檤轮囬★\",\"cover\":\"https://i0.hdslb.com/bfs/archive/3c5275c187c5172946038bb68acc7c007b81372c.jpg\",\"danmaku\":1156,\"desc\":\"欢迎关注新浪微博：http://weibo.com/liudao\",\"duration\":\"12:25\",\"goto\":\"av\",\"param\":\"11391291\",\"play\":99130,\"started\":0,\"status\":0,\"title\":\"【六道杂谈】游戏王最终战：游戏VS亚图姆！内奸龙完成三杀\",\"total_count\":0,\"uri\":\"bilibili://video/11391291\"},{\"attentions\":0,\"author\":\"水一大魔王\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0930261fa3005dc86677e3262407a2620e56a1e3.jpg\",\"danmaku\":2778,\"desc\":\"新浪微博水一亦寒\",\"duration\":\"24:59\",\"goto\":\"av\",\"param\":\"11371504\",\"play\":68185,\"started\":0,\"status\":0,\"title\":\"【王者荣耀】3000法强的嬴政伤害有多恐怖？逆风血战大神车队\",\"total_count\":0,\"uri\":\"bilibili://video/11371504\"},{\"attentions\":0,\"author\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/d9c5de61bd83bd14762c280393b9740b5a8732f1.jpg\",\"danmaku\":2716,\"desc\":\"新的夜世界模式我已经摸透了。开始我以为这是一个莽到极致的游戏，后来发现还需要智商时刻在线，这么说来，这游戏还真是适合我呢。\",\"duration\":\"29:56\",\"goto\":\"av\",\"param\":\"11344178\",\"play\":308562,\"started\":0,\"status\":0,\"title\":\"王老菊教你当部落酋长\",\"total_count\":0,\"uri\":\"bilibili://video/11344178\"},{\"attentions\":0,\"author\":\"浣熊君\",\"cover\":\"https://i0.hdslb.com/bfs/archive/70401e732e6ce88d3b1ad1773ec793a1f78e98e2.png\",\"danmaku\":345,\"desc\":\"《王者荣耀》逗比AG超玩会YY90006解说 虎牙主播浣熊致力于英雄尝鲜和新玩法的开辟，希望大家能帮忙点点订阅投个币收藏转发走一走，谢谢各位观众朋友！QQ2864670814。微博：浣熊君主播。虎牙直播搜索浣熊君头像和我一样或直播地址：http://www.huya.com/huanxiongjun 每天晚上6-10王者荣耀和周末早上7-11传说对决~\",\"duration\":\"12:46\",\"goto\":\"av\",\"param\":\"11383437\",\"play\":29462,\"started\":0,\"status\":0,\"title\":\"王者荣耀：这只熊从来没用过李白~掏出来屠杀直冲黑耀段位\",\"total_count\":0,\"uri\":\"bilibili://video/11383437\"},{\"attentions\":0,\"author\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0ef1012ad43b6ad145257de51b42d58e91076fcb.jpg\",\"danmaku\":11196,\"desc\":\"轻轻松松\",\"duration\":\"51:46\",\"goto\":\"av\",\"param\":\"11198197\",\"play\":308561,\"started\":0,\"status\":0,\"title\":\"【王老菊】肉鸽之魂，电力靓基~07\",\"total_count\":0,\"uri\":\"bilibili://video/11198197\"},{\"attentions\":0,\"author\":\"腾讯综艺\",\"cover\":\"https://i0.hdslb.com/bfs/archive/8092fb4aaa30d05c3fb3f7d2cbee738a79ae0f53.jpg\",\"danmaku\":7318,\"desc\":\"是一档明星美食脱口秀节目。节目由何炅与王嘉尔一起担任主持，每期2位明星大咖和自己的冰箱一起来到节目现场，通过揭秘冰箱来与6位性格各异的主厨畅聊美食生活、八卦趣事，每期两位主厨利用明星冰箱食材进行15分钟创意料理对决，第3季特别出现X厨师，与原有八位冰箱家族厨师厨艺对决。\",\"duration\":\"0:0\",\"goto\":\"av\",\"param\":\"11327809\",\"play\":104890,\"started\":0,\"status\":0,\"title\":\"【拜托了冰箱 第三季】第10期：全场大哭！姚晨现场打拳K.O王嘉尔，何炅神秘冰箱首次开启\",\"total_count\":0,\"uri\":\"bilibili://video/11327809\"},{\"attentions\":0,\"author\":\"极帅GG小给给\",\"cover\":\"https://i0.hdslb.com/bfs/archive/a3b07375d650f38f5c9d0dcedea9affcdcc680d5.jpg\",\"danmaku\":1009,\"desc\":\"微博:http://weibo.com/jishuaigg\",\"duration\":\"5:51\",\"goto\":\"av\",\"param\":\"11283097\",\"play\":43460,\"started\":0,\"status\":0,\"title\":\"[乱斗吧勇士VS王者荣耀]4399这游戏和王者荣耀很像啊！\",\"total_count\":0,\"uri\":\"bilibili://video/11283097\"},{\"attentions\":0,\"author\":\"吾乃光标学徒\",\"cover\":\"https://i0.hdslb.com/bfs/archive/8e25d9e49296ac5e6d0204349468adf07d5d6d9d.jpg\",\"danmaku\":351,\"desc\":\"huya.com/heigou 自制 黑店百地直播录制，每天18:55直播（一般迟到20分钟），YY90077，虎牙直播，主打上单肉，常玩上单的同学可以关注下 新浪微博：上单主播黑店百地 非常感谢up主龙猫kiyomi提供的技术支持\",\"duration\":\"193:28\",\"goto\":\"av\",\"param\":\"11397184\",\"play\":10157,\"started\":0,\"status\":0,\"title\":\"【黑狗直播】6.15合集，皇子蛮王船长狗头，又和妹狗包下打了一局\",\"total_count\":0,\"uri\":\"bilibili://video/11397184\"},{\"attentions\":0,\"author\":\"影视狂魔老王\",\"cover\":\"https://i0.hdslb.com/bfs/archive/8b74d7f8bdc57022d9f3214e74ab236015ea1942.jpg\",\"danmaku\":158,\"desc\":\"国产神作《整容游戏》05！小黑陈浩身份大揭秘！隐藏BOSS终于现身！\",\"duration\":\"5:12\",\"goto\":\"av\",\"param\":\"11398947\",\"play\":24183,\"started\":0,\"status\":0,\"title\":\"【老王】国产神作《整容游戏》05！小黑陈浩身份大揭秘！隐藏BOSS终于现身！\",\"total_count\":0,\"uri\":\"bilibili://video/11398947\"},{\"attentions\":0,\"author\":\"水一大魔王\",\"cover\":\"https://i0.hdslb.com/bfs/archive/2cabab9a35aadc9b20ff1b236d11030e70c87cea.jpg\",\"danmaku\":2848,\"desc\":\"新浪微博水一亦寒\",\"duration\":\"16:5\",\"goto\":\"av\",\"param\":\"11405493\",\"play\":42078,\"started\":0,\"status\":0,\"title\":\"【王者荣耀】赵云韩信单挑谁强？国服第一赵云追着韩信跑！\",\"total_count\":0,\"uri\":\"bilibili://video/11405493\"},{\"attentions\":0,\"author\":\"伊丽莎白鼠\",\"cover\":\"https://i0.hdslb.com/bfs/archive/615f086a40c2d1dde2087c69947ae05bed29a4e2.jpg\",\"danmaku\":13701,\"desc\":\" 广西南宁，广西南宁！王八牌皮鞋，原价一百多，现价三百多！买不了上当，买不了吃亏！  ------------------------------------------------------------------------  （白鼠年纪大了，基本没时间做鬼畜啦，今天还能更新，就觉得是自己的福气，祝大家在新的一年里，有更多更好看的鬼畜，新年快乐！ \",\"duration\":\"0:58\",\"goto\":\"av\",\"param\":\"8247204\",\"play\":3566352,\"started\":0,\"status\":0,\"title\":\"【最强卖鞋哥】这双王八牌皮鞋，我买定了！\",\"total_count\":0,\"uri\":\"bilibili://video/8247204\"},{\"attentions\":0,\"author\":\"请与逗比同归于尽\",\"cover\":\"https://i0.hdslb.com/bfs/archive/6116b36db57891bf5457e34bf370653657578ab5.jpg\",\"danmaku\":305,\"desc\":\"我是一名王者荣耀逗比主播~ 更多搞笑短片欢迎关注新浪微博 @请与逗比同归于尽。 直播地点：斗鱼TV，房间2250040。 如果你喜欢的话可以点顶，想看接下来内容可以点订阅哦。\",\"duration\":\"2:0\",\"goto\":\"av\",\"param\":\"11366801\",\"play\":63116,\"started\":0,\"status\":0,\"title\":\"【王者荣耀】高渐离：开口跪，没错！我开口就得跪\",\"total_count\":0,\"uri\":\"bilibili://video/11366801\"},{\"attentions\":0,\"author\":\"会拉车的猫\",\"cover\":\"https://i0.hdslb.com/bfs/archive/4732a58edac2bedd219b05452c207c815ce4e21f.jpg\",\"danmaku\":327,\"desc\":\"很感谢大家喜欢这个系列，既然大家这么热情，第二弹肯定是会有的。 但是up主最近在考试，所以可能会晚一些。 先放个小番外吧，两个小时剪完的，嘉尔跟这首歌实在太配了哈哈哈\",\"duration\":\"1:32\",\"goto\":\"av\",\"param\":\"11345673\",\"play\":24238,\"started\":0,\"status\":0,\"title\":\"【王嘉尔x鹿晗x迪丽热巴】【陆地夫妇】用奇怪的方式打开鹿迪-番外篇\",\"total_count\":0,\"uri\":\"bilibili://video/11345673\"},{\"attentions\":0,\"author\":\"艾尔十六\",\"cover\":\"https://i0.hdslb.com/bfs/archive/c49b829d0bbb0ea0a1029ca003cb119dd548f14b.jpg\",\"danmaku\":6868,\"desc\":\"自制：新·游戏王VS系列 预告片：av4233538；第1集：av4377433；第2集：av4736126；第3集：av5221676；第4集：av6205823；第5集：av8538902；第6集：本视频；原作VS系列：av61421\",\"duration\":\"17:12\",\"goto\":\"av\",\"param\":\"11230200\",\"play\":313241,\"started\":0,\"status\":0,\"title\":\"【新·游戏王VS系列】第6集：王様和吾王\",\"total_count\":0,\"uri\":\"bilibili://video/11230200\"}],\"movie\":[{\"actors\":\"海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\",\"area\":\"法国,英国,意大利\",\"attentions\":0,\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\",\"cover_mark\":\"免费观看\",\"desc\":\"1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦\\u2022米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼\\u2022布莱尔（麦克\\u2022辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\",\"goto\":\"av\",\"length\":103,\"param\":\"4605417\",\"screen_date\":\"2006-09-15 08:00:00\",\"staff\":\"导演：斯蒂芬·弗雷斯 编剧：皮特·摩根\",\"started\":0,\"status\":2,\"title\":\"女王\",\"total_count\":0,\"uri\":\"bilibili://video/4605417\"},{\"actors\":\"卡尔·潘、Lauren Cohan、Daniel Percival、格伦·巴里\",\"area\":\"美国\",\"attentions\":0,\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6951d420873bc41084b33b280139d223bbcdca42.jpg\",\"cover_mark\":\"免费观看\",\"desc\":\"泰吉\\u2022巴德兰德巴德（卡尔\\u2022潘 Kal Penn 饰）带着范\\u2022维尔德的精神和大学学位，远赴英国加尔福德大学\\u2014\\u2014这里是他父亲曾经\\u201c战斗\\u201d过的地方，兄弟会\\u201c狐狸与猎犬\\u201d之屋留下了父亲风光的记忆，然而来这里担任助教的泰吉并不被对方认可，狐狸与猎犬的首脑皮普反而将泰吉戏弄了一通。泰吉来到自己负责的宿舍\\u2014\\u2014被戏称为马厩的败落小屋，这里住着四个边缘化的学生：研究量子物理和男女关系的盖辛，暴躁的爱尔兰人谢莫斯，沉默的宅男赛门以及不检点的女生赛迪。泰吉为了让这几位问题青年重新振作，自组鸡公牛社团向皮普的狐狸与猎犬之屋发起挑战，而皮普的女友查莉令泰吉一见钟情，于是一场关乎学生尊严和助教爱情的奋战拉开了序幕\\u2026\\u2026\",\"goto\":\"av\",\"length\":96,\"param\":\"3034493\",\"screen_date\":\"2006-12-01 08:00:00\",\"staff\":\"导演：Mort Nathan 编剧：David Drew Gallagher\",\"started\":0,\"status\":2,\"title\":\"留级之王2\",\"total_count\":0,\"uri\":\"bilibili://video/3034493\"},{\"actors\":\"王敏德、雷宇扬、张文慈\",\"area\":\"中国香港\",\"attentions\":0,\"cover\":\"https://i0.hdslb.com/bfs/bangumi/aea638908e68c87aeac7a9f8d455820085d75e5a.jpg\",\"cover_mark\":\"免费观看\",\"desc\":\"暑假到了，寄宿学校只留下总监Miss郑（张文慈饰）和四个学生愤祥（雷宇扬饰）、小丑（黄小莺饰）、Nokia（袁伟豪饰）及123（施念慈饰）。自从校工福婶（彭丹饰）的孙女离奇死亡，被弃置於冰箱内；而且福婶的小狗被割去头颅，一名转校生Connie（陈思颖饰）来到，连串怪事陆续发生。调查此案的于Sir（王敏德饰）险遇交通意外。Connie养父（李兆基饰）得悉一切时，便告之他们Connie是魔鬼的女儿，众人不信，反责他妖言惑众。\",\"goto\":\"av\",\"length\":84,\"param\":\"3954640\",\"screen_date\":\"1999-11-18 08:00:00\",\"staff\":\"导演：刘孝伟 编剧：张荣耀、刘孝伟\",\"started\":0,\"status\":2,\"title\":\"鬼片王之再现凶榜\",\"total_count\":0,\"uri\":\"bilibili://video/3954640\"}],\"season\":[{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"2932\",\"started\":0,\"status\":0,\"title\":\"打工吧！魔王大人\",\"total_count\":13,\"uri\":\"bilibili://bangumi/season/2932\"},{\"attentions\":0,\"cat_desc\":\"TV(2) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7ec9487f007c278733212908a6f607e4a245b1d4.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"1\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"1588\",\"started\":0,\"status\":0,\"title\":\"罪恶王冠\",\"total_count\":1,\"uri\":\"bilibili://bangumi/season/1588\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/29d001c8083a224da99b72239be5680c6ac907e7.jpg\",\"goto\":\"bangumi\",\"index\":\"12\",\"newest_cat\":\"tv\",\"newest_season\":\"第一季\",\"param\":\"6043\",\"started\":0,\"status\":0,\"title\":\"第六天魔王\",\"total_count\":-1,\"uri\":\"bilibili://bangumi/season/6043\"}]},\"nav\":[{\"name\":\"番剧\",\"pages\":3,\"show_more\":1,\"total\":42,\"type\":1},{\"name\":\"UP主\",\"pages\":50,\"total\":1000,\"type\":2},{\"name\":\"影视\",\"pages\":6,\"show_more\":1,\"total\":112,\"type\":3}],\"page\":1,\"trackid\":\"12211699165045075750\"}\n     * message :\n     * ttl : 1\n     */\n\n\n    data class DataBean(var items: ItemsBean,\n                        var page: Int,\n                        var trackid: String,\n                        var nav: List<NavBean>) {\n        /**\n         * items : {\"archive\":[{\"attentions\":0,\"author\":\"Xiao番茄丶\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0258e7dfbbfd767e42b5063c69450bfc91fe02ba.jpg\",\"danmaku\":24,\"desc\":\"http://www.budejie.com/pc/25385657.html 怎么没有蓝火？\",\"duration\":\"0:8\",\"goto\":\"av\",\"param\":\"11345283\",\"play\":39302,\"started\":0,\"status\":0,\"title\":\"社会王：我爱你，哪怕是你不经意的一句玩笑，我也跑遍世界找给你（你要的加特林）\",\"total_count\":0,\"uri\":\"bilibili://video/11345283\"},{\"attentions\":0,\"author\":\"冬日蜀黍\",\"cover\":\"https://i0.hdslb.com/bfs/archive/6f785f0e87c4870a3dcd904bfc38eb3644702b0e.jpg\",\"danmaku\":1613,\"desc\":\"一个大坑终于要完结了。  游戏名：以罪之名。\",\"duration\":\"41:51\",\"goto\":\"av\",\"param\":\"11400445\",\"play\":9073,\"started\":0,\"status\":0,\"title\":\"【悬疑剧场】最终回！国王游戏！！\",\"total_count\":0,\"uri\":\"bilibili://video/11400445\"},{\"attentions\":0,\"author\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/01c7b8abe1f1b8107006108d11e24724a54aae60.jpg\",\"danmaku\":9006,\"desc\":\"感觉尾巴肥肥肉肉好好吃\",\"duration\":\"62:32\",\"goto\":\"av\",\"param\":\"11370914\",\"play\":304223,\"started\":0,\"status\":0,\"title\":\"【王老菊】肉鸽之魂，神奇的天路~10\",\"total_count\":0,\"uri\":\"bilibili://video/11370914\"},{\"attentions\":0,\"author\":\"泽野螳螂\",\"cover\":\"https://i0.hdslb.com/bfs/archive/5b84c45c82c42b3e89ec81a25013d7bba3950fe7.jpg\",\"danmaku\":1050,\"desc\":\"最近玩了这游戏，一不小心就鬼畜了一下\",\"duration\":\"1:48\",\"goto\":\"av\",\"param\":\"11337665\",\"play\":133669,\"started\":0,\"status\":0,\"title\":\"双♂王咆哮\",\"total_count\":0,\"uri\":\"bilibili://video/11337665\"},{\"attentions\":0,\"author\":\"OELoop\",\"cover\":\"https://i0.hdslb.com/bfs/archive/91fbace64632a65dab2f2751eae3e948ec6aab2c.png\",\"danmaku\":2760,\"desc\":\"爷爷第一首凳上摇滚金曲！科科嗷！\",\"duration\":\"1:13\",\"goto\":\"av\",\"param\":\"10550263\",\"play\":809482,\"started\":0,\"status\":0,\"title\":\"【王健林】管它几亿！\",\"total_count\":0,\"uri\":\"bilibili://video/10550263\"},{\"attentions\":0,\"author\":\"友人么么哒\",\"cover\":\"https://i0.hdslb.com/bfs/archive/37f4bf3e36942c8dc324ce117f00023b7a649287.jpg\",\"danmaku\":3476,\"desc\":\"《王者？别闹！》第一集，狄仁杰1V9？ 我可能有一帮假队友\\u2026\\u2026 (╯°Д°)╯  更多精彩请关注 微信公众号：友人么么哒  微博：@友人在此\",\"duration\":\"3:54\",\"goto\":\"av\",\"param\":\"11027659\",\"play\":145128,\"started\":0,\"status\":0,\"title\":\"王者？别闹！第1集\",\"total_count\":0,\"uri\":\"bilibili://video/11027659\"},{\"attentions\":0,\"author\":\"★⑥檤轮囬★\",\"cover\":\"https://i0.hdslb.com/bfs/archive/3c5275c187c5172946038bb68acc7c007b81372c.jpg\",\"danmaku\":1156,\"desc\":\"欢迎关注新浪微博：http://weibo.com/liudao\",\"duration\":\"12:25\",\"goto\":\"av\",\"param\":\"11391291\",\"play\":99130,\"started\":0,\"status\":0,\"title\":\"【六道杂谈】游戏王最终战：游戏VS亚图姆！内奸龙完成三杀\",\"total_count\":0,\"uri\":\"bilibili://video/11391291\"},{\"attentions\":0,\"author\":\"水一大魔王\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0930261fa3005dc86677e3262407a2620e56a1e3.jpg\",\"danmaku\":2778,\"desc\":\"新浪微博水一亦寒\",\"duration\":\"24:59\",\"goto\":\"av\",\"param\":\"11371504\",\"play\":68185,\"started\":0,\"status\":0,\"title\":\"【王者荣耀】3000法强的嬴政伤害有多恐怖？逆风血战大神车队\",\"total_count\":0,\"uri\":\"bilibili://video/11371504\"},{\"attentions\":0,\"author\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/d9c5de61bd83bd14762c280393b9740b5a8732f1.jpg\",\"danmaku\":2716,\"desc\":\"新的夜世界模式我已经摸透了。开始我以为这是一个莽到极致的游戏，后来发现还需要智商时刻在线，这么说来，这游戏还真是适合我呢。\",\"duration\":\"29:56\",\"goto\":\"av\",\"param\":\"11344178\",\"play\":308562,\"started\":0,\"status\":0,\"title\":\"王老菊教你当部落酋长\",\"total_count\":0,\"uri\":\"bilibili://video/11344178\"},{\"attentions\":0,\"author\":\"浣熊君\",\"cover\":\"https://i0.hdslb.com/bfs/archive/70401e732e6ce88d3b1ad1773ec793a1f78e98e2.png\",\"danmaku\":345,\"desc\":\"《王者荣耀》逗比AG超玩会YY90006解说 虎牙主播浣熊致力于英雄尝鲜和新玩法的开辟，希望大家能帮忙点点订阅投个币收藏转发走一走，谢谢各位观众朋友！QQ2864670814。微博：浣熊君主播。虎牙直播搜索浣熊君头像和我一样或直播地址：http://www.huya.com/huanxiongjun 每天晚上6-10王者荣耀和周末早上7-11传说对决~\",\"duration\":\"12:46\",\"goto\":\"av\",\"param\":\"11383437\",\"play\":29462,\"started\":0,\"status\":0,\"title\":\"王者荣耀：这只熊从来没用过李白~掏出来屠杀直冲黑耀段位\",\"total_count\":0,\"uri\":\"bilibili://video/11383437\"},{\"attentions\":0,\"author\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0ef1012ad43b6ad145257de51b42d58e91076fcb.jpg\",\"danmaku\":11196,\"desc\":\"轻轻松松\",\"duration\":\"51:46\",\"goto\":\"av\",\"param\":\"11198197\",\"play\":308561,\"started\":0,\"status\":0,\"title\":\"【王老菊】肉鸽之魂，电力靓基~07\",\"total_count\":0,\"uri\":\"bilibili://video/11198197\"},{\"attentions\":0,\"author\":\"腾讯综艺\",\"cover\":\"https://i0.hdslb.com/bfs/archive/8092fb4aaa30d05c3fb3f7d2cbee738a79ae0f53.jpg\",\"danmaku\":7318,\"desc\":\"是一档明星美食脱口秀节目。节目由何炅与王嘉尔一起担任主持，每期2位明星大咖和自己的冰箱一起来到节目现场，通过揭秘冰箱来与6位性格各异的主厨畅聊美食生活、八卦趣事，每期两位主厨利用明星冰箱食材进行15分钟创意料理对决，第3季特别出现X厨师，与原有八位冰箱家族厨师厨艺对决。\",\"duration\":\"0:0\",\"goto\":\"av\",\"param\":\"11327809\",\"play\":104890,\"started\":0,\"status\":0,\"title\":\"【拜托了冰箱 第三季】第10期：全场大哭！姚晨现场打拳K.O王嘉尔，何炅神秘冰箱首次开启\",\"total_count\":0,\"uri\":\"bilibili://video/11327809\"},{\"attentions\":0,\"author\":\"极帅GG小给给\",\"cover\":\"https://i0.hdslb.com/bfs/archive/a3b07375d650f38f5c9d0dcedea9affcdcc680d5.jpg\",\"danmaku\":1009,\"desc\":\"微博:http://weibo.com/jishuaigg\",\"duration\":\"5:51\",\"goto\":\"av\",\"param\":\"11283097\",\"play\":43460,\"started\":0,\"status\":0,\"title\":\"[乱斗吧勇士VS王者荣耀]4399这游戏和王者荣耀很像啊！\",\"total_count\":0,\"uri\":\"bilibili://video/11283097\"},{\"attentions\":0,\"author\":\"吾乃光标学徒\",\"cover\":\"https://i0.hdslb.com/bfs/archive/8e25d9e49296ac5e6d0204349468adf07d5d6d9d.jpg\",\"danmaku\":351,\"desc\":\"huya.com/heigou 自制 黑店百地直播录制，每天18:55直播（一般迟到20分钟），YY90077，虎牙直播，主打上单肉，常玩上单的同学可以关注下 新浪微博：上单主播黑店百地 非常感谢up主龙猫kiyomi提供的技术支持\",\"duration\":\"193:28\",\"goto\":\"av\",\"param\":\"11397184\",\"play\":10157,\"started\":0,\"status\":0,\"title\":\"【黑狗直播】6.15合集，皇子蛮王船长狗头，又和妹狗包下打了一局\",\"total_count\":0,\"uri\":\"bilibili://video/11397184\"},{\"attentions\":0,\"author\":\"影视狂魔老王\",\"cover\":\"https://i0.hdslb.com/bfs/archive/8b74d7f8bdc57022d9f3214e74ab236015ea1942.jpg\",\"danmaku\":158,\"desc\":\"国产神作《整容游戏》05！小黑陈浩身份大揭秘！隐藏BOSS终于现身！\",\"duration\":\"5:12\",\"goto\":\"av\",\"param\":\"11398947\",\"play\":24183,\"started\":0,\"status\":0,\"title\":\"【老王】国产神作《整容游戏》05！小黑陈浩身份大揭秘！隐藏BOSS终于现身！\",\"total_count\":0,\"uri\":\"bilibili://video/11398947\"},{\"attentions\":0,\"author\":\"水一大魔王\",\"cover\":\"https://i0.hdslb.com/bfs/archive/2cabab9a35aadc9b20ff1b236d11030e70c87cea.jpg\",\"danmaku\":2848,\"desc\":\"新浪微博水一亦寒\",\"duration\":\"16:5\",\"goto\":\"av\",\"param\":\"11405493\",\"play\":42078,\"started\":0,\"status\":0,\"title\":\"【王者荣耀】赵云韩信单挑谁强？国服第一赵云追着韩信跑！\",\"total_count\":0,\"uri\":\"bilibili://video/11405493\"},{\"attentions\":0,\"author\":\"伊丽莎白鼠\",\"cover\":\"https://i0.hdslb.com/bfs/archive/615f086a40c2d1dde2087c69947ae05bed29a4e2.jpg\",\"danmaku\":13701,\"desc\":\" 广西南宁，广西南宁！王八牌皮鞋，原价一百多，现价三百多！买不了上当，买不了吃亏！  ------------------------------------------------------------------------  （白鼠年纪大了，基本没时间做鬼畜啦，今天还能更新，就觉得是自己的福气，祝大家在新的一年里，有更多更好看的鬼畜，新年快乐！ \",\"duration\":\"0:58\",\"goto\":\"av\",\"param\":\"8247204\",\"play\":3566352,\"started\":0,\"status\":0,\"title\":\"【最强卖鞋哥】这双王八牌皮鞋，我买定了！\",\"total_count\":0,\"uri\":\"bilibili://video/8247204\"},{\"attentions\":0,\"author\":\"请与逗比同归于尽\",\"cover\":\"https://i0.hdslb.com/bfs/archive/6116b36db57891bf5457e34bf370653657578ab5.jpg\",\"danmaku\":305,\"desc\":\"我是一名王者荣耀逗比主播~ 更多搞笑短片欢迎关注新浪微博 @请与逗比同归于尽。 直播地点：斗鱼TV，房间2250040。 如果你喜欢的话可以点顶，想看接下来内容可以点订阅哦。\",\"duration\":\"2:0\",\"goto\":\"av\",\"param\":\"11366801\",\"play\":63116,\"started\":0,\"status\":0,\"title\":\"【王者荣耀】高渐离：开口跪，没错！我开口就得跪\",\"total_count\":0,\"uri\":\"bilibili://video/11366801\"},{\"attentions\":0,\"author\":\"会拉车的猫\",\"cover\":\"https://i0.hdslb.com/bfs/archive/4732a58edac2bedd219b05452c207c815ce4e21f.jpg\",\"danmaku\":327,\"desc\":\"很感谢大家喜欢这个系列，既然大家这么热情，第二弹肯定是会有的。 但是up主最近在考试，所以可能会晚一些。 先放个小番外吧，两个小时剪完的，嘉尔跟这首歌实在太配了哈哈哈\",\"duration\":\"1:32\",\"goto\":\"av\",\"param\":\"11345673\",\"play\":24238,\"started\":0,\"status\":0,\"title\":\"【王嘉尔x鹿晗x迪丽热巴】【陆地夫妇】用奇怪的方式打开鹿迪-番外篇\",\"total_count\":0,\"uri\":\"bilibili://video/11345673\"},{\"attentions\":0,\"author\":\"艾尔十六\",\"cover\":\"https://i0.hdslb.com/bfs/archive/c49b829d0bbb0ea0a1029ca003cb119dd548f14b.jpg\",\"danmaku\":6868,\"desc\":\"自制：新·游戏王VS系列 预告片：av4233538；第1集：av4377433；第2集：av4736126；第3集：av5221676；第4集：av6205823；第5集：av8538902；第6集：本视频；原作VS系列：av61421\",\"duration\":\"17:12\",\"goto\":\"av\",\"param\":\"11230200\",\"play\":313241,\"started\":0,\"status\":0,\"title\":\"【新·游戏王VS系列】第6集：王様和吾王\",\"total_count\":0,\"uri\":\"bilibili://video/11230200\"}],\"movie\":[{\"actors\":\"海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\",\"area\":\"法国,英国,意大利\",\"attentions\":0,\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\",\"cover_mark\":\"免费观看\",\"desc\":\"1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦\\u2022米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼\\u2022布莱尔（麦克\\u2022辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\",\"goto\":\"av\",\"length\":103,\"param\":\"4605417\",\"screen_date\":\"2006-09-15 08:00:00\",\"staff\":\"导演：斯蒂芬·弗雷斯 编剧：皮特·摩根\",\"started\":0,\"status\":2,\"title\":\"女王\",\"total_count\":0,\"uri\":\"bilibili://video/4605417\"},{\"actors\":\"卡尔·潘、Lauren Cohan、Daniel Percival、格伦·巴里\",\"area\":\"美国\",\"attentions\":0,\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6951d420873bc41084b33b280139d223bbcdca42.jpg\",\"cover_mark\":\"免费观看\",\"desc\":\"泰吉\\u2022巴德兰德巴德（卡尔\\u2022潘 Kal Penn 饰）带着范\\u2022维尔德的精神和大学学位，远赴英国加尔福德大学\\u2014\\u2014这里是他父亲曾经\\u201c战斗\\u201d过的地方，兄弟会\\u201c狐狸与猎犬\\u201d之屋留下了父亲风光的记忆，然而来这里担任助教的泰吉并不被对方认可，狐狸与猎犬的首脑皮普反而将泰吉戏弄了一通。泰吉来到自己负责的宿舍\\u2014\\u2014被戏称为马厩的败落小屋，这里住着四个边缘化的学生：研究量子物理和男女关系的盖辛，暴躁的爱尔兰人谢莫斯，沉默的宅男赛门以及不检点的女生赛迪。泰吉为了让这几位问题青年重新振作，自组鸡公牛社团向皮普的狐狸与猎犬之屋发起挑战，而皮普的女友查莉令泰吉一见钟情，于是一场关乎学生尊严和助教爱情的奋战拉开了序幕\\u2026\\u2026\",\"goto\":\"av\",\"length\":96,\"param\":\"3034493\",\"screen_date\":\"2006-12-01 08:00:00\",\"staff\":\"导演：Mort Nathan 编剧：David Drew Gallagher\",\"started\":0,\"status\":2,\"title\":\"留级之王2\",\"total_count\":0,\"uri\":\"bilibili://video/3034493\"},{\"actors\":\"王敏德、雷宇扬、张文慈\",\"area\":\"中国香港\",\"attentions\":0,\"cover\":\"https://i0.hdslb.com/bfs/bangumi/aea638908e68c87aeac7a9f8d455820085d75e5a.jpg\",\"cover_mark\":\"免费观看\",\"desc\":\"暑假到了，寄宿学校只留下总监Miss郑（张文慈饰）和四个学生愤祥（雷宇扬饰）、小丑（黄小莺饰）、Nokia（袁伟豪饰）及123（施念慈饰）。自从校工福婶（彭丹饰）的孙女离奇死亡，被弃置於冰箱内；而且福婶的小狗被割去头颅，一名转校生Connie（陈思颖饰）来到，连串怪事陆续发生。调查此案的于Sir（王敏德饰）险遇交通意外。Connie养父（李兆基饰）得悉一切时，便告之他们Connie是魔鬼的女儿，众人不信，反责他妖言惑众。\",\"goto\":\"av\",\"length\":84,\"param\":\"3954640\",\"screen_date\":\"1999-11-18 08:00:00\",\"staff\":\"导演：刘孝伟 编剧：张荣耀、刘孝伟\",\"started\":0,\"status\":2,\"title\":\"鬼片王之再现凶榜\",\"total_count\":0,\"uri\":\"bilibili://video/3954640\"}],\"season\":[{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"2932\",\"started\":0,\"status\":0,\"title\":\"打工吧！魔王大人\",\"total_count\":13,\"uri\":\"bilibili://bangumi/season/2932\"},{\"attentions\":0,\"cat_desc\":\"TV(2) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7ec9487f007c278733212908a6f607e4a245b1d4.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"1\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"1588\",\"started\":0,\"status\":0,\"title\":\"罪恶王冠\",\"total_count\":1,\"uri\":\"bilibili://bangumi/season/1588\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/29d001c8083a224da99b72239be5680c6ac907e7.jpg\",\"goto\":\"bangumi\",\"index\":\"12\",\"newest_cat\":\"tv\",\"newest_season\":\"第一季\",\"param\":\"6043\",\"started\":0,\"status\":0,\"title\":\"第六天魔王\",\"total_count\":-1,\"uri\":\"bilibili://bangumi/season/6043\"}]}\n         * nav : [{\"name\":\"番剧\",\"pages\":3,\"show_more\":1,\"total\":42,\"type\":1},{\"name\":\"UP主\",\"pages\":50,\"total\":1000,\"type\":2},{\"name\":\"影视\",\"pages\":6,\"show_more\":1,\"total\":112,\"type\":3}]\n         * page : 1\n         * trackid : 12211699165045075750\n         */\n\n\n        data class ItemsBean(var archive: List<ArchiveBean>,\n                             var movie: List<MovieBean>,\n                             var season: List<SeasonBean>) {\n\n\n            data class ArchiveBean(var attentions: Int,\n                                   var author: String,\n                                   var cover: String,\n                                   var danmaku: Int,\n                                   var desc: String,\n                                   var duration: String,\n                                   var gotoX: String,\n                                   var param: String,\n                                   var play: Int,\n                                   var started: Int,\n                                   var status: Int,\n                                   var title: String,\n                                   var total_count: Int,\n                                   var uri: String) {\n                /**\n                 * attentions : 0\n                 * author : Xiao番茄丶\n                 * cover : https://i0.hdslb.com/bfs/archive/0258e7dfbbfd767e42b5063c69450bfc91fe02ba.jpg\n                 * danmaku : 24\n                 * desc : http://www.budejie.com/pc/25385657.html 怎么没有蓝火？\n                 * duration : 0:8\n                 * goto : av\n                 * param : 11345283\n                 * play : 39302\n                 * started : 0\n                 * status : 0\n                 * title : 社会王：我爱你，哪怕是你不经意的一句玩笑，我也跑遍世界找给你（你要的加特林）\n                 * total_count : 0\n                 * uri : bilibili://video/11345283\n                 */\n\n\n            }\n\n            data class MovieBean(var actors: String,\n                                 var area: String,\n                                 var attentions: Int,\n                                 var cover: String,\n                                 var cover_mark: String,\n                                 var desc: String,\n                                 var goto: String,\n                                 var length: Int,\n                                 var param: String,\n                                 var screen_date: String,\n                                 var staff: String,\n                                 var started: Int,\n                                 var status: Int,\n                                 var title: String,\n                                 var total_count: Int,\n                                 var uri: String) {\n                /**\n                 * actors : 海伦·米伦、麦克·辛、詹姆斯·克伦威尔、阿历克斯·杰宁斯、安吉拉·兰斯伯瑞\n                 * area : 法国,英国,意大利\n                 * attentions : 0\n                 * cover : https://i0.hdslb.com/bfs/bangumi/7cf444b192492ac55dca5ba44e858e1dce614a81.jpg\n                 * cover_mark : 免费观看\n                 * desc : 1997年，戴安娜王妃车祸身亡，举国悲痛欲绝，但是英国王室人员却对此采取了逃避疏离的态度。这种漠不关心激怒了很多英国民众。民众反王室的情绪相当高涨，紧急形势让王室陷入了严重的危机。但是，英王伊丽沙白（海伦•米伦Helen Mirren 饰）并没有出来稳定民心，而是携家人躲到了度假行宫。托尼•布莱尔（麦克•辛 Michael Sheen 饰）此时刚出任首相，面对此刻棘手的情势，必须尽快找到平衡各方利益的措施，让王室摆脱信任危机，女王重新修好与国民的关系，而自己也在当中树立权威。\n                 * goto : av\n                 * length : 103\n                 * param : 4605417\n                 * screen_date : 2006-09-15 08:00:00\n                 * staff : 导演：斯蒂芬·弗雷斯 编剧：皮特·摩根\n                 * started : 0\n                 * status : 2\n                 * title : 女王\n                 * total_count : 0\n                 * uri : bilibili://video/4605417\n                 */\n\n\n            }\n\n            data class SeasonBean(var attentions: Int,\n                                  var cat_desc: String,\n                                  var cover: String,\n                                  var finish: Int,\n                                  var goto: String,\n                                  var index: String,\n                                  var newest_cat: String,\n                                  var newest_season: String,\n                                  var param: String,\n                                  var started: Int,\n                                  var status: Int,\n                                  var title: String,\n                                  var total_count: Int,\n                                  var uri: String) {\n                /**\n                 * attentions : 0\n                 * cat_desc : TV(1)\n                 * cover : https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\n                 * finish : 1\n                 * goto : bangumi\n                 * index : 13\n                 * newest_cat : tv\n                 * newest_season : TV\n                 * param : 2932\n                 * started : 0\n                 * status : 0\n                 * title : 打工吧！魔王大人\n                 * total_count : 13\n                 * uri : bilibili://bangumi/season/2932\n                 */\n\n\n            }\n        }\n\n        data class NavBean(var name: String,\n                           var pages: Int,\n                           var show_more: Int,\n                           var total: Int,\n                           var type: Int) {\n            /**\n             * name : 番剧\n             * pages : 3\n             * show_more : 1\n             * total : 42\n             * type : 1\n             */\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/search/SearchArchive.kt",
    "content": "package com.yoyiyi.soleil.bean.search\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 12:01\n * * 描述:综合\n */\ndata class SearchArchive(var trackid: String,\n                         var page: Int,\n                         var items: ItemsBean,\n                         var nav: List<NavBean>) {\n\n    /**\n     * trackid : 3514769120374598885\n     * page : 1\n     * nav : [{\"name\":\"番剧\",\"total\":0,\"pages\":0,\"type\":1},{\"name\":\"UP主\",\"total\":89,\"pages\":5,\"type\":2},{\"name\":\"影视\",\"total\":0,\"pages\":0,\"type\":3}]\n     * items : {\"archive\":[{\"title\":\"王者荣耀：除了官配cp竟然还有这么多隐藏cp！你站哪一对？\",\"cover\":\"https://i0.hdslb.com/bfs/archive/cd67aff55c3df93ecf5480e937d642f8869876b8.jpg\",\"uri\":\"bilibili://video/10861684\",\"param\":\"10861684\",\"goto\":\"av\",\"play\":38596,\"danmaku\":1344,\"author\":\"王者大事件\",\"started\":0,\"total_count\":0,\"desc\":\"新浪微博@王者大事件\\n该视频仅供娱乐 个人色彩占有居多 请不要在评论区打架！\\n另外剪完才发现嬴政和妲己的错了 真的不读书的坏处 \\n以后BGM会放在左上角或者右上角 请各位求BGM的同学要做个细心的人哦\\n整理了一下CP配对 竟会有这么多 不过这么多CP最后一对才是真正的CP\\n不给反驳 嘿嘿！\",\"duration\":\"4:13\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀里面踢足球是一种什么感觉？\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0abc3e99cd2f553a500c400811511100229efeb3.jpg\",\"uri\":\"bilibili://video/10857622\",\"param\":\"10857622\",\"goto\":\"av\",\"play\":58366,\"danmaku\":1262,\"author\":\"小末MD\",\"started\":0,\"total_count\":0,\"desc\":\"游戏名称:无尽对决，求个订阅，持续更新\",\"duration\":\"4:4\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：宫本1技能不能击飞！史诗级削弱难道仅仅只是开始？\",\"cover\":\"https://i0.hdslb.com/bfs/archive/4ff177dd57bca1e0c3554d445e36ec565d48a384.jpg\",\"uri\":\"bilibili://video/10871836\",\"param\":\"10871836\",\"goto\":\"av\",\"play\":76072,\"danmaku\":1139,\"author\":\"小塔TT\",\"started\":0,\"total_count\":0,\"desc\":\"终于要对宫本动刀了\",\"duration\":\"2:43\",\"status\":0,\"attentions\":0},{\"title\":\"【钢琴】你有好好听过登录时的音乐吗？--王者荣耀登录曲\",\"cover\":\"https://i0.hdslb.com/bfs/archive/ba20f9ee562c68d071401be46b1777311f014e2f.jpg\",\"uri\":\"bilibili://video/10824404\",\"param\":\"10824404\",\"goto\":\"av\",\"play\":61349,\"danmaku\":216,\"author\":\"音乐僧\",\"started\":0,\"total_count\":0,\"desc\":\"自制 希望大家喜欢\\n听了文武贝的钢琴版本，自己也即兴演奏了一下，使用了同样的调，但是左手伴奏部分不同，结构不同，如果有小伙伴需要我可以尝试把谱打出来。\\n入农药坑这么久，在铂金二段位一直打不动了\\u2026\\u2026\\u2026\\u2026垃圾技术不行，就好好演奏一下登录音乐吧\\n纪念王者荣耀陪我度过的快乐时光~~\",\"duration\":\"1:10\",\"status\":0,\"attentions\":0},{\"title\":\"噗啾！王者荣耀里这个13888英雄竟然可以吊打18888的英雄 ？\",\"cover\":\"https://i0.hdslb.com/bfs/archive/694f57d70998c6a997074afa1d544c56e4e82b94.jpg\",\"uri\":\"bilibili://video/10751073\",\"param\":\"10751073\",\"goto\":\"av\",\"play\":128211,\"danmaku\":1349,\"author\":\"御坂坂坂\",\"started\":0,\"total_count\":0,\"desc\":\"开黑聊天群号：605068637\",\"duration\":\"17:58\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：千万不要买东皇！原来这才是东皇太一的真面目\",\"cover\":\"https://i0.hdslb.com/bfs/archive/897c7bbb7f49a026e5bba0df31201ec0d91c3a18.jpg\",\"uri\":\"bilibili://video/10863457\",\"param\":\"10863457\",\"goto\":\"av\",\"play\":49841,\"danmaku\":147,\"author\":\"王者大事件\",\"started\":0,\"total_count\":0,\"desc\":\"本期出境的声音不是王者娘 不是王者娘 不是王者娘\\n而是老王！！！我！还是那个敲萌的王者娘(｡･∀･)ﾉﾞ\\n因为害羞所以老王友情出演本期视频配音！\\n献上一个娱乐向视频 提前祝大家端午节快乐 外出游玩也要注意安全哦 吧唧吧唧\",\"duration\":\"2:8\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：当干将莫邪大招甩出夺魂瞬间辉月金身会怎么样呢？\",\"cover\":\"https://i0.hdslb.com/bfs/archive/540f0e2df40b2e2c902a82aaf083d9d79a3e10a1.jpg\",\"uri\":\"bilibili://video/10816164\",\"param\":\"10816164\",\"goto\":\"av\",\"play\":93514,\"danmaku\":131,\"author\":\"游视界娱乐君\",\"started\":0,\"total_count\":0,\"desc\":\"王者荣耀：当干将莫邪大招甩出夺魂瞬间辉月金身会怎么样呢？\",\"duration\":\"1:30\",\"status\":0,\"attentions\":0},{\"title\":\"【王者荣耀】刘邦德古拉大战韩信！超精美原创同人定格动画！！\",\"cover\":\"https://i0.hdslb.com/bfs/archive/37e95e8840c96b51491a11dbbd67e0a9d7ece51d.jpg\",\"uri\":\"bilibili://video/10815570\",\"param\":\"10815570\",\"goto\":\"av\",\"play\":68273,\"danmaku\":237,\"author\":\"烂烂烂菠萝\",\"started\":0,\"total_count\":0,\"desc\":\"一帮定格的狂热分子，敌不过王者荣耀的诱惑，挑战12头身比例的定格偶动画。\",\"duration\":\"1:0\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：新英雄铠撕开面具，露出峡谷第一霸气的绝世容颜，技能图标也放出\",\"cover\":\"https://i0.hdslb.com/bfs/archive/48ea6bfa22024f0c16fc869a59b6808cd83fddd3.jpg\",\"uri\":\"bilibili://video/10519169\",\"param\":\"10519169\",\"goto\":\"av\",\"play\":342189,\"danmaku\":1270,\"author\":\"老王集锦\",\"started\":0,\"total_count\":0,\"desc\":\"转载自阳光宽频http://www.365yg.com/group/6419394020602020353/\\n迪哥的b站空间http://space.bilibili.com/27996286/#!/（迪哥已授权）\\n王者荣耀：新英雄铠撕开面具，露出峡谷第一霸气的绝世容颜\",\"duration\":\"2:51\",\"status\":0,\"attentions\":0},{\"title\":\"嗨氏王者荣耀：钻石局干将莫邪1级越塔杀貂蝉19人头\",\"cover\":\"https://i0.hdslb.com/bfs/archive/b4ba233c0c79a3dee436b6807a847040edf2840e.jpg\",\"uri\":\"bilibili://video/10874226\",\"param\":\"10874226\",\"goto\":\"av\",\"play\":103518,\"danmaku\":4209,\"author\":\"嗨氏丶\",\"started\":0,\"total_count\":0,\"desc\":\"嗨吃不够零食店：haichibugou.taobao.com  嗨氏商城：haibaoly.taobao.com 直播地址：www.huya.com/haishi  微博：http://weibo.com/haishihaishi  网易云音乐：嗨氏1229  百度贴吧：嗨氏，QQ：469929053\",\"duration\":\"36:25\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：芈月重做上架，技能真厉害，牵着大乔满街跑\",\"cover\":\"https://i0.hdslb.com/bfs/archive/450290c834c4374609242fa5f9f75d8694867231.jpg\",\"uri\":\"bilibili://video/10855014\",\"param\":\"10855014\",\"goto\":\"av\",\"play\":56019,\"danmaku\":410,\"author\":\"老王集锦\",\"started\":0,\"total_count\":0,\"desc\":\"转自今日头条 http://www.toutiao.com/i6424401932672041474/（侵删）\\n三月解说头条号 \\nhttp://www.toutiao.com/c/user/50655113920/#mid=50652975888\\n王者荣耀：芈月重做上架，技能真厉害，牵着大乔满街跑\",\"duration\":\"5:49\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：一段位移，六个随从，改版芈月模型特效一揽\",\"cover\":\"https://i0.hdslb.com/bfs/archive/312d59f42e891c3e3933d07e59d10041bd297d82.jpg\",\"uri\":\"bilibili://video/10829090\",\"param\":\"10829090\",\"goto\":\"av\",\"play\":121715,\"danmaku\":594,\"author\":\"沈清楠\",\"started\":0,\"total_count\":0,\"desc\":\"王者荣耀：一段位移，六个随从，改版芈月模型特效一揽\",\"duration\":\"3:19\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：完美躲开水晶攻击的bug，偷家必备啊\",\"cover\":\"https://i0.hdslb.com/bfs/archive/a7d1b998e00e5745caab449359d22c310fb38c01.jpg\",\"uri\":\"bilibili://video/10813895\",\"param\":\"10813895\",\"goto\":\"av\",\"play\":80214,\"danmaku\":174,\"author\":\"王者集中营\",\"started\":0,\"total_count\":0,\"desc\":\"王者超神荣耀\\n这个bug有点厉害啊\",\"duration\":\"1:4\",\"status\":0,\"attentions\":0},{\"title\":\"【王者荣耀娱乐向】震惊!李白竟然要反攻？！\",\"cover\":\"https://i0.hdslb.com/bfs/archive/c3cc0ab9af59f3fc67727a197d42e8c5159535f7.jpg\",\"uri\":\"bilibili://video/10877152\",\"param\":\"10877152\",\"goto\":\"av\",\"play\":23037,\"danmaku\":993,\"author\":\"临之安\",\"started\":0,\"total_count\":0,\"desc\":\"娱乐向，最强王者出门右走好不送。然后我要仗着自己可以写简介要说！！白龙马（视频中的韩信）你是受！！是受！受！\\n超任性(๑\\u2022̀ㅂ\\u2022́)و✧\",\"duration\":\"13:2\",\"status\":0,\"attentions\":0},{\"title\":\"手机搭配上这个神器，助你王者荣耀轻松五杀 【微创WEC科技】\",\"cover\":\"https://i0.hdslb.com/bfs/archive/0322108fa4f81aaa2d0df22a33cca6b6a273642c.jpg\",\"uri\":\"bilibili://video/10826291\",\"param\":\"10826291\",\"goto\":\"av\",\"play\":101053,\"danmaku\":562,\"author\":\"微创WEC科技\",\"started\":0,\"total_count\":0,\"desc\":\"手机搭配上这个神器，助你王者荣耀轻松五杀\",\"duration\":\"8:38\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀芈月重做讲解 这次天美是要芈月上天当女王了 裤裆里藏鸟我服\",\"cover\":\"https://i0.hdslb.com/bfs/archive/a77e93173a4fb6123a09cf88a9afa849701163ed.jpg\",\"uri\":\"bilibili://video/10855246\",\"param\":\"10855246\",\"goto\":\"av\",\"play\":29611,\"danmaku\":219,\"author\":\"手柄哥子俊\",\"started\":0,\"total_count\":0,\"desc\":\"王者荣耀芈月重做讲解 这次天美是要芈月上天当女王了 裤裆里藏鸟我服\",\"duration\":\"4:53\",\"status\":0,\"attentions\":0},{\"title\":\"【王者荣耀】露娜真重做了？这露娜大招再也不会断了！（国服第一露娜1V9）\",\"cover\":\"https://i0.hdslb.com/bfs/archive/284b2c372e66d9154c4729a54784c45a25661bbe.jpg\",\"uri\":\"bilibili://video/10777125\",\"param\":\"10777125\",\"goto\":\"av\",\"play\":93203,\"danmaku\":2253,\"author\":\"水一大魔王\",\"started\":0,\"total_count\":0,\"desc\":\"露娜真重做了？这露娜大招再也不会断了！（国服第一露娜1V9）\",\"duration\":\"13:2\",\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀：李白花式打野，3个野怪一招清？\",\"cover\":\"https://i0.hdslb.com/bfs/archive/5a11f414489018866384d94f0664124c1dbac36e.jpg\",\"uri\":\"bilibili://video/10732551\",\"param\":\"10732551\",\"goto\":\"av\",\"play\":244096,\"danmaku\":438,\"author\":\"沈清楠\",\"started\":0,\"total_count\":0,\"desc\":\"王者荣耀：李白花式打野，3个野怪一招清？\",\"duration\":\"1:1\",\"status\":0,\"attentions\":0},{\"title\":\"【王者荣耀】国服第一韩信1V9冲塔五杀暴走33杀！\",\"cover\":\"https://i0.hdslb.com/bfs/archive/fb9f84cfe0bcdf55d925b821ca3ffa03b58e6e40.jpg\",\"uri\":\"bilibili://video/10866506\",\"param\":\"10866506\",\"goto\":\"av\",\"play\":34274,\"danmaku\":2057,\"author\":\"水一大魔王\",\"started\":0,\"total_count\":0,\"desc\":\"国服第一韩信1V9冲塔五杀暴走33杀！\",\"duration\":\"16:36\",\"status\":0,\"attentions\":0},{\"title\":\"【王者荣耀】国服第一李白居然被送了528个人头，大西瓜的爱豆们居然如此疯狂！\",\"cover\":\"https://i0.hdslb.com/bfs/archive/9d4b010211499df5a2f9f9cd91d1cb79c6670207.jpg\",\"uri\":\"bilibili://video/10866598\",\"param\":\"10866598\",\"goto\":\"av\",\"play\":19097,\"danmaku\":118,\"author\":\"触手剑仙\",\"started\":0,\"total_count\":0,\"desc\":\"明天就是\\u201c528窝爱瓜节\\u201d了，小西瓜们居然如此疯狂，狂送爱豆人头！！！如此疯狂的事情已经火爆《王者荣耀》游戏圈了，快来围观吧！\",\"duration\":\"3:4\",\"status\":0,\"attentions\":0}]}\n     */\n\n\n    data class ItemsBean(var archive: List<ArchiveBean>) {\n\n        data class ArchiveBean(var title: String,\n                               var cover: String,\n                               var uri: String,\n                               var param: String,\n                               var goto: String,\n                               var play: Int,\n                               var danmaku: Int,\n                               var author: String,\n                               var started: Int,\n                               var total_count: Int,\n                               var desc: String,\n                               var duration: String,\n                               var status: Int,\n                               var attentions: Int) {\n            /**\n             * title : 王者荣耀：除了官配cp竟然还有这么多隐藏cp！你站哪一对？\n             * cover : https://i0.hdslb.com/bfs/archive/cd67aff55c3df93ecf5480e937d642f8869876b8.jpg\n             * uri : bilibili://video/10861684\n             * param : 10861684\n             * goto : av\n             * play : 38596\n             * danmaku : 1344\n             * author : 王者大事件\n             * started : 0\n             * total_count : 0\n             * desc : 新浪微博@王者大事件\n             * 该视频仅供娱乐 个人色彩占有居多 请不要在评论区打架！\n             * 另外剪完才发现嬴政和妲己的错了 真的不读书的坏处\n             * 以后BGM会放在左上角或者右上角 请各位求BGM的同学要做个细心的人哦\n             * 整理了一下CP配对 竟会有这么多 不过这么多CP最后一对才是真正的CP\n             * 不给反驳 嘿嘿！\n             * duration : 4:13\n             * status : 0\n             * attentions : 0\n             */\n\n\n        }\n    }\n\n    data class NavBean(var name: String,\n                       var total: Int,\n                       var pages: Int,\n                       var type: Int) {\n        /**\n         * name : 番剧\n         * total : 0\n         * pages : 0\n         * type : 1\n         */\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/search/Season.kt",
    "content": "package com.yoyiyi.soleil.bean.search\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 13:04\n * * 描述:\n */\n\ndata class Season(var code: Int,\n             var data: DataBean,\n             var message: String,\n             var ttl: Int) {\n\n    /**\n     * code : 0\n     * data : {\"items\":[{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"2932\",\"started\":0,\"status\":0,\"title\":\"打工吧！魔王大人\",\"total_count\":13,\"uri\":\"bilibili://bangumi/season/2932\"},{\"attentions\":0,\"cat_desc\":\"TV(2) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7ec9487f007c278733212908a6f607e4a245b1d4.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"1\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"1588\",\"started\":0,\"status\":0,\"title\":\"罪恶王冠\",\"total_count\":1,\"uri\":\"bilibili://bangumi/season/1588\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/29d001c8083a224da99b72239be5680c6ac907e7.jpg\",\"goto\":\"bangumi\",\"index\":\"12\",\"newest_cat\":\"tv\",\"newest_season\":\"第一季\",\"param\":\"6043\",\"started\":0,\"status\":0,\"title\":\"第六天魔王\",\"total_count\":-1,\"uri\":\"bilibili://bangumi/season/6043\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/41b4ae625c78944ebde3910ea16d8112b6bf1076.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"sp\",\"newest_season\":\"SP\",\"param\":\"291\",\"started\":0,\"status\":0,\"title\":\"魔弹之王与战姬\",\"total_count\":14,\"uri\":\"bilibili://bangumi/season/291\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/871040b2d1f51d94a6238beba89af8ba4cef75bf.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"146\",\"newest_cat\":\"tv\",\"newest_season\":\"游☆戏☆王 ZEXAL\",\"param\":\"159\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 ZEXAL\",\"total_count\":146,\"uri\":\"bilibili://bangumi/season/159\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ec29542c3b1526efd514c93d33b2fdd4f4021a70.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"180\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"157\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 GX\",\"total_count\":180,\"uri\":\"bilibili://bangumi/season/157\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/3467797f5bab8b178ca939da3b430c8636bb480c.jpg\",\"goto\":\"bangumi\",\"index\":\"6\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"6163\",\"started\":0,\"status\":0,\"title\":\"游戏王VRAINS\",\"total_count\":12,\"uri\":\"bilibili://bangumi/season/6163\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/dc99c5c10c3705fd5d0dbdbaf1ef1cf7e7595588.jpg\",\"goto\":\"bangumi\",\"index\":\"3\",\"newest_cat\":\"tv\",\"newest_season\":\"短篇动画\",\"param\":\"6008\",\"started\":0,\"status\":0,\"title\":\"梦王国与沉睡的100王子\",\"total_count\":10,\"uri\":\"bilibili://bangumi/season/6008\"},{\"attentions\":0,\"cat_desc\":\"TV(2) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/adedefcac8473e2b5ed94f03a9e870acd742a3f2.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"39\",\"newest_cat\":\"tv\",\"newest_season\":\"第二季\",\"param\":\"582\",\"started\":0,\"status\":0,\"title\":\"王者天下\",\"total_count\":39,\"uri\":\"bilibili://bangumi/season/582\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ce3b743cd661ad3edfa7f580d0ea388caf8e8987.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"224\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"3054\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 Duel Monsters\",\"total_count\":224,\"uri\":\"bilibili://bangumi/season/3054\"},{\"attentions\":0,\"cat_desc\":\"TV(2) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6c960a0dbb7cbe2b57f1a3ca4f547079d2aa5839.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"12\",\"newest_cat\":\"tv\",\"newest_season\":\"05年修改版\",\"param\":\"1823\",\"started\":0,\"status\":0,\"title\":\"勇者王GAOGAIGAR\",\"total_count\":12,\"uri\":\"bilibili://bangumi/season/1823\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/b3f9ffad82a1c70195958a564145b5cc713c1215.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"外传\",\"param\":\"1226\",\"started\":0,\"status\":0,\"title\":\"北斗神拳\",\"total_count\":13,\"uri\":\"bilibili://bangumi/season/1226\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/b5f4eb72d861ce0d647a4e7783f9d86bcecaf94f.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"43\",\"newest_cat\":\"tv\",\"newest_season\":\"WEB\",\"param\":\"5206\",\"started\":0,\"status\":0,\"title\":\"弱酸性百万亚瑟王\",\"total_count\":48,\"uri\":\"bilibili://bangumi/season/5206\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/650a0897c42bc3acb4d44865ef9c14d8e94f7512.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"20\",\"newest_cat\":\"tv\",\"newest_season\":\"第一季\",\"param\":\"5301\",\"started\":0,\"status\":0,\"title\":\"墓王之王\",\"total_count\":20,\"uri\":\"bilibili://bangumi/season/5301\"},{\"attentions\":0,\"cat_desc\":\"TV(4) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/54c3d07e6095aaa60821e3b6659bd6d03eaf27b8.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"2\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"1717\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 5D's\",\"total_count\":2,\"uri\":\"bilibili://bangumi/season/1717\"},{\"attentions\":0,\"cat_desc\":\"TV(3) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ac6971abe51749ed1af2026390e4fc87cbb37c73.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"5\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"3764\",\"started\":0,\"status\":0,\"title\":\"今天开始做魔王！\",\"total_count\":5,\"uri\":\"bilibili://bangumi/season/3764\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ff2c83562a5dae530f83d1449cd3be80b5865592.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"69\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"1887\",\"started\":0,\"status\":0,\"title\":\"日式面包王\",\"total_count\":69,\"uri\":\"bilibili://bangumi/season/1887\"},{\"attentions\":0,\"cat_desc\":\"TV(2) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6d20b92d10a00f9b00e248f99561a4c71c2d506a.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"第二季\",\"param\":\"1015\",\"started\":0,\"status\":0,\"title\":\"王牌投手 振臂高挥\",\"total_count\":14,\"uri\":\"bilibili://bangumi/season/1015\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/cbb7b1521827d79426d39aaa236721fc6560272d.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"26\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"3220\",\"started\":0,\"status\":0,\"title\":\"隐之王\",\"total_count\":26,\"uri\":\"bilibili://bangumi/season/3220\"},{\"attentions\":0,\"cat_desc\":\"剧场版(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/809204fcbb6c21e7c2a8965e8e700ebd90bbc7ef.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"1\",\"newest_cat\":\"movie\",\"newest_season\":\"剧场版\",\"param\":\"4654\",\"started\":0,\"status\":0,\"title\":\"游戏王\",\"total_count\":1,\"uri\":\"bilibili://bangumi/season/4654\"}],\"pages\":3,\"trackid\":\"2679500176269405229\"}\n     * message :\n     * ttl : 1\n     */\n\n\n    data class DataBean(var pages: Int,\n                   var trackid: String,\n                   var items: List<ItemsBean>) {\n        /**\n         * items : [{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"2932\",\"started\":0,\"status\":0,\"title\":\"打工吧！魔王大人\",\"total_count\":13,\"uri\":\"bilibili://bangumi/season/2932\"},{\"attentions\":0,\"cat_desc\":\"TV(2) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/7ec9487f007c278733212908a6f607e4a245b1d4.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"1\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"1588\",\"started\":0,\"status\":0,\"title\":\"罪恶王冠\",\"total_count\":1,\"uri\":\"bilibili://bangumi/season/1588\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/29d001c8083a224da99b72239be5680c6ac907e7.jpg\",\"goto\":\"bangumi\",\"index\":\"12\",\"newest_cat\":\"tv\",\"newest_season\":\"第一季\",\"param\":\"6043\",\"started\":0,\"status\":0,\"title\":\"第六天魔王\",\"total_count\":-1,\"uri\":\"bilibili://bangumi/season/6043\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/41b4ae625c78944ebde3910ea16d8112b6bf1076.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"sp\",\"newest_season\":\"SP\",\"param\":\"291\",\"started\":0,\"status\":0,\"title\":\"魔弹之王与战姬\",\"total_count\":14,\"uri\":\"bilibili://bangumi/season/291\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/871040b2d1f51d94a6238beba89af8ba4cef75bf.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"146\",\"newest_cat\":\"tv\",\"newest_season\":\"游☆戏☆王 ZEXAL\",\"param\":\"159\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 ZEXAL\",\"total_count\":146,\"uri\":\"bilibili://bangumi/season/159\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ec29542c3b1526efd514c93d33b2fdd4f4021a70.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"180\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"157\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 GX\",\"total_count\":180,\"uri\":\"bilibili://bangumi/season/157\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/3467797f5bab8b178ca939da3b430c8636bb480c.jpg\",\"goto\":\"bangumi\",\"index\":\"6\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"6163\",\"started\":0,\"status\":0,\"title\":\"游戏王VRAINS\",\"total_count\":12,\"uri\":\"bilibili://bangumi/season/6163\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/dc99c5c10c3705fd5d0dbdbaf1ef1cf7e7595588.jpg\",\"goto\":\"bangumi\",\"index\":\"3\",\"newest_cat\":\"tv\",\"newest_season\":\"短篇动画\",\"param\":\"6008\",\"started\":0,\"status\":0,\"title\":\"梦王国与沉睡的100王子\",\"total_count\":10,\"uri\":\"bilibili://bangumi/season/6008\"},{\"attentions\":0,\"cat_desc\":\"TV(2) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/adedefcac8473e2b5ed94f03a9e870acd742a3f2.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"39\",\"newest_cat\":\"tv\",\"newest_season\":\"第二季\",\"param\":\"582\",\"started\":0,\"status\":0,\"title\":\"王者天下\",\"total_count\":39,\"uri\":\"bilibili://bangumi/season/582\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ce3b743cd661ad3edfa7f580d0ea388caf8e8987.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"224\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"3054\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 Duel Monsters\",\"total_count\":224,\"uri\":\"bilibili://bangumi/season/3054\"},{\"attentions\":0,\"cat_desc\":\"TV(2) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6c960a0dbb7cbe2b57f1a3ca4f547079d2aa5839.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"12\",\"newest_cat\":\"tv\",\"newest_season\":\"05年修改版\",\"param\":\"1823\",\"started\":0,\"status\":0,\"title\":\"勇者王GAOGAIGAR\",\"total_count\":12,\"uri\":\"bilibili://bangumi/season/1823\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/b3f9ffad82a1c70195958a564145b5cc713c1215.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"外传\",\"param\":\"1226\",\"started\":0,\"status\":0,\"title\":\"北斗神拳\",\"total_count\":13,\"uri\":\"bilibili://bangumi/season/1226\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/b5f4eb72d861ce0d647a4e7783f9d86bcecaf94f.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"43\",\"newest_cat\":\"tv\",\"newest_season\":\"WEB\",\"param\":\"5206\",\"started\":0,\"status\":0,\"title\":\"弱酸性百万亚瑟王\",\"total_count\":48,\"uri\":\"bilibili://bangumi/season/5206\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/650a0897c42bc3acb4d44865ef9c14d8e94f7512.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"20\",\"newest_cat\":\"tv\",\"newest_season\":\"第一季\",\"param\":\"5301\",\"started\":0,\"status\":0,\"title\":\"墓王之王\",\"total_count\":20,\"uri\":\"bilibili://bangumi/season/5301\"},{\"attentions\":0,\"cat_desc\":\"TV(4) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/54c3d07e6095aaa60821e3b6659bd6d03eaf27b8.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"2\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"1717\",\"started\":0,\"status\":0,\"title\":\"游☆戏☆王 5D's\",\"total_count\":2,\"uri\":\"bilibili://bangumi/season/1717\"},{\"attentions\":0,\"cat_desc\":\"TV(3) OVA/OAD/SP(1)\",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ac6971abe51749ed1af2026390e4fc87cbb37c73.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"5\",\"newest_cat\":\"ova\",\"newest_season\":\"OVA\",\"param\":\"3764\",\"started\":0,\"status\":0,\"title\":\"今天开始做魔王！\",\"total_count\":5,\"uri\":\"bilibili://bangumi/season/3764\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/ff2c83562a5dae530f83d1449cd3be80b5865592.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"69\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"1887\",\"started\":0,\"status\":0,\"title\":\"日式面包王\",\"total_count\":69,\"uri\":\"bilibili://bangumi/season/1887\"},{\"attentions\":0,\"cat_desc\":\"TV(2) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/6d20b92d10a00f9b00e248f99561a4c71c2d506a.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"13\",\"newest_cat\":\"tv\",\"newest_season\":\"第二季\",\"param\":\"1015\",\"started\":0,\"status\":0,\"title\":\"王牌投手 振臂高挥\",\"total_count\":14,\"uri\":\"bilibili://bangumi/season/1015\"},{\"attentions\":0,\"cat_desc\":\"TV(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/cbb7b1521827d79426d39aaa236721fc6560272d.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"26\",\"newest_cat\":\"tv\",\"newest_season\":\"TV\",\"param\":\"3220\",\"started\":0,\"status\":0,\"title\":\"隐之王\",\"total_count\":26,\"uri\":\"bilibili://bangumi/season/3220\"},{\"attentions\":0,\"cat_desc\":\"剧场版(1) \",\"cover\":\"https://i0.hdslb.com/bfs/bangumi/809204fcbb6c21e7c2a8965e8e700ebd90bbc7ef.jpg\",\"finish\":1,\"goto\":\"bangumi\",\"index\":\"1\",\"newest_cat\":\"movie\",\"newest_season\":\"剧场版\",\"param\":\"4654\",\"started\":0,\"status\":0,\"title\":\"游戏王\",\"total_count\":1,\"uri\":\"bilibili://bangumi/season/4654\"}]\n         * pages : 3\n         * trackid : 2679500176269405229\n         */\n\n\n        data class ItemsBean(var attentions: Int,\n                        var cat_desc: String,\n                        var cover: String,\n                        var finish: Int,\n                        var goto: String,\n                        var index: String,\n                        var newest_cat: String,\n                        var newest_season: String,\n                        var param: String,\n                        var started: Int,\n                        var status: Int,\n                        var title: String,\n                        var total_count: Int,\n                        var uri: String) {\n            /**\n             * attentions : 0\n             * cat_desc : TV(1)\n             * cover : https://i0.hdslb.com/bfs/bangumi/15992a6e1d737ae0319ab3788f598c223501d043.jpg\n             * finish : 1\n             * goto : bangumi\n             * index : 13\n             * newest_cat : tv\n             * newest_season : TV\n             * param : 2932\n             * started : 0\n             * status : 0\n             * title : 打工吧！魔王大人\n             * total_count : 13\n             * uri : bilibili://bangumi/season/2932\n             */\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/search/Up.kt",
    "content": "package com.yoyiyi.soleil.bean.search\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 13:10\n * * 描述:\n */\n\ndata class Up(var code: Int,\n              var data: DataBean,\n              var message: String,\n              var ttl: Int) {\n\n    /**\n     * code : 0\n     * data : {\"trackid\":\"9958936878016557296\",\"pages\":50,\"items\":[{\"title\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/face/2edf4a4f534869a63158d13a4b6b9676d75f1e0a.jpg\",\"uri\":\"bilibili://author/423895\",\"param\":\"423895\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"weibo.com/573244552\",\"fans\":1115875,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":382,\"status\":0,\"attentions\":0},{\"title\":\"靠脸吃饭的徐大王\",\"cover\":\"https://i0.hdslb.com/bfs/face/0e6e0f313a195e293d4ee6ae8ab86a3074abb315.jpg\",\"uri\":\"bilibili://author/16794231\",\"param\":\"16794231\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博@靠脸吃饭的徐大王\",\"fans\":862564,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":419,\"status\":0,\"attentions\":0},{\"title\":\"大胃王密子君\",\"cover\":\"https://i0.hdslb.com/bfs/face/b8d97724442311a2249e193294fa6bc6994a759d.jpg\",\"uri\":\"bilibili://author/3032988\",\"param\":\"3032988\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"让我们一起做一个快乐的吃货吧！\",\"fans\":811366,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":203,\"status\":0,\"attentions\":0},{\"title\":\"请叫我王胖子\",\"cover\":\"https://i0.hdslb.com/bfs/face/00d5749bae095160d062fed1ac96c7f54edb1806.jpg\",\"uri\":\"bilibili://author/1438811\",\"param\":\"1438811\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博@CV王胖子\\r\\n我就是一个喜欢配音的胖子\\r\\n哦，对了，没事还唱唱歌\",\"fans\":638761,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":62,\"status\":0,\"attentions\":0},{\"title\":\"Skm破音小魔王\",\"cover\":\"https://i0.hdslb.com/bfs/face/6c9745b1a1cb3ed555038173504731090002ba4a.jpg\",\"uri\":\"bilibili://author/28220117\",\"param\":\"28220117\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"性别男爱好抖不卖骚不卖腐个体户歌路野没后期没整容没化妆不信拉倒直男贼抗骂吃我一发大电音！\",\"fans\":415403,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":111,\"status\":0,\"attentions\":0},{\"title\":\"老美王霸胆\",\"cover\":\"https://i0.hdslb.com/bfs/face/55a3de63bf59205d05521e9b26622048827eda8d.jpg\",\"uri\":\"bilibili://author/14558631\",\"param\":\"14558631\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博：@老美王霸胆 | 微信：王霸胆 | FB：王霸胆 | YouTube：王霸胆 | 我是歪果老司机！快上车吧～\",\"fans\":408256,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":93,\"status\":0,\"attentions\":0},{\"title\":\"大胃王甄能吃\",\"cover\":\"https://i0.hdslb.com/bfs/face/76025e85e08631cbb09ab1db2256d8e16ecf38b5.jpg\",\"uri\":\"bilibili://author/51703585\",\"param\":\"51703585\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"大胃王直播真人秀，微博、微信公众号关注：大胃王甄能吃，商务合作微信：13121750686\",\"fans\":270845,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":102,\"status\":0,\"attentions\":0},{\"title\":\"大胃王朵一\",\"cover\":\"https://i0.hdslb.com/bfs/face/ff917fa52e21e7dede9d21aec12bfbddc5fa626f.jpg\",\"uri\":\"bilibili://author/63023562\",\"param\":\"63023562\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博：大胃王朵一    我一吃起东西来，我自己都害怕！❤️\",\"fans\":200117,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":54,\"status\":0,\"attentions\":0},{\"title\":\"小M呜喵王\",\"cover\":\"https://i0.hdslb.com/bfs/face/0cda8a8fc3ee81046dd7c0dbcb3e1bf15d3fbca1.jpg\",\"uri\":\"bilibili://author/346059\",\"param\":\"346059\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"weibo.com/MWumiao，群号206904401 。不俗套，不跟风，不违心。合作请微博私信。\",\"fans\":190446,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":98,\"status\":0,\"attentions\":0},{\"title\":\"故事王StoryMan\",\"cover\":\"https://i0.hdslb.com/bfs/face/b55679bd383423cb02f0992e44f19a68c6f5fd1b.jpg\",\"uri\":\"bilibili://author/38002736\",\"param\":\"38002736\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"一档十分正经，很有节操的脑洞综艺！\\r\\n官方微博：故事王_StoryMan\",\"fans\":183335,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":12,\"status\":0,\"attentions\":0},{\"title\":\"仓大王\",\"cover\":\"https://i0.hdslb.com/bfs/face/1fa3bdb0aa9abfdc8dc5fe849e116e978dc7f2c8.jpg\",\"uri\":\"bilibili://author/23378372\",\"param\":\"23378372\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"大家好我是骨陌陌！\\r\\n微博@妖糖-骨陌 \\r\\n欢迎关注！\",\"fans\":169743,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":69,\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀小药店\",\"cover\":\"https://i0.hdslb.com/bfs/face/9806adc42d70a85e8bd7ea9eb6102620f08a2d30.jpg\",\"uri\":\"bilibili://author/40010247\",\"param\":\"40010247\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"王者有毒，我们有药。我是小药店，请新来的病友们加二号群：633025449\",\"fans\":151511,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":170,\"status\":0,\"attentions\":0},{\"title\":\"大胃王阿伦\",\"cover\":\"https://i0.hdslb.com/bfs/face/daf15f80eaf9aadd6ea2a95e66a11422ebc4c919.jpg\",\"uri\":\"bilibili://author/88422753\",\"param\":\"88422753\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"如果说我像食物一样喜欢你，那么一定是特别特别喜欢吧\",\"fans\":135092,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":42,\"status\":0,\"attentions\":0},{\"title\":\"明王道\",\"cover\":\"https://i0.hdslb.com/bfs/face/d6f255605655a62036295fd2d906645042193261.jpg\",\"uri\":\"bilibili://author/6231285\",\"param\":\"6231285\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"进入爆肝模式~ 日语学不好？你很怠惰呢 微信公众号：明王道日语\",\"fans\":128870,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":89,\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀-表哥\",\"cover\":\"https://i0.hdslb.com/bfs/face/c0999178d7b520d3d491be2a70038066d2494d36.jpg\",\"uri\":\"bilibili://author/13729096\",\"param\":\"13729096\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"看个视频几十分钟 咱们不如点个关注咱们慢慢处 斗鱼直播间1947923   新浪微博 王者荣耀-表哥   \",\"fans\":126477,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":64,\"status\":0,\"attentions\":0},{\"title\":\"王吕叉Lional\",\"cover\":\"https://i0.hdslb.com/bfs/face/dbbeb9f92c4e48414c0c79af088b8e4161acba8e.jpg\",\"uri\":\"bilibili://author/2815537\",\"param\":\"2815537\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博：weibo.com/nobunaga1987\",\"fans\":126043,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":22,\"status\":0,\"attentions\":0},{\"title\":\"毕竟王稳健\",\"cover\":\"https://i0.hdslb.com/bfs/face/e89dc3d49c494f262d8caa1496411060cd67c42a.jpg\",\"uri\":\"bilibili://author/10032675\",\"param\":\"10032675\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博:王稳健233，每天直播，喜欢的话硬币收藏充个电啦\",\"fans\":115334,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":126,\"status\":0,\"attentions\":0},{\"title\":\"水一大魔王\",\"cover\":\"https://i0.hdslb.com/bfs/face/2a94cb7a5a4041ed832607da02a754e49ce1efab.jpg\",\"uri\":\"bilibili://author/1950209\",\"param\":\"1950209\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博水一亦寒千万别关注\",\"fans\":114944,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":190,\"status\":0,\"attentions\":0},{\"title\":\"王朝\",\"cover\":\"https://i0.hdslb.com/bfs/face/683abbf64154041c567d02488c6a3ab51f6006c3.jpg\",\"uri\":\"bilibili://author/617269\",\"param\":\"617269\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博@王小朝在修行 关注会有好运气\",\"fans\":113936,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":26,\"status\":0,\"attentions\":0},{\"title\":\"女王泡面\",\"cover\":\"https://i0.hdslb.com/bfs/face/d68b5907030033407d9ef34114058ace3d6b8179.jpg\",\"uri\":\"bilibili://author/2539073\",\"param\":\"2539073\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"直播地址：http://live.bilibili.com/61539 周一~周五每晚8点 不见不散\",\"fans\":113741,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":11,\"status\":0,\"attentions\":0}]}\n     * message :\n     * ttl : 1\n     */\n\n\n    data class DataBean(var trackid: String,\n                        var pages: Int,\n                        var items: List<ItemsBean>) {\n        /**\n         * trackid : 9958936878016557296\n         * pages : 50\n         * items : [{\"title\":\"怕上火暴王老菊\",\"cover\":\"https://i0.hdslb.com/bfs/face/2edf4a4f534869a63158d13a4b6b9676d75f1e0a.jpg\",\"uri\":\"bilibili://author/423895\",\"param\":\"423895\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"weibo.com/573244552\",\"fans\":1115875,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":382,\"status\":0,\"attentions\":0},{\"title\":\"靠脸吃饭的徐大王\",\"cover\":\"https://i0.hdslb.com/bfs/face/0e6e0f313a195e293d4ee6ae8ab86a3074abb315.jpg\",\"uri\":\"bilibili://author/16794231\",\"param\":\"16794231\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博@靠脸吃饭的徐大王\",\"fans\":862564,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":419,\"status\":0,\"attentions\":0},{\"title\":\"大胃王密子君\",\"cover\":\"https://i0.hdslb.com/bfs/face/b8d97724442311a2249e193294fa6bc6994a759d.jpg\",\"uri\":\"bilibili://author/3032988\",\"param\":\"3032988\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"让我们一起做一个快乐的吃货吧！\",\"fans\":811366,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":203,\"status\":0,\"attentions\":0},{\"title\":\"请叫我王胖子\",\"cover\":\"https://i0.hdslb.com/bfs/face/00d5749bae095160d062fed1ac96c7f54edb1806.jpg\",\"uri\":\"bilibili://author/1438811\",\"param\":\"1438811\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博@CV王胖子\\r\\n我就是一个喜欢配音的胖子\\r\\n哦，对了，没事还唱唱歌\",\"fans\":638761,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":62,\"status\":0,\"attentions\":0},{\"title\":\"Skm破音小魔王\",\"cover\":\"https://i0.hdslb.com/bfs/face/6c9745b1a1cb3ed555038173504731090002ba4a.jpg\",\"uri\":\"bilibili://author/28220117\",\"param\":\"28220117\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"性别男爱好抖不卖骚不卖腐个体户歌路野没后期没整容没化妆不信拉倒直男贼抗骂吃我一发大电音！\",\"fans\":415403,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":111,\"status\":0,\"attentions\":0},{\"title\":\"老美王霸胆\",\"cover\":\"https://i0.hdslb.com/bfs/face/55a3de63bf59205d05521e9b26622048827eda8d.jpg\",\"uri\":\"bilibili://author/14558631\",\"param\":\"14558631\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博：@老美王霸胆 | 微信：王霸胆 | FB：王霸胆 | YouTube：王霸胆 | 我是歪果老司机！快上车吧～\",\"fans\":408256,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":93,\"status\":0,\"attentions\":0},{\"title\":\"大胃王甄能吃\",\"cover\":\"https://i0.hdslb.com/bfs/face/76025e85e08631cbb09ab1db2256d8e16ecf38b5.jpg\",\"uri\":\"bilibili://author/51703585\",\"param\":\"51703585\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"大胃王直播真人秀，微博、微信公众号关注：大胃王甄能吃，商务合作微信：13121750686\",\"fans\":270845,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":102,\"status\":0,\"attentions\":0},{\"title\":\"大胃王朵一\",\"cover\":\"https://i0.hdslb.com/bfs/face/ff917fa52e21e7dede9d21aec12bfbddc5fa626f.jpg\",\"uri\":\"bilibili://author/63023562\",\"param\":\"63023562\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博：大胃王朵一    我一吃起东西来，我自己都害怕！❤️\",\"fans\":200117,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":54,\"status\":0,\"attentions\":0},{\"title\":\"小M呜喵王\",\"cover\":\"https://i0.hdslb.com/bfs/face/0cda8a8fc3ee81046dd7c0dbcb3e1bf15d3fbca1.jpg\",\"uri\":\"bilibili://author/346059\",\"param\":\"346059\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"weibo.com/MWumiao，群号206904401 。不俗套，不跟风，不违心。合作请微博私信。\",\"fans\":190446,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":98,\"status\":0,\"attentions\":0},{\"title\":\"故事王StoryMan\",\"cover\":\"https://i0.hdslb.com/bfs/face/b55679bd383423cb02f0992e44f19a68c6f5fd1b.jpg\",\"uri\":\"bilibili://author/38002736\",\"param\":\"38002736\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"一档十分正经，很有节操的脑洞综艺！\\r\\n官方微博：故事王_StoryMan\",\"fans\":183335,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":12,\"status\":0,\"attentions\":0},{\"title\":\"仓大王\",\"cover\":\"https://i0.hdslb.com/bfs/face/1fa3bdb0aa9abfdc8dc5fe849e116e978dc7f2c8.jpg\",\"uri\":\"bilibili://author/23378372\",\"param\":\"23378372\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"大家好我是骨陌陌！\\r\\n微博@妖糖-骨陌 \\r\\n欢迎关注！\",\"fans\":169743,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":69,\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀小药店\",\"cover\":\"https://i0.hdslb.com/bfs/face/9806adc42d70a85e8bd7ea9eb6102620f08a2d30.jpg\",\"uri\":\"bilibili://author/40010247\",\"param\":\"40010247\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"王者有毒，我们有药。我是小药店，请新来的病友们加二号群：633025449\",\"fans\":151511,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":170,\"status\":0,\"attentions\":0},{\"title\":\"大胃王阿伦\",\"cover\":\"https://i0.hdslb.com/bfs/face/daf15f80eaf9aadd6ea2a95e66a11422ebc4c919.jpg\",\"uri\":\"bilibili://author/88422753\",\"param\":\"88422753\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"如果说我像食物一样喜欢你，那么一定是特别特别喜欢吧\",\"fans\":135092,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":42,\"status\":0,\"attentions\":0},{\"title\":\"明王道\",\"cover\":\"https://i0.hdslb.com/bfs/face/d6f255605655a62036295fd2d906645042193261.jpg\",\"uri\":\"bilibili://author/6231285\",\"param\":\"6231285\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"进入爆肝模式~ 日语学不好？你很怠惰呢 微信公众号：明王道日语\",\"fans\":128870,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":89,\"status\":0,\"attentions\":0},{\"title\":\"王者荣耀-表哥\",\"cover\":\"https://i0.hdslb.com/bfs/face/c0999178d7b520d3d491be2a70038066d2494d36.jpg\",\"uri\":\"bilibili://author/13729096\",\"param\":\"13729096\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"看个视频几十分钟 咱们不如点个关注咱们慢慢处 斗鱼直播间1947923   新浪微博 王者荣耀-表哥   \",\"fans\":126477,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":64,\"status\":0,\"attentions\":0},{\"title\":\"王吕叉Lional\",\"cover\":\"https://i0.hdslb.com/bfs/face/dbbeb9f92c4e48414c0c79af088b8e4161acba8e.jpg\",\"uri\":\"bilibili://author/2815537\",\"param\":\"2815537\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博：weibo.com/nobunaga1987\",\"fans\":126043,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":22,\"status\":0,\"attentions\":0},{\"title\":\"毕竟王稳健\",\"cover\":\"https://i0.hdslb.com/bfs/face/e89dc3d49c494f262d8caa1496411060cd67c42a.jpg\",\"uri\":\"bilibili://author/10032675\",\"param\":\"10032675\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"微博:王稳健233，每天直播，喜欢的话硬币收藏充个电啦\",\"fans\":115334,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":126,\"status\":0,\"attentions\":0},{\"title\":\"水一大魔王\",\"cover\":\"https://i0.hdslb.com/bfs/face/2a94cb7a5a4041ed832607da02a754e49ce1efab.jpg\",\"uri\":\"bilibili://author/1950209\",\"param\":\"1950209\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博水一亦寒千万别关注\",\"fans\":114944,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":190,\"status\":0,\"attentions\":0},{\"title\":\"王朝\",\"cover\":\"https://i0.hdslb.com/bfs/face/683abbf64154041c567d02488c6a3ab51f6006c3.jpg\",\"uri\":\"bilibili://author/617269\",\"param\":\"617269\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"新浪微博@王小朝在修行 关注会有好运气\",\"fans\":113936,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":26,\"status\":0,\"attentions\":0},{\"title\":\"女王泡面\",\"cover\":\"https://i0.hdslb.com/bfs/face/d68b5907030033407d9ef34114058ace3d6b8179.jpg\",\"uri\":\"bilibili://author/2539073\",\"param\":\"2539073\",\"goto\":\"author\",\"started\":0,\"total_count\":0,\"sign\":\"直播地址：http://live.bilibili.com/61539 周一~周五每晚8点 不见不散\",\"fans\":113741,\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"archives\":11,\"status\":0,\"attentions\":0}]\n         */\n\n\n        data class ItemsBean(var title: String,\n                             var cover: String,\n                             var uri: String,\n                             var param: String,\n                             var goto: String,\n                             var started: Int,\n                             var total_count: Int,\n                             var sign: String,\n                             var fans: Int,\n                             var official_verify: OfficialVerifyBean,\n                             var archives: Int,\n                             var status: Int,\n                             var attentions: Int) {\n            /**\n             * title : 怕上火暴王老菊\n             * cover : https://i0.hdslb.com/bfs/face/2edf4a4f534869a63158d13a4b6b9676d75f1e0a.jpg\n             * uri : bilibili://author/423895\n             * param : 423895\n             * goto : author\n             * started : 0\n             * total_count : 0\n             * sign : weibo.com/573244552\n             * fans : 1115875\n             * official_verify : {\"type\":-1,\"desc\":\"\"}\n             * archives : 382\n             * status : 0\n             * attentions : 0\n             */\n\n\n            data class OfficialVerifyBean(var type: Int,\n                                          var desc: String) {\n                /**\n                 * type : -1\n                 * desc :\n                 */\n\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/user/MulUpDetail.kt",
    "content": "package com.yoyiyi.soleil.bean.user\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 11:40\n * * 描述:up详情\n */\n\nclass MulUpDetail(var title: String? = null,\n                  var itemTypez: Int = 0,\n                  var position: Int = 0,\n                  var count: Int = 0,\n                  var spanSize: Int = 0,\n                  var archiveBean: UpDetail.DataBean.ArchiveBean.ItemBean? = null,\n                  var favouriteBean: UpDetail.DataBean.FavouriteBean.ItemBeanX? = null,\n                  var favourite: UpDetail.DataBean.FavouriteBean? = null,\n                  var archive: UpDetail.DataBean.ArchiveBean? = null,\n                  var setting: UpDetail.DataBean.SettingBean? = null,\n                  var live: UpDetail.DataBean.LiveBean? = null,\n                  var state: Int = 0) : MultiItemEntity {\n\n\n    override fun getItemType(): Int = itemTypez\n\n\n    companion object {\n        val ONE_SPAN_SIZE = 1// 占2\n        val TWO_SPAN_SIZE = 2// 占1\n\n        val TYPE_SUBMITED_VIDEO_ELEC = 1\n        val TYPE_SUBMITED_VIDEO_ITEM = 2\n        val TYPE_FAVOURITE_ITEM = 3\n\n        val TYPE_ARCHIVE_LIVE = 4//直播\n        val TYPE_ARCHIVE_HEAD = 5//头部\n        val TYPE_ARCHIVE_ALL_SUBMIT_VIDEO = 6//全部投稿\n        val TYPE_ARCHIVE_FAVOURITE = 7//收藏夹\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/user/UpDetail.kt",
    "content": "package com.yoyiyi.soleil.bean.user\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 14:45\n * * 描述:up主信息\n */\n\ndata class UpDetail(var code: Int,\n               var data: DataBean,\n               var message: String,\n               var ttl: Int) {\n\n    /**\n     * code : 0\n     * data : {\"archive\":{\"count\":463,\"item\":[{\"cover\":\"http://i0.hdslb.com/bfs/archive/304cb7edd138293dbc2ccd5554b9b03b7e52b113.jpg\",\"ctime\":1497432336,\"danmaku\":58,\"duration\":444,\"goto\":\"av\",\"param\":\"11293955\",\"play\":727,\"title\":\"【耳机党福利】巧克力千层蛋糕，COOKING ASMR\",\"uri\":\"bilibili://video/11293955\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/9e946c659f7d95f74de72f2429d484fb0002e37f.jpg\",\"ctime\":1497432336,\"danmaku\":15,\"duration\":644,\"goto\":\"av\",\"param\":\"11206987\",\"play\":841,\"title\":\"【令人满意的糕点装饰技艺】第五集！镜面蛋糕的制作\",\"uri\":\"bilibili://video/11206987\"},{\"cover\":\"http://i0.hdslb.com/bfs/archive/211051992ad3545af4e1ac573a6e36e2c92ca23f.jpg\",\"ctime\":1497432336,\"danmaku\":49,\"duration\":470,\"goto\":\"av\",\"param\":\"11264487\",\"play\":1368,\"title\":\"【深夜火锅】韩式螃蟹什锦火锅\",\"uri\":\"bilibili://video/11264487\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/fc08e4203ec42093ffc472291da7de78a3f63eb5.jpg\",\"ctime\":1497432336,\"danmaku\":33,\"duration\":218,\"goto\":\"av\",\"param\":\"11207326\",\"play\":695,\"title\":\"【深夜火锅】 辣炒年糕浓汤\",\"uri\":\"bilibili://video/11207326\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/9cf37eacafce533b30b0c22b00ea0362aa66e6c6.jpg\",\"ctime\":1497432336,\"danmaku\":3,\"duration\":66,\"goto\":\"av\",\"param\":\"11295114\",\"play\":956,\"title\":\"【一分钟快手料理】好吃的家常卤肉，只需要这个小秘诀！\",\"uri\":\"bilibili://video/11295114\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/ca5cf4c5558a85cb6d2adc7bd678db3a9079d1b9.jpg\",\"ctime\":1497432336,\"danmaku\":154,\"duration\":189,\"goto\":\"av\",\"param\":\"11294225\",\"play\":11714,\"title\":\"啊长长的丝～香脆拉丝芝士条！\",\"uri\":\"bilibili://video/11294225\"},{\"cover\":\"http://i0.hdslb.com/bfs/archive/83b085d5863672ea7dea3bbe48bc38acba466a2f.jpg\",\"ctime\":1497432336,\"danmaku\":90,\"duration\":424,\"goto\":\"av\",\"param\":\"11293906\",\"play\":2380,\"title\":\"【耳机党福利】巧克力淋面年轮蛋糕，COOKING ASMR\",\"uri\":\"bilibili://video/11293906\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/7c3ad28d20d6f49e151ef966f2cca3be267d7d90.jpg\",\"ctime\":1497432336,\"danmaku\":61,\"duration\":865,\"goto\":\"av\",\"param\":\"11206943\",\"play\":2117,\"title\":\"【令人满意的糕点装饰技艺】第四集！蛋糕和纸杯蛋糕的装饰\",\"uri\":\"bilibili://video/11206943\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/3cdd6d356c5a5281a39eda41d6f4348c3d916168.jpg\",\"ctime\":1497432336,\"danmaku\":28,\"duration\":180,\"goto\":\"av\",\"param\":\"11207264\",\"play\":1478,\"title\":\"【深夜火锅】韩国鱼饼辣年糕酱汤\",\"uri\":\"bilibili://video/11207264\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/f057b3935a388043c18bebb4bcb91e42d5a209ee.jpg\",\"ctime\":1497432336,\"danmaku\":16,\"duration\":49,\"goto\":\"av\",\"param\":\"11295021\",\"play\":7959,\"title\":\"【一分钟快手料理】超好吃的咖喱炒面\",\"uri\":\"bilibili://video/11295021\"}]},\"card\":{\"DisplayRank\":\"\",\"approve\":false,\"article\":0,\"attention\":57,\"birthday\":\"\",\"description\":\"\",\"face\":\"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\"fans\":66301,\"friend\":0,\"level_info\":{\"current_exp\":10610,\"current_level\":4,\"current_min\":4500,\"next_exp\":10800},\"mid\":\"12617707\",\"name\":\"炒鸡饿吃苹果还是饿\",\"nameplate\":{\"condition\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"name\":\"\",\"nid\":0},\"official_verify\":{\"desc\":\"\",\"type\":-1},\"pendant\":{\"expire\":0,\"image\":\"\",\"name\":\"\",\"pid\":0},\"place\":\"\",\"rank\":\"\",\"regtime\":0,\"sex\":\"保密\",\"sign\":\"吃货属性的YouTube搬运高产软妹子！微博@炒鸡饿同学 爱你萌～\",\"spacesta\":0,\"vip\":{\"accessStatus\":1,\"dueRemark\":\"\",\"vipDueDate\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"vipType\":0}},\"elec\":{\"count\":1,\"elec_num\":0,\"elec_set\":{\"elec_list\":[{\"elec_num\":20,\"is_customize\":0,\"title\":\"20电池\"},{\"elec_num\":60,\"is_customize\":0,\"title\":\"60电池\"},{\"elec_num\":450,\"is_customize\":0,\"title\":\"450电池\"},{\"elec_num\":880,\"is_customize\":0,\"title\":\"880电池\"},{\"elec_num\":0,\"is_customize\":1,\"max_elec\":99999,\"min_elec\":20,\"title\":\"自定义\"}],\"elec_theme\":0,\"integrity_rate\":10,\"rmb_rate\":10,\"round_mode\":0},\"show\":false,\"total\":5},\"favourite\":{\"count\":2,\"item\":[{\"atten_count\":0,\"cover\":[{\"aid\":9581900,\"pic\":\"http://i2.hdslb.com/bfs/archive/28cfbe0a9a8720da4294dc554cc7ef89e745205b.jpg\"},{\"aid\":10378710,\"pic\":\"http://i2.hdslb.com/bfs/archive/f15b4fcea101703949a878e70ad69ae43fea636f.jpg\"},{\"aid\":4127412,\"pic\":\"http://i0.hdslb.com/bfs/archive/b20386ac55b3d5d85bcc930367856086fcbdcc8b.jpg\"}],\"ctime\":1496702376,\"cur_count\":4,\"fid\":65954070,\"max_count\":999,\"mid\":12617707,\"mtime\":1496702411,\"name\":\"炒鸡的音乐收藏\",\"state\":2},{\"atten_count\":0,\"cover\":[{\"aid\":5730281,\"pic\":\"http://i1.hdslb.com/bfs/archive/0f646784b8a1c17121beaa66c1a532c802cf8d23.jpg\"},{\"aid\":1813356,\"pic\":\"http://i0.hdslb.com/bfs/archive/92a8ef8b8b89b395aa2338348e1b8de0f73b7e36.jpg\"},{\"aid\":3192469,\"pic\":\"http://i1.hdslb.com/bfs/archive/c4fddb3636de192f71a3d424da5a22f7bb475798.jpg\"}],\"ctime\":1496701790,\"cur_count\":24,\"fid\":65953802,\"max_count\":999,\"mid\":12617707,\"mtime\":1496702335,\"name\":\"炒鸡的美食剧集收藏\",\"state\":2}]},\"images\":{\"imgUrl\":\"\"},\"live\":{\"cover\":\"http://i0.hdslb.com/bfs/live/3aeabf55c749a9e6ee4cad603e77a61299388d6f.jpg\",\"liveStatus\":0,\"online\":0,\"roomStatus\":1,\"roomid\":1327411,\"roundStatus\":1,\"title\":\"炒鸡饿吃苹果还是饿的直播间\",\"url\":\"http://live.bilibili.com/1327411\"},\"relation\":1,\"setting\":{\"bangumi\":0,\"coins_video\":0,\"fav_video\":1,\"groups\":0,\"played_game\":0,\"submited_video\":1,\"tags\":0}}\n     * message :\n     * ttl : 1\n     */\n\n\n    data class DataBean(var archive: ArchiveBean,\n                   var card: CardBean,\n                   var elec: ElecBean,\n                   var favourite: FavouriteBean,\n                   var images: ImagesBean,\n                   var live: LiveBean,\n                   var relation: Int,\n                   var setting: SettingBean) {\n        /**\n         * archive : {\"count\":463,\"item\":[{\"cover\":\"http://i0.hdslb.com/bfs/archive/304cb7edd138293dbc2ccd5554b9b03b7e52b113.jpg\",\"ctime\":1497432336,\"danmaku\":58,\"duration\":444,\"goto\":\"av\",\"param\":\"11293955\",\"play\":727,\"title\":\"【耳机党福利】巧克力千层蛋糕，COOKING ASMR\",\"uri\":\"bilibili://video/11293955\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/9e946c659f7d95f74de72f2429d484fb0002e37f.jpg\",\"ctime\":1497432336,\"danmaku\":15,\"duration\":644,\"goto\":\"av\",\"param\":\"11206987\",\"play\":841,\"title\":\"【令人满意的糕点装饰技艺】第五集！镜面蛋糕的制作\",\"uri\":\"bilibili://video/11206987\"},{\"cover\":\"http://i0.hdslb.com/bfs/archive/211051992ad3545af4e1ac573a6e36e2c92ca23f.jpg\",\"ctime\":1497432336,\"danmaku\":49,\"duration\":470,\"goto\":\"av\",\"param\":\"11264487\",\"play\":1368,\"title\":\"【深夜火锅】韩式螃蟹什锦火锅\",\"uri\":\"bilibili://video/11264487\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/fc08e4203ec42093ffc472291da7de78a3f63eb5.jpg\",\"ctime\":1497432336,\"danmaku\":33,\"duration\":218,\"goto\":\"av\",\"param\":\"11207326\",\"play\":695,\"title\":\"【深夜火锅】 辣炒年糕浓汤\",\"uri\":\"bilibili://video/11207326\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/9cf37eacafce533b30b0c22b00ea0362aa66e6c6.jpg\",\"ctime\":1497432336,\"danmaku\":3,\"duration\":66,\"goto\":\"av\",\"param\":\"11295114\",\"play\":956,\"title\":\"【一分钟快手料理】好吃的家常卤肉，只需要这个小秘诀！\",\"uri\":\"bilibili://video/11295114\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/ca5cf4c5558a85cb6d2adc7bd678db3a9079d1b9.jpg\",\"ctime\":1497432336,\"danmaku\":154,\"duration\":189,\"goto\":\"av\",\"param\":\"11294225\",\"play\":11714,\"title\":\"啊长长的丝～香脆拉丝芝士条！\",\"uri\":\"bilibili://video/11294225\"},{\"cover\":\"http://i0.hdslb.com/bfs/archive/83b085d5863672ea7dea3bbe48bc38acba466a2f.jpg\",\"ctime\":1497432336,\"danmaku\":90,\"duration\":424,\"goto\":\"av\",\"param\":\"11293906\",\"play\":2380,\"title\":\"【耳机党福利】巧克力淋面年轮蛋糕，COOKING ASMR\",\"uri\":\"bilibili://video/11293906\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/7c3ad28d20d6f49e151ef966f2cca3be267d7d90.jpg\",\"ctime\":1497432336,\"danmaku\":61,\"duration\":865,\"goto\":\"av\",\"param\":\"11206943\",\"play\":2117,\"title\":\"【令人满意的糕点装饰技艺】第四集！蛋糕和纸杯蛋糕的装饰\",\"uri\":\"bilibili://video/11206943\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/3cdd6d356c5a5281a39eda41d6f4348c3d916168.jpg\",\"ctime\":1497432336,\"danmaku\":28,\"duration\":180,\"goto\":\"av\",\"param\":\"11207264\",\"play\":1478,\"title\":\"【深夜火锅】韩国鱼饼辣年糕酱汤\",\"uri\":\"bilibili://video/11207264\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/f057b3935a388043c18bebb4bcb91e42d5a209ee.jpg\",\"ctime\":1497432336,\"danmaku\":16,\"duration\":49,\"goto\":\"av\",\"param\":\"11295021\",\"play\":7959,\"title\":\"【一分钟快手料理】超好吃的咖喱炒面\",\"uri\":\"bilibili://video/11295021\"}]}\n         * card : {\"DisplayRank\":\"\",\"approve\":false,\"article\":0,\"attention\":57,\"birthday\":\"\",\"description\":\"\",\"face\":\"http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\",\"fans\":66301,\"friend\":0,\"level_info\":{\"current_exp\":10610,\"current_level\":4,\"current_min\":4500,\"next_exp\":10800},\"mid\":\"12617707\",\"name\":\"炒鸡饿吃苹果还是饿\",\"nameplate\":{\"condition\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"name\":\"\",\"nid\":0},\"official_verify\":{\"desc\":\"\",\"type\":-1},\"pendant\":{\"expire\":0,\"image\":\"\",\"name\":\"\",\"pid\":0},\"place\":\"\",\"rank\":\"\",\"regtime\":0,\"sex\":\"保密\",\"sign\":\"吃货属性的YouTube搬运高产软妹子！微博@炒鸡饿同学 爱你萌～\",\"spacesta\":0,\"vip\":{\"accessStatus\":1,\"dueRemark\":\"\",\"vipDueDate\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"vipType\":0}}\n         * elec : {\"count\":1,\"elec_num\":0,\"elec_set\":{\"elec_list\":[{\"elec_num\":20,\"is_customize\":0,\"title\":\"20电池\"},{\"elec_num\":60,\"is_customize\":0,\"title\":\"60电池\"},{\"elec_num\":450,\"is_customize\":0,\"title\":\"450电池\"},{\"elec_num\":880,\"is_customize\":0,\"title\":\"880电池\"},{\"elec_num\":0,\"is_customize\":1,\"max_elec\":99999,\"min_elec\":20,\"title\":\"自定义\"}],\"elec_theme\":0,\"integrity_rate\":10,\"rmb_rate\":10,\"round_mode\":0},\"show\":false,\"total\":5}\n         * favourite : {\"count\":2,\"item\":[{\"atten_count\":0,\"cover\":[{\"aid\":9581900,\"pic\":\"http://i2.hdslb.com/bfs/archive/28cfbe0a9a8720da4294dc554cc7ef89e745205b.jpg\"},{\"aid\":10378710,\"pic\":\"http://i2.hdslb.com/bfs/archive/f15b4fcea101703949a878e70ad69ae43fea636f.jpg\"},{\"aid\":4127412,\"pic\":\"http://i0.hdslb.com/bfs/archive/b20386ac55b3d5d85bcc930367856086fcbdcc8b.jpg\"}],\"ctime\":1496702376,\"cur_count\":4,\"fid\":65954070,\"max_count\":999,\"mid\":12617707,\"mtime\":1496702411,\"name\":\"炒鸡的音乐收藏\",\"state\":2},{\"atten_count\":0,\"cover\":[{\"aid\":5730281,\"pic\":\"http://i1.hdslb.com/bfs/archive/0f646784b8a1c17121beaa66c1a532c802cf8d23.jpg\"},{\"aid\":1813356,\"pic\":\"http://i0.hdslb.com/bfs/archive/92a8ef8b8b89b395aa2338348e1b8de0f73b7e36.jpg\"},{\"aid\":3192469,\"pic\":\"http://i1.hdslb.com/bfs/archive/c4fddb3636de192f71a3d424da5a22f7bb475798.jpg\"}],\"ctime\":1496701790,\"cur_count\":24,\"fid\":65953802,\"max_count\":999,\"mid\":12617707,\"mtime\":1496702335,\"name\":\"炒鸡的美食剧集收藏\",\"state\":2}]}\n         * images : {\"imgUrl\":\"\"}\n         * live : {\"cover\":\"http://i0.hdslb.com/bfs/live/3aeabf55c749a9e6ee4cad603e77a61299388d6f.jpg\",\"liveStatus\":0,\"online\":0,\"roomStatus\":1,\"roomid\":1327411,\"roundStatus\":1,\"title\":\"炒鸡饿吃苹果还是饿的直播间\",\"url\":\"http://live.bilibili.com/1327411\"}\n         * relation : 1\n         * setting : {\"bangumi\":0,\"coins_video\":0,\"fav_video\":1,\"groups\":0,\"played_game\":0,\"submited_video\":1,\"tags\":0}\n         */\n\n\n        data class ArchiveBean(var count: Int,\n                          var item: List<ItemBean>) {\n            /**\n             * count : 463\n             * item : [{\"cover\":\"http://i0.hdslb.com/bfs/archive/304cb7edd138293dbc2ccd5554b9b03b7e52b113.jpg\",\"ctime\":1497432336,\"danmaku\":58,\"duration\":444,\"goto\":\"av\",\"param\":\"11293955\",\"play\":727,\"title\":\"【耳机党福利】巧克力千层蛋糕，COOKING ASMR\",\"uri\":\"bilibili://video/11293955\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/9e946c659f7d95f74de72f2429d484fb0002e37f.jpg\",\"ctime\":1497432336,\"danmaku\":15,\"duration\":644,\"goto\":\"av\",\"param\":\"11206987\",\"play\":841,\"title\":\"【令人满意的糕点装饰技艺】第五集！镜面蛋糕的制作\",\"uri\":\"bilibili://video/11206987\"},{\"cover\":\"http://i0.hdslb.com/bfs/archive/211051992ad3545af4e1ac573a6e36e2c92ca23f.jpg\",\"ctime\":1497432336,\"danmaku\":49,\"duration\":470,\"goto\":\"av\",\"param\":\"11264487\",\"play\":1368,\"title\":\"【深夜火锅】韩式螃蟹什锦火锅\",\"uri\":\"bilibili://video/11264487\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/fc08e4203ec42093ffc472291da7de78a3f63eb5.jpg\",\"ctime\":1497432336,\"danmaku\":33,\"duration\":218,\"goto\":\"av\",\"param\":\"11207326\",\"play\":695,\"title\":\"【深夜火锅】 辣炒年糕浓汤\",\"uri\":\"bilibili://video/11207326\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/9cf37eacafce533b30b0c22b00ea0362aa66e6c6.jpg\",\"ctime\":1497432336,\"danmaku\":3,\"duration\":66,\"goto\":\"av\",\"param\":\"11295114\",\"play\":956,\"title\":\"【一分钟快手料理】好吃的家常卤肉，只需要这个小秘诀！\",\"uri\":\"bilibili://video/11295114\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/ca5cf4c5558a85cb6d2adc7bd678db3a9079d1b9.jpg\",\"ctime\":1497432336,\"danmaku\":154,\"duration\":189,\"goto\":\"av\",\"param\":\"11294225\",\"play\":11714,\"title\":\"啊长长的丝～香脆拉丝芝士条！\",\"uri\":\"bilibili://video/11294225\"},{\"cover\":\"http://i0.hdslb.com/bfs/archive/83b085d5863672ea7dea3bbe48bc38acba466a2f.jpg\",\"ctime\":1497432336,\"danmaku\":90,\"duration\":424,\"goto\":\"av\",\"param\":\"11293906\",\"play\":2380,\"title\":\"【耳机党福利】巧克力淋面年轮蛋糕，COOKING ASMR\",\"uri\":\"bilibili://video/11293906\"},{\"cover\":\"http://i1.hdslb.com/bfs/archive/7c3ad28d20d6f49e151ef966f2cca3be267d7d90.jpg\",\"ctime\":1497432336,\"danmaku\":61,\"duration\":865,\"goto\":\"av\",\"param\":\"11206943\",\"play\":2117,\"title\":\"【令人满意的糕点装饰技艺】第四集！蛋糕和纸杯蛋糕的装饰\",\"uri\":\"bilibili://video/11206943\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/3cdd6d356c5a5281a39eda41d6f4348c3d916168.jpg\",\"ctime\":1497432336,\"danmaku\":28,\"duration\":180,\"goto\":\"av\",\"param\":\"11207264\",\"play\":1478,\"title\":\"【深夜火锅】韩国鱼饼辣年糕酱汤\",\"uri\":\"bilibili://video/11207264\"},{\"cover\":\"http://i2.hdslb.com/bfs/archive/f057b3935a388043c18bebb4bcb91e42d5a209ee.jpg\",\"ctime\":1497432336,\"danmaku\":16,\"duration\":49,\"goto\":\"av\",\"param\":\"11295021\",\"play\":7959,\"title\":\"【一分钟快手料理】超好吃的咖喱炒面\",\"uri\":\"bilibili://video/11295021\"}]\n             */\n\n\n            data class ItemBean(var cover: String,\n                           var ctime: Int,\n                           var danmaku: Int,\n                           var duration: Int,\n                           var goto: String,\n                           var param: String,\n                           var play: Int,\n                           var title: String,\n                           var uri: String) {\n                /**\n                 * cover : http://i0.hdslb.com/bfs/archive/304cb7edd138293dbc2ccd5554b9b03b7e52b113.jpg\n                 * ctime : 1497432336\n                 * danmaku : 58\n                 * duration : 444\n                 * goto : av\n                 * param : 11293955\n                 * play : 727\n                 * title : 【耳机党福利】巧克力千层蛋糕，COOKING ASMR\n                 * uri : bilibili://video/11293955\n                 */\n\n\n            }\n        }\n\n        data class CardBean(var DisplayRank: String,\n                       var approve: Boolean,\n                       var article: Int,\n                       var attention: Int,\n                       var birthday: String,\n                       var description: String,\n                       var face: String,\n                       var fans: Int,\n                       var friend: Int,\n                       var level_info: LevelInfoBean,\n                       var mid: String,\n                       var name: String,\n                       var nameplate: NameplateBean,\n                       var official_verify: OfficialVerifyBean,\n                       var pendant: PendantBean,\n                       var place: String,\n                       var rank: String,\n                       var regtime: Int,\n                       var sex: String,\n                       var sign: String,\n                       var spacesta: Int,\n                       var vip: VipBean) {\n            /**\n             * DisplayRank :\n             * approve : false\n             * article : 0\n             * attention : 57\n             * birthday :\n             * description :\n             * face : http://i0.hdslb.com/bfs/face/c984a7049d210b1079df470611f6cc04eb3e9338.jpg\n             * fans : 66301\n             * friend : 0\n             * level_info : {\"current_exp\":10610,\"current_level\":4,\"current_min\":4500,\"next_exp\":10800}\n             * mid : 12617707\n             * name : 炒鸡饿吃苹果还是饿\n             * nameplate : {\"condition\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"name\":\"\",\"nid\":0}\n             * official_verify : {\"desc\":\"\",\"type\":-1}\n             * pendant : {\"expire\":0,\"image\":\"\",\"name\":\"\",\"pid\":0}\n             * place :\n             * rank :\n             * regtime : 0\n             * sex : 保密\n             * sign : 吃货属性的YouTube搬运高产软妹子！微博@炒鸡饿同学 爱你萌～\n             * spacesta : 0\n             * vip : {\"accessStatus\":1,\"dueRemark\":\"\",\"vipDueDate\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"vipType\":0}\n             */\n\n\n            data class LevelInfoBean(var current_exp: Int,\n                                var current_level: Int,\n                                var current_min: Int,\n                                var next_exp: Int) {\n                /**\n                 * current_exp : 10610\n                 * current_level : 4\n                 * current_min : 4500\n                 * next_exp : 10800\n                 */\n\n\n            }\n\n            data class NameplateBean(var condition: String,\n                                var image: String,\n                                var image_small: String,\n                                var level: String,\n                                var name: String,\n                                var nid: Int) {\n                /**\n                 * condition :\n                 * image :\n                 * image_small :\n                 * level :\n                 * name :\n                 * nid : 0\n                 */\n\n\n            }\n\n            data class OfficialVerifyBean(var desc: String,\n                                     var type: Int) {\n                /**\n                 * desc :\n                 * type : -1\n                 */\n\n\n            }\n\n            data class PendantBean(var expire: Int,\n                              var image: String,\n                              var name: String,\n                              var pid: Int) {\n                /**\n                 * expire : 0\n                 * image :\n                 * name :\n                 * pid : 0\n                 */\n\n\n            }\n\n            data class VipBean(var accessStatus: Int,\n                          var dueRemark: String,\n                          var vipDueDate: Int,\n                          var vipStatus: Int,\n                          var vipStatusWarn: String,\n                          var vipType: Int) {\n                /**\n                 * accessStatus : 1\n                 * dueRemark :\n                 * vipDueDate : 0\n                 * vipStatus : 0\n                 * vipStatusWarn :\n                 * vipType : 0\n                 */\n\n\n            }\n        }\n\n        data class ElecBean(var count: Int,\n                       var elec_num: Int,\n                       var elec_set: ElecSetBean,\n                       var show: Boolean,\n                       var total: Int) {\n            /**\n             * count : 1\n             * elec_num : 0\n             * elec_set : {\"elec_list\":[{\"elec_num\":20,\"is_customize\":0,\"title\":\"20电池\"},{\"elec_num\":60,\"is_customize\":0,\"title\":\"60电池\"},{\"elec_num\":450,\"is_customize\":0,\"title\":\"450电池\"},{\"elec_num\":880,\"is_customize\":0,\"title\":\"880电池\"},{\"elec_num\":0,\"is_customize\":1,\"max_elec\":99999,\"min_elec\":20,\"title\":\"自定义\"}],\"elec_theme\":0,\"integrity_rate\":10,\"rmb_rate\":10,\"round_mode\":0}\n             * show : false\n             * total : 5\n             */\n\n\n            data class ElecSetBean(var elec_theme: Int,\n                              var integrity_rate: Double,\n                              var rmb_rate: Double,\n                              var round_mode: Int,\n                              var elec_list: List<ElecListBean>) {\n                /**\n                 * elec_list : [{\"elec_num\":20,\"is_customize\":0,\"title\":\"20电池\"},{\"elec_num\":60,\"is_customize\":0,\"title\":\"60电池\"},{\"elec_num\":450,\"is_customize\":0,\"title\":\"450电池\"},{\"elec_num\":880,\"is_customize\":0,\"title\":\"880电池\"},{\"elec_num\":0,\"is_customize\":1,\"max_elec\":99999,\"min_elec\":20,\"title\":\"自定义\"}]\n                 * elec_theme : 0\n                 * integrity_rate : 10.0\n                 * rmb_rate : 10.0\n                 * round_mode : 0\n                 */\n\n\n                data class ElecListBean(var elec_num: Int,\n                                   var is_customize: Int,\n                                   var title: String,\n                                   var max_elec: Int,\n                                   var min_elec: Int) {\n                    /**\n                     * elec_num : 20\n                     * is_customize : 0\n                     * title : 20电池\n                     * max_elec : 99999\n                     * min_elec : 20\n                     */\n\n\n                }\n            }\n        }\n\n        data class FavouriteBean(var count: Int,\n                            var item: List<ItemBeanX>) {\n            /**\n             * count : 2\n             * item : [{\"atten_count\":0,\"cover\":[{\"aid\":9581900,\"pic\":\"http://i2.hdslb.com/bfs/archive/28cfbe0a9a8720da4294dc554cc7ef89e745205b.jpg\"},{\"aid\":10378710,\"pic\":\"http://i2.hdslb.com/bfs/archive/f15b4fcea101703949a878e70ad69ae43fea636f.jpg\"},{\"aid\":4127412,\"pic\":\"http://i0.hdslb.com/bfs/archive/b20386ac55b3d5d85bcc930367856086fcbdcc8b.jpg\"}],\"ctime\":1496702376,\"cur_count\":4,\"fid\":65954070,\"max_count\":999,\"mid\":12617707,\"mtime\":1496702411,\"name\":\"炒鸡的音乐收藏\",\"state\":2},{\"atten_count\":0,\"cover\":[{\"aid\":5730281,\"pic\":\"http://i1.hdslb.com/bfs/archive/0f646784b8a1c17121beaa66c1a532c802cf8d23.jpg\"},{\"aid\":1813356,\"pic\":\"http://i0.hdslb.com/bfs/archive/92a8ef8b8b89b395aa2338348e1b8de0f73b7e36.jpg\"},{\"aid\":3192469,\"pic\":\"http://i1.hdslb.com/bfs/archive/c4fddb3636de192f71a3d424da5a22f7bb475798.jpg\"}],\"ctime\":1496701790,\"cur_count\":24,\"fid\":65953802,\"max_count\":999,\"mid\":12617707,\"mtime\":1496702335,\"name\":\"炒鸡的美食剧集收藏\",\"state\":2}]\n             */\n\n\n            data class ItemBeanX(var atten_count: Int,\n                            var ctime: Int,\n                            var cur_count: Int,\n                            var fid: Int,\n                            var max_count: Int,\n                            var mid: Int,\n                            var mtime: Int,\n                            var name: String,\n                            var state: Int,\n                            var cover: List<CoverBean>) {\n                /**\n                 * atten_count : 0\n                 * cover : [{\"aid\":9581900,\"pic\":\"http://i2.hdslb.com/bfs/archive/28cfbe0a9a8720da4294dc554cc7ef89e745205b.jpg\"},{\"aid\":10378710,\"pic\":\"http://i2.hdslb.com/bfs/archive/f15b4fcea101703949a878e70ad69ae43fea636f.jpg\"},{\"aid\":4127412,\"pic\":\"http://i0.hdslb.com/bfs/archive/b20386ac55b3d5d85bcc930367856086fcbdcc8b.jpg\"}]\n                 * ctime : 1496702376\n                 * cur_count : 4\n                 * fid : 65954070\n                 * max_count : 999\n                 * mid : 12617707\n                 * mtime : 1496702411\n                 * name : 炒鸡的音乐收藏\n                 * state : 2\n                 */\n\n\n                data class CoverBean(\n                        var aid: Int,\n                        var pic: String) {\n                    /**\n                     * aid : 9581900\n                     * pic : http://i2.hdslb.com/bfs/archive/28cfbe0a9a8720da4294dc554cc7ef89e745205b.jpg\n                     */\n\n                }\n            }\n        }\n\n        data class ImagesBean(var imgUrl: String) {\n            /**\n             * imgUrl :\n             */\n\n\n        }\n\n        data class LiveBean(var cover: String,\n                       var liveStatus: Int,\n                       var online: Int,\n                       var roomStatus: Int,\n                       var roomid: Int,\n                       var roundStatus: Int,\n                       var title: String,\n                       var url: String) {\n            /**\n             * cover : http://i0.hdslb.com/bfs/live/3aeabf55c749a9e6ee4cad603e77a61299388d6f.jpg\n             * liveStatus : 0\n             * online : 0\n             * roomStatus : 1\n             * roomid : 1327411\n             * roundStatus : 1\n             * title : 炒鸡饿吃苹果还是饿的直播间\n             * url : http://live.bilibili.com/1327411\n             */\n\n\n        }\n\n        data class SettingBean(var bangumi: Int,\n                          var coins_video: Int,\n                          var fav_video: Int,\n                          var groups: Int,\n                          var played_game: Int,\n                          var submited_video: Int,\n                          var tags: Int) {\n            /**\n             * bangumi : 0\n             * coins_video : 0\n             * fav_video : 1\n             * groups : 0\n             * played_game : 0\n             * submited_video : 1\n             * tags : 0\n             */\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/bean/user/UserDetail.kt",
    "content": "package com.yoyiyi.soleil.bean.user\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 11:42\n * * 描述:用户\n */\n\ndata class UserDetail(\n        /**\n         * code : 0\n         * card : {\"mid\":\"185546\",\"name\":\"小可儿\",\"approve\":false,\"sex\":\"保密\",\"rank\":\"10000\",\"face\":\"http://i1.hdslb.com/bfs/face/5022986b528c74efadb6ab4669137214e066925c.x-png\",\"coins\":0,\"DisplayRank\":\"1036\",\"regtime\":1312561293,\"spacesta\":2,\"birthday\":\"1996-06-16\",\"place\":\"上海市 长宁区\",\"description\":\"\",\"article\":0,\"attentions\":[319291,690546,374377,186759,1296804,1318455,742564,311888,482524,264264,2695314,669173,375375,644202,7329,687883,99224,201434,2986310,542884,591541,776558,699049,149065,1284747,386004,546195,2848416,602496,3857249,525024,168598,270744,2740963,6881318,547008,1770706,1272598,667850,1643718,2731733,3173802,2853209,398510,477009,12434430,430031,122879,3947820,4385354,913497,699438,12464176,322892,1894748,777536,1532165,6927351,4391879,2101645,2735222,6997378,4548018,7661994,2152304,814450,4203935,622723,454636,2778733,231563,20771487,3097441,486183,2798449,71106,9550310,11684516,1438811,1951038,423442,391679,139905,20503549,442520,22965,27434809,688969,11758387,920713,26922,8585525,10552107,8688933,4440520,10414152,13736797,3379951,8332697,689753,500198,172683,515993,328212,61999,3226226,2470678,19285836,4431898,808171,25282560,592761,1963054,234256,6332228,4138198,7508296,6510526,14634764,346059,814727,14415563,12564758,1396558,453972,1936132,24314825,43536,2459948,25775194,1652288,282994,20484551,22986236,288239,329932],\"fans\":139476,\"friend\":135,\"attention\":135,\"sign\":\"粉丝的支持是我创作的源泉。\\r\\n微博@小可儿有剁不光的手 粉丝群569465513 网易云音乐:小可儿spike\",\"level_info\":{\"current_level\":6,\"current_min\":28800,\"current_exp\":298859,\"next_exp\":\"-\"},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0},\"nameplate\":{\"nid\":1,\"name\":\"黄金殿堂\",\"image\":\"http://i2.hdslb.com/bfs/face/82896ff40fcb4e7c7259cb98056975830cb55695.png\",\"image_small\":\"http://i2.hdslb.com/bfs/face/627e342851dfda6fe7380c2fa0cbd7fae2e61533.png\",\"level\":\"稀有勋章\",\"condition\":\"单个自制视频总播放数>=100万\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"}}\n         */\n\n        var code: Int,\n\n        /**\n         * mid : 185546\n         * name : 小可儿\n         * approve : false\n         * sex : 保密\n         * rank : 10000\n         * face : http://i1.hdslb.com/bfs/face/5022986b528c74efadb6ab4669137214e066925c.x-png\n         * coins : 0\n         * DisplayRank : 1036\n         * regtime : 1312561293\n         * spacesta : 2\n         * birthday : 1996-06-16\n         * place : 上海市 长宁区\n         * description :\n         * article : 0\n         * attentions : [319291,690546,374377,186759,1296804,1318455,742564,311888,482524,264264,2695314,669173,375375,644202,7329,687883,99224,201434,2986310,542884,591541,776558,699049,149065,1284747,386004,546195,2848416,602496,3857249,525024,168598,270744,2740963,6881318,547008,1770706,1272598,667850,1643718,2731733,3173802,2853209,398510,477009,12434430,430031,122879,3947820,4385354,913497,699438,12464176,322892,1894748,777536,1532165,6927351,4391879,2101645,2735222,6997378,4548018,7661994,2152304,814450,4203935,622723,454636,2778733,231563,20771487,3097441,486183,2798449,71106,9550310,11684516,1438811,1951038,423442,391679,139905,20503549,442520,22965,27434809,688969,11758387,920713,26922,8585525,10552107,8688933,4440520,10414152,13736797,3379951,8332697,689753,500198,172683,515993,328212,61999,3226226,2470678,19285836,4431898,808171,25282560,592761,1963054,234256,6332228,4138198,7508296,6510526,14634764,346059,814727,14415563,12564758,1396558,453972,1936132,24314825,43536,2459948,25775194,1652288,282994,20484551,22986236,288239,329932]\n         * fans : 139476\n         * friend : 135\n         * attention : 135\n         * sign : 粉丝的支持是我创作的源泉。\n         * 微博@小可儿有剁不光的手 粉丝群569465513 网易云音乐:小可儿spike\n         * level_info : {\"current_level\":6,\"current_min\":28800,\"current_exp\":298859,\"next_exp\":\"-\"}\n         * pendant : {\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0}\n         * nameplate : {\"nid\":1,\"name\":\"黄金殿堂\",\"image\":\"http://i2.hdslb.com/bfs/face/82896ff40fcb4e7c7259cb98056975830cb55695.png\",\"image_small\":\"http://i2.hdslb.com/bfs/face/627e342851dfda6fe7380c2fa0cbd7fae2e61533.png\",\"level\":\"稀有勋章\",\"condition\":\"单个自制视频总播放数>=100万\"}\n         * official_verify : {\"type\":-1,\"desc\":\"\"}\n         */\n\n        var card: CardBean) {\n\n\n    data class CardBean(var mid: String,\n\n                        var name: String,\n\n                        var approve: Boolean,\n\n                        var sex: String,\n\n                        var rank: String,\n\n                        var face: String,\n\n                        var coins: Int,\n\n                        var DisplayRank: String,\n\n                        var regtime: Int,\n\n                        var spacesta: Int,\n\n                        var birthday: String,\n\n                        var place: String,\n\n                        var description: String,\n\n                        var article: Int,\n\n                        var fans: Int,\n\n                        var friend: Int,\n\n                        var attention: Int,\n\n                        var sign: String,\n\n                        /**\n                         * current_level : 6\n                         * current_min : 28800\n                         * current_exp : 298859\n                         * next_exp : -\n                         */\n\n                        var level_info: LevelInfoBean,\n\n                        /**\n                         * pid : 0\n                         * name :\n                         * image :\n                         * expire : 0\n                         */\n\n                        var pendant: PendantBean,\n\n                        /**\n                         * nid : 1\n                         * name : 黄金殿堂\n                         * image : http://i2.hdslb.com/bfs/face/82896ff40fcb4e7c7259cb98056975830cb55695.png\n                         * image_small : http://i2.hdslb.com/bfs/face/627e342851dfda6fe7380c2fa0cbd7fae2e61533.png\n                         * level : 稀有勋章\n                         * condition : 单个自制视频总播放数>=100万\n                         */\n\n                        var nameplate: NameplateBean,\n\n                        /**\n                         * type : -1\n                         * desc :\n                         */\n\n                        var official_verify: OfficialVerifyBean,\n\n                        var attentions: List<Int>) {\n\n\n        data class LevelInfoBean(var current_level: Int,\n\n                                 var current_min: Int,\n\n                                 var current_exp: Int,\n\n                                 var next_exp: String)\n\n\n\n\n        data class PendantBean(var pid: Int,\n\n                               var name: String,\n\n                               var image: String,\n\n                               var expire: Int)\n\n\n\n\n        data class NameplateBean(var nid: Int,\n\n                                 var name: String,\n\n                                 var image: String,\n\n                                 var image_small: String,\n\n                                 var level: String,\n\n                                 var condition: String)\n\n\n\n\n        data class OfficialVerifyBean(var type: Int,\n\n                                      var desc: String)\n\n\n\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/constant/Constants.kt",
    "content": "package com.yoyiyi.soleil.constant\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/7/13 14:20\n * 描述:常量\n */\nobject Constants {\n    //是否登录过\n    const val IS_LOGINED_FLAG = \"is_logined_flag\"\n    const val EXTRA_KEYWORD = \"extra_keywork\"\n\n    const val EXTRA_PARCELABLE = \"extra_parcelable\"\n    const val EXTRA_TITLE = \"extra_title\"\n    const val EXTRA_TID = \"extra_tid\"\n    const val EXTRA_BUNDLE = \"extra_bundle\"\n    const val EXTRA_RID = \"extra_rid\"\n    const val EXTRA_POSITION = \"extra_position\"\n\n    const val EXTRA_TYPE = \"extra_type\"\n\n    const val EXTRA_URL = \"extra_url\"\n    const val SHOP_URL = \"http://bmall.bilibili.com/\"\n    const val VIP_URL = \"http://vip.bilibili.com/site/vip-faq-h5.html#yv1\"\n    const val BLACK_URL = \"https://www.bilibili.com/blackroom/#/\"\n    //免流量\n    const val BLACK_BOARD_URL = \"http://www.bilibili.com/blackboard/activity-unicomopen.html\"\n    const val EXTRA_SETTING = \"extra_setting\"\n    const val EXTRA_IMAGE = \"extra_image\"\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/component/ActivityComponent.kt",
    "content": "package com.yoyiyi.soleil.di.component\n\nimport android.app.Activity\nimport com.yoyiyi.soleil.di.module.ActivityModule\nimport com.yoyiyi.soleil.di.scope.ActivityScope\nimport com.yoyiyi.soleil.module.SplashActivity\nimport com.yoyiyi.soleil.module.app.up.UpDetailActivity\nimport com.yoyiyi.soleil.module.app.video.VideoDetailActivity\nimport com.yoyiyi.soleil.module.app.video.VideoPlayerActivity\nimport com.yoyiyi.soleil.module.bangumi.BangumiDetailActivity\nimport com.yoyiyi.soleil.module.bangumi.BangumiIndexActivity\nimport com.yoyiyi.soleil.module.bangumi.BangumiScheduleActivity\nimport com.yoyiyi.soleil.module.discover.*\nimport com.yoyiyi.soleil.module.recommend.AllStationRankActivity\nimport com.yoyiyi.soleil.module.region.AdActivity\nimport com.yoyiyi.soleil.module.region.AllRegionRankActivity\nimport com.yoyiyi.soleil.module.region.RegionTypeActivity\nimport com.yoyiyi.soleil.module.search.SearchActivity\nimport com.yoyiyi.soleil.module.search.TotalSearchActivity\nimport dagger.Component\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 19:39\n * * 描述:ActivityComponent\n */\n@ActivityScope\n@Component(dependencies = arrayOf(AppComponent::class), modules = arrayOf(ActivityModule::class))\ninterface ActivityComponent {\n\n    fun getActivity(): Activity\n\n    fun inject(splashActivity: SplashActivity)\n\n    fun inject(adActivity: AdActivity)\n\n    fun inject(regionTypeActivity: RegionTypeActivity)\n\n    fun inject(allRegionRankActivity: AllRegionRankActivity)\n\n    fun inject(activityCenterActivity: ActivityCenterActivity)\n\n    fun inject(allGameActivity: AllGameActivity)\n\n    fun inject(gameCenterActivity: GameCenterActivity)\n\n    fun inject(interestActivity: InterestActivity)\n\n    fun inject(topicCenterActivity: TopicCenterActivity)\n\n    fun inject(bangumiDetailActivity: BangumiDetailActivity)\n\n    fun inject(bangumiScheduleActivity: BangumiScheduleActivity)\n\n    fun inject(bangumiIndexActivity: BangumiIndexActivity)\n\n    fun inject(upDetailActivity: UpDetailActivity)\n\n    fun inject(videoPlayerActivity: VideoPlayerActivity)\n\n    fun inject(videoDetailActivity: VideoDetailActivity)\n\n    fun inject(totalSearchActivity: TotalSearchActivity)\n\n    fun inject(searchActivity: SearchActivity)\n\n    fun inject(allStationRankActivity: AllStationRankActivity)\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/component/AppComponent.kt",
    "content": "package com.yoyiyi.soleil.di.component\n\nimport android.content.Context\nimport com.yoyiyi.soleil.di.module.ApiModule\nimport com.yoyiyi.soleil.di.module.AppModule\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport dagger.Component\nimport javax.inject.Singleton\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/4/27 16:39\n *  描述:AppComponent\n */\n@Singleton\n@Component(modules = arrayOf(AppModule::class, ApiModule::class))\ninterface AppComponent {\n    fun getContext(): Context\n\n    fun getRetrofitHelper(): RetrofitHelper\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/component/FragmentComponent.kt",
    "content": "package com.yoyiyi.soleil.di.component\n\nimport android.app.Activity\nimport com.yoyiyi.soleil.di.module.FragmentModule\nimport com.yoyiyi.soleil.di.scope.FragmentScope\nimport com.yoyiyi.soleil.module.app.up.ArchiveFragment\nimport com.yoyiyi.soleil.module.app.up.FavouriteFragment\nimport com.yoyiyi.soleil.module.app.up.SubmitedVideoFragment\nimport com.yoyiyi.soleil.module.app.video.CommentFragment\nimport com.yoyiyi.soleil.module.app.video.SummaryFragment\nimport com.yoyiyi.soleil.module.discover.InterestFragment\nimport com.yoyiyi.soleil.module.home.*\nimport com.yoyiyi.soleil.module.recommend.AllStationRankFragment\nimport com.yoyiyi.soleil.module.region.AllRegionRankFragment\nimport com.yoyiyi.soleil.module.region.RegionTypeFragment\nimport com.yoyiyi.soleil.module.region.RegionTypeRecommendFragment\nimport com.yoyiyi.soleil.module.search.MovieFragment\nimport com.yoyiyi.soleil.module.search.SeasonFragment\nimport com.yoyiyi.soleil.module.search.UpFragment\nimport dagger.Component\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 19:30\n * * 描述:FragmentComponent\n */\n@FragmentScope\n@Component(dependencies = arrayOf(AppComponent::class), modules = arrayOf(FragmentModule::class))\ninterface FragmentComponent {\n\n    fun getActivity(): Activity\n\n    fun inject(recommendFragment: RecommendFragment)\n\n    fun inject(liveFragment: LiveFragment)\n\n    fun inject(chaseBangumiFragment: ChaseBangumiFragment)\n\n    fun inject(regionFragment: RegionFragment)\n\n    fun inject(dynamicFragment: DynamicFragment)\n\n    fun inject(discoverFragment: DiscoverFragment)\n\n    fun inject(allRegionRankFragment: AllRegionRankFragment)\n\n    fun inject(regionTypeFragment: RegionTypeFragment)\n\n    fun inject(regionTypeRecommendFragment: RegionTypeRecommendFragment)\n\n    fun inject(interestFragment: InterestFragment)\n\n    fun  inject(allStationRankFragment: AllStationRankFragment)\n\n    fun inject(archiveFragment: ArchiveFragment)\n\n    fun inject(favouriteFragment: FavouriteFragment)\n\n    fun inject(submitedVideoFragment: SubmitedVideoFragment)\n\n    fun inject(commentFragment: CommentFragment)\n\n    fun inject(summaryFragment: SummaryFragment)\n\n    fun inject(upFragment: UpFragment)\n\n    fun inject(seasonFragment: SeasonFragment)\n\n    fun inject(movieFragment: MovieFragment)\n\n    fun inject(archiveFragment: com.yoyiyi.soleil.module.search.ArchiveFragment)\n\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/module/ActivityModule.kt",
    "content": "package com.yoyiyi.soleil.di.module\n\nimport android.app.Activity\n\nimport com.yoyiyi.soleil.di.scope.ActivityScope\n\nimport dagger.Module\nimport dagger.Provides\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 16:41\n * * 描述:Activity模型\n */\n@Module\nclass ActivityModule(val activity: Activity) {\n\n    @Provides\n    @ActivityScope\n    fun provideActivity(): Activity = activity\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/module/ApiModule.kt",
    "content": "package com.yoyiyi.soleil.di.module\n\nimport com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory\nimport com.yoyiyi.soleil.di.qualifier.*\nimport com.yoyiyi.soleil.network.api.*\nimport com.yoyiyi.soleil.network.helper.OkHttpHelper\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.network.support.ApiConstants\nimport dagger.Module\nimport dagger.Provides\nimport okhttp3.OkHttpClient\nimport retrofit2.Retrofit\nimport retrofit2.converter.gson.GsonConverterFactory\nimport javax.inject.Singleton\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 16:41\n * * 描述:Api网络模型\n */\n@Module\nclass ApiModule {\n    fun createRetrofit(builder: Retrofit.Builder, client: OkHttpClient, url: String): Retrofit\n            = builder\n            .baseUrl(url)\n            .client(client)\n            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())\n            .addConverterFactory(GsonConverterFactory.create())\n            .build()\n\n    @Singleton\n    @Provides\n    fun provideOkHttpClient(): OkHttpClient = OkHttpHelper.getOkHttpClient()\n\n    @Singleton\n    @Provides\n    fun provideRetrofitBuilder(): Retrofit.Builder = Retrofit.Builder()\n\n    @Singleton\n    @Provides\n    fun provideRetrofitHelper(appService: AppService, liveService: LiveService, bangumiService: BangumiService, rankService: RankService, apiService: ApiService, im9Service: Im9Service): RetrofitHelper\n            = RetrofitHelper(appService, liveService, bangumiService, rankService, apiService, im9Service)\n\n\n    @Singleton\n    @Provides\n    @AppUrl\n    fun provideAppRetrofit(builder: Retrofit.Builder, client: OkHttpClient): Retrofit =\n            createRetrofit(builder, client, ApiConstants.APP_BASE_URL)\n\n\n    @Singleton\n    @Provides\n    fun provideAppService(@AppUrl retrofit: Retrofit): AppService\n            = retrofit.create(AppService::class.java)\n\n\n    @Singleton\n    @Provides\n    @LiveUrl\n    fun provideLiveRetrofit(builder: Retrofit.Builder, client: OkHttpClient): Retrofit\n            = createRetrofit(builder, client, ApiConstants.LIVE_BASE_URL)\n\n\n    @Singleton\n    @Provides\n    fun provideLiveService(@LiveUrl retrofit: Retrofit): LiveService\n            = retrofit.create<LiveService>(LiveService::class.java)\n\n\n    @Singleton\n    @Provides\n    @BangumiUrl\n    fun provideBangumiRetrofit(builder: Retrofit.Builder, client: OkHttpClient): Retrofit\n            = createRetrofit(builder, client, ApiConstants.BANGUMI_BASE_URL)\n\n\n    @Singleton\n    @Provides\n    fun provideBangumiService(@BangumiUrl retrofit: Retrofit): BangumiService\n            = retrofit.create<BangumiService>(BangumiService::class.java)\n\n\n    @Singleton\n    @Provides\n    @RankUrl\n    fun provideRankRetrofit(builder: Retrofit.Builder, client: OkHttpClient): Retrofit\n            = createRetrofit(builder, client, ApiConstants.RANK_BASE_URL)\n\n\n    @Singleton\n    @Provides\n    fun provideRankService(@RankUrl retrofit: Retrofit): RankService\n            = retrofit.create<RankService>(RankService::class.java)\n\n\n    @Singleton\n    @Provides\n    @ApiUrl\n    fun provideApiRetrofit(builder: Retrofit.Builder, client: OkHttpClient): Retrofit\n            = createRetrofit(builder, client, ApiConstants.API_BASE_URL)\n\n\n    @Singleton\n    @Provides\n    fun provideApiService(@ApiUrl retrofit: Retrofit): ApiService\n            = retrofit.create<ApiService>(ApiService::class.java)\n\n\n    @Singleton\n    @Provides\n    @Im9Url\n    fun provideIm9Retrofit(builder: Retrofit.Builder, client: OkHttpClient): Retrofit\n            = createRetrofit(builder, client, ApiConstants.IM9_BASE_URL)\n\n\n    @Singleton\n    @Provides\n    fun provideIm9Service(@Im9Url retrofit: Retrofit): Im9Service\n            = retrofit.create<Im9Service>(Im9Service::class.java)\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/module/AppModule.kt",
    "content": "package com.yoyiyi.soleil.di.module\n\nimport android.content.Context\n\nimport dagger.Module\nimport dagger.Provides\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 14:41\n * * 描述:App模型\n */\n@Module\nclass AppModule(val context: Context) {\n\n    @Provides\n    fun provideContext(): Context = context\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/module/FragmentModule.kt",
    "content": "package com.yoyiyi.soleil.di.module\n\nimport android.app.Activity\nimport android.support.v4.app.Fragment\n\nimport com.yoyiyi.soleil.di.scope.FragmentScope\n\nimport dagger.Module\nimport dagger.Provides\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 16:41\n * * 描述:Fragment模型\n */\n@Module\n class FragmentModule(val fragment: Fragment) {\n\n    @Provides\n    @FragmentScope\n    fun provideActivity(): Activity = fragment.activity\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/AccountUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:Account注解\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class AccountUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/ApiUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:Api注解\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class ApiUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/AppUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:App注解\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class AppUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/BangumiUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\n\nimport javax.inject.Qualifier\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class BangumiUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/BiliUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\n\nimport javax.inject.Qualifier\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class BiliUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/Im9Url.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class Im9Url"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/LiveUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class LiveUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/RankUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class RankUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/SearchUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class SearchUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/UserUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class UserUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/qualifier/VipUrl.kt",
    "content": "package com.yoyiyi.soleil.di.qualifier\n\nimport javax.inject.Qualifier\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 18:24\n * * 描述:\n */\n\n@Qualifier\n@MustBeDocumented\n@Retention(AnnotationRetention.RUNTIME)\nannotation class VipUrl"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/scope/ActivityScope.kt",
    "content": "package com.yoyiyi.soleil.di.scope\n\nimport javax.inject.Scope\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/28 11:47\n * * 描述:Activity 生命周期\n */\n@Scope\n@Retention(AnnotationRetention.RUNTIME)\nannotation class ActivityScope\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/di/scope/FragmentScope.kt",
    "content": "package com.yoyiyi.soleil.di.scope\n\nimport javax.inject.Scope\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/28 11:50\n * * 描述:Fragment 生命周期\n */\n\n@Scope\n@Retention(AnnotationRetention.RUNTIME)\nannotation class FragmentScope\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/event/Event.kt",
    "content": "package com.yoyiyi.soleil.event\n\nimport com.yoyiyi.soleil.bean.app.video.VideoDetail\nimport com.yoyiyi.soleil.bean.app.video.VideoDetailComment\nimport com.yoyiyi.soleil.bean.search.Search\nimport com.yoyiyi.soleil.bean.user.UpDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/6/4 15:24\n *  描述:事件\n */\nobject Event {\n    class RegionEntrancePositionEvent {\n        var position: Int = -1\n    }\n\n    class StartNavigationEvent {\n        var start: Boolean = false\n    }\n\n    class VideoDetailEvent {\n        var videoDetail: VideoDetail.DataBean? = null\n    }\n\n    class VideoDetailCommentEvent {\n        var videoDetailComment: VideoDetailComment.DataBean? = null\n    }\n\n    class UpDetailArchiveEvent {\n        var archive: UpDetail.DataBean.ArchiveBean? = null\n        var setting: UpDetail.DataBean.SettingBean? = null\n        var favourite: UpDetail.DataBean.FavouriteBean? = null\n        var live: UpDetail.DataBean.LiveBean? = null\n\n    }\n\n    class UpDetailSubmitedVideoEvent {\n        var archivList: List<UpDetail.DataBean.ArchiveBean.ItemBean>? = null\n    }\n\n    class UpDetailFavourteEvent {\n        var favouriteList: List<UpDetail.DataBean.FavouriteBean.ItemBeanX>? = null\n    }\n\n    class SearchArchiveEvent {\n        var itemBean: Search.DataBean.ItemsBean? = null\n        var seasonCount: Int = 0\n        var movieCount: Int = 0\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/ext/AppExt.kt",
    "content": "package com.yoyiyi.soleil.ext\n\n\nimport android.content.Context\nimport com.yoyiyi.soleil.App\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/21 10:30\n * 描述:\n */\n\nfun Context.getComponent() = App.instance.appComponent\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/ext/BannerExt.kt",
    "content": "package com.yoyiyi.soleil.ext\n\nimport android.content.Context\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.youth.banner.Banner\nimport com.youth.banner.BannerConfig\nimport com.youth.banner.loader.ImageLoader\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/8/18 15:26\n * 描述:\n */\n\nfun Banner.startAnim(urls: List<String>?) {\n    setIndicatorGravity(BannerConfig.RIGHT)\n            .setImages(urls)\n            .setImageLoader(GlideImageLoader())\n            .start()\n\n}\n\n\nprivate class GlideImageLoader : ImageLoader() {\n    override fun displayImage(context: Context, path: Any, imageView: ImageView) {\n        Glide.with(context)\n                .load(path as String)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(imageView)\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/ext/StringExt.kt",
    "content": "package com.yoyiyi.soleil.ext\n\nimport android.widget.Toast\nimport com.yoyiyi.soleil.App\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/10/9 12:05\n * 描述:弹吐司\n */\nfun String.toast(): Unit {\n    Toast.makeText(App.instance, this, Toast.LENGTH_LONG).show()\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/MediaController.java",
    "content": "package com.yoyiyi.soleil.media;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.graphics.Rect;\nimport android.media.AudioManager;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.os.Message;\nimport android.util.AttributeSet;\nimport android.view.Gravity;\nimport android.view.KeyEvent;\nimport android.view.LayoutInflater;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.ImageButton;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.PopupWindow;\nimport android.widget.ProgressBar;\nimport android.widget.SeekBar;\nimport android.widget.SeekBar.OnSeekBarChangeListener;\nimport android.widget.TextView;\n\nimport com.facebook.stetho.common.LogUtil;\nimport com.yoyiyi.soleil.R;\nimport com.yoyiyi.soleil.media.callback.DanmukuSwitchListener;\nimport com.yoyiyi.soleil.media.callback.MediaPlayerListener;\nimport com.yoyiyi.soleil.media.callback.VideoBackListener;\n\nimport java.util.Locale;\n\n/**\n * Created by hcc on 16/8/31 19:50\n * 100332338@qq.com\n * <p/>\n * 播放器控制器\n */\npublic class MediaController extends FrameLayout {\n\n    private static final int sDefaultTimeout = 3000;\n\n    private static final int FADE_OUT = 1;\n\n    private static final int SHOW_PROGRESS = 2;\n\n    private MediaPlayerListener mPlayer;\n\n    private Context mContext;\n\n    private PopupWindow mWindow;\n\n    private int mAnimStyle;\n\n    private View mAnchor;\n\n    private View mRoot;\n\n    private ProgressBar mProgress;\n\n    private TextView mEndTime, mCurrentTime;\n\n    private TextView mTitleView;\n\n    private OutlineTextView mInfoView;\n\n    private String mTitle;\n\n    private long mDuration;\n\n    private boolean mShowing;\n\n    private boolean mDragging;\n\n    private boolean mInstantSeeking = true;\n\n    private boolean mFromXml = false;\n\n    private ImageButton mPauseButton;\n\n    private AudioManager mAM;\n\n    private OnShownListener mShownListener;\n\n    private OnHiddenListener mHiddenListener;\n\n    private boolean mDanmakuShow = false;\n\n    private DanmukuSwitchListener mDanmukuSwitchListener;\n\n    private ImageView mBack;\n\n    private VideoBackListener mVideoBackListener;\n\n    private ImageView mTvPlay;\n\n    public void setDanmakuSwitchListener(DanmukuSwitchListener danmukuSwitchListener) {\n\n        this.mDanmukuSwitchListener = danmukuSwitchListener;\n    }\n\n    public void setVideoBackEvent(VideoBackListener videoBackListener) {\n\n        this.mVideoBackListener = videoBackListener;\n    }\n\n    @SuppressLint(\"HandlerLeak\")\n    private Handler mHandler = new Handler() {\n\n        @Override\n        public void handleMessage(Message msg) {\n\n            long pos;\n            switch (msg.what) {\n                case FADE_OUT:\n                    hide();\n                    break;\n                case SHOW_PROGRESS:\n                    pos = setProgress();\n                    if (!mDragging && mShowing) {\n                        msg = obtainMessage(SHOW_PROGRESS);\n                        sendMessageDelayed(msg, 1000 - (pos % 1000));\n                        updatePausePlay();\n                    }\n                    break;\n            }\n        }\n    };\n\n    private OnClickListener mPauseListener = v -> {\n\n        doPauseResume();\n        show(sDefaultTimeout);\n    };\n\n    private Runnable lastRunnable;\n\n    private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {\n\n        public void onStartTrackingTouch(SeekBar bar) {\n\n            mDragging = true;\n            show(3600000);\n            mHandler.removeMessages(SHOW_PROGRESS);\n            if (mInstantSeeking)\n                mAM.setStreamMute(AudioManager.STREAM_MUSIC, true);\n            if (mInfoView != null) {\n                mInfoView.setText(\"\");\n                mInfoView.setVisibility(View.VISIBLE);\n            }\n        }\n\n        public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {\n\n            if (!fromuser)\n                return;\n\n            final long newposition = (mDuration * progress) / 1000;\n            String time = generateTime(newposition);\n            if (mInstantSeeking) {\n                mHandler.removeCallbacks(lastRunnable);\n                lastRunnable = () -> mPlayer.seekTo(newposition);\n                mHandler.postDelayed(lastRunnable, 200);\n            }\n            if (mInfoView != null)\n                mInfoView.setText(time);\n            if (mCurrentTime != null)\n                mCurrentTime.setText(time);\n        }\n\n        public void onStopTrackingTouch(SeekBar bar) {\n\n            if (!mInstantSeeking)\n                mPlayer.seekTo((mDuration * bar.getProgress()) / 1000);\n            if (mInfoView != null) {\n                mInfoView.setText(\"\");\n                mInfoView.setVisibility(View.GONE);\n            }\n            show(sDefaultTimeout);\n            mHandler.removeMessages(SHOW_PROGRESS);\n            mAM.setStreamMute(AudioManager.STREAM_MUSIC, false);\n            mDragging = false;\n            mHandler.sendEmptyMessageDelayed(SHOW_PROGRESS, 1000);\n        }\n    };\n\n\n    public MediaController(Context context, AttributeSet attrs) {\n\n        super(context, attrs);\n        mRoot = this;\n        mFromXml = true;\n        initController(context);\n    }\n\n    public MediaController(Context context) {\n\n        super(context);\n        if (!mFromXml && initController(context))\n            initFloatingWindow();\n    }\n\n    private static String generateTime(long position) {\n\n        int totalSeconds = (int) ((position / 1000.0) + 0.5);\n\n        int seconds = totalSeconds % 60;\n        int minutes = (totalSeconds / 60) % 60;\n        int hours = totalSeconds / 3600;\n\n        if (hours > 0) {\n            return String.format(Locale.US, \"%02d:%02d:%02d\", hours, minutes,\n                    seconds);\n        } else {\n            return String.format(Locale.US, \"%02d:%02d\", minutes, seconds);\n        }\n    }\n\n    private boolean initController(Context context) {\n\n        mContext = context;\n        mAM = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);\n        return true;\n    }\n\n    @Override\n    public void onFinishInflate() {\n\n        super.onFinishInflate();\n        if (mRoot != null)\n            initControllerView(mRoot);\n    }\n\n\n    private void initFloatingWindow() {\n\n        mWindow = new PopupWindow(mContext);\n        mWindow.setFocusable(false);\n        mWindow.setBackgroundDrawable(null);\n        mWindow.setOutsideTouchable(true);\n        mAnimStyle = android.R.style.Animation;\n    }\n\n    /**\n     * 设置VideoView\n     *\n     * @param view\n     */\n    public void setAnchorView(View view) {\n\n        mAnchor = view;\n        if (!mFromXml) {\n            removeAllViews();\n            mRoot = makeControllerView();\n            mWindow.setContentView(mRoot);\n            mWindow.setWidth(LayoutParams.MATCH_PARENT);\n            mWindow.setHeight(LayoutParams.MATCH_PARENT);\n        }\n        initControllerView(mRoot);\n    }\n\n    /**\n     * 创建视图包含小部件,控制回放\n     *\n     * @return\n     */\n    protected View makeControllerView() {\n\n        return ((LayoutInflater) mContext\n                .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(\n                R.layout.layout_media_controller, this);\n    }\n\n    private void initControllerView(View v) {\n\n        mPauseButton = (ImageButton) v.findViewById(R.id.media_controller_play_pause);\n        mTvPlay = (ImageView) v.findViewById(R.id.media_controller_tv_play);\n        if (mPauseButton != null && mTvPlay != null) {\n            mPauseButton.requestFocus();\n            mPauseButton.setOnClickListener(mPauseListener);\n            mTvPlay.requestFocus();\n            mTvPlay.setOnClickListener(v13 -> {\n                doPauseResume();\n                show(sDefaultTimeout);\n            });\n        }\n\n        mProgress = (SeekBar) v.findViewById(R.id.media_controller_seekbar);\n        if (mProgress != null) {\n            if (mProgress instanceof SeekBar) {\n                SeekBar seeker = (SeekBar) mProgress;\n                seeker.setOnSeekBarChangeListener(mSeekListener);\n                seeker.setThumbOffset(1);\n            }\n            mProgress.setMax(1000);\n        }\n\n        mEndTime = (TextView) v.findViewById(R.id.media_controller_time_total);\n        mCurrentTime = (TextView) v\n                .findViewById(R.id.media_controller_time_current);\n        mTitleView = (TextView) v.findViewById(R.id.media_controller_title);\n        if (mTitleView != null)\n            mTitleView.setText(mTitle);\n\n        LinearLayout mDanmakuLayout = (LinearLayout) v.findViewById(R.id.media_controller_danmaku_layout);\n        ImageView mDanmakuImage = (ImageView) v.findViewById(R.id.media_controller_danmaku_switch);\n        TextView mDanmakuText = (TextView) v.findViewById(R.id.media_controller_danmaku_text);\n        mDanmakuLayout.setOnClickListener(v1 -> {\n\n            if (mDanmakuShow) {\n                mDanmakuImage.setImageResource(R.drawable.bili_player_danmaku_is_open);\n                mDanmakuText.setText(\"弹幕开\");\n                mDanmukuSwitchListener.setDanmakushow(true);\n                mDanmakuShow = false;\n            } else {\n                mDanmakuImage.setImageResource(R.drawable.bili_player_danmaku_is_closed);\n                mDanmakuText.setText(\"弹幕关\");\n                mDanmukuSwitchListener.setDanmakushow(false);\n                mDanmakuShow = true;\n            }\n        });\n\n        mBack = (ImageView) v.findViewById(R.id.media_controller_back);\n        mBack.setOnClickListener(v12 -> mVideoBackListener.back());\n    }\n\n    public void setMediaPlayer(MediaPlayerListener player) {\n\n        mPlayer = player;\n        updatePausePlay();\n    }\n\n    /**\n     * 拖动seekBar时回调\n     *\n     * @param seekWhenDragging\n     */\n    public void setInstantSeeking(boolean seekWhenDragging) {\n\n        mInstantSeeking = seekWhenDragging;\n    }\n\n    public void show() {\n\n        show(sDefaultTimeout);\n    }\n\n    /**\n     * 设置播放的文件名称\n     *\n     * @param name\n     */\n    public void setTitle(String name) {\n\n        mTitle = name;\n        if (mTitleView != null)\n            mTitleView.setText(mTitle);\n    }\n\n    /**\n     * 设置MediaController持有的View\n     *\n     * @param v\n     */\n    public void setInfoView(OutlineTextView v) {\n\n        mInfoView = v;\n    }\n\n    private void disableUnsupportedButtons() {\n\n\n        if (mPauseButton != null && mTvPlay != null && !mPlayer.canPause()) {\n            mPauseButton.setEnabled(false);\n            mTvPlay.setEnabled(false);\n        }\n    }\n\n    /**\n     * 改变控制器的动画风格的资源\n     */\n    public void setAnimationStyle(int animationStyle) {\n\n        mAnimStyle = animationStyle;\n    }\n\n    /**\n     * 在屏幕上显示控制器\n     *\n     * @param timeout\n     */\n    @SuppressLint(\"InlinedApi\")\n    public void show(int timeout) {\n\n        if (!mShowing && mAnchor != null && mAnchor.getWindowToken() != null) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {\n                mAnchor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);\n            }\n            if (mPauseButton != null && mTvPlay != null) {\n                mPauseButton.requestFocus();\n                mTvPlay.requestFocus();\n            }\n            disableUnsupportedButtons();\n\n            if (mFromXml) {\n                setVisibility(View.VISIBLE);\n            } else {\n                int[] location = new int[2];\n\n                mAnchor.getLocationOnScreen(location);\n                Rect anchorRect = new Rect(location[0], location[1],\n                        location[0] + mAnchor.getWidth(), location[1]\n                        + mAnchor.getHeight());\n\n                mWindow.setAnimationStyle(mAnimStyle);\n                mWindow.showAtLocation(mAnchor, Gravity.BOTTOM,\n                        anchorRect.left, 0);\n            }\n            mShowing = true;\n            if (mShownListener != null)\n                mShownListener.onShown();\n        }\n        updatePausePlay();\n        mHandler.sendEmptyMessage(SHOW_PROGRESS);\n\n        if (timeout != 0) {\n            mHandler.removeMessages(FADE_OUT);\n            mHandler.sendMessageDelayed(mHandler.obtainMessage(FADE_OUT),\n                    timeout);\n        }\n    }\n\n    public boolean isShowing() {\n\n        return mShowing;\n    }\n\n    @SuppressLint(\"InlinedApi\")\n    public void hide() {\n\n        if (mAnchor == null)\n            return;\n\n        if (mShowing) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {\n                mAnchor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);\n            }\n            try {\n                mHandler.removeMessages(SHOW_PROGRESS);\n                if (mFromXml)\n                    setVisibility(View.GONE);\n                else\n                    mWindow.dismiss();\n            } catch (IllegalArgumentException ex) {\n                LogUtil.e(\"MediaController already removed\");\n            }\n            mShowing = false;\n            if (mHiddenListener != null)\n                mHiddenListener.onHidden();\n        }\n    }\n\n    public void setOnShownListener(OnShownListener l) {\n\n        mShownListener = l;\n    }\n\n    public void setOnHiddenListener(OnHiddenListener l) {\n\n        mHiddenListener = l;\n    }\n\n    private long setProgress() {\n\n        if (mPlayer == null || mDragging)\n            return 0;\n\n        int position = mPlayer.getCurrentPosition();\n        int duration = mPlayer.getDuration();\n        if (mProgress != null) {\n            if (duration > 0) {\n                long pos = 1000L * position / duration;\n                mProgress.setProgress((int) pos);\n            }\n            int percent = mPlayer.getBufferPercentage();\n            mProgress.setSecondaryProgress(percent * 10);\n        }\n\n        mDuration = duration;\n\n        if (mEndTime != null)\n            mEndTime.setText(generateTime(mDuration));\n        if (mCurrentTime != null)\n            mCurrentTime.setText(generateTime(position));\n\n        return position;\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent event) {\n\n        show(sDefaultTimeout);\n        return true;\n    }\n\n    @Override\n    public boolean onTrackballEvent(MotionEvent ev) {\n\n        show(sDefaultTimeout);\n        return false;\n    }\n\n    @Override\n    public boolean dispatchKeyEvent(KeyEvent event) {\n\n        int keyCode = event.getKeyCode();\n        if (event.getRepeatCount() == 0\n                && (keyCode == KeyEvent.KEYCODE_HEADSETHOOK\n                || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keyCode == KeyEvent.KEYCODE_SPACE)) {\n            doPauseResume();\n            show(sDefaultTimeout);\n            if (mPauseButton != null && mTvPlay != null) {\n                mPauseButton.requestFocus();\n                mTvPlay.requestFocus();\n            }\n            return true;\n        } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP) {\n            if (mPlayer.isPlaying()) {\n                mPlayer.pause();\n                updatePausePlay();\n            }\n            return true;\n        } else if (keyCode == KeyEvent.KEYCODE_BACK\n                || keyCode == KeyEvent.KEYCODE_MENU) {\n            hide();\n            return true;\n        } else {\n            show(sDefaultTimeout);\n        }\n        return super.dispatchKeyEvent(event);\n    }\n\n    private void updatePausePlay() {\n\n        if (mRoot == null || mPauseButton == null || mTvPlay == null)\n            return;\n\n        if (mPlayer.isPlaying()) {\n            mPauseButton.setImageResource(R.drawable.bili_player_play_can_pause);\n            mTvPlay.setImageResource(R.drawable.ic_tv_stop);\n        } else {\n            mPauseButton.setImageResource(R.drawable.bili_player_play_can_play);\n            mTvPlay.setImageResource(R.drawable.ic_tv_play);\n        }\n    }\n\n    private void doPauseResume() {\n\n        if (mPlayer.isPlaying())\n            mPlayer.pause();\n        else\n            mPlayer.start();\n        updatePausePlay();\n    }\n\n    @Override\n    public void setEnabled(boolean enabled) {\n\n        if (mPauseButton != null)\n            mPauseButton.setEnabled(enabled);\n        if (mTvPlay != null)\n            mTvPlay.setEnabled(enabled);\n        if (mProgress != null)\n            mProgress.setEnabled(enabled);\n        disableUnsupportedButtons();\n        super.setEnabled(enabled);\n    }\n\n    public interface OnShownListener {\n        void onShown();\n\n    }\n\n    public interface OnHiddenListener {\n\n        void onHidden();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/OutlineTextView.java",
    "content": "package com.yoyiyi.soleil.media;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Typeface;\nimport android.text.Layout;\nimport android.text.StaticLayout;\nimport android.text.TextPaint;\nimport android.util.AttributeSet;\nimport android.widget.TextView;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:下划线\n */\n@SuppressLint(\"DrawAllocation\")\npublic class OutlineTextView extends TextView {\n\n    private TextPaint mTextPaint;\n\n    private TextPaint mTextPaintOutline;\n\n    private String mText = \"\";\n\n    private float mBorderSize;\n\n    private int mBorderColor;\n\n    private int mColor;\n\n    private float mSpacingMult = 1.0f;\n\n    private float mSpacingAdd = 0;\n\n    private boolean mIncludePad = true;\n\n    public OutlineTextView(Context context) {\n\n        super(context);\n        initPaint();\n    }\n\n    public OutlineTextView(Context context, AttributeSet attrs) {\n\n        super(context, attrs);\n        initPaint();\n    }\n\n    public OutlineTextView(Context context, AttributeSet attrs, int defStyle) {\n\n        super(context, attrs, defStyle);\n        initPaint();\n    }\n\n    private void initPaint() {\n\n        mTextPaint = new TextPaint();\n        mTextPaint.setAntiAlias(true);\n        mTextPaint.setTextSize(getTextSize());\n        mTextPaint.setColor(mColor);\n        mTextPaint.setStyle(Paint.Style.FILL);\n        mTextPaint.setTypeface(getTypeface());\n\n        mTextPaintOutline = new TextPaint();\n        mTextPaintOutline.setAntiAlias(true);\n        mTextPaintOutline.setTextSize(getTextSize());\n        mTextPaintOutline.setColor(mBorderColor);\n        mTextPaintOutline.setStyle(Paint.Style.STROKE);\n        mTextPaintOutline.setTypeface(getTypeface());\n        mTextPaintOutline.setStrokeWidth(mBorderSize);\n    }\n\n    public void setText(String text) {\n\n        super.setText(text);\n        mText = text;\n        requestLayout();\n        invalidate();\n    }\n\n    public void setTextSize(float size) {\n\n        super.setTextSize(size);\n        requestLayout();\n        invalidate();\n        initPaint();\n    }\n\n    public void setTextColor(int color) {\n\n        super.setTextColor(color);\n        mColor = color;\n        invalidate();\n        initPaint();\n    }\n\n    public void setShadowLayer(float radius, float dx, float dy, int color) {\n\n        super.setShadowLayer(radius, dx, dy, color);\n        mBorderSize = radius;\n        mBorderColor = color;\n        requestLayout();\n        invalidate();\n        initPaint();\n    }\n\n    public void setTypeface(Typeface tf, int style) {\n\n        super.setTypeface(tf, style);\n        requestLayout();\n        invalidate();\n        initPaint();\n    }\n\n    public void setTypeface(Typeface tf) {\n\n        super.setTypeface(tf);\n        requestLayout();\n        invalidate();\n        initPaint();\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n\n        Layout layout = new StaticLayout(getText(), mTextPaintOutline,\n                getWidth(), Layout.Alignment.ALIGN_CENTER, mSpacingMult,\n                mSpacingAdd, mIncludePad);\n        layout.draw(canvas);\n        layout = new StaticLayout(getText(), mTextPaint, getWidth(),\n                Layout.Alignment.ALIGN_CENTER, mSpacingMult, mSpacingAdd,\n                mIncludePad);\n        layout.draw(canvas);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n\n        Layout layout = new StaticLayout(getText(), mTextPaintOutline,\n                measureWidth(widthMeasureSpec), Layout.Alignment.ALIGN_CENTER,\n                mSpacingMult, mSpacingAdd, mIncludePad);\n        int ex = (int) (mBorderSize * 2 + 1);\n        setMeasuredDimension(measureWidth(widthMeasureSpec) + ex,\n                measureHeight(heightMeasureSpec) * layout.getLineCount() + ex);\n    }\n\n    private int measureWidth(int measureSpec) {\n\n        int result = 0;\n        int specMode = MeasureSpec.getMode(measureSpec);\n        int specSize = MeasureSpec.getSize(measureSpec);\n\n        if (specMode == MeasureSpec.EXACTLY) {\n            result = specSize;\n        } else {\n            result = (int) mTextPaintOutline.measureText(mText)\n                    + getPaddingLeft() + getPaddingRight();\n            if (specMode == MeasureSpec.AT_MOST) {\n                result = Math.min(result, specSize);\n            }\n        }\n\n        return result;\n    }\n\n    private int measureHeight(int measureSpec) {\n\n        int result = 0;\n        int specMode = MeasureSpec.getMode(measureSpec);\n        int specSize = MeasureSpec.getSize(measureSpec);\n\n        int mAscent = (int) mTextPaintOutline.ascent();\n        if (specMode == MeasureSpec.EXACTLY) {\n            result = specSize;\n        } else {\n            result = (int) (-mAscent + mTextPaintOutline.descent())\n                    + getPaddingTop() + getPaddingBottom();\n            if (specMode == MeasureSpec.AT_MOST) {\n                result = Math.min(result, specSize);\n            }\n        }\n        return result;\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/ScreenResolution.java",
    "content": "\npackage com.yoyiyi.soleil.media;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.os.Build;\nimport android.util.DisplayMetrics;\nimport android.util.Pair;\nimport android.view.Display;\nimport android.view.WindowManager;\n\nimport java.lang.reflect.Method;\n\n/**\n * Class to get the real screen resolution includes the system status bar.\n * We can get the value by calling the getRealMetrics method if API >= 17\n * Reflection needed on old devices..\n */\npublic class ScreenResolution {\n    /**\n     * Gets the resolution,\n     *\n     * @return a pair to return the width and height\n     */\n    public static Pair<Integer, Integer> getResolution(Context ctx) {\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {\n            return getRealResolution(ctx);\n        } else {\n            return getRealResolutionOnOldDevice(ctx);\n        }\n    }\n\n    /**\n     * Gets resolution on old devices.\n     * Tries the reflection to get the real resolution first.\n     * Fall back to getDisplayMetrics if the above method failed.\n     */\n    private static Pair<Integer, Integer> getRealResolutionOnOldDevice(Context ctx) {\n\n        try {\n            WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);\n            Display display = wm.getDefaultDisplay();\n            Method mGetRawWidth = Display.class.getMethod(\"getRawWidth\");\n            Method mGetRawHeight = Display.class.getMethod(\"getRawHeight\");\n            Integer realWidth = (Integer) mGetRawWidth.invoke(display);\n            Integer realHeight = (Integer) mGetRawHeight.invoke(display);\n            return new Pair<>(realWidth, realHeight);\n        } catch (Exception e) {\n            DisplayMetrics disp = ctx.getResources().getDisplayMetrics();\n            return new Pair<>(disp.widthPixels, disp.heightPixels);\n        }\n    }\n\n    /**\n     * Gets real resolution via the new getRealMetrics API.\n     */\n    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)\n    private static Pair<Integer, Integer> getRealResolution(Context ctx) {\n\n        WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);\n        Display display = wm.getDefaultDisplay();\n        DisplayMetrics metrics = new DisplayMetrics();\n        display.getRealMetrics(metrics);\n        return new Pair<>(metrics.widthPixels, metrics.heightPixels);\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/VideoPlayerView.java",
    "content": "package com.yoyiyi.soleil.media;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.media.AudioManager;\nimport android.net.Uri;\nimport android.util.AttributeSet;\nimport android.util.Pair;\nimport android.view.KeyEvent;\nimport android.view.MotionEvent;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\nimport android.view.View;\nimport android.view.ViewGroup.LayoutParams;\n\nimport com.yoyiyi.soleil.R;\nimport com.yoyiyi.soleil.media.callback.MediaPlayerListener;\n\nimport java.io.IOException;\n\nimport tv.danmaku.ijk.media.player.IMediaPlayer;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnBufferingUpdateListener;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnCompletionListener;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnErrorListener;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnInfoListener;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnPreparedListener;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnSeekCompleteListener;\nimport tv.danmaku.ijk.media.player.IMediaPlayer.OnVideoSizeChangedListener;\nimport tv.danmaku.ijk.media.player.IjkMediaPlayer;\nimport tv.danmaku.ijk.media.player.pragma.DebugLog;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:自定义播放器\n */\npublic class VideoPlayerView extends SurfaceView implements MediaPlayerListener {\n\n    private static final String TAG = VideoPlayerView.class.getName();\n\n    public static final int VIDEO_LAYOUT_ORIGIN = 0;\n\n    public static final int VIDEO_LAYOUT_SCALE = 1;\n\n    public static final int VIDEO_LAYOUT_STRETCH = 2;\n\n    public static final int VIDEO_LAYOUT_ZOOM = 3;\n\n    private static final int STATE_ERROR = -1;\n\n    private static final int STATE_IDLE = 0;\n\n    private static final int STATE_PREPARING = 1;\n\n    private static final int STATE_PREPARED = 2;\n\n    private static final int STATE_PLAYING = 3;\n\n    private static final int STATE_PAUSED = 4;\n\n    private static final int STATE_PLAYBACK_COMPLETED = 5;\n\n    private static final int STATE_SUSPEND = 6;\n\n    private static final int STATE_RESUME = 7;\n\n    private static final int STATE_SUSPEND_UNSUPPORTED = 8;\n\n    private Uri mUri;\n\n    private long mDuration;\n\n    private String mUserAgent;\n\n    private int mCurrentState = STATE_IDLE;\n\n    private int mTargetState = STATE_IDLE;\n\n    private int mVideoLayout = VIDEO_LAYOUT_SCALE;\n\n    private SurfaceHolder mSurfaceHolder = null;\n\n    private IMediaPlayer mMediaPlayer = null;\n\n    private int mVideoWidth;\n\n    private int mVideoHeight;\n\n    private int mVideoSarNum;\n\n    private int mVideoSarDen;\n\n    private int mSurfaceWidth;\n\n    private int mSurfaceHeight;\n\n    private MediaController mMediaController;\n\n    private View mMediaBufferingIndicator;\n\n    private OnCompletionListener mOnCompletionListener;\n\n    private OnPreparedListener mOnPreparedListener;\n\n    private OnErrorListener mOnErrorListener;\n\n    private OnSeekCompleteListener mOnSeekCompleteListener;\n\n    private OnInfoListener mOnInfoListener;\n\n    private OnBufferingUpdateListener mOnBufferingUpdateListener;\n\n    private OnControllerEventsListener mOnControllerEventsListener;\n\n    private int mCurrentBufferPercentage;\n\n    private long mSeekWhenPrepared;\n\n    private boolean mCanPause = true;\n\n    private boolean mCanSeekBack = true;\n\n    private boolean mCanSeekForward = true;\n\n    private Context mContext;\n\n    OnVideoSizeChangedListener mSizeChangedListener = new OnVideoSizeChangedListener() {\n\n        public void onVideoSizeChanged(IMediaPlayer mp, int width, int height,\n                                       int sarNum, int sarDen) {\n\n            DebugLog.dfmt(TAG, \"onVideoSizeChanged: (%dx%d)\", width, height);\n            mVideoWidth = mp.getVideoWidth();\n            mVideoHeight = mp.getVideoHeight();\n            mVideoSarNum = sarNum;\n            mVideoSarDen = sarDen;\n            if (mVideoWidth != 0 && mVideoHeight != 0)\n                setVideoLayout(mVideoLayout);\n        }\n    };\n\n    OnPreparedListener mPreparedListener = new OnPreparedListener() {\n\n        public void onPrepared(IMediaPlayer mp) {\n\n            DebugLog.d(TAG, \"onPrepared\");\n            mCurrentState = STATE_PREPARED;\n            mTargetState = STATE_PLAYING;\n\n            if (mOnPreparedListener != null)\n                mOnPreparedListener.onPrepared(mMediaPlayer);\n            if (mMediaController != null)\n                mMediaController.setEnabled(true);\n            mVideoWidth = mp.getVideoWidth();\n            mVideoHeight = mp.getVideoHeight();\n\n            long seekToPosition = mSeekWhenPrepared;\n\n            if (seekToPosition != 0)\n                seekTo(seekToPosition);\n            if (mVideoWidth != 0 && mVideoHeight != 0) {\n                setVideoLayout(mVideoLayout);\n                if (mSurfaceWidth == mVideoWidth\n                        && mSurfaceHeight == mVideoHeight) {\n                    if (mTargetState == STATE_PLAYING) {\n                        start();\n                        if (mMediaController != null)\n                            mMediaController.show();\n                    } else if (!isPlaying()\n                            && (seekToPosition != 0 || getCurrentPosition() > 0)) {\n                        if (mMediaController != null)\n                            mMediaController.show(0);\n                    }\n                }\n            } else if (mTargetState == STATE_PLAYING) {\n                start();\n            }\n        }\n    };\n\n    private OnCompletionListener mCompletionListener = new OnCompletionListener() {\n\n        public void onCompletion(IMediaPlayer mp) {\n\n            DebugLog.d(TAG, \"onCompletion\");\n            mCurrentState = STATE_PLAYBACK_COMPLETED;\n            mTargetState = STATE_PLAYBACK_COMPLETED;\n            if (mMediaController != null)\n                mMediaController.hide();\n            if (mOnCompletionListener != null)\n                mOnCompletionListener.onCompletion(mMediaPlayer);\n        }\n    };\n\n    private OnErrorListener mErrorListener = new OnErrorListener() {\n\n        public boolean onError(IMediaPlayer mp, int framework_err, int impl_err) {\n\n            DebugLog.dfmt(TAG, \"Error: %d, %d\", framework_err, impl_err);\n            mCurrentState = STATE_ERROR;\n            mTargetState = STATE_ERROR;\n            if (mMediaController != null)\n                mMediaController.hide();\n\n            if (mOnErrorListener != null) {\n                if (mOnErrorListener.onError(mMediaPlayer, framework_err,\n                        impl_err))\n                    return true;\n            }\n\n            if (getWindowToken() != null) {\n                int message = framework_err == IMediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK ?\n                        R.string.video_error_text_invalid_progressive_playback : R.string.video_error_text_unknown;\n\n                new AlertDialog.Builder(mContext)\n                        .setTitle(R.string.video_error_title)\n                        .setMessage(message)\n                        .setPositiveButton(\n                                R.string.video_error_button,\n                                (dialog, whichButton) -> {\n\n                                    if (mOnCompletionListener != null)\n                                        mOnCompletionListener\n                                                .onCompletion(mMediaPlayer);\n                                }).setCancelable(false).show();\n            }\n            return true;\n        }\n    };\n\n    private OnBufferingUpdateListener mBufferingUpdateListener = new OnBufferingUpdateListener() {\n\n        public void onBufferingUpdate(IMediaPlayer mp, int percent) {\n\n            mCurrentBufferPercentage = percent;\n            if (mOnBufferingUpdateListener != null)\n                mOnBufferingUpdateListener.onBufferingUpdate(mp, percent);\n        }\n    };\n\n    private OnInfoListener mInfoListener = new OnInfoListener() {\n\n        @Override\n        public boolean onInfo(IMediaPlayer mp, int what, int extra) {\n\n            DebugLog.dfmt(TAG, \"onInfo: (%d, %d)\", what, extra);\n            if (mOnInfoListener != null) {\n                mOnInfoListener.onInfo(mp, what, extra);\n            } else if (mMediaPlayer != null) {\n                if (what == IMediaPlayer.MEDIA_INFO_BUFFERING_START) {\n                    DebugLog.dfmt(TAG, \"onInfo: (MEDIA_INFO_BUFFERING_START)\");\n                    if (mMediaBufferingIndicator != null)\n                        mMediaBufferingIndicator.setVisibility(View.VISIBLE);\n                } else if (what == IMediaPlayer.MEDIA_INFO_BUFFERING_END) {\n                    DebugLog.dfmt(TAG, \"onInfo: (MEDIA_INFO_BUFFERING_END)\");\n                    if (mMediaBufferingIndicator != null)\n                        mMediaBufferingIndicator.setVisibility(View.GONE);\n                }\n            }\n\n            return true;\n        }\n    };\n\n    private OnSeekCompleteListener mSeekCompleteListener = new OnSeekCompleteListener() {\n\n        @Override\n        public void onSeekComplete(IMediaPlayer mp) {\n\n            DebugLog.d(TAG, \"onSeekComplete\");\n            if (mOnSeekCompleteListener != null)\n                mOnSeekCompleteListener.onSeekComplete(mp);\n        }\n    };\n\n    SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() {\n\n        public void surfaceChanged(SurfaceHolder holder, int format, int w,\n                                   int h) {\n\n            mSurfaceHolder = holder;\n            if (mMediaPlayer != null) {\n                mMediaPlayer.setDisplay(mSurfaceHolder);\n            }\n\n            mSurfaceWidth = w;\n            mSurfaceHeight = h;\n            boolean isValidState = (mTargetState == STATE_PLAYING);\n            boolean hasValidSize = (mVideoWidth == w && mVideoHeight == h);\n            if (mMediaPlayer != null && isValidState && hasValidSize) {\n                if (mSeekWhenPrepared != 0)\n                    seekTo(mSeekWhenPrepared);\n                start();\n                if (mMediaController != null) {\n                    if (mMediaController.isShowing())\n                        mMediaController.hide();\n                    mMediaController.show();\n                }\n            }\n        }\n\n        public void surfaceCreated(SurfaceHolder holder) {\n\n            mSurfaceHolder = holder;\n            if (mMediaPlayer != null && mCurrentState == STATE_SUSPEND\n                    && mTargetState == STATE_RESUME) {\n                mMediaPlayer.setDisplay(mSurfaceHolder);\n                resume();\n            } else {\n                openVideo();\n            }\n        }\n\n        public void surfaceDestroyed(SurfaceHolder holder) {\n\n            mSurfaceHolder = null;\n            if (mMediaController != null)\n                mMediaController.hide();\n            if (mCurrentState != STATE_SUSPEND)\n                release(true);\n        }\n    };\n\n    public VideoPlayerView(Context context) {\n\n        super(context);\n        initVideoView(context);\n    }\n\n    public VideoPlayerView(Context context, AttributeSet attrs) {\n\n        this(context, attrs, 0);\n    }\n\n    public VideoPlayerView(Context context, AttributeSet attrs, int defStyle) {\n\n        super(context, attrs, defStyle);\n        initVideoView(context);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n\n        int width = getDefaultSize(mVideoWidth, widthMeasureSpec);\n        int height = getDefaultSize(mVideoHeight, heightMeasureSpec);\n        setMeasuredDimension(width, height);\n    }\n\n\n    public void setVideoLayout(int layout) {\n\n        LayoutParams lp = getLayoutParams();\n        Pair<Integer, Integer> res = ScreenResolution.getResolution(mContext);\n        int windowWidth = res.first, windowHeight = res.second;\n        float windowRatio = windowWidth / (float) windowHeight;\n        int sarNum = mVideoSarNum;\n        int sarDen = mVideoSarDen;\n        if (mVideoHeight > 0 && mVideoWidth > 0) {\n            float videoRatio = ((float) (mVideoWidth)) / mVideoHeight;\n            if (sarNum > 0 && sarDen > 0)\n                videoRatio = videoRatio * sarNum / sarDen;\n            mSurfaceHeight = mVideoHeight;\n            mSurfaceWidth = mVideoWidth;\n\n            if (VIDEO_LAYOUT_ORIGIN == layout && mSurfaceWidth < windowWidth\n                    && mSurfaceHeight < windowHeight) {\n                lp.width = (int) (mSurfaceHeight * videoRatio);\n                lp.height = mSurfaceHeight;\n            } else if (layout == VIDEO_LAYOUT_ZOOM) {\n                lp.width = windowRatio > videoRatio ? windowWidth\n                        : (int) (videoRatio * windowHeight);\n                lp.height = windowRatio < videoRatio ? windowHeight\n                        : (int) (windowWidth / videoRatio);\n            } else {\n                boolean full = layout == VIDEO_LAYOUT_STRETCH;\n                lp.width = (full || windowRatio < videoRatio) ? windowWidth\n                        : (int) (videoRatio * windowHeight);\n                lp.height = (full || windowRatio > videoRatio) ? windowHeight\n                        : (int) (windowWidth / videoRatio);\n            }\n            setLayoutParams(lp);\n            getHolder().setFixedSize(mSurfaceWidth, mSurfaceHeight);\n            DebugLog.dfmt(\n                    TAG,\n                    \"VIDEO: %dx%dx%f[SAR:%d:%d], Surface: %dx%d, LP: %dx%d, Window: %dx%dx%f\",\n                    mVideoWidth, mVideoHeight, videoRatio, mVideoSarNum,\n                    mVideoSarDen, mSurfaceWidth, mSurfaceHeight, lp.width,\n                    lp.height, windowWidth, windowHeight, windowRatio);\n        }\n        mVideoLayout = layout;\n    }\n\n    private void initVideoView(Context ctx) {\n\n        mContext = ctx;\n        mVideoWidth = 0;\n        mVideoHeight = 0;\n        mVideoSarNum = 0;\n        mVideoSarDen = 0;\n        getHolder().addCallback(mSHCallback);\n        setFocusable(true);\n        setFocusableInTouchMode(true);\n        requestFocus();\n        mCurrentState = STATE_IDLE;\n        mTargetState = STATE_IDLE;\n        if (ctx instanceof Activity)\n            ((Activity) ctx).setVolumeControlStream(AudioManager.STREAM_MUSIC);\n    }\n\n    public boolean isValid() {\n\n        return (mSurfaceHolder != null && mSurfaceHolder.getSurface().isValid());\n    }\n\n    public void setVideoPath(String path) {\n\n        setVideoURI(Uri.parse(path));\n    }\n\n    public void setVideoURI(Uri uri) {\n\n        mUri = uri;\n        mSeekWhenPrepared = 0;\n        openVideo();\n        requestLayout();\n        invalidate();\n    }\n\n    public void setUserAgent(String ua) {\n\n        mUserAgent = ua;\n    }\n\n    public void stopPlayback() {\n\n        if (mMediaPlayer != null) {\n            mMediaPlayer.stop();\n            mMediaPlayer.release();\n            mMediaPlayer = null;\n            mCurrentState = STATE_IDLE;\n            mTargetState = STATE_IDLE;\n        }\n    }\n\n    private void openVideo() {\n\n        if (mUri == null || mSurfaceHolder == null)\n            return;\n\n        Intent i = new Intent(\"com.android.music.musicservicecommand\");\n        i.putExtra(\"command\", \"pause\");\n        mContext.sendBroadcast(i);\n\n        release(false);\n        try {\n            mDuration = -1;\n            mCurrentBufferPercentage = 0;\n            // mMediaPlayer = new AndroidMediaPlayer();\n            IjkMediaPlayer ijkMediaPlayer = null;\n            if (mUri != null) {\n                ijkMediaPlayer = new IjkMediaPlayer();\n                ijkMediaPlayer.setLogEnabled(false);\n\n//                ijkMediaPlayer.setAvOption(AvFormatOption_HttpDetectRangeSupport.Disable);\n//                ijkMediaPlayer.setOverlayFormat(AvFourCC.SDL_FCC_RV32);\n//                ijkMediaPlayer.setMediaCodecEnabled(true);\n                ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, \"skip_loop_filter\", \"48\");\n                //ijkMediaPlayer.setAvCodecOption(\"skip_loop_filter\", \"48\");\n                //ijkMediaPlayer.setFrameDrop(12);\n                if (mUserAgent != null) {\n                    //ijkMediaPlayer.setAvFormatOption(\"user_agent\", mUserAgent);\n                }\n            }\n            mMediaPlayer = ijkMediaPlayer;\n            assert mMediaPlayer != null;\n            mMediaPlayer.setOnPreparedListener(mPreparedListener);\n            mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);\n            mMediaPlayer.setOnCompletionListener(mCompletionListener);\n            mMediaPlayer.setOnErrorListener(mErrorListener);\n            mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);\n            mMediaPlayer.setOnInfoListener(mInfoListener);\n            mMediaPlayer.setOnSeekCompleteListener(mSeekCompleteListener);\n            if (mUri != null)\n                mMediaPlayer.setDataSource(mUri.toString());\n            mMediaPlayer.setDisplay(mSurfaceHolder);\n            mMediaPlayer.setScreenOnWhilePlaying(true);\n            mMediaPlayer.prepareAsync();\n            mCurrentState = STATE_PREPARING;\n            attachMediaController();\n        } catch (IOException ex) {\n            DebugLog.e(TAG, \"Unable to open content: \" + mUri, ex);\n            mCurrentState = STATE_ERROR;\n            mTargetState = STATE_ERROR;\n            mErrorListener.onError(mMediaPlayer,\n                    IMediaPlayer.MEDIA_ERROR_UNKNOWN, 0);\n            return;\n        } catch (IllegalArgumentException ex) {\n            DebugLog.e(TAG, \"Unable to open content: \" + mUri, ex);\n            mCurrentState = STATE_ERROR;\n            mTargetState = STATE_ERROR;\n            mErrorListener.onError(mMediaPlayer,\n                    IMediaPlayer.MEDIA_ERROR_UNKNOWN, 0);\n            return;\n        }\n    }\n\n    public void setMediaController(MediaController controller) {\n\n        if (mMediaController != null)\n            mMediaController.hide();\n        mMediaController = controller;\n        attachMediaController();\n    }\n\n    public void setMediaBufferingIndicator(View mediaBufferingIndicator) {\n\n        if (mMediaBufferingIndicator != null)\n            mMediaBufferingIndicator.setVisibility(View.GONE);\n        mMediaBufferingIndicator = mediaBufferingIndicator;\n    }\n\n    private void attachMediaController() {\n\n        if (mMediaPlayer != null && mMediaController != null) {\n            mMediaController.setMediaPlayer(this);\n            View anchorView = this.getParent() instanceof View ? (View) this\n                    .getParent() : this;\n            mMediaController.setAnchorView(anchorView);\n            mMediaController.setEnabled(isInPlaybackState());\n        }\n    }\n\n    public void setOnPreparedListener(OnPreparedListener l) {\n\n        mOnPreparedListener = l;\n    }\n\n    public void setOnCompletionListener(OnCompletionListener l) {\n\n        mOnCompletionListener = l;\n    }\n\n    public void setOnErrorListener(OnErrorListener l) {\n\n        mOnErrorListener = l;\n    }\n\n    public void setOnBufferingUpdateListener(OnBufferingUpdateListener l) {\n\n        mOnBufferingUpdateListener = l;\n    }\n\n    public void setOnSeekCompleteListener(OnSeekCompleteListener l) {\n\n        mOnSeekCompleteListener = l;\n    }\n\n    public void setOnInfoListener(OnInfoListener l) {\n\n        mOnInfoListener = l;\n    }\n\n    public void setOnControllerEventsListener(OnControllerEventsListener l) {\n\n        mOnControllerEventsListener = l;\n    }\n\n    private void release(boolean cleartargetstate) {\n\n        if (mMediaPlayer != null) {\n            mMediaPlayer.reset();\n            mMediaPlayer.release();\n            mMediaPlayer = null;\n            mCurrentState = STATE_IDLE;\n            if (cleartargetstate)\n                mTargetState = STATE_IDLE;\n        }\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent ev) {\n\n        if (isInPlaybackState() && mMediaController != null)\n            toggleMediaControlsVisiblity();\n        return false;\n    }\n\n    @Override\n    public boolean onTrackballEvent(MotionEvent ev) {\n\n        if (isInPlaybackState() && mMediaController != null)\n            toggleMediaControlsVisiblity();\n        return false;\n    }\n\n    @Override\n    public boolean onKeyDown(int keyCode, KeyEvent event) {\n\n        boolean isKeyCodeSupported = keyCode != KeyEvent.KEYCODE_BACK\n                && keyCode != KeyEvent.KEYCODE_VOLUME_UP\n                && keyCode != KeyEvent.KEYCODE_VOLUME_DOWN\n                && keyCode != KeyEvent.KEYCODE_MENU\n                && keyCode != KeyEvent.KEYCODE_CALL\n                && keyCode != KeyEvent.KEYCODE_ENDCALL;\n        if (isInPlaybackState() && isKeyCodeSupported\n                && mMediaController != null) {\n            if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK\n                    || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE\n                    || keyCode == KeyEvent.KEYCODE_SPACE) {\n                if (mMediaPlayer.isPlaying()) {\n                    pause();\n                    mMediaController.show();\n                } else {\n                    start();\n                    mMediaController.hide();\n                }\n                return true;\n            } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP\n                    && mMediaPlayer.isPlaying()) {\n                pause();\n                mMediaController.show();\n            } else {\n                toggleMediaControlsVisiblity();\n            }\n        }\n\n        return super.onKeyDown(keyCode, event);\n    }\n\n    private void toggleMediaControlsVisiblity() {\n\n        if (mMediaController.isShowing()) {\n            mMediaController.hide();\n        } else {\n            mMediaController.show();\n        }\n    }\n\n    @Override\n    public void start() {\n\n        if (isInPlaybackState()) {\n            mMediaPlayer.start();\n            mCurrentState = STATE_PLAYING;\n        }\n        mTargetState = STATE_PLAYING;\n        mOnControllerEventsListener.OnVideoResume();\n    }\n\n    @Override\n    public void pause() {\n\n        if (isInPlaybackState()) {\n            if (mMediaPlayer.isPlaying()) {\n                mMediaPlayer.pause();\n                mCurrentState = STATE_PAUSED;\n            }\n        }\n        mTargetState = STATE_PAUSED;\n        mOnControllerEventsListener.onVideoPause();\n    }\n\n    public void resume() {\n\n        if (mSurfaceHolder == null && mCurrentState == STATE_SUSPEND) {\n            mTargetState = STATE_RESUME;\n        } else if (mCurrentState == STATE_SUSPEND_UNSUPPORTED) {\n            openVideo();\n        }\n    }\n\n    @Override\n    public int getDuration() {\n\n        if (isInPlaybackState()) {\n            if (mDuration > 0)\n                return (int) mDuration;\n            mDuration = mMediaPlayer.getDuration();\n            return (int) mDuration;\n        }\n        mDuration = -1;\n        return (int) mDuration;\n    }\n\n    @Override\n    public int getCurrentPosition() {\n\n        if (isInPlaybackState()) {\n            long position = mMediaPlayer.getCurrentPosition();\n            return (int) position;\n        }\n        return 0;\n    }\n\n    @Override\n    public void seekTo(long msec) {\n\n        if (isInPlaybackState()) {\n            mMediaPlayer.seekTo(msec);\n            mSeekWhenPrepared = 0;\n        } else {\n            mSeekWhenPrepared = msec;\n        }\n    }\n\n    @Override\n    public boolean isPlaying() {\n\n        return isInPlaybackState() && mMediaPlayer.isPlaying();\n    }\n\n    @Override\n    public int getBufferPercentage() {\n\n        if (mMediaPlayer != null)\n            return mCurrentBufferPercentage;\n        return 0;\n    }\n\n    public int getVideoWidth() {\n\n        return mVideoWidth;\n    }\n\n    public int getVideoHeight() {\n\n        return mVideoHeight;\n    }\n\n    protected boolean isInPlaybackState() {\n\n        return (mMediaPlayer != null && mCurrentState != STATE_ERROR\n                && mCurrentState != STATE_IDLE && mCurrentState != STATE_PREPARING);\n    }\n\n    public boolean canPause() {\n\n        return mCanPause;\n    }\n\n    public boolean canSeekBackward() {\n\n        return mCanSeekBack;\n    }\n\n    public boolean canSeekForward() {\n\n        return mCanSeekForward;\n    }\n\n    public interface OnControllerEventsListener {\n\n        void onVideoPause();\n\n        void OnVideoResume();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/callback/DanmukuSwitchListener.java",
    "content": "package com.yoyiyi.soleil.media.callback;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:弹幕开关回调\n */\npublic interface DanmukuSwitchListener {\n    void setDanmakushow(boolean isShow);\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/callback/MediaPlayerListener.java",
    "content": "package com.yoyiyi.soleil.media.callback;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:控制视频回调\n */\npublic interface MediaPlayerListener {\n\n    void start();//开始\n\n    void pause();//暂停\n\n    int getDuration();//获取时间\n\n    int getCurrentPosition();//获取当前位置\n\n    void seekTo(long pos);//跳\n\n    boolean isPlaying();//判断是否正在播放\n\n    int getBufferPercentage();\n\n    boolean canPause();//能暂停\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/callback/VideoBackListener.java",
    "content": "package com.yoyiyi.soleil.media.callback;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:视频返回回调\n */\npublic interface VideoBackListener {\n    void back();\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/danmuku/BiliDanmukuCompressionTools.java",
    "content": "package com.yoyiyi.soleil.media.danmuku;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.util.zip.DataFormatException;\nimport java.util.zip.Deflater;\nimport java.util.zip.Inflater;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:压缩工具\n */\npublic class BiliDanmukuCompressionTools {\n    // Export only static methods\n    private BiliDanmukuCompressionTools() {\n\n    }\n\n    public static byte[] compress(byte[] value, int offset, int length, int compressionLevel) {\n        ByteArrayOutputStream bos = new ByteArrayOutputStream(length);\n        Deflater compressor = new Deflater();\n        try {\n            compressor.setLevel(compressionLevel); // 将当前压缩级别设置为指定值。\n            compressor.setInput(value, offset, length);\n            compressor.finish(); // 调用时，指示压缩应当以输入缓冲区的当前内容结尾。\n            // Compress the data\n            final byte[] buf = new byte[1024];\n            while (!compressor.finished()) {\n                // 如果已到达压缩数据输出流的结尾，则返回 true。\n                int count = compressor.deflate(buf);\n                // 使用压缩数据填充指定缓冲区。\n                bos.write(buf, 0, count);\n            }\n        } finally {\n            compressor.end(); // 关闭解压缩器并放弃所有未处理的输入。\n        }\n        return bos.toByteArray();\n    }\n\n    public static byte[] compress(byte[] value, int offset, int length) {\n        return compress(value, offset, length, Deflater.BEST_COMPRESSION);\n        // 最佳压缩的压缩级别\n    }\n\n    public static byte[] compress(byte[] value) {\n        return compress(value, 0, value.length, Deflater.BEST_COMPRESSION);\n    }\n\n    public static byte[] decompress(byte[] value) throws DataFormatException {\n\n        ByteArrayOutputStream bos = new ByteArrayOutputStream(value.length);\n\n        Inflater decompressor = new Inflater();\n\n        try {\n            decompressor.setInput(value);\n\n            final byte[] buf = new byte[1024];\n            while (!decompressor.finished()) {\n                int count = decompressor.inflate(buf);\n                bos.write(buf, 0, count);\n            }\n        } finally {\n            decompressor.end();\n        }\n\n        return bos.toByteArray();\n    }\n\n    static byte[] decompressXML(byte[] data) throws DataFormatException {\n\n        byte[] dest = new byte[data.length + 2];\n        System.arraycopy(data, 0, dest, 2, data.length);\n        dest[0] = 0x78;\n        dest[1] = 0x01;\n        data = dest;\n        Inflater decompresser = new Inflater();\n        decompresser.setInput(data);\n\n        byte[] bufferArray = new byte[1024];\n        ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);\n        try {\n            int i = 1;\n            while (i != 0) {\n                i = decompresser.inflate(bufferArray);\n                baos.write(bufferArray, 0, i);\n            }\n            data = baos.toByteArray();\n        } catch (Exception e) {\n            e.printStackTrace();\n        } finally {\n            try {\n                baos.flush();\n                baos.close();\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n\n        decompresser.end();\n        return data;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/danmuku/BiliDanmukuDownloadUtil.java",
    "content": "package com.yoyiyi.soleil.media.danmuku;\n\nimport android.text.TextUtils;\n\nimport org.jsoup.Jsoup;\nimport org.jsoup.helper.HttpConnection;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.zip.DataFormatException;\n\nimport io.reactivex.BackpressureStrategy;\nimport io.reactivex.Flowable;\nimport master.flame.danmaku.danmaku.loader.ILoader;\nimport master.flame.danmaku.danmaku.loader.IllegalDataException;\nimport master.flame.danmaku.danmaku.loader.android.DanmakuLoaderFactory;\nimport master.flame.danmaku.danmaku.model.IDanmakus;\nimport master.flame.danmaku.danmaku.model.android.Danmakus;\nimport master.flame.danmaku.danmaku.parser.BaseDanmakuParser;\nimport master.flame.danmaku.danmaku.parser.IDataSource;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:视频弹幕下载\n */\npublic class BiliDanmukuDownloadUtil {\n    public static Flowable<BaseDanmakuParser> downloadXML(final String uri) {\n        return Flowable.create(emitter -> {\n            if (TextUtils.isEmpty(uri)) {\n                emitter.onNext(new BaseDanmakuParser() {\n                    @Override\n                    protected IDanmakus parse() {\n                        return new Danmakus();\n                    }\n                });\n            }\n            ILoader loader = null;\n            try {\n                HttpConnection.Response rsp = (HttpConnection.Response)\n                        Jsoup.connect(uri).timeout(20000).execute();\n                InputStream stream = new ByteArrayInputStream(BiliDanmukuCompressionTools.\n                        decompressXML(rsp.bodyAsBytes()));\n\n                loader = DanmakuLoaderFactory.\n                        create(DanmakuLoaderFactory.TAG_BILI);\n                loader.load(stream);\n            } catch (IOException | DataFormatException | IllegalDataException e) {\n                e.printStackTrace();\n            }\n            BaseDanmakuParser parser = new BiliDanmukuParser();\n            assert loader != null;\n            IDataSource<?> dataSource = loader.getDataSource();\n            parser.load(dataSource);\n            emitter.onNext(parser);\n        }, BackpressureStrategy.BUFFER);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/media/danmuku/BiliDanmukuParser.java",
    "content": "package com.yoyiyi.soleil.media.danmuku;\n\nimport android.graphics.Color;\nimport android.text.TextUtils;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.xml.sax.Attributes;\nimport org.xml.sax.InputSource;\nimport org.xml.sax.SAXException;\nimport org.xml.sax.XMLReader;\nimport org.xml.sax.helpers.DefaultHandler;\nimport org.xml.sax.helpers.XMLReaderFactory;\n\nimport java.io.IOException;\nimport java.util.Locale;\n\nimport master.flame.danmaku.danmaku.model.AlphaValue;\nimport master.flame.danmaku.danmaku.model.BaseDanmaku;\nimport master.flame.danmaku.danmaku.model.Duration;\nimport master.flame.danmaku.danmaku.model.IDisplayer;\nimport master.flame.danmaku.danmaku.model.android.DanmakuFactory;\nimport master.flame.danmaku.danmaku.model.android.Danmakus;\nimport master.flame.danmaku.danmaku.parser.BaseDanmakuParser;\nimport master.flame.danmaku.danmaku.parser.android.AndroidFileSource;\nimport master.flame.danmaku.danmaku.util.DanmakuUtils;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/23 9:03\n * 描述:弹幕解析\n */\npublic class BiliDanmukuParser extends BaseDanmakuParser {\n\n    static {\n        System.setProperty(\"org.xml.sax.driver\", \"org.xmlpull.v1.sax2.Driver\");\n    }\n\n    private float mDispScaleX;\n    private float mDispScaleY;\n\n    @Override\n    public Danmakus parse() {\n\n        if (mDataSource != null) {\n            AndroidFileSource source = (AndroidFileSource) mDataSource;\n            try {\n                XMLReader xmlReader = XMLReaderFactory.createXMLReader();\n                XmlContentHandler contentHandler = new XmlContentHandler();\n                xmlReader.setContentHandler(contentHandler);\n                xmlReader.parse(new InputSource(source.data()));\n                return contentHandler.getResult();\n            } catch (SAXException e) {\n                e.printStackTrace();\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n\n        }\n\n        return null;\n    }\n\n    public class XmlContentHandler extends DefaultHandler {\n\n        private static final String TRUE_STRING = \"true\";\n\n        public Danmakus result = null;\n\n        public BaseDanmaku item = null;\n\n        public boolean completed = false;\n\n        public int index = 0;\n\n        public Danmakus getResult() {\n            return result;\n        }\n\n        @Override\n        public void startDocument() throws SAXException {\n            result = new Danmakus();\n        }\n\n        @Override\n        public void endDocument() throws SAXException {\n            completed = true;\n        }\n\n        @Override\n        public void startElement(String uri, String localName, String qName, Attributes attributes)\n                throws SAXException {\n            String tagName = localName.length() != 0 ? localName : qName;\n            tagName = tagName.toLowerCase(Locale.getDefault()).trim();\n            if (tagName.equals(\"d\")) {\n                // <d p=\"23.826000213623,1,25,16777215,1422201084,0,057075e9,757076900\">我从未见过如此厚颜无耻之猴</d>\n                // 0:时间(弹幕出现时间)\n                // 1:类型(1从右至左滚动弹幕|6从左至右滚动弹幕|5顶端固定弹幕|4底端固定弹幕|7高级弹幕|8脚本弹幕)\n                // 2:字号\n                // 3:颜色\n                // 4:时间戳 ?\n                // 5:弹幕池id\n                // 6:用户hash\n                // 7:弹幕id\n                String pValue = attributes.getValue(\"p\");\n                // parse p value to danmaku\n                String[] values = pValue.split(\",\");\n                if (values.length > 0) {\n                    long time = (long) (Float.parseFloat(values[0]) * 1000); // 出现时间\n                    int type = Integer.parseInt(values[1]); // 弹幕类型\n                    float textSize = Float.parseFloat(values[2]); // 字体大小\n                    int color = (int) ((0x00000000ff000000 | Long.parseLong(values[3])) & 0x00000000ffffffff); // 颜色\n                    // int poolType = Integer.parseInt(values[5]); // 弹幕池类型（忽略\n                    item = mContext.mDanmakuFactory.createDanmaku(type, mContext);\n                    if (item != null) {\n                        item.setTime(time);\n                        item.textSize = textSize * (mDispDensity - 0.6f);\n                        item.textColor = color;\n                        item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK;\n                    }\n                }\n            }\n        }\n\n        @Override\n        public void endElement(String uri, String localName, String qName) throws SAXException {\n            if (item != null) {\n                if (item.duration != null) {\n                    String tagName = localName.length() != 0 ? localName : qName;\n                    if (tagName.equalsIgnoreCase(\"d\")) {\n                        item.setTimer(mTimer);\n                        result.addItem(item);\n                    }\n                }\n                item = null;\n            }\n        }\n\n        @Override\n        public void characters(char[] ch, int start, int length) {\n            if (item != null) {\n                DanmakuUtils.fillText(item, decodeXmlString(new String(ch, start, length)));\n                item.index = index++;\n\n                // initial specail danmaku data\n                String text = String.valueOf(item.text).trim();\n                if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith(\"[\")\n                        && text.endsWith(\"]\")) {\n                    //text = text.substring(1, text.length() - 1);\n                    String[] textArr = null;//text.split(\",\", -1);\n                    try {\n                        JSONArray jsonArray = new JSONArray(text);\n                        textArr = new String[jsonArray.length()];\n                        for (int i = 0; i < textArr.length; i++) {\n                            textArr[i] = jsonArray.getString(i);\n                        }\n                    } catch (JSONException e) {\n                        e.printStackTrace();\n                    }\n\n                    if (textArr == null || textArr.length < 5) {\n                        item = null;\n                        return;\n                    }\n                    item.text = textArr[4];\n                    float beginX = Float.parseFloat(textArr[0]);\n                    float beginY = Float.parseFloat(textArr[1]);\n                    float endX = beginX;\n                    float endY = beginY;\n                    String[] alphaArr = textArr[2].split(\"-\");\n                    int beginAlpha = (int) (AlphaValue.MAX * Float.parseFloat(alphaArr[0]));\n                    int endAlpha = beginAlpha;\n                    if (alphaArr.length > 1) {\n                        endAlpha = (int) (AlphaValue.MAX * Float.parseFloat(alphaArr[1]));\n                    }\n                    long alphaDuraion = (long) (Float.parseFloat(textArr[3]) * 1000);\n                    long translationDuration = alphaDuraion;\n                    long translationStartDelay = 0;\n                    float rotateY = 0, rotateZ = 0;\n                    if (textArr.length >= 7) {\n                        rotateZ = Float.parseFloat(textArr[5]);\n                        rotateY = Float.parseFloat(textArr[6]);\n                    }\n                    if (textArr.length >= 11) {\n                        endX = Float.parseFloat(textArr[7]);\n                        endY = Float.parseFloat(textArr[8]);\n                        if (!\"\".equals(textArr[9])) {\n                            translationDuration = Integer.parseInt(textArr[9]);\n                        }\n                        if (!\"\".equals(textArr[10])) {\n                            translationStartDelay = (long) (Float.parseFloat(textArr[10]));\n                        }\n                    }\n                    if (isPercentageNumber(beginX)) {\n                        beginX *= DanmakuFactory.BILI_PLAYER_WIDTH;\n                    }\n                    if (isPercentageNumber(beginY)) {\n                        beginY *= DanmakuFactory.BILI_PLAYER_HEIGHT;\n                    }\n                    if (isPercentageNumber(endX)) {\n                        endX *= DanmakuFactory.BILI_PLAYER_WIDTH;\n                    }\n                    if (isPercentageNumber(endY)) {\n                        endY *= DanmakuFactory.BILI_PLAYER_HEIGHT;\n                    }\n                    item.duration = new Duration(alphaDuraion);\n                    item.rotationZ = rotateZ;\n                    item.rotationY = rotateY;\n                    mContext.mDanmakuFactory.fillTranslationData(item, beginX,\n                            beginY, endX, endY, translationDuration, translationStartDelay, mDispScaleX, mDispScaleY);\n                    mContext.mDanmakuFactory.fillAlphaData(item, beginAlpha, endAlpha, alphaDuraion);\n\n                    if (textArr.length >= 12) {\n                        // 是否有描边\n                        if (!TextUtils.isEmpty(textArr[11]) && TRUE_STRING.equals(textArr[11])) {\n                            item.textShadowColor = Color.TRANSPARENT;\n                        }\n                    }\n                    if (textArr.length >= 13) {\n                        //TODO 字体 textArr[12]\n                    }\n                    if (textArr.length >= 14) {\n                        //TODO 是否有动画缓冲(easing)\n                    }\n                    if (textArr.length >= 15) {\n                        // 路径数据\n                        if (!\"\".equals(textArr[14])) {\n                            String motionPathString = textArr[14].substring(1);\n                            String[] pointStrArray = motionPathString.split(\"L\");\n                            if (pointStrArray != null && pointStrArray.length > 0) {\n                                float[][] points = new float[pointStrArray.length][2];\n                                for (int i = 0; i < pointStrArray.length; i++) {\n                                    String[] pointArray = pointStrArray[i].split(\",\");\n                                    points[i][0] = Float.parseFloat(pointArray[0]);\n                                    points[i][1] = Float.parseFloat(pointArray[1]);\n                                }\n                                mContext.mDanmakuFactory.fillLinePathData(item, points, mDispScaleX,\n                                        mDispScaleY);\n                            }\n                        }\n                    }\n                }\n\n            }\n        }\n\n        private String decodeXmlString(String title) {\n            if (title.contains(\"&amp;\")) {\n                title = title.replace(\"&amp;\", \"&\");\n            }\n            if (title.contains(\"&quot;\")) {\n                title = title.replace(\"&quot;\", \"\\\"\");\n            }\n            if (title.contains(\"&gt;\")) {\n                title = title.replace(\"&gt;\", \">\");\n            }\n            if (title.contains(\"&lt;\")) {\n                title = title.replace(\"&lt;\", \"<\");\n            }\n            return title;\n        }\n\n    }\n\n    private boolean isPercentageNumber(float number) {\n        return number >= 0f && number <= 1f;\n    }\n\n    @Override\n    public BaseDanmakuParser setDisplayer(IDisplayer disp) {\n        super.setDisplayer(disp);\n        mDispScaleX = mDispWidth / DanmakuFactory.BILI_PLAYER_WIDTH;\n        mDispScaleY = mDispHeight / DanmakuFactory.BILI_PLAYER_HEIGHT;\n        return this;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/BrowerActivity.kt",
    "content": "package com.yoyiyi.soleil.module.app\n\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport android.support.v7.app.AppCompatActivity\nimport android.text.TextUtils\nimport android.view.KeyEvent\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.view.View\nimport android.webkit.WebChromeClient\nimport android.webkit.WebSettings\nimport android.webkit.WebView\nimport android.webkit.WebViewClient\nimport cn.sharesdk.onekeyshare.OnekeyShare\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.ClipboardUtils\nimport com.yoyiyi.soleil.utils.ToastUtils\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_brower.*\nimport kotlinx.android.synthetic.main.common_toolbar.*\nimport kotlinx.android.synthetic.main.layout_loading.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/9 21:56\n * * 描述:浏览器界面\n */\nclass BrowerActivity : AppCompatActivity() {\n\n    private var mTitle: String? = null\n    private var mUrl: String? = null\n    private var mImg: String? = null\n\n\n    companion object {\n\n        fun startActivity(context: Context, url: String, title: String, img: String) {\n            val intent = Intent(context, BrowerActivity::class.java)\n            intent.putExtra(Constants.EXTRA_TITLE, title)\n            intent.putExtra(Constants.EXTRA_URL, url)\n            intent.putExtra(Constants.EXTRA_IMAGE, img)\n            context.startActivity(intent)\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_brower)\n        initVariables()\n        initWedgit()\n\n\n    }\n\n\n    private fun initToolar() {\n        toolbar?.let {\n            it.setNavigationIcon(R.drawable.ic_clip_back_white)\n            it.title = if (TextUtils.isEmpty(mTitle)) \"详情\" else mTitle\n            setSupportActionBar(it)\n            it.setNavigationOnClickListener { finish() }\n        }\n    }\n\n    private fun initWedgit() {\n        initToolar()\n        initWebView()\n        StatusBarUtil.setColorNoTranslucent(this, AppUtils.getColor(R.color.colorPrimary))\n        //强制隐藏加载框\n        // AppUtils.runOnUIDelayed(() -> mPwLoading.setVisibility(View.GONE), 650);\n    }\n\n    private fun initVariables() {\n        intent?.let {\n            mTitle = intent.getStringExtra(Constants.EXTRA_TITLE)\n            mUrl = intent.getStringExtra(Constants.EXTRA_URL)\n            mImg = intent.getStringExtra(Constants.EXTRA_IMAGE)\n        }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_brower, menu)\n        return true\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        val id = item.itemId\n        when (id) {\n            R.id.menu_open -> {\n                val intent = Intent(Intent.ACTION_VIEW)\n                intent.data = Uri.parse(mUrl)\n                startActivity(intent)\n            }\n            R.id.menu_share -> showShare()\n            R.id.menu_copy -> {\n                ClipboardUtils.copyText(mUrl)\n                ToastUtils.showSingleLongToast(\"复制成功\")\n            }\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    internal inner class WebClientBase : WebViewClient() {\n\n        override fun onPageFinished(webView: WebView, s: String) {\n            super.onPageFinished(webView, s)\n            pw_loading?.visibility = View.GONE\n            web_view?.settings?.blockNetworkImage = false\n            val h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)\n            val w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)\n            web_view?.measure(w, h)\n        }\n\n        override fun onReceivedError(webView: WebView, i: Int, s: String, s1: String) {\n            super.onReceivedError(webView, i, s, s1)\n            pw_loading?.visibility = View.GONE\n            val errorHtml = \"<html><body><h2>找不到网页</h2></body></html>\"\n            web_view?.loadDataWithBaseURL(null, errorHtml, \"text/html\", \"UTF-8\", null)\n        }\n\n    }\n\n    @SuppressLint(\"SetJavaScriptEnabled\")\n    internal fun initWebView() {\n        val webChromeClient = WebClient()\n        val webViewClient = WebClientBase()\n        val webSettings = web_view.settings\n        //设置js支持\n        webSettings.javaScriptEnabled = true\n        // 设置支持javascript脚本\n        webSettings.javaScriptCanOpenWindowsAutomatically = false\n        //设置缓存\n        webSettings.cacheMode = WebSettings.LOAD_NO_CACHE\n        webSettings.domStorageEnabled = true\n        webSettings.setGeolocationEnabled(true)\n        webSettings.useWideViewPort = true//关键点\n        webSettings.loadWithOverviewMode = true//全屏\n        webSettings.builtInZoomControls = true// 设置显示缩放按钮\n        webSettings.setSupportZoom(true)//支持缩放\n        webSettings.displayZoomControls = false\n        webSettings.setAppCacheEnabled(true)\n        webSettings.layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN\n        web_view.isDrawingCacheEnabled = true\n        web_view.settings.blockNetworkImage = true\n        web_view.setWebViewClient(webViewClient)\n        web_view.requestFocus(View.FOCUS_DOWN)\n        web_view.settings.defaultTextEncodingName = \"UTF-8\"\n        web_view.setWebChromeClient(webChromeClient)\n        web_view.loadUrl(mUrl)\n    }\n\n\n    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {\n        if (keyCode == KeyEvent.KEYCODE_BACK && web_view!!.canGoBack()) {\n            web_view.goBack()// 返回前一个页面\n            return true\n        }\n        return super.onKeyDown(keyCode, event)\n    }\n\n    internal inner class WebClient : WebChromeClient() {\n\n        override fun onProgressChanged(webView: WebView, i: Int) {\n            if (i >= 40) {\n                pw_loading.visibility = View.GONE\n            } else {\n                pw_loading.visibility = View.VISIBLE\n            }\n            web_view?.settings?.blockNetworkImage = false\n            super.onProgressChanged(webView, i)\n        }\n    }\n\n    override fun onDestroy() {\n        web_view?.destroy()\n        super.onDestroy()\n    }\n\n    private fun showShare() {\n        //  ShareSDK.initSDK(this);\n        val oks = OnekeyShare()\n        //关闭sso授权\n        oks.disableSSOWhenAuthorize()\n        // title标题，印象笔记、邮箱、信息、微信、人人网和QQ空间等使用\n        oks.setTitle(\"来自\" + getString(R.string.app_name) + \"的分享\")\n        // titleUrl是标题的网络链接，QQ和QQ空间等使用\n        oks.setTitleUrl(mUrl)\n        // text是分享文本，所有平台都需要这个字段\n        oks.text = mTitle + \"\" + mUrl\n        oks.setImageUrl(mImg)\n        // imagePath是图片的本地路径，Linked-In以外的平台都支持此参数\n        //oks.setImagePath(\"/sdcard/test.jpg\");//确保SDcard下面存在此张图片\n        // url仅在微信（包括好友和朋友圈）中使用\n        oks.setUrl(mUrl)\n        // comment是我对这条分享的评论，仅在人人网和QQ空间使用\n        oks.setComment(\"文本\")\n        // site是分享此内容的网站名称，仅在QQ空间使用\n        oks.setSite(getString(R.string.app_name))\n        // siteUrl是分享此内容的网站地址，仅在QQ空间使用\n        oks.setSiteUrl(mUrl)\n        // 启动分享GUI\n        oks.show(this)\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/LoginActivity.kt",
    "content": "package com.yoyiyi.soleil.module.app\n\nimport android.content.Intent\nimport android.text.TextUtils\nimport android.view.View\nimport com.jakewharton.rxbinding2.view.RxView\nimport com.jakewharton.rxbinding2.widget.RxTextView\nimport com.jakewharton.rxbinding2.widget.TextViewTextChangeEvent\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseActivity\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.module.MainActivity\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport com.yoyiyi.soleil.utils.PrefsUtils\nimport com.yoyiyi.soleil.utils.ToastUtils\nimport kotlinx.android.synthetic.main.activity_login.*\nimport java.util.concurrent.TimeUnit\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 14:38\n * * 描述:登录界面\n */\n\nclass LoginActivity : BaseActivity() {\n\n\n    override fun getLayoutId(): Int = R.layout.activity_login\n\n    override fun initWidget() {\n        //名称监听\n        RxView.focusChanges(et_username)\n                .compose(bindToLifecycle())\n                .subscribe { aBoolean ->\n                    if (aBoolean) {\n                        if (et_username.text.isNotEmpty()) {\n                            visible(delete_username)\n                        } else {\n                            gone(delete_username)\n                        }\n                    } else {\n                        gone(delete_username)\n                    }\n                    iv_icon_left.setImageResource(R.drawable.ic_22)\n                    iv_icon_right.setImageResource(R.drawable.ic_33)\n                }\n        //密码监听\n        RxView.focusChanges(et_password)\n                .compose(bindToLifecycle())\n                .subscribe { aBoolean ->\n                    if (aBoolean) {\n                        iv_icon_left.setImageResource(R.drawable.ic_22_hide)\n                        iv_icon_right.setImageResource(R.drawable.ic_33_hide)\n                    }\n                }\n        //监听名称变化\n        RxTextView.textChangeEvents(et_username)\n                .compose<TextViewTextChangeEvent>(bindToLifecycle<TextViewTextChangeEvent>())\n                .subscribe { textViewTextChangeEvent ->\n                    et_password.setText(\"\")\n                    if (textViewTextChangeEvent.count() > 0) {\n                        visible(delete_username)\n                    } else {\n                        gone(delete_username)\n                    }\n                }\n        //点击登录监听\n        RxView.clicks(btn_login)\n                .throttleFirst(5, TimeUnit.SECONDS)//5秒内取第一个事件 防止重复点击发送事件\n                .compose(bindToLifecycle<Any>())\n                .subscribe {\n                    val isAvailable = NetworkUtils.isConnected(AppUtils.getAppContext())\n                    if (!isAvailable) {\n                        ToastUtils.showCenterSingleToast(\"当前网络不可用\")\n                    } else {\n                        //登录\n                        login()\n                    }\n                }\n        //点击删除监听\n        RxView.clicks(delete_username)\n                .throttleFirst(5, TimeUnit.SECONDS)//5秒内取第一个事件 防止重复\n                .compose(bindToLifecycle())\n                .subscribe {\n                    // 清空用户名以及密码\n                    et_username.setText(\"\")\n                    et_password.setText(\"\")\n                    delete_username.visibility = View.GONE\n                    et_username.isFocusable = true\n                    et_username.isFocusableInTouchMode = true\n                    et_username.requestFocus()\n                }\n    }\n\n    /**\n     * 假登录\n     */\n    private fun login() {\n        val name = et_username.text.toString()\n        val password = et_password.text.toString()\n        if (TextUtils.isEmpty(name)) {\n            ToastUtils.showCenterSingleToast(\"用户名不能为空\")\n            return\n        }\n        if (TextUtils.isEmpty(password)) {\n            ToastUtils.showCenterSingleToast(\"密码不能为空\")\n            return\n        }\n\n        PrefsUtils.getInstance().putBoolean(Constants.IS_LOGINED_FLAG, true)\n        startActivity(Intent(this, MainActivity::class.java))\n        finish()\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"登录\"\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/MainActivity.kt",
    "content": "package com.yoyiyi.soleil.module\n\nimport android.annotation.SuppressLint\nimport android.content.Intent\nimport android.support.design.internal.NavigationMenuView\nimport android.support.design.widget.NavigationView\nimport android.support.v4.app.Fragment\nimport android.support.v4.view.GravityCompat\nimport android.view.KeyEvent\nimport android.view.MenuItem\nimport com.yoyiyi.soleil.App\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseActivity\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.module.entrance.OfflineDownloadActivity\nimport com.yoyiyi.soleil.module.entrance.VipActivity\nimport com.yoyiyi.soleil.module.home.HomeFragment\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_main.*\nimport org.jetbrains.anko.toast\n\nclass MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener {\n    private var exitTime = 0L\n    private var mCurrentPos = -1\n    private var mFragments = mutableListOf<Fragment>()\n\n    override fun getLayoutId(): Int = R.layout.activity_main\n\n\n    private fun initFragment() {\n        mFragments.add(HomeFragment.newInstance())\n\n    }\n\n\n    override fun initWidget() {\n        disableNavigationViewScrollbars(navView)\n        navView.setNavigationItemSelectedListener(this)\n        switchFragmentIndex(0)//初始化位置\n    }\n\n\n    @SuppressLint(\"CommitTransaction\")\n    fun switchFragmentIndex(index: Int) {\n        supportFragmentManager\n                .beginTransaction()\n                .apply {\n                    if (mCurrentPos != -1)\n                        hide(mFragments[mCurrentPos])\n                    if (!mFragments[index].isAdded) {\n                        add(R.id.flContent, mFragments[index])\n                    }\n                    show(mFragments[index]).commit()\n                }\n    }\n\n    /**\n     * 侧滑面板监听事件\n\n     * @param item\n     * *\n     * @return\n     */\n    override fun onNavigationItemSelected(item: MenuItem): Boolean {\n        // Handle navigation view item clicks here.\n        AppUtils.runOnUIDelayed({\n            when (item.itemId) {\n                R.id.item_vip -> startActivity(Intent(this@MainActivity, VipActivity::class.java))\n                R.id.item_unicom -> BrowerActivity.startActivity(this@MainActivity, Constants.BLACK_BOARD_URL, \"联通免流量服务\", \"\")\n                R.id.item_down -> startActivity(Intent(this@MainActivity, OfflineDownloadActivity::class.java))\n            }\n        }, 230)\n        mDrawerLayout.closeDrawer(GravityCompat.START)\n        return true\n    }\n\n\n    /**\n     * 去掉滚动条\n\n     * @param navigationView navigationView\n     */\n    private fun disableNavigationViewScrollbars(navigationView: NavigationView?) {\n        navigationView?.let {\n            val navigationMenuView = it.getChildAt(0) as NavigationMenuView\n            navigationMenuView.isVerticalFadingEdgeEnabled = false\n        }\n    }\n\n    override fun initStatusBar() {\n        StatusBarUtil.setColorNoTranslucentForDrawerLayout(this, mDrawerLayout, AppUtils.getColor(R.color.colorPrimary))\n    }\n\n    override fun initVariables() {\n        initFragment()\n        //监听事件\n        RxBus.toFlowable(Event.StartNavigationEvent::class.java)\n                .compose(bindToLifecycle())\n                .subscribe({\n                    if (it.start) {\n                        toggleDrawer()//打开\n                    }\n                })\n    }\n\n\n    /**\n     * DrawerLayout侧滑菜单开关\n     */\n    fun toggleDrawer() {\n        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {\n            mDrawerLayout.closeDrawer(GravityCompat.START)\n        } else {\n            mDrawerLayout.openDrawer(GravityCompat.START)\n        }\n    }\n\n    /**\n     * 监听back键处理\n     */\n    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {\n        if (keyCode == KeyEvent.KEYCODE_BACK) {\n            if (mDrawerLayout.isDrawerOpen(mDrawerLayout.getChildAt(1))) {\n                mDrawerLayout.closeDrawers()\n            } else {\n                exitApp()\n            }\n        }\n        return true\n    }\n\n    /**\n     * 双击退出App\n     */\n    private fun exitApp() {\n        if (System.currentTimeMillis() - exitTime > 2000) {\n            toast(\"再按一次退出\")\n            exitTime = System.currentTimeMillis()\n        } else {\n            App.instance.exitApp()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/SplashActivity.kt",
    "content": "package com.yoyiyi.soleil.module\n\nimport android.content.Intent\nimport android.os.Bundle\nimport android.view.Window\nimport android.view.WindowManager\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.jakewharton.rxbinding2.view.RxView\nimport com.trello.rxlifecycle2.components.support.RxAppCompatActivity\nimport com.yoyiyi.soleil.App\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.app.Splash\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.di.component.DaggerActivityComponent\nimport com.yoyiyi.soleil.di.module.ActivityModule\nimport com.yoyiyi.soleil.module.app.LoginActivity\nimport com.yoyiyi.soleil.mvp.contract.app.SplashContract\nimport com.yoyiyi.soleil.mvp.presenter.app.SplashPresenter\nimport com.yoyiyi.soleil.utils.PrefsUtils\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_splash.*\nimport java.util.*\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\n\nclass SplashActivity : RxAppCompatActivity(), SplashContract.View {\n\n    @Inject\n    lateinit var mPresenter: SplashPresenter\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        // 隐藏标题栏\n        requestWindowFeature(Window.FEATURE_NO_TITLE)\n        // 隐藏状态栏\n        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,\n                WindowManager.LayoutParams.FLAG_FULLSCREEN)\n        setContentView(R.layout.activity_splash)\n        //设置透明\n        StatusBarUtil.setTransparent(this)\n        if (!isTaskRoot && intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intent.action != null && intent.action == Intent.ACTION_MAIN) {//防止重复实例化app\n            finish()\n            return@onCreate\n        }\n        initInject()\n        initWidget()\n        loadData()\n\n    }\n\n    fun initInject() {\n        DaggerActivityComponent.builder()\n                .appComponent(App.instance.appComponent)\n                .activityModule(ActivityModule(this))\n                .build()\n                .inject(this)\n        mPresenter.attachView(this)//依赖 保持p和v生命周期一致\n    }\n\n    override fun onDestroy() {\n        mPresenter.detachView()\n        super.onDestroy()\n    }\n\n    /**\n     * 跳转\n     */\n    fun redirect() {\n        var flag = PrefsUtils.getInstance().getBoolean(Constants.IS_LOGINED_FLAG, false)\n        flag = true\n        if (flag) {\n            startActivity(Intent(this, LoginActivity::class.java))\n            finish()\n        } else {\n            startActivity(Intent(this, MainActivity::class.java))\n            finish()\n        }\n    }\n\n    /**\n     * 初始化组件\n     */\n    fun initWidget() {\n        RxView.clicks(llCountDown)\n                .throttleFirst(3, TimeUnit.SECONDS)//3秒内响应第一次发射数据\n                .compose(bindToLifecycle())\n                .subscribe { _ -> redirect() }\n    }\n\n    /**\n     * 请求数据\n     */\n    fun loadData() {\n        mPresenter.getSplashData()\n        mPresenter.setCountDown()\n    }\n\n\n    override fun showError(msg: String) {\n        ivSplash.setImageResource(R.mipmap.ic_default_bg)\n    }\n\n    override fun complete() {\n\n    }\n\n    override fun showSplash(splash: Splash) {\n        val urls = splash.data\n        urls.let {\n            if (it.isNotEmpty()) {\n                val pos = Random().nextInt(urls.size)\n                Glide.with(this)\n                        .load(it[pos].thumb)\n                        //.load(\"http://i0.hdslb.com/bfs/archive/ba17d4df28fb0c28c8f596082d7328b4415ee28b.png\")\n                        .centerCrop()\n                        .diskCacheStrategy(DiskCacheStrategy.ALL)\n                        .dontAnimate()\n                        .into(ivSplash)\n            } else {\n                ivSplash.setImageResource(R.mipmap.ic_default_bg)\n            }\n        } ?: ivSplash.setImageResource(R.mipmap.ic_default_bg)\n\n    }\n\n    override fun showCountDown(count: Int) {\n        tvCountDown.text = count.toString()\n        if (count == 0) {\n            redirect()\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/ArchiveFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\n\nimport android.os.Bundle\nimport android.support.v7.widget.GridLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.app.up.ArchiveAdapter\nimport com.yoyiyi.soleil.base.BaseInjectFragment\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.app.up.ArchiveContract\nimport com.yoyiyi.soleil.mvp.presenter.app.up.ArchivePresenter\nimport kotlinx.android.synthetic.main.common_recycler.*\nimport kotlinx.android.synthetic.main.fragment_up_archive.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:主页\n */\n\nclass ArchiveFragment : BaseInjectFragment<ArchivePresenter>(), ArchiveContract.View {\n\n\n\n    private var mSetting: Int = 0\n    private val mList = mutableListOf<MulUpDetail>()\n    private var mAdapter: ArchiveAdapter? = null\n\n    override fun getLayoutId(): Int {\n        return R.layout.fragment_up_archive\n    }\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n        }\n        if (mSetting == 0) {\n            visible(iv_empty)\n        } else {\n            gone(iv_empty)\n        }\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun loadData() {\n        if (mSetting == 1)\n            mPresenter.getArchiveData()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = ArchiveAdapter(mList)\n        val mLayoutManager = GridLayoutManager(activity, 2)\n        mAdapter?.setSpanSizeLookup{ _, position -> mList[position].spanSize }\n        recycler?.layoutManager = mLayoutManager\n        recycler?.adapter = mAdapter\n    }\n\n\n    override fun initWidget() {\n        initRecyclerView()\n    }\n\n    override fun finishTask() {\n        gone(iv_empty, cl_error)\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun showError(msg: String) {\n        visible(cl_error)\n        gone(iv_empty)\n    }\n\n    override fun showArchive(mulUpDetailList: List<MulUpDetail>) {\n        mList.addAll(mulUpDetailList)\n        finishTask()\n    }\n\n    companion object {\n\n        fun newInstance(setting: Int): ArchiveFragment {\n            val fragment = ArchiveFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/BangumiFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.os.Bundle\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseFragment\nimport com.yoyiyi.soleil.constant.Constants\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:追番\n */\n\nclass BangumiFragment : BaseFragment() {\n\n    private var mSetting: Int = 0\n\n    override fun getLayoutId(): Int  = R.layout.fragment_up_bangumi\n\n\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n        }\n    }\n\n    companion object {\n        fun newInstance(setting: Int): BangumiFragment {\n            val fragment = BangumiFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/CoinsVideoFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.os.Bundle\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseFragment\nimport com.yoyiyi.soleil.constant.Constants\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:投币\n */\n\nclass CoinsVideoFragment : BaseFragment() {\n\n    private var mSetting: Int = 0\n\n    override fun getLayoutId(): Int = R.layout.fragment_up_coins_video\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n        }\n\n    }\n\n    companion object {\n        fun newInstance(setting: Int): CoinsVideoFragment {\n            val fragment = CoinsVideoFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/FavouriteFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.os.Bundle\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.app.up.FavouriteAdapter\nimport com.yoyiyi.soleil.base.BaseInjectFragment\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.constant.Constants\n\nimport com.yoyiyi.soleil.mvp.contract.app.up.FavouriteContract\nimport com.yoyiyi.soleil.mvp.presenter.app.up.FavouritePresenter\nimport kotlinx.android.synthetic.main.common_recycler.*\nimport kotlinx.android.synthetic.main.fragment_up_favourite.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:收藏\n */\n\nclass FavouriteFragment : BaseInjectFragment<FavouritePresenter>(), FavouriteContract.View {\n\n    private var mSetting: Int = 0\n    private val mList = mutableListOf<MulUpDetail>()\n    private var mAdapter: FavouriteAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_up_favourite\n\n\n\n    override fun showFavourite(mulUpDetailList: List<MulUpDetail>) {\n        mList.addAll(mulUpDetailList)\n        finishTask()\n    }\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n        }\n        if (mSetting == 0) {\n            visible(iv_empty)\n        } else {\n            gone(iv_empty)\n        }\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun loadData() {\n        if (mSetting == 1)\n            mPresenter.getFavouriteData()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = FavouriteAdapter(mList)\n        recycler?.setHasFixedSize(true)\n        val mLayoutManager = LinearLayoutManager(mContext)\n        recycler?.layoutManager = mLayoutManager\n        recycler?.adapter = mAdapter\n    }\n\n\n    override fun initWidget() {\n        initRecyclerView()\n    }\n\n    override fun finishTask() {\n\n        gone(iv_empty, cl_error)\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun showError(msg: String) {\n        visible(cl_error)\n        gone(iv_empty)\n    }\n\n    companion object {\n\n        fun newInstance(setting: Int): FavouriteFragment {\n            val fragment = FavouriteFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/GroupFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.os.Bundle\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseFragment\nimport com.yoyiyi.soleil.constant.Constants\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:兴趣圈\n */\n\nclass GroupFragment : BaseFragment() {\n\n    private var mSetting: Int = 0\n\n    override fun getLayoutId(): Int = R.layout.fragment_up_group\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n\n        }\n    }\n\n    companion object {\n        fun newInstance(setting: Int): GroupFragment {\n            val fragment = GroupFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/PlayGamesFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.os.Bundle\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseFragment\nimport com.yoyiyi.soleil.constant.Constants\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:兴趣圈\n */\n\nclass PlayGamesFragment : BaseFragment() {\n\n    private var mSetting: Int = 0\n\n    override fun getLayoutId(): Int = R.layout.fragment_up_play_games\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n        }\n    }\n\n    companion object {\n        fun newInstance(setting: Int): PlayGamesFragment {\n            val fragment = PlayGamesFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/SubmitedVideoFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.os.Bundle\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.app.up.SubmitedVideoAdapter\nimport com.yoyiyi.soleil.base.BaseInjectFragment\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.app.up.SubmitedVideoContract\nimport com.yoyiyi.soleil.mvp.presenter.app.up.SubmitedVideoPresenter\nimport kotlinx.android.synthetic.main.common_recycler.*\nimport kotlinx.android.synthetic.main.fragment_up_submited_video.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 15:09\n * * 描述:投稿\n */\n\nclass SubmitedVideoFragment : BaseInjectFragment<SubmitedVideoPresenter>(), SubmitedVideoContract.View {\n\n\n\n    private var mSetting: Int = 0\n    private val mList = mutableListOf<MulUpDetail>()\n    private var mAdapter: SubmitedVideoAdapter? = null\n\n\n    override fun getLayoutId(): Int = R.layout.fragment_up_submited_video\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mSetting = it.getInt(Constants.EXTRA_SETTING)\n        }\n        if (mSetting == 0) {\n            visible(iv_empty)\n        } else {\n            gone(iv_empty)\n        }\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun loadData() {\n        if (mSetting == 1)\n            mPresenter.getSubmitedVideoData()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = SubmitedVideoAdapter(mList)\n        recycler.setHasFixedSize(true)\n        //mRecycler.setNestedScrollingEnabled(false);\n        val mLayoutManager = LinearLayoutManager(mContext)\n        recycler.layoutManager = mLayoutManager\n        recycler.adapter = mAdapter\n    }\n\n    override fun showSubmitedVideo(mulUpDetailList: List<MulUpDetail>) {\n        mList.addAll(mulUpDetailList)\n        finishTask()\n    }\n\n    override fun initWidget() {\n        initRecyclerView()\n    }\n\n    override fun finishTask() {\n        gone(iv_empty, cl_error)\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun showError(msg: String) {\n        visible(cl_error)\n        gone(iv_empty)\n    }\n\n    companion object {\n\n        fun newInstance(setting: Int): SubmitedVideoFragment {\n            val fragment = SubmitedVideoFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_SETTING, setting)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/up/UpDetailActivity.kt",
    "content": "package com.yoyiyi.soleil.module.app.up\n\nimport android.annotation.SuppressLint\nimport android.view.Menu\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.user.UpDetail\nimport com.yoyiyi.soleil.event.Event\n\nimport com.yoyiyi.soleil.module.region.BaseRegionActivity\nimport com.yoyiyi.soleil.mvp.contract.app.up.UpDetailContract\nimport com.yoyiyi.soleil.mvp.presenter.app.up.UpDetailPresenter\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.utils.NumberUtils\nimport com.yoyiyi.soleil.utils.SpanUtils\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_up_detail.*\nimport java.util.*\nimport javax.annotation.Nullable\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/16 14:50\n * * 描述:up主详情街界面\n */\n\nclass UpDetailActivity : BaseRegionActivity<UpDetailPresenter, Nullable>(), UpDetailContract.View {\n\n    private lateinit var mUpDetail: UpDetail\n    var mName: String = \"\"\n\n    override fun getLayoutId(): Int {\n        return R.layout.activity_up_detail\n    }\n\n\n    override fun showUpDetail(upDetail: UpDetail) {\n        mUpDetail = upDetail\n        finishTask()\n    }\n\n    override fun loadData() {\n        mPresenter.getUpDetailData()\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        visible(pw_loading)\n        app_bar_layout.addOnOffsetChangedListener { _, verticalOffset ->\n            if (verticalOffset == 0) {\n                toolbar.title = mName\n            } else {\n                toolbar.title = \"\"\n            }\n        }\n    }\n\n    override fun showError(msg: String) {\n        super.showError(msg)\n        gone(pw_loading)\n    }\n\n    override fun complete() {\n        super.complete()\n        gone(pw_loading)\n    }\n\n    override fun finishTask() {\n        initUpInfo()\n        super.finishTask()\n\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        //  getMenuInflater().inflate(R.menu.menu_region, menu);\n        return false\n    }\n\n    override fun initTitle() {\n        mTitles.addAll(Arrays.asList(\n                \"主页\",\n                \"投稿(${mUpDetail.data.archive.count})\",\n                \"收藏(${mUpDetail.data.favourite.count})\",\n                \"追番\",\n                \"兴趣圈\",\n                \"投币\",\n                \"游戏\"\n        ))\n    }\n\n    override fun initFragment() {\n        mFragment.add(ArchiveFragment.newInstance(1))\n        mFragment.add(SubmitedVideoFragment.newInstance(mUpDetail.data.setting.submited_video))\n        mFragment.add(FavouriteFragment.newInstance(mUpDetail.data.setting.fav_video))\n        mFragment.add(BangumiFragment.newInstance(mUpDetail.data.setting.bangumi))\n        mFragment.add(GroupFragment.newInstance(mUpDetail.data.setting.groups))\n        mFragment.add(CoinsVideoFragment.newInstance(mUpDetail.data.setting.coins_video))\n        mFragment.add(PlayGamesFragment.newInstance(mUpDetail.data.setting.played_game))\n    }\n\n    override fun initViewPager() {\n        super.initViewPager()\n        setCurrentItem(0)\n    }\n\n    /**\n     * 初始化发射事件\n     */\n    override fun initEvent() {\n        //投稿\n        val upDetailSubmitedVideoEvent = Event.UpDetailSubmitedVideoEvent()\n        upDetailSubmitedVideoEvent.archivList = mUpDetail.data.archive.item\n        RxBus.post(upDetailSubmitedVideoEvent)\n        //收藏\n        val upDetailFavourteEvent = Event.UpDetailFavourteEvent()\n        upDetailFavourteEvent.favouriteList = mUpDetail.data.favourite.item\n        RxBus.post(upDetailFavourteEvent)\n        //主页\n        val upDetailArchiveEvent = Event.UpDetailArchiveEvent()\n        upDetailArchiveEvent.archive = mUpDetail.data.archive\n        upDetailArchiveEvent.setting = mUpDetail.data.setting\n        upDetailArchiveEvent.favourite = mUpDetail.data.favourite\n        upDetailArchiveEvent.live = mUpDetail.data.live\n        RxBus.post(upDetailArchiveEvent)\n        //追番\n        //兴趣圈\n        //投币\n\n    }\n\n\n    @SuppressLint(\"SetTextI18n\")\n    private fun initUpInfo() {\n\n        mName = mUpDetail.data.card.face\n        //设置图片\n        Glide.with(mContext)\n                .load(mUpDetail.data.card.face)\n                .centerCrop()\n                .placeholder(R.drawable.bili_default_avatar)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(iv_avatar)\n        //设置基本信息\n        tv_uname?.text = SpanUtils()\n                .append(mUpDetail.data.card.name)\n                .appendSpace(18)\n                .appendImage(getSex(mUpDetail.data.card.sex), SpanUtils.ALIGN_CENTER)\n                .appendSpace(18)\n                .appendImage(getLv(mUpDetail.data.card.level_info.current_level), SpanUtils.ALIGN_CENTER)\n                .create()\n        tv_fans?.text = \"${NumberUtils.format(\"${mUpDetail.data.card.fans}\")} 粉丝\"\n        tv_favourite?.text = \"${NumberUtils.format(\"${mUpDetail.data.card.attention}\")} 关注\"\n        tv_user_des?.text = mUpDetail.data.card.sign\n    }\n\n\n    override fun initToolbar() {\n        mToolbar?.setNavigationIcon(R.drawable.ic_clip_back_white)\n        mToolbar?.title = \"\"\n    }\n\n    override fun initStatusBar() {\n        StatusBarUtil.setTranslucentForCoordinatorLayout(this, 0)\n    }\n\n    private fun getSex(sex: String): Int {\n        when (sex) {\n            \"男\" -> return R.drawable.ic_user_male\n            \"女\" -> return R.drawable.ic_user_female\n            else//握草 gay\n            -> return R.drawable.ic_user_gay_border\n        }\n    }\n\n\n    private fun getLv(lv: Int): Int {\n        val lvRes: Int\n        when (lv) {\n            1 -> lvRes = R.drawable.ic_lv1_large\n            2 -> lvRes = R.drawable.ic_lv2_large\n            3 -> lvRes = R.drawable.ic_lv3_large\n            4 -> lvRes = R.drawable.ic_lv4_large\n            5 -> lvRes = R.drawable.ic_lv5_large\n            6 -> lvRes = R.drawable.ic_lv6_large\n            7 -> lvRes = R.drawable.ic_lv7_large\n            8 -> lvRes = R.drawable.ic_lv8_large\n            9 -> lvRes = R.drawable.ic_lv9_large\n            else -> lvRes = R.drawable.ic_lv0_large\n        }\n        return lvRes\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/video/CommentFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.video\n\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.app.video.CommentAdapter\nimport com.yoyiyi.soleil.base.BaseInjectFragment\nimport com.yoyiyi.soleil.bean.app.video.MulComment\nimport com.yoyiyi.soleil.mvp.contract.app.video.CommentContract\nimport com.yoyiyi.soleil.mvp.presenter.app.video.CommentPresenter\nimport kotlinx.android.synthetic.main.common_recycler.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 15:58\n * * 描述:评论\n */\n\nclass CommentFragment : BaseInjectFragment<CommentPresenter>(), CommentContract.View {\n\n\n    private var mAdapter: CommentAdapter? = null\n    private val mList = mutableListOf<MulComment>()\n\n    override fun getLayoutId(): Int = R.layout.fragment_comment\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun loadData() {\n        mPresenter.getCommentData()\n    }\n\n\n    override fun initWidget() {\n        initRecyclerView()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = CommentAdapter(mList)\n        recycler.setHasFixedSize(true)\n        val layoutManager = LinearLayoutManager(mContext)\n        recycler.layoutManager = layoutManager\n        recycler.adapter = mAdapter\n    }\n\n    override fun showComment(mulComments: List<MulComment>) {\n        mList.addAll(mulComments)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    companion object {\n\n        fun newInstance(): CommentFragment {\n            return CommentFragment()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/video/SummaryFragment.kt",
    "content": "package com.yoyiyi.soleil.module.app.video\n\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.app.video.SummaryAdapter\nimport com.yoyiyi.soleil.base.BaseInjectFragment\nimport com.yoyiyi.soleil.bean.app.video.MulSummary\nimport com.yoyiyi.soleil.mvp.contract.app.video.SummaryContract\nimport com.yoyiyi.soleil.mvp.presenter.app.video.SummaryPresenter\nimport kotlinx.android.synthetic.main.common_recycler.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 15:57\n * * 描述:简介\n */\n\nclass SummaryFragment : BaseInjectFragment<SummaryPresenter>(), SummaryContract.View {\n\n    private val mList = mutableListOf<MulSummary>()\n    private var mAdapter: SummaryAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_summary\n\n\n    override fun loadData() {\n        mPresenter.getSummaryData()\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = SummaryAdapter(mList)\n        recycler.setHasFixedSize(true)\n        val layoutManager = LinearLayoutManager(mContext)\n        recycler.layoutManager = layoutManager\n        recycler.adapter = mAdapter\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun showSummary(mulSummaries: List<MulSummary>) {\n        mList.addAll(mulSummaries)\n        finishTask()\n    }\n\n\n    override fun initWidget() {\n        initRecyclerView()\n    }\n\n    companion object {\n\n        fun newInstance(): SummaryFragment {\n            return SummaryFragment()\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/video/VideoDetailActivity.kt",
    "content": "package com.yoyiyi.soleil.module.app.video\n\nimport android.content.Intent\nimport android.view.Menu\nimport android.view.View\nimport android.view.animation.AccelerateInterpolator\nimport android.view.animation.OvershootInterpolator\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.app.video.VideoDetail\nimport com.yoyiyi.soleil.bean.app.video.VideoDetailComment\nimport com.yoyiyi.soleil.event.Event\n\n\nimport com.yoyiyi.soleil.module.region.BaseRegionActivity\nimport com.yoyiyi.soleil.mvp.contract.app.video.VideoDetailContract\nimport com.yoyiyi.soleil.mvp.presenter.app.video.VideoDetailPresenter\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport io.reactivex.annotations.Nullable\nimport kotlinx.android.synthetic.main.activity_video_detail1.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 14:28\n * * 描述:视频播放界面\n */\n\nclass VideoDetailActivity : BaseRegionActivity<VideoDetailPresenter, Nullable>(), VideoDetailContract.View {\n\n\n    private lateinit var mVideoDetail: VideoDetail.DataBean\n    private lateinit var mVideoDetailComment: VideoDetailComment.DataBean\n\n    private var state: CollapsingToolbarLayoutState? = null\n\n\n    private enum class CollapsingToolbarLayoutState {\n        EXPANDED,\n        COLLAPSED,\n        INTERNEDIATE\n    }\n\n    override fun getLayoutId(): Int = R.layout.activity_video_detail1\n\n\n    override fun showVideoDetail(videoDetail: VideoDetail.DataBean) {\n        mVideoDetail = videoDetail\n\n    }\n\n\n    override fun showVideoDetailComment(videoDetailComment: VideoDetailComment.DataBean) {\n        mVideoDetailComment = videoDetailComment\n        finishTask()\n    }\n\n    override fun loadData() {\n        mPresenter.getVideoDetailData()\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun finishTask() {\n        //设置图片\n        Glide.with(mContext)\n                .load<Any>(mVideoDetail.pic)\n                .centerCrop()\n                .placeholder(R.drawable.bili_default_image_tv)\n                .diskCacheStrategy(DiskCacheStrategy.ALL)\n                .dontAnimate()\n                .into(iv_video_preview)\n        super.finishTask()\n        initEvent()\n    }\n\n    override fun initEvent() {\n        val videoDetailEvent = Event.VideoDetailEvent()\n        videoDetailEvent.videoDetail = mVideoDetail\n\n        val videoDetailCommentEvent = Event.VideoDetailCommentEvent()\n        videoDetailCommentEvent.videoDetailComment = mVideoDetailComment\n\n        RxBus.post(videoDetailEvent)\n        RxBus.post(videoDetailCommentEvent)\n    }\n\n\n    override fun initTitle() {\n        mTitles.add(\"简介\")\n        mTitles.add(\"评论(${mVideoDetailComment.page.acount})\")\n\n    }\n\n    override fun initFragment() {\n        mFragment.add(SummaryFragment.newInstance())\n        mFragment.add(CommentFragment.newInstance())\n\n    }\n\n    override fun initViewPager() {\n        super.initViewPager()\n        setCurrentItem(0)\n    }\n\n    override fun initToolbar() {\n        //mToolbar.setNavigationIcon(R.drawable.ic_clip_back_white);\n        super.initToolbar()\n        mToolbar?.title = \"\"\n    }\n\n    override fun initStatusBar() {\n        StatusBarUtil.setTranslucentForCoordinatorLayout(this, 0)\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        return false\n    }\n\n\n    /**\n     * 设置FAB动画\n\n     * @param target\n     */\n    private fun setViewsTranslation(target: Int) {\n        fab.translationY = target.toFloat()\n        if (target == 0) {\n            fab.animate().scaleX(1f).scaleY(1f)\n                    .setInterpolator(OvershootInterpolator())\n                    .start()\n            fab.isClickable = true\n        } else if (target < 0) {\n            fab.animate().scaleX(0f).scaleY(0f)\n                    .setInterpolator(AccelerateInterpolator())\n                    .start()\n            fab.isClickable = false\n        }\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        fab.setOnClickListener { startActivity(Intent(this, VideoPlayerActivity::class.java)) }\n        // initFAB();\n        visible(pw_loading)\n        initAppBar()\n    }\n\n    private fun initFAB() {\n        // mFab.setTranslationY(-getResources().getDimension(R.dimen.dp32));\n    }\n\n    private fun initAppBar() {\n        app_bar.addOnOffsetChangedListener { _, verticalOffset -> setViewsTranslation(verticalOffset) }\n        app_bar.addOnOffsetChangedListener { appBarLayout, verticalOffset ->\n            if (verticalOffset == 0) {\n                if (state != CollapsingToolbarLayoutState.EXPANDED) {\n                    state = CollapsingToolbarLayoutState.EXPANDED//修改状态标记为展开\n                    tv_player.visibility = View.GONE\n                    tv_av.visibility = View.VISIBLE\n                }\n            } else if (Math.abs(verticalOffset) >= appBarLayout.totalScrollRange) {\n                if (state != CollapsingToolbarLayoutState.COLLAPSED) {\n                    tv_player.visibility = View.VISIBLE\n                    tv_av.visibility = View.GONE\n                }\n            } else {\n                tv_player.visibility = View.GONE\n                tv_av.visibility = View.VISIBLE\n            }\n        }\n    }\n\n    override fun showError(msg: String) {\n        super.showError(msg)\n        gone(pw_loading)\n\n    }\n\n    override fun complete() {\n        super.complete()\n        gone(pw_loading)\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/app/video/VideoPlayerActivity.kt",
    "content": "package com.yoyiyi.soleil.module.app.video\n\nimport android.annotation.SuppressLint\nimport android.graphics.drawable.AnimationDrawable\nimport android.net.Uri\nimport android.view.View\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseInjectActivity\nimport com.yoyiyi.soleil.bean.app.video.VideoPlayer\nimport com.yoyiyi.soleil.media.MediaController\nimport com.yoyiyi.soleil.media.VideoPlayerView\nimport com.yoyiyi.soleil.media.callback.DanmukuSwitchListener\nimport com.yoyiyi.soleil.media.callback.VideoBackListener\nimport com.yoyiyi.soleil.mvp.contract.app.video.VideoPlayerContract\nimport com.yoyiyi.soleil.mvp.presenter.app.video.VideoPlayerPresenter\nimport kotlinx.android.synthetic.main.activity_video_player.*\nimport master.flame.danmaku.controller.DrawHandler\nimport master.flame.danmaku.danmaku.model.BaseDanmaku\nimport master.flame.danmaku.danmaku.model.DanmakuTimer\nimport master.flame.danmaku.danmaku.model.IDisplayer\nimport master.flame.danmaku.danmaku.model.android.DanmakuContext\nimport master.flame.danmaku.danmaku.parser.BaseDanmakuParser\nimport tv.danmaku.ijk.media.player.IMediaPlayer\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/28 14:36\n * * 描述:视频播放界面\n */\n\nclass VideoPlayerActivity : BaseInjectActivity<VideoPlayerPresenter>(), DanmukuSwitchListener, VideoBackListener, VideoPlayerContract.View {\n\n\n    private var danmakuContext: DanmakuContext? = null\n    private var mStartText = \"初始化播放器...\"\n    private var mLoadingAnim: AnimationDrawable? = null\n    private var mLastPosition = 0L\n    private var mMaxLinesPair: HashMap<Int, Int>? = null// 弹幕最大行数\n    private var mOverlappingEnablePair: HashMap<Int, Boolean>? = null// 设置是否重叠\n\n    override fun getLayoutId(): Int = R.layout.activity_video_player\n\n\n    override fun initWidget() {\n        super.initWidget()\n        initDanmaku()//初始化弹幕库\n        initMediaPlayer()//初始化播放器\n    }\n\n    private fun initDanmaku() {\n        danmakuContext = DanmakuContext.create()\n        // 设置最大行数,从右向左滚动(有其它方向可选)\n        mMaxLinesPair = HashMap<Int, Int>()\n        mMaxLinesPair?.put(BaseDanmaku.TYPE_SCROLL_RL, 3)\n        //配置弹幕库\n        danmaku.enableDanmakuDrawingCache(true)\n        // 设置是否禁止重叠\n        mOverlappingEnablePair = HashMap<Int, Boolean>()\n        mOverlappingEnablePair?.put(BaseDanmaku.TYPE_SCROLL_LR, true)\n        mOverlappingEnablePair?.put(BaseDanmaku.TYPE_FIX_BOTTOM, true)\n        danmakuContext?.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3F)\n                ?.setDuplicateMergingEnabled(false)\n                ?.setScrollSpeedFactor(1.2f) //是否启用合并重复弹幕\n                ?.setScaleTextSize(1.2f) //设置弹幕滚动速度系数,只对滚动弹幕有效\n                // 默认使用{@link SimpleTextCacheStuffer}只支持纯文字显示,\n                // 如果需要图文混排请设置{@link SpannedCacheStuffer}\n                // 如果需要定制其他样式请扩展{@link SimpleTextCacheStuffer}|{@link SpannedCacheStuffer}\n                ?.setMaximumLines(mMaxLinesPair) //设置最大显示行数\n                ?.preventOverlapping(mOverlappingEnablePair) //设置防弹幕重叠，null为允许重叠\n\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n    }\n\n    @SuppressLint(\"UseSparseArrays\")\n    private fun initMediaPlayer() {\n        //配置播放器\n        val mMediaController = MediaController(this)\n        mMediaController.setTitle(\"测试视频\")\n        palyer_view.setMediaController(mMediaController)\n        palyer_view.setMediaBufferingIndicator(rl_loading)\n        palyer_view.requestFocus()\n        palyer_view.setOnInfoListener(onInfoListener)\n        palyer_view.setOnSeekCompleteListener(onSeekCompleteListener)\n        palyer_view.setOnCompletionListener(onCompletionListener)\n        palyer_view.setOnControllerEventsListener(onControllerEventsListener)\n        //设置弹幕开关监听\n        mMediaController.setDanmakuSwitchListener(this)\n        //设置返回键监听\n        mMediaController.setVideoBackEvent(this)\n\n\n    }\n\n    /**\n     * 初始化加载动画\n     */\n    private fun initAnimation() {\n        rl_start.visibility = View.VISIBLE\n        mStartText = \"$mStartText【完成】\\n解析视频地址...【完成】\\n全舰弹幕填装...\"\n        tv_start.text = mStartText\n        mLoadingAnim = iv_bili_loading?.background as AnimationDrawable\n        mLoadingAnim?.start()\n    }\n\n\n    /**\n     * 视频缓冲事件回调\n     */\n    private val onInfoListener = IMediaPlayer.OnInfoListener { _, what, _ ->\n        if (what == IMediaPlayer.MEDIA_INFO_BUFFERING_START) {\n            if (danmaku != null && danmaku.isPrepared) {\n                danmaku.pause()\n                rl_loading.visibility = View.VISIBLE\n            }\n        } else if (what == IMediaPlayer.MEDIA_INFO_BUFFERING_END) {\n            if (danmaku != null && danmaku.isPaused) {\n                danmaku.resume()\n            }\n            rl_loading?.visibility = View.GONE\n        }\n        true\n    }\n    /**\n     * 视频跳转事件回调\n     */\n    private val onSeekCompleteListener = IMediaPlayer.OnSeekCompleteListener { mp ->\n        if (danmaku != null && danmaku.isPrepared) {\n            danmaku?.seekTo(mp.currentPosition)\n        }\n    }\n\n    /**\n     * 视频播放完成事件回调\n     */\n    private val onCompletionListener = IMediaPlayer.OnCompletionListener {\n        if (danmaku != null && danmaku.isPrepared) {\n            danmaku.seekTo(0.toLong())\n            danmaku.pause()\n        }\n        palyer_view.pause()\n    }\n\n    /**\n     * 控制条控制状态事件回调\n     */\n    private val onControllerEventsListener = object : VideoPlayerView.OnControllerEventsListener {\n        override fun onVideoPause() {\n            if (danmaku != null && danmaku.isPrepared) {\n                danmaku.pause()\n            }\n        }\n\n        override fun OnVideoResume() {\n            if (danmaku != null && danmaku.isPaused) {\n                danmaku.resume()\n            }\n        }\n    }\n\n    override fun onResume() {\n        super.onResume()\n        if (danmaku != null && danmaku.isPrepared && danmaku.isPaused) {\n            danmaku?.seekTo(mLastPosition)\n        }\n        if (palyer_view != null && !palyer_view.isPlaying) {\n            palyer_view?.seekTo(mLastPosition)\n        }\n    }\n\n    override fun onPause() {\n        super.onPause()\n        if (palyer_view != null) {\n            mLastPosition = (palyer_view.currentPosition).toLong()\n            palyer_view.pause()\n        }\n        if (danmaku != null && danmaku.isPrepared) {\n            danmaku.pause()\n        }\n    }\n\n    override fun onBackPressed() {\n        super.onBackPressed()\n        if (danmaku != null) {\n            danmaku.release()\n        }\n        if (mLoadingAnim != null) {\n            mLoadingAnim?.stop()\n            mLoadingAnim = null\n        }\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        if (palyer_view != null && palyer_view.isDrawingCacheEnabled) {\n            palyer_view?.destroyDrawingCache()\n        }\n        if (danmaku != null && danmaku.isPaused) {\n            danmaku?.release()//释放弹幕库\n        }\n        if (mLoadingAnim != null) {\n            mLoadingAnim?.stop()\n            mLoadingAnim = null\n        }\n    }\n\n    /**\n     * 弹幕开关回调\n\n     * @param isShow\n     */\n    override fun setDanmakushow(isShow: Boolean) {\n        if (danmaku != null) {\n            if (isShow) {\n                danmaku.show()\n            } else {\n                danmaku.hide()\n            }\n        }\n    }\n\n\n    /**\n     * 退出界面回调\n     */\n    override fun back() {\n        onBackPressed()\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun loadData() {\n        mPresenter.getVideoPlayerData()\n    }\n\n    override fun showVideoPlayer(videoPlayer: VideoPlayer) {\n        //String uri1 = videoPlayer.durl.get(0).url;\n        /* uri1 = \"http://122.228.103.130/vg5/2/c0/6191437-1.mp4?expires=1498716900&platform=android&ssig=hKQiMO6c9Bj_OJfhu3K3vA&oi=3080483261\" +\n                \"&nfa=zn2OTN7O9p3rqnr0+3S2RQ==&dynamic=1&hfa=2070368267\";*/\n        // http://115.231.179.113/6572787CE774C845BDFF103E5C/03000804005948C7BE58C6011BA6A93F75FF26-AA49-0A30-9D4B-7871503F37CE.mp4?ccode=0501&duration=395&expire=18000&psid=862909d3e3467a9b0efff6cf8f704e5f&ups_client_netip=183.156.113.189&ups_ts=1498705420&ups_userid=&utid=c1rbEdI5mFcCAbeccb16JLgD&vid=XMjgzNzQ2MDIyMA%3D%3D&vkey=A4e5ad15f9e348b316246f54a6ecf4552\n\n        val uri = \"http://112.25.47.111/6571EA9C4C13D776444793BD0/0300080400594FCDDF4780011BA6A94356A652-5121-05EF-7A49-F7F133184645.mp4?ccode=0501&duration=390&expire=18000&psid=0c186136db0b550753f4e15897a344b7&ups_client_netip=112.10.94.233&ups_ts=1498743715&ups_userid=&utid=3erbEXmBygUCAXAKXulsTPfb&vid=XMjg0OTI4ODEyOA%3D%3D&vkey=A55ec5ed693a02bd1aa246fb9c7700277\"\n        // String uri = \"http://115.231.179.113/6572787CE774C845BDFF103E5C/03000804005948C7BE58C6011BA6A93F75FF26-AA49-0A30-9D4B-7871503F37CE.mp4?ccode=0501&duration=395\" +\n        //      \"&expire=18000&psid=862909d3e3467a9b0efff6cf8f704e5f&ups_client_netip=183.156.113.189&\";\n\n        val uri2 = \"http://api1.ckmov.com/data/youku%7D/2_XMTYzNTQ5Njk2OA_data.m3u8\"\n        val uri1 = \"http://liveal.quanmin.tv/live/1578745132.flv\"\n\n        val uri3 = \"http://115.231.178.214/youku/6771C614C954884205FCB635D3/0300080200595F10A2C83E011BA6A954FFBC75-10A1-FA2F-4B19-2BA6A02BE6B7.mp4?sid=049994114462312aaff0f&ctype=12&ccode=0590&duration=390&expire=18000&psid=c61df9c484b2d303fcb5e1b81523aae4&ups_client_netip=183.159.183.142&ups_ts=1499941144&ups_userid=&utid=c1rbEdI5mFcCAbeccb16JLgD&vid=XNjcyNjI0MjIw&vkey=A74cc899cf52a437b4bee85888cacc1bc\"\n\n        palyer_view.setVideoURI(Uri.parse(uri3))\n        palyer_view.setOnPreparedListener({\n            mLoadingAnim?.stop()\n            mStartText = \"$mStartText【完成】\\n视频缓冲中...\"\n            tv_start?.text = mStartText\n            rl_loading?.visibility = View.GONE\n        })\n    }\n\n    override fun showAnimLoading() {\n        initAnimation()\n    }\n\n    override fun showDanmaku(baseDanmakuParser: BaseDanmakuParser) {\n        gone(rl_loading, rl_start)\n        danmaku.prepare(baseDanmakuParser, danmakuContext)\n        danmaku?.showFPS(false)//是否显示FPS\n        danmaku?.enableDanmakuDrawingCache(true)\n        danmaku?.setCallback(object : DrawHandler.Callback {\n            override fun prepared() {\n                danmaku.start()\n            }\n\n            override fun updateTimer(danmakuTimer: DanmakuTimer) {\n\n            }\n\n            override fun danmakuShown(danmaku: BaseDanmaku) {\n\n            }\n\n            override fun drawingFinished() {\n\n            }\n        })\n        palyer_view.start()\n    }\n\n    override fun showError(msg: String) {\n        mStartText = \"$mStartText【失败】\\n视频缓冲中...\"\n        tv_start.text = mStartText\n        mStartText = mStartText + \"【失败】\\n\" + msg\n        tv_start.text = mStartText\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/bangumi/BangumiDetailActivity.kt",
    "content": "package com.yoyiyi.soleil.module.bangumi\n\nimport android.graphics.Color\nimport android.support.v7.widget.LinearLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.bangumi.BangumiDetailAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.bangumi.MulBangumiDetail\nimport com.yoyiyi.soleil.mvp.contract.bangumi.BangumiDetailContract\nimport com.yoyiyi.soleil.mvp.presenter.bangumi.BangumiDetailPresenter\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_bangumi_detail.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 14:39\n * * 描述:番剧详情界面\n */\nclass BangumiDetailActivity : BaseRefreshActivity<BangumiDetailPresenter, MulBangumiDetail>(), BangumiDetailContract.View {\n\n\n    private var mDistanceY: Int = 0\n    private var mAdapter: BangumiDetailAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.activity_bangumi_detail\n\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"\"//设置标题\n\n    }\n\n    override fun initRecyclerView() {\n        mList?.let {\n            mAdapter = BangumiDetailAdapter(it)\n        }\n        mRecycler?.setHasFixedSize(true)\n        mRecycler?.isNestedScrollingEnabled = false\n        val mLayoutManager = LinearLayoutManager(mContext)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n        initHead()\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    private fun initHead() {\n        mList?.add(MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_HEAD, isPrepare = true))\n\n    }\n\n    override fun loadData() {\n        mPresenter.getBangumiDetailData()\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        mRecycler?.addOnScrollListener(object : RecyclerView.OnScrollListener() {\n            override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {\n                //滑动的距离\n                mDistanceY += dy\n                //toolbar的高度\n                val toolbarHeight = mToolbar?.bottom\n                toolbarHeight?.let {\n                    if (mDistanceY <= it && toolbarHeight != 0) {\n                        val scale = mDistanceY / toolbarHeight\n                        val alpha = scale * 255\n                        mToolbar?.setBackgroundColor(Color.argb(alpha, 251, 114, 153))\n                    }\n                } ?: mToolbar?.setBackgroundResource(R.color.colorPrimary)\n\n              /*  //当滑动的距离 <= toolbar高度的时候，改变Toolbar背景色的透明度，达到渐变的效果\n                if (mDistanceY <= toolbarHeight) {\n                    val scale = mDistanceY / toolbarHeight\n                    val alpha = scale * 255\n                    mToolbar?.setBackgroundColor(Color.argb(alpha.toInt(), 251, 114, 153))\n                } else {\n                    //上述虽然判断了滑动距离与toolbar高度相等的情况，但是实际测试时发现，标题栏的背景色\n                    //很少能达到完全不透明的情况，所以这里又判断了滑动距离大于toolbar高度的情况，\n                    //将标题栏的颜色设置为完全不透明状态\n                    mToolbar?.setBackgroundResource(R.color.colorPrimary)\n                }*/\n\n            }\n        })\n    }\n\n    override fun initStatusBar() {\n        StatusBarUtil.setTranslucentForCoordinatorLayout(this, 0)\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun showMulBangumiDetail(mulBangumiDetails: List<MulBangumiDetail>, title: String) {\n        mList?.clear()\n        mList?.addAll(mulBangumiDetails)\n        tv_title?.text = title\n        finishTask()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/bangumi/BangumiIndexActivity.kt",
    "content": "package com.yoyiyi.soleil.module.bangumi\n\nimport android.support.v7.widget.GridLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.bangumi.BangumiIndexSection\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.bangumi.BangumiIndex\nimport com.yoyiyi.soleil.mvp.contract.bangumi.BangumiIndexContract\nimport com.yoyiyi.soleil.mvp.presenter.bangumi.BangumiIndexPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/8 16:35\n * * 描述:番剧索引\n */\n\nclass BangumiIndexActivity : BaseRefreshActivity<BangumiIndexPresenter, BangumiIndex.CategoryBean>(), BangumiIndexContract.View {\n\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n\n\n    override fun getLayoutId(): Int = R.layout.activity_bangumi_schedule\n\n\n    override fun loadData() {\n        mPresenter.getBangumiIndex()\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mRecycler?.setHasFixedSize(true)\n        mSectionedAdapter = SectionedRVAdapter()\n        val mLayoutManager = GridLayoutManager(mContext, 3)\n        mLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {\n            override fun getSpanSize(position: Int): Int {\n                when (mSectionedAdapter?.getSectionItemViewType(position)) {\n                    SectionedRVAdapter.VIEW_TYPE_HEADER -> return 3//2格\n                    else -> return 1\n                }\n            }\n        }\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n\n    override fun showBangumiIndex(bangumiIndex: BangumiIndex) {\n        mList?.addAll(bangumiIndex.category)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mList?.let {\n            mSectionedAdapter?.addSection(BangumiIndexSection(it))\n            mSectionedAdapter?.notifyDataSetChanged()\n        }\n\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"索引\"\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/bangumi/BangumiScheduleActivity.kt",
    "content": "package com.yoyiyi.soleil.module.bangumi\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.text.TextUtils\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.bangumi.BangumiScheduleSection\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.bangumi.BangumiSchedule\nimport com.yoyiyi.soleil.mvp.contract.bangumi.BangumiScheduleContract\nimport com.yoyiyi.soleil.mvp.presenter.bangumi.BangumiSchedulePresenter\nimport com.yoyiyi.soleil.utils.TimeUtils\nimport com.yoyiyi.soleil.widget.section.HeadOrFooterSection\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/8 16:35\n * * 描述:番剧时间表\n */\n\nclass BangumiScheduleActivity : BaseRefreshActivity<BangumiSchedulePresenter, BangumiSchedule>(), BangumiScheduleContract.View {\n\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n    private val mMonList = ArrayList<BangumiSchedule>()\n    private val mTuesList = ArrayList<BangumiSchedule>()\n    private val mWedList = ArrayList<BangumiSchedule>()\n    private val mThurList = ArrayList<BangumiSchedule>()\n    private val mFriList = ArrayList<BangumiSchedule>()\n    private val mSatList = ArrayList<BangumiSchedule>()\n    private val mSunList = ArrayList<BangumiSchedule>()\n\n    private enum class Week constructor(val week: String) {\n        MON(\"周一\"), TUES(\"周二\"), WEB(\"周三\"), THUR(\"周四\"), FRI(\"周五\"), SAT(\"周六\"), SUN(\"周日\")\n    }\n\n    override fun getLayoutId(): Int {\n        return R.layout.activity_bangumi_schedule\n    }\n\n    override fun loadData() {\n        mPresenter.getBangumiSchedule()\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val mLayoutManager = GridLayoutManager(mContext, 3)\n        mLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {\n            override fun getSpanSize(position: Int): Int {\n                when (mSectionedAdapter?.getSectionItemViewType(position)) {\n                    SectionedRVAdapter.VIEW_TYPE_HEADER -> return 3//2格\n                    else -> return 1\n                }\n            }\n        }\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun showBangumiSchedule(bangumiScheduleList: List<BangumiSchedule>) {\n        mList?.addAll(bangumiScheduleList)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mList?.forEach { group(it) }\n\n        mSectionedAdapter?.addSection(HeadOrFooterSection(R.layout.layout_item_bangumi_schedule_header))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.SUN.week, mSunList, TimeUtils.formatDate(mSunList[0].pub_date)))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.MON.week, mMonList, TimeUtils.formatDate(mMonList[0].pub_date)))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.TUES.week, mTuesList, TimeUtils.formatDate(mTuesList[0].pub_date)))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.WEB.week, mWedList, TimeUtils.formatDate(mWedList[0].pub_date)))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.THUR.week, mTuesList, TimeUtils.formatDate(mTuesList[0].pub_date)))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.FRI.week, mFriList, TimeUtils.formatDate(mFriList[0].pub_date)))\n        mSectionedAdapter?.addSection(\n                BangumiScheduleSection(Week.SAT.week, mSatList, TimeUtils.formatDate(mSatList[0].pub_date)))\n        mSectionedAdapter?.addSection(HeadOrFooterSection(R.layout.layout_item_bangumi_schedule_footer))\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"时间表\"\n    }\n\n    private fun group(schedule: BangumiSchedule) {\n        val week = TimeUtils.getWeek(schedule.pub_date)\n        if (TextUtils.equals(Week.MON.week, week)) {\n            mMonList.add(schedule)\n        }\n        if (TextUtils.equals(Week.TUES.week, week)) {\n            mTuesList.add(schedule)\n        }\n        if (TextUtils.equals(Week.WEB.week, week)) {\n            mWedList.add(schedule)\n        }\n        if (TextUtils.equals(Week.FRI.week, week)) {\n            mFriList.add(schedule)\n        }\n        if (TextUtils.equals(Week.THUR.week, week)) {\n            mThurList.add(schedule)\n        }\n        if (TextUtils.equals(Week.SAT.week, week)) {\n            mSatList.add(schedule)\n        }\n        if (TextUtils.equals(Week.SUN.week, week)) {\n            mSunList.add(schedule)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/ActivityCenterActivity.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.discover.ActivityCenterAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.discover.ActivityCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.ActivityCenterContract\nimport com.yoyiyi.soleil.mvp.presenter.discover.ActivityCenterPresenter\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.LogUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport com.yoyiyi.soleil.widget.CustomLoadMoreView\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/6/5 22:28\n * 描述:活动中心\n */\nclass ActivityCenterActivity : BaseRefreshActivity<ActivityCenterPresenter, ActivityCenter.ListBean>(), ActivityCenterContract.View, BaseQuickAdapter.RequestLoadMoreListener {\n\n    private var mAdapter: ActivityCenterAdapter? = null\n    private var mPage = 1\n    private var mTotal = 0\n    private var mIsError = false\n    private var mIsLoadMore = false\n\n    override fun getLayoutId(): Int = R.layout.activity_topic_center\n\n    companion object {\n        private val PS = 20\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"活动中心\"\n    }\n\n    override fun loadData() {\n        mPresenter.getActivityCenterData(mPage, PS)\n    }\n\n    override fun clearData() {\n        super.clearData()\n        mPage = 1\n        mIsLoadMore = false\n        mIsError = false\n        //刷新时候关闭上拉加载\n        mAdapter?.setEnableLoadMore(false)\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = ActivityCenterAdapter(mList)\n        val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mAdapter\n        mAdapter?.setLoadMoreView(CustomLoadMoreView())\n        //设置加载更多监听\n        mAdapter?.setOnLoadMoreListener(this, mRecycler)\n    }\n\n\n    override fun finishTask() {\n        mAdapter?.setNewData(mList)\n    }\n\n    override fun showActivityCenter(listBeanList: List<ActivityCenter.ListBean>, total: Int) {\n        if (!mIsLoadMore) {\n            mList?.addAll(listBeanList)\n            mTotal = total//总数\n            finishTask()\n        } else {\n            //加载更多\n            mAdapter?.addData(listBeanList)\n            mAdapter?.loadMoreComplete()//加载完成\n        }\n    }\n\n    override fun onLoadMoreRequested() {\n        AppUtils.runOnUIDelayed({\n            //加载更多\n            mAdapter?.itemCount?.let {\n                if (it > mTotal) {\n                    mAdapter?.loadMoreEnd()//结束加载\n                } else {\n                    if (!mIsError) {\n                        mPage++\n                        loadData()\n                    } else {\n                        mIsError = true\n                        mAdapter?.loadMoreFail()//加载失败\n                    }\n                }\n            }\n        }, 650)\n\n\n    }\n\n    override fun showError(msg: String) {\n        super.showError(msg)\n        mPage--\n        mIsError = true\n    }\n\n    override fun complete() {\n        super.complete()\n        //需要重新开启监听\n        mAdapter?.setEnableLoadMore(true)\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        NetworkUtils.setOnChangeInternetListener {\n            LogUtils.d(\"ceshi\", it)\n            mIsError = !it\n            if (!mIsError) {\n                mAdapter?.setEnableLoadMore(true)\n            }\n        }\n\n        NetworkUtils.setOnChangeInternetListener {\n            LogUtils.d(\"ceshi\", it)\n            mIsError = !it\n            if (!mIsError) {\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/AllGameActivity.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.discover.section.GameCenterGameListSection\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.discover.GameCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.GameCenterContract\nimport com.yoyiyi.soleil.mvp.presenter.discover.GameCenterPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 22:28\n * * 描述:所有游戏\n */\nclass AllGameActivity : BaseRefreshActivity<GameCenterPresenter, GameCenter.GameListBean>(), GameCenterContract.View {\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.activity_game_center\n\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"全部游戏\"\n    }\n\n    override fun loadData() {\n        mPresenter.getGameCenterData()\n    }\n\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val layoutManager = LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun showGameCenter(gameCenter: GameCenter) {\n        mList?.addAll(gameCenter.game_list)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mList?.let {\n            mSectionedAdapter?.addSection(GameCenterGameListSection(false, it))\n        }\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/GameCenterActivity.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.discover.section.GameCenterBookGiftSection\nimport com.yoyiyi.soleil.adapter.discover.section.GameCenterGameListSection\nimport com.yoyiyi.soleil.adapter.discover.section.GameCenterUserSection\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.discover.GameCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.GameCenterContract\nimport com.yoyiyi.soleil.mvp.presenter.discover.GameCenterPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 22:28\n * * 描述:游戏中心\n */\nclass GameCenterActivity : BaseRefreshActivity<GameCenterPresenter, GameCenter.GameListBean>(), GameCenterContract.View {\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n    private val mBookGiftBeanList = ArrayList<GameCenter.BookGiftBean>()\n\n    override fun getLayoutId(): Int = R.layout.activity_game_center\n\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"游戏中心\"\n    }\n\n    override fun loadData() {\n        mPresenter.getGameCenterData()\n    }\n\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val layoutManager = LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun showGameCenter(gameCenter: GameCenter) {\n        if (!gameCenter.game_list.isEmpty() && gameCenter.game_list.size >= 20) {\n            mList?.addAll(gameCenter.game_list.subList(0, 20))\n        } else {\n            mList?.addAll(gameCenter.game_list)\n        }\n        mBookGiftBeanList.addAll(gameCenter.book_gift)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mSectionedAdapter?.addSection(GameCenterUserSection())\n        mSectionedAdapter?.addSection(GameCenterBookGiftSection(mBookGiftBeanList))\n        mList?.let {\n            mSectionedAdapter?.addSection(GameCenterGameListSection(true, it))\n        }\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/HomeFragment.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport com.trello.rxlifecycle2.components.support.RxFragment\nimport com.yoyiyi.soleil.R\nimport kotlinx.android.synthetic.main.fragment_home.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/11 12:04\n * * 描述:主页\n */\nclass HomeFragment : RxFragment() {\n\n\n\n    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        val view = inflater?.inflate(R.layout.fragment_home, container, false)\n        return view\n\n    }\n\n    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        iv_empty?.setOnClickListener {\n            val activity = activity\n            if (activity is InterestActivity) {\n                activity.mViewPager?.currentItem = 1\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/InterestActivity.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.view.Menu\nimport android.view.MenuItem\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.module.region.BaseRegionActivity\nimport com.yoyiyi.soleil.mvp.presenter.app.NothingPresenter\nimport javax.annotation.Nullable\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 22:25\n * * 描述:兴趣圈\n */\nclass InterestActivity : BaseRegionActivity<NothingPresenter, Nullable>() {\n    private val mTitlesArr = arrayOf(\"首页\", \"发现\", \"我的\")\n\n    override fun getLayoutId(): Int = R.layout.activity_interest\n\n\n    override fun initWidget() {\n        super.initWidget()\n        mViewPager?.offscreenPageLimit = mTitlesArr.size + 1\n        mViewPager?.adapter = BaseRegionTypeAdapter(supportFragmentManager)\n        mSlidingTabLayout?.setViewPager(mViewPager)\n        mViewPager?.currentItem = 1\n\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n\n\n    override fun initVariables() {\n        for (i in mTitlesArr.indices) {\n            mTitles.add(mTitlesArr[i])\n            if (i == 1) {\n                mFragment.add(InterestFragment())\n            } else if (i == 0) {\n                mFragment.add(HomeFragment())\n            } else {\n                mFragment.add(MineFragment())\n            }\n        }\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"兴趣圈\"\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_interest, menu)\n        return true\n    }\n\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        val id = item.itemId\n        when (id) {\n\n        }\n\n        return super.onOptionsItemSelected(item)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/InterestFragment.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.discover.InterestAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.discover.Community\nimport com.yoyiyi.soleil.bean.discover.InterestAd\nimport com.yoyiyi.soleil.bean.discover.InterestCategrory\nimport com.yoyiyi.soleil.bean.discover.MulInterest\nimport com.yoyiyi.soleil.mvp.contract.discover.InterestContract\nimport com.yoyiyi.soleil.mvp.presenter.discover.InterestPresenter\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.ToastUtils\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 22:25\n * * 描述:兴趣圈\n */\nclass InterestFragment : BaseRefreshFragment<InterestPresenter, MulInterest>(), InterestContract.View {\n    private var mAdapter: InterestAdapter? = null\n    private var mInterestAdList: InterestAd? = null\n    private var mInterestCategroryList: List<InterestCategrory.ResultBean>? = null\n\n    override fun getLayoutId(): Int {\n        return R.layout.fragment_interest\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getInterestData()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = InterestAdapter(mList)\n        mRecycler?.setHasFixedSize(true)\n        val layoutManager = LinearLayoutManager(mContext)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n\n    override fun showInterestAd(interestAdList: InterestAd) {\n        mInterestAdList = interestAdList\n    }\n\n    override fun showCommunity(community: Community) {\n        mList.add(MulInterest(MulInterest.TYPE_BANNER, interestAdList = mInterestAdList))\n        mList.add(MulInterest(MulInterest.TYPE_CATEGRORY, mInterestCategroryList))\n        mList.add(MulInterest(MulInterest.TYPR_HEADER))\n        community.result.forEach { mList.add(MulInterest(MulInterest.TYPR_ITEM, community = it)) }\n        finishTask()\n    }\n\n    override fun showInterestCategrory(interestCategroryList: List<InterestCategrory.ResultBean>) {\n        mInterestCategroryList = interestCategroryList\n    }\n\n    override fun onComplete() {\n        AppUtils.runOnUIDelayed({ mRefresh?.isRefreshing = false }, 650)\n        if (mIsRefreshing) {\n            mList.clear()\n            clear()\n            ToastUtils.showSingleLongToast(\"刷新成功\")\n        }\n        mIsRefreshing = false\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun complete() {\n        mError?.let {\n            gone(it)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/MineFragment.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\n\nimport com.trello.rxlifecycle2.components.support.RxFragment\nimport com.yoyiyi.soleil.R\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/11 12:04\n * * 描述:我的\n */\nclass MineFragment : RxFragment() {\n\n    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        val view = inflater?.inflate(R.layout.fragment_mine, container, false)\n        return view\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/discover/TopicCenterActivity.kt",
    "content": "package com.yoyiyi.soleil.module.discover\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.discover.TopicCenterAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.discover.TopicCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.TopicCenterContract\nimport com.yoyiyi.soleil.mvp.presenter.discover.TopicCenterPresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/5 22:28\n * * 描述:话题中心\n */\nclass TopicCenterActivity : BaseRefreshActivity<TopicCenterPresenter, TopicCenter.ListBean>(), TopicCenterContract.View {\n\n    private var mAdapter: TopicCenterAdapter? = null\n\n    override fun getLayoutId(): Int {\n        return R.layout.activity_topic_center\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"话题中心\"\n    }\n\n    override fun loadData() {\n        mPresenter.getTopicCenterData()\n    }\n\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = TopicCenterAdapter(mList)\n        val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n    override fun showTopicCenter(topicCenterList: List<TopicCenter.ListBean>) {\n        mList?.addAll(topicCenterList)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/entrance/OfflineDownloadActivity.kt",
    "content": "package com.yoyiyi.soleil.module.entrance\n\nimport android.annotation.SuppressLint\nimport android.view.Menu\nimport android.view.MenuItem\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseActivity\nimport com.yoyiyi.soleil.ext.toast\nimport com.yoyiyi.soleil.utils.sdcard.SDCardUtils\nimport kotlinx.android.synthetic.main.activity_offline_download.*\nimport kotlinx.android.synthetic.main.common_toolbar.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/30 22:41\n * * 描述:离线缓存\n */\nclass OfflineDownloadActivity : BaseActivity() {\n\n\n     override fun getLayoutId(): Int {\n        return R.layout.activity_offline_download\n    }\n\n    @SuppressLint(\"SetTextI18n\")\n    override fun initWidget() {\n        val allSpace = SDCardUtils.getAllSpace()\n        val freeSpace = SDCardUtils.getFreeSpace()\n        val progress = countProgress(allSpace.replace(\"GB\".toRegex(), \"\")\n                .replace(\"MB\".toRegex(), \"\")\n                .replace(\"KB\".toRegex(), \"\")\n                .toFloat(),\n        freeSpace.replace(\"GB\".toRegex(), \"\")\n                .replace(\"MB\".toRegex(), \"\")\n                .replace(\"KB\".toRegex(), \"\")\n                .toFloat())\n\n        progress_bar.progress = progress\n        tv_cache_size.text = \"主存储:$allSpace/可用:$freeSpace\"\n    }\n\n    private fun countProgress(allSpace: Float, freeSpace: Float): Int {\n        //取整相减\n        val size = (Math.floor(allSpace.toDouble()) - Math.floor(freeSpace.toDouble())).toInt()\n        val v = size / Math.floor(allSpace.toDouble()) * 100\n        return Math.floor(v).toInt()\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_off, menu)\n        return true\n    }\n\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (item.itemId == R.id.menu_more) {\n            \"离线设置\".toast()\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        toolbar.title = \"离线缓存\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/entrance/VipActivity.kt",
    "content": "package com.yoyiyi.soleil.module.entrance\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport android.support.v7.app.AppCompatActivity\nimport android.view.KeyEvent\nimport android.view.Menu\nimport android.view.MenuItem\nimport cn.sharesdk.framework.ShareSDK\nimport cn.sharesdk.onekeyshare.OnekeyShare\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.utils.ClipboardUtils\nimport com.yoyiyi.soleil.utils.ToastUtils\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_vip.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 0:21\n * * 描述:大会员界面\n */\nclass VipActivity : AppCompatActivity() {\n  /*  @BindView(R.id.toolbar)\n    internal var mToolbar: Toolbar? = null\n    @BindView(R.id.collapsing_toolbar)\n    internal var mCollapsingToolbar: CollapsingToolbarLayout? = null\n    @BindView(R.id.web_view)\n    internal var mWebView: WebView? = null*/\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_vip)\n        initWedgit()\n        web_view.loadUrl(Constants.VIP_URL)\n        //调用shareSDK\n        ShareSDK.initSDK(this, \"\")\n\n\n    }\n\n    private fun initWedgit() {\n        initToolar()\n        StatusBarUtil.setTranslucentForCoordinatorLayout(this, 0)\n    }\n\n    private fun initToolar() {\n        toolbar.title = \"\"\n        toolbar.setNavigationIcon(R.drawable.ic_clip_back_white)\n        setSupportActionBar(toolbar)\n        toolbar.setNavigationOnClickListener { finish() }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_brower, menu)\n        return true\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        val id = item.itemId\n        when (id) {\n            R.id.menu_open -> {\n                val intent = Intent(Intent.ACTION_VIEW)\n                intent.data = Uri.parse(Constants.VIP_URL)\n                startActivity(intent)\n            }\n            R.id.menu_share -> showShare()\n            R.id.menu_copy -> {\n                ClipboardUtils.copyText(Constants.VIP_URL)\n                ToastUtils.showSingleLongToast(\"复制成功\")\n            }\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n\n    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {\n        if (keyCode == KeyEvent.KEYCODE_BACK && web_view.canGoBack()) {\n            web_view.goBack()// 返回前一个页面\n            return true\n        }\n        return super.onKeyDown(keyCode, event)\n    }\n\n\n    override fun onDestroy() {\n        web_view.destroy()\n        super.onDestroy()\n    }\n\n    private fun showShare() {\n        ShareSDK.initSDK(this)\n        val oks = OnekeyShare()\n        //关闭sso授权\n        oks.disableSSOWhenAuthorize()\n        // title标题，印象笔记、邮箱、信息、微信、人人网和QQ空间等使用\n        oks.setTitle(\"来自bili-soleil的分享\")\n        // titleUrl是标题的网络链接，QQ和QQ空间等使用\n        oks.setTitleUrl(Constants.VIP_URL)\n        // text是分享文本，所有平台都需要这个字段\n        oks.text = \"大会员\"\n        // imagePath是图片的本地路径，Linked-In以外的平台都支持此参数\n        //oks.setImagePath(\"/sdcard/test.jpg\");//确保SDcard下面存在此张图片\n        // url仅在微信（包括好友和朋友圈）中使用\n        oks.setUrl(Constants.VIP_URL)\n        // comment是我对这条分享的评论，仅在人人网和QQ空间使用\n        oks.setComment(\"我是测试评论文本\")\n        // site是分享此内容的网站名称，仅在QQ空间使用\n        oks.setSite(getString(R.string.app_name))\n        // siteUrl是分享此内容的网站地址，仅在QQ空间使用\n        oks.setSiteUrl(\"http://sharesdk.cn\")\n        // 启动分享GUI\n        oks.show(this)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/BaseHomeFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.annotation.SuppressLint\nimport android.os.Bundle\nimport android.support.v7.app.AppCompatActivity\nimport android.support.v7.widget.Toolbar\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseFragment\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/6/14 14:12\n * 描述:首页基础base\n */\n\nabstract class BaseHomeFragment : BaseFragment() {\n    var mToolbar: Toolbar? = null\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setHasOptionsMenu(true)//支持menu\n    }\n\n    override fun initWidget() {\n        initToolbar()\n    }\n\n    @SuppressLint(\"CheckResult\")\n    private fun initToolbar() {\n        mToolbar = mRootView?.findViewById(R.id.toolbar) as Toolbar\n        mToolbar?.let {\n            it.title = \"\"\n            (activity as AppCompatActivity).setSupportActionBar(mToolbar)\n            //换成下面这句就OK了\n            it.inflateMenu(R.menu.menu_main)\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/ChaseBangumiFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.section.chase.*\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.mvp.contract.home.ChaseBangumiContract\nimport com.yoyiyi.soleil.mvp.presenter.home.ChaseBangumiPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 14:23\n * * 描述:首页追番\n */\n\nclass ChaseBangumiFragment : BaseRefreshFragment<ChaseBangumiPresenter, ChaseBangumi.Follows>(), ChaseBangumiContract.View {\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n    @Volatile private var mChaseBangumi: ChaseBangumi? = null\n    private var mRecommendCnBean: RecommendBangumi.RecommendCn? = null\n    private var mRecommendJpBean: RecommendBangumi.RecommendJp? = null\n    private var mRecommendBangumi: RecommendBangumi? = null\n\n    companion object {\n\n        fun newInstance(): ChaseBangumiFragment {\n            return ChaseBangumiFragment()\n        }\n    }\n\n    override fun getLayoutId(): Int = R.layout.fragment_home_chase_bangumi\n\n\n    override fun clear() {\n        mSectionedAdapter?.removeAllSections()\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getChaseBangumiData()\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        mRecycler?.setHasFixedSize(true)\n        val mLayoutManager = LinearLayoutManager(activity)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun showChaseBangumi(chaseBangumi: ChaseBangumi) {\n        mChaseBangumi = chaseBangumi\n    }\n\n    override fun showRecommendBangumi(recommendBangumi: RecommendBangumi) {\n        mChaseBangumi?.follows?.let { mList.addAll(it) }\n        mRecommendBangumi = recommendBangumi\n        mRecommendCnBean = recommendBangumi.recommend_cn\n        mRecommendJpBean = recommendBangumi.recommend_jp\n        finishTask()\n    }\n\n\n    override fun finishTask() {\n        mSectionedAdapter?.addSection(ChaseIndexSection())\n        mSectionedAdapter?.addSection(ChaseFollowSection(\"${mChaseBangumi?.update_count}\", mList))\n        mRecommendBangumi?.ad?.let {\n                if (it.isNotEmpty()) {\n                    mSectionedAdapter?.addSection(ChaseAdSection(it[0]))\n            }\n        }\n        mSectionedAdapter?.addSection(mRecommendJpBean?.recommend?.let { mRecommendJpBean?.foot?.get(0)?.let { it1 -> ChaseRecommendJPSection(it, it1) } })\n        mSectionedAdapter?.addSection(mRecommendCnBean?.recommend?.let { mRecommendCnBean?.foot?.get(0)?.let { it1 -> ChaseRecommendCNSection(it, it1) } })\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/DiscoverFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.content.Intent\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.widget.TextView\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseInjectFragment\nimport com.yoyiyi.soleil.bean.discover.HotSearchTag\nimport com.yoyiyi.soleil.constant.Constants\n\nimport com.yoyiyi.soleil.module.app.BrowerActivity\nimport com.yoyiyi.soleil.module.discover.ActivityCenterActivity\nimport com.yoyiyi.soleil.module.discover.GameCenterActivity\nimport com.yoyiyi.soleil.module.discover.InterestActivity\nimport com.yoyiyi.soleil.module.discover.TopicCenterActivity\nimport com.yoyiyi.soleil.module.recommend.AllStationRankActivity\nimport com.yoyiyi.soleil.module.region.AllRegionRankActivity\nimport com.yoyiyi.soleil.module.search.SearchActivity\nimport com.yoyiyi.soleil.module.search.TotalSearchActivity\nimport com.yoyiyi.soleil.mvp.contract.home.DiscoverContract\nimport com.yoyiyi.soleil.mvp.presenter.home.DiscoverPresenter\nimport com.yoyiyi.soleil.widget.flowlayout.FlowLayout\nimport com.yoyiyi.soleil.widget.flowlayout.TagAdapter\nimport kotlinx.android.synthetic.main.fragment_home_discover.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 14:23\n * * 描述:首页发现界面\n */\n\n@Suppress(\"DEPRECATION\")\nclass DiscoverFragment : BaseInjectFragment<DiscoverPresenter>(), DiscoverContract.View, View.OnClickListener {\n\n\n    internal var isShowMore = false\n\n    private val mList = mutableListOf<HotSearchTag.ListBean>()\n\n    override fun getLayoutId(): Int = R.layout.fragment_home_discover\n\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getHotSearchTagData()\n    }\n\n    override fun showHotSearchTag(recommend: HotSearchTag) {\n        mList.addAll(recommend.list)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        tags_layout?.adapter = object : TagAdapter<HotSearchTag.ListBean>(mList.subList(0, 9)) {\n            override fun getView(flowLayout: FlowLayout, i: Int, listBean: HotSearchTag.ListBean): View {\n                val mTags = LayoutInflater.from(activity)\n                        .inflate(R.layout.layout_hot_tags_item, flowLayout, false) as TextView\n                mTags.text = listBean.keyword\n                mTags.setOnClickListener { mContext?.startActivity(Intent(mContext, SearchActivity::class.java)) }\n\n                return mTags\n            }\n        }\n        hide_tags_layout?.adapter = object : TagAdapter<HotSearchTag.ListBean>(mList) {\n            override fun getView(parent: FlowLayout, position: Int, listBean: HotSearchTag.ListBean): View {\n                val mTags = LayoutInflater.from(activity)\n                        .inflate(R.layout.layout_hot_tags_item, parent, false) as TextView\n                mTags.text = listBean.keyword\n                mTags.setOnClickListener { TotalSearchActivity.startActivity(mContext!!, listBean.keyword) };\n                mTags.setOnClickListener { mContext?.startActivity(Intent(mContext, SearchActivity::class.java)) }\n                return mTags\n            }\n        }\n    }\n\n    override fun initSetListener() {\n        ll_more.setOnClickListener(this)\n        rl_rank_original.setOnClickListener(this)\n        rl_rank_all.setOnClickListener(this)\n        rl_topic_center.setOnClickListener(this)\n        rl_activity_center.setOnClickListener(this)\n        rl_game.setOnClickListener(this)\n        rl_mall.setOnClickListener(this)\n        rl_black_list.setOnClickListener(this)\n        rl_group.setOnClickListener(this)\n    }\n\n\n    override fun onClick(v: View) {\n        when (v.id) {\n            R.id.ll_more -> {\n                if (isShowMore) {\n                    isShowMore = false\n                    visible(hide_scroll_view)\n                    tv_more?.text = \"收起\"\n                    gone(tags_layout)\n                    val upDrawable = resources.getDrawable(R.drawable.ic_arrow_up_gray_round)\n                    upDrawable.setBounds(0, 0, upDrawable.minimumWidth, upDrawable.minimumHeight)\n                    tv_more?.setCompoundDrawables(upDrawable, null, null, null)\n                } else {\n                    isShowMore = true\n                    gone(hide_scroll_view)\n                    tv_more?.text = \"查看更多\"\n                    visible(tags_layout)\n                    val downDrawable = resources.getDrawable(R.drawable.ic_arrow_down_gray_round)\n                    downDrawable.setBounds(0, 0, downDrawable.minimumWidth, downDrawable.minimumHeight)\n                    tv_more?.setCompoundDrawables(downDrawable, null, null, null)\n                }\n\n            }\n            R.id.rl_mall//周边商城\n            -> BrowerActivity.startActivity(activity, Constants.SHOP_URL, \"bilibili - 周边商城\", \"\")\n            R.id.rl_black_list//小黑屋\n            -> BrowerActivity.startActivity(activity, Constants.BLACK_URL, \"小黑屋\", \"\")\n            R.id.rl_rank_all//全站排行\n            -> AllRegionRankActivity.startActivity(activity, \"番剧\")\n            R.id.rl_game//游戏中心\n            -> startActivity(Intent(getApplicationContext(), GameCenterActivity::class.java))\n            R.id.rl_topic_center//话题中心\n            -> startActivity(Intent(getApplicationContext(), TopicCenterActivity::class.java))\n            R.id.rl_activity_center//活动中心\n            -> startActivity(Intent(getApplicationContext(), ActivityCenterActivity::class.java))\n            R.id.rl_group\n            -> startActivity(Intent(getApplicationContext(), InterestActivity::class.java))\n            R.id.rl_rank_original//原创排行\n            -> startActivity(Intent(getApplicationContext(), AllStationRankActivity::class.java))\n\n        }\n\n    }\n\n    companion object {\n\n        fun newInstance(): DiscoverFragment {\n            return DiscoverFragment()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/DynamicFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.support.v7.widget.LinearLayoutManager\nimport android.view.View\nimport android.view.View.OnClickListener\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.DynamicAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.dynamic.MulDynamic\nimport com.yoyiyi.soleil.mvp.contract.home.DynamicContract\nimport com.yoyiyi.soleil.mvp.presenter.home.DynamicPresenter\nimport kotlinx.android.synthetic.main.fragment_home_dynamic.*\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 14:23\n * 描述:推荐\n */\n\nclass DynamicFragment : BaseRefreshFragment<DynamicPresenter, MulDynamic>(), DynamicContract.View, OnClickListener {\n\n    private var mAdapter: DynamicAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_home_dynamic\n\n\n    override fun initWidget() {\n        tv_all_select.isSelected = true\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getMulDynamicData()\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun onClick(v: View?) {\n        when (v?.id) {\n            R.id.cl_all -> {\n                expand?.let {\n                    if (it.isExpanded) {\n                        it.collapse()\n                    } else {\n                        it.expand()\n                    }\n                }\n            }\n            R.id.tv_all_select -> {\n                tv_all_select?.isSelected = true\n                tv_up_select?.isSelected = false\n                tv_bangumi_select?.isSelected = false\n                expand?.collapse()\n            }\n            R.id.tv_up_select -> {\n                tv_all_select?.isSelected = false\n                tv_up_select?.isSelected = true\n                tv_bangumi_select?.isSelected = false\n                expand?.collapse()\n            }\n            R.id.tv_bangumi_select -> {\n                tv_all_select?.isSelected = false\n                tv_up_select?.isSelected = false\n                tv_bangumi_select?.isSelected = true\n                expand?.collapse()\n            }\n\n\n        }\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = DynamicAdapter(mList)\n        mRecycler?.setHasFixedSize(true)\n        val layoutManager = LinearLayoutManager(activity)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n    override fun showMulDynamic(mulDynamic: List<MulDynamic>) {\n        mList.addAll(mulDynamic)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    companion object {\n\n        fun newInstance(): DynamicFragment {\n            return DynamicFragment()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/HomeFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.content.Intent\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.MenuItem\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.MainAdapter\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.module.discover.GameCenterActivity\nimport com.yoyiyi.soleil.rx.RxBus\nimport kotlinx.android.synthetic.main.layout_main_toolbar.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/14 12:20\n *  描述:首页Fragment\n */\n\nclass HomeFragment : BaseHomeFragment() {\n\n\n    companion object {\n        fun newInstance(): HomeFragment = HomeFragment()\n    }\n\n    override fun getLayoutId(): Int {\n        return R.layout.fragment_main_home\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        initViewPager()\n        llNavigation.setOnClickListener {\n            val event = Event.StartNavigationEvent()\n            event.start = true\n            RxBus.post(event)\n        }\n    }\n\n\n    override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {\n        inflater?.inflate(R.menu.menu_main, menu)\n        super.onCreateOptionsMenu(menu, inflater)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem?): Boolean {\n        val id = item?.itemId\n        when (id) {\n          R.id.menu_game -> startActivity(Intent(mContext, GameCenterActivity::class.java))\n        }\n\n        return super.onOptionsItemSelected(item)\n    }\n\n    private fun initViewPager() {\n        val adapter = MainAdapter(childFragmentManager)\n        viewPager.offscreenPageLimit = 5\n        viewPager.adapter = adapter\n        stlTabs.setViewPager(viewPager)\n        viewPager.currentItem = 0\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/LiveFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.live.LiveAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.live.MulLive\nimport com.yoyiyi.soleil.mvp.contract.home.LiveContract\nimport com.yoyiyi.soleil.mvp.presenter.home.LivePresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 14:23\n * 描述:推荐\n */\n\nclass LiveFragment : BaseRefreshFragment<LivePresenter, MulLive>(), LiveContract.View {\n\n\n    private var mAdapter: LiveAdapter? = null\n\n    companion object {\n        fun newInstance(): LiveFragment {\n            return LiveFragment()\n        }\n    }\n\n    override fun getLayoutId(): Int = R.layout.fragment_home_live\n\n    override fun lazyLoadData() {\n        mPresenter.getLiveData()\n    }\n\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = LiveAdapter(mList)\n        mRecycler?.setHasFixedSize(true)\n        val mLayoutManager = LinearLayoutManager(activity)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n\n    }\n\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun showMulLive(mulLives: List<MulLive>) {\n        mList.addAll(mulLives)\n        finishTask()\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/RecommendFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.content.Intent\nimport android.support.v7.widget.GridLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.RecommendAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.recommend.MulRecommend\nimport com.yoyiyi.soleil.bean.recommend.Recommend\nimport com.yoyiyi.soleil.module.recommend.AllStationRankActivity\nimport com.yoyiyi.soleil.mvp.contract.home.RecommendContract\nimport com.yoyiyi.soleil.mvp.presenter.home.RecommendPresenter\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.widget.divider.VerticalDividerItemDecoration\nimport kotlinx.android.synthetic.main.fragment_home_recommend.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 14:23\n * * 描述:推荐\n */\n\nclass RecommendFragment : BaseRefreshFragment<RecommendPresenter, MulRecommend>(), RecommendContract.View {\n\n    private var mAdapter: RecommendAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_home_recommend\n\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getRecommendData()\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        ivRank?.setOnClickListener { startActivity(Intent(activity, AllStationRankActivity::class.java)) }\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = RecommendAdapter(mList)\n        val mLayoutManager = GridLayoutManager(activity, 2)\n        mAdapter?.setSpanSizeLookup({ _, i -> mList[i].spanSize })\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n        //添加分割条\n        val build = VerticalDividerItemDecoration.Builder(activity)\n                .color(AppUtils.getColor(R.color.transparent))\n                // .color(AppUtils.getColor(R.color.colorPrimary))\n                .sizeResId(R.dimen.dp10)\n                .showLastDivider()\n                .build()\n        mRecycler?.addItemDecoration(build)\n    }\n\n    override fun showRecommend(recommend: List<Recommend>) {\n        recommend.forEach {\n            if (it.banner_item != null && it.banner_item.isNotEmpty()) {\n                mList.add(MulRecommend(itemTypez = MulRecommend.TYPE_HEADER, spanSize = MulRecommend.HEADER_SPAN_SIZE, data = it.banner_item))\n            } else {\n                mList.add(MulRecommend(itemTypez = MulRecommend.TYPE_ITEM, spanSize = MulRecommend.ITEM_SPAN_SIZE, recommend = it))\n            }\n\n        }\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    companion object {\n\n        fun newInstance(): RecommendFragment = RecommendFragment()\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/home/RegionFragment.kt",
    "content": "package com.yoyiyi.soleil.module.home\n\nimport android.support.v7.widget.GridLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.home.section.region.RegionActivityCenterSection\nimport com.yoyiyi.soleil.adapter.home.section.region.RegionEntranceSection\nimport com.yoyiyi.soleil.adapter.home.section.region.RegionSection\nimport com.yoyiyi.soleil.adapter.home.section.region.RegionTopicSection\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.bean.region.RegionTagType\nimport com.yoyiyi.soleil.mvp.contract.home.RegionContract\nimport com.yoyiyi.soleil.mvp.presenter.home.RegionPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 14:23\n * * 描述:分区\n */\n\nclass RegionFragment : BaseRefreshFragment<RegionPresenter, Region>(), RegionContract.View {\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n    private val mRegionTypeList = arrayListOf<RegionTagType>()\n\n    companion object {\n        fun newInstance(): RegionFragment {\n            return RegionFragment()\n        }\n    }\n\n    override fun getLayoutId(): Int = R.layout.fragment_home_region\n\n\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val mLayoutManager = GridLayoutManager(activity, 2)\n        mLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {\n            override fun getSpanSize(position: Int): Int {\n                when (mSectionedAdapter?.getSectionItemViewType(position)) {\n                    SectionedRVAdapter.VIEW_TYPE_HEADER -> return 2//2格\n                    SectionedRVAdapter.VIEW_TYPE_FOOTER -> return 2//2格\n                    else -> return 1\n                }\n            }\n        }\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getRegionData()\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun showRegion(regions: List<Region>) {\n        mList.addAll(regions)\n        finishTask()\n    }\n\n    override fun showRegionType(regionTypes: List<RegionTagType>) {\n        mRegionTypeList.addAll(regionTypes)\n    }\n\n    override fun finishTask() {\n        mSectionedAdapter?.addSection(RegionEntranceSection(mRegionTypeList))\n        mList.forEach {\n            when (it.type) {\n                \"topic\" -> mSectionedAdapter?.addSection(RegionTopicSection(it.body[0]))//话题\n                \"activity\" -> mSectionedAdapter?.addSection(RegionActivityCenterSection(it.body))//活动中心\n                else -> mSectionedAdapter?.addSection(RegionSection(it.title, it.body))//分区和番剧区\n\n            }\n        }\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/recommend/AllStationRankActivity.kt",
    "content": "package com.yoyiyi.soleil.module.recommend\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.module.region.BaseRegionActivity\nimport com.yoyiyi.soleil.mvp.presenter.app.NothingPresenter\nimport javax.annotation.Nullable\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:11\n * * 描述:全站排行\n */\nclass AllStationRankActivity : BaseRegionActivity<NothingPresenter, Nullable>() {\n\n    private val mTitlesArr = arrayOf(\"原创\", \"全站\", \"番剧\")\n\n    private val mTypesArr = arrayOf(\"origin-03.json\", \"all-03.json\", \"all-3-33.json\")\n\n    override fun getLayoutId(): Int = R.layout.activity_region_type\n\n\n    override fun initWidget() {\n        super.initWidget()\n        mViewPager?.offscreenPageLimit = mTitlesArr.size + 1\n        mViewPager?.adapter = BaseRegionTypeAdapter(supportFragmentManager)\n        mSlidingTabLayout?.setViewPager(mViewPager)\n        mViewPager?.currentItem = 0\n\n    }\n\n    override fun initVariables() {\n        for (i in mTitlesArr.indices) {\n            mTitles.add(mTitlesArr[i])\n            mFragment.add(AllStationRankFragment.newInstance(mTypesArr[i]))\n        }\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        setTitle(\"排行榜\")\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/recommend/AllStationRankFragment.kt",
    "content": "package com.yoyiyi.soleil.module.recommend\n\nimport android.os.Bundle\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.recommend.AllStationRankAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.recommend.AllStationRank\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.recommend.AllStationRankContract\nimport com.yoyiyi.soleil.mvp.presenter.recommend.AllStationRankPresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:35\n * * 描述:全站排行\n */\nclass AllStationRankFragment : BaseRefreshFragment<AllStationRankPresenter, AllStationRank.RankBean.ListBean>(), AllStationRankContract.View {\n\n    private lateinit var mType: String\n\n    private var mAdapter: AllStationRankAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_region_type\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mType = it.getString(Constants.EXTRA_TYPE)\n        }\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n\n        mPresenter.getAllStationRankData(mType)\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = AllStationRankAdapter(mList)\n        val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n\n    override fun showAllStationRank(regionRank: List<AllStationRank.RankBean.ListBean>) {\n        mList.addAll(regionRank)\n        finishTask()\n    }\n\n    companion object {\n\n        fun newInstance(type: String): AllStationRankFragment {\n            val bundle = Bundle()\n            bundle.putString(Constants.EXTRA_TYPE, type)\n            val fragment = AllStationRankFragment()\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/AdActivity.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.support.v7.widget.GridLayoutManager\nimport android.view.Menu\nimport android.view.MenuItem\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.region.sectiton.RegionRecommendBannerSection\nimport com.yoyiyi.soleil.adapter.region.sectiton.RegionRecommendDynamicSection\nimport com.yoyiyi.soleil.adapter.region.sectiton.RegionRecommendNewSection\nimport com.yoyiyi.soleil.adapter.region.sectiton.RegionRecommendRecommendSection\nimport com.yoyiyi.soleil.base.BaseRefreshActivity\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.mvp.contract.region.RegionTypeRecommendContract\nimport com.yoyiyi.soleil.mvp.presenter.region.RegionTypeRecommendPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:35\n * * 描述:广告界面\n */\nclass AdActivity : BaseRefreshActivity<RegionTypeRecommendPresenter, RegionRecommend.NewBean>(), RegionTypeRecommendContract.View {\n\n    private val mTopBeanList = ArrayList<RegionRecommend.BannerBean.TopBean>()\n    private val mDynamicBeanList = ArrayList<RegionRecommend.DynamicBean>()\n    private val mRecommendBeanList = ArrayList<RegionRecommend.RecommendBean>()\n\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.activity_ad\n\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter?.attachView(this)\n    }\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val mLayoutManager = GridLayoutManager(mContext, 2)\n        mLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {\n            override fun getSpanSize(position: Int): Int {\n                when (mSectionedAdapter?.getSectionItemViewType(position)) {\n                    SectionedRVAdapter.VIEW_TYPE_HEADER -> return 2//2格\n                    SectionedRVAdapter.VIEW_TYPE_FOOTER -> return 2//2格\n                    else -> return 1\n                }\n            }\n        }\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun clear() {\n        mRecommendBeanList.clear()\n        mDynamicBeanList.clear()\n        mTopBeanList.clear()\n        mSectionedAdapter?.removeAllSections()\n    }\n\n    override fun loadData() {\n        mPresenter?.getRegionRecommendData(165)\n\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        mToolbar?.title = \"广告\"\n    }\n\n    override fun showRegionRecommend(regionRecommend: RegionRecommend) {\n        mList?.addAll(regionRecommend.new)\n        mRecommendBeanList.addAll(regionRecommend.recommend)\n        mTopBeanList.addAll(regionRecommend.banner.top)\n        mDynamicBeanList.addAll(regionRecommend.dynamic)\n        finishTask()\n    }\n\n\n    override fun finishTask() {\n        mSectionedAdapter?.addSection(RegionRecommendBannerSection(mTopBeanList))\n        mSectionedAdapter?.addSection(RegionRecommendRecommendSection(mRecommendBeanList))\n        mList?.let {\n            mSectionedAdapter?.addSection(RegionRecommendNewSection(it))\n        }\n        mSectionedAdapter?.addSection(RegionRecommendDynamicSection(mDynamicBeanList))\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_region, menu)\n        return true\n    }\n\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        val id = item.itemId\n        when (id) {\n\n        }\n\n        return super.onOptionsItemSelected(item)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/AllRegionRankActivity.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Bundle\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.presenter.app.NothingPresenter\nimport javax.annotation.Nullable\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:11\n * * 描述:全区排行界面\n */\nclass AllRegionRankActivity : BaseRegionActivity<NothingPresenter, Nullable>() {\n\n    private var mTitle: String? = null\n    private val mTitlesArr = mutableListOf(\"番剧\", \"动画\", \"音乐\", \"舞蹈\", \"游戏\", \"科技\", \"生活\", \"鬼畜\", \"时尚\", \"娱乐\", \"电影\", \"电视剧\")\n\n    private val mTypesArr = mutableListOf(\"all-03-13.json\", \"all-03-1.json\", \"all-03-3.json\", \"all-03-129.json\", \"all-03-4.json\", \"all-03-36.json\", \"all-03-160.json\", \"all-03-155.json\", \"all-03-5.json\", \"all-03-119.json\", \"all-03-23.json\", \"all-03-11.json\")\n\n\n\n\n    override fun getLayoutId(): Int = R.layout.activity_region_type\n\n\n    override fun initVariables() {\n        intent?.let {\n            val bundle = it.getBundleExtra(Constants.EXTRA_BUNDLE)\n            mTitle = bundle.getString(Constants.EXTRA_TITLE)\n\n        }\n\n    }\n\n    override fun initTitle() {\n        for (index in mTitlesArr.indices) {\n            mTitles.add(mTitlesArr[index])\n            mFragment.add(AllRegionRankFragment.newInstance(mTypesArr[index]))\n        }\n    }\n\n    override fun initViewPager() {\n        super.initViewPager()\n        when (mTitle) {\n            \"番剧\" -> mViewPager?.currentItem = 0\n            \"动画\" -> mViewPager?.currentItem = 1\n            \"音乐\" -> mViewPager?.currentItem = 2\n            \"舞蹈\" -> mViewPager?.currentItem = 3\n            \"游戏\" -> mViewPager?.currentItem = 4\n            \"科技\" -> mViewPager?.currentItem = 5\n            \"生活\" -> mViewPager?.currentItem = 6\n            \"鬼畜\" -> mViewPager?.currentItem = 7\n            \"时尚\" -> mViewPager?.currentItem = 8\n            \"电影\" -> mViewPager?.currentItem = 9\n            \"电视剧\" -> mViewPager?.currentItem = 10\n        }\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        finishTask()\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        setTitle(\"全区排行榜\")\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    companion object {\n\n\n        fun startActivity(context: Context, title: String) {\n            val bundle = Bundle()\n            val intent = Intent(context, AllRegionRankActivity::class.java)\n            bundle.putString(Constants.EXTRA_TITLE, title)\n            intent.putExtra(Constants.EXTRA_BUNDLE, bundle)\n            context.startActivity(intent)\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/AllRegionRankFragment.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.os.Bundle\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.region.AllRegionRankAdapter\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.region.AllRegionRank\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.region.AllRegionRankContract\nimport com.yoyiyi.soleil.mvp.presenter.region.AllRegionRankPresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:35\n * * 描述:分区Tag\n */\nclass AllRegionRankFragment : BaseRefreshFragment<AllRegionRankPresenter, AllRegionRank.RankBean.ListBean>(), AllRegionRankContract.View {\n\n    private var mType: String? = null\n    private var mAdapter: AllRegionRankAdapter? = null\n\n    companion object {\n        fun newInstance(type: String): AllRegionRankFragment {\n            val bundle = Bundle()\n            bundle.putString(Constants.EXTRA_TYPE, type)\n            val fragment = AllRegionRankFragment()\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n\n    override fun getLayoutId(): Int = R.layout.fragment_region_type\n\n\n    override fun initVariables() {\n        arguments?.let {\n            mType = it.getString(Constants.EXTRA_TYPE)\n\n        }\n\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n        mType?.let {\n            mPresenter.getAllRegionRankData(it)\n        }\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = AllRegionRankAdapter(mList)\n        val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL,\n                false)\n        mRecycler?.layoutManager = layoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n\n    override fun showAllRegionRank(regionRank: List<AllRegionRank.RankBean.ListBean>) {\n        mList.addAll(regionRank)\n        finishTask()\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/BaseRegionActivity.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.annotation.SuppressLint\nimport android.support.v4.app.Fragment\nimport android.support.v4.app.FragmentManager\nimport android.support.v4.app.FragmentStatePagerAdapter\nimport android.support.v4.view.ViewPager\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.flyco.tablayout.SlidingTabLayout\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.base.BaseInjectActivity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 12:30\n * * 描述:基础分区\n */\nabstract class BaseRegionActivity<T : BaseContract.BasePresenter<*>, K> : BaseInjectActivity<T>() {\n    protected var mTvTitle: TextView? = null\n    protected var mIvBack: ImageView? = null\n    protected var mList = mutableListOf<K>()\n    protected var mTitles = mutableListOf<String>()\n    protected var mFragment = mutableListOf<Fragment>()\n\n    protected var mSlidingTabLayout: SlidingTabLayout? = null\n\n    var mViewPager: ViewPager? = null\n\n    @SuppressLint(\"CheckResult\")\n    override fun initToolbar() {\n        mTvTitle = findViewById(R.id.tv_title) as TextView?\n        mIvBack = findViewById(R.id.iv_back) as ImageView?\n        mIvBack?.setOnClickListener { finish() }\n    }\n\n    protected fun setTitle(title: String) {\n        mTvTitle?.text = title\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        initSlidingTabLayout()\n    }\n\n    protected fun initSlidingTabLayout() {\n        mSlidingTabLayout = findViewById(R.id.sliding_tabs) as SlidingTabLayout?\n        mViewPager = findViewById(R.id.view_pager) as ViewPager?\n\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_region, menu)\n        return true\n    }\n\n    protected open fun initFragment() {}\n\n    protected open fun initTitle() {}\n\n    override fun finishTask() {\n        initTitle()\n        initFragment()\n        initViewPager()\n        initEvent()\n    }\n\n    protected open fun initViewPager() {\n        mViewPager?.offscreenPageLimit = mTitles.size\n        mViewPager?.adapter = BaseRegionTypeAdapter(supportFragmentManager)\n        mSlidingTabLayout?.setViewPager(mViewPager)\n    }\n\n    /**\n     * 初始化事件\n     */\n    protected open fun initEvent() {\n\n    }\n\n    protected fun setCurrentItem(pos: Int) {\n        mViewPager?.currentItem = pos\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        val id = item.itemId\n        when (id) {\n\n        }\n\n        return super.onOptionsItemSelected(item)\n    }\n\n    inner class BaseRegionTypeAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {\n\n        override fun getItem(position: Int): Fragment {\n            mFragment.let {\n                return it[position]\n            }\n        }\n\n        override fun getCount(): Int = mTitles.size\n\n\n        override fun getPageTitle(position: Int): CharSequence = mTitles[position]\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/RegionTypeActivity.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Bundle\nimport android.os.Parcelable\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.region.RegionTagType\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.region.AllRegionRankPositionContract\nimport com.yoyiyi.soleil.mvp.presenter.region.AllRegionRankPositionPresenter\nimport javax.annotation.Nullable\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:11\n * * 描述:分区type界面\n */\nclass RegionTypeActivity : BaseRegionActivity<AllRegionRankPositionPresenter, Nullable>(), AllRegionRankPositionContract.View {\n    lateinit var mRegionType: RegionTagType\n    lateinit var mTitle: String\n\n\n    companion object {\n        fun startActivity(context: Context, type: RegionTagType) {\n            val bundle = Bundle()\n            val intent = Intent(context, RegionTypeActivity::class.java)\n            bundle.putParcelable(Constants.EXTRA_PARCELABLE, type)\n            intent.putExtra(Constants.EXTRA_BUNDLE, bundle)\n            context.startActivity(intent)\n        }\n    }\n\n    override fun getLayoutId(): Int = R.layout.activity_region_type\n\n\n    override fun initVariables() {\n        intent?.let {\n            val bundle = it.getBundleExtra(Constants.EXTRA_BUNDLE)\n            mRegionType = bundle.getParcelable<Parcelable>(Constants.EXTRA_PARCELABLE) as RegionTagType\n        }\n\n        mTitle = mRegionType.name\n        mTitles.add(\"推荐\")\n        //推荐\n        mFragment.add(RegionTypeRecommendFragment.newInstance(mRegionType.tid))\n        mRegionType.children.forEach { (tid, _, name) ->\n            mTitles.add(name)\n            //其他标签页面\n            mFragment.add(RegionTypeFragment.newInstance(tid))\n        }\n\n    }\n\n    override fun initWidget() {\n        super.initWidget()\n        mViewPager?.offscreenPageLimit = mRegionType.children.size + 1\n        mViewPager?.adapter = BaseRegionTypeAdapter(supportFragmentManager)\n        mSlidingTabLayout?.setViewPager(mViewPager)\n        mViewPager?.currentItem = 0\n    }\n\n    override fun initToolbar() {\n        super.initToolbar()\n        setTitle(mTitle)\n    }\n\n    override fun loadData() {\n        //设置推荐Fragment entrance 监听\n        mPresenter.getEventPosition()\n    }\n\n    override fun showEventPosition(position: Int) {\n        //设置位置 viewpager\n        mViewPager?.currentItem = position + 1\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/RegionTypeFragment.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.os.Bundle\nimport android.support.v7.widget.LinearLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.region.sectiton.RegionTypeNewSection\nimport com.yoyiyi.soleil.adapter.region.sectiton.RegionTypeRecommendSection\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.region.RegionType\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.region.RegionTypeContract\nimport com.yoyiyi.soleil.mvp.presenter.region.RegionTypePresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:35\n * * 描述:分区Tag\n */\nclass RegionTypeFragment : BaseRefreshFragment<RegionTypePresenter, RegionType.RecommendBean>(), RegionTypeContract.View {\n    private var mTid: Int = 0\n    private val mNewBeanList = ArrayList<RegionType.NewBean>()\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n\n    override fun getLayoutId(): Int {\n        return R.layout.fragment_region_type\n    }\n\n\n    override fun initVariables() {\n\n        arguments?.let {\n            mTid = it.getInt(Constants.EXTRA_TID)\n\n        }\n\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getRegionTypeData(mTid)\n    }\n\n    override fun clear() {\n        mNewBeanList.clear()\n        mSectionedAdapter?.removeAllSections()\n    }\n\n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val mLayoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL,\n                false)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun showRegionType(regionType: RegionType) {\n        mList.addAll(regionType.recommend)\n        mNewBeanList.addAll(regionType.new)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mSectionedAdapter?.addSection(RegionTypeRecommendSection(mList))\n        mSectionedAdapter?.addSection(RegionTypeNewSection(mNewBeanList))\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n\n    companion object {\n\n        fun newInstance(tid: Int): RegionTypeFragment {\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_TID, tid)\n            val fragment = RegionTypeFragment()\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/RegionTypeRecommendFragment.kt",
    "content": "package com.yoyiyi.soleil.module.region\n\nimport android.os.Bundle\nimport android.support.v7.widget.GridLayoutManager\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.region.sectiton.*\nimport com.yoyiyi.soleil.base.BaseRefreshFragment\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.constant.Constants\nimport com.yoyiyi.soleil.mvp.contract.region.RegionTypeRecommendContract\nimport com.yoyiyi.soleil.mvp.presenter.region.RegionTypeRecommendPresenter\nimport com.yoyiyi.soleil.widget.section.SectionedRVAdapter\nimport java.util.*\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 18:35\n * * 描述:分区推荐界面\n */\nclass RegionTypeRecommendFragment : BaseRefreshFragment<RegionTypeRecommendPresenter, RegionRecommend.NewBean>(), RegionTypeRecommendContract.View {\n\n    private var mTid: Int = 0\n    private val mTopBeanList = ArrayList<RegionRecommend.BannerBean.TopBean>()\n    private val mDynamicBeanList = ArrayList<RegionRecommend.DynamicBean>()\n    private val mRecommendBeanList = ArrayList<RegionRecommend.RecommendBean>()\n\n    private var mSectionedAdapter: SectionedRVAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_region_type_recommend\n    \n\n    override fun initVariables() {\n        arguments?.let {\n            mTid = it.getInt(Constants.EXTRA_TID)\n        }\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n    \n    override fun initRecyclerView() {\n        mSectionedAdapter = SectionedRVAdapter()\n        val mLayoutManager = GridLayoutManager(activity, 2)\n        mLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {\n            override fun getSpanSize(position: Int): Int {\n                when (mSectionedAdapter?.getSectionItemViewType(position)) {\n                    SectionedRVAdapter.VIEW_TYPE_HEADER -> return 2//2格\n                    SectionedRVAdapter.VIEW_TYPE_FOOTER -> return 2//2格\n                    else -> return 1\n                }\n            }\n        }\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mSectionedAdapter\n    }\n\n    override fun clear() {\n        mRecommendBeanList.clear()\n        mDynamicBeanList.clear()\n        mTopBeanList.clear()\n        mSectionedAdapter?.removeAllSections()\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getRegionRecommendData(mTid)\n    }\n\n    override fun showRegionRecommend(regionRecommend: RegionRecommend) {\n        mList.addAll(regionRecommend.new)\n        mRecommendBeanList.addAll(regionRecommend.recommend)\n        mTopBeanList.addAll(regionRecommend.banner.top)\n        mDynamicBeanList.addAll(regionRecommend.dynamic)\n        finishTask()\n    }\n\n\n    override fun finishTask() {\n        mSectionedAdapter?.addSection(RegionRecommendBannerSection(mTopBeanList))\n        mSectionedAdapter?.addSection(RegionRecommendEntranceSection(mTid))\n        mSectionedAdapter?.addSection(RegionRecommendRecommendSection(mRecommendBeanList))\n        mSectionedAdapter?.addSection(RegionRecommendNewSection(mList))\n        mSectionedAdapter?.addSection(RegionRecommendDynamicSection(mDynamicBeanList))\n        mSectionedAdapter?.notifyDataSetChanged()\n    }\n\n    companion object {\n\n        fun newInstance(tid: Int): RegionTypeRecommendFragment {\n            val fragment = RegionTypeRecommendFragment()\n            val bundle = Bundle()\n            bundle.putInt(Constants.EXTRA_TID, tid)\n            fragment.arguments = bundle\n            return fragment\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/region/live/LiveRegionActivity.kt",
    "content": "package com.yoyiyi.soleil.module.region.live\n\nimport com.yoyiyi.soleil.module.region.BaseRegionActivity\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/30 12:12\n * * 描述:直播分区\n */\nclass LiveRegionActivity : BaseRegionActivity<Nothing, Nothing>/*<LivePresenter, LiveEntrance>*/ /*implements LiveContract.View */() {\n    /* @Override\n    public void showLiveEntrance(List<LiveEntrance> liveEntrances) {\n\n    }\n*/\n     override fun getLayoutId(): Int {\n        return 0\n    }\n\n    /*  @Override\n    protected int getLayoutId() {\n        return R.layout.activity_live_region;\n    }\n\n    public static void startActivity(Context context) {\n        Intent intent = new Intent(context, LiveRegionActivity.class);\n        context.startActivity(intent);\n    }\n\n    @Override\n    protected void initToolbar() {\n        super.initToolbar();\n        setTitle(\"直播\");\n    }\n\n    @Override\n    protected void initInject() {\n        getActivityComponent().inject(this);\n    }\n\n    @Override\n    protected void loadData() {\n        mPresenter.getLiveEntranceData();\n    }\n\n\n    @Override\n    protected void finishTask() {\n        mTitles.clear();\n        mTitles.add(\"推荐\");\n        Stream.of(mList)\n                .map(liveEntrance -> liveEntrance.name)\n                .forEach(name -> mTitles.add(name));\n\n        Stream.of(mTitles).forEach(title -> {\n            mFragments.add(LiveFragment.newInstance());\n        });\n        mViewPager.setAdapter(new BaseRegionTypeAdapte(getSupportFragmentManager(), mTitles, mFragments));\n        mSlidingTabLayout.setViewPager(mViewPager);\n    }\n\n    @Override\n    public void showLiveEntrance(List<LiveEntrance> liveEntrances) {\n        mList.addAll(liveEntrances);\n        finishTask();\n    }\n*/\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/ArchiveFragment.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.search.MulArchiveAdapter\nimport com.yoyiyi.soleil.bean.search.MulSearchArchive\nimport com.yoyiyi.soleil.mvp.contract.search.ArchiveContract\nimport com.yoyiyi.soleil.mvp.presenter.search.ArchivePresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 11:46\n * * 描述:综合搜索\n */\nclass ArchiveFragment : BaseSearchFragment<ArchivePresenter, MulSearchArchive>(), ArchiveContract.View {\n\n\n    private var mAdapter: MulArchiveAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_search_archive\n\n\n\n    override fun initInject() {\n       fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n\n    override fun lazyLoadData() {\n        mPresenter.getSearchArchiveData()\n    }\n\n    override fun showSearchArchive(mulSearchArchiveList: List<MulSearchArchive>) {\n        mList.addAll(mulSearchArchiveList)\n        finishTask()\n    }\n\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = MulArchiveAdapter(mList)\n        val mLayoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n    companion object {\n        fun newsInstance(): ArchiveFragment {\n            val fragment = ArchiveFragment()\n            return fragment\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/BaseSearchFragment.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport android.graphics.drawable.AnimationDrawable\nimport android.support.v7.widget.RecyclerView\nimport android.view.View\nimport android.widget.ImageView\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.base.BaseInjectFragment\n\nimport com.yoyiyi.soleil.mvp.contract.search.BaseSearchContract\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 11:46\n * * 描述:基础搜索\n */\nabstract class BaseSearchFragment<T : BaseContract.BasePresenter<*>, K> : BaseInjectFragment<T>(), BaseSearchContract.View {\n\n    protected var mList = mutableListOf<K>()\n    protected var mIvSearchLoad: ImageView? = null\n    protected var mAnimationDrawable: AnimationDrawable? = null\n    protected var mRecycler: RecyclerView? = null\n\n    override fun initWidget() {\n        mIvSearchLoad = mRootView?.findViewById(R.id.iv_search_load) as ImageView?\n        mRecycler = mRootView?.findViewById(R.id.recycler) as RecyclerView?\n        initRecyclerView()\n    }\n\n\n    override fun showError(msg: String) {\n        //显示搜索不到\n        mIvSearchLoad?.let {\n            it.setImageResource(R.drawable.search_failed)\n            visible(it)\n            mRecycler?.let { it1 -> gone(it1) }\n\n        }\n        mAnimationDrawable?.stop()\n\n    }\n\n    override fun complete() {\n        mIvSearchLoad?.let {\n            gone(it)\n            mRecycler?.let { it1 -> visible(it1) }\n        }\n        mAnimationDrawable?.stop()\n\n    }\n\n    override fun showLoading() {\n        mIvSearchLoad?.setImageResource(R.drawable.anim_search_loading)\n        if (mAnimationDrawable != null)\n            mAnimationDrawable = mIvSearchLoad?.drawable as AnimationDrawable\n        mIvSearchLoad?.visibility = View.VISIBLE\n        mRecycler?.visibility = View.GONE\n        mAnimationDrawable?.start()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/MovieFragment.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.search.MovieAdapter\nimport com.yoyiyi.soleil.bean.search.Movie\nimport com.yoyiyi.soleil.mvp.contract.search.MovieContract\nimport com.yoyiyi.soleil.mvp.presenter.search.MoviePresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 11:46\n * * 描述:影视\n */\nclass MovieFragment : BaseSearchFragment<MoviePresenter, Movie.DataBean.ItemsBean>(), MovieContract.View {\n    private var mAdapter: MovieAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_search_movie\n\n\n    override fun lazyLoadData() {\n        mPresenter.getSearchMovieData()\n    }\n\n    override fun showSearchMovie(movie: Movie) {\n        mList.addAll(movie.data.items)\n        finishTask()\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n    \n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = MovieAdapter(mList)\n        val mLayoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n    companion object {\n\n        fun newsInstance(): MovieFragment {\n            return MovieFragment()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/SearchActivity.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.bean.search.Search\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.module.region.BaseRegionActivity\nimport com.yoyiyi.soleil.mvp.contract.search.SearchContract\nimport com.yoyiyi.soleil.mvp.presenter.search.SearchPresenter\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.StatusBarFontUtil\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport javax.annotation.Nullable\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/18 13:55\n * * 描述:搜索\n */\n\nclass SearchActivity : BaseRegionActivity<SearchPresenter, Nullable>(), SearchContract.View {\n\n    private lateinit var mSearch: Search\n\n    override fun getLayoutId(): Int = R.layout.activity_search\n\n\n    override fun showSearch(search: Search) {\n        mSearch = search\n        finishTask()\n    }\n\n    override fun initStatusBar() {\n        //设置状态栏颜色\n        StatusBarUtil.setColorNoTranslucent(this, AppUtils.getColor(R.color.gray_light_30))\n        //设置状态栏字体\n        StatusBarFontUtil.from(this).setLightStatusBar(true).process()\n    }\n\n    override fun initTitle() {\n        mTitles.add(\"综合\")\n        mTitles.add(mSearch.data.nav[0].name + if (mSearch.data.nav[0].total == 0) \"\" else \"(\" + (if (mSearch.data.nav[0].total > 99) \"99+\" else mSearch.data.nav[0].total) + \")\")\n        mTitles.add(mSearch.data.nav[1].name + if (mSearch.data.nav[1].total == 0) \"\" else \"(\" + (if (mSearch.data.nav[1].total > 99) \"99+\" else mSearch.data.nav[1].total) + \")\")\n        mTitles.add(mSearch.data.nav[2].name + if (mSearch.data.nav[2].total == 0) \"\" else \"(\" + (if (mSearch.data.nav[2].total > 99) \"99+\" else mSearch.data.nav[2].total) + \")\")\n\n    }\n\n    override fun initFragment() {\n        mFragment.add(ArchiveFragment.newsInstance())\n        mFragment.add(SeasonFragment.newsInstance())\n        mFragment.add(UpFragment.newsInstance())\n        mFragment.add(MovieFragment.newsInstance())\n\n    }\n\n    override fun initViewPager() {\n        super.initViewPager()\n        setCurrentItem(0)\n    }\n\n    override fun loadData() {\n        mPresenter.getSearchData()\n    }\n\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initEvent() {\n        //发射数据 给首页\n        val searchArchiveEvent = Event.SearchArchiveEvent()\n        searchArchiveEvent.itemBean = mSearch.data.items\n        searchArchiveEvent.movieCount = mSearch.data.nav[2].total\n        searchArchiveEvent.seasonCount = mSearch.data.nav[1].total\n        RxBus.post(searchArchiveEvent)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/SeasonFragment.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.search.SeasonAdapter\nimport com.yoyiyi.soleil.bean.search.Season\nimport com.yoyiyi.soleil.mvp.contract.search.SeasonContract\nimport com.yoyiyi.soleil.mvp.presenter.search.SeasonPresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 11:46\n * * 描述:番剧\n */\nclass SeasonFragment : BaseSearchFragment<SeasonPresenter, Season.DataBean.ItemsBean>(), SeasonContract.View {\n    private var mAdapter: SeasonAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_search_season\n\n\n    override fun lazyLoadData() {\n        mPresenter.getSearchSeasonData()\n    }\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = SeasonAdapter(mList)\n        val mLayoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n    override fun showSearchSeason(season: Season) {\n        mList.addAll(season.data.items)\n        finishTask()\n    }\n\n    companion object {\n\n        fun newsInstance(): SeasonFragment {\n\n            return SeasonFragment()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/TotalSearchActivity.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.drawable.AnimationDrawable\nimport android.support.v4.app.Fragment\nimport android.support.v4.app.FragmentManager\nimport android.support.v4.app.FragmentStatePagerAdapter\nimport com.jakewharton.rxbinding2.view.RxView\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.base.BaseInjectActivity\nimport com.yoyiyi.soleil.bean.search.SearchArchive\nimport com.yoyiyi.soleil.constant.Constants\n\nimport com.yoyiyi.soleil.mvp.contract.search.TotalSearchContract\nimport com.yoyiyi.soleil.mvp.presenter.search.TotalSearchPresenter\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.StatusBarFontUtil\nimport com.yoyiyi.soleil.widget.statusbar.StatusBarUtil\nimport kotlinx.android.synthetic.main.activity_total_search.*\nimport kotlinx.android.synthetic.main.layout_search_view.*\nimport java.util.*\nimport java.util.concurrent.TimeUnit\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 10:44\n * * 描述:搜索界面\n */\nclass TotalSearchActivity : BaseInjectActivity<TotalSearchPresenter>(), TotalSearchContract.View {\n\n    private var mKeyword = \"\"\n\n    private val mList = ArrayList<SearchArchive.NavBean>()\n    private var mAnimationDrawable: AnimationDrawable? = null\n    private val mTitles = ArrayList<String>()\n    private val mFragments = ArrayList<Fragment>()\n\n    override fun getLayoutId(): Int = R.layout.activity_total_search\n\n\n    override fun initStatusBar() {\n        //设置状态栏颜色\n        StatusBarUtil.setColorNoTranslucent(this, AppUtils.getColor(R.color.gray_light_30))\n        //设置状态栏字体\n        StatusBarFontUtil.from(this).setLightStatusBar(true).process()\n    }\n\n    override fun initInject() {\n        activityComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun initVariables() {\n        intent?.let {\n            mKeyword = it.getStringExtra(Constants.EXTRA_KEYWORD)\n\n        }\n    }\n\n    override fun initWidget() {\n        initSearchView()\n    }\n\n\n    private fun initSearchView() {\n        et_search.setText(mKeyword)\n        iv_search_back.setOnClickListener { onBackPressed() }\n        RxView.clicks(iv_search)\n                .compose<Any>(bindToLifecycle<Any>())\n                .throttleFirst(5, TimeUnit.SECONDS)\n                .subscribe { o ->\n                    //TODO  发起搜索请求\n\n                }\n    }\n\n    override fun showSearchNav(navBeans: List<SearchArchive.NavBean>) {\n        mList.clear()\n        mList.addAll(navBeans)\n        finishTask()\n    }\n\n    override fun showLoading() {\n        iv_search_load.setImageResource(R.drawable.anim_search_loading)\n        mAnimationDrawable = iv_search_load.drawable as AnimationDrawable\n        visible(iv_search_load)\n        gone(rl_search_content)\n        mAnimationDrawable?.start()\n    }\n\n\n    override fun finishTask() {\n        mTitles.add(\"综合\")\n        mTitles.add(mList[0].name + formatTotal(mList[0].total))\n        mTitles.add(mList[1].name + formatTotal(mList[1].total))\n        mTitles.add(mList[2].name + formatTotal(mList[2].total))\n\n        mFragments.add(ArchiveFragment.newsInstance())\n        mFragments.add(SeasonFragment.newsInstance())\n        mFragments.add(UpFragment.newsInstance())\n        mFragments.add(MovieFragment.newsInstance())\n\n        val navAdapter = SearchNavAdapter(getSupportFragmentManager(), mTitles, mFragments)\n        view_pager.adapter = navAdapter\n        view_pager.offscreenPageLimit = mTitles.size\n        sliding_tabs.setViewPager(view_pager)\n        //设置指示条宽度\n        sliding_tabs.currentTab = 0\n        navAdapter.notifyDataSetChanged()\n        sliding_tabs.notifyDataSetChanged()\n    }\n\n    private fun formatTotal(total: Int): String {\n        if (total == 0)\n            return \"\"\n        else if (total > 99)\n            return \"(99+)\"\n        else\n            return \"($total)\"\n    }\n\n    override fun complete() {\n        gone(iv_search_load)\n        visible(rl_search_content)\n        mAnimationDrawable?.stop()\n    }\n\n    override fun showError(msg: String) {\n        iv_search_load.setImageResource(R.drawable.search_failed)\n        visible(iv_search_load)\n        gone(rl_search_content)\n        mAnimationDrawable?.stop()\n    }\n\n    override fun loadData() {\n        mPresenter.getSearchNavData(mKeyword, 1, 20)\n    }\n\n    private class SearchNavAdapter(fm: FragmentManager, private val titles: List<String>, private val fragments: List<Fragment>) : FragmentStatePagerAdapter(fm) {\n\n        override fun getItem(position: Int): Fragment {\n            return fragments[position]\n        }\n\n        override fun getCount(): Int {\n            return fragments.size\n        }\n\n        override fun getPageTitle(position: Int): CharSequence {\n            return titles[position]\n        }\n    }\n\n    override fun onBackPressed() {\n        if (mAnimationDrawable != null && mAnimationDrawable!!.isRunning) {\n            mAnimationDrawable!!.stop()\n            mAnimationDrawable = null\n        }\n        super.onBackPressed()\n    }\n\n    companion object {\n\n        fun startActivity(context: Context, keyword: String) {\n            val intent = Intent(context, TotalSearchActivity::class.java)\n            intent.putExtra(Constants.EXTRA_KEYWORD, keyword)\n            context.startActivity(intent)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/module/search/UpFragment.kt",
    "content": "package com.yoyiyi.soleil.module.search\n\nimport android.support.v7.widget.LinearLayoutManager\n\nimport com.yoyiyi.soleil.R\nimport com.yoyiyi.soleil.adapter.search.UpAdapter\nimport com.yoyiyi.soleil.bean.search.Up\nimport com.yoyiyi.soleil.mvp.contract.search.UpContract\nimport com.yoyiyi.soleil.mvp.presenter.search.UpPresenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/29 11:46\n * * 描述:up\n */\nclass UpFragment : BaseSearchFragment<UpPresenter, Up.DataBean.ItemsBean>(), UpContract.View {\n    private var mAdapter: UpAdapter? = null\n\n    override fun getLayoutId(): Int = R.layout.fragment_search_up\n\n\n    override fun initInject() {\n        fragmentComponent.inject(this)\n    }\n\n    override fun initPresenter() {\n        mPresenter.attachView(this)\n    }\n\n    override fun lazyLoadData() {\n        mPresenter.getSearchUpData()\n    }\n\n    override fun initRecyclerView() {\n        mAdapter = UpAdapter(mList)\n        val mLayoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL,\n                false)\n        mRecycler?.layoutManager = mLayoutManager\n        mRecycler?.adapter = mAdapter\n    }\n\n    override fun showSearchUp(up: Up) {\n        mList.addAll(up.data.items)\n        finishTask()\n    }\n\n    override fun finishTask() {\n        mAdapter?.notifyDataSetChanged()\n    }\n\n    companion object {\n\n        fun newsInstance(): UpFragment {\n            return UpFragment()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/SplashContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.app.Splash\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:欢迎界面Contract\n */\n\ninterface SplashContract {\n    interface View : BaseContract.BaseView {\n        fun showSplash(splash: Splash)\n\n        fun showCountDown(count: Int)\n\n    }\n\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getSplashData()\n\n        fun setCountDown()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/up/ArchiveContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.up\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:欢迎界面Contract\n */\n\ninterface ArchiveContract {\n    interface View : BaseContract.BaseView {\n\n        fun showArchive(mulUpDetailList: List<MulUpDetail>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getArchiveData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/up/FavouriteContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.up\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:欢迎界面Contract\n */\n\ninterface FavouriteContract {\n    interface View : BaseContract.BaseView {\n\n        fun showFavourite(mulUpDetailList: List<MulUpDetail>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getFavouriteData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/up/SubmitedVideoContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.up\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:欢迎界面Contract\n */\n\ninterface SubmitedVideoContract {\n    interface View : BaseContract.BaseView {\n\n        fun showSubmitedVideo(mulUpDetailList: List<MulUpDetail>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getSubmitedVideoData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/up/UpDetailContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.up\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.user.UpDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:up主详情Contract\n */\n\ninterface UpDetailContract {\n    interface View : BaseContract.BaseView {\n\n        fun showUpDetail(upDetail: UpDetail)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getUpDetailData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/video/CommentContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.video\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.app.video.MulComment\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:欢迎界面Contract\n */\n\ninterface CommentContract {\n    interface View : BaseContract.BaseView {\n        fun showComment(mulComments: List<MulComment>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getCommentData()\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/video/SummaryContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.video\n\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.app.video.MulSummary\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:45\n * * 描述:欢迎界面Contract\n */\n\ninterface SummaryContract {\n    interface View : BaseContract.BaseView {\n        fun showSummary(mulSummaries: List<MulSummary>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getSummaryData()\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/video/VideoDetailContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.video\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.app.video.VideoDetail\nimport com.yoyiyi.soleil.bean.app.video.VideoDetailComment\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 14:30\n * * 描述:\n */\n\ninterface VideoDetailContract {\n    interface View : BaseContract.BaseView {\n        fun showVideoDetail(videoDetail: VideoDetail.DataBean)\n\n        fun showVideoDetailComment(videoDetailComment: VideoDetailComment.DataBean)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n        fun getVideoDetailData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/app/video/VideoPlayerContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.app.video\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.app.video.VideoPlayer\n\nimport master.flame.danmaku.danmaku.parser.BaseDanmakuParser\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/14 14:30\n * * 描述:\n */\n\ninterface VideoPlayerContract {\n    interface View : BaseContract.BaseView {\n\n        fun showVideoPlayer(videoPlayer: VideoPlayer)\n\n        fun showAnimLoading()\n\n        fun showDanmaku(baseDanmakuParser: BaseDanmakuParser)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n        fun getVideoPlayerData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/bangumi/BangumiDetailContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.bangumi\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.bangumi.MulBangumiDetail\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:番剧详情Contract\n */\n\ninterface BangumiDetailContract {\n\n    interface View : BaseContract.BaseView {\n\n\n        fun showMulBangumiDetail(mulBangumiDetails: List<MulBangumiDetail>, title: String)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getBangumiDetailData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/bangumi/BangumiIndexContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.bangumi\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.bangumi.BangumiIndex\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:番剧索引Contract\n */\n\ninterface BangumiIndexContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showBangumiIndex(bangumiIndex: BangumiIndex)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getBangumiIndex()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/bangumi/BangumiScheduleContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.bangumi\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.bangumi.BangumiSchedule\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:全区排行Contract\n */\n\ninterface BangumiScheduleContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showBangumiSchedule(bangumiScheduleList: List<BangumiSchedule>)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getBangumiSchedule()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/discover/ActivityCenterContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.discover\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.discover.ActivityCenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:话题中心Contract\n */\n\ninterface ActivityCenterContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showActivityCenter(listBeanList: List<ActivityCenter.ListBean>, total: Int)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getActivityCenterData(page: Int, pageSize: Int)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/discover/GameCenterContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.discover\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.discover.GameCenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:游戏中心Contract\n */\n\ninterface GameCenterContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showGameCenter(gameCenter: GameCenter)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getGameCenterData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/discover/InterestContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.discover\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.discover.Community\nimport com.yoyiyi.soleil.bean.discover.InterestAd\nimport com.yoyiyi.soleil.bean.discover.InterestCategrory\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:话题中心Contract\n */\n\ninterface InterestContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showInterestAd(interestAdList: InterestAd)\n\n        fun showCommunity(community: Community)\n\n        fun showInterestCategrory(interestCategroryList: List<InterestCategrory.ResultBean>)\n\n        fun onComplete()\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getInterestData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/discover/TopicCenterContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.discover\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.discover.TopicCenter\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:话题中心Contract\n */\n\ninterface TopicCenterContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showTopicCenter(topicCenterList: List<TopicCenter.ListBean>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getTopicCenterData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/home/ChaseBangumiContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.home\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:02\n * * 描述:\n */\ninterface ChaseBangumiContract {\n    interface View : BaseContract.BaseView {\n        fun showChaseBangumi(chaseBangumi: ChaseBangumi)\n\n        fun showRecommendBangumi(recommendBangumi: RecommendBangumi)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getChaseBangumiData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/home/DiscoverContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.home\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.discover.HotSearchTag\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface DiscoverContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showHotSearchTag(recommend: HotSearchTag)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getHotSearchTagData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/home/DynamicContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.home\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.dynamic.MulDynamic\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:02\n * * 描述:分区\n */\ninterface DynamicContract {\n    interface View : BaseContract.BaseView {\n        fun showMulDynamic(mulDynamic: List<MulDynamic>)\n\n\n    }\n\n    interface Presenter<T> : BaseContract.BasePresenter<T> {\n        fun getMulDynamicData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/home/LiveContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.home\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.live.MulLive\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 22:02\n * 描述:\n */\ninterface LiveContract {\n    interface View : BaseContract.BaseView {\n\n        fun showMulLive(mulLives: List<MulLive>)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getLiveData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/home/RecommendContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.home\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.recommend.Recommend\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:02\n * * 描述:\n */\ninterface RecommendContract {\n    interface View : BaseContract.BaseView {\n        fun showRecommend(recommend: List<Recommend>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n        fun getRecommendData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/home/RegionContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.home\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.bean.region.RegionTagType\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 22:02\n * 描述:分区\n */\ninterface RegionContract {\n    interface View : BaseContract.BaseView {\n        fun showRegion(regions: List<Region>)\n\n        fun showRegionType(regionTypes: List<RegionTagType>)\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n        fun getRegionData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/recommend/AllStationRankContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.recommend\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.recommend.AllStationRank\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:全区排行Contract\n */\n\ninterface AllStationRankContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showAllStationRank(regionRank: List<AllStationRank.RankBean.ListBean>)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getAllStationRankData(type: String)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/region/AllRegionRankContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.region\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.region.AllRegionRank\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:全区排行Contract\n */\n\ninterface AllRegionRankContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showAllRegionRank(regionRank: List<AllRegionRank.RankBean.ListBean>)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getAllRegionRankData(type: String)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/region/AllRegionRankPositionContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.region\n\nimport com.yoyiyi.soleil.base.BaseContract\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface AllRegionRankPositionContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showEventPosition(postion: Int)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getEventPosition()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/region/RegionTypeContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.region\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.region.RegionType\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface RegionTypeContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showRegionType(regionType: RegionType)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getRegionTypeData(rid: Int)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/region/RegionTypeRecommendContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.region\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface RegionTypeRecommendContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showRegionRecommend(regionRecommend: RegionRecommend)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getRegionRecommendData(tid: Int)\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/region/live/LiveContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.region.live\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.live.LiveEntrance\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface LiveContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showLiveEntrance(liveEntrances: List<LiveEntrance>)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getLiveEntranceData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/ArchiveContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.bean.search.MulSearchArchive\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface ArchiveContract {\n\n    interface View : BaseSearchContract.View {\n\n        fun showSearchArchive(mulSearchArchiveList: List<MulSearchArchive>)\n\n    }\n\n    interface Presenter<in T> : BaseSearchContract.Presenter<T> {\n\n        // void getSearchArchiveData(String keyword, int page, int pagesize);\n\n        fun getSearchArchiveData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/BaseSearchContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.base.BaseContract\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/19 9:19\n * * 描述:基础的查找\n */\n\ninterface BaseSearchContract {\n    interface View : BaseContract.BaseView {\n\n        fun showLoading()\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T>\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/MovieContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.bean.search.Movie\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface MovieContract {\n\n    interface View : BaseSearchContract.View {\n\n        fun showSearchMovie(movie: Movie)\n\n    }\n\n    interface Presenter<in T> : BaseSearchContract.Presenter<T> {\n\n        // void getSearchArchiveData(String keyword, int page, int pagesize);\n\n        fun getSearchMovieData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/SearchContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.search.Search\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/18 13:57\n * * 描述:搜索\n */\n\ninterface SearchContract {\n    interface View : BaseContract.BaseView {\n\n        fun showSearch(search: Search)\n\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getSearchData()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/SeasonContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.bean.search.Season\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface SeasonContract {\n\n    interface View : BaseSearchContract.View {\n\n        fun showSearchSeason(season: Season)\n\n    }\n\n    interface Presenter<in T> : BaseSearchContract.Presenter<T> {\n\n        // void getSearchArchiveData(String keyword, int page, int pagesize);\n\n        fun getSearchSeasonData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/TotalSearchContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.base.BaseContract\nimport com.yoyiyi.soleil.bean.search.SearchArchive\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface TotalSearchContract {\n\n    interface View : BaseContract.BaseView {\n\n        fun showSearchNav(navBeans: List<SearchArchive.NavBean>)\n\n        fun showLoading()\n    }\n\n    interface Presenter<in T> : BaseContract.BasePresenter<T> {\n\n        fun getSearchNavData(keyword: String, page: Int, pagesize: Int)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/contract/search/UpContract.kt",
    "content": "package com.yoyiyi.soleil.mvp.contract.search\n\nimport com.yoyiyi.soleil.bean.search.Up\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/12 10:09\n * * 描述:发现Contract\n */\n\ninterface UpContract {\n\n    interface View : BaseSearchContract.View {\n\n        fun showSearchUp(up: Up)\n\n    }\n\n    interface Presenter<in T> : BaseSearchContract.Presenter<T> {\n\n\n        fun getSearchUpData()\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/NothingPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app\n\nimport com.yoyiyi.soleil.base.RxPresenter\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/8/19 15:53\n *  描述:\n */\nclass NothingPresenter @Inject constructor() : RxPresenter<Nothing>()\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/SplashPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.app.Splash\nimport com.yoyiyi.soleil.mvp.contract.app.SplashContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport io.reactivex.Flowable\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/7/14 11:14\n * 描述:欢迎界面Presenter\n */\nclass SplashPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<SplashContract.View>(), SplashContract.Presenter<SplashContract.View> {\n\n    override fun setCountDown() {\n        val count = 5L\n        addSubscribe(Flowable.interval(0, 1, TimeUnit.SECONDS)\n                .map { count - it }\n                .take(count + 1)\n                .compose(rxSchedulerHelper())\n                .subscribe { mView?.showCountDown(it.toInt()) })\n    }\n\n    override fun getSplashData() {\n        addSubscribe(retrofitHelper.getSplash()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<Splash>(mView) {\n                    override fun onSuccess(t: Splash) {\n                        if (t.code == 0) mView?.showSplash(t)\n                    }\n\n                    override fun onFailure(code: Int, message: String) {\n                        mView?.showError(message)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/up/ArchivePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.up\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.app.up.ArchiveContract\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 12:37\n * * 描述:\n */\n\nclass ArchivePresenter @Inject constructor() : RxPresenter<ArchiveContract.View>(), ArchiveContract.Presenter<ArchiveContract.View> {\n\n    override fun getArchiveData() {\n        val subscriber = RxBus.toFlowable(Event.UpDetailArchiveEvent::class.java)\n                .map{\n                    val archivList = it.archive?.item\n                    val mulUpDetailList = mutableListOf<MulUpDetail>()\n\n                    //正在直播\n                    mulUpDetailList.add(MulUpDetail(itemTypez = MulUpDetail.TYPE_ARCHIVE_LIVE,\n                            live = it.live,\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE)\n                    )\n\n                    mulUpDetailList.add(MulUpDetail(\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            state = 1,\n                            title = \"全部投稿\",\n                            count = it.archive?.count ?: 0,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_HEAD))//全部投稿\n\n                    val position = intArrayOf(0)\n                    //全部投稿内容\n                    archivList?.take(2)\n                            ?.forEach {\n                                mulUpDetailList.add(MulUpDetail(position = position[0],\n                                        itemTypez = MulUpDetail.TYPE_ARCHIVE_ALL_SUBMIT_VIDEO,\n                                        spanSize = MulUpDetail.ONE_SPAN_SIZE,\n                                        archiveBean = it))\n                                position[0]++\n                            }\n\n                    mulUpDetailList.add(MulUpDetail(\n                            title = \"最近投硬币的视频\",\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_HEAD,\n                            state = it.setting?.coins_video ?: 0)\n\n                    )//最近硬币\n\n                    mulUpDetailList.add(MulUpDetail(\n                            title = \"TA的收藏夹\",\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_HEAD,\n                            state = it.setting?.fav_video ?: 0)\n                    )//收藏夹\n\n                    mulUpDetailList.add(MulUpDetail(\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_FAVOURITE,\n                            favourite = it.favourite))\n\n\n                    mulUpDetailList.add(MulUpDetail(\n                            title = \"TA的追番\",\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_HEAD,\n                            state = it.setting?.bangumi ?: 0))//追番\n\n\n                    mulUpDetailList.add(MulUpDetail(\n                            title = \"TA的圈子\",\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_HEAD,\n                            state = it.setting?.groups ?: 0))//圈子\n\n\n                    mulUpDetailList.add(MulUpDetail(\n                            title = \"TA玩的游戏\",\n                            spanSize = MulUpDetail.TWO_SPAN_SIZE,\n                            itemTypez = MulUpDetail.TYPE_ARCHIVE_HEAD,\n                            state = it.setting?.played_game ?: 0))//游戏\n\n\n                    mulUpDetailList\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulUpDetail>>(mView) {\n                    override fun onSuccess(t: List<MulUpDetail>) {\n                        mView?.showArchive(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/up/FavouritePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.up\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.app.up.FavouriteContract\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 12:37\n * * 描述:\n */\n\nclass FavouritePresenter @Inject\nconstructor() : RxPresenter<FavouriteContract.View>(), FavouriteContract.Presenter<FavouriteContract.View> {\n\n    override fun getFavouriteData() {\n        val subscriber = RxBus.toFlowable(Event.UpDetailFavourteEvent::class.java)\n                .map {\n                    val favouriteList = it.favouriteList\n                    val mulUpDetailList = mutableListOf<MulUpDetail>()\n                    favouriteList?.forEach {\n                        mulUpDetailList.add(MulUpDetail(itemTypez = MulUpDetail.TYPE_FAVOURITE_ITEM,\n                                favouriteBean = it))\n                    }\n                    mulUpDetailList\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulUpDetail>>(mView) {\n                    override fun onSuccess(t: List<MulUpDetail>) {\n                        mView?.showFavourite(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/up/SubmitedVideoPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.up\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.user.MulUpDetail\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.app.up.SubmitedVideoContract\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/17 12:37\n * * 描述:\n */\n\nclass SubmitedVideoPresenter @Inject\nconstructor() : RxPresenter<SubmitedVideoContract.View>(), SubmitedVideoContract.Presenter<SubmitedVideoContract.View> {\n\n    override fun getSubmitedVideoData() {\n        val subscriber = RxBus.toFlowable(Event.UpDetailSubmitedVideoEvent::class.java)\n                .map{\n                    val archivList = it.archivList\n                    val mulUpDetailList = mutableListOf<MulUpDetail>()\n                    mulUpDetailList += MulUpDetail(itemTypez = MulUpDetail.TYPE_SUBMITED_VIDEO_ELEC)\n                    archivList?.forEach {\n                        mulUpDetailList.add(MulUpDetail(itemTypez = MulUpDetail.TYPE_SUBMITED_VIDEO_ITEM, archiveBean = it))\n                    }\n                    mulUpDetailList\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulUpDetail>>(mView) {\n                    override fun onSuccess(t: List<MulUpDetail>) {\n                        mView?.showSubmitedVideo(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/up/UpDetailPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.up\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.user.UpDetail\nimport com.yoyiyi.soleil.mvp.contract.app.up.UpDetailContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:44\n * * 描述:up详情Presenter\n */\n\nclass UpDetailPresenter @Inject constructor(private val mRetrofitHelper: RetrofitHelper) : RxPresenter<UpDetailContract.View>(), UpDetailContract.Presenter<UpDetailContract.View> {\n\n    override fun getUpDetailData() {\n        val subscriber = mRetrofitHelper.getUpDetail()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<UpDetail>(mView) {\n                    override fun onSuccess(t: UpDetail) {\n                        mView?.showUpDetail(t)\n                    }\n                })\n        addSubscribe(subscriber)\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/video/CommentPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.video\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.app.video.MulComment\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.app.video.CommentContract\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:44\n * * 描述:视频详情Presenter\n */\n\nclass CommentPresenter @Inject constructor() : RxPresenter<CommentContract.View>(), CommentContract.Presenter<CommentContract.View> {\n\n    override fun getCommentData() {\n        addSubscribe(RxBus.toFlowable(Event.VideoDetailCommentEvent::class.java)\n                .map {\n                    val videoDetailComment = it.videoDetailComment\n                    val mulComments = mutableListOf<MulComment>()\n                    videoDetailComment?.hots?.forEach {\n                        mulComments.add(MulComment(itemTypez = MulComment.TYPE_COMMENT_HOT_ITEM, hotsBean = it))\n                    }\n                    mulComments.add(MulComment(itemTypez = MulComment.TYPE_COMMENT_MORE))\n\n                    videoDetailComment?.replies?.forEach {\n                        mulComments.add(MulComment(\n                                itemTypez = MulComment.TYPE_COMMENT_NOMAL_ITEM,\n                                repliesBean = it))\n                    }\n                    mulComments\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulComment>>(mView) {\n                    override fun onSuccess(t: List<MulComment>) {\n                        mView!!.showComment(t)\n                    }\n                }))\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/video/SummaryPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.video\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.app.video.MulSummary\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.app.video.SummaryContract\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:44\n * * 描述:启动界面Presenter\n */\n\nclass SummaryPresenter @Inject\nconstructor() : RxPresenter<SummaryContract.View>(), SummaryContract.Presenter<SummaryContract.View> {\n\n    override fun getSummaryData() {\n        addSubscribe(RxBus.toFlowable(Event.VideoDetailEvent::class.java)\n                .map({ videoDetailEvent ->\n                    val videoDetail = videoDetailEvent.videoDetail\n\n                    val mulSummaries = mutableListOf<MulSummary>()\n                    mulSummaries += MulSummary(\n                            itemTypez = MulSummary.TYPE_DES,\n                            title = videoDetail?.title,\n                            desc = videoDetail?.desc,\n                            state = videoDetail?.stat)\n                    mulSummaries += MulSummary(itemTypez = MulSummary.TYPE_OWNER,\n                            owner = videoDetail?.owner,\n                            ctime = videoDetail?.ctime?.toLong() ?: 0,\n                            tags = videoDetail?.tag)\n\n                    mulSummaries += MulSummary(itemTypez = MulSummary.TYPE_RELATE_HEAD)\n\n                    videoDetail?.relates?.forEach {\n                        mulSummaries += MulSummary(itemTypez = MulSummary.TYPE_RELATE, relates = it)\n                    }\n                    mulSummaries\n                })\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulSummary>>(mView) {\n                    override fun onSuccess(t: List<MulSummary>) {\n                        mView?.showSummary(t)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/video/VideoDetailPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.video\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.app.video.VideoDetailComment\nimport com.yoyiyi.soleil.mvp.contract.app.video.VideoDetailContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:44\n * * 描述:视频详情Presenter\n */\n\nclass VideoDetailPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<VideoDetailContract.View>(), VideoDetailContract.Presenter<VideoDetailContract.View> {\n\n    override fun getVideoDetailData() {\n        /* BaseObjectSubscriber<VideoDetailComment> subscriber = mRetrofitHelper.getVideoDetail()\n                .flatMap(videoDetail -> {\n                    mView.showVideoDetail(videoDetail);\n                    return mRetrofitHelper.getVideoDetailComment();\n                })\n                .compose(RxUtils.rxSchedulerHelper())\n                .subscribeWith(new BaseObjectSubscriber<VideoDetailComment>(mView) {\n                    @Override\n                    public void onSuccess(VideoDetailComment videoDetailComment) {\n                        mView.showVideoDetailComment(videoDetailComment);\n                    }\n                });*/\n        addSubscribe(retrofitHelper.getVideoDetail()\n                .flatMap {\n                    mView?.showVideoDetail(it.data)\n                    retrofitHelper.getVideoDetailComment()\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<VideoDetailComment>(mView) {\n                    override fun onSuccess(t: VideoDetailComment) {\n                        mView?.showVideoDetailComment(t.data)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/app/video/VideoPlayerPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.app.video\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.media.danmuku.BiliDanmukuDownloadUtil\nimport com.yoyiyi.soleil.mvp.contract.app.video.VideoPlayerContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.utils.AppUtils\nimport io.reactivex.android.schedulers.AndroidSchedulers\nimport io.reactivex.schedulers.Schedulers\nimport master.flame.danmaku.danmaku.parser.BaseDanmakuParser\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 9:44\n * * 描述:启动界面Presenter\n */\n\nclass VideoPlayerPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<VideoPlayerContract.View>(), VideoPlayerContract.Presenter<VideoPlayerContract.View> {\n\n\n    override fun getVideoPlayerData() {\n        addSubscribe(retrofitHelper.getVideoPlayer()\n                .doOnSubscribe({ mView?.showAnimLoading() })\n                //.subscribeOn(Schedulers.io())\n                .flatMap({ videoPlayer ->\n                    AppUtils.runOnUI { mView?.showVideoPlayer(videoPlayer) }\n                    val url = \"http://comment.bilibili.com/2143345.xml\"\n                    BiliDanmukuDownloadUtil.downloadXML(url)//下载弹幕\n                })\n                .subscribeOn(Schedulers.io())\n                .observeOn(AndroidSchedulers.mainThread())\n                .subscribeWith(object : BaseSubscriber<BaseDanmakuParser>(mView) {\n                    override fun onSuccess(baseDanmakuParser: BaseDanmakuParser) {\n                        mView?.showDanmaku(baseDanmakuParser)\n                    }\n\n                    override fun onFailure(code: Int, message: String) {\n                        mView?.showError(message)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/bangumi/BangumiDetailPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.bangumi\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.bangumi.MulBangumiDetail\nimport com.yoyiyi.soleil.mvp.contract.bangumi.BangumiDetailContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.handleResult\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport java.util.*\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:番剧详情presenter\n */\n\nclass BangumiDetailPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<BangumiDetailContract.View>(), BangumiDetailContract.Presenter<BangumiDetailContract.View> {\n\n    override fun getBangumiDetailData() {\n        val mulBangumiDetails = mutableListOf<MulBangumiDetail>()\n        val title = StringBuilder()\n        val subscriber = retrofitHelper.getBangumiDetail()\n                .compose(handleResult())\n                .flatMap {\n                    title.append(it.title)\n                    val episodes = it.episodes\n                    Collections.reverse(episodes)//反转\n\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_HEAD,\n                            playCount = it.play_count,\n                            cover = it.cover,\n                            favorites = it.favorites,\n                            isFinish = it.is_finish)\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_SEASON,\n                            seasonsTitle = it.season_title,\n                            seasonsBeanList = it.seasons)//分季节\n\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_EPISODE_HEAD,\n                            totalCount = it.total_count,\n                            isFinish = it.is_finish)//分集头部\n\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_EPISODE_ITEM, //分集\n                            episodesBeans = episodes)\n\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_CONTRACTED,\n                            listBeanList = it.rank.list,\n                            totalBpCount = it.rank.total_bp_count,\n                            weekBpCount = it.rank.week_bp_count) //承包\n\n                    mulBangumiDetails += MulBangumiDetail(\n                            itemTypez = MulBangumiDetail.TYPE_DES,\n                            evaluate = it.evaluate,\n                            tagsBeanList = it.tags)//简介v\n\n                    retrofitHelper.getBangumiDetailRecommend()\n                }\n                .compose(handleResult())\n                .flatMap {\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_RECOMMEND_HEAD)\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_RECOMMEND_ITEM,\n                            bangumiRecommendList = it.list)//推荐\n                    retrofitHelper.getBangumiDetailComment()\n                }\n                .map {\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_COMMENT_HEAD,\n                            num = it.data.page.num,\n                            account = it.data.page.acount)\n\n                    it.data.hots.forEach { hotsBean ->\n                        mulBangumiDetails += MulBangumiDetail(//热门评论\n                                itemTypez = MulBangumiDetail.TYPE_COMMENT_HOT_ITEM,\n                                hotsBean = hotsBean)\n                    }\n                    mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_COMMENT_MORE)\n                    it.data.replies.forEach {\n                        mulBangumiDetails += MulBangumiDetail(itemTypez = MulBangumiDetail.TYPE_COMMENT_NOMAL_ITEM, repliesBean = it)//普通评论\n                    }\n                    mulBangumiDetails\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulBangumiDetail>>(mView) {\n                    override fun onSuccess(t: List<MulBangumiDetail>) {\n                        mView?.showMulBangumiDetail(t, title.toString())\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/bangumi/BangumiIndexPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.bangumi\n\n\nimport com.yoyiyi.soleil.base.BaseObjectSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.bangumi.BangumiIndex\nimport com.yoyiyi.soleil.mvp.contract.bangumi.BangumiIndexContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:番剧索引presenter\n */\n\nclass BangumiIndexPresenter @Inject\nconstructor(private val mRetrofitHelper: RetrofitHelper) : RxPresenter<BangumiIndexContract.View>(), BangumiIndexContract.Presenter<BangumiIndexContract.View> {\n\n    override fun getBangumiIndex() {\n        val subscriber = mRetrofitHelper.getBangumiIndex()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseObjectSubscriber<BangumiIndex>(mView) {\n                    override fun onSuccess(t: BangumiIndex) {\n                        mView?.showBangumiIndex(t)\n                    }\n                })\n        addSubscribe(subscriber)\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/bangumi/BangumiSchedulePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.bangumi\n\n\nimport com.yoyiyi.soleil.base.BaseListSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.bangumi.BangumiSchedule\nimport com.yoyiyi.soleil.mvp.contract.bangumi.BangumiScheduleContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:番剧时间表presenter\n */\n\nclass BangumiSchedulePresenter @Inject constructor(private val mRetrofitHelper: RetrofitHelper) : RxPresenter<BangumiScheduleContract.View>(), BangumiScheduleContract.Presenter<BangumiScheduleContract.View> {\n\n    override fun getBangumiSchedule() {\n        val subscriber = mRetrofitHelper.getBangumiSchedule()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseListSubscriber<BangumiSchedule>(mView) {\n                    override fun onSuccess(t: List<BangumiSchedule>) {\n                        mView?.showBangumiSchedule(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/discover/ActivityCenterPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.discover\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.discover.ActivityCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.ActivityCenterContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/17 18:00\n * 描述:活动中心resenter\n */\n\nclass ActivityCenterPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<ActivityCenterContract.View>(),\n        ActivityCenterContract.Presenter<ActivityCenterContract.View> {\n\n    override fun getActivityCenterData(page: Int, pageSize: Int) {\n        addSubscribe(retrofitHelper.getActivityCenter(page, pageSize)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<ActivityCenter>(mView) {\n                    override fun onSuccess(t: ActivityCenter) {\n                        mView?.showActivityCenter(t.list, t.total)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/discover/GameCenterPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.discover\n\n\nimport com.google.gson.Gson\nimport com.google.gson.JsonParser\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.discover.GameCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.GameCenterContract\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport com.yoyiyi.soleil.utils.JsonUtils\nimport io.reactivex.Flowable\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:活动中心resenter\n */\n\nclass GameCenterPresenter @Inject constructor() : RxPresenter<GameCenterContract.View>(), GameCenterContract.Presenter<GameCenterContract.View> {\n\n    override fun getGameCenterData() {\n        //接口需要登录账号\n        addSubscribe(Flowable.just(JsonUtils.readJson(\"game_center.json\"))\n                .map {\n                    val gson = Gson()\n                    val `object` = JsonParser().parse(it).asJsonObject\n                    val jsonObject = `object`.getAsJsonObject(\"data\")\n                    val gameCenter = gson.fromJson(jsonObject, GameCenter::class.java)\n                    gameCenter\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<GameCenter>(mView) {\n                    override fun onSuccess(t: GameCenter) {\n                        mView?.showGameCenter(t)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/discover/InterestPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.discover\n\n\nimport com.yoyiyi.soleil.base.BaseObjectSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.discover.Community\nimport com.yoyiyi.soleil.mvp.contract.discover.InterestContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.handleResult\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:活动中心resenter\n */\n\nclass InterestPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<InterestContract.View>(), InterestContract.Presenter<InterestContract.View> {\n    override fun getInterestData() {\n        addSubscribe(retrofitHelper.getInterestAd()\n                .compose(handleResult())\n                .flatMap { interestAd ->\n                    mView?.showInterestAd(interestAd)\n                    retrofitHelper.getInterestCategrory()\n                }\n                .compose(handleResult())\n                .flatMap { interestCategrory ->\n                    mView?.showInterestCategrory(interestCategrory.result)\n                    retrofitHelper.getCommunity()\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseObjectSubscriber<Community>(mView) {\n                    override fun onSuccess(t: Community) {\n                        mView?.onComplete()\n                        mView?.showCommunity(t)\n                    }\n                }))\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/discover/TopicCenterPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.discover\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.discover.TopicCenter\nimport com.yoyiyi.soleil.mvp.contract.discover.TopicCenterContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:直播Presenter\n */\n\nclass TopicCenterPresenter @Inject\nconstructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<TopicCenterContract.View>(), TopicCenterContract.Presenter<TopicCenterContract.View> {\n\n    override fun getTopicCenterData() {\n        addSubscribe(retrofitHelper.getTopicCenter()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<TopicCenter>(mView) {\n                    override fun onSuccess(t: TopicCenter) {\n                        mView?.showTopicCenter(t.list)\n                    }\n                }))\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/home/ChaseBangumiPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.home\n\nimport com.google.gson.Gson\nimport com.google.gson.JsonParser\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.mvp.contract.home.ChaseBangumiContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.utils.JsonUtils\nimport io.reactivex.Flowable\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:04\n * * 描述:首页直播Presenter\n */\nclass ChaseBangumiPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<ChaseBangumiContract.View>(), ChaseBangumiContract.Presenter<ChaseBangumiContract.View> {\n\n    override fun getChaseBangumiData() {\n        //需要测试账号登录\n        /*BaseObjectSubscriber<RecommendBangumi> subscriber = mRetrofitHelper.getChaseBangumi()\n                .compose(RxUtils.handleResult())\n                .flatMap(chaseBangumi -> {\n                    mView.showChaseBangumi(chaseBangumi);\n                    return mRetrofitHelper.getRecommendBangumi();\n                })\n                .compose(RxUtils.rxSchedulerHelper())\n                .subscribeWith(new BaseObjectSubscriber<RecommendBangumi>(mView) {\n                    @Override\n                    public void onSuccess(RecommendBangumi recommendBangumi) {\n                        mView.showRecommendBangumi(recommendBangumi);\n                    }\n                });\n        addSubscribe(subscriber);*/\n        //本地json\n        addSubscribe(Flowable.just(JsonUtils.readJson(\"user_chase.json\"))\n                .flatMap {\n                    val gson = Gson()\n                    val `object` = JsonParser().parse(it).asJsonObject\n                    val result = `object`.getAsJsonObject(\"result\")\n                    val chaseBangumi = gson.fromJson(result, ChaseBangumi::class.java)\n                    mView?.showChaseBangumi(chaseBangumi)\n                    Flowable.just(JsonUtils.readJson(\"recommend_chase.json\"))\n                }\n                .map {\n                    val gson = Gson()\n                    val `object` = JsonParser().parse(it).asJsonObject\n                    val result = `object`.getAsJsonObject(\"result\")\n                    val recommendBangumi = gson.fromJson(result, RecommendBangumi::class.java)\n                    recommendBangumi\n                }\n                .subscribeWith(object : BaseSubscriber<RecommendBangumi>(mView) {\n                    override fun onSuccess(t: RecommendBangumi) {\n                        mView?.showRecommendBangumi(t)\n                    }\n                }))\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/home/DiscoverPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.home\n\n\nimport com.yoyiyi.soleil.base.BaseObjectSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.discover.HotSearchTag\nimport com.yoyiyi.soleil.mvp.contract.home.DiscoverContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:直播Presenter\n */\n\nclass DiscoverPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<DiscoverContract.View>(), DiscoverContract.Presenter<DiscoverContract.View> {\n\n    override fun getHotSearchTagData() {\n        /* BaseSubscriber<HotSearchTag> subscriber = mRetrofitHelper.getHotSearchTag()\n                .compose(RxUtils.rxSchedulerHelper())\n                .subscribeWith(new BaseObjectSubscriber<HotSearchTag>(mView) {\n                    @Override\n                    public void onNext(HotSearchTag hotSearchTag) {\n                        super.onNext(hotSearchTag);\n                        mView.showHotSearchTag(hotSearchTag);\n                    }\n                });*/\n        addSubscribe(retrofitHelper.getHotSearchTag()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseObjectSubscriber<HotSearchTag>(mView) {\n                    override fun onSuccess(hotSearchTag: HotSearchTag) {\n                        mView?.showHotSearchTag(hotSearchTag)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/home/DynamicPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.home\n\n\nimport com.google.gson.Gson\nimport com.google.gson.JsonParser\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.dynamic.Dynamic\nimport com.yoyiyi.soleil.bean.dynamic.MulDynamic\nimport com.yoyiyi.soleil.mvp.contract.home.DynamicContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport com.yoyiyi.soleil.utils.JsonUtils\nimport io.reactivex.Flowable\nimport java.util.*\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:直播Presenter\n */\n\nclass DynamicPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<DynamicContract.View>(), DynamicContract.Presenter<DynamicContract.View> {\n\n    override fun getMulDynamicData() {\n        addSubscribe(Flowable.just(JsonUtils.readJson(\"dynamic.json\"))\n                .map {\n                    val gson = Gson()\n                    val `object` = JsonParser().parse(it).asJsonObject\n                    val item = `object`.getAsJsonObject(\"data\").getAsJsonArray(\"item\")\n                    val itemBeans = item.mapTo(ArrayList<Dynamic.ItemBean>()) { gson.fromJson(it, Dynamic.ItemBean::class.java) }\n                    itemBeans\n                }\n                .map {\n                    val mulDynamics = mutableListOf<MulDynamic>()\n                    it.forEach { itemBean ->\n                        val dynamic = MulDynamic(group = itemBean,\n                                itemTypez = MulDynamic.TYPE_LV0,\n                                lv = MulDynamic.TYPE_LV0,\n                                flag = getRecent(itemBean).isNotEmpty())\n                        dynamic.child = getRecent(itemBean)\n                        mulDynamics += dynamic\n                    }\n                    mulDynamics\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulDynamic>>(mView) {\n                    override fun onSuccess(t: List<MulDynamic>) {\n                        mView?.showMulDynamic(t)\n                    }\n                }))\n\n    }\n\n    private fun getRecent(itemBean: Dynamic.ItemBean): List<MulDynamic> {\n        val recent = itemBean.recent\n        val list = ArrayList<MulDynamic>()\n        recent?.forEach {\n            val dynamic = MulDynamic(itemTypez = MulDynamic.TYPE_LV1,\n                    recent = it,\n                    lv = MulDynamic.TYPE_LV1)\n            list += dynamic\n        }\n        return list\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/home/LivePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.home\n\n\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.live.LivePartition\nimport com.yoyiyi.soleil.bean.live.MulLive\n\nimport com.yoyiyi.soleil.mvp.contract.home.LiveContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.handleResult\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/5/23 22:04\n * 描述:首页直播Presenter\n */\nclass LivePresenter @Inject constructor(val retrofitHelper: RetrofitHelper) : RxPresenter<LiveContract.View>(), LiveContract.Presenter<LiveContract.View> {\n\n    override fun getLiveData() {\n        var livePartition: LivePartition? = null\n        val mulLives: MutableList<MulLive> = mutableListOf()\n        addSubscribe(retrofitHelper.getLivePartition()\n                .compose(handleResult())\n                .flatMap({\n                    livePartition = it\n                    retrofitHelper.getLiveRecommend()\n                })\n                .compose(handleResult())\n                .map {\n                    with(it.recommend_data) {\n                        val allot = lives.size.div(2)\n                        mulLives += MulLive(itemTypez = MulLive.TYPE_BANNER, bannerBeanList = livePartition?.banner)//轮播条\n                        mulLives += MulLive(itemTypez = MulLive.TYPE_ENTRANCE)//入口\n                        if (banner_data == null) {\n                            mulLives += MulLive(itemTypez = MulLive.TYPR_HEADER,\n                                    title = partition.name,\n                                    url = partition.sub_icon.src,\n                                    count = partition.count)\n                            mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_ITEM,\n                                    recommendLives = lives)\n                            mulLives += MulLive(hasMore = false, itemTypez = MulLive.TYPE_FOOTER)\n                        } else {\n                            if (banner_data.size == 1) {\n                                mulLives += MulLive(itemTypez = MulLive.TYPR_HEADER,\n                                        title = partition.name,\n                                        url = partition.sub_icon.src,\n                                        count = partition.count)\n\n                                val part1 = lives.subList(0, allot) //主体\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_ITEM,\n                                        recommendLives = part1)\n\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_BANNER,\n                                        bannerData = (banner_data)[0])\n\n\n                                val part2 = lives.subList(allot, (lives.size))\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_ITEM,\n                                        recommendLives = part2)\n\n\n                                mulLives += MulLive(hasMore = false, itemTypez = MulLive.TYPE_FOOTER)\n\n                            } else {\n\n                                mulLives += MulLive(itemTypez = MulLive.Companion.TYPR_HEADER,\n                                        title = partition.name,\n                                        url = partition.sub_icon.src,\n                                        count = partition.count)\n\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_BANNER,\n                                        bannerData = (banner_data)[0])\n\n                                val part1 = lives.subList(0, allot) //主体\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_ITEM,\n                                        recommendLives = part1)\n\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_BANNER,\n                                        bannerData = (banner_data)[1])\n\n                                val part2 = lives.subList(allot, (lives.size))\n                                mulLives += MulLive(itemTypez = MulLive.TYPE_RECOMMEND_ITEM,\n                                        recommendLives = part2)\n\n                                mulLives += MulLive(hasMore = false, itemTypez = MulLive.TYPE_FOOTER)\n\n                            }\n                        }\n                    }\n\n                    livePartition?.partitions?.let {\n                        for ((index, element) in it.withIndex()) {\n                            mulLives += MulLive(itemTypez = MulLive.TYPR_HEADER,\n                                    title = element.partition.name,\n                                    url = element.partition.sub_icon.src,\n                                    count = element.partition.count)\n                            val part = element.lives.subList(0, 4)\n                            mulLives += MulLive(itemTypez = MulLive.TYPE_PARTY_ITEM,\n                                    partityLives = part)\n                            if (index == it.size.minus(1)) {\n                                mulLives += MulLive(hasMore = true, itemTypez = MulLive.TYPE_FOOTER)\n                            } else {\n                                mulLives += MulLive(hasMore = false, itemTypez = MulLive.TYPE_FOOTER)\n                            }\n                        }\n                    }\n                    mulLives\n                }\n                .compose(rxSchedulerHelper())\n                .subscribe {\n                    mView?.complete()\n                    mView?.showMulLive(it)\n                }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/home/RecommendPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.home\n\nimport com.google.gson.Gson\nimport com.google.gson.JsonParser\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.recommend.Recommend\nimport com.yoyiyi.soleil.mvp.contract.home.RecommendContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport com.yoyiyi.soleil.utils.JsonUtils\nimport io.reactivex.Flowable\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:04\n * * 描述:首页直播Presenter\n */\nclass RecommendPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<RecommendContract.View>(), RecommendContract.Presenter<RecommendContract.View> {\n\n    override fun getRecommendData() {\n        //需登录\n        /*BaseListSubscriber<Recommend> subscriber = mRetrofitHelper.getRecommend()\n                .compose(RxUtils.rxSchedulerHelper())\n                .subscribeWith(new BaseListSubscriber<Recommend>(mView) {\n                    @Override\n                    public void onSuccess(List<Recommend> recommends) {\n                        mView.showRecommend(recommends);\n                    }\n                });\n        addSubscribe(subscriber);*/\n        addSubscribe(Flowable.just(JsonUtils.readJson(\"recommend.json\"))\n                .map<List<Recommend>> {\n                    val gson = Gson()\n                    val `object` = JsonParser().parse(it).asJsonObject\n                    val array = `object`.getAsJsonArray(\"data\")\n                    val recommends = array.map { gson.fromJson(it, Recommend::class.java) }\n                    recommends\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<Recommend>>(mView) {\n                    override fun onSuccess(t: List<Recommend>) {\n                        mView?.showRecommend(t)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/home/RegionPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.home\n\nimport com.google.gson.Gson\nimport com.google.gson.JsonParser\nimport com.yoyiyi.soleil.base.BaseListSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.bean.region.RegionTagType\nimport com.yoyiyi.soleil.mvp.contract.home.RegionContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport com.yoyiyi.soleil.utils.JsonUtils\nimport io.reactivex.Flowable\nimport java.util.*\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:04\n * * 描述:首页直播Presenter\n */\nclass RegionPresenter @Inject constructor(private val mRetrofitHelper: RetrofitHelper) : RxPresenter<RegionContract.View>(), RegionContract.Presenter<RegionContract.View> {\n\n    override fun getRegionData() {\n        val subscriber = Flowable.just(JsonUtils.readJson(\"region.json\"))\n                .flatMap {\n                    val gson = Gson()\n                    val `object` = JsonParser().parse(it).asJsonObject\n                    val array = `object`.getAsJsonArray(\"data\")\n                    val regionTypes = array.mapTo(ArrayList<RegionTagType>()) { gson.fromJson(it, RegionTagType::class.java) }\n                    mView?.showRegionType(regionTypes)\n                    mRetrofitHelper.getRegion()\n                }\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseListSubscriber<Region>(mView) {\n                    override fun onSuccess(t: List<Region>) {\n                        mView?.showRegion(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/recommend/AllStationRankPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.recommend\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.recommend.AllStationRank\nimport com.yoyiyi.soleil.mvp.contract.recommend.AllStationRankContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:全区排行presenter\n */\nclass AllStationRankPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<AllStationRankContract.View>(), AllStationRankContract.Presenter<AllStationRankContract.View> {\n\n\n    /* @Override\n    public void getAllRegionRankData(String type) {\n        BaseSubscriber<AllRegionRank> subscriber = mRetrofitHelper.getAllRegionRank(type)\n                .compose(RxUtils.rxSchedulerHelper())\n                .subscribeWith(new BaseSubscriber<AllRegionRank>(mView) {\n                    @Override\n                    public void onSuccess(AllRegionRank allRegionRank) {\n                        mView.showAllRegionRank(allRegionRank.rank.list);\n                    }\n                });\n        addSubscribe(subscriber);\n\n    }*/\n\n    override fun getAllStationRankData(type: String) {\n        addSubscribe(retrofitHelper.getAllStationRank(type)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<AllStationRank>(mView) {\n                    override fun onSuccess(t: AllStationRank) {\n                        mView?.showAllStationRank(t.rank.list)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/region/AllRegionRankPositionPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.region\n\n\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.region.AllRegionRankPositionContract\nimport io.reactivex.functions.Consumer\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:综合界面搜索presenter\n */\nclass AllRegionRankPositionPresenter @Inject constructor() : RxPresenter<AllRegionRankPositionContract.View>(), AllRegionRankPositionContract.Presenter<AllRegionRankPositionContract.View> {\n\n    override fun getEventPosition() {\n        addRxBusSubscribe(Event.RegionEntrancePositionEvent::class.java, Consumer { mView?.showEventPosition(it.position) })\n    }\n\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/region/AllRegionRankPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.region\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.region.AllRegionRank\nimport com.yoyiyi.soleil.mvp.contract.region.AllRegionRankContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:全区排行presenter\n */\nclass AllRegionRankPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<AllRegionRankContract.View>(), AllRegionRankContract.Presenter<AllRegionRankContract.View> {\n\n\n    override fun getAllRegionRankData(type: String) {\n        addSubscribe(retrofitHelper.getAllRegionRank(type)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<AllRegionRank>(mView) {\n                    override fun onSuccess(t: AllRegionRank) {\n                        mView?.showAllRegionRank(t.rank.list)\n                    }\n                }))\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/region/LivePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.region\n\n\nimport com.yoyiyi.soleil.base.BaseListSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.live.LiveEntrance\nimport com.yoyiyi.soleil.mvp.contract.region.live.LiveContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:综合界面搜索presenter\n */\n\nclass LivePresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<LiveContract.View>(), LiveContract.Presenter<LiveContract.View> {\n\n    override fun getLiveEntranceData() {\n        addSubscribe(retrofitHelper.getLiveEntrance()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseListSubscriber<LiveEntrance>(mView) {\n                   override fun onSuccess(t: List<LiveEntrance>) {\n                        mView?.showLiveEntrance(t)\n                    }\n                }))\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/region/RegionTypePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.region\n\nimport com.yoyiyi.soleil.base.BaseObjectSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.region.RegionType\nimport com.yoyiyi.soleil.mvp.contract.region.RegionTypeContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\n\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\n\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 22:04\n * * 描述:分区Type Presenter\n */\nclass RegionTypePresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<RegionTypeContract.View>(), RegionTypeContract.Presenter<RegionTypeContract.View> {\n\n    override fun getRegionTypeData(rid: Int) {\n        addSubscribe(retrofitHelper.getRegionType(rid)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseObjectSubscriber<RegionType>(mView) {\n                    override fun onSuccess(t: RegionType) {\n                        mView?.showRegionType(t)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/region/RegionTypeRecommendPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.region\n\n\nimport com.yoyiyi.soleil.base.BaseObjectSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.mvp.contract.region.RegionTypeRecommendContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\n\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\n\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:分区推荐presenter\n */\n\nclass RegionTypeRecommendPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<RegionTypeRecommendContract.View>(), RegionTypeRecommendContract.Presenter<RegionTypeRecommendContract.View> {\n\n    override fun getRegionRecommendData(tid: Int) {\n        val subscriber = retrofitHelper.getRegionRecommend(tid)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseObjectSubscriber<RegionRecommend>(mView) {\n                    override fun onSuccess(t: RegionRecommend) {\n                        mView?.showRegionRecommend(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/search/ArchivePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.search\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.search.MulSearchArchive\nimport com.yoyiyi.soleil.event.Event\nimport com.yoyiyi.soleil.mvp.contract.search.ArchiveContract\nimport com.yoyiyi.soleil.rx.RxBus\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\n\nimport java.util.ArrayList\n\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:综合界面主页presenter\n */\n\nclass ArchivePresenter @Inject constructor() : RxPresenter<ArchiveContract.View>(), ArchiveContract.Presenter<ArchiveContract.View> {\n\n    override fun getSearchArchiveData() {\n        addSubscribe(RxBus.toFlowable(Event.SearchArchiveEvent::class.java)\n                .doOnSubscribe { mView?.showLoading() }//设置加载动画\n                .map {\n                    val seasonCount = it.seasonCount\n                    val movieCount = it.movieCount\n                    val itemBean = it.itemBean\n                    val archive = itemBean?.archive//首页推荐\n                    val movie = itemBean?.movie//电影\n                    val season = itemBean?.season//番剧\n                    val mulSearchArchiveList = ArrayList<MulSearchArchive>()\n                    season?.forEach { seasonBean ->\n                        mulSearchArchiveList.add(//番剧\n                                MulSearchArchive(itemTypez = MulSearchArchive.TYPE_SEASON, season = seasonBean))\n\n                    }\n\n                    mulSearchArchiveList.add(\n                            MulSearchArchive(itemTypez = MulSearchArchive.TYPE_SEASON_MORE, seasonCount = seasonCount))//更多番剧\n                    movie?.forEach {\n                        mulSearchArchiveList.add(\n                                MulSearchArchive(itemTypez = MulSearchArchive.TYPE_MOVIE, movie = it))\n\n                    }\n\n                    mulSearchArchiveList.add(\n                            MulSearchArchive(itemTypez = MulSearchArchive.TYPE_MOVIE_MORE, movieCount = movieCount))//更多影视\n\n                    archive?.forEach {\n                        mulSearchArchiveList.add(\n                                MulSearchArchive(itemTypez = MulSearchArchive.TYPE_ARCHIVE, archive = it))\n                    }//主页推荐\n                    mulSearchArchiveList\n                }\n                //  .delay(5, TimeUnit.SECONDS)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<MulSearchArchive>>(mView) {\n                    override fun onSuccess(t: List<MulSearchArchive>) {\n                        mView?.showSearchArchive(t)\n                    }\n                }))\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/search/MoviePresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.search\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.search.Movie\nimport com.yoyiyi.soleil.mvp.contract.search.MovieContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\n\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\n\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:综合界面主页presenter\n */\n\nclass MoviePresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<MovieContract.View>(), MovieContract.Presenter<MovieContract.View> {\n\n    override fun getSearchMovieData() {\n        val subscriber = retrofitHelper.getMovie()\n                .compose(rxSchedulerHelper())\n                .doOnSubscribe{ mView?.showLoading() }\n                //   .delay(5, TimeUnit.SECONDS\n                .subscribeWith(object : BaseSubscriber<Movie>(mView) {\n                    override fun onSuccess(movie: Movie) {\n                        mView?.showSearchMovie(movie)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/search/SearchPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.search\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.search.Search\nimport com.yoyiyi.soleil.mvp.contract.search.SearchContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/18 14:00\n * * 描述:\n */\n\nclass SearchPresenter @Inject\nconstructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<SearchContract.View>(), SearchContract.Presenter<SearchContract.View> {\n\n    override fun getSearchData() {\n        val subscriber = retrofitHelper.getSearch()\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<Search>(mView) {\n                    override fun onSuccess(t: Search) {\n                        mView?.showSearch(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/search/SeasonPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.search\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.search.Season\nimport com.yoyiyi.soleil.mvp.contract.search.SeasonContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:综合界面主页presenter\n */\n\nclass SeasonPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<SeasonContract.View>(), SeasonContract.Presenter<SeasonContract.View> {\n\n\n    override fun getSearchSeasonData() {\n        val subscriber = retrofitHelper.getSeason()\n                .compose(rxSchedulerHelper())\n                .doOnSubscribe { mView?.showLoading() }\n                // .delay(5, TimeUnit.SECONDS)\n                .subscribeWith(object : BaseSubscriber<Season>(mView) {\n                    override fun onSuccess(t: Season) {\n                        mView?.showSearchSeason(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/search/TotalSearchPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.search\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.search.SearchArchive\nimport com.yoyiyi.soleil.mvp.contract.search.TotalSearchContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.handleResult\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport java.util.concurrent.TimeUnit\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:直播Presenter\n */\n\nclass TotalSearchPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<TotalSearchContract.View>(), TotalSearchContract.Presenter<TotalSearchContract.View> {\n\n    override fun getSearchNavData(keyword: String, page: Int, pagesize: Int) {\n        val subscriber = retrofitHelper.getSearchArchive(keyword, page, pagesize)\n                .doOnSubscribe { mView?.showLoading() }\n                .delay(1, TimeUnit.SECONDS)\n                .compose(handleResult())\n                .map(SearchArchive::nav)\n                .compose(rxSchedulerHelper())\n                .subscribeWith(object : BaseSubscriber<List<SearchArchive.NavBean>>(mView) {\n                    override fun onSuccess(t: List<SearchArchive.NavBean>) {\n                        mView?.showSearchNav(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/mvp/presenter/search/UpPresenter.kt",
    "content": "package com.yoyiyi.soleil.mvp.presenter.search\n\n\nimport com.yoyiyi.soleil.base.BaseSubscriber\nimport com.yoyiyi.soleil.base.RxPresenter\nimport com.yoyiyi.soleil.bean.search.Up\nimport com.yoyiyi.soleil.mvp.contract.search.UpContract\nimport com.yoyiyi.soleil.network.helper.RetrofitHelper\nimport com.yoyiyi.soleil.rx.rxSchedulerHelper\nimport javax.inject.Inject\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/17 18:00\n * * 描述:综合界面主页presenter\n */\n\nclass UpPresenter @Inject constructor(private val retrofitHelper: RetrofitHelper) : RxPresenter<UpContract.View>(), UpContract.Presenter<UpContract.View> {\n    override fun getSearchUpData() {\n        val subscriber = retrofitHelper.getUp()\n                .compose(rxSchedulerHelper())\n                .doOnSubscribe { mView?.showLoading() }\n                //  .delay(5, TimeUnit.SECONDS)\n                .subscribeWith(object : BaseSubscriber<Up>(mView) {\n                    override fun onSuccess(t: Up) {\n                        mView?.showSearchUp(t)\n                    }\n                })\n        addSubscribe(subscriber)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/api/ApiService.kt",
    "content": "package com.yoyiyi.soleil.network.api\n\nimport com.yoyiyi.soleil.bean.app.video.VideoDetailComment\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetailComment\nimport com.yoyiyi.soleil.bean.discover.ActivityCenter\nimport com.yoyiyi.soleil.bean.discover.TopicCenter\nimport io.reactivex.Flowable\nimport retrofit2.http.GET\nimport retrofit2.http.Query\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 16:25\n * * 描述:番剧\n */\n\ninterface ApiService {\n\n    /**\n     * 活动中心\n     */\n    @GET(\"event/getlist?device=phone&mobi_app=iphone\")\n    fun getActivityCenter(@Query(\"page\") page: Int, @Query(\"pagesize\") pageSize: Int): Flowable<ActivityCenter>\n\n\n    /**\n     * 话题中心\n     */\n    @GET(\"topic/getlist?device=phone&mobi_app=iphone&page=1&pagesize=137\")\n    fun getTopicCenter(): Flowable<TopicCenter>\n\n    /**\n     * 番剧详情评论\n     */\n    @GET(\"x/v2/reply?access_key=ccfbb1b10ce8ab8418a2e00b9ca9a3a0&appkey=1d8b6e7d45233436&build=505000&mobi_app=\" + \"android&oid=9716141&plat=2&platform=android&pn=1&ps=20&sort=0&ts=1497169314&type=1&sign=ecca925ba55cecd151b5839f19d57657\")\n     fun getBangumiDetailComment(): Flowable<BangumiDetailComment>\n\n    /**\n     * 视频评论\n     */\n    @GET(\"/x/v2/reply?access_key=0e6adb874025dfabaa3ced3a7b22049d&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&oid=9938411&plat=2&platform=android&pn=1&ps=20&sort=0&ts=1497422373&type=1&sign=071c418a32ebc452e078308a04e1be4e\")\n     fun getVideoDetailComment(): Flowable<VideoDetailComment>\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/api/AppService.kt",
    "content": "package com.yoyiyi.soleil.network.api\n\nimport com.yoyiyi.soleil.bean.app.Splash\nimport com.yoyiyi.soleil.bean.app.video.VideoDetail\nimport com.yoyiyi.soleil.bean.app.video.VideoPlayer\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.bean.discover.HotSearchTag\nimport com.yoyiyi.soleil.bean.recommend.Recommend\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.bean.region.RegionType\nimport com.yoyiyi.soleil.bean.search.*\nimport com.yoyiyi.soleil.bean.user.UpDetail\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport io.reactivex.Flowable\nimport retrofit2.http.GET\nimport retrofit2.http.Query\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/7/13 14:32\n * 描述:\n */\ninterface AppService {\n    /**\n     * splash界面\n\n     * @return\n     */\n    @GET(\"/x/v2/splash?mobi_app=android&build=505000&channel=360&width=1080&height=1920&ver=4344558841496142006\")\n     fun getSplash(): Flowable<Splash>\n\n\n    /**\n     * 首页推荐\n\n     * @return\n     */\n    @GET(\"/x/feed/index?access_key=5c2ea06a566f3dd8850f5750b8d0a650&appkey=1d8b6e7d45233436&build=505000&idx=0&login_event=2&mobi_app=android&network=wifi&open_event=cold&platform=android&pull=true&style=2&ts=1495519813&sign=510278867e908ab3de31a7bd3701a55c\")\n     fun getRecommend(): Flowable<HttpResponse<List<Recommend>>>\n\n    /**\n     * 首页分区\n\n     * @return\n     */\n    @GET(\"/x/v2/show/index?access_key=fcbe0b2d947971fd3cc2b9e759d63097&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&ts=1495780436&sign=93ebfdf6018d866239977af373d45dba\")\n     fun getRegion(): Flowable<HttpResponse<List<Region>>>\n\n    /**\n     * 首页追番\n\n     * @return\n     */\n    @GET(\"/appindex/follow_index_mine?access_key=640efdbe3a382e5522491d7f913118fa&appkey=1d8b6e7d45233436&build=505000&mid=117143614&mobi_app=android&platform=android&ts=1495878887&sign=26909b825ee9aa3136c82f192688829d\")\n     fun getChaseBangumi(): Flowable<HttpResponse<ChaseBangumi>>\n\n    /**\n     * 首页追番推荐\n\n     * @return\n     */\n    @GET(\"/appindex/follow_index_page?appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&ts=1495878887&sign=1b069620b35b65619bd18566dacc6342\")\n     fun getRecommendBangumi(): Flowable<HttpResponse<RecommendBangumi>>\n\n    /**\n     * 综合搜索\n     */\n    @GET(\"x/v2/search?actionKey=appkey&appkey=27eb53fc9058f8c3&build=3710&device=phone&duration=0&mobi_app=iphone&order=default&platform=ios&rid=0\")\n     fun getSearchArchive(\n            @Query(\"keyword\") keyword: String, @Query(\"pn\") page: Int, @Query(\"ps\") pagesize: Int): Flowable<HttpResponse<SearchArchive>>\n\n    /**\n     * 分区推荐\n     */\n    @GET(\"x/v2/region/show?access_key=67cbf6a1e9ad7d7f11bfbd918e50c837&actionKey=appkey&appkey=27eb53fc9058f8c3&build=3600&device=phone&mobi_app=iphone&plat=1&platform=ios&sign=959d7b8c09c65e7a66f7e58b1a2bdab9&ts=1472310694\")\n     fun getRegionRecommend(@Query(\"rid\") rid: Int): Flowable<HttpResponse<RegionRecommend>>\n\n    /**\n     * 分区类型详情\n     */\n    @GET(\"x/v2/region/show/child?build=3600\")\n     fun getRegionType(@Query(\"rid\") rid: Int): Flowable<HttpResponse<RegionType>>\n\n    /**\n     * 视频详情\n     */\n    @GET(\"/x/v2/view?access_key=18b6350cf0e8fb0cacb6cf323fc2feba&aid=3852397&appkey=1d8b6e7d45233436&build=505000&from=3&mobi_app=android&plat=0&platform=android&trackid=14859045423998458858&ts=1498645383&sign=94a3c4d143f44f023558ea52a33be403\")\n     fun getVideoDetail(): Flowable<VideoDetail>\n\n    /**\n     * up主详情界面\n\n     * @return\n     */\n    @GET(\"/x/v2/space?access_key=91c3f4aa6761385fd99998b4f07e193f&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&ps=20&ts=1497595431&vmid=12617707&sign=465dc5c1d330999eb86514482cc7a1f3\")\n     fun getUpDetail(): Flowable<UpDetail>\n\n    /**\n     * 搜索\n     */\n    @GET(\"/x/v2/search?access_key=a1ad8aad60bddd751a4d417e2ab4a87e&appkey=1d8b6e7d45233436&build=505000&duration=0&keyword=%E7%8E%8B&mobi_app=android&platform=android&pn=1&ps=20&ts=1497764672&sign=5f83c141d366f7fda8f7d5df8c584b50\")\n     fun getSearch(): Flowable<Search>\n\n\n    /**\n     * up\n\n     * @return\n     */\n    @GET(\"/x/v2/search/type?access_key=692f4cfb9027141d360ba31d70921143&appkey=1d8b6e7d45233436&build=505000&keyword=%E7%8E%8B&mobi_app=android&platform=android&pn=1&ps=20&ts=1497848618&type=2&sign=36f143a24d2266a9e949aa4206297c4a\")\n     fun getUp(): Flowable<Up>\n\n    /**\n     * 番剧\n\n     * @return\n     */\n    @GET(\"/x/v2/search/type?access_key=692f4cfb9027141d360ba31d70921143&appkey=1d8b6e7d45233436&build=505000&keyword=%E7%8E%8B&mobi_app=android&platform=android&pn=1&ps=20&ts=1497848586&type=1&sign=32ee9a1e077484a2d13d924df44f1ab4\")\n     fun getSeason(): Flowable<Season>\n\n    /**\n     * 影视\n\n     * @return\n     */\n    @GET(\"/x/v2/search/type?access_key=692f4cfb9027141d360ba31d70921143&appkey=1d8b6e7d45233436&build=505000&keyword=%E7%8E%8B&mobi_app=android&platform=android&pn=1&ps=20&ts=1497848643&type=3&sign=b1f279d5b3cdeed4837ed910515cdf43\")\n     fun getMovie(): Flowable<Movie>\n\n\n    /**\n     * 首页发现 热门搜索标签\n\n     * @return\n     */\n    @GET(\"/x/v2/search/hot?appkey=1d8b6e7d45233436&build=506000&limit=50&mobi_app=android&platform=android&ts=1495949781&sign=9bc4cea15aa9de8a0b142db86634f11f\\n\")\n     fun getHotSearchTag(): Flowable<HttpResponse<HotSearchTag>>\n\n    /**\n     * 获取视频播放\n\n     * @return\n     */\n    @GET(\"/playurl?device=android&qn=16&cid=6191437&appkey=iVGUTjsxvpLeuDCf&access_key=18b6350cf0e8fb0cacb6cf323fc2feba&otype=json&mid=117143614&build=505000&buvid=0ADC5B25-8C0A-4F6E-AE0C-83A3089CCEE223963infoc&platform=android&sign=153cb8fda95e5b1400cc3729d9a8afce\")\n     fun getVideoPlayer(): Flowable<VideoPlayer>\n\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/api/BangumiService.kt",
    "content": "package com.yoyiyi.soleil.network.api\n\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetail\nimport com.yoyiyi.soleil.bean.bangumi.BangumiDetailRecommend\nimport com.yoyiyi.soleil.bean.bangumi.BangumiIndex\nimport com.yoyiyi.soleil.bean.bangumi.BangumiSchedule\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport io.reactivex.Flowable\nimport retrofit2.http.GET\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 12:01\n * * 描述:\n */\n\ninterface BangumiService {\n\n\n    /**\n     * 首页追番\n\n     * @return\n     */\n    @GET(\"/appindex/follow_index_mine?access_key=640efdbe3a382e5522491d7f913118fa&appkey=1d8b6e7d45233436&build=505000&mid=117143614&mobi_app=android&platform=android&ts=1495878887&sign=26909b825ee9aa3136c82f192688829d\")\n    fun getChaseBangumi(): Flowable<HttpResponse<ChaseBangumi>>\n\n    /**\n     * 首页追番推荐\n\n     * @return\n     */\n    @GET(\"/appindex/follow_index_page?appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&ts=1495878887&sign=1b069620b35b65619bd18566dacc6342\")\n    fun getRecommendBangumi(): Flowable<HttpResponse<RecommendBangumi>>\n\n    /**\n     * 番剧时间表\n     */\n    @GET(\"api/timeline_v4?access_key=19946e1ef3b5cad1a756c475a67185bb&actionKey=appkey&appkey=27eb53fc9058f8c3&area_id=2&build=3940&device=phone&mobi_app=iphone&platform=ios&see_mine=0&sign=d8cbbacab2e5fd0196b4883201e2103e&ts=1477981526\")\n    fun getBangumiSchedule(): Flowable<HttpResponse<List<BangumiSchedule>>>\n\n    /**\n     * 番剧索引\n     */\n    @GET(\"api/bangumi_index_cond?access_key=19946e1ef3b5cad1a756c475a67185bb&actionKey=appkey&appkey=27eb53fc9058f8c3&build=3940&device=phone&mobi_app=iphone&platform=ios&sign=cfc6903a13ba89e81c904b4c589e5369&ts=1477974966&type=0\")\n    fun getBangumiIndex(): Flowable<HttpResponse<BangumiIndex>>\n\n\n    /**\n     * 番剧详情番剧推荐\n     */\n    @GET(\"api/season/recommend/rnd/6066.json?appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&ts=1497169314&sign=da4d668fe4aaf97de55541f8d05ac57f\")\n    fun getBangumiDetailRecommend(): Flowable<HttpResponse<BangumiDetailRecommend>>\n\n    /**\n     * 番剧详情\n     */\n    @GET(\"api/season_v5?access_key=ccfbb1b10ce8ab8418a2e00b9ca9a3a0&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&season_id=6066&ts=1497169313&type=bangumi&sign=c6796f6ea4a6cae28a4d8fc555fde2da\")\n    fun getBangumiDetail(): Flowable<HttpResponse<BangumiDetail>>\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/api/Im9Service.kt",
    "content": "package com.yoyiyi.soleil.network.api\n\nimport com.yoyiyi.soleil.bean.discover.Community\nimport com.yoyiyi.soleil.bean.discover.InterestAd\nimport com.yoyiyi.soleil.bean.discover.InterestCategrory\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport io.reactivex.Flowable\nimport retrofit2.http.GET\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/6/10 21:40\n * * 描述:\n */\ninterface Im9Service {\n    /**\n     * 兴趣圈入口\n     */\n    @GET(\"api/query.community.category.list.do?access_key=69c28b2a6f25d397c973519254d8aedd&actionKey=appkey&appkey=1d8b6e7d45233436&build=506000&mobi_app=\" + \"android&platform=android&ts=1497101501&sign=febb5804ca612ad94d50f626229dc499\")\n    fun getInterestCategrory(): Flowable<HttpResponse<InterestCategrory>>\n\n    /**\n     * 交流\n\n     * @return\n     */\n    @GET(\"api/query.chosen.post.list.do?actionKey=appkey&appkey=1d8b6e7d45233436&build=506000&mobi_app=\" + \"android&page_no=1&page_size=30&platform=android&ts=1497101501&sign=ad59f23437204bab802fcb7a25b527f0\")\n    fun getCommunity(): Flowable<HttpResponse<Community>>\n\n    /**\n     * 交流\n\n     * @return\n     */\n    @GET(\"api/query.ads.list.do?actionKey=appkey&appkey=1d8b6e7d45233436&build=506000&mobi_app=android&page_no=1&page_size=20\" + \"&platform=android&ts=1497102805&sign=2e45265253f4dd81b74350ba3fb38849\")\n    fun getInterestAd(): Flowable<HttpResponse<InterestAd>>\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/api/LiveService.kt",
    "content": "package com.yoyiyi.soleil.network.api\n\nimport com.yoyiyi.soleil.bean.live.LiveEntrance\nimport com.yoyiyi.soleil.bean.live.LivePartition\nimport com.yoyiyi.soleil.bean.live.LiveRecommend\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport io.reactivex.Flowable\nimport retrofit2.http.GET\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 16:25\n * * 描述:直播\n */\n\ninterface LiveService {\n    @GET(\"/AppNewIndex/recommend?_device=android&access_key=5b0032c681c2233870c8edcee410b6c6&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&scale=xxhdpi&ts=1495639021&sign=9d024a5b09edddd51636d17d860622d2\")\n    fun getLiveRecommend(): Flowable<HttpResponse<LiveRecommend>>\n\n\n    @GET(\"/AppNewIndex/common?_device=android&access_key=5b0032c681c2233870c8edcee410b6c6&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&scale=xxhdpi&ts=1495639884&sign=74b510ce56ef302742aafad2e20f9899\")\n    fun getLivePartition(): Flowable<HttpResponse<LivePartition>>\n\n\n    /**\n     * 获取直播分区的tag标题\n\n     * @return\n     */\n    @GET(\"/AppIndex/areas?_device=android&access_key=21073183486ba556121c1160f107f0c5&appkey=1d8b6e7d45233436&build=506000&mobi_app=android&platform=android&scale=xxhdpi&ts=1496116760&sign=e2231dc84bc33bc1a7c6d8eddf13da9d\")\n     fun getLiveEntrance(): Flowable<HttpResponse<List<LiveEntrance>>>\n\n    /*  */\n    /**\n     * 首页推荐直播\n\n     * @return\n     */\n    /*\n        @get:GET(\"/AppNewIndex/recommend?_device=android&access_key=5b0032c681c2233870c8edcee410b6c6&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&scale=xxhdpi&ts=1495639021&sign=9d024a5b09edddd51636d17d860622d2\")\n        val liveRecommend: Flowable<HttpResponse<LiveRecommend>>\n\n        */\n    /**\n     * 直播分区\n\n     * @return\n     */\n    /*\n        @get:GET(\"/AppNewIndex/common?_device=android&access_key=5b0032c681c2233870c8edcee410b6c6&appkey=1d8b6e7d45233436&build=505000&mobi_app=android&platform=android&scale=xxhdpi&ts=1495639884&sign=74b510ce56ef302742aafad2e20f9899\")\n        val livePartition: Flowable<HttpResponse<LivePartition>>\n\n        */\n    /**\n     * 获取直播分区的tag标题\n\n     * @return\n     */\n    /*\n        @get:GET(\"/AppIndex/areas?_device=android&access_key=21073183486ba556121c1160f107f0c5&appkey=1d8b6e7d45233436&build=506000&mobi_app=android&platform=android&scale=xxhdpi&ts=1496116760&sign=e2231dc84bc33bc1a7c6d8eddf13da9d\")\n        val liveEntrance: Flowable<HttpResponse<List<LiveEntrance>>>\n\n\n        */\n    /**\n     * 获取直播详情\n\n     * @return\n     */\n    /*\n        @get:GET(\"/AppRoom/index?_device=android&_hwid=b008d5bd523c9447&access_key=a0ce768f3b27a34121d8f8835c02d4f4&appkey=1d8b6e7d45233436&build=508000&buld=508000&jumpFrom=24000&mobi_app=android&platform=android&room_id=4350043&scale=xxhdpi&src=360&trace_id=20170629140500046&ts=1498716346&version=5.8.0.508000&sign=6c0abb24615ecddcdaa808b0a51f6b0d\")\n        val liveDetail: Flowable<LiveDetail>\n\n        */\n    /**\n     * 获取礼物TOP\n\n     * @return\n     */\n    /*\n        @get:GET(\"/AppRoom/getGiftTop?_device=android&_hwid=b008d5bd523c9447&access_key=a0ce768f3b27a34121d8f8835c02d4f4&appkey=1d8b6e7d45233436&build=508000&mobi_app=android&platform=android&room_id=4350043&src=360&trace_id=20170629140500046&ts=1498716346&version=5.8.0.508000&sign=40e20d3b8ea070b23f12dafbdc128d3e\")\n        val giftTop: Flowable<GiftTop>\n\n        */\n    /**\n     * 获取舰队\n\n     * @return\n     */\n    /*\n        @get:GET(\"/AppRoom/guardRank?_device=android&_hwid=b008d5bd523c9447&access_key=a0ce768f3b27a34121d8f8835c02d4f4&appkey=1d8b6e7d45233436&build=508000&mobi_app=android&page=1&page_size=15&platform=android&ruid=19738891&src=360&trace_id=20170629140800018&ts=1498716498&version=5.8.0.508000&sign=a3388dfae8b2e41a60665c006e8ed241\")\n        val guardRank: Flowable<GuardRank>\n\n\n        */\n    /**\n     * 成就\n\n     * @return\n     */\n    /*\n        @get:GET(\"/appUser/getTitle?_device=android&_hwid=b008d5bd523c9447&access_key=a0ce768f3b27a34121d8f8835c02d4f4&appkey=1d8b6e7d45233436&build=508000&mobi_app=android&platform=android&scale=xxhdpi&src=360&trace_id=20170629140500046&ts=1498716346&version=5.8.0.508000&sign=d86a9f6594e5e75c7890e5250d367fcd\")\n        val title: Flowable<HttpResponse<List<Title>>>*/\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/api/RankService.kt",
    "content": "package com.yoyiyi.soleil.network.api\n\nimport com.yoyiyi.soleil.bean.recommend.AllStationRank\nimport com.yoyiyi.soleil.bean.region.AllRegionRank\nimport io.reactivex.Flowable\nimport retrofit2.http.GET\nimport retrofit2.http.Path\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/23 16:25\n * * 描述:排行\n */\n\ninterface RankService {\n\n    /**\n     * 全区排行\n\n     * @param type\n     * *\n     * @return\n     */\n    @GET(\"index/rank/{type}\")\n    fun getAllRegionRank(@Path(\"type\") type: String): Flowable<AllRegionRank>\n\n    /**\n     * 全站排行\n     * @param type\n     * *\n     * @return\n     */\n    @GET(\"index/rank/{type}\")\n    fun getAllStationRank(@Path(\"type\") type: String): Flowable<AllStationRank>\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/exception/ApiException.kt",
    "content": "package com.yoyiyi.soleil.network.exception\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 10:23\n * * 描述:ApiException\n */\n\nclass ApiException(msg: String) : Exception(msg)\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/helper/OkHttpHelper.kt",
    "content": "package com.yoyiyi.soleil.network.helper\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 10:23\n * * 描述:okHttp 帮助类\n */\n\nimport android.content.Context\nimport com.facebook.stetho.okhttp3.StethoInterceptor\nimport com.yoyiyi.soleil.network.support.ApiConstants\nimport com.yoyiyi.soleil.utils.AppUtils\nimport com.yoyiyi.soleil.utils.FileUtils\nimport com.yoyiyi.soleil.utils.net.NetworkUtils\nimport okhttp3.*\nimport okhttp3.logging.HttpLoggingInterceptor\nimport java.io.File\nimport java.io.IOException\nimport java.util.concurrent.TimeUnit\n\n/**\n * 全局统一使用的OkHttpClient工具，okhttp版本：okhttp3\n */\nobject OkHttpHelper {\n    @Volatile var mOkHttpClient: OkHttpClient\n    //读取时间\n     val DEFAULT_READ_TIMEOUT_MILLIS = 20_000L\n    //写入时间\n     val DEFAULT_WRITE_TIMEOUT_MILLIS = 20_000L\n    //超时时间\n     val DEFAULT_CONNECT_TIMEOUT_MILLIS = 20_000L\n    //最大缓存\n     private val HTTP_RESPONSE_DISK_CACHE_MAX_SIZE = 20_000_000L //设置20M\n    //长缓存有效期为7天\n     val CACHE_STALE_LONG = (60 * 60 * 24 * 7).toLong()\n\n    init {\n        val loggingInterceptor = HttpLoggingInterceptor()\n        //包含header、body数据\n        loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY\n        mOkHttpClient = OkHttpClient.Builder()\n                .readTimeout(DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)\n                .writeTimeout(DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)\n                .connectTimeout(DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)\n                .cache(getCache(AppUtils.getAppContext()))//设置缓存\n                // 失败重发\n                .retryOnConnectionFailure(true)\n                //设置缓存\n                .addNetworkInterceptor(RewriteCacheControlInterceptor())\n                .addInterceptor(RewriteCacheControlInterceptor())\n                //FaceBook 网络调试器，可在Chrome调试网络请求，查看SharePreferences,数据库等\n                .addNetworkInterceptor(StethoInterceptor())\n                //http数据log，日志中打印出HTTP请求&响应数据\n                .addInterceptor(loggingInterceptor)\n                //便于查看json\n                // .addInterceptor(new LoggerInterceptor())\n                .addInterceptor(UserAgentInterceptor())\n                .build()\n    }\n\n    fun getOkHttpClient(): OkHttpClient = mOkHttpClient\n\n\n    /**\n     * 设置缓存路径\n\n     * @param context 上下文\n     */\n    fun setCache(context: Context) {\n        val baseDir = context.applicationContext.cacheDir\n        if (baseDir != null) {\n            val cacheDir = File(baseDir, \"CopyCache\")\n            mOkHttpClient.newBuilder().cache(Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE))\n        }\n    }\n\n\n    /**\n     * 获取缓存路径\n\n     * @return cache\n     */\n    fun getCache(context: Context): Cache {\n        val cache: Cache?\n        val path = FileUtils.createRootPath(context)\n        val baseDir = File(path)\n        val cacheDir = File(baseDir, \"CopyCache\")\n        cache = Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE)\n        return cache\n    }\n\n\n    /**\n     * 添加UA拦截器，B站请求API需要加上UA才能正常使用\n     */\n    private class UserAgentInterceptor : Interceptor {\n        @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response? {\n            try {\n                val originalRequest = chain.request()\n                val requestWithUserAgent = originalRequest.newBuilder()\n                        .removeHeader(\"User-Agent\")\n                        .addHeader(\"User-Agent\", ApiConstants.COMMON_UA_STR)\n                        .build()\n                return chain.proceed(requestWithUserAgent)\n            } catch (e: Exception) {\n                e.printStackTrace()\n            }\n            return  null\n        }\n    }\n\n\n    private class RewriteCacheControlInterceptor : Interceptor {\n        @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response {\n                var request = chain.request()\n                if (!NetworkUtils.isConnected(AppUtils.getAppContext())) {\n                    request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build()\n                }\n                val originalResponse = chain.proceed(request)\n                if (NetworkUtils.isConnected(AppUtils.getAppContext())) {\n                    //有网的时候读接口上的@Headers里的配置，你可以在这里进行统一的设置\n                    val cacheControl = request.cacheControl().toString()\n                    return originalResponse.newBuilder().header(\"Cache-Control\", cacheControl)\n                            .removeHeader(\"Pragma\").build()\n                } else {\n                    return originalResponse.newBuilder()\n                            .header(\"Cache-Control\", \"public, only-if-cached, max-stale=\" + CACHE_STALE_LONG)\n                            .removeHeader(\"Pragma\").build()\n                }\n            \n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/helper/RetrofitHelper.kt",
    "content": "package com.yoyiyi.soleil.network.helper\n\n\nimport com.yoyiyi.soleil.bean.app.Splash\nimport com.yoyiyi.soleil.bean.app.video.VideoDetail\nimport com.yoyiyi.soleil.bean.app.video.VideoDetailComment\nimport com.yoyiyi.soleil.bean.app.video.VideoPlayer\nimport com.yoyiyi.soleil.bean.bangumi.*\nimport com.yoyiyi.soleil.bean.chase.ChaseBangumi\nimport com.yoyiyi.soleil.bean.chase.RecommendBangumi\nimport com.yoyiyi.soleil.bean.discover.*\nimport com.yoyiyi.soleil.bean.live.LiveEntrance\nimport com.yoyiyi.soleil.bean.live.LivePartition\nimport com.yoyiyi.soleil.bean.live.LiveRecommend\nimport com.yoyiyi.soleil.bean.recommend.AllStationRank\nimport com.yoyiyi.soleil.bean.region.AllRegionRank\nimport com.yoyiyi.soleil.bean.region.Region\nimport com.yoyiyi.soleil.bean.region.RegionRecommend\nimport com.yoyiyi.soleil.bean.region.RegionType\nimport com.yoyiyi.soleil.bean.search.*\nimport com.yoyiyi.soleil.bean.user.UpDetail\nimport com.yoyiyi.soleil.network.api.*\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport io.reactivex.Flowable\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/5/10 17:57\n * * 描述:RetrofitHelper 帮助类\n */\n\nclass RetrofitHelper(private val appService: AppService,\n                     private val liveService: LiveService,\n                     private val bangumiService: BangumiService,\n                     private val rankService: RankService,\n                     private val apiService: ApiService,\n                     private val im9Service: Im9Service) {\n\n\n    fun getSplash(): Flowable<Splash> = appService.getSplash()\n\n    fun getLivePartition(): Flowable<HttpResponse<LivePartition>> = liveService.getLivePartition()\n\n    fun getLiveRecommend(): Flowable<HttpResponse<LiveRecommend>> = liveService.getLiveRecommend()\n\n    fun getRegion(): Flowable<HttpResponse<List<Region>>> = appService.getRegion()\n\n    fun getHotSearchTag(): Flowable<HttpResponse<HotSearchTag>> = appService.getHotSearchTag()\n\n    fun getActivityCenter(page: Int, pageSize: Int): Flowable<ActivityCenter> = apiService.getActivityCenter(page, pageSize)\n\n    fun getVideoPlayer(): Flowable<VideoPlayer> = appService.getVideoPlayer()\n\n    fun getUpDetail(): Flowable<UpDetail> = appService.getUpDetail()\n\n    fun getVideoDetail(): Flowable<VideoDetail> = appService.getVideoDetail()\n\n    fun getVideoDetailComment(): Flowable<VideoDetailComment> = apiService.getVideoDetailComment()\n\n    fun getAllRegionRank(type: String): Flowable<AllRegionRank> = rankService.getAllRegionRank(type)\n\n    fun getLiveEntrance(): Flowable<HttpResponse<List<LiveEntrance>>> = liveService.getLiveEntrance()\n\n    fun getRegionType(rid: Int): Flowable<HttpResponse<RegionType>> = appService.getRegionType(rid)\n\n    fun getRegionRecommend(rid: Int): Flowable<HttpResponse<RegionRecommend>> = appService.getRegionRecommend(rid)\n\n    fun getTopicCenter(): Flowable<TopicCenter> = apiService.getTopicCenter()\n\n    fun getSearch(): Flowable<Search> = appService.getSearch()\n\n    fun getUp(): Flowable<Up> = appService.getUp()\n\n    fun getMovie(): Flowable<Movie> = appService.getMovie()\n\n    fun getSeason(): Flowable<Season> = appService.getSeason()\n\n    fun getSearchArchive(keyword: String, page: Int, pagesize: Int): Flowable<HttpResponse<SearchArchive>> = appService.getSearchArchive(keyword, page, pagesize)\n\n    fun getAllStationRank(type: String): Flowable<AllStationRank> = rankService.getAllStationRank(type)\n\n    fun getChaseBangumi(): Flowable<HttpResponse<ChaseBangumi>> = bangumiService.getChaseBangumi()\n\n    fun getRecommendBangumi(): Flowable<HttpResponse<RecommendBangumi>> = bangumiService.getRecommendBangumi()\n\n    fun getBangumiSchedule(): Flowable<HttpResponse<List<BangumiSchedule>>> = bangumiService.getBangumiSchedule()\n\n    fun getBangumiIndex(): Flowable<HttpResponse<BangumiIndex>> = bangumiService.getBangumiIndex()\n\n    fun getBangumiDetail(): Flowable<HttpResponse<BangumiDetail>> = bangumiService.getBangumiDetail()\n\n    fun getBangumiDetailRecommend(): Flowable<HttpResponse<BangumiDetailRecommend>> = bangumiService.getBangumiDetailRecommend()\n\n    fun getBangumiDetailComment(): Flowable<BangumiDetailComment> = apiService.getBangumiDetailComment()\n\n    fun getInterestCategrory(): Flowable<HttpResponse<InterestCategrory>> = im9Service.getInterestCategrory()\n\n    fun getCommunity(): Flowable<HttpResponse<Community>> = im9Service.getCommunity()\n\n    fun getInterestAd(): Flowable<HttpResponse<InterestAd>> = im9Service.getInterestAd()\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/helper/UrlHelper.kt",
    "content": "package com.yoyiyi.soleil.network.helper\n\nimport android.util.Log\n\nimport com.yoyiyi.soleil.bean.user.UserDetail\n\n\n/**\n * Created by hcc on 16/8/4 21:18\n * 100332338@qq.com\n *\n *\n * 根据B站返回的数据 个人参数由于返回限制\n * 需要进行特殊处理，如视频封面\n * 用户头像等url 进行url改装\n * 才能进行展示.\n */\nobject UrlHelper {\n    private val HDSLB_HOST = \"http://i2.hdslb.com\"\n\n    private fun isVideoUrl(url: String): Boolean {\n        return url.contains(\"bilibili.com/video/av\")\n    }\n\n    fun getAVfromVideoUrl(url: String): Int {\n        if (!isVideoUrl(url)) {\n            return -1\n        }\n        var av = url\n        av = av.substring(av.indexOf(\"bilibili.com/video/av\") + \"bilibili.com/video/av\".length)\n        Log.i(\"test\", av)\n        av = av.substring(0, av.indexOf(\"/\"))\n        Log.i(\"test\", av)\n        return Integer.parseInt(av)\n    }\n\n    fun getFaceUrl(info: UserDetail): String {\n        if (info.card.face.contains(\".hdslb.com\")) {\n            return info.card.face\n        }\n        var face = HDSLB_HOST + info.card.face\n        if (face.contains(\"{SIZE}\")) {\n            face = face.replace(\"{SIZE}\", \"\")\n        }\n        return face\n    }\n\n    fun getFaceUrlByUrl(url: String): String {\n        if (url.contains(\"/52_52\")) {\n            return url.replace(\"/52_52\", \"\")\n        }\n        return url\n    }\n\n    fun getClearVideoPreviewUrl(url: String): String {\n        var url = url\n        if (!url.contains(\"/320_180\")) {\n            return url\n        }\n        url = url.replace(\"/320_180\", \"\")\n        return url\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/response/HttpListResponse.kt",
    "content": "package com.yoyiyi.soleil.network.response\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 14:20\n * * 描述:统一处理HttpListResponse\n */\n\nclass HttpListResponse<T> {\n    var data: List<T>? = null//数据\n    var result: List<T>? = null//数据\n    var message: String? = null//信息\n    var code: Int = 0//服务器状态\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/response/HttpResponse.kt",
    "content": "package com.yoyiyi.soleil.network.response\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 14:20\n * * 描述:统一处理HttpResponse\n */\n\nclass HttpResponse<T> {\n    var data: T? = null//数据\n    var result: T? = null//数据\n    var message: String? = null//信息\n    var code: Int = 0//服务器状态\n    //只有全区排行 json 有这个 字段\n    var rank: T? = null//数据\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/support/ApiConstants.kt",
    "content": "package com.yoyiyi.soleil.network.support\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * *\n * @date 创建时间：2017/4/27 14:20\n * * 描述:API常量类\n */\n\nobject ApiConstants {\n\n    val LIVE_BASE_URL = \"http://api.live.bilibili.com\"\n\n    val APP_BASE_URL = \"http://app.bilibili.com/\"\n\n    val BILI_BASE_URL = \"http://bilibili-service.daoapp.io/\"\n\n    val RANK_BASE_URL = \"http://www.bilibili.com/\"\n\n    val API_BASE_URL = \"http://api.bilibili.cn/\"\n\n    val BANGUMI_BASE_URL = \"https://bangumi.bilibili.com/\"\n\n    val SEARCH_BASE_URL = \"http://s.search.bilibili.com/\"\n\n    val ACCOUNT_BASE_URL = \"https://account.bilibili.com/\"\n\n    val USER_BASE_URL = \"http://space.bilibili.com/\"\n\n    val VIP_BASE_URL = \"http://vip.bilibili.com/\"\n\n    val IM9_BASE_URL = \"http://www.im9.com/\"\n\n    val COMMENT_BASE_URL = \"http://comment.bilibili.com/\"\n\n    val COMMON_UA_STR = \"BiliSoleilKotlin Android Client/1.0 (soleilyoyiyi@gmail.com)\"\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/network/support/LoggerInterceptor.kt",
    "content": "package com.yoyiyi.soleil.network.support\n\nimport com.orhanobut.logger.Logger\n\nimport java.io.IOException\nimport java.util.Locale\n\nimport okhttp3.Interceptor\nimport okhttp3.MediaType\nimport okhttp3.Request\nimport okhttp3.Response\nimport okhttp3.ResponseBody\n\n/**\n * Logger拦截器\n * Created by zzq on 2016/12/5.\n */\n\nclass LoggerInterceptor : Interceptor {\n    @Throws(IOException::class)\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val request = chain.request()\n        Logger.d(String.format(\"Sending request %s on %s%n%s\",\n                request.url(), chain.connection(), request.headers()))\n        val t1 = System.nanoTime()\n        val response = chain.proceed(chain.request())\n        val t2 = System.nanoTime()\n        Logger.d(String.format(Locale.getDefault(), \"Received response for %s in %.1fms%n%s\",\n                response.request().url(), (t2 - t1) / 1e6, response.headers()))\n        val mediaType = response.body().contentType()\n        val content = response.body().string()\n        Logger.json(content)\n        return response\n                .newBuilder()\n                .body(ResponseBody.create(mediaType, content))\n                .build()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/rx/RxBus.kt",
    "content": "package com.yoyiyi.soleil.rx\n\nimport io.reactivex.Flowable\nimport io.reactivex.disposables.Disposable\nimport io.reactivex.functions.Consumer\nimport io.reactivex.processors.FlowableProcessor\nimport io.reactivex.processors.PublishProcessor\n\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/4/7 15:50\n * 描述:RxBus类\n */\n// PublishSubject只会把在订阅发生的时间点之后来自原始Flowable的数据发射给观察者\nobject RxBus {\n    val bus: FlowableProcessor<Any> = PublishProcessor.create<Any>().toSerialized()\n\n\n    // 提供了一个新的事件 发射数据\n    fun post(o: Any) {\n        bus.onNext(o)\n    }\n\n    // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者\n    fun <T> toFlowable(eventType: Class<T>): Flowable<T> = bus.ofType(eventType)\n\n\n    //封装默认订阅\n    fun <T> toDefaultFlowable(eventType: Class<T>, act: Consumer<T>): Disposable = bus.ofType(eventType).compose(rxSchedulerHelper<T>()).subscribe(act)\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/rx/RxUtils.kt",
    "content": "\n\npackage com.yoyiyi.soleil.rx\n\nimport com.yoyiyi.soleil.network.exception.ApiException\nimport com.yoyiyi.soleil.network.response.HttpResponse\nimport io.reactivex.BackpressureStrategy\nimport io.reactivex.Flowable\nimport io.reactivex.FlowableTransformer\nimport io.reactivex.android.schedulers.AndroidSchedulers\nimport io.reactivex.schedulers.Schedulers\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @date 创建时间：2017/8/14 9:58\n *  描述:\n */\n\n\n/**\n * 统一线程处理\n * @param <T>\n * @return\n */\nfun <T> rxSchedulerHelper(): FlowableTransformer<T, T> =\n        FlowableTransformer { observable ->\n            observable.subscribeOn(Schedulers.io())\n                    .observeOn(AndroidSchedulers.mainThread())\n        }  //compose简化线程 统一处理线程\n\n\n/**\n * 生成Flowable\n * @param <T>\n * @return\n</T> */\nfun <T> createData(t: T): Flowable<T> =\n        Flowable.create<T>({ emitter ->\n            try {\n                emitter.onNext(t)\n                emitter.onComplete()\n            } catch (e: Exception) {\n                emitter.onError(e)\n            }\n        }, BackpressureStrategy.BUFFER)\n\n\n/**\n * 生成Flowable\n * @param <T>\n * @return <T>\n */\nfun <T> createData(t: List<T>): Flowable<List<T>> =\n        Flowable.create<List<T>>({ emitter ->\n            try {\n                emitter.onNext(t)\n                emitter.onComplete()\n            } catch (e: Exception) {\n                emitter.onError(e)\n            }\n        }, BackpressureStrategy.BUFFER)\n\n\n/**\n * 统一返回结果处理\n\n * @param <T>\n * *\n * @return\n</T> */\nfun <T> handleResult(): FlowableTransformer<HttpResponse<T>, T> =\n        FlowableTransformer { httpResponseFlowable ->\n            httpResponseFlowable\n                    .flatMap<T> { httpResponse ->\n                        if (httpResponse.code == 0) {\n                            httpResponse.data?.let { return@flatMap createData(it) }\n                            httpResponse.result?.let { return@flatMap createData(it) }\n                            return@flatMap Flowable.error <T>(ApiException(\"服务器返回error\"))\n                        } else {\n                            return@flatMap Flowable.error <T>(ApiException(\"服务器返回error\"))\n                        }\n                    }\n        }\n\n\n/**\n * 统一返回结果处理\n * @param <T>\n * @return\n */\nfun <T> handleListResult(): FlowableTransformer<HttpResponse<List<T>>, List<T>> =\n        FlowableTransformer { httpResponseFlowable ->\n            httpResponseFlowable\n                    .flatMap<List<T>> { httpResponse ->\n                        if (httpResponse.code == 0) {\n                            httpResponse.data?.let { return@flatMap createData(it) }\n                            httpResponse.result?.let { return@flatMap createData(it) }\n                            return@flatMap Flowable.error <List<T>>(ApiException(\"服务器返回error\"))\n                        } else {\n                            return@flatMap Flowable.error <List<T>>(ApiException(\"服务器返回error\"))\n                        }\n                    }\n        }\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/AppUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.content.Context;\nimport android.content.res.AssetManager;\nimport android.content.res.Resources;\nimport android.graphics.drawable.Drawable;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.support.annotation.ArrayRes;\nimport android.support.annotation.StringRes;\n\nimport java.util.Timer;\nimport java.util.TimerTask;\n\n/**\n * APP工具类\n * Created by zzq on 2016/12/17.\n */\npublic class AppUtils {\n\n    private static Context mContext;\n    private static Thread mUiThread;\n    private static Timer mTimer;\n\n    private static Handler sHandler = new Handler(Looper.getMainLooper());\n\n    public static void init(Context context) { //在Application中初始化\n        mContext = context;\n        mUiThread = Thread.currentThread();\n        mTimer = new Timer();\n    }\n\n\n    public static Context getAppContext() {\n        return mContext;\n    }\n\n    public static AssetManager getAssets() {\n        return mContext.getAssets();\n    }\n    public static float getDimension(int id) {\n        return getResource().getDimension(id);\n    }\n    public static Resources getResource() {\n        return mContext.getResources();\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public static Drawable getDrawable(int resId) {\n        return mContext.getResources().getDrawable(resId);\n    }\n\n    @SuppressWarnings(\"deprecation\")\n    public static int getColor(int resId) {\n        return mContext.getResources().getColor(resId);\n    }\n\n    public static String getString(@StringRes int resId) {\n        return mContext.getResources().getString(resId);\n    }\n\n    public static String[] getStringArray(@ArrayRes int resId) {\n        return mContext.getResources().getStringArray(resId);\n    }\n\n    public static boolean isUIThread() {\n        return Thread.currentThread() == mUiThread;\n    }\n\n    public static void runOnUI(Runnable r) {\n        sHandler.post(r);\n    }\n\n    public static void runOnUIDelayed(Runnable r, long delayMills) {\n        sHandler.postDelayed(r, delayMills);\n    }\n\n    public static void runOnUITask(TimerTask r, long delay, long rate) {\n        mTimer.schedule(r, delay, rate);\n    }\n\n    public static void runCancel() {\n        mTimer.cancel();\n    }\n\n    public static void removeRunnable(Runnable r) {\n        if (r == null) {\n            sHandler.removeCallbacksAndMessages(null);\n        } else {\n            sHandler.removeCallbacks(r);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/ClipboardUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.content.ClipData;\nimport android.content.ClipboardManager;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.net.Uri;\n\n/**\n * Created by zzq on 2016/12/17.\n * 剪贴板相关工具类\n */\npublic final class ClipboardUtils {\n\n    private ClipboardUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    /**\n     * 复制文本到剪贴板\n     *\n     * @param text 文本\n     */\n    public static void copyText(CharSequence text) {\n        ClipboardManager clipboard = (ClipboardManager) AppUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);\n        clipboard.setPrimaryClip(ClipData.newPlainText(\"text\", text));\n    }\n\n    /**\n     * 获取剪贴板的文本\n     *\n     * @return 剪贴板的文本\n     */\n    public static CharSequence getText() {\n        ClipboardManager clipboard = (ClipboardManager) AppUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);\n        ClipData clip = clipboard.getPrimaryClip();\n        if (clip != null && clip.getItemCount() > 0) {\n            return clip.getItemAt(0).coerceToText(AppUtils.getAppContext());\n        }\n        return null;\n    }\n\n    /**\n     * 复制uri到剪贴板\n     *\n     * @param uri uri\n     */\n    public static void copyUri(Uri uri) {\n        ClipboardManager clipboard = (ClipboardManager) AppUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);\n        clipboard.setPrimaryClip(ClipData.newUri(AppUtils.getAppContext().getContentResolver(), \"uri\", uri));\n    }\n\n    /**\n     * 获取剪贴板的uri\n     *\n     * @return 剪贴板的uri\n     */\n    public static Uri getUri() {\n        ClipboardManager clipboard = (ClipboardManager) AppUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);\n        ClipData clip = clipboard.getPrimaryClip();\n        if (clip != null && clip.getItemCount() > 0) {\n            return clip.getItemAt(0).getUri();\n        }\n        return null;\n    }\n\n    /**\n     * 复制意图到剪贴板\n     *\n     * @param intent 意图\n     */\n    public static void copyIntent(Intent intent) {\n        ClipboardManager clipboard = (ClipboardManager) AppUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);\n        clipboard.setPrimaryClip(ClipData.newIntent(\"intent\", intent));\n    }\n\n    /**\n     * 获取剪贴板的意图\n     *\n     * @return 剪贴板的意图\n     */\n    public static Intent getIntent() {\n        ClipboardManager clipboard = (ClipboardManager) AppUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);\n        ClipData clip = clipboard.getPrimaryClip();\n        if (clip != null && clip.getItemCount() > 0) {\n            return clip.getItemAt(0).getIntent();\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/CloseUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport java.io.Closeable;\nimport java.io.IOException;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2016/10/09\n *     desc  : 关闭相关工具类\n * </pre>\n */\npublic final class CloseUtils {\n\n    private CloseUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    /**\n     * 关闭IO\n     *\n     * @param closeables closeables\n     */\n    public static void closeIO(final Closeable... closeables) {\n        if (closeables == null) return;\n        for (Closeable closeable : closeables) {\n            if (closeable != null) {\n                try {\n                    closeable.close();\n                } catch (IOException e) {\n                    e.printStackTrace();\n                }\n            }\n        }\n    }\n\n    /**\n     * 安静关闭IO\n     *\n     * @param closeables closeables\n     */\n    public static void closeIOQuietly(final Closeable... closeables) {\n        if (closeables == null) return;\n        for (Closeable closeable : closeables) {\n            if (closeable != null) {\n                try {\n                    closeable.close();\n                } catch (IOException ignored) {\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/CrashHandler.java",
    "content": "\npackage com.yoyiyi.soleil.utils;\n\nimport android.content.Context;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.pm.PackageManager.NameNotFoundException;\nimport android.os.Build;\nimport android.os.Looper;\n\nimport java.io.File;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.io.Writer;\nimport java.lang.Thread.UncaughtExceptionHandler;\nimport java.lang.reflect.Field;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * 全局异常捕获，当程序发生Uncaught异常的时候,由该类来接管程序,并记录发送错误报告.\n * <p>\n * Created by zzq on 2016/12/17.\n */\npublic class CrashHandler implements UncaughtExceptionHandler {\n\n    //系统默认的UncaughtException处理类\n    private UncaughtExceptionHandler mDefaultHandler;\n    //CrashHandler实例\n    private static CrashHandler INSTANCE;\n    //程序的Context对象\n    private Context mContext;\n    //用来存储设备信息和异常信息\n    private Map<String, String> infos = new HashMap<>();\n\n    private CrashHandler() {\n    }\n\n    /**\n     * 获取CrashHandler实例 ,单例模式\n     */\n    public static CrashHandler getInstance() {\n        if (INSTANCE == null)\n            INSTANCE = new CrashHandler();\n        return INSTANCE;\n    }\n\n    /**\n     * 初始化\n     *\n     * @param context\n     */\n    public void init(Context context) {\n        mContext = context;\n        //获取系统默认的UncaughtException处理器\n        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();\n        //设置该CrashHandler为程序的默认处理器\n        Thread.setDefaultUncaughtExceptionHandler(this);\n    }\n\n    /**\n     * 当UncaughtException发生时会转入该函数来处理\n     */\n    @Override\n    public void uncaughtException(Thread thread, Throwable ex) {\n        if (!handleException(ex) && mDefaultHandler != null) {\n            //如果用户没有处理则让系统默认的异常处理器来处理\n            mDefaultHandler.uncaughtException(thread, ex);\n        } else {\n            new Thread(new Runnable() {\n                @Override\n                public void run() {\n                   Looper.prepare();\n                    ToastUtils.showSingleToast(\"哎呀，程序发生异常啦...\");\n                    Looper.loop();\n                }\n            }).start();\n\n            try {\n                Thread.sleep(3000);\n            } catch (InterruptedException e) {\n                LogUtils.e(\"CrashHandler.InterruptedException--->\" + e.toString());\n            }\n            //退出程序\n            android.os.Process.killProcess(android.os.Process.myPid());\n            System.exit(1);\n        }\n    }\n\n    /**\n     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.\n     *\n     * @param ex\n     * @return true:如果处理了该异常信息;否则返回false.\n     */\n    private boolean handleException(Throwable ex) {\n        if (ex == null) {\n            return false;\n        }\n        //收集设备参数信息\n        collectDeviceInfo(mContext);\n        //保存日志文件\n        saveCrashInfo2File(ex);\n        return true;\n    }\n\n    /**\n     * 收集设备参数信息\n     *\n     * @param ctx\n     */\n    public void collectDeviceInfo(Context ctx) {\n        try {\n            PackageManager pm = ctx.getPackageManager();\n            PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES);\n            if (pi != null) {\n                String versionName = pi.versionName == null ? \"null\" : pi.versionName;\n                String versionCode = pi.versionCode + \"\";\n                infos.put(\"versionName\", versionName);\n                infos.put(\"versionCode\", versionCode);\n            }\n        } catch (NameNotFoundException e) {\n            LogUtils.e(\"CrashHandleran.NameNotFoundException---> error occured when collect package info\", e);\n        }\n        Field[] fields = Build.class.getDeclaredFields();\n        for (Field field : fields) {\n            try {\n                field.setAccessible(true);\n                infos.put(field.getName(), field.get(null).toString());\n            } catch (Exception e) {\n                LogUtils.e(\"CrashHandler.NameNotFoundException---> an error occured when collect crash info\", e);\n            }\n        }\n    }\n\n    /**\n     * 保存错误信息到文件中\n     *\n     * @param ex\n     * @return 返回文件名称\n     */\n    private void saveCrashInfo2File(Throwable ex) {\n        StringBuilder sb = new StringBuilder();\n        sb.append(\"<<<<<<<<<<<<<<<----START---->>>>>>>>>>>>>>>>>>\" + \"\\n\");\n        for (Map.Entry<String, String> entry : infos.entrySet()) {\n            String key = entry.getKey();\n            String value = entry.getValue();\n            sb.append(key + \"=\" + value + \"\\n\");\n        }\n        Writer writer = new StringWriter();\n        PrintWriter printWriter = new PrintWriter(writer);\n        ex.printStackTrace(printWriter);\n        Throwable cause = ex.getCause();\n        while (cause != null) {\n            cause.printStackTrace(printWriter);\n            cause = cause.getCause();\n        }\n        printWriter.close();\n        String result = writer.toString();\n        sb.append(result);\n        sb.append(\"<<<<<<<<<<<<<<<<<----END---->>>>>>>>>>>>>>>>>>\" + \"\\n\");\n        LogUtils.e(sb.toString());\n        SimpleDateFormat format = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n        String fileName = format.format(new Date()) + \".txt\";\n        File file = new File(FileUtils.createRootPath(mContext) + \"/log/\" + fileName);\n        FileUtils.createFile(file);\n        FileUtils.writeFile(file.getAbsolutePath(), sb.toString());\n        //保存本地数据库\n        //上传文件到服务器\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/DimenUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.graphics.Point;\nimport android.os.Build;\nimport android.util.DisplayMetrics;\nimport android.view.Display;\nimport android.view.WindowManager;\n\n/**\n * Created by zzq on 2016/12/17.\n */\npublic class DimenUtils {\n\n    public enum EScreenDensity {\n        XXHDPI,    //超高分辨率    1080×1920\n        XHDPI,    //超高分辨率    720×1280\n        HDPI,    //高分辨率         480×800\n        MDPI,    //中分辨率         320×480\n    }\n\n    public static EScreenDensity getDisply(Context context) {\n        EScreenDensity eScreenDensity;\n        //初始化屏幕密度\n        DisplayMetrics dm = context.getApplicationContext().getResources().getDisplayMetrics();\n        int densityDpi = dm.densityDpi;\n\n        if (densityDpi <= 160) {\n            eScreenDensity = EScreenDensity.MDPI;\n        } else if (densityDpi <= 240) {\n            eScreenDensity = EScreenDensity.HDPI;\n        } else if (densityDpi < 400) {\n            eScreenDensity = EScreenDensity.XHDPI;\n        } else {\n            eScreenDensity = EScreenDensity.XXHDPI;\n        }\n        return eScreenDensity;\n    }\n\n    /**\n     * 获取屏幕宽度\n     *\n     * @return\n     */\n    public static int getScreenWidth() {\n        return AppUtils.getAppContext().getResources().getDisplayMetrics().widthPixels;\n    }\n\n    /**\n     * 获取屏幕高度\n     *\n     * @return\n     */\n    public static int getScreenHeight() {\n        return AppUtils.getAppContext().getResources().getDisplayMetrics().heightPixels;\n    }\n\n    /**\n     * 将dp转换成px\n     *\n     * @param dp\n     * @return\n     */\n    public static float dp2Px(float dp) {\n        return dp * AppUtils.getAppContext().getResources().getDisplayMetrics().density;\n    }\n\n    public static int dp2PxInt(float dp) {\n        return (int) (dp2Px(dp) + 0.5f);\n    }\n\n    /**\n     * 将px转换成dp\n     *\n     * @param px\n     * @return\n     */\n    public static float px2Dp(float px) {\n        return px / AppUtils.getAppContext().getResources().getDisplayMetrics().density;\n    }\n\n    public static int px2DpInt(float px) {\n        return (int) (px2Dp(px) + 0.5f);\n    }\n\n    /**\n     * 将px值转换为sp值\n     *\n     * @param pxValue\n     * @return\n     */\n    public static float px2Sp(float pxValue) {\n        return pxValue / AppUtils.getAppContext().getResources().getDisplayMetrics().scaledDensity;\n    }\n\n    /**\n     * 将sp值转换为px值\n     *\n     * @param spValue\n     * @return\n     */\n    public static float sp2Px(float spValue) {\n        return spValue * AppUtils.getAppContext().getResources().getDisplayMetrics().scaledDensity;\n    }\n    /**\n     * 获取屏幕尺寸\n     */\n    @SuppressWarnings(\"deprecation\")\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)\n    public static Point getScreenSize(Context context){\n        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);\n        Display display = windowManager.getDefaultDisplay();\n        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2){\n            return new Point(display.getWidth(), display.getHeight());\n        }else{\n            Point point = new Point();\n            display.getSize(point);\n            return point;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/EmptyUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.os.Build;\nimport android.util.SparseArray;\nimport android.util.SparseBooleanArray;\nimport android.util.SparseIntArray;\nimport android.util.SparseLongArray;\n\nimport java.lang.reflect.Array;\nimport java.util.Collection;\nimport java.util.Map;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2016/9/28\n *     desc  : 判空相关工具类\n * </pre>\n */\npublic final class EmptyUtils {\n\n    private EmptyUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    /**\n     * 判断对象是否为空\n     *\n     * @param obj 对象\n     * @return {@code true}: 为空<br>{@code false}: 不为空\n     */\n    public static boolean isEmpty(Object obj) {\n        if (obj == null) {\n            return true;\n        }\n        if (obj instanceof String && obj.toString().length() == 0) {\n            return true;\n        }\n        if (obj.getClass().isArray() && Array.getLength(obj) == 0) {\n            return true;\n        }\n        if (obj instanceof Collection && ((Collection) obj).isEmpty()) {\n            return true;\n        }\n        if (obj instanceof Map && ((Map) obj).isEmpty()) {\n            return true;\n        }\n        if (obj instanceof SparseArray && ((SparseArray) obj).size() == 0) {\n            return true;\n        }\n        if (obj instanceof SparseBooleanArray && ((SparseBooleanArray) obj).size() == 0) {\n            return true;\n        }\n        if (obj instanceof SparseIntArray && ((SparseIntArray) obj).size() == 0) {\n            return true;\n        }\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {\n            if (obj instanceof SparseLongArray && ((SparseLongArray) obj).size() == 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * 判断对象是否非空\n     *\n     * @param obj 对象\n     * @return {@code true}: 非空<br>{@code false}: 空\n     */\n    public static boolean isNotEmpty(Object obj) {\n        return !isEmpty(obj);\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/FileUtils.java",
    "content": "\npackage com.yoyiyi.soleil.utils;\n\nimport android.content.Context;\nimport android.content.res.AssetManager;\nimport android.os.Environment;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.io.OutputStreamWriter;\nimport java.nio.channels.FileChannel;\n\n/**\n * Created by zzq on 2016/12/17.\n */\npublic class FileUtils {\n    /**\n     * 创建根缓存目录\n     *\n     * @return\n     */\n    public static String createRootPath(Context context) {\n        String cacheRootPath = \"\";\n        if (isSdCardAvailable()) {\n            // /sdcard/Android/data/<application package>/cache\n            cacheRootPath = context.getExternalCacheDir().getPath();\n        } else {\n            // /data/data/<application package>/cache\n            cacheRootPath = context.getCacheDir().getPath();\n        }\n        return cacheRootPath;\n    }\n\n    /**\n     * 判断是否有SD卡\n     *\n     * @return\n     */\n    public static boolean isSdCardAvailable() {\n        return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());\n    }\n\n    /**\n     * 递归创建文件夹\n     *\n     * @param dirPath\n     * @return 创建失败返回\"\"\n     */\n    public static String createDir(String dirPath) {\n        try {\n            File file = new File(dirPath);\n            if (file.getParentFile().exists()) {\n                LogUtils.i(\"----- 创建文件夹\" + file.getAbsolutePath());\n                file.mkdir();\n                return file.getAbsolutePath();\n            } else {\n                createDir(file.getParentFile().getAbsolutePath());\n                LogUtils.i(\"----- 创建文件夹\" + file.getAbsolutePath());\n                file.mkdir();\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return dirPath;\n    }\n\n    /**\n     * 递归创建文件夹\n     *\n     * @param file\n     * @return 创建失败返回\"\"\n     */\n    public static String createFile(File file) {\n        try {\n            if (file.getParentFile().exists()) {\n                LogUtils.i(\"----- 创建文件\" + file.getAbsolutePath());\n                file.createNewFile();\n                return file.getAbsolutePath();\n            } else {\n                createDir(file.getParentFile().getAbsolutePath());\n                file.createNewFile();\n                LogUtils.i(\"----- 创建文件\" + file.getAbsolutePath());\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return \"\";\n    }\n\n    public static void writeFile(String filePathAndName, String fileContent) {\n        try {\n            OutputStream outstream = new FileOutputStream(filePathAndName);\n            OutputStreamWriter out = new OutputStreamWriter(outstream);\n            out.write(fileContent);\n            out.close();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n\n\n    /**\n     * 文件拷贝\n     *\n     * @param src  源文件\n     * @param desc 目的文件\n     */\n    public static void fileChannelCopy(File src, File desc) {\n        FileInputStream fi = null;\n        FileOutputStream fo = null;\n        try {\n            fi = new FileInputStream(src);\n            fo = new FileOutputStream(desc);\n            FileChannel in = fi.getChannel();//得到对应的文件通道\n            FileChannel out = fo.getChannel();//得到对应的文件通道\n            in.transferTo(0, in.size(), out);//连接两个通道，并且从in通道读取，然后写入out通道\n        } catch (IOException e) {\n            e.printStackTrace();\n        } finally {\n            try {\n                if (fo != null) fo.close();\n                if (fi != null) fi.close();\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    /**\n     * 打开Asset下的文件\n     *\n     * @param context\n     * @param fileName\n     * @return\n     */\n    public static InputStream openAssetFile(Context context, String fileName) {\n        AssetManager am = context.getAssets();\n        InputStream is = null;\n        try {\n            is = am.open(fileName);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return is;\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/IMEUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.os.Build;\nimport android.view.View;\nimport android.view.inputmethod.InputMethodManager;\n\n/**\n * 软键盘工具类\n * <p>\n * Created by zzq on 2016/12/17.\n */\n@TargetApi(Build.VERSION_CODES.CUPCAKE)\npublic class IMEUtils {\n\n    /**\n     * 切换键盘显示/隐藏状态\n     *\n     * @param context\n     */\n    public static void toggleSoftInput(Context context) {\n        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);\n        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);\n    }\n\n    /**\n     * 显示键盘\n     *\n     * @param view\n     * @return\n     */\n    public static boolean showSoftInput(View view) {\n        InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);\n        return imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);\n    }\n\n    public static boolean showSoftInput(Activity activity) {\n        View view = activity.getCurrentFocus();\n        if (view != null) {\n            InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(\n                    Context.INPUT_METHOD_SERVICE);\n            return imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);\n        }\n        return false;\n    }\n\n    /**\n     * 隐藏键盘\n     *\n     * @param view\n     * @return\n     */\n    public static boolean hideSoftInput(View view) {\n        InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);\n        return imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\n    }\n\n    public static boolean hideSoftInput(Activity activity) {\n        if (activity.getCurrentFocus() != null) {\n            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);\n            return imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);\n        }\n        return false;\n    }\n\n    /**\n     * 判断键盘是否打开\n     *\n     * @param context\n     * @return\n     */\n    public static boolean isActive(Context context) {\n        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);\n        return imm.isActive();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/IOUtils.java",
    "content": "\npackage com.yoyiyi.soleil.utils;\n\nimport java.io.BufferedInputStream;\nimport java.io.BufferedOutputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.Closeable;\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\n\n/**\n * IO工具类\n *\n * @author yuyh.\n * @date 16/4/9.\n */\npublic class IOUtils {\n\n    /**\n     * 关闭io对象\n     *\n     * @param closeable\n     */\n    public static void close(Closeable closeable) {\n        if (closeable != null) {\n            try {\n                closeable.close();\n            } catch (IOException e) {\n                throw new RuntimeException(\"IOException occurred. \", e);\n            }\n        }\n    }\n\n    /**\n     * 输入流保存到文件\n     *\n     * @param source     输入流来源\n     * @param targetPath 目标文件路径\n     * @return 文件路径\n     */\n    public String stream2file(InputStream source, String targetPath) {\n        File target = new File(targetPath);\n        BufferedInputStream inBuff = null;\n        BufferedOutputStream outBuff = null;\n        try {\n            if (!target.exists()) {\n                String dir = targetPath.substring(0, targetPath.lastIndexOf(\"/\"));\n                new File(dir).mkdirs();\n                try {\n                    target.createNewFile();\n                } catch (IOException e) {\n                    e.printStackTrace();\n                }\n            }\n            inBuff = new BufferedInputStream(source);\n            outBuff = new BufferedOutputStream(new FileOutputStream(target));\n            byte[] b = new byte[1024 * 5];\n            int len;\n            while ((len = inBuff.read(b)) != -1) {\n                outBuff.write(b, 0, len);\n            }\n            outBuff.flush();\n        } catch (IOException e) {\n            e.printStackTrace();\n        } finally {\n            try {\n                if (inBuff != null) {\n                    inBuff.close();\n                }\n                if (outBuff != null) {\n                    outBuff.close();\n                }\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n        if (target.length() > 0) {\n            return target.getAbsolutePath();\n        } else {\n            target.delete();\n            return null;\n        }\n    }\n\n    /**\n     * 字节数组转输入流\n     *\n     * @param data 字节数组\n     * @return 输入流\n     */\n    public InputStream Byte2InputStream(byte[] data) {\n        ByteArrayInputStream bais = new ByteArrayInputStream(data);\n        return bais;\n    }\n\n    /**\n     * 输入流转字节数组\n     *\n     * @param is 输入流\n     * @return 字节数组\n     */\n    public byte[] InputStream2Bytes(InputStream is) {\n        String str = \"\";\n        byte[] readByte = new byte[1024];\n        try {\n            while (is.read(readByte, 0, 1024) != -1) {\n                str += new String(readByte).trim();\n            }\n            return str.getBytes();\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return null;\n    }\n\n    /**\n     * 输入流转字符串\n     *\n     * @param inputStream inputStream\n     * @return 字符串转换之后的\n     */\n    public static String streamToString(InputStream inputStream) {\n        try {\n            ByteArrayOutputStream out = new ByteArrayOutputStream();\n\n            byte[] buffer = new byte[1024];\n            int len = 0;\n            while ((len = inputStream.read(buffer)) != -1) {\n                out.write(buffer, 0, len);\n                out.flush();\n            }\n\n            String result = out.toString();\n            out.close();\n            inputStream.close();\n            return result;\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return \"\";\n    }\n\n    /**\n     * 读文件到字节数组\n     *\n     * @param file\n     * @return\n     * @throws IOException\n     */\n    public static byte[] getFileBytes(File file) throws IOException {\n        BufferedInputStream bis = null;\n        try {\n            bis = new BufferedInputStream(new FileInputStream(file));\n            int bytes = (int) file.length();\n            byte[] buffer = new byte[bytes];\n            int readBytes = bis.read(buffer);\n            if (readBytes != buffer.length) {\n                throw new IOException(\"Entire file not read\");\n            }\n            return buffer;\n        } finally {\n            if (bis != null) {\n                bis.close();\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/JsonUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport java.io.InputStream;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/31 11:15\n * 描述:\n */\n\npublic class JsonUtils {\n    public static String readJson(String jsonFile) {\n        InputStream inputStream = FileUtils.openAssetFile(AppUtils.getAppContext(), jsonFile);\n        String jsonStr = IOUtils.streamToString(inputStream);\n        return jsonStr;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/LogUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.os.Environment;\nimport android.util.Log;\n\nimport java.io.BufferedWriter;\nimport java.io.File;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.text.SimpleDateFormat;\nimport java.util.Calendar;\nimport java.util.Date;\n\n/**\n * Log工具类，可控制Log输出开关、保存Log到文件、过滤输出等级\n * Created by zzq on 2017/1/17.\n */\npublic class LogUtils {\n    private static Boolean LOG_SWITCH = true; // 日志文件总开关\n    private static Boolean LOG_TO_FILE = false; // 日志写入文件开关\n    private static String LOG_TAG = \"TAG\"; // 默认的tag\n    private static char LOG_TYPE = 'v';// 输入日志类型，v代表输出所有信息,w则只输出警告...\n    private static int LOG_SAVE_DAYS = 7;// sd卡中日志文件的最多保存天数\n\n    @SuppressLint(\"SimpleDateFormat\")\n    private final static SimpleDateFormat LOG_FORMAT = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");// 日志的输出格式\n    @SuppressLint(\"SimpleDateFormat\")\n    private final static SimpleDateFormat FILE_SUFFIX = new SimpleDateFormat(\"yyyy-MM-dd\");// 日志文件格式\n    private static String LOG_FILE_PATH; // 日志文件保存路径\n    private static String LOG_FILE_NAME;// 日志文件保存名称\n\n    public static void init(Context context) { // 在Application中初始化\n        LOG_FILE_PATH = Environment.getExternalStorageDirectory().getPath() + File.separator + context.getPackageName();\n        LOG_FILE_NAME = \"Log\";\n    }\n\n    /****************************\n     * Warn\n     *********************************/\n    public static void w(Object msg) {\n        w(LOG_TAG, msg);\n    }\n\n    public static void w(String tag, Object msg) {\n        w(tag, msg, null);\n    }\n\n    public static void w(String tag, Object msg, Throwable tr) {\n        log(tag, msg.toString(), tr, 'w');\n    }\n\n    /***************************\n     * Error\n     ********************************/\n    public static void e(Object msg) {\n        e(LOG_TAG, msg);\n    }\n\n    public static void e(String tag, Object msg) {\n        e(tag, msg, null);\n    }\n\n    public static void e(String tag, Object msg, Throwable tr) {\n        log(tag, msg.toString(), tr, 'e');\n    }\n\n    /***************************\n     * Debug\n     ********************************/\n    public static void d(Object msg) {\n        d(LOG_TAG, msg);\n    }\n\n    public static void d(String tag, Object msg) {// 调试信息\n        d(tag, msg, null);\n    }\n\n    public static void d(String tag, Object msg, Throwable tr) {\n        log(tag, msg.toString(), tr, 'd');\n    }\n\n    /****************************\n     * Info\n     *********************************/\n    public static void i(Object msg) {\n        i(LOG_TAG, msg);\n    }\n\n    public static void i(String tag, Object msg) {\n        i(tag, msg, null);\n    }\n\n    public static void i(String tag, Object msg, Throwable tr) {\n        log(tag, msg == null ? null : msg.toString(), tr, 'i');\n    }\n\n    /**************************\n     * Verbose\n     ********************************/\n    public static void v(Object msg) {\n        v(LOG_TAG, msg);\n    }\n\n    public static void v(String tag, Object msg) {\n        v(tag, msg, null);\n    }\n\n    public static void v(String tag, Object msg, Throwable tr) {\n        log(tag, msg.toString(), tr, 'v');\n    }\n\n    /**\n     * 根据tag, msg和等级，输出日志\n     *\n     * @param tag\n     * @param msg\n     * @param level\n     */\n    private static void log(String tag, String msg, Throwable tr, char level) {\n        if (LOG_SWITCH) {\n            if ('e' == level && ('e' == LOG_TYPE || 'v' == LOG_TYPE)) { // 输出错误信息\n                Log.e(tag, msg, tr);\n            } else if ('w' == level && ('w' == LOG_TYPE || 'v' == LOG_TYPE)) {\n                Log.w(tag, msg, tr);\n            } else if ('d' == level && ('d' == LOG_TYPE || 'v' == LOG_TYPE)) {\n                Log.d(tag, msg, tr);\n            } else if ('i' == level && ('d' == LOG_TYPE || 'v' == LOG_TYPE)) {\n                Log.i(tag, msg, tr);\n            } else {\n                Log.v(tag, msg, tr);\n            }\n            if (LOG_TO_FILE)\n                log2File(String.valueOf(level), tag, msg + tr == null ? \"\" : \"\\n\" + Log.getStackTraceString(tr));\n        }\n    }\n\n    /**\n     * 打开日志文件并写入日志\n     *\n     * @return\n     **/\n    private synchronized static void log2File(String mylogtype, String tag, String text) {\n        Date nowtime = new Date();\n        String date = FILE_SUFFIX.format(nowtime);\n        String dateLogContent = LOG_FORMAT.format(nowtime) + \":\" + mylogtype + \":\" + tag + \":\" + text; // 日志输出格式\n        File destDir = new File(LOG_FILE_PATH);\n        if (!destDir.exists()) {\n            destDir.mkdirs();\n        }\n        File file = new File(LOG_FILE_PATH, LOG_FILE_NAME + date);\n        try {\n            FileWriter filerWriter = new FileWriter(file, true);\n            BufferedWriter bufWriter = new BufferedWriter(filerWriter);\n            bufWriter.write(dateLogContent);\n            bufWriter.newLine();\n            bufWriter.close();\n            filerWriter.close();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n\n    /**\n     * 删除指定的日志文件\n     */\n    public static void delFile() {// 删除日志文件\n        String needDelFiel = FILE_SUFFIX.format(getDateBefore());\n        File file = new File(LOG_FILE_PATH, needDelFiel + LOG_FILE_NAME);\n        if (file.exists()) {\n            file.delete();\n        }\n    }\n\n    /**\n     * 得到LOG_SAVE_DAYS天前的日期\n     *\n     * @return\n     */\n    private static Date getDateBefore() {\n        Date nowtime = new Date();\n        Calendar now = Calendar.getInstance();\n        now.setTime(nowtime);\n        now.set(Calendar.DATE, now.get(Calendar.DATE) - LOG_SAVE_DAYS);\n        return now.getTime();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/NumberUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/21 23:11\n * 描述:装换\n */\npublic class NumberUtils {\n    public static String format   (String num) {\n        Integer integer = Integer.valueOf(num);\n        if (integer < 10000) {\n            return String.valueOf(num);\n        }\n        String unit = \"万\";\n        double newNum = integer / 10000.0;\n        String numStr = String.format(\"%.\" + 1 + \"f\", newNum);\n        return numStr + unit;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/PrefsUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.SuppressLint;\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.os.Build;\nimport android.util.Base64;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.ObjectInputStream;\nimport java.io.ObjectOutputStream;\nimport java.io.StreamCorruptedException;\nimport java.util.Map;\nimport java.util.Set;\n\n/**\n * Created by zzq on 2016/8/13.\n */\npublic class PrefsUtils {\n\n    private static PrefsUtils prefsUtil;\n    public Context context;\n    public SharedPreferences prefs;\n    public SharedPreferences.Editor editor;\n\n    public synchronized static PrefsUtils getInstance() {\n        return prefsUtil;\n    }\n\n    @SuppressLint(\"CommitPrefEdits\")\n    public static void init(Context context, String prefsname, int mode) {\n        prefsUtil = new PrefsUtils();\n        prefsUtil.context = context;\n        prefsUtil.prefs = prefsUtil.context.getSharedPreferences(prefsname, mode);\n        prefsUtil.editor = prefsUtil.prefs.edit();\n    }\n\n    private PrefsUtils() {\n    }\n\n\n    public boolean getBoolean(String key, boolean defaultVal) {\n        return this.prefs.getBoolean(key, defaultVal);\n    }\n\n    public boolean getBoolean(String key) {\n        return this.prefs.getBoolean(key, false);\n    }\n\n\n    public String getString(String key, String defaultVal) {\n        return this.prefs.getString(key, defaultVal);\n    }\n\n    public String getString(String key) {\n        return this.prefs.getString(key, null);\n    }\n\n    public int getInt(String key, int defaultVal) {\n        return this.prefs.getInt(key, defaultVal);\n    }\n\n    public int getInt(String key) {\n        return this.prefs.getInt(key, 0);\n    }\n\n\n    public float getFloat(String key, float defaultVal) {\n        return this.prefs.getFloat(key, defaultVal);\n    }\n\n    public float getFloat(String key) {\n        return this.prefs.getFloat(key, 0f);\n    }\n\n    public long getLong(String key, long defaultVal) {\n        return this.prefs.getLong(key, defaultVal);\n    }\n\n    public long getLong(String key) {\n        return this.prefs.getLong(key, 0l);\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)//Api 11\n    public Set<String> getStringSet(String key, Set<String> defaultVal) {\n        return this.prefs.getStringSet(key, defaultVal);\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)//Api 11\n    public Set<String> getStringSet(String key) {\n        return this.prefs.getStringSet(key, null);\n    }\n\n    public Map<String, ?> getAll() {\n        return this.prefs.getAll();\n    }\n\n    public boolean exists(String key) {\n        return prefs.contains(key);\n    }\n\n\n    public PrefsUtils putString(String key, String value) {\n        editor.putString(key, value);\n        editor.commit();\n        return this;\n    }\n\n    public PrefsUtils putInt(String key, int value) {\n        editor.putInt(key, value);\n        editor.commit();\n        return this;\n    }\n\n    public PrefsUtils putFloat(String key, float value) {\n        editor.putFloat(key, value);\n        editor.commit();\n        return this;\n    }\n\n    public PrefsUtils putLong(String key, long value) {\n        editor.putLong(key, value);\n        editor.commit();\n        return this;\n    }\n\n    public PrefsUtils putBoolean(String key, boolean value) {\n        editor.putBoolean(key, value);\n        editor.commit();\n        return this;\n    }\n\n    public void commit() {\n        editor.commit();\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    public PrefsUtils putStringSet(String key, Set<String> value) {\n        editor.putStringSet(key, value);\n        editor.commit();\n        return this;\n    }\n\n    /**\n     * 保存Object\n     * @param key\n     * @param object\n     */\n    public void putObject(String key, Object object) {\n        ByteArrayOutputStream baos = new ByteArrayOutputStream();\n        ObjectOutputStream out = null;\n        try {\n            out = new ObjectOutputStream(baos);\n            out.writeObject(object);\n            String objectVal = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));\n            editor.putString(key, objectVal);\n            editor.commit();\n        } catch (IOException e) {\n            e.printStackTrace();\n        } finally {\n            try {\n                if (baos != null) {\n                    baos.close();\n                }\n                if (out != null) {\n                    out.close();\n                }\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    public <T> T getObject(String key, Class<T> clazz) {\n        if (prefs.contains(key)) {\n            String objectVal = prefs.getString(key, null);\n            byte[] buffer = Base64.decode(objectVal, Base64.DEFAULT);\n            ByteArrayInputStream bais = new ByteArrayInputStream(buffer);\n            ObjectInputStream ois = null;\n            try {\n                ois = new ObjectInputStream(bais);\n                T t = (T) ois.readObject();\n                return t;\n            } catch (StreamCorruptedException e) {\n                e.printStackTrace();\n            } catch (IOException e) {\n                e.printStackTrace();\n            } catch (ClassNotFoundException e) {\n                e.printStackTrace();\n            } finally {\n                try {\n                    if (bais != null) {\n                        bais.close();\n                    }\n                    if (ois != null) {\n                        ois.close();\n                    }\n                } catch (IOException e) {\n                    e.printStackTrace();\n                }\n            }\n        }\n        return null;\n    }\n\n    public PrefsUtils remove(String key) {\n        editor.remove(key);\n        editor.commit();\n        return this;\n    }\n\n    public PrefsUtils removeAll() {\n        editor.clear();\n        editor.commit();\n        return this;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/SnackbarUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.LayoutRes;\nimport android.support.design.widget.Snackbar;\nimport android.text.SpannableString;\nimport android.text.Spanned;\nimport android.text.style.ForegroundColorSpan;\nimport android.view.Gravity;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport java.lang.ref.WeakReference;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/27 14:53\n * 描述:SnackbarUtils 工具类\n */\n\npublic class SnackbarUtils {\n    private SnackbarUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    private static WeakReference<Snackbar> snackbarWeakReference;\n\n    /**\n     * 显示短时snackbar\n     *\n     * @param parent    父视图(CoordinatorLayout或者DecorView)\n     * @param text      文本\n     * @param textColor 文本颜色\n     * @param bgColor   背景色\n     */\n    public static void showShort(View parent,\n                                 CharSequence text,\n                                 @ColorInt int textColor,\n                                 @ColorInt int bgColor) {\n        show(parent,\n                text,\n                Snackbar.LENGTH_SHORT,\n                textColor,\n                bgColor,\n                null,\n                -1,\n                null);\n    }\n\n    /**\n     * 显示短时snackbar\n     *\n     * @param parent          父视图(CoordinatorLayout或者DecorView)\n     * @param text            文本\n     * @param textColor       文本颜色\n     * @param bgColor         背景色\n     * @param actionText      事件文本\n     * @param actionTextColor 事件文本颜色\n     * @param listener        监听器\n     */\n    public static void showShort(View parent,\n                                 CharSequence text,\n                                 @ColorInt int textColor,\n                                 @ColorInt int bgColor,\n                                 CharSequence actionText,\n                                 @ColorInt int actionTextColor,\n                                 View.OnClickListener listener) {\n        show(parent,\n                text,\n                Snackbar.LENGTH_SHORT,\n                textColor,\n                bgColor,\n                actionText,\n                actionTextColor,\n                listener);\n    }\n\n    /**\n     * 显示长时snackbar\n     *\n     * @param parent    视图(CoordinatorLayout或者DecorView)\n     * @param text      文本\n     * @param textColor 文本颜色\n     * @param bgColor   背景色\n     */\n    public static void showLong(View parent,\n                                CharSequence text,\n                                @ColorInt int textColor,\n                                @ColorInt int bgColor) {\n        show(parent,\n                text,\n                Snackbar.LENGTH_LONG,\n                textColor,\n                bgColor,\n                null,\n                -1,\n                null);\n    }\n\n    /**\n     * 显示长时snackbar\n     *\n     * @param parent          视图(CoordinatorLayout或者DecorView)\n     * @param text            文本\n     * @param textColor       文本颜色\n     * @param bgColor         背景色\n     * @param actionText      事件文本\n     * @param actionTextColor 事件文本颜色\n     * @param listener        监听器\n     */\n    public static void showLong(View parent,\n                                CharSequence text,\n                                @ColorInt int textColor,\n                                @ColorInt int bgColor,\n                                CharSequence actionText,\n                                @ColorInt int actionTextColor,\n                                View.OnClickListener listener) {\n        show(parent,\n                text,\n                Snackbar.LENGTH_LONG,\n                textColor,\n                bgColor,\n                actionText,\n                actionTextColor,\n                listener);\n    }\n\n    /**\n     * 显示自定义时长snackbar\n     *\n     * @param parent    父视图(CoordinatorLayout或者DecorView)\n     * @param text      文本\n     * @param textColor 文本颜色\n     * @param bgColor   背景色\n     */\n    public static void showIndefinite(View parent,\n                                      CharSequence text,\n                                      @ColorInt int textColor,\n                                      @ColorInt int bgColor) {\n        show(parent,\n                text,\n                Snackbar.LENGTH_INDEFINITE,\n                textColor,\n                bgColor,\n                null,\n                -1,\n                null);\n    }\n\n    /**\n     * 显示自定义时长snackbar\n     *\n     * @param parent          父视图(CoordinatorLayout或者DecorView)\n     * @param text            文本\n     * @param textColor       文本颜色\n     * @param bgColor         背景色\n     * @param actionText      事件文本\n     * @param actionTextColor 事件文本颜色\n     * @param listener        监听器\n     */\n    public static void showIndefinite(View parent,\n                                      CharSequence text,\n                                      @ColorInt int textColor,\n                                      @ColorInt int bgColor,\n                                      CharSequence actionText,\n                                      @ColorInt int actionTextColor,\n                                      View.OnClickListener listener) {\n        show(parent,\n                text,\n                Snackbar.LENGTH_INDEFINITE,\n                textColor,\n                bgColor,\n                actionText,\n                actionTextColor,\n                listener);\n    }\n\n    /**\n     * 设置snackbar文字和背景颜色\n     *\n     * @param parent          父视图(CoordinatorLayout或者DecorView)\n     * @param text            文本\n     * @param duration        显示时长\n     * @param textColor       文本颜色\n     * @param bgColor         背景色\n     * @param actionText      事件文本\n     * @param actionTextColor 事件文本颜色\n     * @param listener        监听器\n     */\n    private static void show(View parent,\n                             CharSequence text,\n                             int duration,\n                             @ColorInt int textColor,\n                             @ColorInt int bgColor,\n                             CharSequence actionText,\n                             @ColorInt int actionTextColor,\n                             View.OnClickListener listener) {\n        SpannableString spannableString = new SpannableString(text);\n        ForegroundColorSpan colorSpan = new ForegroundColorSpan(textColor);\n        spannableString.setSpan(colorSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);\n        snackbarWeakReference = new WeakReference<>(Snackbar.make(parent, spannableString, duration));\n        Snackbar snackbar = snackbarWeakReference.get();\n        View view = snackbar.getView();\n        view.setBackgroundColor(bgColor);\n        if (actionText != null && actionText.length() > 0 && listener != null) {\n            snackbar.setActionTextColor(actionTextColor);\n            snackbar.setAction(actionText, listener);\n        }\n        snackbar.show();\n    }\n\n    /**\n     * 为snackbar添加布局\n     * <p>在show...Snackbar之后调用</p>\n     *\n     * @param layoutId 布局文件\n     * @param index    位置(the position at which to add the child or -1 to add last)\n     */\n    public static void addView(@LayoutRes int layoutId, int index) {\n        Snackbar snackbar = snackbarWeakReference.get();\n        if (snackbar != null) {\n            View view = snackbar.getView();\n            Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) view;\n            View child = LayoutInflater.from(view.getContext()).inflate(layoutId, null);\n            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(\n                    LinearLayout.LayoutParams.WRAP_CONTENT,\n                    LinearLayout.LayoutParams.WRAP_CONTENT);\n            params.gravity = Gravity.CENTER_VERTICAL;\n            layout.addView(child, index, params);\n        }\n    }\n\n    /**\n     * 为snackbar添加布局\n     * <p>在show...Snackbar之后调用</p>\n     *\n     * @param child  要添加的view\n     * @param index  位置(the position at which to add the child or -1 to add last)\n     * @param params 布局参数\n     */\n    public static void addView(View child, int index, ViewGroup.LayoutParams params) {\n        Snackbar snackbar = snackbarWeakReference.get();\n        if (snackbar != null) {\n            View view = snackbar.getView();\n            Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) view;\n            layout.addView(child, index, params);\n        }\n    }\n\n    /**\n     * 取消snackbar显示\n     */\n    public static void dismiss() {\n        if (snackbarWeakReference != null && snackbarWeakReference.get() != null) {\n            snackbarWeakReference.get().dismiss();\n            snackbarWeakReference = null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/SnakBarUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.support.design.widget.Snackbar;\nimport android.view.View;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/15 11:59\n * 描述:\n */\n\npublic class SnakBarUtils {\n    public static void showMessage(View view, String text) {\n        Snackbar.make(view, text, Snackbar.LENGTH_LONG).show();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/SpanUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.BlurMaskFilter;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.PixelFormat;\nimport android.graphics.Rect;\nimport android.graphics.Shader;\nimport android.graphics.Typeface;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.DrawableRes;\nimport android.support.annotation.FloatRange;\nimport android.support.annotation.IntDef;\nimport android.support.annotation.IntRange;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.v4.content.ContextCompat;\nimport android.text.Layout;\nimport android.text.Layout.Alignment;\nimport android.text.SpannableStringBuilder;\nimport android.text.Spanned;\nimport android.text.TextPaint;\nimport android.text.style.AbsoluteSizeSpan;\nimport android.text.style.AlignmentSpan;\nimport android.text.style.BackgroundColorSpan;\nimport android.text.style.CharacterStyle;\nimport android.text.style.ClickableSpan;\nimport android.text.style.ForegroundColorSpan;\nimport android.text.style.LeadingMarginSpan;\nimport android.text.style.MaskFilterSpan;\nimport android.text.style.RelativeSizeSpan;\nimport android.text.style.ReplacementSpan;\nimport android.text.style.ScaleXSpan;\nimport android.text.style.StrikethroughSpan;\nimport android.text.style.StyleSpan;\nimport android.text.style.SubscriptSpan;\nimport android.text.style.SuperscriptSpan;\nimport android.text.style.TypefaceSpan;\nimport android.text.style.URLSpan;\nimport android.text.style.UnderlineSpan;\nimport android.text.style.UpdateAppearance;\nimport android.util.Log;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.RetentionPolicy;\nimport java.lang.ref.WeakReference;\n\nimport static android.graphics.BlurMaskFilter.Blur;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 16/12/13\n *     desc  : SpannableString相关工具类\n * </pre>\n */\npublic final class SpanUtils {\n\n    private static final int DEFAULT_COLOR = 0x12000000;\n\n    public static final int ALIGN_BOTTOM   = 0;\n    public static final int ALIGN_BASELINE = 1;\n    public static final int ALIGN_CENTER   = 2;\n    public static final int ALIGN_TOP      = 3;\n\n    @IntDef({ALIGN_BOTTOM, ALIGN_BASELINE, ALIGN_CENTER, ALIGN_TOP})\n    @Retention(RetentionPolicy.SOURCE)\n    public @interface Align {\n    }\n\n    private static final String LINE_SEPARATOR = System.getProperty(\"line.separator\");\n\n    private CharSequence  mText;\n    private int           flag;\n    private int           foregroundColor;\n    private int           backgroundColor;\n    private int           lineHeight;\n    private int           alignLine;\n    private int           quoteColor;\n    private int           stripeWidth;\n    private int           quoteGapWidth;\n    private int           first;\n    private int           rest;\n    private int           bulletColor;\n    private int           bulletRadius;\n    private int           bulletGapWidth;\n    private Bitmap        iconMarginBitmap;\n    private Drawable      iconMarginDrawable;\n    private Uri           iconMarginUri;\n    private int           iconMarginResourceId;\n    private int           iconMarginGapWidth;\n    private int           alignIconMargin;\n    private int           fontSize;\n    private boolean       fontSizeIsDp;\n    private float         proportion;\n    private float         xProportion;\n    private boolean       isStrikethrough;\n    private boolean       isUnderline;\n    private boolean       isSuperscript;\n    private boolean       isSubscript;\n    private boolean       isBold;\n    private boolean       isItalic;\n    private boolean       isBoldItalic;\n    private String        fontFamily;\n    private Typeface      typeface;\n    private Alignment     alignment;\n    private ClickableSpan clickSpan;\n    private String        url;\n    private float         blurRadius;\n    private Blur          style;\n    private Shader        shader;\n    private float         shadowRadius;\n    private float         shadowDx;\n    private float         shadowDy;\n    private int           shadowColor;\n    private Object[]      spans;\n\n    private Bitmap   imageBitmap;\n    private Drawable imageDrawable;\n    private Uri      imageUri;\n    private int      imageResourceId;\n    private int      alignImage;\n\n    private int spaceSize;\n    private int spaceColor;\n\n    private static SpannableStringBuilder mBuilder;\n\n    private int mType;\n    private final int mTypeCharSequence = 0;\n    private final int mTypeImage        = 1;\n    private final int mTypeSpace        = 2;\n\n\n    public SpanUtils() {\n        mBuilder = new SpannableStringBuilder();\n        mText = \"\";\n        setDefault();\n    }\n\n    private void setDefault() {\n        flag = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;\n        foregroundColor = DEFAULT_COLOR;\n        backgroundColor = DEFAULT_COLOR;\n        lineHeight = -1;\n        quoteColor = DEFAULT_COLOR;\n        first = -1;\n        bulletColor = DEFAULT_COLOR;\n        iconMarginBitmap = null;\n        iconMarginDrawable = null;\n        iconMarginUri = null;\n        iconMarginResourceId = -1;\n        iconMarginGapWidth = -1;\n        fontSize = -1;\n        proportion = -1;\n        xProportion = -1;\n        isStrikethrough = false;\n        isUnderline = false;\n        isSuperscript = false;\n        isSubscript = false;\n        isBold = false;\n        isItalic = false;\n        isBoldItalic = false;\n        fontFamily = null;\n        typeface = null;\n        alignment = null;\n        clickSpan = null;\n        url = null;\n        blurRadius = -1;\n        shader = null;\n        shadowRadius = -1;\n        spans = null;\n\n        imageBitmap = null;\n        imageDrawable = null;\n        imageUri = null;\n        imageResourceId = -1;\n\n        spaceSize = -1;\n    }\n\n    /**\n     * 设置标识\n     *\n     * @param flag <ul>\n     *             <li>{@link Spanned#SPAN_INCLUSIVE_EXCLUSIVE}</li>\n     *             <li>{@link Spanned#SPAN_INCLUSIVE_INCLUSIVE}</li>\n     *             <li>{@link Spanned#SPAN_EXCLUSIVE_EXCLUSIVE}</li>\n     *             <li>{@link Spanned#SPAN_EXCLUSIVE_INCLUSIVE}</li>\n     *             </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setFlag(int flag) {\n        this.flag = flag;\n        return this;\n    }\n\n    /**\n     * 设置前景色\n     *\n     * @param color 前景色\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setForegroundColor(@ColorInt int color) {\n        this.foregroundColor = color;\n        return this;\n    }\n\n    /**\n     * 设置背景色\n     *\n     * @param color 背景色\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setBackgroundColor(@ColorInt int color) {\n        this.backgroundColor = color;\n        return this;\n    }\n\n    /**\n     * 设置行高\n     * <p>当行高大于字体高度时，字体在行中的位置默认居中</p>\n     *\n     * @param lineHeight 行高\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setLineHeight(@IntRange(from = 0) int lineHeight) {\n        return setLineHeight(lineHeight, ALIGN_CENTER);\n    }\n\n    /**\n     * 设置行高\n     * <p>当行高大于字体高度时，字体在行中的位置由{@code align}决定</p>\n     *\n     * @param lineHeight 行高\n     * @param align      对齐\n     *                   <ul>\n     *                   <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *                   <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *                   <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *                   </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setLineHeight(@IntRange(from = 0) int lineHeight, @Align int align) {\n        this.lineHeight = lineHeight;\n        this.alignLine = align;\n        return this;\n    }\n\n    /**\n     * 设置引用线的颜色\n     *\n     * @param color 引用线的颜色\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setQuoteColor(@ColorInt int color) {\n        return setQuoteColor(color, 2, 2);\n    }\n\n    /**\n     * 设置引用线的颜色\n     *\n     * @param color       引用线的颜色\n     * @param stripeWidth 引用线线宽\n     * @param gapWidth    引用线和文字间距\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setQuoteColor(@ColorInt int color, @IntRange(from = 1) int stripeWidth, @IntRange(from = 0) int gapWidth) {\n        this.quoteColor = color;\n        this.stripeWidth = stripeWidth;\n        this.quoteGapWidth = gapWidth;\n        return this;\n    }\n\n    /**\n     * 设置缩进\n     *\n     * @param first 首行缩进\n     * @param rest  剩余行缩进\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setLeadingMargin(@IntRange(from = 0) int first, @IntRange(from = 0) int rest) {\n        this.first = first;\n        this.rest = rest;\n        return this;\n    }\n\n    /**\n     * 设置列表标记\n     *\n     * @param gapWidth 列表标记和文字间距离\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setBullet(@IntRange(from = 0) int gapWidth) {\n        return setBullet(0, 3, gapWidth);\n    }\n\n    /**\n     * 设置列表标记\n     *\n     * @param color    列表标记的颜色\n     * @param radius   列表标记颜色\n     * @param gapWidth 列表标记和文字间距离\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setBullet(@ColorInt int color, @IntRange(from = 0) int radius, @IntRange(from = 0) int gapWidth) {\n        this.bulletColor = color;\n        this.bulletRadius = radius;\n        this.bulletGapWidth = gapWidth;\n        return this;\n    }\n\n    /**\n     * 设置图标\n     * <p>默认0边距，居中对齐</p>\n     *\n     * @param bitmap 图标bitmap\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(Bitmap bitmap) {\n        return setIconMargin(bitmap, 0, ALIGN_CENTER);\n    }\n\n    /**\n     * 设置图标\n     *\n     * @param bitmap   图标bitmap\n     * @param gapWidth 图标和文字间距离\n     * @param align    对齐\n     *                 <ul>\n     *                 <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *                 <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *                 <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *                 </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(Bitmap bitmap, int gapWidth, @Align int align) {\n        this.iconMarginBitmap = bitmap;\n        this.iconMarginGapWidth = gapWidth;\n        this.alignIconMargin = align;\n        return this;\n    }\n\n    /**\n     * 设置图标\n     * <p>默认0边距，居中对齐</p>\n     *\n     * @param drawable 图标drawable\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(Drawable drawable) {\n        return setIconMargin(drawable, 0, ALIGN_CENTER);\n    }\n\n    /**\n     * 设置图标\n     *\n     * @param drawable 图标drawable\n     * @param gapWidth 图标和文字间距离\n     * @param align    对齐\n     *                 <ul>\n     *                 <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *                 <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *                 <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *                 </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(Drawable drawable, int gapWidth, @Align int align) {\n        this.iconMarginDrawable = drawable;\n        this.iconMarginGapWidth = gapWidth;\n        this.alignIconMargin = align;\n        return this;\n    }\n\n    /**\n     * 设置图标\n     * <p>默认0边距，居中对齐</p>\n     *\n     * @param uri 图标uri\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(Uri uri) {\n        return setIconMargin(uri, 0, ALIGN_CENTER);\n    }\n\n    /**\n     * 设置图标\n     *\n     * @param uri      图标uri\n     * @param gapWidth 图标和文字间距离\n     * @param align    对齐\n     *                 <ul>\n     *                 <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *                 <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *                 <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *                 </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(Uri uri, int gapWidth, @Align int align) {\n        this.iconMarginUri = uri;\n        this.iconMarginGapWidth = gapWidth;\n        this.alignIconMargin = align;\n        return this;\n    }\n\n    /**\n     * 设置图标\n     * <p>默认0边距，居中对齐</p>\n     *\n     * @param resourceId 图标resourceId\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(@DrawableRes int resourceId) {\n        return setIconMargin(resourceId, 0, ALIGN_CENTER);\n    }\n\n    /**\n     * 设置图标\n     *\n     * @param resourceId 图标resourceId\n     * @param gapWidth   图标和文字间距离\n     * @param align      对齐\n     *                   <ul>\n     *                   <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *                   <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *                   <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *                   </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setIconMargin(@DrawableRes int resourceId, int gapWidth, @Align int align) {\n        this.iconMarginResourceId = resourceId;\n        this.iconMarginGapWidth = gapWidth;\n        this.alignIconMargin = align;\n        return this;\n    }\n\n    /**\n     * 设置字体尺寸\n     *\n     * @param size 尺寸\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setFontSize(@IntRange(from = 0) int size) {\n        return setFontSize(size, false);\n    }\n\n    /**\n     * 设置字体尺寸\n     *\n     * @param size 尺寸\n     * @param isDp 是否使用dip\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setFontSize(@IntRange(from = 0) int size, boolean isDp) {\n        this.fontSize = size;\n        this.fontSizeIsDp = isDp;\n        return this;\n    }\n\n    /**\n     * 设置字体比例\n     *\n     * @param proportion 比例\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setFontProportion(@FloatRange(from = 0, fromInclusive = false) float proportion) {\n        this.proportion = proportion;\n        return this;\n    }\n\n    /**\n     * 设置字体横向比例\n     *\n     * @param proportion 比例\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setFontXProportion(@FloatRange(from = 0, fromInclusive = false) float proportion) {\n        this.xProportion = proportion;\n        return this;\n    }\n\n    /**\n     * 设置删除线\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setStrikethrough() {\n        this.isStrikethrough = true;\n        return this;\n    }\n\n    /**\n     * 设置下划线\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setUnderline() {\n        this.isUnderline = true;\n        return this;\n    }\n\n    /**\n     * 设置上标\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setSuperscript() {\n        this.isSuperscript = true;\n        return this;\n    }\n\n    /**\n     * 设置下标\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setSubscript() {\n        this.isSubscript = true;\n        return this;\n    }\n\n    /**\n     * 设置粗体\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setBold() {\n        isBold = true;\n        return this;\n    }\n\n    /**\n     * 设置斜体\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setItalic() {\n        isItalic = true;\n        return this;\n    }\n\n    /**\n     * 设置粗斜体\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setBoldItalic() {\n        isBoldItalic = true;\n        return this;\n    }\n\n    /**\n     * 设置字体系列\n     *\n     * @param fontFamily 字体系列\n     *                   <ul>\n     *                   <li>monospace</li>\n     *                   <li>serif</li>\n     *                   <li>sans-serif</li>\n     *                   </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setFontFamily(@NonNull String fontFamily) {\n        this.fontFamily = fontFamily;\n        return this;\n    }\n\n    /**\n     * 设置字体\n     *\n     * @param typeface 字体\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setTypeface(@NonNull Typeface typeface) {\n        this.typeface = typeface;\n        return this;\n    }\n\n    /**\n     * 设置对齐\n     *\n     * @param alignment 对其方式\n     *                  <ul>\n     *                  <li>{@link Alignment#ALIGN_NORMAL}正常</li>\n     *                  <li>{@link Alignment#ALIGN_OPPOSITE}相反</li>\n     *                  <li>{@link Alignment#ALIGN_CENTER}居中</li>\n     *                  </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setAlign(@NonNull Alignment alignment) {\n        this.alignment = alignment;\n        return this;\n    }\n\n    /**\n     * 设置点击事件\n     * <p>需添加view.setMovementMethod(LinkMovementMethod.getInstance())</p>\n     *\n     * @param clickSpan 点击事件\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setClickSpan(@NonNull ClickableSpan clickSpan) {\n        this.clickSpan = clickSpan;\n        return this;\n    }\n\n    /**\n     * 设置超链接\n     * <p>需添加view.setMovementMethod(LinkMovementMethod.getInstance())</p>\n     *\n     * @param url 超链接\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setUrl(@NonNull String url) {\n        this.url = url;\n        return this;\n    }\n\n    /**\n     * 设置模糊\n     * <p>尚存bug，其他地方存在相同的字体的话，相同字体出现在之前的话那么就不会模糊，出现在之后的话那会一起模糊</p>\n     * <p>以上bug关闭硬件加速即可</p>\n     *\n     * @param radius 模糊半径（需大于0）\n     * @param style  模糊样式<ul>\n     *               <li>{@link Blur#NORMAL}</li>\n     *               <li>{@link Blur#SOLID}</li>\n     *               <li>{@link Blur#OUTER}</li>\n     *               <li>{@link Blur#INNER}</li>\n     *               </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setBlur(@FloatRange(from = 0, fromInclusive = false) float radius, Blur style) {\n        this.blurRadius = radius;\n        this.style = style;\n        return this;\n    }\n\n    /**\n     * 设置着色器\n     *\n     * @param shader 着色器\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setShader(@NonNull Shader shader) {\n        this.shader = shader;\n        return this;\n    }\n\n    /**\n     * 设置阴影\n     *\n     * @param radius      阴影半径\n     * @param dx          x轴偏移量\n     * @param dy          y轴偏移量\n     * @param shadowColor 阴影颜色\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setShadow(@FloatRange(from = 0, fromInclusive = false) float radius, float dx, float dy, int shadowColor) {\n        this.shadowRadius = radius;\n        this.shadowDx = dx;\n        this.shadowDy = dy;\n        this.shadowColor = shadowColor;\n        return this;\n    }\n\n\n    /**\n     * 设置样式\n     *\n     * @param spans 样式\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils setSpans(@NonNull Object... spans) {\n        if (spans.length > 0) {\n            this.spans = spans;\n        }\n        return this;\n    }\n\n    /**\n     * 追加样式字符串\n     *\n     * @param text 样式字符串文本\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils append(@NonNull CharSequence text) {\n        apply(mTypeCharSequence);\n        mText = text;\n        return this;\n    }\n\n    /**\n     * 追加一行\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendLine() {\n        apply(mTypeCharSequence);\n        mText = LINE_SEPARATOR;\n        return this;\n    }\n\n    /**\n     * 追加一行样式字符串\n     *\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendLine(@NonNull CharSequence text) {\n        apply(mTypeCharSequence);\n        mText = text + LINE_SEPARATOR;\n        return this;\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param bitmap 图片位图\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@NonNull Bitmap bitmap) {\n        return appendImage(bitmap, ALIGN_BOTTOM);\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param bitmap 图片位图\n     * @param align  对齐\n     *               <ul>\n     *               <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *               <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *               <li>{@link Align#ALIGN_BASELINE}基线对齐</li>\n     *               <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *               </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@NonNull Bitmap bitmap, @Align int align) {\n        apply(mTypeImage);\n        this.imageBitmap = bitmap;\n        this.alignImage = align;\n        return this;\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param drawable 图片资源\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@NonNull Drawable drawable) {\n        return appendImage(drawable, ALIGN_BOTTOM);\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param drawable 图片资源\n     * @param align    对齐\n     *                 <ul>\n     *                 <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *                 <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *                 <li>{@link Align#ALIGN_BASELINE}基线对齐</li>\n     *                 <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *                 </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@NonNull Drawable drawable, @Align int align) {\n        apply(mTypeImage);\n        this.imageDrawable = drawable;\n        this.alignImage = align;\n        return this;\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param uri 图片uri\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@NonNull Uri uri) {\n        return appendImage(uri, ALIGN_BOTTOM);\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param uri   图片uri\n     * @param align 对齐\n     *              <ul>\n     *              <li>{@link Align#ALIGN_TOP}顶部对齐</li>\n     *              <li>{@link Align#ALIGN_CENTER}居中对齐</li>\n     *              <li>{@link Align#ALIGN_BASELINE}基线对齐</li>\n     *              <li>{@link Align#ALIGN_BOTTOM}底部对齐</li>\n     *              </ul>\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@NonNull Uri uri, @Align int align) {\n        apply(mTypeImage);\n        this.imageUri = uri;\n        this.alignImage = align;\n        return this;\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param resourceId 图片资源id\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@DrawableRes int resourceId) {\n        return appendImage(resourceId, ALIGN_BOTTOM);\n    }\n\n    /**\n     * 追加图片\n     *\n     * @param resourceId 图片资源id\n     * @param align      对齐\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendImage(@DrawableRes int resourceId, @Align int align) {\n        apply(mTypeImage);\n        this.imageResourceId = resourceId;\n        this.alignImage = align;\n        return this;\n    }\n\n    /**\n     * 追加空白\n     *\n     * @param size 间距\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendSpace(@IntRange(from = 0) int size) {\n        return appendSpace(size, Color.TRANSPARENT);\n    }\n\n    /**\n     * 追加空白\n     *\n     * @param size  间距\n     * @param color 颜色\n     * @return {@link SpanUtils}\n     */\n    public SpanUtils appendSpace(@IntRange(from = 0) int size, @ColorInt int color) {\n        apply(mTypeSpace);\n        spaceSize = size;\n        spaceColor = color;\n        return this;\n    }\n\n    private void apply(int type) {\n        applyLast();\n        mType = type;\n    }\n\n    /**\n     * 创建样式字符串\n     *\n     * @return 样式字符串\n     */\n    public SpannableStringBuilder create() {\n        applyLast();\n        return mBuilder;\n    }\n\n    /**\n     * 设置上一次的样式\n     */\n    private void applyLast() {\n        if (mType == mTypeCharSequence) {\n            updateCharCharSequence();\n        } else if (mType == mTypeImage) {\n            updateImage();\n        } else if (mType == mTypeSpace) {\n            updateSpace();\n        }\n        setDefault();\n    }\n\n    private void updateCharCharSequence() {\n        if (mText.length() == 0) return;\n        int start = mBuilder.length();\n        mBuilder.append(mText);\n        int end = mBuilder.length();\n        if (foregroundColor != DEFAULT_COLOR) {\n            mBuilder.setSpan(new ForegroundColorSpan(foregroundColor), start, end, flag);\n        }\n        if (backgroundColor != DEFAULT_COLOR) {\n            mBuilder.setSpan(new BackgroundColorSpan(backgroundColor), start, end, flag);\n        }\n        if (lineHeight != -1) {\n            mBuilder.setSpan(new CustomLineHeightSpan(lineHeight, alignLine), start, end, flag);\n        }\n        if (first != -1) {\n            mBuilder.setSpan(new LeadingMarginSpan.Standard(first, rest), start, end, flag);\n        }\n        if (quoteColor != DEFAULT_COLOR) {\n            mBuilder.setSpan(new CustomQuoteSpan(quoteColor, stripeWidth, quoteGapWidth), start, end, flag);\n        }\n        if (bulletColor != DEFAULT_COLOR) {\n            mBuilder.setSpan(new CustomBulletSpan(bulletColor, bulletRadius, bulletGapWidth), start, end, flag);\n        }\n        if (iconMarginGapWidth != -1) {\n            if (iconMarginBitmap != null) {\n                mBuilder.setSpan(new CustomIconMarginSpan(iconMarginBitmap, iconMarginGapWidth, alignIconMargin), start, end, flag);\n            } else if (iconMarginDrawable != null) {\n                mBuilder.setSpan(new CustomIconMarginSpan(iconMarginDrawable, iconMarginGapWidth, alignIconMargin), start, end, flag);\n            } else if (iconMarginUri != null) {\n                mBuilder.setSpan(new CustomIconMarginSpan(AppUtils.getAppContext(), iconMarginUri, iconMarginGapWidth, alignIconMargin), start, end, flag);\n            } else if (iconMarginResourceId != -1) {\n                mBuilder.setSpan(new CustomIconMarginSpan(AppUtils.getAppContext(), iconMarginResourceId, iconMarginGapWidth, alignIconMargin), start, end, flag);\n            }\n        }\n\n        if (fontSize != -1) {\n            mBuilder.setSpan(new AbsoluteSizeSpan(fontSize, fontSizeIsDp), start, end, flag);\n        }\n        if (proportion != -1) {\n            mBuilder.setSpan(new RelativeSizeSpan(proportion), start, end, flag);\n        }\n        if (xProportion != -1) {\n            mBuilder.setSpan(new ScaleXSpan(xProportion), start, end, flag);\n        }\n        if (isStrikethrough) {\n            mBuilder.setSpan(new StrikethroughSpan(), start, end, flag);\n        }\n        if (isUnderline) {\n            mBuilder.setSpan(new UnderlineSpan(), start, end, flag);\n        }\n        if (isSuperscript) {\n            mBuilder.setSpan(new SuperscriptSpan(), start, end, flag);\n        }\n        if (isSubscript) {\n            mBuilder.setSpan(new SubscriptSpan(), start, end, flag);\n        }\n        if (isBold) {\n            mBuilder.setSpan(new StyleSpan(Typeface.BOLD), start, end, flag);\n        }\n        if (isItalic) {\n            mBuilder.setSpan(new StyleSpan(Typeface.ITALIC), start, end, flag);\n        }\n        if (isBoldItalic) {\n            mBuilder.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), start, end, flag);\n        }\n        if (fontFamily != null) {\n            mBuilder.setSpan(new TypefaceSpan(fontFamily), start, end, flag);\n        }\n        if (typeface != null) {\n            mBuilder.setSpan(new CustomTypefaceSpan(typeface), start, end, flag);\n        }\n        if (alignment != null) {\n            mBuilder.setSpan(new AlignmentSpan.Standard(alignment), start, end, flag);\n        }\n        if (clickSpan != null) {\n            mBuilder.setSpan(clickSpan, start, end, flag);\n        }\n        if (url != null) {\n            mBuilder.setSpan(new URLSpan(url), start, end, flag);\n        }\n        if (blurRadius != -1) {\n            mBuilder.setSpan(new MaskFilterSpan(new BlurMaskFilter(blurRadius, style)), start, end, flag);\n        }\n        if (shader != null) {\n            mBuilder.setSpan(new ShaderSpan(shader), start, end, flag);\n        }\n        if (shadowRadius != -1) {\n            mBuilder.setSpan(new ShadowSpan(shadowRadius, shadowDx, shadowDy, shadowColor), start, end, flag);\n        }\n        if (spans != null) {\n            for (Object span : spans) {\n                mBuilder.setSpan(span, start, end, flag);\n            }\n        }\n    }\n\n    private void updateImage() {\n        int start = mBuilder.length();\n        mBuilder.append(\"<img>\");\n        int end = start + 5;\n        if (imageBitmap != null) {\n            mBuilder.setSpan(new CustomImageSpan(AppUtils.getAppContext(), imageBitmap, alignImage), start, end, flag);\n        } else if (imageDrawable != null) {\n            mBuilder.setSpan(new CustomImageSpan(imageDrawable, alignImage), start, end, flag);\n        } else if (imageUri != null) {\n            mBuilder.setSpan(new CustomImageSpan(AppUtils.getAppContext(), imageUri, alignImage), start, end, flag);\n        } else if (imageResourceId != -1) {\n            mBuilder.setSpan(new CustomImageSpan(AppUtils.getAppContext(), imageResourceId, alignImage), start, end, flag);\n        }\n    }\n\n    private void updateSpace() {\n        int start = mBuilder.length();\n        mBuilder.append(\"< >\");\n        int end = start + 3;\n        mBuilder.setSpan(new SpaceSpan(spaceSize, spaceColor), start, end, flag);\n    }\n\n    /**\n     * 行高\n     */\n    class CustomLineHeightSpan extends CharacterStyle\n            implements android.text.style.LineHeightSpan {\n\n        private final int height;\n\n        static final int ALIGN_CENTER = 2;\n\n        static final int ALIGN_TOP = 3;\n\n        final int mVerticalAlignment;\n\n        CustomLineHeightSpan(int height, int verticalAlignment) {\n            this.height = height;\n            mVerticalAlignment = verticalAlignment;\n        }\n\n        @Override\n        public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, Paint.FontMetricsInt fm) {\n            int ht = height;\n\n            int need = ht - (v + fm.descent - fm.ascent - spanstartv);\n            if (need > 0) {\n                if (mVerticalAlignment == ALIGN_TOP) {\n                    fm.descent += need;\n                } else if (mVerticalAlignment == ALIGN_CENTER) {\n                    fm.descent += need / 2;\n                    fm.ascent -= need / 2;\n                } else {\n                    fm.ascent -= need;\n                }\n            }\n            need = ht - (v + fm.bottom - fm.top - spanstartv);\n            if (need > 0) {\n                if (mVerticalAlignment == ALIGN_TOP) {\n                    fm.top += need;\n                } else if (mVerticalAlignment == ALIGN_CENTER) {\n                    fm.bottom += need / 2;\n                    fm.top -= need / 2;\n                } else {\n                    fm.top -= need;\n                }\n            }\n        }\n\n        @Override\n        public void updateDrawState(TextPaint tp) {\n\n        }\n    }\n\n    /**\n     * 空格\n     */\n    class SpaceSpan extends ReplacementSpan {\n\n        private final int width;\n        private final int color;\n\n        SpaceSpan(int width) {\n            this(width, Color.TRANSPARENT);\n        }\n\n        SpaceSpan(int width, int color) {\n            super();\n            this.width = width;\n            this.color = color;\n        }\n\n        @Override\n        public int getSize(@NonNull Paint paint, CharSequence text, @IntRange(from = 0) int start, @IntRange(from = 0) int end, @Nullable Paint.FontMetricsInt fm) {\n            return width;\n        }\n\n        @Override\n        public void draw(@NonNull Canvas canvas, CharSequence text, @IntRange(from = 0) int start, @IntRange(from = 0) int end, float x, int top, int y, int bottom, @NonNull Paint paint) {\n            Paint.Style style = paint.getStyle();\n            int color = paint.getColor();\n\n            paint.setStyle(Paint.Style.FILL);\n            paint.setColor(this.color);\n\n            canvas.drawRect(x, top, x + width, bottom, paint);\n\n            paint.setStyle(style);\n            paint.setColor(color);\n        }\n    }\n\n    /**\n     * 引用\n     */\n    class CustomQuoteSpan implements LeadingMarginSpan {\n\n        private final int color;\n        private final int stripeWidth;\n        private final int gapWidth;\n\n        CustomQuoteSpan(int color, int stripeWidth, int gapWidth) {\n            super();\n            this.color = color;\n            this.stripeWidth = stripeWidth;\n            this.gapWidth = gapWidth;\n        }\n\n        public int getLeadingMargin(boolean first) {\n            return stripeWidth + gapWidth;\n        }\n\n        public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,\n                                      int top, int baseline, int bottom,\n                                      CharSequence text, int start, int end,\n                                      boolean first, Layout layout) {\n            Paint.Style style = p.getStyle();\n            int color = p.getColor();\n\n            p.setStyle(Paint.Style.FILL);\n            p.setColor(this.color);\n\n            c.drawRect(x, top, x + dir * stripeWidth, bottom, p);\n\n            p.setStyle(style);\n            p.setColor(color);\n        }\n    }\n\n    /**\n     * 列表项\n     */\n    class CustomBulletSpan implements LeadingMarginSpan {\n\n        private final int color;\n        private final int radius;\n        private final int gapWidth;\n\n        private Path sBulletPath = null;\n\n        CustomBulletSpan(int color, int radius, int gapWidth) {\n            this.color = color;\n            this.radius = radius;\n            this.gapWidth = gapWidth;\n        }\n\n        public int getLeadingMargin(boolean first) {\n            return 2 * radius + gapWidth;\n        }\n\n        public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,\n                                      int top, int baseline, int bottom,\n                                      CharSequence text, int start, int end,\n                                      boolean first, Layout l) {\n            if (((Spanned) text).getSpanStart(this) == start) {\n                Paint.Style style = p.getStyle();\n                int oldColor = 0;\n                oldColor = p.getColor();\n                p.setColor(color);\n                p.setStyle(Paint.Style.FILL);\n                if (c.isHardwareAccelerated()) {\n                    if (sBulletPath == null) {\n                        sBulletPath = new Path();\n                        // Bullet is slightly better to avoid aliasing artifacts on mdpi devices.\n                        sBulletPath.addCircle(0.0f, 0.0f, radius, Path.Direction.CW);\n                    }\n                    c.save();\n                    c.translate(x + dir * radius, (top + bottom) / 2.0f);\n                    c.drawPath(sBulletPath, p);\n                    c.restore();\n                } else {\n                    c.drawCircle(x + dir * radius, (top + bottom) / 2.0f, radius, p);\n                }\n                p.setColor(oldColor);\n                p.setStyle(style);\n            }\n        }\n    }\n\n    class CustomIconMarginSpan implements LeadingMarginSpan, android.text.style.LineHeightSpan {\n        Bitmap mBitmap;\n\n        static final int ALIGN_BOTTOM = 0;\n\n        static final int ALIGN_BASELINE = 1;\n\n        static final int ALIGN_CENTER = 2;\n\n        static final int ALIGN_TOP = 3;\n\n        final int mVerticalAlignment;\n\n        private int     mPad;\n        private int     totalHeight;\n        private int     lineHeight;\n        private int     need0;\n        private int     need1;\n        private boolean flag;\n\n        CustomIconMarginSpan(Bitmap b, int pad, int verticalAlignment) {\n            mBitmap = b;\n            mPad = pad;\n            mVerticalAlignment = verticalAlignment;\n        }\n\n        CustomIconMarginSpan(Drawable drawable, int pad, int verticalAlignment) {\n            mBitmap = drawable2Bitmap(drawable);\n            mPad = pad;\n            mVerticalAlignment = verticalAlignment;\n        }\n\n        CustomIconMarginSpan(Context context, Uri uri, int pad, int verticalAlignment) {\n            mBitmap = uri2Bitmap(context, uri);\n            mPad = pad;\n            mVerticalAlignment = verticalAlignment;\n        }\n\n        CustomIconMarginSpan(Context context, int resourceId, int pad, int verticalAlignment) {\n            mBitmap = resource2Bitmap(context, resourceId);\n            mPad = pad;\n            mVerticalAlignment = verticalAlignment;\n        }\n\n        private Bitmap drawable2Bitmap(Drawable drawable) {\n            if (drawable instanceof BitmapDrawable) {\n                BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;\n                if (bitmapDrawable.getBitmap() != null) {\n                    return bitmapDrawable.getBitmap();\n                }\n            }\n            Bitmap bitmap;\n            if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {\n                bitmap = Bitmap.createBitmap(1, 1,\n                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);\n            } else {\n                bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),\n                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);\n            }\n            Canvas canvas = new Canvas(bitmap);\n            drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());\n            drawable.draw(canvas);\n            return bitmap;\n        }\n\n        private Bitmap uri2Bitmap(Context context, Uri uri) {\n            try {\n                return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);\n            } catch (IOException e) {\n                e.printStackTrace();\n                return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);\n            }\n        }\n\n        private Bitmap resource2Bitmap(Context context, int resourceId) {\n            Drawable drawable = ContextCompat.getDrawable(context, resourceId);\n            Canvas canvas = new Canvas();\n            Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);\n            canvas.setBitmap(bitmap);\n            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());\n            drawable.draw(canvas);\n            return bitmap;\n\n        }\n\n        public int getLeadingMargin(boolean first) {\n            return mBitmap.getWidth() + mPad;\n        }\n\n        public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,\n                                      int top, int baseline, int bottom,\n                                      CharSequence text, int start, int end,\n                                      boolean first, Layout layout) {\n            int st = ((Spanned) text).getSpanStart(this);\n            int itop = layout.getLineTop(layout.getLineForOffset(st));\n\n            if (dir < 0)\n                x -= mBitmap.getWidth();\n\n            int delta = totalHeight - mBitmap.getHeight();\n\n            if (delta > 0) {\n                if (mVerticalAlignment == ALIGN_TOP) {\n                    c.drawBitmap(mBitmap, x, itop, p);\n                } else if (mVerticalAlignment == ALIGN_CENTER) {\n                    c.drawBitmap(mBitmap, x, itop + delta / 2, p);\n                } else {\n                    c.drawBitmap(mBitmap, x, itop + delta, p);\n                }\n            } else {\n                c.drawBitmap(mBitmap, x, itop, p);\n            }\n        }\n\n        public void chooseHeight(CharSequence text, int start, int end, int istartv, int v, Paint.FontMetricsInt fm) {\n            if (lineHeight == 0) {\n                lineHeight = v - istartv;\n            }\n            if (need0 == 0 && end == ((Spanned) text).getSpanEnd(this)) {\n                int ht = mBitmap.getHeight();\n                need0 = ht - (v + fm.descent - fm.ascent - istartv);\n                need1 = ht - (v + fm.bottom - fm.top - istartv);\n                totalHeight = v - istartv + lineHeight;\n                return;\n            }\n            if (need0 > 0 || need1 > 0) {\n                if (mVerticalAlignment == ALIGN_TOP) {\n                    // the rest space should be filled with the end of line\n                    if (end == ((Spanned) text).getSpanEnd(this)) {\n                        if (need0 > 0) fm.descent += need0;\n                        if (need1 > 0) fm.bottom += need1;\n                    }\n                } else if (mVerticalAlignment == ALIGN_CENTER) {\n                    if (start == ((Spanned) text).getSpanStart(this)) {\n                        if (need0 > 0) fm.ascent -= need0 / 2;\n                        if (need1 > 0) fm.top -= need1 / 2;\n                    } else {\n                        if (!flag) {\n                            if (need0 > 0) fm.ascent += need0 / 2;\n                            if (need1 > 0) fm.top += need1 / 2;\n                            flag = true;\n                        }\n                    }\n                    if (end == ((Spanned) text).getSpanEnd(this)) {\n                        if (need0 > 0) fm.descent += need0 / 2;\n                        if (need1 > 0) fm.bottom += need1 / 2;\n                    }\n                } else {\n                    // the top space should be filled with the first of line\n                    if (start == ((Spanned) text).getSpanStart(this)) {\n                        if (need0 > 0) fm.ascent -= need0;\n                        if (need1 > 0) fm.top -= need1;\n                    } else {\n                        if (!flag) {\n                            if (need0 > 0) fm.ascent += need0;\n                            if (need1 > 0) fm.top += need1;\n                            flag = true;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @SuppressLint(\"ParcelCreator\")\n    class CustomTypefaceSpan extends TypefaceSpan {\n\n        private final Typeface newType;\n\n        CustomTypefaceSpan(Typeface type) {\n            super(\"\");\n            newType = type;\n        }\n\n        @Override\n        public void updateDrawState(TextPaint textPaint) {\n            apply(textPaint, newType);\n        }\n\n        @Override\n        public void updateMeasureState(TextPaint paint) {\n            apply(paint, newType);\n        }\n\n        private void apply(Paint paint, Typeface tf) {\n            int oldStyle;\n            Typeface old = paint.getTypeface();\n            if (old == null) {\n                oldStyle = 0;\n            } else {\n                oldStyle = old.getStyle();\n            }\n\n            int fake = oldStyle & ~tf.getStyle();\n            if ((fake & Typeface.BOLD) != 0) {\n                paint.setFakeBoldText(true);\n            }\n\n            if ((fake & Typeface.ITALIC) != 0) {\n                paint.setTextSkewX(-0.25f);\n            }\n\n            paint.getShader();\n\n            paint.setTypeface(tf);\n        }\n    }\n\n    class CustomImageSpan extends CustomDynamicDrawableSpan {\n        private Drawable mDrawable;\n        private Uri      mContentUri;\n        private int      mResourceId;\n        private Context  mContext;\n\n        CustomImageSpan(Context context, Bitmap b, int verticalAlignment) {\n            super(verticalAlignment);\n            mContext = context;\n            mDrawable = context != null\n                    ? new BitmapDrawable(context.getResources(), b)\n                    : new BitmapDrawable(b);\n            int width = mDrawable.getIntrinsicWidth();\n            int height = mDrawable.getIntrinsicHeight();\n            mDrawable.setBounds(0, 0, width > 0 ? width : 0, height > 0 ? height : 0);\n        }\n\n        CustomImageSpan(Drawable d, int verticalAlignment) {\n            super(verticalAlignment);\n            mDrawable = d;\n            mDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth(),\n                    mDrawable.getIntrinsicHeight());\n        }\n\n        CustomImageSpan(Context context, Uri uri, int verticalAlignment) {\n            super(verticalAlignment);\n            mContext = context;\n            mContentUri = uri;\n        }\n\n        CustomImageSpan(Context context, @DrawableRes int resourceId, int verticalAlignment) {\n            super(verticalAlignment);\n            mContext = context;\n            mResourceId = resourceId;\n        }\n\n        @Override\n        public Drawable getDrawable() {\n            Drawable drawable = null;\n            if (mDrawable != null) {\n                drawable = mDrawable;\n            } else if (mContentUri != null) {\n                Bitmap bitmap = null;\n                try {\n                    InputStream is = mContext.getContentResolver().openInputStream(\n                            mContentUri);\n                    bitmap = BitmapFactory.decodeStream(is);\n                    drawable = new BitmapDrawable(mContext.getResources(), bitmap);\n                    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),\n                            drawable.getIntrinsicHeight());\n                    if (is != null) {\n                        is.close();\n                    }\n                } catch (Exception e) {\n                    Log.e(\"sms\", \"Failed to loaded content \" + mContentUri, e);\n                }\n            } else {\n                try {\n                    drawable = ContextCompat.getDrawable(mContext, mResourceId);\n                    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),\n                            drawable.getIntrinsicHeight());\n                } catch (Exception e) {\n                    Log.e(\"sms\", \"Unable to find resource: \" + mResourceId);\n                }\n            }\n            return drawable;\n        }\n    }\n\n    abstract class CustomDynamicDrawableSpan extends ReplacementSpan {\n\n        static final int ALIGN_BOTTOM = 0;\n\n        static final int ALIGN_BASELINE = 1;\n\n        static final int ALIGN_CENTER = 2;\n\n        static final int ALIGN_TOP = 3;\n\n        final int mVerticalAlignment;\n\n        CustomDynamicDrawableSpan() {\n            mVerticalAlignment = ALIGN_BOTTOM;\n        }\n\n        CustomDynamicDrawableSpan(int verticalAlignment) {\n            mVerticalAlignment = verticalAlignment;\n        }\n\n        public abstract Drawable getDrawable();\n\n        @Override\n        public int getSize(@NonNull Paint paint, CharSequence text,\n                           int start, int end,\n                           Paint.FontMetricsInt fm) {\n            Drawable d = getCachedDrawable();\n            Rect rect = d.getBounds();\n            final int fontHeight = (int) (paint.getFontMetrics().descent - paint.getFontMetrics().ascent);\n            if (fm != null) { // this is the fucking code which I waste 3 days\n                if (rect.height() > fontHeight) {\n                    if (mVerticalAlignment == ALIGN_TOP) {\n                        fm.descent += rect.height() - fontHeight;\n                    } else if (mVerticalAlignment == ALIGN_CENTER) {\n                        fm.ascent -= (rect.height() - fontHeight) / 2;\n                        fm.descent += (rect.height() - fontHeight) / 2;\n                    } else {\n                        fm.ascent -= rect.height() - fontHeight;\n                    }\n                }\n            }\n            return rect.right;\n        }\n\n        @Override\n        public void draw(@NonNull Canvas canvas, CharSequence text,\n                         int start, int end, float x,\n                         int top, int y, int bottom, @NonNull Paint paint) {\n            Drawable d = getCachedDrawable();\n            Rect rect = d.getBounds();\n            canvas.save();\n            final float fontHeight = paint.getFontMetrics().descent - paint.getFontMetrics().ascent;\n            int transY = bottom - rect.bottom;\n            if (rect.height() < fontHeight) { // this is the fucking code which I waste 3 days\n                if (mVerticalAlignment == ALIGN_BASELINE) {\n                    transY -= paint.getFontMetricsInt().descent;\n                } else if (mVerticalAlignment == ALIGN_CENTER) {\n                    transY -= (fontHeight - rect.height()) / 2;\n                } else if (mVerticalAlignment == ALIGN_TOP) {\n                    transY -= fontHeight - rect.height();\n                }\n            }\n            canvas.translate(x, transY);\n            float v = paint.measureText(text, start, end);\n\n            d.draw(canvas);\n            paint.measureText(text, start, end);\n            canvas.restore();\n        }\n\n        private Drawable getCachedDrawable() {\n            WeakReference<Drawable> wr = mDrawableRef;\n            Drawable d = null;\n            if (wr != null)\n                d = wr.get();\n            if (d == null) {\n                d = getDrawable();\n                mDrawableRef = new WeakReference<>(d);\n            }\n            return getDrawable();\n        }\n\n        private WeakReference<Drawable> mDrawableRef;\n    }\n\n    class ShaderSpan extends CharacterStyle implements UpdateAppearance {\n        private Shader mShader;\n\n        private ShaderSpan(Shader shader) {\n            this.mShader = shader;\n        }\n\n        @Override\n        public void updateDrawState(TextPaint tp) {\n            tp.setShader(mShader);\n        }\n    }\n\n    class ShadowSpan extends CharacterStyle implements UpdateAppearance {\n        private float radius;\n        private float dx, dy;\n        private int shadowColor;\n\n        ShadowSpan(float radius, float dx, float dy, int shadowColor) {\n            this.radius = radius;\n            this.dx = dx;\n            this.dy = dy;\n            this.shadowColor = shadowColor;\n        }\n\n        @Override\n        public void updateDrawState(TextPaint tp) {\n            tp.setShadowLayer(radius, dx, dy, shadowColor);\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/StatusBarFontUtil.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.support.annotation.IntRange;\nimport android.support.annotation.NonNull;\nimport android.view.View;\nimport android.view.Window;\nimport android.view.WindowManager;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/26 21:20\n * 描述:状态栏字体设置\n */\npublic class StatusBarFontUtil {\n\n    private final boolean lightStatusBar;\n\n    //透明且背景不占用控件的statusbar\n    private final boolean transparentStatusBar;\n\n    private final boolean transparentNavigationbar;\n\n    private final Window window;\n\n    private final View actionBarView;\n\n    private final int current = Build.VERSION.SDK_INT;\n\n\n    private StatusBarFontUtil(Window window, boolean lightStatusBar, boolean transparentStatusBar,\n                              boolean transparentNavigationbar, View actionBarView) {\n\n        this.lightStatusBar = lightStatusBar;\n        this.transparentStatusBar = transparentStatusBar;\n        this.window = window;\n        this.transparentNavigationbar = transparentNavigationbar;\n        this.actionBarView = actionBarView;\n    }\n\n\n    public static boolean isLessKitkat() {\n\n        return Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT;\n    }\n\n\n    public static Builder from(Activity activity) {\n\n        return new Builder().setWindow(activity);\n    }\n\n\n    public static Builder from(Dialog dialog) {\n\n        return new Builder().setWindow(dialog);\n    }\n\n\n    public static Builder from(Window window) {\n\n        return new Builder().setWindow(window);\n    }\n\n\n    /**\n     * Default status dp = 24 or 25\n     * mhdpi = dp * 1\n     * hdpi = dp * 1.5\n     * xhdpi = dp * 2\n     * xxhdpi = dp * 3\n     * eg : 1920x1080, xxhdpi, => status/all = 25/640(dp) = 75/1080(px)\n     * <p/>\n     * don't forget toolbar's dp = 48\n     *\n     * @return px\n     */\n    @IntRange(from = 0, to = 75)\n    public static int getStatusBarOffsetPx(Context context) {\n\n        if (isLessKitkat()) {\n            return 0;\n        }\n        Context appContext = context.getApplicationContext();\n        int result = 0;\n        int resourceId =\n                appContext.getResources().getIdentifier(\"status_bar_height\", \"dimen\", \"android\");\n        if (resourceId > 0) {\n            result = appContext.getResources().getDimensionPixelSize(resourceId);\n        }\n        return result;\n    }\n\n\n    @IntRange(from = 0, to = 75)\n    public static int getNavigationBarOffsetPx(Context context) {\n\n        if (isLessKitkat()) {\n            return 0;\n        }\n        Context appContext = context.getApplicationContext();\n        int result = 0;\n        int resourceId =\n                appContext.getResources().getIdentifier(\"navigation_bar_height\", \"dimen\", \"android\");\n        if (resourceId > 0) {\n            result = appContext.getResources().getDimensionPixelSize(resourceId);\n        }\n        return result;\n    }\n\n\n    private void processActionBar(final View v) {\n\n        if (v == null || !transparentStatusBar || isLessKitkat()) {\n            return;\n        }\n        v.post(() -> {\n\n            v.setPadding(v.getPaddingLeft(), v.getPaddingTop() + getStatusBarOffsetPx(v.getContext()),\n                    v.getPaddingRight(), v.getPaddingBottom());\n            v.getLayoutParams().height += getStatusBarOffsetPx(v.getContext());\n        });\n    }\n\n\n    /**\n     * 调用私有API处理颜色\n     */\n    private void processPrivateAPI() {\n\n        try {\n            processFlyMe(lightStatusBar);\n        } catch (Exception e) {\n            try {\n                processMIUI(lightStatusBar);\n            } catch (Exception e2) {\n                //\n            }\n        }\n    }\n\n\n    private void process() {\n        //调用私有API处理颜色\n        processPrivateAPI();\n        processActionBar(actionBarView);\n\n        //处理4.4~5.0沉浸\n        if (current >= Build.VERSION_CODES.KITKAT && current < Build.VERSION_CODES.M) {\n            processKitkat();\n        } else if (current >= Build.VERSION_CODES.M) {\n            processM();\n        }\n    }\n\n\n    /**\n     * 处理4.4沉浸\n     */\n    @TargetApi(Build.VERSION_CODES.KITKAT)\n    private void processKitkat() {\n\n        WindowManager.LayoutParams winParams = window.getAttributes();\n        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;\n        if (transparentStatusBar) {\n            winParams.flags |= bits;\n        } else {\n            winParams.flags &= ~bits;\n        }\n        window.setAttributes(winParams);\n    }\n\n\n    /**\n     * 改变小米的状态栏字体颜色为黑色, 要求MIUI6以上\n     * Tested on: MIUIV7 5.0 Redmi-Note3\n     */\n    private void processMIUI(boolean lightStatusBar) throws Exception {\n\n        Class<? extends Window> clazz = window.getClass();\n        int darkModeFlag;\n        Class<?> layoutParams = Class.forName(\"android.view.MiuiWindowManager$LayoutParams\");\n        Field field = layoutParams.getField(\"EXTRA_FLAG_STATUS_BAR_DARK_MODE\");\n        darkModeFlag = field.getInt(layoutParams);\n        Method extraFlagField = clazz.getMethod(\"setExtraFlags\", int.class, int.class);\n        extraFlagField.invoke(window, lightStatusBar ? darkModeFlag : 0, darkModeFlag);\n    }\n\n\n    /**\n     * 改变魅族的状态栏字体为黑色，要求FlyMe4以上\n     */\n    private void processFlyMe(boolean isLightStatusBar) throws Exception {\n\n        WindowManager.LayoutParams lp = window.getAttributes();\n        Class<?> instance = Class.forName(\"android.view.WindowManager$LayoutParams\");\n        int value = instance.getDeclaredField(\"MEIZU_FLAG_DARK_STATUS_BAR_ICON\").getInt(lp);\n        Field field = instance.getDeclaredField(\"meizuFlags\");\n        field.setAccessible(true);\n        int origin = field.getInt(lp);\n        if (isLightStatusBar) {\n            field.set(lp, origin | value);\n        } else {\n            field.set(lp, (~value) & origin);\n        }\n    }\n\n\n    @TargetApi(Build.VERSION_CODES.M)\n    private void processM() {\n\n        if (current < Build.VERSION_CODES.M) {\n            return;\n        }\n        int flag = window.getDecorView().getSystemUiVisibility();\n        if (lightStatusBar) {\n            /**\n             * 改变字体颜色\n             * see {@link <a href=\"https://developer.android.com/reference/android/R.attr.html#windowLightStatusBar\"></a>}\n             */\n            flag |= (WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS\n                    | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);\n            window.setStatusBarColor(Color.TRANSPARENT);\n        }\n        if (transparentStatusBar) {\n            flag |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;\n            window.setStatusBarColor(Color.TRANSPARENT);\n        }\n        if (transparentNavigationbar) {\n            flag |= (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);\n            window.setNavigationBarColor(Color.TRANSPARENT);\n        }\n        window.getDecorView().setSystemUiVisibility(flag);\n    }\n\n\n    public final static class Builder {\n\n        private Window window;\n\n        private boolean lightStatusBar = false;\n\n        private boolean transparentStatusbar = false;\n\n        private boolean transparentNavigationbar = false;\n\n        private View actionBarView;\n\n\n        public Builder setActionbarView(@NonNull View actionbarView) {\n\n            this.actionBarView = actionbarView;\n            return this;\n        }\n\n\n        private Builder setWindow(@NonNull Window Window) {\n\n            this.window = Window;\n            return this;\n        }\n\n\n        private Builder setWindow(@NonNull Activity activity) {\n\n            this.window = activity.getWindow();\n            return this;\n        }\n\n\n        private Builder setWindow(@NonNull Dialog dialog) {\n\n            this.window = dialog.getWindow();\n            return this;\n        }\n\n\n        public Builder setLightStatusBar(boolean lightStatusBar) {\n\n            this.lightStatusBar = lightStatusBar;\n            return this;\n        }\n\n\n        public Builder setTransparentStatusbar(boolean transparentStatusbar) {\n\n            this.transparentStatusbar = transparentStatusbar;\n            return this;\n        }\n\n\n        public Builder setTransparentNavigationbar(boolean transparentNavigationbar) {\n\n            this.transparentNavigationbar = transparentNavigationbar;\n            return this;\n        }\n\n\n        public void process() {\n\n            new StatusBarFontUtil(window, lightStatusBar, transparentStatusbar, transparentNavigationbar,\n                    actionBarView).process();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/StorageUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.TargetApi;\nimport android.os.Build;\nimport android.os.Environment;\nimport android.os.StatFs;\n\nimport java.io.BufferedInputStream;\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.util.ArrayList;\n\n/**\n * @author yuyh.\n * @date 16/4/9.\n */\npublic class StorageUtils {\n    private static final String TAG = StorageUtils.class.getSimpleName();\n\n    /**\n     * 判断SD卡是否可用\n     *\n     * @return\n     */\n    public static boolean isSdCardAvailable() {\n        return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());\n    }\n\n    /**\n     * 获取Android数据目录\n     *\n     * @return\n     */\n    public static String getDataPath() {\n        return Environment.getDataDirectory().getPath();\n\n    }\n\n    /**\n     * 获取SD卡根目录\n     *\n     * @return\n     */\n    public static String getNormalSDCardPath() {\n        return Environment.getExternalStorageDirectory().getPath();\n    }\n\n    /**\n     * 通过CMD获取SD卡路径\n     *\n     * @return\n     */\n    public static String getSDCardPath() {\n        String cmd = \"cat /proc/mounts\";\n        String sdcard = null;\n        Runtime run = Runtime.getRuntime();// 返回与当前 Java 应用程序相关的运行时对象\n        BufferedReader bufferedReader = null;\n        try {\n            Process p = run.exec(cmd);// 启动另一个进程来执行命令\n            bufferedReader = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getInputStream())));\n            String lineStr;\n            while ((lineStr = bufferedReader.readLine()) != null) {\n                LogUtils.i(TAG, \"proc/mounts:   \" + lineStr);\n                if (lineStr.contains(\"sdcard\")\n                        && lineStr.contains(\".android_secure\")) {\n                    String[] strArray = lineStr.split(\" \");\n                    if (strArray.length >= 5) {\n                        sdcard = strArray[1].replace(\"/.android_secure\", \"\");\n                        LogUtils.i(TAG, \"find sd card path:   \" + sdcard);\n                        return sdcard;\n                    }\n                }\n                if (p.waitFor() != 0 && p.exitValue() == 1) {\n                    // p.exitValue()==0表示正常结束，1：非正常结束\n                    LogUtils.e(TAG, cmd + \" 命令执行失败\");\n                }\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        } finally {\n            try {\n                if (bufferedReader != null) {\n                    bufferedReader.close();\n                }\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n        sdcard = Environment.getExternalStorageDirectory().getPath();\n        LogUtils.i(TAG, \"not find sd card path return default:   \" + sdcard);\n        return sdcard;\n    }\n\n    /**\n     * 获取SD卡目录\n     *\n     * @return\n     */\n    public static ArrayList<String> getSDCardPathEx() {\n        ArrayList<String> list = new ArrayList<String>();\n        try {\n            Runtime runtime = Runtime.getRuntime();\n            Process proc = runtime.exec(\"mount\");\n            InputStream is = proc.getInputStream();\n            InputStreamReader isr = new InputStreamReader(is);\n            String line;\n            BufferedReader br = new BufferedReader(isr);\n            while ((line = br.readLine()) != null) {\n                LogUtils.i(TAG, \"mount:  \" + line);\n                if (line.contains(\"secure\")) {\n                    continue;\n                }\n                if (line.contains(\"asec\")) {\n                    continue;\n                }\n\n                if (line.contains(\"fat\")) {\n                    String columns[] = line.split(\" \");\n                    if (columns.length > 1) {\n                        list.add(\"*\" + columns[1]);\n                    }\n                } else if (line.contains(\"fuse\")) {\n                    String columns[] = line.split(\" \");\n                    if (columns.length > 1) {\n                        list.add(columns[1]);\n                    }\n                }\n            }\n        } catch (FileNotFoundException e) {\n            e.printStackTrace();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return list;\n    }\n\n    /**\n     * 获取SD卡可用内存大小\n     *\n     * @param path\n     * @return\n     */\n    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)\n    public static long getAvailableSize(String path) {\n        try {\n            File base = new File(path);\n            StatFs stat = new StatFs(base.getPath());\n            return stat.getBlockSizeLong() * stat.getAvailableBlocksLong();\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return 0;\n    }\n\n    /**\n     * 获取SD卡信息\n     *\n     * @return\n     */\n    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)\n    public static SDCardInfo getSDCardInfo() {\n        SDCardInfo sd = new SDCardInfo();\n        String state = Environment.getExternalStorageState();\n        if (Environment.MEDIA_MOUNTED.equals(state)) {\n            sd.isExist = true;\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {\n                File sdcardDir = Environment.getExternalStorageDirectory();\n                StatFs sf = new StatFs(sdcardDir.getPath());\n\n                sd.totalBlocks = sf.getBlockCountLong();\n                sd.blockByteSize = sf.getBlockSizeLong();\n\n                sd.availableBlocks = sf.getAvailableBlocksLong();\n                sd.availableBytes = sf.getAvailableBytes();\n\n                sd.freeBlocks = sf.getFreeBlocksLong();\n                sd.freeBytes = sf.getFreeBytes();\n\n                sd.totalBytes = sf.getTotalBytes();\n            }\n        }\n        LogUtils.i(TAG, sd.toString());\n        return sd;\n    }\n\n    public static class SDCardInfo {\n        public boolean isExist;\n        public long totalBlocks;\n        public long freeBlocks;\n        public long availableBlocks;\n\n        public long blockByteSize;\n\n        public long totalBytes;\n        public long freeBytes;\n        public long availableBytes;\n\n        @Override\n        public String toString() {\n            return \"SDCardInfo{\" +\n                    \"isExist=\" + isExist +\n                    \", totalBlocks=\" + totalBlocks +\n                    \", freeBlocks=\" + freeBlocks +\n                    \", availableBlocks=\" + availableBlocks +\n                    \", blockByteSize=\" + blockByteSize +\n                    \", totalBytes=\" + totalBytes +\n                    \", freeBytes=\" + freeBytes +\n                    \", availableBytes=\" + availableBytes +\n                    '}';\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/TimeUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.annotation.SuppressLint;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.Calendar;\nimport java.util.Date;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/5/31 15:51\n * 描述:\n */\n\npublic class TimeUtils {\n    public final static String FORMAT_YEAR = \"yyyy\";\n\n    public final static String FORMAT_MONTH_DAY = \"MM月dd日\";\n\n    public final static String FORMAT_DATE = \"yyyy-MM-dd\";\n\n    public final static String FORMAT_TIME = \"HH:mm\";\n\n    public final static String FORMAT_MONTH_DAY_TIME = \"MM月dd日  hh:mm\";\n\n    public final static String FORMAT_DATE_TIME = \"yyyy-MM-dd HH:mm\";\n\n    public final static String FORMAT_DATE1_TIME = \"yyyy/MM/dd HH:mm\";\n\n    public final static String FORMAT_DATE_TIME_SECOND = \"yyyy/MM/dd HH:mm:ss\";\n\n    private static SimpleDateFormat sdf = new SimpleDateFormat();\n\n    private static final int YEAR = 365 * 24 * 60 * 60;// 年\n\n    private static final int MONTH = 30 * 24 * 60 * 60;// 月\n\n    private static final int DAY = 24 * 60 * 60;// 天\n\n    private static final int HOUR = 60 * 60;// 小时\n\n    private static final int MINUTE = 60;// 分钟\n\n\n\n    public static String getWeek(String date) {\n        int year = Integer.parseInt(date.substring(0, 4));\n        int month = Integer.parseInt(date.substring(5, 7));\n        int day = Integer.parseInt(date.substring(8, 10));\n        //获得一个日历\n        Calendar calendar = Calendar.getInstance();\n        //设置当前时间,月份是从0月开始计算\n        calendar.set(year, month - 1, day);\n        //星期表示1-7，是从星期日开始\n        int number = calendar.get(Calendar.DAY_OF_WEEK);\n        return getWeekDay(number);\n    }\n\n\n    private static String getWeekDay(int dayForWeek) {\n        if (dayForWeek == 1) {\n            return \"周日\";\n        } else if (dayForWeek == 2) {\n            return \"周一\";\n        } else if (dayForWeek == 3) {\n            return \"周二\";\n        } else if (dayForWeek == 4) {\n            return \"周三\";\n        } else if (dayForWeek == 5) {\n            return \"周四\";\n        } else if (dayForWeek == 6) {\n            return \"周五\";\n        } else if (dayForWeek == 7) {\n            return \"周六\";\n        } else {\n            return \"\";\n        }\n    }\n\n    public static String formatDate(String date) {\n        String dateFormat = null;\n        try {\n            dateFormat = date.substring(5, 7) + \"月\" + date.substring(8, 10) + \"日\";\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return dateFormat;\n    }\n\n\n    @SuppressLint(\"SimpleDateFormat\")\n    public static String getTime(long date) {\n        SimpleDateFormat format = new SimpleDateFormat(\"MM-dd HH:mm:ss\");\n        return format.format(date);\n    }\n\n    /**\n     * 根据时间戳获取描述性时间，如3分钟前，1天前\n     *\n     * @param timestamp 时间戳 单位为毫秒\n     * @return 时间字符串\n     */\n\n    public static String getDescriptionTimeFromTimestamp(long timestamp) {\n        long currentTime = System.currentTimeMillis();\n        // 与现在时间相差秒数\n        long timeGap = (currentTime - timestamp) / 1000;\n        System.out.println(\"timeGap: \" + timeGap);\n        String timeStr;\n        if (timeGap > YEAR) {\n            timeStr = timeGap / YEAR + \"年前\";\n        } else if (timeGap > MONTH) {\n            timeStr = timeGap / MONTH + \"个月前\";\n        } else if (timeGap > DAY) {// 1天以上\n            timeStr = timeGap / DAY + \"天前\";\n        } else if (timeGap > HOUR) {// 1小时-24小时\n            timeStr = timeGap / HOUR + \"小时前\";\n        } else if (timeGap > MINUTE) {// 1分钟-59分钟\n            timeStr = timeGap / MINUTE + \"分钟前\";\n        } else {// 1秒钟-59秒钟\n            timeStr = \"刚刚\";\n        }\n        return timeStr;\n    }\n\n\n    /**\n     * 获取当前日期的指定格式的字符串\n     *\n     * @param format 指定的日期时间格式，若为null或\"\"则使用指定的格式\"yyyy-MM-dd HH:MM\"\n     */\n\n    public static String getCurrentTime(String format) {\n        if (format == null || format.trim().equals(\"\")) {\n            sdf.applyPattern(FORMAT_DATE_TIME);\n        } else {\n            sdf.applyPattern(format);\n        }\n        return sdf.format(new Date());\n    }\n\n\n    /**\n     * date类型转换为String类型\n     * formatType格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒\n     * data Date类型的时间\n     */\n\n    public static String dateToString(Date data, String formatType) {\n        return new SimpleDateFormat(formatType).format(data);\n    }\n\n\n    /**\n     * long类型转换为String类型\n     * currentTime要转换的long类型的时间\n     * formatType要转换的string类型的时间格式\n     */\n    public static String longToString(long currentTime, String formatType) {\n        String strTime;\n        // long类型转成Date类型\n        Date date = longToDate(currentTime, formatType);\n        // date类型转成String\n        strTime = dateToString(date, formatType);\n        return strTime;\n    }\n\n\n    /**\n     * string类型转换为date类型\n     * strTime要转换的string类型的时间，formatType要转换的格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日\n     * HH时mm分ss秒，\n     * strTime的时间格式必须要与formatType的时间格式相同\n     */\n\n    public static Date stringToDate(String strTime, String formatType) {\n        SimpleDateFormat formatter = new SimpleDateFormat(formatType);\n        Date date = null;\n        try {\n            date = formatter.parse(strTime);\n        } catch (ParseException e) {\n            // TODO Auto-generated catch block\n            e.printStackTrace();\n        }\n        return date;\n    }\n\n\n    /**\n     * long转换为Date类型\n     * currentTime要转换的long类型的时间\n     * formatType要转换的时间格式yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒\n     */\n\n    public static Date longToDate(long currentTime, String formatType) {\n        // 根据long类型的毫秒数生命一个date类型的时间\n        Date dateOld = new Date(currentTime);\n        // 把date类型的时间转换为string\n        String sDateTime = dateToString(dateOld, formatType);\n        // 把String类型转换为Date类型\n        Date date = stringToDate(sDateTime, formatType);\n        return date;\n    }\n\n\n    /**\n     * string类型转换为long类型\n     * strTime要转换的String类型的时间\n     * formatType时间格式\n     * strTime的时间格式和formatType的时间格式必须相同\n     */\n\n    public static long stringToLong(String strTime, String formatType) {\n        // String类型转成date类型\n        Date date = stringToDate(strTime, formatType);\n        if (date == null) {\n            return 0;\n        } else {\n            // date类型转成long类型\n            return dateToLong(date);\n        }\n    }\n\n\n    /**\n     * date类型转换为long类型\n     * date要转换的date类型的时间\n     */\n\n    public static long dateToLong(Date date) {\n        return date.getTime();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/ToastUtils.java",
    "content": "package com.yoyiyi.soleil.utils;\n\nimport android.content.Context;\nimport android.view.Gravity;\nimport android.widget.Toast;\n\n/**\n * Toast工具类，解决多个Toast同时出现的问题\n * Created by zzq on 2016/11/17.\n */\npublic class ToastUtils {\n\n    private static Toast mToast;\n    private static Context context = AppUtils.getAppContext();\n\n    /**********************\n     * 非连续弹出的Toast\n     ***********************/\n    public static void showSingleToast(int resId) { //R.string.**\n        getSingleToast(resId, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showSingleToast(String text) {\n        getSingleToast(text, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showSingleLongToast(int resId) {\n        getSingleToast(resId, Toast.LENGTH_LONG).show();\n    }\n\n    public static void showSingleLongToast(String text) {\n        getSingleToast(text, Toast.LENGTH_LONG).show();\n    }\n\n    /***********************\n     * 连续弹出的Toast 位置在中央\n     ************************/\n    public static void showCenterToast(int resId) {\n        getCenterToast(resId, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showCenterToast(String text) {\n        getCenterToast(text, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showCenterLongToast(int resId) {\n        getCenterToast(resId, Toast.LENGTH_LONG).show();\n    }\n\n    public static void showCenterLongToast(String text) {\n        getCenterToast(text, Toast.LENGTH_LONG).show();\n    }\n\n    /**********************\n     * 非连续弹出的Toast 位置在中央\n     ***********************/\n    public static void showCenterSingleToast(int resId) { //R.string.**\n        getCenterSingleToast(resId, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showCenterSingleToast(String text) {\n        getCenterSingleToast(text, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showCenterSingleLongToast(int resId) {\n        getCenterSingleToast(resId, Toast.LENGTH_LONG).show();\n    }\n\n    public static void showCenterSingleLongToast(String text) {\n        getCenterSingleToast(text, Toast.LENGTH_LONG).show();\n    }\n\n    /***********************\n     * 连续弹出的Toast\n     ************************/\n    public static void showToast(int resId) {\n        getToast(resId, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showToast(String text) {\n        getToast(text, Toast.LENGTH_SHORT).show();\n    }\n\n    public static void showLongToast(int resId) {\n        getToast(resId, Toast.LENGTH_LONG).show();\n    }\n\n    public static void showLongToast(String text) {\n        getToast(text, Toast.LENGTH_LONG).show();\n    }\n\n    public static Toast getSingleToast(int resId, int duration) { // 连续调用不会连续弹出，只是替换文本\n        return getSingleToast(context.getResources().getText(resId).toString(), duration);\n    }\n\n    public static Toast getSingleToast(String text, int duration) {\n        if (mToast == null) {\n            mToast = Toast.makeText(context, text, duration);\n        } else {\n            mToast.setText(text);\n        }\n        return mToast;\n    }\n\n    public static Toast getToast(int resId, int duration) { // 连续调用会连续弹出\n        return getToast(context.getResources().getText(resId).toString(), duration);\n    }\n\n    public static Toast getToast(String text, int duration) {\n        return Toast.makeText(context, text, duration);\n    }\n\n    public static Toast getCenterSingleToast(int resId, int duration) { // 连续调用不会连续弹出，只是替换文本\n        return getCenterSingleToast(context.getResources().getText(resId).toString(), duration);\n    }\n\n    public static Toast getCenterSingleToast(String text, int duration) {\n        if (mToast == null) {\n            mToast = Toast.makeText(context, text, duration);\n        } else {\n            mToast.setText(text);\n        }\n        mToast.setGravity(Gravity.CENTER, 0, 0);\n        return mToast;\n    }\n\n    public static Toast getCenterToast(int resId, int duration) { // 连续调用会连续弹出\n        return getCenterToast(context.getResources().getText(resId).toString(), duration);\n    }\n\n    public static Toast getCenterToast(String text, int duration) {\n        mToast = Toast.makeText(context, text, duration);\n        mToast.setGravity(Gravity.CENTER, 0, 0);\n        return mToast;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/net/NetworkService.java",
    "content": "package com.yoyiyi.soleil.utils.net;\n\nimport android.app.Service;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.os.IBinder;\n\n/**\n * 网络状态监听服务\n * <p>\n * Created by zzq on 2016/11/17.\n */\npublic class NetworkService extends Service {\n\n    private final static int GRAY_SERVICE_ID = 1001;\n\n    private BroadcastReceiver mReceiver = new BroadcastReceiver() {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\n            if (connectivityManager == null) {\n                networkBroadCast(context, intent, -1);\n                return;\n            }\n            NetworkInfo info = connectivityManager.getActiveNetworkInfo();\n            if (info == null) {\n                networkBroadCast(context, intent, -1);\n                return;\n            }\n            int type = info.getType();\n            switch (type) {\n                case ConnectivityManager.TYPE_WIFI:\n                    networkBroadCast(context, intent, 1);\n                    break;\n                case ConnectivityManager.TYPE_MOBILE:\n                    networkBroadCast(context, intent, 2);\n                    break;\n                default:\n                    break;\n            }\n        }\n    };\n\n    private void networkBroadCast(Context context, Intent intent, int netState) {\n        intent.setAction(NetworkUtils.NET_BROADCAST_ACTION);\n        intent.putExtra(NetworkUtils.NET_STATE_NAME, netState);\n        context.sendBroadcast(intent);\n    }\n\n\n    @Override\n    public IBinder onBind(Intent intent) {\n        return null;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        IntentFilter filter = new IntentFilter();\n        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);\n        registerReceiver(mReceiver, filter);\n    }\n\n    @Override\n    public void onDestroy() {\n        super.onDestroy();\n        unregisterReceiver(mReceiver);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/net/NetworkUtils.java",
    "content": "package com.yoyiyi.soleil.utils.net;\n\nimport android.app.Activity;\nimport android.app.PendingIntent;\nimport android.content.BroadcastReceiver;\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.ServiceConnection;\nimport android.location.LocationManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.net.Uri;\nimport android.os.IBinder;\nimport android.provider.Settings;\nimport android.telephony.TelephonyManager;\nimport android.util.Log;\n\nimport com.yoyiyi.soleil.utils.AppUtils;\nimport com.yoyiyi.soleil.utils.LogUtils;\nimport com.yoyiyi.soleil.utils.ToastUtils;\n\nimport java.lang.reflect.Method;\n\n/**\n * Created by zzq on 2016/11/17.\n */\npublic class NetworkUtils {\n    private static final String TAG = NetworkUtils.class.getSimpleName();\n\n    /**\n     * 接受网络状态的广播Action\n     */\n    public static final String NET_BROADCAST_ACTION = \"com.network.state.action\";\n    public static final String NET_STATE_NAME = \"network_state\";\n    /**\n     * 实时更新网络状态<br>\n     * -1为网络无连接<br>\n     * 1为WIFI<br>\n     * 2为移动网络<br>\n     */\n    public static int CURRENT_NETWORK_STATE = -1;\n\n    public enum NetType {\n        None(1, \"无网络连接\"),\n        Mobile(2, \"蜂窝移动网络\"),\n        Wifi(4, \"Wifi网络\"),\n        Other(8, \"未知网络\");\n\n        NetType(int value, String desc) {\n            this.value = value;\n            this.desc = desc;\n        }\n\n        public int value;\n        public String desc;\n    }\n\n    public enum NetWorkType {\n        UnKnown(-1, \"未知网络\"),\n        Wifi(1, \"Wifi网络\"),\n        Net2G(2, \"2G网络\"),\n        Net3G(3, \"3G网络\"),\n        Net4G(4, \"4G网络\");\n\n        NetWorkType(int value, String desc) {\n            this.value = value;\n            this.desc = desc;\n        }\n\n        public int value;\n        public String desc;\n    }\n\n    /**\n     * 获取ConnectivityManager\n     */\n    public static ConnectivityManager getConnectivityManager(Context context) {\n        return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\n    }\n\n    /**\n     * 获取TelephonyManager\n     */\n    public static TelephonyManager getTelephonyManager(Context context) {\n        return (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);\n    }\n\n    /**\n     * 判断网络是否连接(包含MobileNet，Wifi)\n     *\n     * @return\n     */\n    public static boolean isConnected(Context context) {\n        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();\n        return net != null && net.isConnected();\n    }\n\n    /**\n     * 判断有无网络正在连接中或已连接（查找网络、校验、获取IP等）(包含MobileNet，Wifi)\n     *\n     * @return\n     */\n    public static boolean isConnectedOrConnecting(Context context) {\n        NetworkInfo[] nets = getConnectivityManager(context).getAllNetworkInfo();\n        if (nets != null) {\n            for (NetworkInfo net : nets) {\n                if (net.isConnectedOrConnecting()) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * 获取当前网络类型(Wifi或移动网络)\n     *\n     * @param context\n     * @return\n     */\n    public static NetType getConnectedType(Context context) {\n        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();\n        if (net != null) {\n            switch (net.getType()) {\n                case ConnectivityManager.TYPE_WIFI:\n                    return NetType.Wifi;\n                case ConnectivityManager.TYPE_MOBILE:\n                    return NetType.Mobile;\n                default:\n                    return NetType.Other;\n            }\n        }\n        return NetType.None;\n    }\n\n    /**\n     * 是否存在有效的WIFI连接\n     *\n     * @param context\n     * @return\n     */\n    public static boolean isWifiConnected(Context context) {\n        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();\n        return net != null && net.getType() == ConnectivityManager.TYPE_WIFI && net.isConnected();\n    }\n\n    /**\n     * 是否存在有效的移动连接\n     *\n     * @param context\n     * @return\n     */\n    public static boolean isMobileConnected(Context context) {\n        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();\n        return net != null && net.getType() == ConnectivityManager.TYPE_MOBILE && net.isConnected();\n    }\n\n    /**\n     * 检测当前网络是否可用\n     *\n     * @param context\n     * @return\n     */\n    public static boolean isAvailable(Context context) {\n        return isWifiAvailable(context) || (isMobileAvailable(context) && isMobileEnabled(context));\n    }\n\n    /**\n     * 判断是否有可用状态的Wifi，以下情况返回false：\n     * 1. 设备wifi开关关掉;\n     * 2. 已经打开飞行模式；\n     * 3. 设备所在区域没有信号覆盖；\n     * 4. 设备在漫游区域，且关闭了网络漫游。\n     *\n     * @param context\n     * @return boolean wifi为可用状态（不一定成功连接，即Connected）即返回ture\n     */\n    public static boolean isWifiAvailable(Context context) {\n        NetworkInfo[] nets = getConnectivityManager(context).getAllNetworkInfo();\n        if (nets != null) {\n            for (NetworkInfo net : nets) {\n                if (net.getType() == ConnectivityManager.TYPE_WIFI) {\n                    return net.isAvailable();\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * 判断有无可用状态的移动网络，注意关掉设备移动网络直接不影响此函数。\n     * 也就是即使关掉移动网络，那么移动网络也可能是可用的(彩信等服务)，即返回true。\n     * 以下情况它是不可用的，将返回false：\n     * 1. 设备打开飞行模式；\n     * 2. 设备所在区域没有信号覆盖；\n     * 3. 设备在漫游区域，且关闭了网络漫游。\n     *\n     * @param context\n     * @return boolean\n     */\n    public static boolean isMobileAvailable(Context context) {\n        NetworkInfo[] nets = getConnectivityManager(context).getAllNetworkInfo();\n        if (nets != null) {\n            for (NetworkInfo net : nets) {\n                if (net.getType() == ConnectivityManager.TYPE_MOBILE) {\n                    return net.isAvailable();\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * 设备是否打开蜂窝移动网络开关\n     *\n     * @param context\n     * @return\n     */\n    public static boolean isMobileEnabled(Context context) {\n        try {\n            Method getMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod(\"getMobileDataEnabled\");\n            getMobileDataEnabledMethod.setAccessible(true);\n            return (Boolean) getMobileDataEnabledMethod.invoke(getConnectivityManager(context));\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return true;// 反射失败，默认开启\n    }\n\n    /**\n     * 打印当前各种网络状态\n     *\n     * @return boolean\n     */\n    public static boolean printNetworkInfo(Context context) {\n        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\n        if (connectivity != null) {\n            NetworkInfo[] info = connectivity.getAllNetworkInfo();\n            if (info != null) {\n                for (int i = 0; i < info.length; i++) {\n                    LogUtils.i(TAG, \"NetworkInfo[\" + i + \"]isAvailable : \" + info[i].isAvailable());\n                    LogUtils.i(TAG, \"NetworkInfo[\" + i + \"]isConnected : \" + info[i].isConnected());\n                    LogUtils.i(TAG, \"NetworkInfo[\" + i + \"]isConnectedOrConnecting : \" + info[i].isConnectedOrConnecting());\n                    LogUtils.i(TAG, \"NetworkInfo[\" + i + \"]: \" + info[i]);\n                }\n                LogUtils.i(TAG, \"\\n\");\n            } else {\n                LogUtils.i(TAG, \"getAllNetworkInfo is null\");\n            }\n        }\n        return false;\n    }\n\n    /**\n     * get connected network type by {@link ConnectivityManager}\n     * <p/>\n     * such as WIFI, MOBILE, ETHERNET, BLUETOOTH, etc.\n     *\n     * @return {@link ConnectivityManager#TYPE_WIFI}, {@link ConnectivityManager#TYPE_MOBILE},\n     * {@link ConnectivityManager#TYPE_ETHERNET}...\n     */\n    public static int getConnectedTypeINT(Context context) {\n        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();\n        if (net != null) {\n            return net.getType();\n        }\n        return -1;\n    }\n\n    /**\n     * 获取网络连接类型\n     * <p/>\n     * GPRS    2G(2.5) General Packet Radia Service 114kbps\n     * EDGE    2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbps\n     * UMTS    3G WCDMA 联通3G Universal Mobile Telecommunication System 完整的3G移动通信技术标准\n     * CDMA    2G 电信 Code Division Multiple Access 码分多址\n     * EVDO_0  3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3G\n     * EVDO_A  3G 1.8mbps - 3.1mbps 属于3G过渡，3.5G\n     * 1xRTT   2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,\n     * HSDPA   3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbps\n     * HSUPA   3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbps\n     * HSPA    3G (分HSDPA,HSUPA) High Speed Packet Access\n     * IDEN    2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 （属于2G，来自维基百科）\n     * EVDO_B  3G EV-DO Rev.B 14.7Mbps 下行 3.5G\n     * LTE     4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡，升级版 LTE Advanced 才是4G\n     * EHRPD   3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级\n     * HSPAP   3G HSPAP 比 HSDPA 快些\n     *\n     * @return {@link  NetWorkType}\n     */\n    public static NetWorkType getNetworkType(Context context) {\n        int type = getConnectedTypeINT(context);\n        switch (type) {\n            case ConnectivityManager.TYPE_WIFI:\n                return NetWorkType.Wifi;\n            case ConnectivityManager.TYPE_MOBILE:\n            case ConnectivityManager.TYPE_MOBILE_DUN:\n            case ConnectivityManager.TYPE_MOBILE_HIPRI:\n            case ConnectivityManager.TYPE_MOBILE_MMS:\n            case ConnectivityManager.TYPE_MOBILE_SUPL:\n                int teleType = getTelephonyManager(context).getNetworkType();\n                switch (teleType) {\n                    case TelephonyManager.NETWORK_TYPE_GPRS:\n                    case TelephonyManager.NETWORK_TYPE_EDGE:\n                    case TelephonyManager.NETWORK_TYPE_CDMA:\n                    case TelephonyManager.NETWORK_TYPE_1xRTT:\n                    case TelephonyManager.NETWORK_TYPE_IDEN:\n                        return NetWorkType.Net2G;\n                    case TelephonyManager.NETWORK_TYPE_UMTS:\n                    case TelephonyManager.NETWORK_TYPE_EVDO_0:\n                    case TelephonyManager.NETWORK_TYPE_EVDO_A:\n                    case TelephonyManager.NETWORK_TYPE_HSDPA:\n                    case TelephonyManager.NETWORK_TYPE_HSUPA:\n                    case TelephonyManager.NETWORK_TYPE_HSPA:\n                    case TelephonyManager.NETWORK_TYPE_EVDO_B:\n                    case TelephonyManager.NETWORK_TYPE_EHRPD:\n                    case TelephonyManager.NETWORK_TYPE_HSPAP:\n                        return NetWorkType.Net3G;\n                    case TelephonyManager.NETWORK_TYPE_LTE:\n                        return NetWorkType.Net4G;\n                    default:\n                        return NetWorkType.UnKnown;\n                }\n            default:\n                return NetWorkType.UnKnown;\n        }\n    }\n\n    /**\n     * 判断GPS是否开启，GPS或者AGPS开启一个就认为是开启的\n     *\n     * @return true 表示开启\n     */\n    public static final boolean isGpsEnabled() {\n        LocationManager locationManager = (LocationManager) AppUtils.getAppContext().getSystemService(Context.LOCATION_SERVICE);\n        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // GPS\n        boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); // WLAN或移动网络(3G/2G)\n        if (gps || network) {\n            Log.i(\"demo\", \"GPS Ensable\");\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * 强制帮用户打开GPS\n     */\n    public static final void openGPS() {\n        Intent GPSIntent = new Intent();\n        GPSIntent.setClassName(\"com.android.settings\", \"com.android.settings.widget.SettingsAppWidgetProvider\");\n        GPSIntent.addCategory(\"android.intent.category.ALTERNATIVE\");\n        GPSIntent.setData(Uri.parse(\"custom:3\"));\n        try {\n            PendingIntent.getBroadcast(AppUtils.getAppContext(), 0, GPSIntent, 0).send();\n        } catch (PendingIntent.CanceledException e) {\n            e.printStackTrace();\n        }\n    }\n\n    /**\n     * 打开网络设置界面\n     */\n    public static void openSetting(Activity activity) {\n        Intent intent = null;\n        //判断手机系统的版本  即API大于10 就是3.0或以上版本\n        if (android.os.Build.VERSION.SDK_INT > 10) {\n            intent = new Intent(Settings.ACTION_SETTINGS);\n        } else {\n            intent = new Intent();\n            ComponentName component = new ComponentName(\"com.android.settings\", \"com.android.settings\");\n            intent.setComponent(component);\n            intent.setAction(\"android.intent.action.VIEW\");\n        }\n        activity.startActivity(intent);\n    }\n\n    /**\n     * 开启服务,实时监听网络变化（需要在清单文件配置Service）\n     *\n     * @param context\n     */\n    public static void startNetService(final Context context) {\n        //注册广播\n        IntentFilter intentFilter = new IntentFilter();\n        intentFilter.addAction(NET_BROADCAST_ACTION);\n        context.registerReceiver(mReceiver, intentFilter);\n        //开启服务\n        Intent intent = new Intent(context, NetworkService.class);\n        context.bindService(intent, new ServiceConnection() {\n            @Override\n            public void onServiceDisconnected(ComponentName name) {\n            }\n\n            @Override\n            public void onServiceConnected(ComponentName name, IBinder service) {\n            }\n        }, Context.BIND_AUTO_CREATE);\n    }\n\n    /**\n     * 接受服务上发过来的广播\n     */\n    private static BroadcastReceiver mReceiver = new BroadcastReceiver() {\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            if (intent != null) {\n                CURRENT_NETWORK_STATE = (Integer) intent.getExtras().get(NET_STATE_NAME);\n                switch (CURRENT_NETWORK_STATE) {\n                    case -1:\n                        ToastUtils.showSingleLongToast(\"当前没有网络\");\n                        setOnChangeInternet(false);//设置网络监听\n                        LogUtils.i(TAG, \"网络更改为 无网络  CURRENT_NETWORK_STATE =\" + CURRENT_NETWORK_STATE);\n                        break;\n                    case 1:\n                        ToastUtils.showSingleLongToast(\"当前为WIFI网络\");\n                        setOnChangeInternet(true);//设置网络监听\n                        LogUtils.i(TAG, \"网络更改为 WIFI网络  CURRENT_NETWORK_STATE=\" + CURRENT_NETWORK_STATE);\n                        break;\n                    case 2:\n                        ToastUtils.showSingleLongToast(\"当前为数据流量\");\n                        setOnChangeInternet(true);//设置网络监听\n                        LogUtils.i(TAG, \"网络更改为 移动网络  CURRENT_NETWORK_STATE =\" + CURRENT_NETWORK_STATE);\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n    };\n\n    public interface OnChangeInternetListener {\n        void changeInternet(boolean flag);\n    }\n\n    //设置网络改变监听\n    private static OnChangeInternetListener mListener;\n\n    public static void setOnChangeInternetListener(OnChangeInternetListener listener) {\n        mListener = listener;\n    }\n\n    private static void setOnChangeInternet(boolean flag) {\n        if (mListener != null) {\n            mListener.changeInternet(flag);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/sdcard/ConvertUtils.java",
    "content": "package com.yoyiyi.soleil.utils.sdcard;\n\nimport android.annotation.SuppressLint;\n\nimport com.yoyiyi.soleil.utils.CloseUtils;\nimport com.yoyiyi.soleil.utils.time.TimeConstants;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.io.UnsupportedEncodingException;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2016/08/13\n *     desc  : 转换相关工具类\n * </pre>\n */\npublic final class ConvertUtils {\n\n    private ConvertUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n\n    /**\n     * 以unit为单位的内存大小转字节数\n     *\n     * @param memorySize 大小\n     * @param unit       单位类型\n     *                   <ul>\n     *                   <li>{@link MemoryConstants#BYTE}: 字节</li>\n     *                   <li>{@link MemoryConstants#KB}  : 千字节</li>\n     *                   <li>{@link MemoryConstants#MB}  : 兆</li>\n     *                   <li>{@link MemoryConstants#GB}  : GB</li>\n     *                   </ul>\n     * @return 字节数\n     */\n    public static long memorySize2Byte(final long memorySize, @MemoryConstants.Unit final int unit) {\n        if (memorySize < 0) return -1;\n        return memorySize * unit;\n    }\n\n    /**\n     * 字节数转以unit为单位的内存大小\n     *\n     * @param byteNum 字节数\n     * @param unit    单位类型\n     *                <ul>\n     *                <li>{@link MemoryConstants#BYTE}: 字节</li>\n     *                <li>{@link MemoryConstants#KB}  : 千字节</li>\n     *                <li>{@link MemoryConstants#MB}  : 兆</li>\n     *                <li>{@link MemoryConstants#GB}  : GB</li>\n     *                </ul>\n     * @return 以unit为单位的size\n     */\n    public static double byte2MemorySize(final long byteNum, @MemoryConstants.Unit final int unit) {\n        if (byteNum < 0) return -1;\n        return (double) byteNum / unit;\n    }\n\n    /**\n     * 字节数转合适内存大小\n     * <p>保留3位小数</p>\n     *\n     * @param byteNum 字节数\n     * @return 合适内存大小\n     */\n    @SuppressLint(\"DefaultLocale\")\n    public static String byte2FitMemorySize(final long byteNum) {\n        if (byteNum < 0) {\n            return \"shouldn't be less than zero!\";\n        } else if (byteNum < MemoryConstants.KB) {\n            return String.format(\"%.1fB\", (double) byteNum + 0.05);\n        } else if (byteNum < MemoryConstants.MB) {\n            return String.format(\"%.1fKB\", (double) byteNum / MemoryConstants.KB + 0.05);\n        } else if (byteNum < MemoryConstants.GB) {\n            return String.format(\"%.1fMB\", (double) byteNum / MemoryConstants.MB + 0.05);\n        } else {\n            return String.format(\"%.1fGB\", (double) byteNum / MemoryConstants.GB + 0.05);\n        }\n    }\n\n    /**\n     * 以unit为单位的时间长度转毫秒时间戳\n     *\n     * @param timeSpan 毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 毫秒时间戳\n     */\n    public static long timeSpan2Millis(final long timeSpan, @TimeConstants.Unit final int unit) {\n        return timeSpan * unit;\n    }\n\n    /**\n     * 毫秒时间戳转以unit为单位的时间长度\n     *\n     * @param millis 毫秒时间戳\n     * @param unit   单位类型\n     *               <ul>\n     *               <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *               <li>{@link TimeConstants#SEC }: 秒</li>\n     *               <li>{@link TimeConstants#MIN }: 分</li>\n     *               <li>{@link TimeConstants#HOUR}: 小时</li>\n     *               <li>{@link TimeConstants#DAY }: 天</li>\n     *               </ul>\n     * @return 以unit为单位的时间长度\n     */\n    public static long millis2TimeSpan(final long millis, @TimeConstants.Unit final int unit) {\n        return millis / unit;\n    }\n\n    /**\n     * 毫秒时间戳转合适时间长度\n     *\n     * @param millis    毫秒时间戳\n     *                  <p>小于等于0，返回null</p>\n     * @param precision 精度\n     *                  <ul>\n     *                  <li>precision = 0，返回null</li>\n     *                  <li>precision = 1，返回天</li>\n     *                  <li>precision = 2，返回天和小时</li>\n     *                  <li>precision = 3，返回天、小时和分钟</li>\n     *                  <li>precision = 4，返回天、小时、分钟和秒</li>\n     *                  <li>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</li>\n     *                  </ul>\n     * @return 合适时间长度\n     */\n    @SuppressLint(\"DefaultLocale\")\n    public static String millis2FitTimeSpan(long millis, int precision) {\n        if (millis <= 0 || precision <= 0) return null;\n        StringBuilder sb = new StringBuilder();\n        String[] units = {\"天\", \"小时\", \"分钟\", \"秒\", \"毫秒\"};\n        int[] unitLen = {86400000, 3600000, 60000, 1000, 1};\n        precision = Math.min(precision, 5);\n        for (int i = 0; i < precision; i++) {\n            if (millis >= unitLen[i]) {\n                long mode = millis / unitLen[i];\n                millis -= mode * unitLen[i];\n                sb.append(mode).append(units[i]);\n            }\n        }\n        return sb.toString();\n    }\n\n    /**\n     * bytes转bits\n     *\n     * @param bytes 字节数组\n     * @return bits\n     */\n    public static String bytes2Bits(final byte[] bytes) {\n        StringBuilder sb = new StringBuilder();\n        for (byte aByte : bytes) {\n            for (int j = 7; j >= 0; --j) {\n                sb.append(((aByte >> j) & 0x01) == 0 ? '0' : '1');\n            }\n        }\n        return sb.toString();\n    }\n\n    /**\n     * bits转bytes\n     *\n     * @param bits 二进制\n     * @return bytes\n     */\n    public static byte[] bits2Bytes(String bits) {\n        int lenMod = bits.length() % 8;\n        int byteLen = bits.length() / 8;\n        // 不是8的倍数前面补0\n        if (lenMod != 0) {\n            for (int i = lenMod; i < 8; i++) {\n                bits = \"0\" + bits;\n            }\n            byteLen++;\n        }\n        byte[] bytes = new byte[byteLen];\n        for (int i = 0; i < byteLen; ++i) {\n            for (int j = 0; j < 8; ++j) {\n                bytes[i] <<= 1;\n                bytes[i] |= bits.charAt(i * 8 + j) - '0';\n            }\n        }\n        return bytes;\n    }\n\n    /**\n     * inputStream转outputStream\n     *\n     * @param is 输入流\n     * @return outputStream子类\n     */\n    public static ByteArrayOutputStream input2OutputStream(final InputStream is) {\n        if (is == null) return null;\n        try {\n            ByteArrayOutputStream os = new ByteArrayOutputStream();\n            byte[] b = new byte[MemoryConstants.KB];\n            int len;\n            while ((len = is.read(b, 0, MemoryConstants.KB)) != -1) {\n                os.write(b, 0, len);\n            }\n            return os;\n        } catch (IOException e) {\n            e.printStackTrace();\n            return null;\n        } finally {\n            CloseUtils.closeIO(is);\n        }\n    }\n\n    /**\n     * outputStream转inputStream\n     *\n     * @param out 输出流\n     * @return inputStream子类\n     */\n    public ByteArrayInputStream output2InputStream(final OutputStream out) {\n        if (out == null) return null;\n        return new ByteArrayInputStream(((ByteArrayOutputStream) out).toByteArray());\n    }\n\n    /**\n     * inputStream转byteArr\n     *\n     * @param is 输入流\n     * @return 字节数组\n     */\n    public static byte[] inputStream2Bytes(final InputStream is) {\n        if (is == null) return null;\n        return input2OutputStream(is).toByteArray();\n    }\n\n    /**\n     * byteArr转inputStream\n     *\n     * @param bytes 字节数组\n     * @return 输入流\n     */\n    public static InputStream bytes2InputStream(final byte[] bytes) {\n        if (bytes == null || bytes.length <= 0) return null;\n        return new ByteArrayInputStream(bytes);\n    }\n\n    /**\n     * outputStream转byteArr\n     *\n     * @param out 输出流\n     * @return 字节数组\n     */\n    public static byte[] outputStream2Bytes(final OutputStream out) {\n        if (out == null) return null;\n        return ((ByteArrayOutputStream) out).toByteArray();\n    }\n\n    /**\n     * outputStream转byteArr\n     *\n     * @param bytes 字节数组\n     * @return 字节数组\n     */\n    public static OutputStream bytes2OutputStream(final byte[] bytes) {\n        if (bytes == null || bytes.length <= 0) return null;\n        ByteArrayOutputStream os = null;\n        try {\n            os = new ByteArrayOutputStream();\n            os.write(bytes);\n            return os;\n        } catch (IOException e) {\n            e.printStackTrace();\n            return null;\n        } finally {\n            CloseUtils.closeIO(os);\n        }\n    }\n\n    /**\n     * inputStream转string按编码\n     *\n     * @param is          输入流\n     * @param charsetName 编码格式\n     * @return 字符串\n     */\n    public static String inputStream2String(final InputStream is, final String charsetName) {\n        if (is == null || isSpace(charsetName)) return null;\n        try {\n            return new String(inputStream2Bytes(is), charsetName);\n        } catch (UnsupportedEncodingException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    /**\n     * string转inputStream按编码\n     *\n     * @param string      字符串\n     * @param charsetName 编码格式\n     * @return 输入流\n     */\n    public static InputStream string2InputStream(final String string, final String charsetName) {\n        if (string == null || isSpace(charsetName)) return null;\n        try {\n            return new ByteArrayInputStream(string.getBytes(charsetName));\n        } catch (UnsupportedEncodingException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    /**\n     * outputStream转string按编码\n     *\n     * @param out         输出流\n     * @param charsetName 编码格式\n     * @return 字符串\n     */\n    public static String outputStream2String(final OutputStream out, final String charsetName) {\n        if (out == null || isSpace(charsetName)) return null;\n        try {\n            return new String(outputStream2Bytes(out), charsetName);\n        } catch (UnsupportedEncodingException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n\n    /**\n     * 判断字符串是否为null或全为空白字符\n     *\n     * @param s 待校验字符串\n     * @return {@code true}: null或全空白字符<br> {@code false}: 不为null且不全空白字符\n     */\n    private static boolean isSpace(final String s) {\n        if (s == null) return true;\n        for (int i = 0, len = s.length(); i < len; ++i) {\n            if (!Character.isWhitespace(s.charAt(i))) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/sdcard/MemoryConstants.java",
    "content": "package com.yoyiyi.soleil.utils.sdcard;\n\nimport android.support.annotation.IntDef;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.RetentionPolicy;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2017/03/13\n *     desc  : 存储相关常量\n * </pre>\n */\npublic final class MemoryConstants {\n\n    /**\n     * Byte与Byte的倍数\n     */\n    public static final int BYTE = 1;\n    /**\n     * KB与Byte的倍数\n     */\n    public static final int KB   = 1024;\n    /**\n     * MB与Byte的倍数\n     */\n    public static final int MB   = 1048576;\n    /**\n     * GB与Byte的倍数\n     */\n    public static final int GB   = 1073741824;\n\n    @IntDef({BYTE, KB, MB, GB})\n    @Retention(RetentionPolicy.SOURCE)\n    public @interface Unit {\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/sdcard/SDCardUtils.java",
    "content": "package com.yoyiyi.soleil.utils.sdcard;\n\nimport android.annotation.TargetApi;\nimport android.os.Build;\nimport android.os.Environment;\nimport android.os.StatFs;\n\nimport com.yoyiyi.soleil.utils.CloseUtils;\n\nimport java.io.BufferedInputStream;\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.InputStreamReader;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/30 23:07\n * 描述:\n */\n    public final class SDCardUtils {\n\n        private SDCardUtils() {\n            throw new UnsupportedOperationException(\"u can't instantiate me...\");\n        }\n\n        /**\n         * 判断SD卡是否可用\n         *\n         * @return true : 可用<br>false : 不可用\n         */\n        public static boolean isSDCardEnable() {\n            return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());\n        }\n\n        /**\n         * 获取SD卡路径\n         * <p>先用shell，shell失败再普通方法获取，一般是/storage/emulated/0/</p>\n         *\n         * @return SD卡路径\n         */\n        public static String getSDCardPath() {\n            if (!isSDCardEnable()) return null;\n            String cmd = \"cat /proc/mounts\";\n            Runtime run = Runtime.getRuntime();\n            BufferedReader bufferedReader = null;\n            try {\n                Process p = run.exec(cmd);\n                bufferedReader = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getInputStream())));\n                String lineStr;\n                while ((lineStr = bufferedReader.readLine()) != null) {\n                    if (lineStr.contains(\"sdcard\") && lineStr.contains(\".android_secure\")) {\n                        String[] strArray = lineStr.split(\" \");\n                        if (strArray.length >= 5) {\n                            return strArray[1].replace(\"/.android_secure\", \"\") + File.separator;\n                        }\n                    }\n                    if (p.waitFor() != 0 && p.exitValue() == 1) {\n                        break;\n                    }\n                }\n            } catch (Exception e) {\n                e.printStackTrace();\n            } finally {\n                CloseUtils.closeIO(bufferedReader);\n            }\n            return Environment.getExternalStorageDirectory().getPath() + File.separator;\n        }\n\n        /**\n         * 获取SD卡data路径\n         *\n         * @return SD卡data路径\n         */\n        public static String getDataPath() {\n            if (!isSDCardEnable()) return null;\n            return Environment.getExternalStorageDirectory().getPath() + File.separator + \"data\" + File.separator;\n        }\n\n        /**\n         * 获取SD卡剩余空间\n         *\n         * @return SD卡剩余空间\n         */\n        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)\n        public static String getFreeSpace() {\n            if (!isSDCardEnable()) return null;\n            StatFs stat = new StatFs(getSDCardPath());\n            long blockSize, availableBlocks;\n            availableBlocks = stat.getAvailableBlocksLong();\n            blockSize = stat.getBlockSizeLong();\n            return ConvertUtils.byte2FitMemorySize(availableBlocks * blockSize);\n        }\n    /**\n     * 获取SD卡剩余空间\n     *\n     * @return SD卡剩余空间\n     */\n    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)\n    public static String getAllSpace() {\n        if (!isSDCardEnable()) return null;\n        StatFs stat = new StatFs(getSDCardPath());\n        long blockCountLong = stat.getBlockCountLong();\n        long blockSizeLong = stat.getBlockSizeLong();\n        return ConvertUtils.byte2FitMemorySize(blockCountLong * blockSizeLong);\n    }\n\n        /**\n         * 获取SD卡信息\n         *\n         * @return SDCardInfo\n         */\n        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)\n        public static String getSDCardInfo() {\n            if (!isSDCardEnable()) return null;\n            SDCardInfo sd = new SDCardInfo();\n            sd.isExist = true;\n            StatFs sf = new StatFs(Environment.getExternalStorageDirectory().getPath());\n            sd.totalBlocks = sf.getBlockCountLong();\n            sd.blockByteSize = sf.getBlockSizeLong();\n            sd.availableBlocks = sf.getAvailableBlocksLong();\n            sd.availableBytes = sf.getAvailableBytes();\n            sd.freeBlocks = sf.getFreeBlocksLong();\n            sd.freeBytes = sf.getFreeBytes();\n            sd.totalBytes = sf.getTotalBytes();\n            return sd.toString();\n        }\n\n        public static class SDCardInfo {\n            boolean isExist;\n            long    totalBlocks;\n            long    freeBlocks;\n            long    availableBlocks;\n            long    blockByteSize;\n            long    totalBytes;\n            long    freeBytes;\n            long    availableBytes;\n\n            @Override\n            public String toString() {\n                return \"isExist=\" + isExist +\n                        \"\\ntotalBlocks=\" + totalBlocks +\n                        \"\\nfreeBlocks=\" + freeBlocks +\n                        \"\\navailableBlocks=\" + availableBlocks +\n                        \"\\nblockByteSize=\" + blockByteSize +\n                        \"\\ntotalBytes=\" + totalBytes +\n                        \"\\nfreeBytes=\" + freeBytes +\n                        \"\\navailableBytes=\" + availableBytes;\n            }\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/time/FormatUtils.java",
    "content": "package com.yoyiyi.soleil.utils.time;\n\nimport android.text.TextUtils;\n\nimport com.yoyiyi.soleil.utils.LogUtils;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/13 16:33\n * 描述:字符串转化时间\n */\n\npublic class FormatUtils {\n\n    private static final long ONE_MINUTE = 60000L;\n    private static final long ONE_HOUR = 3600000L;\n    private static final long ONE_DAY = 86400000L;\n    private static final long ONE_WEEK = 604800000L;\n\n    private static final String ONE_SECOND_AGO = \"秒前\";\n    private static final String ONE_MINUTE_AGO = \"分钟前\";\n    private static final String ONE_HOUR_AGO = \"小时前\";\n    private static final String ONE_DAY_AGO = \"天前\";\n    private static final String ONE_MONTH_AGO = \"月前\";\n    private static final String ONE_YEAR_AGO = \"年前\";\n\n    private static SimpleDateFormat sdf = new SimpleDateFormat();\n    public final static String FORMAT_DATE_TIME = \"yyyy-MM-dd HH:mm:ss\";\n\n    public static String formatDuration(String time) {\n        Integer integer = Integer.valueOf(time);\n        StringBuffer buffer = new StringBuffer();\n        int minute = integer / 60;\n        int second = integer % 60;\n        if (minute < 10) {\n            buffer.append(\"0\" + minute);\n        } else {\n            buffer.append(minute);\n        }\n        buffer.append(\":\");\n        if (second < 10) {\n            buffer.append(\"0\" + second);\n        } else {\n            buffer.append(second);\n        }\n        return buffer.toString();\n    }\n\n\n    /**\n     * 根据时间字符串获取描述性时间，如3分钟前，1天前\n     *\n     * @param dateString 时间字符串\n     * @return\n     */\n    public static String getDescriptionTimeFromDateString(String dateString) {\n        if (TextUtils.isEmpty(dateString))\n            return \"\";\n        sdf.applyPattern(FORMAT_DATE_TIME);\n        try {\n            return getDescriptionTimeFromDate(sdf.parse(dateString));\n        } catch (Exception e) {\n            LogUtils.e(\"getDescriptionTimeFromDateString: \" + e);\n        }\n        return \"\";\n    }\n\n\n    public static String getDescriptionTimeFromDate(Date date) {\n        long delta = new Date().getTime() - date.getTime();\n        if (delta < 1L * ONE_MINUTE) {\n            long seconds = toSeconds(delta);\n            return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;\n        }\n        if (delta < 45L * ONE_MINUTE) {\n            long minutes = toMinutes(delta);\n            return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;\n        }\n        if (delta < 24L * ONE_HOUR) {\n            long hours = toHours(delta);\n            return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;\n        }\n        if (delta < 48L * ONE_HOUR) {\n            return \"昨天\";\n        }\n        if (delta < 30L * ONE_DAY) {\n            long days = toDays(delta);\n            return (days <= 0 ? 1 : days) + ONE_DAY_AGO;\n        }\n        if (delta < 12L * 4L * ONE_WEEK) {\n            long months = toMonths(delta);\n            return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;\n        } else {\n            long years = toYears(delta);\n            return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;\n        }\n    }\n\n    private static long toSeconds(long date) {\n        return date / 1000L;\n    }\n\n    private static long toMinutes(long date) {\n        return toSeconds(date) / 60L;\n    }\n\n    private static long toHours(long date) {\n        return toMinutes(date) / 60L;\n    }\n\n    private static long toDays(long date) {\n        return toHours(date) / 24L;\n    }\n\n    private static long toMonths(long date) {\n        return toDays(date) / 30L;\n    }\n\n    private static long toYears(long date) {\n        return toMonths(date) / 365L;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/time/TimeConstants.java",
    "content": "package com.yoyiyi.soleil.utils.time;\n\nimport android.support.annotation.IntDef;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.RetentionPolicy;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2017/03/13\n *     desc  : 时间相关常量\n * </pre>\n */\npublic final class TimeConstants {\n\n    /**\n     * 毫秒与毫秒的倍数\n     */\n    public static final int MSEC = 1;\n    /**\n     * 秒与毫秒的倍数\n     */\n    public static final int SEC = 1000;\n    /**\n     * 分与毫秒的倍数\n     */\n    public static final int MIN = 60000;\n    /**\n     * 时与毫秒的倍数\n     */\n    public static final int HOUR = 3600000;\n    /**\n     * 天与毫秒的倍数\n     */\n    public static final int DAY = 86400000;\n\n    /**\n     * 月与毫秒的倍数\n     */\n    public static final long MONTH = 2592000000L;\n\n    /**\n     * 年与毫秒的倍数\n     */\n    public static final long YEAR = 31104000000L;\n\n    @IntDef({MSEC, SEC, MIN, HOUR, DAY})\n    @Retention(RetentionPolicy.SOURCE)\n    public @interface Unit {\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/utils/time/TimeUtils.java",
    "content": "package com.yoyiyi.soleil.utils.time;\n\nimport java.text.DateFormat;\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.Locale;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2016/08/02\n *     desc  : 时间相关工具类\n * </pre>\n */\npublic final class TimeUtils {\n\n    /**\n     * <p>在工具类中经常使用到工具类的格式化描述，这个主要是一个日期的操作类，所以日志格式主要使用 SimpleDateFormat的定义格式.</p>\n     * 格式的意义如下： 日期和时间模式 <br>\n     * <p>日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中，未加引号的字母 'A' 到 'Z' 和 'a' 到 'z'\n     * 被解释为模式字母，用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来，以免进行解释。\"''\"\n     * 表示单引号。所有其他字符均不解释；只是在格式化时将它们简单复制到输出字符串，或者在分析时与输入字符串进行匹配。\n     * </p>\n     * 定义了以下模式字母（所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留）： <br>\n     * <table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" summary=\"Chart shows format letters, date/time component,\n     * presentation, and examples.\">\n     * <tr>\n     * <th align=\"left\">字母</th>\n     * <th align=\"left\">日期或时间元素</th>\n     * <th align=\"left\">表示</th>\n     * <th align=\"left\">示例</th>\n     * </tr>\n     * <tr>\n     * <td><code>G</code></td>\n     * <td>Era 标志符</td>\n     * <td>Text</td>\n     * <td><code>AD</code></td>\n     * </tr>\n     * <tr>\n     * <td><code>y</code> </td>\n     * <td>年 </td>\n     * <td>Year </td>\n     * <td><code>1996</code>; <code>96</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>M</code> </td>\n     * <td>年中的月份 </td>\n     * <td>Month </td>\n     * <td><code>July</code>; <code>Jul</code>; <code>07</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>w</code> </td>\n     * <td>年中的周数 </td>\n     * <td>Number </td>\n     * <td><code>27</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>W</code> </td>\n     * <td>月份中的周数 </td>\n     * <td>Number </td>\n     * <td><code>2</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>D</code> </td>\n     * <td>年中的天数 </td>\n     * <td>Number </td>\n     * <td><code>189</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>d</code> </td>\n     * <td>月份中的天数 </td>\n     * <td>Number </td>\n     * <td><code>10</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>F</code> </td>\n     * <td>月份中的星期 </td>\n     * <td>Number </td>\n     * <td><code>2</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>E</code> </td>\n     * <td>星期中的天数 </td>\n     * <td>Text </td>\n     * <td><code>Tuesday</code>; <code>Tue</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>a</code> </td>\n     * <td>Am/pm 标记 </td>\n     * <td>Text </td>\n     * <td><code>PM</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>H</code> </td>\n     * <td>一天中的小时数（0-23） </td>\n     * <td>Number </td>\n     * <td><code>0</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>k</code> </td>\n     * <td>一天中的小时数（1-24） </td>\n     * <td>Number </td>\n     * <td><code>24</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>K</code> </td>\n     * <td>am/pm 中的小时数（0-11） </td>\n     * <td>Number </td>\n     * <td><code>0</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>h</code> </td>\n     * <td>am/pm 中的小时数（1-12） </td>\n     * <td>Number </td>\n     * <td><code>12</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>m</code> </td>\n     * <td>小时中的分钟数 </td>\n     * <td>Number </td>\n     * <td><code>30</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>s</code> </td>\n     * <td>分钟中的秒数 </td>\n     * <td>Number </td>\n     * <td><code>55</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>S</code> </td>\n     * <td>毫秒数 </td>\n     * <td>Number </td>\n     * <td><code>978</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>z</code> </td>\n     * <td>时区 </td>\n     * <td>General time zone </td>\n     * <td><code>Pacific Standard Time</code>; <code>PST</code>; <code>GMT-08:00</code> </td>\n     * </tr>\n     * <tr>\n     * <td><code>Z</code> </td>\n     * <td>时区 </td>\n     * <td>RFC 822 time zone </td>\n     * <td><code>-0800</code> </td>\n     * </tr>\n     * </table>\n     * <pre>\n     *                                             HH:mm    15:44\n     *                                            h:mm a    3:44 下午\n     *                                           HH:mm z    15:44 CST\n     *                                           HH:mm Z    15:44 +0800\n     *                                        HH:mm zzzz    15:44 中国标准时间\n     *                                          HH:mm:ss    15:44:40\n     *                                        yyyy-MM-dd    2016-08-12\n     *                                  yyyy-MM-dd HH:mm    2016-08-12 15:44\n     *                               yyyy-MM-dd HH:mm:ss    2016-08-12 15:44:40\n     *                          yyyy-MM-dd HH:mm:ss zzzz    2016-08-12 15:44:40 中国标准时间\n     *                     EEEE yyyy-MM-dd HH:mm:ss zzzz    星期五 2016-08-12 15:44:40 中国标准时间\n     *                          yyyy-MM-dd HH:mm:ss.SSSZ    2016-08-12 15:44:40.461+0800\n     *                        yyyy-MM-dd'T'HH:mm:ss.SSSZ    2016-08-12T15:44:40.461+0800\n     *                      yyyy.MM.dd G 'at' HH:mm:ss z    2016.08.12 公元 at 15:44:40 CST\n     *                                            K:mm a    3:44 下午\n     *                                  EEE, MMM d, ''yy    星期五, 八月 12, '16\n     *                             hh 'o''clock' a, zzzz    03 o'clock 下午, 中国标准时间\n     *                      yyyyy.MMMMM.dd GGG hh:mm aaa    02016.八月.12 公元 03:44 下午\n     *                        EEE, d MMM yyyy HH:mm:ss Z    星期五, 12 八月 2016 15:44:40 +0800\n     *                                     yyMMddHHmmssZ    160812154440+0800\n     *                        yyyy-MM-dd'T'HH:mm:ss.SSSZ    2016-08-12T15:44:40.461+0800\n     * EEEE 'DATE('yyyy-MM-dd')' 'TIME('HH:mm:ss')' zzzz    星期五 DATE(2016-08-12) TIME(15:44:40) 中国标准时间\n     * </pre>\n     * 注意：SimpleDateFormat不是线程安全的，线程安全需用{@code ThreadLocal<SimpleDateFormat>}\n     */\n\n    private static final DateFormat DEFAULT_FORMAT = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\", Locale.getDefault());\n\n    private TimeUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    /**\n     * 将时间戳转为时间字符串\n     * <p>格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param millis 毫秒时间戳\n     * @return 时间字符串\n     */\n    public static String millis2String(long millis) {\n        return millis2String(millis, DEFAULT_FORMAT);\n    }\n\n    /**\n     * 将时间戳转为时间字符串\n     * <p>格式为format</p>\n     *\n     * @param millis 毫秒时间戳\n     * @param format 时间格式\n     * @return 时间字符串\n     */\n    public static String millis2String(long millis, DateFormat format) {\n        return format.format(new Date(millis));\n    }\n\n    /**\n     * 将时间字符串转为时间戳\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 毫秒时间戳\n     */\n    public static long string2Millis(String time) {\n        return string2Millis(time, DEFAULT_FORMAT);\n    }\n\n    /**\n     * 将时间字符串转为时间戳\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 毫秒时间戳\n     */\n    public static long string2Millis(String time, DateFormat format) {\n        try {\n            return format.parse(time).getTime();\n        } catch (ParseException e) {\n            e.printStackTrace();\n        }\n        return -1;\n    }\n\n    /**\n     * 将时间字符串转为Date类型\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return Date类型\n     */\n    public static Date string2Date(String time) {\n        return string2Date(time, DEFAULT_FORMAT);\n    }\n\n    /**\n     * 将时间字符串转为Date类型\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return Date类型\n     */\n    public static Date string2Date(String time, DateFormat format) {\n        try {\n            return format.parse(time);\n        } catch (ParseException e) {\n            e.printStackTrace();\n        }\n        return null;\n    }\n\n    /**\n     * 将Date类型转为时间字符串\n     * <p>格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param date Date类型时间\n     * @return 时间字符串\n     */\n    public static String date2String(Date date) {\n        return date2String(date, DEFAULT_FORMAT);\n    }\n\n    /**\n     * 将Date类型转为时间字符串\n     * <p>格式为format</p>\n     *\n     * @param date   Date类型时间\n     * @param format 时间格式\n     * @return 时间字符串\n     */\n    public static String date2String(Date date, DateFormat format) {\n        return format.format(date);\n    }\n\n    /**\n     * 将Date类型转为时间戳\n     *\n     * @param date Date类型时间\n     * @return 毫秒时间戳\n     */\n    public static long date2Millis(Date date) {\n        return date.getTime();\n    }\n\n    /**\n     * 将时间戳转为Date类型\n     *\n     * @param millis 毫秒时间戳\n     * @return Date类型时间\n     */\n    public static Date millis2Date(long millis) {\n        return new Date(millis);\n    }\n\n    /**\n     * 获取两个时间差（单位：unit）\n     * <p>time0和time1格式都为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time0 时间字符串0\n     * @param time1 时间字符串1\n     * @param unit  单位类型\n     *              <ul>\n     *              <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *              <li>{@link TimeConstants#SEC }: 秒</li>\n     *              <li>{@link TimeConstants#MIN }: 分</li>\n     *              <li>{@link TimeConstants#HOUR}: 小时</li>\n     *              <li>{@link TimeConstants#DAY }: 天</li>\n     *              </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpan(String time0, String time1, @TimeConstants.Unit int unit) {\n        return getTimeSpan(time0, time1, DEFAULT_FORMAT, unit);\n    }\n\n    /**\n     * 获取两个时间差（单位：unit）\n     * <p>time0和time1格式都为format</p>\n     *\n     * @param time0  时间字符串0\n     * @param time1  时间字符串1\n     * @param format 时间格式\n     * @param unit   单位类型\n     *               <ul>\n     *               <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *               <li>{@link TimeConstants#SEC }: 秒</li>\n     *               <li>{@link TimeConstants#MIN }: 分</li>\n     *               <li>{@link TimeConstants#HOUR}: 小时</li>\n     *               <li>{@link TimeConstants#DAY }: 天</li>\n     *               </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpan(String time0, String time1, DateFormat format, @TimeConstants.Unit int unit) {\n        return millis2TimeSpan(Math.abs(string2Millis(time0, format) - string2Millis(time1, format)), unit);\n    }\n\n    /**\n     * 获取两个时间差（单位：unit）\n     *\n     * @param date0 Date类型时间0\n     * @param date1 Date类型时间1\n     * @param unit  单位类型\n     *              <ul>\n     *              <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *              <li>{@link TimeConstants#SEC }: 秒</li>\n     *              <li>{@link TimeConstants#MIN }: 分</li>\n     *              <li>{@link TimeConstants#HOUR}: 小时</li>\n     *              <li>{@link TimeConstants#DAY }: 天</li>\n     *              </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpan(Date date0, Date date1, @TimeConstants.Unit int unit) {\n        return millis2TimeSpan(Math.abs(date2Millis(date0) - date2Millis(date1)), unit);\n    }\n\n    /**\n     * 获取两个时间差（单位：unit）\n     *\n     * @param millis0 毫秒时间戳0\n     * @param millis1 毫秒时间戳1\n     * @param unit    单位类型\n     *                <ul>\n     *                <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                <li>{@link TimeConstants#SEC }: 秒</li>\n     *                <li>{@link TimeConstants#MIN }: 分</li>\n     *                <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                <li>{@link TimeConstants#DAY }: 天</li>\n     *                </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpan(long millis0, long millis1, @TimeConstants.Unit int unit) {\n        return millis2TimeSpan(Math.abs(millis0 - millis1), unit);\n    }\n\n    /**\n     * 获取合适型两个时间差\n     * <p>time0和time1格式都为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time0     时间字符串0\n     * @param time1     时间字符串1\n     * @param precision 精度\n     *                  <p>precision = 0，返回null</p>\n     *                  <p>precision = 1，返回天</p>\n     *                  <p>precision = 2，返回天和小时</p>\n     *                  <p>precision = 3，返回天、小时和分钟</p>\n     *                  <p>precision = 4，返回天、小时、分钟和秒</p>\n     *                  <p>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</p>\n     * @return 合适型两个时间差\n     */\n    public static String getFitTimeSpan(String time0, String time1, int precision) {\n        return millis2FitTimeSpan(Math.abs(string2Millis(time0, DEFAULT_FORMAT) - string2Millis(time1, DEFAULT_FORMAT)), precision);\n    }\n\n    /**\n     * 获取合适型两个时间差\n     * <p>time0和time1格式都为format</p>\n     *\n     * @param time0     时间字符串0\n     * @param time1     时间字符串1\n     * @param format    时间格式\n     * @param precision 精度\n     *                  <p>precision = 0，返回null</p>\n     *                  <p>precision = 1，返回天</p>\n     *                  <p>precision = 2，返回天和小时</p>\n     *                  <p>precision = 3，返回天、小时和分钟</p>\n     *                  <p>precision = 4，返回天、小时、分钟和秒</p>\n     *                  <p>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</p>\n     * @return 合适型两个时间差\n     */\n    public static String getFitTimeSpan(String time0, String time1, DateFormat format, int precision) {\n        return millis2FitTimeSpan(Math.abs(string2Millis(time0, format) - string2Millis(time1, format)), precision);\n    }\n\n    /**\n     * 获取合适型两个时间差\n     *\n     * @param date0     Date类型时间0\n     * @param date1     Date类型时间1\n     * @param precision 精度\n     *                  <p>precision = 0，返回null</p>\n     *                  <p>precision = 1，返回天</p>\n     *                  <p>precision = 2，返回天和小时</p>\n     *                  <p>precision = 3，返回天、小时和分钟</p>\n     *                  <p>precision = 4，返回天、小时、分钟和秒</p>\n     *                  <p>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</p>\n     * @return 合适型两个时间差\n     */\n    public static String getFitTimeSpan(Date date0, Date date1, int precision) {\n        return millis2FitTimeSpan(Math.abs(date2Millis(date0) - date2Millis(date1)), precision);\n    }\n\n    /**\n     * 获取合适型两个时间差\n     *\n     * @param millis0   毫秒时间戳1\n     * @param millis1   毫秒时间戳2\n     * @param precision 精度\n     *                  <p>precision = 0，返回null</p>\n     *                  <p>precision = 1，返回天</p>\n     *                  <p>precision = 2，返回天和小时</p>\n     *                  <p>precision = 3，返回天、小时和分钟</p>\n     *                  <p>precision = 4，返回天、小时、分钟和秒</p>\n     *                  <p>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</p>\n     * @return 合适型两个时间差\n     */\n    public static String getFitTimeSpan(long millis0, long millis1, int precision) {\n        return millis2FitTimeSpan(Math.abs(millis0 - millis1), precision);\n    }\n\n    /**\n     * 获取当前毫秒时间戳\n     *\n     * @return 毫秒时间戳\n     */\n    public static long getNowMills() {\n        return System.currentTimeMillis();\n    }\n\n    /**\n     * 获取当前时间字符串\n     * <p>格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @return 时间字符串\n     */\n    public static String getNowString() {\n        return millis2String(System.currentTimeMillis(), DEFAULT_FORMAT);\n    }\n\n    /**\n     * 获取当前时间字符串\n     * <p>格式为format</p>\n     *\n     * @param format 时间格式\n     * @return 时间字符串\n     */\n    public static String getNowString(DateFormat format) {\n        return millis2String(System.currentTimeMillis(), format);\n    }\n\n    /**\n     * 获取当前Date\n     *\n     * @return Date类型时间\n     */\n    public static Date getNowDate() {\n        return new Date();\n    }\n\n    /**\n     * 获取与当前时间的差（单位：unit）\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @param unit 单位类型\n     *             <ul>\n     *             <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *             <li>{@link TimeConstants#SEC }: 秒</li>\n     *             <li>{@link TimeConstants#MIN }: 分</li>\n     *             <li>{@link TimeConstants#HOUR}: 小时</li>\n     *             <li>{@link TimeConstants#DAY }: 天</li>\n     *             </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpanByNow(String time, @TimeConstants.Unit int unit) {\n        return getTimeSpan(getNowString(), time, DEFAULT_FORMAT, unit);\n    }\n\n    /**\n     * 获取与当前时间的差（单位：unit）\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @param unit   单位类型\n     *               <ul>\n     *               <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *               <li>{@link TimeConstants#SEC }: 秒</li>\n     *               <li>{@link TimeConstants#MIN }: 分</li>\n     *               <li>{@link TimeConstants#HOUR}: 小时</li>\n     *               <li>{@link TimeConstants#DAY }: 天</li>\n     *               </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpanByNow(String time, DateFormat format, @TimeConstants.Unit int unit) {\n        return getTimeSpan(getNowString(format), time, format, unit);\n    }\n\n    /**\n     * 获取与当前时间的差（单位：unit）\n     *\n     * @param date Date类型时间\n     * @param unit 单位类型\n     *             <ul>\n     *             <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *             <li>{@link TimeConstants#SEC }: 秒</li>\n     *             <li>{@link TimeConstants#MIN }: 分</li>\n     *             <li>{@link TimeConstants#HOUR}: 小时</li>\n     *             <li>{@link TimeConstants#DAY }: 天</li>\n     *             </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpanByNow(Date date, @TimeConstants.Unit int unit) {\n        return getTimeSpan(new Date(), date, unit);\n    }\n\n    /**\n     * 获取与当前时间的差（单位：unit）\n     *\n     * @param millis 毫秒时间戳\n     * @param unit   单位类型\n     *               <ul>\n     *               <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *               <li>{@link TimeConstants#SEC }: 秒</li>\n     *               <li>{@link TimeConstants#MIN }: 分</li>\n     *               <li>{@link TimeConstants#HOUR}: 小时</li>\n     *               <li>{@link TimeConstants#DAY }: 天</li>\n     *               </ul>\n     * @return unit时间戳\n     */\n    public static long getTimeSpanByNow(long millis, @TimeConstants.Unit int unit) {\n        return getTimeSpan(System.currentTimeMillis(), millis, unit);\n    }\n\n    /**\n     * 获取合适型与当前时间的差\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time      时间字符串\n     * @param precision 精度\n     *                  <ul>\n     *                  <li>precision = 0，返回null</li>\n     *                  <li>precision = 1，返回天</li>\n     *                  <li>precision = 2，返回天和小时</li>\n     *                  <li>precision = 3，返回天、小时和分钟</li>\n     *                  <li>precision = 4，返回天、小时、分钟和秒</li>\n     *                  <li>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</li>\n     *                  </ul>\n     * @return 合适型与当前时间的差\n     */\n    public static String getFitTimeSpanByNow(String time, int precision) {\n        return getFitTimeSpan(getNowString(), time, DEFAULT_FORMAT, precision);\n    }\n\n    /**\n     * 获取合适型与当前时间的差\n     * <p>time格式为format</p>\n     *\n     * @param time      时间字符串\n     * @param format    时间格式\n     * @param precision 精度\n     *                  <ul>\n     *                  <li>precision = 0，返回null</li>\n     *                  <li>precision = 1，返回天</li>\n     *                  <li>precision = 2，返回天和小时</li>\n     *                  <li>precision = 3，返回天、小时和分钟</li>\n     *                  <li>precision = 4，返回天、小时、分钟和秒</li>\n     *                  <li>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</li>\n     *                  </ul>\n     * @return 合适型与当前时间的差\n     */\n    public static String getFitTimeSpanByNow(String time, DateFormat format, int precision) {\n        return getFitTimeSpan(getNowString(format), time, format, precision);\n    }\n\n    /**\n     * 获取合适型与当前时间的差\n     *\n     * @param date      Date类型时间\n     * @param precision 精度\n     *                  <ul>\n     *                  <li>precision = 0，返回null</li>\n     *                  <li>precision = 1，返回天</li>\n     *                  <li>precision = 2，返回天和小时</li>\n     *                  <li>precision = 3，返回天、小时和分钟</li>\n     *                  <li>precision = 4，返回天、小时、分钟和秒</li>\n     *                  <li>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</li>\n     *                  </ul>\n     * @return 合适型与当前时间的差\n     */\n    public static String getFitTimeSpanByNow(Date date, int precision) {\n        return getFitTimeSpan(getNowDate(), date, precision);\n    }\n\n    /**\n     * 获取合适型与当前时间的差\n     *\n     * @param millis    毫秒时间戳\n     * @param precision 精度\n     *                  <ul>\n     *                  <li>precision = 0，返回null</li>\n     *                  <li>precision = 1，返回天</li>\n     *                  <li>precision = 2，返回天和小时</li>\n     *                  <li>precision = 3，返回天、小时和分钟</li>\n     *                  <li>precision = 4，返回天、小时、分钟和秒</li>\n     *                  <li>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</li>\n     *                  </ul>\n     * @return 合适型与当前时间的差\n     */\n    public static String getFitTimeSpanByNow(long millis, int precision) {\n        return getFitTimeSpan(System.currentTimeMillis(), millis, precision);\n    }\n\n    /**\n     * 获取友好型与当前时间的差\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 友好型与当前时间的差\n     * <ul>\n     * <li>如果小于1秒钟内，显示刚刚</li>\n     * <li>如果在1分钟内，显示XXX秒前</li>\n     * <li>如果在1小时内，显示XXX分钟前</li>\n     * <li>如果在1小时外的今天内，显示今天15:32</li>\n     * <li>如果是昨天的，显示昨天15:32</li>\n     * <li>其余显示，2016-10-15</li>\n     * <li>时间不合法的情况全部日期和时间信息，如星期六 十月 27 14:21:20 CST 2007</li>\n     * </ul>\n     */\n    public static String getFriendlyTimeSpanByNow(String time) {\n        return getFriendlyTimeSpanByNow(time, DEFAULT_FORMAT);\n    }\n\n    /**\n     * 获取友好型与当前时间的差\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 友好型与当前时间的差\n     * <ul>\n     * <li>如果小于1秒钟内，显示刚刚</li>\n     * <li>如果在1分钟内，显示XXX秒前</li>\n     * <li>如果在1小时内，显示XXX分钟前</li>\n     * <li>如果在1小时外的今天内，显示今天15:32</li>\n     * <li>如果是昨天的，显示昨天15:32</li>\n     * <li>其余显示，2016-10-15</li>\n     * <li>时间不合法的情况全部日期和时间信息，如星期六 十月 27 14:21:20 CST 2007</li>\n     * </ul>\n     */\n    public static String getFriendlyTimeSpanByNow(String time, DateFormat format) {\n        return getFriendlyTimeSpanByNow(string2Millis(time, format));\n    }\n\n    /**\n     * 获取友好型与当前时间的差\n     *\n     * @param date Date类型时间\n     * @return 友好型与当前时间的差\n     * <ul>\n     * <li>如果小于1秒钟内，显示刚刚</li>\n     * <li>如果在1分钟内，显示XXX秒前</li>\n     * <li>如果在1小时内，显示XXX分钟前</li>\n     * <li>如果在1小时外的今天内，显示今天15:32</li>\n     * <li>如果是昨天的，显示昨天15:32</li>\n     * <li>其余显示，2016-10-15</li>\n     * <li>时间不合法的情况全部日期和时间信息，如星期六 十月 27 14:21:20 CST 2007</li>\n     * </ul>\n     */\n    public static String getFriendlyTimeSpanByNow(Date date) {\n        return getFriendlyTimeSpanByNow(date.getTime());\n    }\n\n    /**\n     * 获取友好型与当前时间的差\n     *\n     * @param millis 毫秒时间戳\n     * @return 友好型与当前时间的差\n     * <ul>\n     * <li>如果小于1秒钟内，显示刚刚</li>\n     * <li>如果在1分钟内，显示XXX秒前</li>\n     * <li>如果在1小时内，显示XXX分钟前</li>\n     * <li>如果在1小时外的今天内，显示今天15:32</li>\n     * <li>如果是昨天的，显示昨天15:32</li>\n     * <li>其余显示，2016-10-15</li>\n     * <li>时间不合法的情况全部日期和时间信息，如星期六 十月 27 14:21:20 CST 2007</li>\n     * </ul>\n     */\n    public static String getFriendlyTimeSpanByNow(long millis) {\n        String string = millis2String(millis);\n        long now = System.currentTimeMillis();\n        long span = now - millis;\n        if (span < 0)\n            return String.format(\"%tc\", millis);// U can read http://www.apihome.cn/api/java/Formatter.html to understand it.\n        if (span < 1000) {\n            return \"刚刚\";\n        } else if (span < TimeConstants.MIN) {\n            return String.format(Locale.getDefault(), \"%d秒前\", span / TimeConstants.SEC);\n        } else if (span < TimeConstants.HOUR) {\n            return String.format(Locale.getDefault(), \"%d分钟前\", span / TimeConstants.MIN);\n        } else if (span < TimeConstants.DAY) {\n            return String.format(Locale.getDefault(), \"%d小时前\", span / TimeConstants.HOUR);\n        } else if (span < TimeConstants.MONTH) {\n            return String.format(Locale.getDefault(), \"%d天前\", span / TimeConstants.DAY);\n        } else if (span < TimeConstants.YEAR) {\n            return String.format(Locale.getDefault(), \"%d月前\", span / TimeConstants.MONTH);\n        } else if (span >= TimeConstants.YEAR) {\n            return String.format(Locale.getDefault(), \"%d年前\", span / TimeConstants.YEAR);\n        } else {\n            return \"未知\";\n        }\n        // 获取当天00:00\n       /* long wee = (now / TimeConstants.DAY) * TimeConstants.DAY - 8 * TimeConstants.HOUR;\n        if (millis >= wee) {\n            return String.format(\"今天%tR\", millis);\n        } else if (millis >= wee - TimeConstants.DAY) {\n            return String.format(\"昨天%tR\", millis);\n        } else if (millis >){\n            // return String.format(\"%tF\", millis);\n            return \"1年前\";\n        }*/\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间戳\n     *\n     * @param millis   给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间戳\n     */\n    public static long getMillis(long millis, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis + timeSpan2Millis(timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间戳\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time     给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间戳\n     */\n    public static long getMillis(String time, long timeSpan, @TimeConstants.Unit int unit) {\n        return getMillis(time, DEFAULT_FORMAT, timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间戳\n     * <p>time格式为format</p>\n     *\n     * @param time     给定时间\n     * @param format   时间格式\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间戳\n     */\n    public static long getMillis(String time, DateFormat format, long timeSpan, @TimeConstants.Unit int unit) {\n        return string2Millis(time, format) + timeSpan2Millis(timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间戳\n     *\n     * @param date     给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间戳\n     */\n    public static long getMillis(Date date, long timeSpan, @TimeConstants.Unit int unit) {\n        return date2Millis(date) + timeSpan2Millis(timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间字符串\n     * <p>格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param millis   给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间字符串\n     */\n    public static String getString(long millis, long timeSpan, @TimeConstants.Unit int unit) {\n        return getString(millis, DEFAULT_FORMAT, timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间字符串\n     * <p>格式为format</p>\n     *\n     * @param millis   给定时间\n     * @param format   时间格式\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间字符串\n     */\n    public static String getString(long millis, DateFormat format, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis2String(millis + timeSpan2Millis(timeSpan, unit), format);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间字符串\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time     给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间字符串\n     */\n    public static String getString(String time, long timeSpan, @TimeConstants.Unit int unit) {\n        return getString(time, DEFAULT_FORMAT, timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间字符串\n     * <p>格式为format</p>\n     *\n     * @param time     给定时间\n     * @param format   时间格式\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间字符串\n     */\n    public static String getString(String time, DateFormat format, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis2String(string2Millis(time, format) + timeSpan2Millis(timeSpan, unit), format);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间字符串\n     * <p>格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param date     给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间字符串\n     */\n    public static String getString(Date date, long timeSpan, @TimeConstants.Unit int unit) {\n        return getString(date, DEFAULT_FORMAT, timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的时间字符串\n     * <p>格式为format</p>\n     *\n     * @param date     给定时间\n     * @param format   时间格式\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的时间字符串\n     */\n    public static String getString(Date date, DateFormat format, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis2String(date2Millis(date) + timeSpan2Millis(timeSpan, unit), format);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的Date\n     *\n     * @param millis   给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的Date\n     */\n    public static Date getDate(long millis, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis2Date(millis + timeSpan2Millis(timeSpan, unit));\n    }\n\n    /**\n     * 获取与给定时间等于时间差的Date\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time     给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的Date\n     */\n    public static Date getDate(String time, long timeSpan, @TimeConstants.Unit int unit) {\n        return getDate(time, DEFAULT_FORMAT, timeSpan, unit);\n    }\n\n    /**\n     * 获取与给定时间等于时间差的Date\n     * <p>格式为format</p>\n     *\n     * @param time     给定时间\n     * @param format   时间格式\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的Date\n     */\n    public static Date getDate(String time, DateFormat format, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis2Date(string2Millis(time, format) + timeSpan2Millis(timeSpan, unit));\n    }\n\n    /**\n     * 获取与给定时间等于时间差的Date\n     *\n     * @param date     给定时间\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与给定时间等于时间差的Date\n     */\n    public static Date getDate(Date date, long timeSpan, @TimeConstants.Unit int unit) {\n        return millis2Date(date2Millis(date) + timeSpan2Millis(timeSpan, unit));\n    }\n\n    /**\n     * 获取与当前时间等于时间差的时间戳\n     *\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与当前时间等于时间差的时间戳\n     */\n    public static long getMillisByNow(long timeSpan, @TimeConstants.Unit int unit) {\n        return getMillis(getNowMills(), timeSpan, unit);\n    }\n\n    /**\n     * 获取与当前时间等于时间差的时间字符串\n     * <p>格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与当前时间等于时间差的时间字符串\n     */\n    public static String getStringByNow(long timeSpan, @TimeConstants.Unit int unit) {\n        return getStringByNow(timeSpan, DEFAULT_FORMAT, unit);\n    }\n\n    /**\n     * 获取与当前时间等于时间差的时间字符串\n     * <p>格式为format</p>\n     *\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param format   时间格式\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与当前时间等于时间差的时间字符串\n     */\n    public static String getStringByNow(long timeSpan, DateFormat format, @TimeConstants.Unit int unit) {\n        return getString(getNowMills(), format, timeSpan, unit);\n    }\n\n    /**\n     * 获取与当前时间等于时间差的Date\n     *\n     * @param timeSpan 时间差的毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 与当前时间等于时间差的Date\n     */\n    public static Date getDateByNow(long timeSpan, @TimeConstants.Unit int unit) {\n        return getDate(getNowMills(), timeSpan, unit);\n    }\n\n    /**\n     * 判断是否今天\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return {@code true}: 是<br>{@code false}: 否\n     */\n    public static boolean isToday(String time) {\n        return isToday(string2Millis(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 判断是否今天\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return {@code true}: 是<br>{@code false}: 否\n     */\n    public static boolean isToday(String time, DateFormat format) {\n        return isToday(string2Millis(time, format));\n    }\n\n    /**\n     * 判断是否今天\n     *\n     * @param date Date类型时间\n     * @return {@code true}: 是<br>{@code false}: 否\n     */\n    public static boolean isToday(Date date) {\n        return isToday(date.getTime());\n    }\n\n    /**\n     * 判断是否今天\n     *\n     * @param millis 毫秒时间戳\n     * @return {@code true}: 是<br>{@code false}: 否\n     */\n    public static boolean isToday(long millis) {\n        long wee = (System.currentTimeMillis() / TimeConstants.DAY) * TimeConstants.DAY - 8 * TimeConstants.HOUR;\n        return millis >= wee && millis < wee + TimeConstants.DAY;\n    }\n\n    /**\n     * 判断是否闰年\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return {@code true}: 闰年<br>{@code false}: 平年\n     */\n    public static boolean isLeapYear(String time) {\n        return isLeapYear(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 判断是否闰年\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return {@code true}: 闰年<br>{@code false}: 平年\n     */\n    public static boolean isLeapYear(String time, DateFormat format) {\n        return isLeapYear(string2Date(time, format));\n    }\n\n    /**\n     * 判断是否闰年\n     *\n     * @param date Date类型时间\n     * @return {@code true}: 闰年<br>{@code false}: 平年\n     */\n    public static boolean isLeapYear(Date date) {\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(date);\n        int year = cal.get(Calendar.YEAR);\n        return isLeapYear(year);\n    }\n\n    /**\n     * 判断是否闰年\n     *\n     * @param millis 毫秒时间戳\n     * @return {@code true}: 闰年<br>{@code false}: 平年\n     */\n    public static boolean isLeapYear(long millis) {\n        return isLeapYear(millis2Date(millis));\n    }\n\n    /**\n     * 判断是否闰年\n     *\n     * @param year 年份\n     * @return {@code true}: 闰年<br>{@code false}: 平年\n     */\n    public static boolean isLeapYear(int year) {\n        return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;\n    }\n\n    /**\n     * 获取中式星期\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 中式星期\n     */\n    public static String getChineseWeek(String time) {\n        return getChineseWeek(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取中式星期\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 中式星期\n     */\n    public static String getChineseWeek(String time, DateFormat format) {\n        return getChineseWeek(string2Date(time, format));\n    }\n\n    /**\n     * 获取中式星期\n     *\n     * @param date Date类型时间\n     * @return 中式星期\n     */\n    public static String getChineseWeek(Date date) {\n        return new SimpleDateFormat(\"E\", Locale.CHINA).format(date);\n    }\n\n    /**\n     * 获取中式星期\n     *\n     * @param millis 毫秒时间戳\n     * @return 中式星期\n     */\n    public static String getChineseWeek(long millis) {\n        return getChineseWeek(new Date(millis));\n    }\n\n    /**\n     * 获取美式星期\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 美式星期\n     */\n    public static String getUSWeek(String time) {\n        return getUSWeek(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取美式星期\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 美式星期\n     */\n    public static String getUSWeek(String time, DateFormat format) {\n        return getUSWeek(string2Date(time, format));\n    }\n\n    /**\n     * 获取美式星期\n     *\n     * @param date Date类型时间\n     * @return 美式星期\n     */\n    public static String getUSWeek(Date date) {\n        return new SimpleDateFormat(\"EEEE\", Locale.US).format(date);\n    }\n\n    /**\n     * 获取美式星期\n     *\n     * @param millis 毫秒时间戳\n     * @return 美式星期\n     */\n    public static String getUSWeek(long millis) {\n        return getUSWeek(new Date(millis));\n    }\n\n    /**\n     * 获取星期索引\n     * <p>注意：周日的Index才是1，周六为7</p>\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 1...7\n     * @see Calendar#SUNDAY\n     * @see Calendar#MONDAY\n     * @see Calendar#TUESDAY\n     * @see Calendar#WEDNESDAY\n     * @see Calendar#THURSDAY\n     * @see Calendar#FRIDAY\n     * @see Calendar#SATURDAY\n     */\n    public static int getWeekIndex(String time) {\n        return getWeekIndex(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取星期索引\n     * <p>注意：周日的Index才是1，周六为7</p>\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 1...7\n     * @see Calendar#SUNDAY\n     * @see Calendar#MONDAY\n     * @see Calendar#TUESDAY\n     * @see Calendar#WEDNESDAY\n     * @see Calendar#THURSDAY\n     * @see Calendar#FRIDAY\n     * @see Calendar#SATURDAY\n     */\n    public static int getWeekIndex(String time, DateFormat format) {\n        return getWeekIndex(string2Date(time, format));\n    }\n\n    /**\n     * 获取星期索引\n     * <p>注意：周日的Index才是1，周六为7</p>\n     *\n     * @param date Date类型时间\n     * @return 1...7\n     * @see Calendar#SUNDAY\n     * @see Calendar#MONDAY\n     * @see Calendar#TUESDAY\n     * @see Calendar#WEDNESDAY\n     * @see Calendar#THURSDAY\n     * @see Calendar#FRIDAY\n     * @see Calendar#SATURDAY\n     */\n    public static int getWeekIndex(Date date) {\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(date);\n        return cal.get(Calendar.DAY_OF_WEEK);\n    }\n\n    /**\n     * 获取星期索引\n     * <p>注意：周日的Index才是1，周六为7</p>\n     *\n     * @param millis 毫秒时间戳\n     * @return 1...7\n     * @see Calendar#SUNDAY\n     * @see Calendar#MONDAY\n     * @see Calendar#TUESDAY\n     * @see Calendar#WEDNESDAY\n     * @see Calendar#THURSDAY\n     * @see Calendar#FRIDAY\n     * @see Calendar#SATURDAY\n     */\n    public static int getWeekIndex(long millis) {\n        return getWeekIndex(millis2Date(millis));\n    }\n\n    /**\n     * 获取月份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 1...5\n     */\n    public static int getWeekOfMonth(String time) {\n        return getWeekOfMonth(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取月份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 1...5\n     */\n    public static int getWeekOfMonth(String time, DateFormat format) {\n        return getWeekOfMonth(string2Date(time, format));\n    }\n\n    /**\n     * 获取月份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     *\n     * @param date Date类型时间\n     * @return 1...5\n     */\n    public static int getWeekOfMonth(Date date) {\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(date);\n        return cal.get(Calendar.WEEK_OF_MONTH);\n    }\n\n    /**\n     * 获取月份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     *\n     * @param millis 毫秒时间戳\n     * @return 1...5\n     */\n    public static int getWeekOfMonth(long millis) {\n        return getWeekOfMonth(millis2Date(millis));\n    }\n\n    /**\n     * 获取年份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 1...54\n     */\n    public static int getWeekOfYear(String time) {\n        return getWeekOfYear(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取年份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 1...54\n     */\n    public static int getWeekOfYear(String time, DateFormat format) {\n        return getWeekOfYear(string2Date(time, format));\n    }\n\n    /**\n     * 获取年份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     *\n     * @param date Date类型时间\n     * @return 1...54\n     */\n    public static int getWeekOfYear(Date date) {\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(date);\n        return cal.get(Calendar.WEEK_OF_YEAR);\n    }\n\n    /**\n     * 获取年份中的第几周\n     * <p>注意：国外周日才是新的一周的开始</p>\n     *\n     * @param millis 毫秒时间戳\n     * @return 1...54\n     */\n    public static int getWeekOfYear(long millis) {\n        return getWeekOfYear(millis2Date(millis));\n    }\n\n    private static final String[] CHINESE_ZODIAC = {\"猴\", \"鸡\", \"狗\", \"猪\", \"鼠\", \"牛\", \"虎\", \"兔\", \"龙\", \"蛇\", \"马\", \"羊\"};\n\n    /**\n     * 获取生肖\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 生肖\n     */\n    public static String getChineseZodiac(String time) {\n        return getChineseZodiac(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取生肖\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 生肖\n     */\n    public static String getChineseZodiac(String time, DateFormat format) {\n        return getChineseZodiac(string2Date(time, format));\n    }\n\n    /**\n     * 获取生肖\n     *\n     * @param date Date类型时间\n     * @return 生肖\n     */\n    public static String getChineseZodiac(Date date) {\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(date);\n        return CHINESE_ZODIAC[cal.get(Calendar.YEAR) % 12];\n    }\n\n    /**\n     * 获取生肖\n     *\n     * @param millis 毫秒时间戳\n     * @return 生肖\n     */\n    public static String getChineseZodiac(long millis) {\n        return getChineseZodiac(millis2Date(millis));\n    }\n\n    /**\n     * 获取生肖\n     *\n     * @param year 年\n     * @return 生肖\n     */\n    public static String getChineseZodiac(int year) {\n        return CHINESE_ZODIAC[year % 12];\n    }\n\n    private static final String[] ZODIAC = {\"水瓶座\", \"双鱼座\", \"白羊座\", \"金牛座\", \"双子座\", \"巨蟹座\", \"狮子座\", \"处女座\", \"天秤座\", \"天蝎座\", \"射手座\", \"魔羯座\"};\n    private static final int[] ZODIAC_FLAGS = {20, 19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22};\n\n    /**\n     * 获取星座\n     * <p>time格式为yyyy-MM-dd HH:mm:ss</p>\n     *\n     * @param time 时间字符串\n     * @return 生肖\n     */\n    public static String getZodiac(String time) {\n        return getZodiac(string2Date(time, DEFAULT_FORMAT));\n    }\n\n    /**\n     * 获取星座\n     * <p>time格式为format</p>\n     *\n     * @param time   时间字符串\n     * @param format 时间格式\n     * @return 生肖\n     */\n    public static String getZodiac(String time, DateFormat format) {\n        return getZodiac(string2Date(time, format));\n    }\n\n    /**\n     * 获取星座\n     *\n     * @param date Date类型时间\n     * @return 星座\n     */\n    public static String getZodiac(Date date) {\n        Calendar cal = Calendar.getInstance();\n        cal.setTime(date);\n        int month = cal.get(Calendar.MONTH) + 1;\n        int day = cal.get(Calendar.DAY_OF_MONTH);\n        return getZodiac(month, day);\n    }\n\n    /**\n     * 获取星座\n     *\n     * @param millis 毫秒时间戳\n     * @return 星座\n     */\n    public static String getZodiac(long millis) {\n        return getZodiac(millis2Date(millis));\n    }\n\n    /**\n     * 获取星座\n     *\n     * @param month 月\n     * @param day   日\n     * @return 星座\n     */\n    public static String getZodiac(int month, int day) {\n        return ZODIAC[day >= ZODIAC_FLAGS[month - 1]\n                ? month - 1\n                : (month + 10) % 12];\n    }\n\n    /**\n     * 以unit为单位的时间长度转毫秒时间戳\n     *\n     * @param timeSpan 毫秒时间戳\n     * @param unit     单位类型\n     *                 <ul>\n     *                 <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *                 <li>{@link TimeConstants#SEC }: 秒</li>\n     *                 <li>{@link TimeConstants#MIN }: 分</li>\n     *                 <li>{@link TimeConstants#HOUR}: 小时</li>\n     *                 <li>{@link TimeConstants#DAY }: 天</li>\n     *                 </ul>\n     * @return 毫秒时间戳\n     */\n    private static long timeSpan2Millis(long timeSpan, @TimeConstants.Unit int unit) {\n        return timeSpan * unit;\n    }\n\n    /**\n     * 毫秒时间戳转以unit为单位的时间长度\n     *\n     * @param millis 毫秒时间戳\n     * @param unit   单位类型\n     *               <ul>\n     *               <li>{@link TimeConstants#MSEC}: 毫秒</li>\n     *               <li>{@link TimeConstants#SEC }: 秒</li>\n     *               <li>{@link TimeConstants#MIN }: 分</li>\n     *               <li>{@link TimeConstants#HOUR}: 小时</li>\n     *               <li>{@link TimeConstants#DAY }: 天</li>\n     *               </ul>\n     * @return 以unit为单位的时间长度\n     */\n    private static long millis2TimeSpan(long millis, @TimeConstants.Unit int unit) {\n        return millis / unit;\n    }\n\n    /**\n     * 毫秒时间戳转合适时间长度\n     *\n     * @param millis    毫秒时间戳\n     *                  <p>小于等于0，返回null</p>\n     * @param precision 精度\n     *                  <ul>\n     *                  <li>precision = 0，返回null</li>\n     *                  <li>precision = 1，返回天</li>\n     *                  <li>precision = 2，返回天和小时</li>\n     *                  <li>precision = 3，返回天、小时和分钟</li>\n     *                  <li>precision = 4，返回天、小时、分钟和秒</li>\n     *                  <li>precision &gt;= 5，返回天、小时、分钟、秒和毫秒</li>\n     *                  </ul>\n     * @return 合适时间长度\n     */\n    private static String millis2FitTimeSpan(long millis, int precision) {\n        if (millis < 0 || precision <= 0) return null;\n        precision = Math.min(precision, 5);\n        String[] units = {\"天\", \"小时\", \"分钟\", \"秒\", \"毫秒\"};\n        if (millis == 0) return 0 + units[precision - 1];\n        StringBuilder sb = new StringBuilder();\n        int[] unitLen = {86400000, 3600000, 60000, 1000, 1};\n        for (int i = 0; i < precision; i++) {\n            if (millis >= unitLen[i]) {\n                long mode = millis / unitLen[i];\n                millis -= mode * unitLen[i];\n                sb.append(mode).append(units[i]);\n            }\n        }\n        return sb.toString();\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/CircleImageView.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapShader;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.RectF;\nimport android.graphics.Shader;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.ColorDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.util.AttributeSet;\nimport android.widget.ImageView;\n\nimport com.yoyiyi.soleil.R;\n\n\n/**\n * Created by zzq on 2015/11/20.\n */\npublic class CircleImageView extends ImageView {\n\n    private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;\n\n    private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;\n    private static final int COLORDRAWABLE_DIMENSION = 1;\n\n    private static final int DEFAULT_BORDER_WIDTH = 0;\n    private static final int DEFAULT_BORDER_COLOR = Color.BLACK;\n\n    private final RectF mDrawableRect = new RectF();\n    private final RectF mBorderRect = new RectF();\n\n    private final Matrix mShaderMatrix = new Matrix();\n    private final Paint mBitmapPaint = new Paint();\n    private final Paint mBorderPaint = new Paint();\n\n    private int mBorderColor = DEFAULT_BORDER_COLOR;\n    private int mBorderWidth = DEFAULT_BORDER_WIDTH;\n\n    private Bitmap mBitmap;\n    private BitmapShader mBitmapShader;\n    private int mBitmapWidth;\n    private int mBitmapHeight;\n\n    private float mDrawableRadius;\n    private float mBorderRadius;\n\n    private boolean mReady;\n    private boolean mSetupPending;\n\n    //默认显示圆形\n    private boolean isDisplayCircle = true;\n\n    public CircleImageView(Context context) {\n        this(context, null);\n    }\n\n    public CircleImageView(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public CircleImageView(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n        super.setScaleType(SCALE_TYPE);\n\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);\n\n        mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);\n        mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);\n\n        a.recycle();\n\n        mReady = true;\n\n        if (mSetupPending) {\n            setup();\n            mSetupPending = false;\n        }\n    }\n\n    @Override\n    public ScaleType getScaleType() {\n        return SCALE_TYPE;\n    }\n\n    @Override\n    public void setScaleType(ScaleType scaleType) {\n        if (scaleType != SCALE_TYPE) {\n            throw new IllegalArgumentException(String.format(\"ScaleType %s not supported.\", scaleType));\n        }\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        if (!isDisplayCircle) {\n            super.onDraw(canvas);\n            return;\n        }\n        if (getDrawable() == null) {\n            return;\n        }\n\n        canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint);\n        if (mBorderWidth != 0) {\n            canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint);\n        }\n    }\n\n    @Override\n    protected void onSizeChanged(int w, int h, int oldw, int oldh) {\n        super.onSizeChanged(w, h, oldw, oldh);\n        setup();\n    }\n\n    public void setDisplayCircle(boolean isDisplayCircle) {\n        this.isDisplayCircle = isDisplayCircle;\n    }\n\n    public int getBorderColor() {\n        return mBorderColor;\n    }\n\n    public void setBorderColor(int borderColor) {\n        if (borderColor == mBorderColor) {\n            return;\n        }\n\n        mBorderColor = borderColor;\n        mBorderPaint.setColor(mBorderColor);\n        invalidate();\n    }\n\n    public int getBorderWidth() {\n        return mBorderWidth;\n    }\n\n    public void setBorderWidth(int borderWidth) {\n        if (borderWidth == mBorderWidth) {\n            return;\n        }\n\n        mBorderWidth = borderWidth;\n        setup();\n    }\n\n    @Override\n    public void setImageBitmap(Bitmap bm) {\n        super.setImageBitmap(bm);\n        mBitmap = bm;\n        setup();\n    }\n\n    @Override\n    public void setImageDrawable(Drawable drawable) {\n        super.setImageDrawable(drawable);\n        mBitmap = getBitmapFromDrawable(drawable);\n        setup();\n    }\n\n    @Override\n    public void setImageResource(int resId) {\n        super.setImageResource(resId);\n        mBitmap = getBitmapFromDrawable(getDrawable());\n        setup();\n    }\n\n    private Bitmap getBitmapFromDrawable(Drawable drawable) {\n        if (drawable == null) {\n            return null;\n        }\n\n        if (drawable instanceof BitmapDrawable) {\n            return ((BitmapDrawable) drawable).getBitmap();\n        }\n\n        try {\n            Bitmap bitmap;\n\n            if (drawable instanceof ColorDrawable) {\n                bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);\n            } else {\n                bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);\n            }\n\n            Canvas canvas = new Canvas(bitmap);\n            drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());\n            drawable.draw(canvas);\n            return bitmap;\n        } catch (OutOfMemoryError e) {\n            return null;\n        }\n    }\n\n    private void setup() {\n        if (!mReady) {\n            mSetupPending = true;\n            return;\n        }\n\n        if (mBitmap == null) {\n            return;\n        }\n\n        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);\n\n        mBitmapPaint.setAntiAlias(true);\n        mBitmapPaint.setShader(mBitmapShader);\n\n        mBorderPaint.setStyle(Paint.Style.STROKE);\n        mBorderPaint.setAntiAlias(true);\n        mBorderPaint.setColor(mBorderColor);\n        mBorderPaint.setStrokeWidth(mBorderWidth);\n\n        mBitmapHeight = mBitmap.getHeight();\n        mBitmapWidth = mBitmap.getWidth();\n\n        mBorderRect.set(0, 0, getWidth(), getHeight());\n        mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2);\n\n        mDrawableRect.set(mBorderWidth, mBorderWidth, mBorderRect.width() - mBorderWidth, mBorderRect.height() - mBorderWidth);\n        mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2);\n\n        updateShaderMatrix();\n        invalidate();\n    }\n\n    private void updateShaderMatrix() {\n        float scale;\n        float dx = 0;\n        float dy = 0;\n\n        mShaderMatrix.set(null);\n\n        if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {\n            scale = mDrawableRect.height() / (float) mBitmapHeight;\n            dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;\n        } else {\n            scale = mDrawableRect.width() / (float) mBitmapWidth;\n            dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;\n        }\n\n        mShaderMatrix.setScale(scale, scale);\n        mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth, (int) (dy + 0.5f) + mBorderWidth);\n\n        mBitmapShader.setLocalMatrix(mShaderMatrix);\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/CustomLoadMoreView.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport com.chad.library.adapter.base.loadmore.LoadMoreView;\nimport com.yoyiyi.soleil.R;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/6 9:44\n * 描述:自定义加载更多布局\n */\n\npublic class CustomLoadMoreView extends LoadMoreView {\n    @Override\n    public int getLayoutId() {\n        return R.layout.layout_load_more;\n    }\n\n    @Override\n    protected int getLoadingViewId() {\n        return R.id.ll_loading;\n    }\n\n    @Override\n    protected int getLoadFailViewId() {\n        return R.id.ll_load_fail;\n    }\n\n    @Override\n    protected int getLoadEndViewId() {\n        return R.id.ll_load_end;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/DropDownMenu.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.support.annotation.NonNull;\nimport android.text.TextUtils;\nimport android.util.AttributeSet;\nimport android.util.DisplayMetrics;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.WindowManager;\nimport android.view.animation.AnimationUtils;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.yoyiyi.soleil.R;\nimport com.yoyiyi.soleil.utils.DimenUtils;\n\nimport java.util.List;\n\n\n/**\n * Created by dongjunkun on 2015/6/17.\n */\npublic class DropDownMenu extends LinearLayout {\n\n    private Paint mPaint;\n    private Path mPath;\n    private int mTriangleWidth;//三角形宽度\n    private int mTriangleHeight;//三角形高度\n    //设置三角形宽度的比例\n    private static final float RADIO_TRIANGLE_WIDTH = 1 / 6f;\n    //设置三角形最大宽度\n    private final int TRIANGLE_MAX_WIDTH = (int) (getScreeWidth() / 4 * RADIO_TRIANGLE_WIDTH);\n    private int mIniTranslationX;//三角形初始位置\n    private int mTranslationX;//三角形移动位置\n\n    //顶部菜单布局\n    private LinearLayout tabMenuView;\n    //底部容器，包含popupMenuViews，maskView\n    private FrameLayout containerView;\n    //弹出菜单父布局\n    private FrameLayout popupMenuViews;\n    //遮罩半透明View，点击可关闭DropDownMenu\n    private View maskView;\n    //tabMenuView里面选中的tab位置，-1表示未选中\n    private int current_tab_position = -1;\n\n    //分割线颜色\n    private int dividerColor = 0xffcccccc;\n    //tab选中颜色\n    private int textSelectedColor = 0xff890c85;\n    //tab未选中颜色\n    private int textUnselectedColor = 0xff111111;\n    //遮罩颜色\n    private int maskColor = 0x88888888;\n    //tab字体大小\n    private int menuTextSize = 14;\n\n    //tab选中图标\n    private int menuSelectedIcon;\n    //tab未选中图标\n    private int menuUnselectedIcon;\n\n    private float menuHeighPercent = 0.5f;\n    private ImageView mIvTriangle;\n    private int previousPosition = -1;\n\n    public DropDownMenu(Context context) {\n        super(context, null);\n    }\n\n    public DropDownMenu(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public DropDownMenu(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n\n        setOrientation(VERTICAL);\n\n        //为DropDownMenu添加自定义属性\n        int menuBackgroundColor = 0xffffffff;\n        int underlineColor = 0xffcccccc;\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DropDownMenu);\n        underlineColor = a.getColor(R.styleable.DropDownMenu_ddunderlineColor, underlineColor);\n        dividerColor = a.getColor(R.styleable.DropDownMenu_dddividerColor, dividerColor);\n        textSelectedColor = a.getColor(R.styleable.DropDownMenu_ddtextSelectedColor, textSelectedColor);\n        textUnselectedColor = a.getColor(R.styleable.DropDownMenu_ddtextUnselectedColor, textUnselectedColor);\n        menuBackgroundColor = a.getColor(R.styleable.DropDownMenu_ddmenuBackgroundColor, menuBackgroundColor);\n        maskColor = a.getColor(R.styleable.DropDownMenu_ddmaskColor, maskColor);\n        menuTextSize = a.getDimensionPixelSize(R.styleable.DropDownMenu_ddmenuTextSize, menuTextSize);\n        menuSelectedIcon = a.getResourceId(R.styleable.DropDownMenu_ddmenuSelectedIcon, menuSelectedIcon);\n        menuUnselectedIcon = a.getResourceId(R.styleable.DropDownMenu_ddmenuUnselectedIcon, menuUnselectedIcon);\n        menuHeighPercent = a.getFloat(R.styleable.DropDownMenu_ddmenuMenuHeightPercent, menuHeighPercent);\n        a.recycle();\n\n\n        //初始化tabMenuView并添加到tabMenuView\n        tabMenuView = new LinearLayout(context);\n        LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n        tabMenuView.setOrientation(HORIZONTAL);\n        tabMenuView.setBackgroundColor(menuBackgroundColor);\n        tabMenuView.setLayoutParams(params);\n        addView(tabMenuView, 0);\n\n        //为tabMenuView添加下划线\n        View underLine = new View(getContext());\n        underLine.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpTpPx(1.0f)));\n        underLine.setBackgroundColor(underlineColor);\n        addView(underLine, 1);\n\n        //初始化containerView并将其添加到DropDownMenu\n        containerView = new FrameLayout(context);\n        containerView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));\n        addView(containerView, 2);\n\n    }\n\n    /**\n     * 初始化DropDownMenu\n     *\n     * @param tabTexts\n     * @param popupViews\n     * @param contentView\n     */\n    public void setDropDownMenu(@NonNull List<String> tabTexts, @NonNull List<View> popupViews, @NonNull View contentView) {\n        if (tabTexts.size() != popupViews.size()) {\n            throw new IllegalArgumentException(\"params not match, tabTexts.size() should be equal popupViews.size()\");\n        }\n\n        for (int i = 0; i < tabTexts.size(); i++) {\n            addTab(tabTexts, i);\n        }\n        containerView.addView(contentView, 0);\n\n        maskView = new View(getContext());\n        maskView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));\n        maskView.setBackgroundColor(maskColor);\n        maskView.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                closeMenu();\n            }\n        });\n        containerView.addView(maskView, 1);\n        maskView.setVisibility(GONE);\n        if (containerView.getChildAt(2) != null) {\n            containerView.removeViewAt(2);\n        }\n\n        popupMenuViews = new FrameLayout(getContext());\n        popupMenuViews.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (DimenUtils.getScreenSize(getContext()).y * menuHeighPercent)));\n        popupMenuViews.setVisibility(GONE);\n        containerView.addView(popupMenuViews, 2);\n\n        for (int i = 0; i < popupViews.size(); i++) {\n            popupViews.get(i).setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));\n            popupMenuViews.addView(popupViews.get(i), i);\n        }\n\n    }\n\n    private void addTab(@NonNull List<String> tabTexts, int i) {\n        final TextView tab = new TextView(getContext());\n        tab.setSingleLine();\n        tab.setEllipsize(TextUtils.TruncateAt.END);\n        tab.setGravity(Gravity.CENTER);\n        tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, menuTextSize);\n        tab.setLayoutParams(new LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));\n        tab.setTextColor(textUnselectedColor);\n        // ic_bangumi_index_sort_up\n       // Drawable drawable = getResources().getDrawable(R.drawable.ic_bangumi_index_sort_up);\n        tab.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(menuUnselectedIcon), null);\n        tab.setText(tabTexts.get(i));\n        tab.setPadding(dpTpPx(5), dpTpPx(12), dpTpPx(5), dpTpPx(12));\n        //添加点击事件\n        tab.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                switchMenu(tab);\n                //记录tab 点击位置\n            }\n        });\n        tabMenuView.addView(tab);\n        //添加分割线\n        if (i < tabTexts.size() - 1) {\n            View view = new View(getContext());\n            view.setLayoutParams(new LayoutParams(dpTpPx(0.0f), ViewGroup.LayoutParams.MATCH_PARENT));\n            view.setBackgroundColor(dividerColor);\n            tabMenuView.addView(view);\n\n        }\n\n    }\n\n    /**\n     * 改变tab文字\n     *\n     * @param text\n     */\n    public void setTabText(String text) {\n        if (current_tab_position != -1) {\n            ((TextView) tabMenuView.getChildAt(current_tab_position)).setText(text);\n        }\n    }\n\n    public void setTabClickable(boolean clickable) {\n        for (int i = 0; i < tabMenuView.getChildCount(); i = i + 2) {\n            tabMenuView.getChildAt(i).setClickable(clickable);\n        }\n    }\n\n    /**\n     * 关闭菜单\n     */\n    public void closeMenu() {\n        if (current_tab_position != -1) {\n            ((TextView) tabMenuView.getChildAt(current_tab_position)).setTextColor(textUnselectedColor);\n            ((TextView) tabMenuView.getChildAt(current_tab_position)).setCompoundDrawablesWithIntrinsicBounds(null, null,\n                    getResources().getDrawable(menuUnselectedIcon), null);\n            popupMenuViews.setVisibility(View.GONE);\n            popupMenuViews.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.dd_menu_out));\n            maskView.setVisibility(GONE);\n            maskView.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.dd_mask_out));\n            current_tab_position = -1;\n        }\n\n    }\n\n    /**\n     * DropDownMenu是否处于可见状态\n     *\n     * @return\n     */\n    public boolean isShowing() {\n        return current_tab_position != -1;\n    }\n\n    /**\n     * 切换菜单\n     *\n     * @param target\n     */\n    private void switchMenu(View target) {\n        System.out.println(current_tab_position);\n        for (int i = 0; i < tabMenuView.getChildCount(); i = i + 2) {\n            if (target == tabMenuView.getChildAt(i)) {\n                if (current_tab_position == i) {\n                    closeMenu();\n                } else {\n                    if (current_tab_position == -1) {\n                        popupMenuViews.setVisibility(View.VISIBLE);\n                        popupMenuViews.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.dd_menu_in));\n                        maskView.setVisibility(VISIBLE);\n                        maskView.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.dd_mask_in));\n                        popupMenuViews.getChildAt(i / 2).setVisibility(View.VISIBLE);\n                    } else {\n                        popupMenuViews.getChildAt(i / 2).setVisibility(View.VISIBLE);\n                    }\n                    current_tab_position = i;\n                    ((TextView) tabMenuView.getChildAt(i)).setTextColor(textSelectedColor);\n                    ((TextView) tabMenuView.getChildAt(i)).setCompoundDrawablesWithIntrinsicBounds(null, null,\n                            getResources().getDrawable(menuSelectedIcon), null);\n                }\n            } else {\n                ((TextView) tabMenuView.getChildAt(i)).setTextColor(textUnselectedColor);\n                ((TextView) tabMenuView.getChildAt(i)).setCompoundDrawablesWithIntrinsicBounds(null, null,\n                        getResources().getDrawable(menuUnselectedIcon), null);\n                popupMenuViews.getChildAt(i / 2).setVisibility(View.GONE);\n            }\n        }\n    }\n\n    public int dpTpPx(float value) {\n        DisplayMetrics dm = getResources().getDisplayMetrics();\n        return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm) + 0.5);\n    }\n\n    //获取屏幕宽度\n    public int getScreeWidth() {\n        WindowManager wm = (WindowManager) getContext()\n                .getSystemService(Context.WINDOW_SERVICE);\n        DisplayMetrics dm = new DisplayMetrics();\n        wm.getDefaultDisplay().getMetrics(dm);\n        int mScreeWidth = dm.widthPixels;\n        return mScreeWidth;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/FlowLayout.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport java.util.ArrayList;\n\n/**\n * Created by yoyiyi on 2016/9/19.\n */\npublic class FlowLayout extends ViewGroup {\n    private boolean mNeedLayout = true;//判断是否需要重新布局\n    private int mUseWidth; //当前行已使用宽度\n    private int mHorizontalSpec = 6;\n    private int mVerticalSpec = 8;\n    private NewLine mLine;\n    private ArrayList<NewLine> mLineList = new ArrayList<>();\n    private static final int MAX_LINE = 100;//最大行数100行\n\n    public FlowLayout(Context context) {\n        super(context);\n    }\n\n    public FlowLayout(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    protected void onLayout(boolean changed, int l, int t, int r, int b) {\n        if (!mNeedLayout || changed) {// 没有发生改变就不重新布局\n            mNeedLayout = false;\n            int left = l + getPaddingLeft();\n            int top = t + getPaddingTop();\n            //设置子控件位置\n            for (int i = 0; i < mLineList.size(); i++) {\n                NewLine newLine = mLineList.get(i);\n                newLine.layout(left, top);\n                top += mVerticalSpec + newLine.mMaxHeight;//更新top值\n            }\n        }\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        int width = MeasureSpec.getSize(widthMeasureSpec)\n                - getPaddingLeft() - getPaddingRight();//得到有效宽度\n        int height = MeasureSpec.getSize(heightMeasureSpec)\n                - getPaddingTop() - getPaddingBottom();//得到有效高度\n\n        int widthMode = MeasureSpec.getSize(widthMeasureSpec);//得到宽度模式\n        int heightMode = MeasureSpec.getSize(heightMeasureSpec);//得到高度模式\n\n        restoreLine();// 还原数据，以便重新记录\n\n        int childCount = getChildCount();//得到子控件数量\n        for (int i = 0; i < childCount; i++) {//循环子控件\n            //子控件测量\n            View childAt = getChildAt(i);//得到子控件\n            if (childAt.getVisibility() == GONE) {\n                continue;\n            }\n            //如果父控件为确定模式 子控件为包裹内容；否则子控件和父控件一致\n            int chilWidthSpec = MeasureSpec.makeMeasureSpec(width,\n                    (widthMode == MeasureSpec.EXACTLY)\n                            ? MeasureSpec.AT_MOST\n                            : widthMode);\n            int childHeightSpec = MeasureSpec.makeMeasureSpec(height,\n                    (heightMode == MeasureSpec.EXACTLY)\n                            ? MeasureSpec.AT_MOST\n                            : heightMode);\n            //开始测量\n            childAt.measure(chilWidthSpec, childHeightSpec);\n            //如果当前行为空，new对象\n            if (mLine == null) {\n                mLine = new NewLine();\n            }\n            //获取子控件宽度\n            int childWidth = childAt.getMeasuredWidth();\n            mUseWidth += childWidth;//已使用当前行宽度\n            if (mUseWidth <= width) {//判断是否超出边界\n                mLine.addView(childAt);//添加子控件\n                //没有超出边界\n                mUseWidth += mHorizontalSpec;//增加水平间距\n                if (mUseWidth > width) {\n                    //超出边界 需要换行\n                    if (!newLine()) {\n                        break;//结束循环 创建行失败 不再添加\n                    }\n\n                }\n\n            } else {\n                //超出边界\n                //1.子控件非常长 而且行中没有其他控件\n                if (mLine.getChildCount() == 0) {\n                    mLine.addView(childAt);\n                    if (!newLine()) {\n                        break;\n                    }\n\n                } else {\n                    //2.最后一个子控件添加进去之后 明显超出原来行长度\n                    if (!newLine()) {\n                        break;\n                    }\n                    mLine.addView(childAt);\n                    mUseWidth += childWidth + mHorizontalSpec;\n                }\n            }\n\n            // int childHeight = childAt.getMeasuredHeight();\n\n        }\n\n        //保存最后一行\n        if (mLine != null\n                && mLine.getChildCount() != 0\n                && !mLineList.contains(mLine)) {\n            mLineList.add(mLine);\n\n        }\n        int totalWidth = MeasureSpec.getSize(widthMeasureSpec);//控件整体宽度\n        int totalHeight = 0;//控件整体高度\n        for (int i = 0; i < mLineList.size(); i++) {\n            totalHeight += mLineList.get(i).mMaxHeight;\n        }\n        totalHeight += (mLineList.size() - 1) * mVerticalSpec;\n        totalHeight += getPaddingTop() + getPaddingBottom();\n\n        //根据最新宽高设置\n        setMeasuredDimension(totalWidth, totalHeight);\n    }\n\n\n    //换行\n    private boolean newLine() {\n        mLineList.add(mLine);//保存上一行\n        if (mLineList.size() < MAX_LINE) {\n            //继续添加\n            mLine = new NewLine();\n            mUseWidth = 0;//清零\n            return true;\n        }\n        return false;\n    }\n\n    //没一行对象封装\n    class NewLine {\n        public int mTotalWidth;//总宽度\n        public int mMaxHeight; //当前行最高的高度\n        private ArrayList<View> mChildViewList = new ArrayList<>();\n\n        //增加一个子控件\n        public void addView(View view) {\n            mChildViewList.add(view);\n            //总宽度增加\n            mTotalWidth += view.getMeasuredWidth();\n            int height = view.getMeasuredHeight();\n            //0 10 20\n            mMaxHeight = mMaxHeight < height ? height : mMaxHeight;\n        }\n\n        //子控件位置设置\n        public void layout(int left, int top) {\n            int childCount = getChildCount();\n            //将剩余控件平均分配子控件\n            int validWidth = getMeasuredWidth()\n                    - getPaddingLeft() - getPaddingRight();\n            //剩余宽度\n            int surplusWidth = validWidth - mTotalWidth - (childCount - 1)\n                    * mHorizontalSpec;\n            if (surplusWidth >= 0) {\n                //有剩余空间\n                int space = (int) ((float) surplusWidth / childCount + 0.5f);\n                //重新测量子控件\n                for (int i = 0; i < childCount; i++) {\n                    View childView = mChildViewList.get(i);\n                    int measuredWidth = childView.getMeasuredWidth();\n                    int measuredHeight = childView.getMeasuredHeight();\n                    measuredWidth += space;\n                    int measuredWidthSpec = MeasureSpec.makeMeasureSpec(\n                            measuredWidth, MeasureSpec.EXACTLY);\n                    int measuredHeightSpec = MeasureSpec.makeMeasureSpec(\n                            measuredHeight, MeasureSpec.EXACTLY);\n                    //重新测量控件\n                    childView.measure(measuredWidthSpec, measuredHeightSpec);\n                    int topOffset = (mMaxHeight - measuredHeight) / 2;\n                    if (topOffset < 0) {\n                        topOffset = 0;\n                    }\n                    //设置位置\n                    childView.layout(\n                            left,\n                            top + topOffset,\n                            left + measuredWidth,\n                            top + topOffset + measuredHeight);\n                    //设置left\n                    left += measuredWidth + mHorizontalSpec;\n                }\n            } else {\n                View childView = mChildViewList.get(0);\n                childView.layout(\n                        left,\n                        top,\n                        left + childView.getMeasuredWidth(),\n                        top + childView.getMeasuredHeight());\n            }\n        }\n\n        //当前子控件个数\n        public int getChildCount() {\n            return mChildViewList.size();\n        }\n    }\n\n    public void setSpac(int horizontalSpec, int verticalSpec) {\n        this.mHorizontalSpec = horizontalSpec;\n        this.mVerticalSpec = verticalSpec;\n\n    }\n\n    private void restoreLine() {\n        mLineList.clear();\n        mLine = new NewLine();\n        mUseWidth = 0;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/NoScrollLinearLayoutManager.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport android.content.Context;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/16 10:24\n * 描述:\n */\n\npublic class NoScrollLinearLayoutManager extends LinearLayoutManager {\n    public NoScrollLinearLayoutManager(Context context) {\n        super(context);\n    }\n\n    public NoScrollLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {\n        super(context, orientation, reverseLayout);\n    }\n\n    private int[] mMeasuredDimension = new int[2];\n\n    @Override\n    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state,\n                          int widthSpec, int heightSpec) {\n        final int widthMode = View.MeasureSpec.getMode(widthSpec);\n        final int heightMode = View.MeasureSpec.getMode(heightSpec);\n        final int widthSize = View.MeasureSpec.getSize(widthSpec);\n        final int heightSize = View.MeasureSpec.getSize(heightSpec);\n        int width = 0;\n        int height = 0;\n        for (int i = 0; i < getItemCount(); i++) {\n\n            if (getOrientation() == HORIZONTAL) {\n\n                measureScrapChild(recycler, i,\n                        View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),\n                        heightSpec,\n                        mMeasuredDimension);\n\n                width = width + mMeasuredDimension[0];\n                if (i == 0) {\n                    height = mMeasuredDimension[1];\n                }\n            } else {\n                measureScrapChild(recycler, i,\n                        widthSpec,\n                        View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),\n                        mMeasuredDimension);\n                height = height + mMeasuredDimension[1];\n                if (i == 0) {\n                    width = mMeasuredDimension[0];\n                }\n            }\n        }\n        switch (widthMode) {\n            case View.MeasureSpec.EXACTLY:\n                width = widthSize;\n            case View.MeasureSpec.AT_MOST:\n            case View.MeasureSpec.UNSPECIFIED:\n        }\n\n        switch (heightMode) {\n            case View.MeasureSpec.EXACTLY:\n                height = heightSize;\n            case View.MeasureSpec.AT_MOST:\n            case View.MeasureSpec.UNSPECIFIED:\n        }\n\n        setMeasuredDimension(width, height);\n    }\n\n    private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,\n                                   int heightSpec, int[] measuredDimension) {\n        View view = recycler.getViewForPosition(position);\n        recycler.bindViewToPosition(view, position);\n        if (view != null) {\n            RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();\n            int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec,\n                    getPaddingLeft() + getPaddingRight(), p.width);\n            int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec,\n                    getPaddingTop() + getPaddingBottom(), p.height);\n            view.measure(childWidthSpec, childHeightSpec);\n            measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin;\n            measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin;\n            recycler.recycleView(view);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/NoScrollViewPager.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport android.content.Context;\nimport android.support.v4.view.ViewPager;\nimport android.util.AttributeSet;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/4/12 19:54\n * 重写Viewpager解决点击tab去除滑动动画效果的问题\n */\npublic class NoScrollViewPager extends ViewPager {\n    public NoScrollViewPager(Context context) {\n        super(context);\n    }\n\n    public NoScrollViewPager(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n\n    @Override\n    public void scrollTo(int x, int y) {\n        super.scrollTo(x, y);\n    }\n\n\n    @Override\n    public void setCurrentItem(int item, boolean smoothScroll) {\n        super.setCurrentItem(item, smoothScroll);\n    }\n\n    @Override\n    public void setCurrentItem(int item) {\n        super.setCurrentItem(item, false);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/ProgressWheel.java",
    "content": "package com.yoyiyi.soleil.widget;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Paint.Style;\nimport android.graphics.RectF;\nimport android.os.Build;\nimport android.os.Parcel;\nimport android.os.Parcelable;\nimport android.os.SystemClock;\nimport android.provider.Settings;\nimport android.util.AttributeSet;\nimport android.util.DisplayMetrics;\nimport android.util.TypedValue;\nimport android.view.View;\n\nimport com.yoyiyi.soleil.R;\n\n\n/**\n * 圆形加载框\n * A Material style progress wheel, compatible up to 2.2.\n * Todd Davies' Progress Wheel https://github.com/Todd-Davies/ProgressWheel\n *\n * @author Nico Hormazábal\n *         Licensed under the Apache License 2.0 license see:\n *         http://www.apache.org/licenses/LICENSE-2.0\n */\npublic class ProgressWheel extends View {\n    private static final String TAG = ProgressWheel.class.getSimpleName();\n    private final int barLength = 16;\n    private final int barMaxLength = 270;\n    private final long pauseGrowingTime = 200;\n    /**\n     * *********\n     * DEFAULTS *\n     * **********\n     */\n    //Sizes (with defaults in DP)\n    private int circleRadius = 28;\n    private int barWidth = 4;\n    private int rimWidth = 4;\n    private boolean fillRadius = false;\n    private double timeStartGrowing = 0;\n    private double barSpinCycleTime = 460;\n    private float barExtraLength = 0;\n    private boolean barGrowingFromFront = true;\n    private long pausedTimeWithoutGrowing = 0;\n    //Colors (with defaults)\n    private int barColor = 0xAA000000;\n    private int rimColor = 0x00FFFFFF;\n\n    //Paints\n    private Paint barPaint = new Paint();\n    private Paint rimPaint = new Paint();\n\n    //Rectangles\n    private RectF circleBounds = new RectF();\n\n    //Animation\n    //The amount of degrees per second\n    private float spinSpeed = 230.0f;\n    //private float spinSpeed = 120.0f;\n    // The last time the spinner was animated\n    private long lastTimeAnimated = 0;\n\n    private boolean linearProgress;\n\n    private float mProgress = 0.0f;\n    private float mTargetProgress = 0.0f;\n    private boolean isSpinning = false;\n\n    private ProgressCallback callback;\n\n    private boolean shouldAnimate;\n\n    /**\n     * The constructor for the ProgressWheel\n     */\n    public ProgressWheel(Context context, AttributeSet attrs) {\n        super(context, attrs);\n\n        parseAttributes(context.obtainStyledAttributes(attrs, R.styleable.ProgressWheel));\n\n        setAnimationEnabled();\n    }\n\n    /**\n     * The constructor for the ProgressWheel\n     */\n    public ProgressWheel(Context context) {\n        super(context);\n        setAnimationEnabled();\n    }\n\n    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)\n    private void setAnimationEnabled() {\n        int currentApiVersion = Build.VERSION.SDK_INT;\n\n        float animationValue;\n        if (currentApiVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) {\n            animationValue = Settings.Global.getFloat(getContext().getContentResolver(),\n                    Settings.Global.ANIMATOR_DURATION_SCALE, 1);\n        } else {\n            animationValue = Settings.System.getFloat(getContext().getContentResolver(),\n                    Settings.System.ANIMATOR_DURATION_SCALE, 1);\n        }\n\n        shouldAnimate = animationValue != 0;\n    }\n\n    //----------------------------------\n    //Setting up stuff\n    //----------------------------------\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n\n        int viewWidth = circleRadius + this.getPaddingLeft() + this.getPaddingRight();\n        int viewHeight = circleRadius + this.getPaddingTop() + this.getPaddingBottom();\n\n        int widthMode = MeasureSpec.getMode(widthMeasureSpec);\n        int widthSize = MeasureSpec.getSize(widthMeasureSpec);\n        int heightMode = MeasureSpec.getMode(heightMeasureSpec);\n        int heightSize = MeasureSpec.getSize(heightMeasureSpec);\n\n        int width;\n        int height;\n\n        //Measure Width\n        if (widthMode == MeasureSpec.EXACTLY) {\n            //Must be this size\n            width = widthSize;\n        } else if (widthMode == MeasureSpec.AT_MOST) {\n            //Can't be bigger than...\n            width = Math.min(viewWidth, widthSize);\n        } else {\n            //Be whatever you want\n            width = viewWidth;\n        }\n\n        //Measure Height\n        if (heightMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.EXACTLY) {\n            //Must be this size\n            height = heightSize;\n        } else if (heightMode == MeasureSpec.AT_MOST) {\n            //Can't be bigger than...\n            height = Math.min(viewHeight, heightSize);\n        } else {\n            //Be whatever you want\n            height = viewHeight;\n        }\n\n        setMeasuredDimension(width, height);\n    }\n\n    /**\n     * Use onSizeChanged instead of onAttachedToWindow to get the dimensions of the view,\n     * because this method is called after measuring the dimensions of MATCH_PARENT & WRAP_CONTENT.\n     * Use this dimensions to setup the bounds and paints.\n     */\n    @Override\n    protected void onSizeChanged(int w, int h, int oldw, int oldh) {\n        super.onSizeChanged(w, h, oldw, oldh);\n\n        setupBounds(w, h);\n        setupPaints();\n        invalidate();\n    }\n\n    /**\n     * Set the properties of the paints we're using to\n     * draw the progress wheel\n     */\n    private void setupPaints() {\n        barPaint.setColor(barColor);\n        barPaint.setAntiAlias(true);\n        barPaint.setStyle(Style.STROKE);\n        barPaint.setStrokeWidth(barWidth);\n\n        rimPaint.setColor(rimColor);\n        rimPaint.setAntiAlias(true);\n        rimPaint.setStyle(Style.STROKE);\n        rimPaint.setStrokeWidth(rimWidth);\n    }\n\n    /**\n     * Set the bounds of the component\n     */\n    private void setupBounds(int layout_width, int layout_height) {\n        int paddingTop = getPaddingTop();\n        int paddingBottom = getPaddingBottom();\n        int paddingLeft = getPaddingLeft();\n        int paddingRight = getPaddingRight();\n\n        if (!fillRadius) {\n            // Width should equal to Height, find the min value to setup the circle\n            int minValue = Math.min(layout_width - paddingLeft - paddingRight,\n                    layout_height - paddingBottom - paddingTop);\n\n            int circleDiameter = Math.min(minValue, circleRadius * 2 - barWidth * 2);\n\n            // Calc the Offset if needed for centering the wheel in the available space\n            int xOffset = (layout_width - paddingLeft - paddingRight - circleDiameter) / 2 + paddingLeft;\n            int yOffset = (layout_height - paddingTop - paddingBottom - circleDiameter) / 2 + paddingTop;\n\n            circleBounds =\n                    new RectF(xOffset + barWidth, yOffset + barWidth, xOffset + circleDiameter - barWidth,\n                            yOffset + circleDiameter - barWidth);\n        } else {\n            circleBounds = new RectF(paddingLeft + barWidth, paddingTop + barWidth,\n                    layout_width - paddingRight - barWidth, layout_height - paddingBottom - barWidth);\n        }\n    }\n\n    /**\n     * Parse the attributes passed to the view from the XML\n     *\n     * @param a the attributes to parse\n     */\n    private void parseAttributes(TypedArray a) {\n        // We transform the default values from DIP to pixels\n        DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();\n        barWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, barWidth, metrics);\n        rimWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rimWidth, metrics);\n        circleRadius =\n                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, circleRadius, metrics);\n\n        circleRadius =\n                (int) a.getDimension(R.styleable.ProgressWheel_matProg_circleRadius, circleRadius);\n\n        fillRadius = a.getBoolean(R.styleable.ProgressWheel_matProg_fillRadius, false);\n\n        barWidth = (int) a.getDimension(R.styleable.ProgressWheel_matProg_barWidth, barWidth);\n\n        rimWidth = (int) a.getDimension(R.styleable.ProgressWheel_matProg_rimWidth, rimWidth);\n\n        float baseSpinSpeed =\n                a.getFloat(R.styleable.ProgressWheel_matProg_spinSpeed, spinSpeed / 360.0f);\n        spinSpeed = baseSpinSpeed * 360;\n\n        barSpinCycleTime =\n                a.getInt(R.styleable.ProgressWheel_matProg_barSpinCycleTime, (int) barSpinCycleTime);\n\n        barColor = a.getColor(R.styleable.ProgressWheel_matProg_barColor, barColor);\n\n        rimColor = a.getColor(R.styleable.ProgressWheel_matProg_rimColor, rimColor);\n\n        linearProgress = a.getBoolean(R.styleable.ProgressWheel_matProg_linearProgress, false);\n\n        if (a.getBoolean(R.styleable.ProgressWheel_matProg_progressIndeterminate, false)) {\n            spin();\n        }\n\n        // Recycle\n        a.recycle();\n    }\n\n    public void setCallback(ProgressCallback progressCallback) {\n        callback = progressCallback;\n\n        if (!isSpinning) {\n            runCallback();\n        }\n    }\n\n    //----------------------------------\n    //Animation stuff\n    //----------------------------------\n\n    protected void onDraw(Canvas canvas) {\n        super.onDraw(canvas);\n\n        canvas.drawArc(circleBounds, 360, 360, false, rimPaint);\n\n        boolean mustInvalidate = false;\n\n        if (!shouldAnimate) {\n            return;\n        }\n\n        if (isSpinning) {\n            //Draw the spinning bar\n            mustInvalidate = true;\n\n            long deltaTime = (SystemClock.uptimeMillis() - lastTimeAnimated);\n            float deltaNormalized = deltaTime * spinSpeed / 1000.0f;\n\n            updateBarLength(deltaTime);\n\n            mProgress += deltaNormalized;\n            if (mProgress > 360) {\n                mProgress -= 360f;\n\n                // A full turn has been completed\n                // we run the callback with -1 in case we want to\n                // do something, like changing the color\n                runCallback(-1.0f);\n            }\n            lastTimeAnimated = SystemClock.uptimeMillis();\n\n            float from = mProgress - 90;\n            float length = barLength + barExtraLength;\n\n            if (isInEditMode()) {\n                from = 0;\n                length = 135;\n            }\n\n            canvas.drawArc(circleBounds, from, length, false, barPaint);\n        } else {\n            float oldProgress = mProgress;\n\n            if (mProgress != mTargetProgress) {\n                //We smoothly increase the progress bar\n                mustInvalidate = true;\n\n                float deltaTime = (float) (SystemClock.uptimeMillis() - lastTimeAnimated) / 1000;\n                float deltaNormalized = deltaTime * spinSpeed;\n\n                mProgress = Math.min(mProgress + deltaNormalized, mTargetProgress);\n                lastTimeAnimated = SystemClock.uptimeMillis();\n            }\n\n            if (oldProgress != mProgress) {\n                runCallback();\n            }\n\n            float offset = 0.0f;\n            float progress = mProgress;\n            if (!linearProgress) {\n                float factor = 2.0f;\n                offset = (float) (1.0f - Math.pow(1.0f - mProgress / 360.0f, 2.0f * factor)) * 360.0f;\n                progress = (float) (1.0f - Math.pow(1.0f - mProgress / 360.0f, factor)) * 360.0f;\n            }\n\n            if (isInEditMode()) {\n                progress = 360;\n            }\n\n            canvas.drawArc(circleBounds, offset - 90, progress, false, barPaint);\n        }\n\n        if (mustInvalidate) {\n            invalidate();\n        }\n    }\n\n    @Override\n    protected void onVisibilityChanged(View changedView, int visibility) {\n        super.onVisibilityChanged(changedView, visibility);\n\n        if (visibility == VISIBLE) {\n            lastTimeAnimated = SystemClock.uptimeMillis();\n        }\n    }\n\n    private void updateBarLength(long deltaTimeInMilliSeconds) {\n        if (pausedTimeWithoutGrowing >= pauseGrowingTime) {\n            timeStartGrowing += deltaTimeInMilliSeconds;\n\n            if (timeStartGrowing > barSpinCycleTime) {\n                // We completed a size change cycle\n                // (growing or shrinking)\n                timeStartGrowing -= barSpinCycleTime;\n                //if(barGrowingFromFront) {\n                pausedTimeWithoutGrowing = 0;\n                //}\n                barGrowingFromFront = !barGrowingFromFront;\n            }\n\n            float distance =\n                    (float) Math.cos((timeStartGrowing / barSpinCycleTime + 1) * Math.PI) / 2 + 0.5f;\n            float destLength = (barMaxLength - barLength);\n\n            if (barGrowingFromFront) {\n                barExtraLength = distance * destLength;\n            } else {\n                float newLength = destLength * (1 - distance);\n                mProgress += (barExtraLength - newLength);\n                barExtraLength = newLength;\n            }\n        } else {\n            pausedTimeWithoutGrowing += deltaTimeInMilliSeconds;\n        }\n    }\n\n    /**\n     * Check if the wheel is currently spinning\n     */\n\n    public boolean isSpinning() {\n        return isSpinning;\n    }\n\n    /**\n     * Reset the count (in increment mode)\n     */\n    public void resetCount() {\n        mProgress = 0.0f;\n        mTargetProgress = 0.0f;\n        invalidate();\n    }\n\n    /**\n     * Turn off spin mode\n     */\n    public void stopSpinning() {\n        isSpinning = false;\n        mProgress = 0.0f;\n        mTargetProgress = 0.0f;\n        invalidate();\n    }\n\n    /**\n     * Puts the view on spin mode\n     */\n    public void spin() {\n        lastTimeAnimated = SystemClock.uptimeMillis();\n        isSpinning = true;\n        invalidate();\n    }\n\n    private void runCallback(float value) {\n        if (callback != null) {\n            callback.onProgressUpdate(value);\n        }\n    }\n\n    private void runCallback() {\n        if (callback != null) {\n            float normalizedProgress = (float) Math.round(mProgress * 100 / 360.0f) / 100;\n            callback.onProgressUpdate(normalizedProgress);\n        }\n    }\n\n    /**\n     * Set the progress to a specific value,\n     * the bar will be set instantly to that value\n     *\n     * @param progress the progress between 0 and 1\n     */\n    public void setInstantProgress(float progress) {\n        if (isSpinning) {\n            mProgress = 0.0f;\n            isSpinning = false;\n        }\n\n        if (progress > 1.0f) {\n            progress -= 1.0f;\n        } else if (progress < 0) {\n            progress = 0;\n        }\n\n        if (progress == mTargetProgress) {\n            return;\n        }\n\n        mTargetProgress = Math.min(progress * 360.0f, 360.0f);\n        mProgress = mTargetProgress;\n        lastTimeAnimated = SystemClock.uptimeMillis();\n        invalidate();\n    }\n\n    // Great way to save a view's state http://stackoverflow.com/a/7089687/1991053\n    @Override\n    public Parcelable onSaveInstanceState() {\n        Parcelable superState = super.onSaveInstanceState();\n\n        WheelSavedState ss = new WheelSavedState(superState);\n\n        // We save everything that can be changed at runtime\n        ss.mProgress = this.mProgress;\n        ss.mTargetProgress = this.mTargetProgress;\n        ss.isSpinning = this.isSpinning;\n        ss.spinSpeed = this.spinSpeed;\n        ss.barWidth = this.barWidth;\n        ss.barColor = this.barColor;\n        ss.rimWidth = this.rimWidth;\n        ss.rimColor = this.rimColor;\n        ss.circleRadius = this.circleRadius;\n        ss.linearProgress = this.linearProgress;\n        ss.fillRadius = this.fillRadius;\n\n        return ss;\n    }\n\n    @Override\n    public void onRestoreInstanceState(Parcelable state) {\n        if (!(state instanceof WheelSavedState)) {\n            super.onRestoreInstanceState(state);\n            return;\n        }\n\n        WheelSavedState ss = (WheelSavedState) state;\n        super.onRestoreInstanceState(ss.getSuperState());\n\n        this.mProgress = ss.mProgress;\n        this.mTargetProgress = ss.mTargetProgress;\n        this.isSpinning = ss.isSpinning;\n        this.spinSpeed = ss.spinSpeed;\n        this.barWidth = ss.barWidth;\n        this.barColor = ss.barColor;\n        this.rimWidth = ss.rimWidth;\n        this.rimColor = ss.rimColor;\n        this.circleRadius = ss.circleRadius;\n        this.linearProgress = ss.linearProgress;\n        this.fillRadius = ss.fillRadius;\n\n        this.lastTimeAnimated = SystemClock.uptimeMillis();\n    }\n\n    /**\n     * @return the current progress between 0.0 and 1.0,\n     * if the wheel is indeterminate, then the result is -1\n     */\n    public float getProgress() {\n        return isSpinning ? -1 : mProgress / 360.0f;\n    }\n\n    //----------------------------------\n    //Getters + setters\n    //----------------------------------\n\n    /**\n     * Set the progress to a specific value,\n     * the bar will smoothly animate until that value\n     *\n     * @param progress the progress between 0 and 1\n     */\n    public void setProgress(float progress) {\n        if (isSpinning) {\n            mProgress = 0.0f;\n            isSpinning = false;\n\n            runCallback();\n        }\n\n        if (progress > 1.0f) {\n            progress -= 1.0f;\n        } else if (progress < 0) {\n            progress = 0;\n        }\n\n        if (progress == mTargetProgress) {\n            return;\n        }\n\n        // If we are currently in the right position\n        // we set again the last time animated so the\n        // animation starts smooth from here\n        if (mProgress == mTargetProgress) {\n            lastTimeAnimated = SystemClock.uptimeMillis();\n        }\n\n        mTargetProgress = Math.min(progress * 360.0f, 360.0f);\n\n        invalidate();\n    }\n\n    /**\n     * Sets the determinate progress mode\n     *\n     * @param isLinear if the progress should increase linearly\n     */\n    public void setLinearProgress(boolean isLinear) {\n        linearProgress = isLinear;\n        if (!isSpinning) {\n            invalidate();\n        }\n    }\n\n    /**\n     * @return the radius of the wheel in pixels\n     */\n    public int getCircleRadius() {\n        return circleRadius;\n    }\n\n    /**\n     * Sets the radius of the wheel\n     *\n     * @param circleRadius the expected radius, in pixels\n     */\n    public void setCircleRadius(int circleRadius) {\n        this.circleRadius = circleRadius;\n        if (!isSpinning) {\n            invalidate();\n        }\n    }\n\n    /**\n     * @return the width of the spinning bar\n     */\n    public int getBarWidth() {\n        return barWidth;\n    }\n\n    /**\n     * Sets the width of the spinning bar\n     *\n     * @param barWidth the spinning bar width in pixels\n     */\n    public void setBarWidth(int barWidth) {\n        this.barWidth = barWidth;\n        if (!isSpinning) {\n            invalidate();\n        }\n    }\n\n    /**\n     * @return the color of the spinning bar\n     */\n    public int getBarColor() {\n        return barColor;\n    }\n\n    /**\n     * Sets the color of the spinning bar\n     *\n     * @param barColor The spinning bar color\n     */\n    public void setBarColor(int barColor) {\n        this.barColor = barColor;\n        setupPaints();\n        if (!isSpinning) {\n            invalidate();\n        }\n    }\n\n    /**\n     * @return the color of the wheel's contour\n     */\n    public int getRimColor() {\n        return rimColor;\n    }\n\n    /**\n     * Sets the color of the wheel's contour\n     *\n     * @param rimColor the color for the wheel\n     */\n    public void setRimColor(int rimColor) {\n        this.rimColor = rimColor;\n        setupPaints();\n        if (!isSpinning) {\n            invalidate();\n        }\n    }\n\n    /**\n     * @return the base spinning speed, in full circle turns per second\n     * (1.0 equals on full turn in one second), this value also is applied for\n     * the smoothness when setting a progress\n     */\n    public float getSpinSpeed() {\n        return spinSpeed / 360.0f;\n    }\n\n    /**\n     * Sets the base spinning speed, in full circle turns per second\n     * (1.0 equals on full turn in one second), this value also is applied for\n     * the smoothness when setting a progress\n     *\n     * @param spinSpeed the desired base speed in full turns per second\n     */\n    public void setSpinSpeed(float spinSpeed) {\n        this.spinSpeed = spinSpeed * 360.0f;\n    }\n\n    /**\n     * @return the width of the wheel's contour in pixels\n     */\n    public int getRimWidth() {\n        return rimWidth;\n    }\n\n    /**\n     * Sets the width of the wheel's contour\n     *\n     * @param rimWidth the width in pixels\n     */\n    public void setRimWidth(int rimWidth) {\n        this.rimWidth = rimWidth;\n        if (!isSpinning) {\n            invalidate();\n        }\n    }\n\n    public interface ProgressCallback {\n        /**\n         * Method to call when the progress reaches a value\n         * in order to avoid float precision issues, the progress\n         * is rounded to a float with two decimals.\n         * <p>\n         * In indeterminate mode, the callback is called each time\n         * the wheel completes an animation cycle, with, the progress value is -1.0f\n         *\n         * @param progress a double value between 0.00 and 1.00 both included\n         */\n        public void onProgressUpdate(float progress);\n    }\n\n    static class WheelSavedState extends BaseSavedState {\n        //required field that makes Parcelables from a Parcel\n        public static final Creator<WheelSavedState> CREATOR =\n                new Creator<WheelSavedState>() {\n                    public WheelSavedState createFromParcel(Parcel in) {\n                        return new WheelSavedState(in);\n                    }\n\n                    public WheelSavedState[] newArray(int size) {\n                        return new WheelSavedState[size];\n                    }\n                };\n        float mProgress;\n        float mTargetProgress;\n        boolean isSpinning;\n        float spinSpeed;\n        int barWidth;\n        int barColor;\n        int rimWidth;\n        int rimColor;\n        int circleRadius;\n        boolean linearProgress;\n        boolean fillRadius;\n\n        WheelSavedState(Parcelable superState) {\n            super(superState);\n        }\n\n        private WheelSavedState(Parcel in) {\n            super(in);\n            this.mProgress = in.readFloat();\n            this.mTargetProgress = in.readFloat();\n            this.isSpinning = in.readByte() != 0;\n            this.spinSpeed = in.readFloat();\n            this.barWidth = in.readInt();\n            this.barColor = in.readInt();\n            this.rimWidth = in.readInt();\n            this.rimColor = in.readInt();\n            this.circleRadius = in.readInt();\n            this.linearProgress = in.readByte() != 0;\n            this.fillRadius = in.readByte() != 0;\n        }\n\n        @Override\n        public void writeToParcel(Parcel out, int flags) {\n            super.writeToParcel(out, flags);\n            out.writeFloat(this.mProgress);\n            out.writeFloat(this.mTargetProgress);\n            out.writeByte((byte) (isSpinning ? 1 : 0));\n            out.writeFloat(this.spinSpeed);\n            out.writeInt(this.barWidth);\n            out.writeInt(this.barColor);\n            out.writeInt(this.rimWidth);\n            out.writeInt(this.rimColor);\n            out.writeInt(this.circleRadius);\n            out.writeByte((byte) (linearProgress ? 1 : 0));\n            out.writeByte((byte) (fillRadius ? 1 : 0));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/divider/FlexibleDividerDecoration.java",
    "content": "package com.yoyiyi.soleil.widget.divider;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.content.res.TypedArray;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.support.annotation.ColorRes;\nimport android.support.annotation.DimenRes;\nimport android.support.annotation.DrawableRes;\nimport android.support.v4.content.ContextCompat;\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\n\n/**\n * Created by yqritc on 2015/01/08.\n */\npublic abstract class FlexibleDividerDecoration extends RecyclerView.ItemDecoration {\n\n    private static final int DEFAULT_SIZE = 2;\n    private static final int[] ATTRS = new int[]{\n            android.R.attr.listDivider\n    };\n\n    protected enum DividerType {\n        DRAWABLE, PAINT, COLOR\n    }\n\n    protected DividerType mDividerType = DividerType.DRAWABLE;\n    protected VisibilityProvider mVisibilityProvider;\n    protected PaintProvider mPaintProvider;\n    protected ColorProvider mColorProvider;\n    protected DrawableProvider mDrawableProvider;\n    protected SizeProvider mSizeProvider;\n    protected boolean mShowLastDivider;\n    protected boolean mPositionInsideItem;\n    private Paint mPaint;\n\n    protected FlexibleDividerDecoration(Builder builder) {\n        if (builder.mPaintProvider != null) {\n            mDividerType = DividerType.PAINT;\n            mPaintProvider = builder.mPaintProvider;\n        } else if (builder.mColorProvider != null) {\n            mDividerType = DividerType.COLOR;\n            mColorProvider = builder.mColorProvider;\n            mPaint = new Paint();\n            setSizeProvider(builder);\n        } else {\n            mDividerType = DividerType.DRAWABLE;\n            if (builder.mDrawableProvider == null) {\n                TypedArray a = builder.mContext.obtainStyledAttributes(ATTRS);\n                final Drawable divider = a.getDrawable(0);\n                a.recycle();\n                mDrawableProvider = new DrawableProvider() {\n                    @Override\n                    public Drawable drawableProvider(int position, RecyclerView parent) {\n                        return divider;\n                    }\n                };\n            } else {\n                mDrawableProvider = builder.mDrawableProvider;\n            }\n            mSizeProvider = builder.mSizeProvider;\n        }\n\n        mVisibilityProvider = builder.mVisibilityProvider;\n        mShowLastDivider = builder.mShowLastDivider;\n        mPositionInsideItem = builder.mPositionInsideItem;\n    }\n\n    private void setSizeProvider(Builder builder) {\n        mSizeProvider = builder.mSizeProvider;\n        if (mSizeProvider == null) {\n            mSizeProvider = new SizeProvider() {\n                @Override\n                public int dividerSize(int position, RecyclerView parent) {\n                    return DEFAULT_SIZE;\n                }\n            };\n        }\n    }\n\n    @Override\n    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {\n        RecyclerView.Adapter adapter = parent.getAdapter();\n        if (adapter == null) {\n            return;\n        }\n\n        int itemCount = adapter.getItemCount();\n        int lastDividerOffset = getLastDividerOffset(parent);\n        int validChildCount = parent.getChildCount();\n        int lastChildPosition = -1;\n        for (int i = 0; i < validChildCount; i++) {\n            View child = parent.getChildAt(i);\n            int childPosition = parent.getChildAdapterPosition(child);\n\n            if (childPosition < lastChildPosition) {\n                // Avoid remaining divider when animation starts\n                continue;\n            }\n            lastChildPosition = childPosition;\n\n            if (!mShowLastDivider && childPosition >= itemCount - lastDividerOffset) {\n                // Don't draw divider for last line if mShowLastDivider = false\n                continue;\n            }\n\n            if (wasDividerAlreadyDrawn(childPosition, parent)) {\n                // No need to draw divider again as it was drawn already by previous column\n                continue;\n            }\n\n            int groupIndex = getGroupIndex(childPosition, parent);\n            if (mVisibilityProvider.shouldHideDivider(groupIndex, parent)) {\n                continue;\n            }\n\n            Rect bounds = getDividerBound(groupIndex, parent, child);\n            switch (mDividerType) {\n                case DRAWABLE:\n                    Drawable drawable = mDrawableProvider.drawableProvider(groupIndex, parent);\n                    drawable.setBounds(bounds);\n                    drawable.draw(c);\n                    break;\n                case PAINT:\n                    mPaint = mPaintProvider.dividerPaint(groupIndex, parent);\n                    c.drawLine(bounds.left, bounds.top, bounds.right, bounds.bottom, mPaint);\n                    break;\n                case COLOR:\n                    mPaint.setColor(mColorProvider.dividerColor(groupIndex, parent));\n                    mPaint.setStrokeWidth(mSizeProvider.dividerSize(groupIndex, parent));\n                    c.drawLine(bounds.left, bounds.top, bounds.right, bounds.bottom, mPaint);\n                    break;\n            }\n        }\n    }\n\n    @Override\n    public void getItemOffsets(Rect rect, View v, RecyclerView parent, RecyclerView.State state) {\n        int position = parent.getChildAdapterPosition(v);\n        int itemCount = parent.getAdapter().getItemCount();\n        int lastDividerOffset = getLastDividerOffset(parent);\n        if (!mShowLastDivider && position >= itemCount - lastDividerOffset) {\n            // Don't set item offset for last line if mShowLastDivider = false\n            return;\n        }\n\n        int groupIndex = getGroupIndex(position, parent);\n        if (mVisibilityProvider.shouldHideDivider(groupIndex, parent)) {\n            return;\n        }\n\n        setItemOffsets(rect, groupIndex, parent);\n    }\n\n    /**\n     * Check if recyclerview is reverse layout\n     *\n     * @param parent RecyclerView\n     * @return true if recyclerview is reverse layout\n     */\n    protected boolean isReverseLayout(RecyclerView parent) {\n        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();\n        if (layoutManager instanceof LinearLayoutManager) {\n            return ((LinearLayoutManager) layoutManager).getReverseLayout();\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * In the case mShowLastDivider = false,\n     * Returns offset for how many views we don't have to draw a divider for,\n     * for LinearLayoutManager it is as simple as not drawing the last child divider,\n     * but for a GridLayoutManager it needs to take the span count for the last items into account\n     * until we use the span count configured for the grid.\n     *\n     * @param parent RecyclerView\n     * @return offset for how many views we don't have to draw a divider or 1 if its a\n     * LinearLayoutManager\n     */\n    private int getLastDividerOffset(RecyclerView parent) {\n        if (parent.getLayoutManager() instanceof GridLayoutManager) {\n            GridLayoutManager layoutManager = (GridLayoutManager) parent.getLayoutManager();\n            GridLayoutManager.SpanSizeLookup spanSizeLookup = layoutManager.getSpanSizeLookup();\n            int spanCount = layoutManager.getSpanCount();\n            int itemCount = parent.getAdapter().getItemCount();\n            for (int i = itemCount - 1; i >= 0; i--) {\n                if (spanSizeLookup.getSpanIndex(i, spanCount) == 0) {\n                    return itemCount - i;\n                }\n            }\n        }\n\n        return 1;\n    }\n\n    /**\n     * Determines whether divider was already drawn for the row the item is in,\n     * effectively only makes sense for a grid\n     *\n     * @param position current view position to draw divider\n     * @param parent   RecyclerView\n     * @return true if the divider can be skipped as it is in the same row as the previous one.\n     */\n    private boolean wasDividerAlreadyDrawn(int position, RecyclerView parent) {\n        if (parent.getLayoutManager() instanceof GridLayoutManager) {\n            GridLayoutManager layoutManager = (GridLayoutManager) parent.getLayoutManager();\n            GridLayoutManager.SpanSizeLookup spanSizeLookup = layoutManager.getSpanSizeLookup();\n            int spanCount = layoutManager.getSpanCount();\n            return spanSizeLookup.getSpanIndex(position, spanCount) > 0;\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns a group index for GridLayoutManager.\n     * for LinearLayoutManager, always returns position.\n     *\n     * @param position current view position to draw divider\n     * @param parent   RecyclerView\n     * @return group index of items\n     */\n    private int getGroupIndex(int position, RecyclerView parent) {\n        if (parent.getLayoutManager() instanceof GridLayoutManager) {\n            GridLayoutManager layoutManager = (GridLayoutManager) parent.getLayoutManager();\n            GridLayoutManager.SpanSizeLookup spanSizeLookup = layoutManager.getSpanSizeLookup();\n            int spanCount = layoutManager.getSpanCount();\n            return spanSizeLookup.getSpanGroupIndex(position, spanCount);\n        }\n\n        return position;\n    }\n\n    protected abstract Rect getDividerBound(int position, RecyclerView parent, View child);\n\n    protected abstract void setItemOffsets(Rect outRect, int position, RecyclerView parent);\n\n    /**\n     * Interface for controlling divider visibility\n     */\n    public interface VisibilityProvider {\n\n        /**\n         * Returns true if divider should be hidden.\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return True if the divider at position should be hidden\n         */\n        boolean shouldHideDivider(int position, RecyclerView parent);\n    }\n\n    /**\n     * Interface for controlling paint instance for divider drawing\n     */\n    public interface PaintProvider {\n\n        /**\n         * Returns {@link Paint} for divider\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return Paint instance\n         */\n        Paint dividerPaint(int position, RecyclerView parent);\n    }\n\n    /**\n     * Interface for controlling divider color\n     */\n    public interface ColorProvider {\n\n        /**\n         * Returns {@link android.graphics.Color} value of divider\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return Color value\n         */\n        int dividerColor(int position, RecyclerView parent);\n    }\n\n    /**\n     * Interface for controlling drawable object for divider drawing\n     */\n    public interface DrawableProvider {\n\n        /**\n         * Returns drawable instance for divider\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return Drawable instance\n         */\n        Drawable drawableProvider(int position, RecyclerView parent);\n    }\n\n    /**\n     * Interface for controlling divider size\n     */\n    public interface SizeProvider {\n\n        /**\n         * Returns size value of divider.\n         * Height for horizontal divider, width for vertical divider\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return Size of divider\n         */\n        int dividerSize(int position, RecyclerView parent);\n    }\n\n    public static class Builder<T extends Builder> {\n\n        private Context mContext;\n        protected Resources mResources;\n        private PaintProvider mPaintProvider;\n        private ColorProvider mColorProvider;\n        private DrawableProvider mDrawableProvider;\n        private SizeProvider mSizeProvider;\n        private VisibilityProvider mVisibilityProvider = new VisibilityProvider() {\n            @Override\n            public boolean shouldHideDivider(int position, RecyclerView parent) {\n                return false;\n            }\n        };\n        private boolean mShowLastDivider = false;\n        private boolean mPositionInsideItem = false;\n\n        public Builder(Context context) {\n            mContext = context;\n            mResources = context.getResources();\n        }\n\n        public T paint(final Paint paint) {\n            return paintProvider(new PaintProvider() {\n                @Override\n                public Paint dividerPaint(int position, RecyclerView parent) {\n                    return paint;\n                }\n            });\n        }\n\n        public T paintProvider(PaintProvider provider) {\n            mPaintProvider = provider;\n            return (T) this;\n        }\n\n        public T color(final int color) {\n            return colorProvider(new ColorProvider() {\n                @Override\n                public int dividerColor(int position, RecyclerView parent) {\n                    return color;\n                }\n            });\n        }\n\n        public T colorResId(@ColorRes int colorId) {\n            return color(ContextCompat.getColor(mContext, colorId));\n        }\n\n        public T colorProvider(ColorProvider provider) {\n            mColorProvider = provider;\n            return (T) this;\n        }\n\n        public T drawable(@DrawableRes int id) {\n            return drawable(ContextCompat.getDrawable(mContext, id));\n        }\n\n        public T drawable(final Drawable drawable) {\n            return drawableProvider(new DrawableProvider() {\n                @Override\n                public Drawable drawableProvider(int position, RecyclerView parent) {\n                    return drawable;\n                }\n            });\n        }\n\n        public T drawableProvider(DrawableProvider provider) {\n            mDrawableProvider = provider;\n            return (T) this;\n        }\n\n        public T size(final int size) {\n            return sizeProvider(new SizeProvider() {\n                @Override\n                public int dividerSize(int position, RecyclerView parent) {\n                    return size;\n                }\n            });\n        }\n\n        public T sizeResId(@DimenRes int sizeId) {\n            return size(mResources.getDimensionPixelSize(sizeId));\n        }\n\n        public T sizeProvider(SizeProvider provider) {\n            mSizeProvider = provider;\n            return (T) this;\n        }\n\n        public T visibilityProvider(VisibilityProvider provider) {\n            mVisibilityProvider = provider;\n            return (T) this;\n        }\n\n        public T showLastDivider() {\n            mShowLastDivider = true;\n            return (T) this;\n        }\n\n        public T positionInsideItem(boolean positionInsideItem) {\n            mPositionInsideItem = positionInsideItem;\n            return (T) this;\n        }\n\n        protected void checkBuilderParams() {\n            if (mPaintProvider != null) {\n                if (mColorProvider != null) {\n                    throw new IllegalArgumentException(\n                            \"Use setColor method of Paint class to specify line color. Do not provider ColorProvider if you set PaintProvider.\");\n                }\n                if (mSizeProvider != null) {\n                    throw new IllegalArgumentException(\n                            \"Use setStrokeWidth method of Paint class to specify line size. Do not provider SizeProvider if you set PaintProvider.\");\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/divider/HorizontalDividerItemDecoration.java",
    "content": "package com.yoyiyi.soleil.widget.divider;\n\nimport android.content.Context;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.support.annotation.DimenRes;\nimport android.support.v4.view.ViewCompat;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\n\n/**\n * Created by yqritc on 2015/01/15.\n */\npublic class HorizontalDividerItemDecoration extends FlexibleDividerDecoration {\n\n    private MarginProvider mMarginProvider;\n\n    protected HorizontalDividerItemDecoration(Builder builder) {\n        super(builder);\n        mMarginProvider = builder.mMarginProvider;\n    }\n\n    @Override\n    protected Rect getDividerBound(int position, RecyclerView parent, View child) {\n        Rect bounds = new Rect(0, 0, 0, 0);\n        int transitionX = (int) ViewCompat.getTranslationX(child);\n        int transitionY = (int) ViewCompat.getTranslationY(child);\n        RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();\n        bounds.left = parent.getPaddingLeft() +\n                mMarginProvider.dividerLeftMargin(position, parent) + transitionX;\n        bounds.right = parent.getWidth() - parent.getPaddingRight() -\n                mMarginProvider.dividerRightMargin(position, parent) + transitionX;\n\n        int dividerSize = getDividerSize(position, parent);\n        boolean isReverseLayout = isReverseLayout(parent);\n        if (mDividerType == DividerType.DRAWABLE) {\n            // set top and bottom position of divider\n            if (isReverseLayout) {\n                bounds.bottom = child.getTop() - params.topMargin + transitionY;\n                bounds.top = bounds.bottom - dividerSize;\n            } else {\n                bounds.top = child.getBottom() + params.bottomMargin + transitionY;\n                bounds.bottom = bounds.top + dividerSize;\n            }\n        } else {\n            // set center point of divider\n            int halfSize = dividerSize / 2;\n            if (isReverseLayout) {\n                bounds.top = child.getTop() - params.topMargin - halfSize + transitionY;\n            } else {\n                bounds.top = child.getBottom() + params.bottomMargin + halfSize + transitionY;\n            }\n            bounds.bottom = bounds.top;\n        }\n\n        if (mPositionInsideItem) {\n            if (isReverseLayout) {\n                bounds.top += dividerSize;\n                bounds.bottom += dividerSize;\n            } else {\n                bounds.top -= dividerSize;\n                bounds.bottom -= dividerSize;\n            }\n        }\n\n        return bounds;\n    }\n\n    @Override\n    protected void setItemOffsets(Rect outRect, int position, RecyclerView parent) {\n        if (mPositionInsideItem) {\n            outRect.set(0, 0, 0, 0);\n            return;\n        }\n\n        if (isReverseLayout(parent)) {\n            outRect.set(0, getDividerSize(position, parent), 0, 0);\n        } else {\n            outRect.set(0, 0, 0, getDividerSize(position, parent));\n        }\n    }\n\n    private int getDividerSize(int position, RecyclerView parent) {\n        if (mPaintProvider != null) {\n            return (int) mPaintProvider.dividerPaint(position, parent).getStrokeWidth();\n        } else if (mSizeProvider != null) {\n            return mSizeProvider.dividerSize(position, parent);\n        } else if (mDrawableProvider != null) {\n            Drawable drawable = mDrawableProvider.drawableProvider(position, parent);\n            return drawable.getIntrinsicHeight();\n        }\n        throw new RuntimeException(\"failed to get size\");\n    }\n\n    /**\n     * Interface for controlling divider margin\n     */\n    public interface MarginProvider {\n\n        /**\n         * Returns left margin of divider.\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return left margin\n         */\n        int dividerLeftMargin(int position, RecyclerView parent);\n\n        /**\n         * Returns right margin of divider.\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return right margin\n         */\n        int dividerRightMargin(int position, RecyclerView parent);\n    }\n\n    public static class Builder extends FlexibleDividerDecoration.Builder<Builder> {\n\n        private MarginProvider mMarginProvider = new MarginProvider() {\n            @Override\n            public int dividerLeftMargin(int position, RecyclerView parent) {\n                return 0;\n            }\n\n            @Override\n            public int dividerRightMargin(int position, RecyclerView parent) {\n                return 0;\n            }\n        };\n\n        public Builder(Context context) {\n            super(context);\n        }\n\n        public Builder margin(final int leftMargin, final int rightMargin) {\n            return marginProvider(new MarginProvider() {\n                @Override\n                public int dividerLeftMargin(int position, RecyclerView parent) {\n                    return leftMargin;\n                }\n\n                @Override\n                public int dividerRightMargin(int position, RecyclerView parent) {\n                    return rightMargin;\n                }\n            });\n        }\n\n        public Builder margin(int horizontalMargin) {\n            return margin(horizontalMargin, horizontalMargin);\n        }\n\n        public Builder marginResId(@DimenRes int leftMarginId, @DimenRes int rightMarginId) {\n            return margin(mResources.getDimensionPixelSize(leftMarginId),\n                    mResources.getDimensionPixelSize(rightMarginId));\n        }\n\n        public Builder marginResId(@DimenRes int horizontalMarginId) {\n            return marginResId(horizontalMarginId, horizontalMarginId);\n        }\n\n        public Builder marginProvider(MarginProvider provider) {\n            mMarginProvider = provider;\n            return this;\n        }\n\n        public HorizontalDividerItemDecoration build() {\n            checkBuilderParams();\n            return new HorizontalDividerItemDecoration(this);\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/divider/VerticalDividerItemDecoration.java",
    "content": "package com.yoyiyi.soleil.widget.divider;\n\nimport android.content.Context;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.support.annotation.DimenRes;\nimport android.support.v4.view.ViewCompat;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\n\n/**\n * Created by yqritc on 2015/01/15.\n */\npublic class VerticalDividerItemDecoration extends FlexibleDividerDecoration {\n\n    private MarginProvider mMarginProvider;\n\n    protected VerticalDividerItemDecoration(Builder builder) {\n        super(builder);\n        mMarginProvider = builder.mMarginProvider;\n    }\n\n    @Override\n    protected Rect getDividerBound(int position, RecyclerView parent, View child) {\n        Rect bounds = new Rect(0, 0, 0, 0);\n        int transitionX = (int) ViewCompat.getTranslationX(child);\n        int transitionY = (int) ViewCompat.getTranslationY(child);\n        RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();\n        bounds.top = parent.getPaddingTop() +\n                mMarginProvider.dividerTopMargin(position, parent) + transitionY;\n        bounds.bottom = parent.getHeight() - parent.getPaddingBottom() -\n                mMarginProvider.dividerBottomMargin(position, parent) + transitionY;\n\n        int dividerSize = getDividerSize(position, parent);\n        boolean isReverseLayout = isReverseLayout(parent);\n        if (mDividerType == DividerType.DRAWABLE) {\n            // set left and right position of divider\n            if (isReverseLayout) {\n                bounds.right = child.getLeft() - params.leftMargin + transitionX;\n                bounds.left = bounds.right - dividerSize;\n            } else {\n                bounds.left = child.getRight() + params.rightMargin + transitionX;\n                bounds.right = bounds.left + dividerSize;\n            }\n        } else {\n            // set center point of divider\n            int halfSize = dividerSize / 2;\n            if (isReverseLayout) {\n                bounds.left = child.getLeft() - params.leftMargin - halfSize + transitionX;\n            } else {\n                bounds.left = child.getRight() + params.rightMargin + halfSize + transitionX;\n            }\n            bounds.right = bounds.left;\n        }\n\n        if (mPositionInsideItem) {\n            if (isReverseLayout) {\n                bounds.left += dividerSize;\n                bounds.right += dividerSize;\n            } else {\n                bounds.left -= dividerSize;\n                bounds.right -= dividerSize;\n            }\n        }\n\n        return bounds;\n    }\n\n    @Override\n    protected void setItemOffsets(Rect outRect, int position, RecyclerView parent) {\n        if (mPositionInsideItem) {\n            outRect.set(0, 0, 0, 0);\n            return;\n        }\n\n        if (isReverseLayout(parent)) {\n            outRect.set(getDividerSize(position, parent), 0, 0, 0);\n        } else {\n            outRect.set(0, 0, getDividerSize(position, parent), 0);\n        }\n    }\n\n    private int getDividerSize(int position, RecyclerView parent) {\n        if (mPaintProvider != null) {\n            return (int) mPaintProvider.dividerPaint(position, parent).getStrokeWidth();\n        } else if (mSizeProvider != null) {\n            return mSizeProvider.dividerSize(position, parent);\n        } else if (mDrawableProvider != null) {\n            Drawable drawable = mDrawableProvider.drawableProvider(position, parent);\n            return drawable.getIntrinsicWidth();\n        }\n        throw new RuntimeException(\"failed to get size\");\n    }\n\n    /**\n     * Interface for controlling divider margin\n     */\n    public interface MarginProvider {\n\n        /**\n         * Returns top margin of divider.\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return top margin\n         */\n        int dividerTopMargin(int position, RecyclerView parent);\n\n        /**\n         * Returns bottom margin of divider.\n         *\n         * @param position Divider position (or group index for GridLayoutManager)\n         * @param parent   RecyclerView\n         * @return bottom margin\n         */\n        int dividerBottomMargin(int position, RecyclerView parent);\n    }\n\n    public static class Builder extends FlexibleDividerDecoration.Builder<Builder> {\n\n        private MarginProvider mMarginProvider = new MarginProvider() {\n            @Override\n            public int dividerTopMargin(int position, RecyclerView parent) {\n                return 0;\n            }\n\n            @Override\n            public int dividerBottomMargin(int position, RecyclerView parent) {\n                return 0;\n            }\n        };\n\n        public Builder(Context context) {\n            super(context);\n        }\n\n        public Builder margin(final int topMargin, final int bottomMargin) {\n            return marginProvider(new MarginProvider() {\n                @Override\n                public int dividerTopMargin(int position, RecyclerView parent) {\n                    return topMargin;\n                }\n\n                @Override\n                public int dividerBottomMargin(int position, RecyclerView parent) {\n                    return bottomMargin;\n                }\n            });\n        }\n\n        public Builder margin(int verticalMargin) {\n            return margin(verticalMargin, verticalMargin);\n        }\n\n        public Builder marginResId(@DimenRes int topMarginId, @DimenRes int bottomMarginId) {\n            return margin(mResources.getDimensionPixelSize(topMarginId),\n                    mResources.getDimensionPixelSize(bottomMarginId));\n        }\n\n        public Builder marginResId(@DimenRes int verticalMarginId) {\n            return marginResId(verticalMarginId, verticalMarginId);\n        }\n\n        public Builder marginProvider(MarginProvider provider) {\n            mMarginProvider = provider;\n            return this;\n        }\n\n        public VerticalDividerItemDecoration build() {\n            checkBuilderParams();\n            return new VerticalDividerItemDecoration(this);\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/expand/ExpandableLayout.java",
    "content": "package com.yoyiyi.soleil.widget.expand;\n\nimport android.animation.Animator;\nimport android.animation.ValueAnimator;\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.content.res.TypedArray;\nimport android.os.Bundle;\nimport android.os.Parcelable;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.animation.Interpolator;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\n\nimport com.yoyiyi.soleil.R;\n\n\npublic class ExpandableLayout extends FrameLayout {\n    private static final int IDLE = 0;\n    private static final int EXPANDING = 1;\n    private static final int COLLAPSING = 2;\n\n    public static final String KEY_SUPER_STATE = \"super_state\";\n    public static final String KEY_EXPANSION = \"expansion\";\n\n    public static final int HORIZONTAL = 0;\n    public static final int VERTICAL = 1;\n\n    private static final int DEFAULT_DURATION = 300;\n\n    private int duration = DEFAULT_DURATION;\n    private float parallax;\n    private float expansion;\n    private int orientation;\n    private int state = IDLE;\n\n    private Interpolator interpolator = new FastOutSlowInInterpolator();\n    private ValueAnimator animator;\n\n    private OnExpansionUpdateListener listener;\n\n    public ExpandableLayout(Context context) {\n        this(context, null);\n    }\n\n    public ExpandableLayout(Context context, AttributeSet attrs) {\n        super(context, attrs);\n\n        if (attrs != null) {\n            TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ExpandableLayout);\n            duration = a.getInt(R.styleable.ExpandableLayout_el_duration, DEFAULT_DURATION);\n            expansion = a.getBoolean(R.styleable.ExpandableLayout_el_expanded, false) ? 1 : 0;\n            orientation = a.getInt(R.styleable.ExpandableLayout_android_orientation, VERTICAL);\n            float parallax = a.getBoolean(R.styleable.ExpandableLayout_el_translate_children, true) ? 1 : 0;\n            parallax = a.getFloat(R.styleable.ExpandableLayout_el_parallax, parallax);\n            a.recycle();\n\n            setParallax(parallax);\n        }\n    }\n\n    @Override\n    protected Parcelable onSaveInstanceState() {\n        Parcelable superState = super.onSaveInstanceState();\n        Bundle bundle = new Bundle();\n\n        expansion = isExpanded() ? 1 : 0;\n\n        bundle.putFloat(KEY_EXPANSION, expansion);\n        bundle.putParcelable(KEY_SUPER_STATE, superState);\n\n        return bundle;\n    }\n\n    @Override\n    protected void onRestoreInstanceState(Parcelable state) {\n        Bundle bundle = (Bundle) state;\n        expansion = bundle.getFloat(KEY_EXPANSION);\n        Parcelable superState = bundle.getParcelable(KEY_SUPER_STATE);\n\n        super.onRestoreInstanceState(superState);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n\n        int width = getMeasuredWidth();\n        int height = getMeasuredHeight();\n\n        int size = orientation == LinearLayout.HORIZONTAL ? width : height;\n\n        setVisibility(expansion == 0 && size == 0 ? GONE : VISIBLE);\n\n        int expansionDelta = size - Math.round(size * expansion);\n        if (parallax > 0) {\n            float parallaxDelta = expansionDelta * parallax;\n            for (int i = 0; i < getChildCount(); i++) {\n                View child = getChildAt(i);\n                if (orientation == HORIZONTAL) {\n                    int direction = -1;\n                    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1 && getLayoutDirection() == LAYOUT_DIRECTION_RTL) {\n                        direction = 1;\n                    }\n                    child.setTranslationX(direction * parallaxDelta);\n                } else {\n                    child.setTranslationY(-parallaxDelta);\n                }\n            }\n        }\n\n        if (orientation == HORIZONTAL) {\n            setMeasuredDimension(width - expansionDelta, height);\n        } else {\n            setMeasuredDimension(width, height - expansionDelta);\n        }\n    }\n\n    @Override\n    protected void onConfigurationChanged(Configuration newConfig) {\n        if (animator != null) {\n            animator.cancel();\n        }\n        super.onConfigurationChanged(newConfig);\n    }\n\n    public boolean isExpanded() {\n        return state == EXPANDING || (Math.abs(expansion - 1) < 0.0001f);\n    }\n\n    public void toggle() {\n        toggle(true);\n    }\n\n    public void toggle(boolean animate) {\n        if (isExpanded()) {\n            collapse(animate);\n        } else {\n            expand(animate);\n        }\n    }\n\n    public void expand() {\n        expand(true);\n    }\n\n    public void expand(boolean animate) {\n        setExpanded(true, animate);\n    }\n\n    public void collapse() {\n        collapse(true);\n    }\n\n    public void collapse(boolean animate) {\n        setExpanded(false, animate);\n    }\n\n    /**\n     * Convenience method - same as calling setExpanded(expanded, true)\n     */\n    public void setExpanded(boolean expand) {\n        setExpanded(expand, true);\n    }\n\n    public void setExpanded(boolean expand, boolean animate) {\n        if (expand && (state == EXPANDING || expansion == 1)) {\n            return;\n        }\n\n        if (!expand && (state == COLLAPSING || expansion == 0)) {\n            return;\n        }\n\n        int targetExpansion = expand ? 1 : 0;\n        if (animate) {\n            animateSize(targetExpansion);\n        } else {\n            setExpansion(targetExpansion);\n        }\n    }\n\n    public int getDuration() {\n        return duration;\n    }\n\n    public void setInterpolator(Interpolator interpolator) {\n        this.interpolator = interpolator;\n    }\n\n    public void setDuration(int duration) {\n        this.duration = duration;\n    }\n\n    public float getExpansion() {\n        return expansion;\n    }\n\n    public void setExpansion(float expansion) {\n        if (this.expansion == expansion) {\n            return;\n        }\n\n        setVisibility(expansion == 0 ? GONE : VISIBLE);\n\n        this.expansion = expansion;\n        requestLayout();\n\n        if (listener != null) {\n            listener.onExpansionUpdate(expansion);\n        }\n    }\n\n    public float getParallax() {\n        return parallax;\n    }\n\n    public void setParallax(float parallax) {\n        // Make sure parallax is between 0 and 1\n        parallax = Math.min(1, Math.max(0, parallax));\n        this.parallax = parallax;\n    }\n\n    /**\n     * @deprecated use {@link #getParallax()}  instead\n     */\n    @Deprecated\n    public boolean getTranslateChildren() {\n        return parallax > 0;\n    }\n\n    /**\n     * @deprecated use {@link #setParallax(float)} instead\n     */\n    public void setTranslateChildren(boolean translateChildren) {\n        parallax = translateChildren ? 1 : 0;\n    }\n\n    public int getOrientation() {\n        return orientation;\n    }\n\n    public void setOrientation(int orientation) {\n        if (orientation < 0 || orientation > 1) {\n            throw new IllegalArgumentException(\"Orientation must be either 0 (horizontal) or 1 (vertical)\");\n        }\n        this.orientation = orientation;\n    }\n\n    public void setOnExpansionUpdateListener(OnExpansionUpdateListener listener) {\n        this.listener = listener;\n    }\n\n    private void animateSize(final int targetExpansion) {\n        if (animator != null) {\n            animator.cancel();\n            animator = null;\n        }\n\n        animator = ValueAnimator.ofFloat(expansion, targetExpansion);\n        animator.setInterpolator(interpolator);\n        animator.setDuration(duration);\n\n        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {\n            @Override\n            public void onAnimationUpdate(ValueAnimator valueAnimator) {\n                setExpansion((float) valueAnimator.getAnimatedValue());\n            }\n        });\n\n        animator.addListener(new Animator.AnimatorListener() {\n            @Override\n            public void onAnimationStart(Animator animation) {\n                state = targetExpansion == 0 ? COLLAPSING : EXPANDING;\n            }\n\n            @Override\n            public void onAnimationEnd(Animator animation) {\n                state = IDLE;\n            }\n\n            @Override\n            public void onAnimationCancel(Animator animation) {\n                state = IDLE;\n            }\n\n            @Override\n            public void onAnimationRepeat(Animator animation) {\n            }\n        });\n\n        animator.start();\n    }\n\n    public interface OnExpansionUpdateListener {\n        void onExpansionUpdate(float expansionFraction);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/expand/FastOutSlowInInterpolator.java",
    "content": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.yoyiyi.soleil.widget.expand;\n\n/**\n * Interpolator corresponding to {@link android.R.interpolator#fast_out_slow_in}.\n *\n * Uses a lookup table for the Bezier curve from (0,0) to (1,1) with control points:\n * P0 (0, 0)\n * P1 (0.4, 0)\n * P2 (0.2, 1.0)\n * P3 (1.0, 1.0)\n */\npublic class FastOutSlowInInterpolator extends LookupTableInterpolator {\n\n    /**\n     * Lookup table values sampled with x at regular intervals between 0 and 1 for a total of\n     * 201 points.\n     */\n    private static final float[] VALUES = new float[] {\n            0.0000f, 0.0001f, 0.0002f, 0.0005f, 0.0009f, 0.0014f, 0.0020f,\n            0.0027f, 0.0036f, 0.0046f, 0.0058f, 0.0071f, 0.0085f, 0.0101f,\n            0.0118f, 0.0137f, 0.0158f, 0.0180f, 0.0205f, 0.0231f, 0.0259f,\n            0.0289f, 0.0321f, 0.0355f, 0.0391f, 0.0430f, 0.0471f, 0.0514f,\n            0.0560f, 0.0608f, 0.0660f, 0.0714f, 0.0771f, 0.0830f, 0.0893f,\n            0.0959f, 0.1029f, 0.1101f, 0.1177f, 0.1257f, 0.1339f, 0.1426f,\n            0.1516f, 0.1610f, 0.1707f, 0.1808f, 0.1913f, 0.2021f, 0.2133f,\n            0.2248f, 0.2366f, 0.2487f, 0.2611f, 0.2738f, 0.2867f, 0.2998f,\n            0.3131f, 0.3265f, 0.3400f, 0.3536f, 0.3673f, 0.3810f, 0.3946f,\n            0.4082f, 0.4217f, 0.4352f, 0.4485f, 0.4616f, 0.4746f, 0.4874f,\n            0.5000f, 0.5124f, 0.5246f, 0.5365f, 0.5482f, 0.5597f, 0.5710f,\n            0.5820f, 0.5928f, 0.6033f, 0.6136f, 0.6237f, 0.6335f, 0.6431f,\n            0.6525f, 0.6616f, 0.6706f, 0.6793f, 0.6878f, 0.6961f, 0.7043f,\n            0.7122f, 0.7199f, 0.7275f, 0.7349f, 0.7421f, 0.7491f, 0.7559f,\n            0.7626f, 0.7692f, 0.7756f, 0.7818f, 0.7879f, 0.7938f, 0.7996f,\n            0.8053f, 0.8108f, 0.8162f, 0.8215f, 0.8266f, 0.8317f, 0.8366f,\n            0.8414f, 0.8461f, 0.8507f, 0.8551f, 0.8595f, 0.8638f, 0.8679f,\n            0.8720f, 0.8760f, 0.8798f, 0.8836f, 0.8873f, 0.8909f, 0.8945f,\n            0.8979f, 0.9013f, 0.9046f, 0.9078f, 0.9109f, 0.9139f, 0.9169f,\n            0.9198f, 0.9227f, 0.9254f, 0.9281f, 0.9307f, 0.9333f, 0.9358f,\n            0.9382f, 0.9406f, 0.9429f, 0.9452f, 0.9474f, 0.9495f, 0.9516f,\n            0.9536f, 0.9556f, 0.9575f, 0.9594f, 0.9612f, 0.9629f, 0.9646f,\n            0.9663f, 0.9679f, 0.9695f, 0.9710f, 0.9725f, 0.9739f, 0.9753f,\n            0.9766f, 0.9779f, 0.9791f, 0.9803f, 0.9815f, 0.9826f, 0.9837f,\n            0.9848f, 0.9858f, 0.9867f, 0.9877f, 0.9885f, 0.9894f, 0.9902f,\n            0.9910f, 0.9917f, 0.9924f, 0.9931f, 0.9937f, 0.9944f, 0.9949f,\n            0.9955f, 0.9960f, 0.9964f, 0.9969f, 0.9973f, 0.9977f, 0.9980f,\n            0.9984f, 0.9986f, 0.9989f, 0.9991f, 0.9993f, 0.9995f, 0.9997f,\n            0.9998f, 0.9999f, 0.9999f, 1.0000f, 1.0000f\n    };\n\n    public FastOutSlowInInterpolator() {\n        super(VALUES);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/expand/LookupTableInterpolator.java",
    "content": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.yoyiyi.soleil.widget.expand;\n\nimport android.view.animation.Interpolator;\n\n/**\n * An {@link Interpolator} that uses a lookup table to compute an interpolation based on a\n * given input.\n */\nabstract class LookupTableInterpolator implements Interpolator {\n\n    private final float[] mValues;\n    private final float mStepSize;\n\n    public LookupTableInterpolator(float[] values) {\n        mValues = values;\n        mStepSize = 1f / (mValues.length - 1);\n    }\n\n    @Override\n    public float getInterpolation(float input) {\n        if (input >= 1.0f) {\n            return 1.0f;\n        }\n        if (input <= 0f) {\n            return 0f;\n        }\n\n        // Calculate index - We use min with length - 2 to avoid IndexOutOfBoundsException when\n        // we lerp (linearly interpolate) in the return statement\n        int position = Math.min((int) (input * (mValues.length - 1)), mValues.length - 2);\n\n        // Calculate values to account for small offsets as the lookup table has discrete values\n        float quantized = position * mStepSize;\n        float diff = input - quantized;\n        float weight = diff / mStepSize;\n\n        // Linearly interpolate between the table values\n        return mValues[position] + weight * (mValues[position + 1] - mValues[position]);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/flowlayout/FlowLayout.java",
    "content": "package com.yoyiyi.soleil.widget.flowlayout;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.yoyiyi.soleil.R;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class FlowLayout extends ViewGroup {\n    private static final String TAG = \"FlowLayout\";\n    private static final int LEFT = -1;\n    private static final int CENTER = 0;\n    private static final int RIGHT = 1;\n\n    protected List<List<View>> mAllViews = new ArrayList<List<View>>();\n    protected List<Integer> mLineHeight = new ArrayList<Integer>();\n    protected List<Integer> mLineWidth = new ArrayList<Integer>();\n    private int mGravity;\n    private List<View> lineViews = new ArrayList<>();\n\n    public FlowLayout(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout);\n        mGravity = ta.getInt(R.styleable.TagFlowLayout_gravity, LEFT);\n        ta.recycle();\n    }\n\n    public FlowLayout(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public FlowLayout(Context context) {\n        this(context, null);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);\n        int modeWidth = MeasureSpec.getMode(widthMeasureSpec);\n        int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);\n        int modeHeight = MeasureSpec.getMode(heightMeasureSpec);\n\n        // wrap_content\n        int width = 0;\n        int height = 0;\n\n        int lineWidth = 0;\n        int lineHeight = 0;\n\n        int cCount = getChildCount();\n\n        for (int i = 0; i < cCount; i++) {\n            View child = getChildAt(i);\n            if (child.getVisibility() == View.GONE) {\n                if (i == cCount - 1) {\n                    width = Math.max(lineWidth, width);\n                    height += lineHeight;\n                }\n                continue;\n            }\n            measureChild(child, widthMeasureSpec, heightMeasureSpec);\n            MarginLayoutParams lp = (MarginLayoutParams) child\n                    .getLayoutParams();\n\n            int childWidth = child.getMeasuredWidth() + lp.leftMargin\n                    + lp.rightMargin;\n            int childHeight = child.getMeasuredHeight() + lp.topMargin\n                    + lp.bottomMargin;\n\n            if (lineWidth + childWidth > sizeWidth - getPaddingLeft() - getPaddingRight()) {\n                width = Math.max(width, lineWidth);\n                lineWidth = childWidth;\n                height += lineHeight;\n                lineHeight = childHeight;\n            } else {\n                lineWidth += childWidth;\n                lineHeight = Math.max(lineHeight, childHeight);\n            }\n            if (i == cCount - 1) {\n                width = Math.max(lineWidth, width);\n                height += lineHeight;\n            }\n        }\n        setMeasuredDimension(\n                //\n                modeWidth == MeasureSpec.EXACTLY ? sizeWidth : width + getPaddingLeft() + getPaddingRight(),\n                modeHeight == MeasureSpec.EXACTLY ? sizeHeight : height + getPaddingTop() + getPaddingBottom()//\n        );\n\n    }\n\n\n    @Override\n    protected void onLayout(boolean changed, int l, int t, int r, int b) {\n        mAllViews.clear();\n        mLineHeight.clear();\n        mLineWidth.clear();\n        lineViews.clear();\n\n        int width = getWidth();\n\n        int lineWidth = 0;\n        int lineHeight = 0;\n\n\n        //总子控件\n        int cCount = getChildCount();\n\n        for (int i = 0; i < cCount; i++) {\n            View child = getChildAt(i);\n            if (child.getVisibility() == View.GONE) continue;\n            MarginLayoutParams lp = (MarginLayoutParams) child\n                    .getLayoutParams();\n\n            int childWidth = child.getMeasuredWidth();//宽\n            int childHeight = child.getMeasuredHeight();//高\n\n            if (childWidth + lineWidth + lp.leftMargin + lp.rightMargin > width - getPaddingLeft() - getPaddingRight()) {\n                mLineHeight.add(lineHeight);\n                mAllViews.add(lineViews);\n                //行宽\n                mLineWidth.add(lineWidth);\n\n                lineWidth = 0;\n                lineHeight = childHeight + lp.topMargin + lp.bottomMargin;\n                lineViews = new ArrayList<View>();\n            }\n            lineWidth += childWidth + lp.leftMargin + lp.rightMargin;\n            lineHeight = Math.max(lineHeight, childHeight + lp.topMargin\n                    + lp.bottomMargin);\n            lineViews.add(child);\n\n        }\n        mLineHeight.add(lineHeight);\n        mLineWidth.add(lineWidth);\n        mAllViews.add(lineViews);\n\n        int left = getPaddingLeft();\n        int top = getPaddingTop();\n        int lineNum = mAllViews.size();\n        for (int i = 0; i < lineNum; i++) { //多少行\n            lineViews = mAllViews.get(i);\n            lineHeight = mLineHeight.get(i);\n            // set gravity\n            int currentLineWidth = this.mLineWidth.get(i);\n            switch (this.mGravity) {\n                case LEFT:\n                    left = getPaddingLeft();\n                    break;\n                case CENTER:\n                    left = (width - currentLineWidth) / 2 + getPaddingLeft();\n                    break;\n                case RIGHT:\n                    left = width - currentLineWidth + getPaddingLeft();\n                    break;\n            }\n            for (int j = 0; j < lineViews.size(); j++) {\n                View child = lineViews.get(j);\n                if (child.getVisibility() == View.GONE) {\n                    continue;\n                }\n                MarginLayoutParams lp = (MarginLayoutParams) child\n                        .getLayoutParams();\n\n                int lc = left + lp.leftMargin;\n                int tc = top + lp.topMargin;\n                int rc = lc + child.getMeasuredWidth();\n                int bc = tc + child.getMeasuredHeight();\n\n                child.layout(lc, tc, rc, bc);\n\n                left += child.getMeasuredWidth() + lp.leftMargin\n                        + lp.rightMargin;\n            }\n           // if (lineViews.size() != 0)\n             //   layoutView(left, top, lineViews, lineWidth, lineHeight);\n            top += lineHeight;\n        }\n\n    }\n\n    public void layoutView(int l, int t, List<View> views, int width, int height) {\n        int left = l;\n        int top = t;\n        int count = views.size();//一行一共View个数\n        // 总宽度\n        int layoutWidth = getMeasuredWidth() - getPaddingLeft()\n                - getPaddingRight();\n        // 剩余的宽度，是除了View和间隙的剩余空间\n        int surplusWidth = layoutWidth - width /*- mHorizontalSpacing * (count - 1)*/;\n        if (surplusWidth >= 0) {// 剩余空间\n            // 采用float类型数据计算后四舍五入能减少int类型计算带来的误差\n            int splitSpacing = (int) (surplusWidth / count + 0.5);\n            for (int i = 0; i < count; i++) {\n                final View view = views.get(i);\n                int childWidth = view.getMeasuredWidth();\n                int childHeight = view.getMeasuredHeight();\n                // 计算出每个View的顶点，是由最高的View和该View高度的差值除以2\n                int topOffset = (int) ((height - childHeight) / 2.0 + 0.5);\n                if (topOffset < 0) {\n                    topOffset = 0;\n                }\n                // 把剩余空间平均到每个View上\n                childWidth = childWidth + splitSpacing;\n                view.getLayoutParams().width = childWidth;\n                if (splitSpacing > 0) {// View的长度改变了，需要重新measure\n                    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(\n                            childWidth, MeasureSpec.EXACTLY);\n                    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(\n                            childHeight, MeasureSpec.EXACTLY);\n                    view.measure(widthMeasureSpec, heightMeasureSpec);\n                }\n                // 布局View\n                view.layout(left, top + topOffset, left + childWidth, top\n                        + topOffset + childHeight);\n                left += childWidth /*+ mHorizontalSpacing*/; // 为下一个View的left赋值\n            }\n        } else {\n            if (count == 1) {\n                View view = views.get(0);\n                view.layout(left, top, left + view.getMeasuredWidth(), top\n                        + view.getMeasuredHeight());\n            } else {\n                // 走到这里来，应该是代码出问题了，目前按照逻辑来看，是不可能走到这一步\n            }\n        }\n    }\n\n\n    @Override\n    public LayoutParams generateLayoutParams(AttributeSet attrs) {\n        return new MarginLayoutParams(getContext(), attrs);\n    }\n\n    @Override\n    protected LayoutParams generateDefaultLayoutParams() {\n        return new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n    }\n\n    @Override\n    protected LayoutParams generateLayoutParams(LayoutParams p) {\n        return new MarginLayoutParams(p);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/flowlayout/TagAdapter.java",
    "content": "package com.yoyiyi.soleil.widget.flowlayout;\n\nimport android.view.View;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\npublic abstract class TagAdapter<T> {\n    private List<T> mTagDatas;\n    private OnDataChangedListener mOnDataChangedListener;\n    private HashSet<Integer> mCheckedPosList = new HashSet<Integer>();\n\n    public TagAdapter(List<T> datas) {\n        mTagDatas = datas;\n    }\n\n    public TagAdapter(T[] datas) {\n        mTagDatas = new ArrayList<T>(Arrays.asList(datas));\n    }\n\n    interface OnDataChangedListener {\n        void onChanged();\n    }\n\n    void setOnDataChangedListener(OnDataChangedListener listener) {\n        mOnDataChangedListener = listener;\n    }\n\n    public void setSelectedList(int... poses) {\n        Set<Integer> set = new HashSet<>();\n        for (int pos : poses) {\n            set.add(pos);\n        }\n        setSelectedList(set);\n    }\n\n    public void setSelectedList(Set<Integer> set) {\n        mCheckedPosList.clear();\n        if (set != null)\n            mCheckedPosList.addAll(set);\n        notifyDataChanged();\n    }\n\n    HashSet<Integer> getPreCheckedList() {\n        return mCheckedPosList;\n    }\n\n\n    public int getCount() {\n        return mTagDatas == null ? 0 : mTagDatas.size();\n    }\n\n    public void notifyDataChanged() {\n        if (mOnDataChangedListener != null)\n            mOnDataChangedListener.onChanged();\n    }\n\n    public T getItem(int position) {\n        return mTagDatas.get(position);\n    }\n\n    public abstract View getView(FlowLayout parent, int position, T t);\n\n    public boolean setSelected(int position, T t) {\n        return false;\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/flowlayout/TagFlowLayout.java",
    "content": "package com.yoyiyi.soleil.widget.flowlayout;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Rect;\nimport android.os.Bundle;\nimport android.os.Parcelable;\nimport android.text.TextUtils;\nimport android.util.AttributeSet;\nimport android.util.Log;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.yoyiyi.soleil.R;\n\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.Set;\n\n/**\n * Created by zhy on 15/9/10.\n */\npublic class TagFlowLayout extends FlowLayout implements TagAdapter.OnDataChangedListener {\n    private TagAdapter mTagAdapter;\n    private boolean mAutoSelectEffect = true;\n    private int mSelectedMax = -1;//-1为不限制数量\n    private static final String TAG = \"TagFlowLayout\";\n    private MotionEvent mMotionEvent;\n\n    private Set<Integer> mSelectedView = new HashSet<Integer>();\n\n\n    public TagFlowLayout(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout);\n        mAutoSelectEffect = ta.getBoolean(R.styleable.TagFlowLayout_auto_select_effect, true);\n        mSelectedMax = ta.getInt(R.styleable.TagFlowLayout_max_select, -1);\n        ta.recycle();\n\n        if (mAutoSelectEffect) {\n            setClickable(true);\n        }\n    }\n\n    public TagFlowLayout(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public TagFlowLayout(Context context) {\n        this(context, null);\n    }\n\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        int cCount = getChildCount();\n\n        for (int i = 0; i < cCount; i++) {\n            TagView tagView = (TagView) getChildAt(i);\n            if (tagView.getVisibility() == View.GONE) continue;\n            if (tagView.getTagView().getVisibility() == View.GONE) {\n                tagView.setVisibility(View.GONE);\n            }\n        }\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n    public interface OnSelectListener {\n        void onSelected(Set<Integer> selectPosSet);\n    }\n\n    private OnSelectListener mOnSelectListener;\n\n    public void setOnSelectListener(OnSelectListener onSelectListener) {\n        mOnSelectListener = onSelectListener;\n        if (mOnSelectListener != null) setClickable(true);\n    }\n\n    public interface OnTagClickListener {\n        boolean onTagClick(View view, int position, FlowLayout parent);\n    }\n\n    private OnTagClickListener mOnTagClickListener;\n\n    public void setOnTagClickListener(OnTagClickListener onTagClickListener) {\n        mOnTagClickListener = onTagClickListener;\n        if (onTagClickListener != null) setClickable(true);\n    }\n\n\n    public void setAdapter(TagAdapter adapter) {\n        mTagAdapter = adapter;\n        mTagAdapter.setOnDataChangedListener(this);\n        mSelectedView.clear();\n        changeAdapter();\n\n    }\n\n    private void changeAdapter() {\n        removeAllViews();\n        TagAdapter adapter = mTagAdapter;\n        TagView tagViewContainer = null;\n        HashSet preCheckedList = mTagAdapter.getPreCheckedList();\n        for (int i = 0; i < adapter.getCount(); i++) {\n            View tagView = adapter.getView(this, i, adapter.getItem(i));\n\n            tagViewContainer = new TagView(getContext());\n//            ViewGroup.MarginLayoutParams clp = (ViewGroup.MarginLayoutParams) tagView.getLayoutParams();\n//            ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(clp);\n//            lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;\n//            lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;\n//            lp.topMargin = clp.topMargin;\n//            lp.bottomMargin = clp.bottomMargin;\n//            lp.leftMargin = clp.leftMargin;\n//            lp.rightMargin = clp.rightMargin;\n            tagView.setDuplicateParentStateEnabled(true);\n            if (tagView.getLayoutParams() != null) {\n                tagViewContainer.setLayoutParams(tagView.getLayoutParams());\n            } else {\n                ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n                lp.setMargins(dip2px(getContext(), 5),\n                        dip2px(getContext(), 5),\n                        dip2px(getContext(), 5),\n                        dip2px(getContext(), 5));\n                tagViewContainer.setLayoutParams(lp);\n            }\n            tagViewContainer.addView(tagView);\n            addView(tagViewContainer);\n\n\n            if (preCheckedList.contains(i)) {\n                tagViewContainer.setChecked(true);\n            }\n\n            if (mTagAdapter.setSelected(i, adapter.getItem(i))) {\n                mSelectedView.add(i);\n                tagViewContainer.setChecked(true);\n            }\n        }\n        mSelectedView.addAll(preCheckedList);\n\n    }\n\n\n    @Override\n    public boolean onTouchEvent(MotionEvent event) {\n        if (event.getAction() == MotionEvent.ACTION_UP) {\n            mMotionEvent = MotionEvent.obtain(event);\n        }\n        return super.onTouchEvent(event);\n    }\n\n    @Override\n    public boolean performClick() {\n        if (mMotionEvent == null) return super.performClick();\n\n        int x = (int) mMotionEvent.getX();\n        int y = (int) mMotionEvent.getY();\n        mMotionEvent = null;\n\n        TagView child = findChild(x, y);\n        int pos = findPosByView(child);\n        if (child != null) {\n            doSelect(child, pos);\n            if (mOnTagClickListener != null) {\n                return mOnTagClickListener.onTagClick(child.getTagView(), pos, this);\n            }\n        }\n        return true;\n    }\n\n\n    public void setMaxSelectCount(int count) {\n        if (mSelectedView.size() > count) {\n            Log.w(TAG, \"you has already select more than \" + count + \" views , so it will be clear .\");\n            mSelectedView.clear();\n        }\n        mSelectedMax = count;\n    }\n\n    public Set<Integer> getSelectedList() {\n        return new HashSet<Integer>(mSelectedView);\n    }\n\n    private void doSelect(TagView child, int position) {\n        if (mAutoSelectEffect) {\n            if (!child.isChecked()) {\n                //处理max_select=1的情况\n                if (mSelectedMax == 1 && mSelectedView.size() == 1) {\n                    Iterator<Integer> iterator = mSelectedView.iterator();\n                    Integer preIndex = iterator.next();\n                    TagView pre = (TagView) getChildAt(preIndex);\n                    pre.setChecked(false);\n                    child.setChecked(true);\n                    mSelectedView.remove(preIndex);\n                    mSelectedView.add(position);\n                } else {\n                    if (mSelectedMax > 0 && mSelectedView.size() >= mSelectedMax)\n                        return;\n                    child.setChecked(true);\n                    mSelectedView.add(position);\n                }\n            } else {\n                child.setChecked(false);\n                mSelectedView.remove(position);\n            }\n            if (mOnSelectListener != null) {\n                mOnSelectListener.onSelected(new HashSet<Integer>(mSelectedView));\n            }\n        }\n    }\n\n    public TagAdapter getAdapter() {\n        return mTagAdapter;\n    }\n\n\n    private static final String KEY_CHOOSE_POS = \"key_choose_pos\";\n    private static final String KEY_DEFAULT = \"key_default\";\n\n\n    @Override\n    protected Parcelable onSaveInstanceState() {\n        Bundle bundle = new Bundle();\n        bundle.putParcelable(KEY_DEFAULT, super.onSaveInstanceState());\n\n        String selectPos = \"\";\n        if (mSelectedView.size() > 0) {\n            for (int key : mSelectedView) {\n                selectPos += key + \"|\";\n            }\n            selectPos = selectPos.substring(0, selectPos.length() - 1);\n        }\n        bundle.putString(KEY_CHOOSE_POS, selectPos);\n        return bundle;\n    }\n\n    @Override\n    protected void onRestoreInstanceState(Parcelable state) {\n        if (state instanceof Bundle) {\n            Bundle bundle = (Bundle) state;\n            String mSelectPos = bundle.getString(KEY_CHOOSE_POS);\n            if (!TextUtils.isEmpty(mSelectPos)) {\n                String[] split = mSelectPos.split(\"\\\\|\");\n                for (String pos : split) {\n                    int index = Integer.parseInt(pos);\n                    mSelectedView.add(index);\n\n                    TagView tagView = (TagView) getChildAt(index);\n                    if (tagView != null)\n                        tagView.setChecked(true);\n                }\n\n            }\n            super.onRestoreInstanceState(bundle.getParcelable(KEY_DEFAULT));\n            return;\n        }\n        super.onRestoreInstanceState(state);\n    }\n\n    private int findPosByView(View child) {\n        final int cCount = getChildCount();\n        for (int i = 0; i < cCount; i++) {\n            View v = getChildAt(i);\n            if (v == child) return i;\n        }\n        return -1;\n    }\n\n    private TagView findChild(int x, int y) {\n        final int cCount = getChildCount();\n        for (int i = 0; i < cCount; i++) {\n            TagView v = (TagView) getChildAt(i);\n            if (v.getVisibility() == View.GONE) continue;\n            Rect outRect = new Rect();\n            v.getHitRect(outRect);\n            if (outRect.contains(x, y)) {\n                return v;\n            }\n        }\n        return null;\n    }\n\n    @Override\n    public void onChanged() {\n        mSelectedView.clear();\n        changeAdapter();\n    }\n\n    public static int dip2px(Context context, float dpValue) {\n        final float scale = context.getResources().getDisplayMetrics().density;\n        return (int) (dpValue * scale + 0.5f);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/flowlayout/TagView.java",
    "content": "package com.yoyiyi.soleil.widget.flowlayout;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.Checkable;\nimport android.widget.FrameLayout;\n\n/**\n * Created by zhy on 15/9/10.\n */\npublic class TagView extends FrameLayout implements Checkable {\n    private boolean isChecked;\n    private static final int[] CHECK_STATE = new int[]{android.R.attr.state_checked};\n\n    public TagView(Context context) {\n        super(context);\n    }\n\n    public View getTagView() {\n        return getChildAt(0);\n    }\n\n    @Override\n    public int[] onCreateDrawableState(int extraSpace) {\n        int[] states = super.onCreateDrawableState(extraSpace + 1);\n        if (isChecked()) {\n            mergeDrawableStates(states, CHECK_STATE);\n        }\n        return states;\n    }\n\n\n    /**\n     * Change the checked state of the view\n     *\n     * @param checked The new checked state\n     */\n    @Override\n    public void setChecked(boolean checked) {\n        if (this.isChecked != checked) {\n            this.isChecked = checked;\n            refreshDrawableState();\n        }\n    }\n\n    /**\n     * @return The current checked state of the view\n     */\n    @Override\n    public boolean isChecked() {\n        return isChecked;\n    }\n\n    /**\n     * Change the checked state of the view to the inverse of its current state\n     */\n    @Override\n    public void toggle() {\n        setChecked(!isChecked);\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/progress/NumberProgressBar.java",
    "content": "package com.yoyiyi.soleil.widget.progress;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.RectF;\nimport android.os.Bundle;\nimport android.os.Parcelable;\nimport android.util.AttributeSet;\nimport android.view.View;\n\nimport com.yoyiyi.soleil.R;\n\n/**\n * Created by daimajia on 14-4-30.\n */\npublic class NumberProgressBar extends View {\n\n    private int mMaxProgress = 100;\n\n    /**\n     * Current progress, can not exceed the max progress.\n     */\n    private int mCurrentProgress = 0;\n\n    /**\n     * The progress area bar color.\n     */\n    private int mReachedBarColor;\n\n    /**\n     * The bar unreached area color.\n     */\n    private int mUnreachedBarColor;\n\n    /**\n     * The progress text color.\n     */\n    private int mTextColor;\n\n    /**\n     * The progress text size.\n     */\n    private float mTextSize;\n\n    /**\n     * The height of the reached area.\n     */\n    private float mReachedBarHeight;\n\n    /**\n     * The height of the unreached area.\n     */\n    private float mUnreachedBarHeight;\n\n    /**\n     * The suffix of the number.\n     */\n    private String mSuffix = \"%\";\n\n    /**\n     * The prefix.\n     */\n    private String mPrefix = \"\";\n\n\n    private final int default_text_color = Color.rgb(66, 145, 241);\n    private final int default_reached_color = Color.rgb(66, 145, 241);\n    private final int default_unreached_color = Color.rgb(204, 204, 204);\n    private final float default_progress_text_offset;\n    private final float default_text_size;\n    private final float default_reached_bar_height;\n    private final float default_unreached_bar_height;\n\n    /**\n     * For save and restore instance of progressbar.\n     */\n    private static final String INSTANCE_STATE = \"saved_instance\";\n    private static final String INSTANCE_TEXT_COLOR = \"text_color\";\n    private static final String INSTANCE_TEXT_SIZE = \"text_size\";\n    private static final String INSTANCE_REACHED_BAR_HEIGHT = \"reached_bar_height\";\n    private static final String INSTANCE_REACHED_BAR_COLOR = \"reached_bar_color\";\n    private static final String INSTANCE_UNREACHED_BAR_HEIGHT = \"unreached_bar_height\";\n    private static final String INSTANCE_UNREACHED_BAR_COLOR = \"unreached_bar_color\";\n    private static final String INSTANCE_MAX = \"max\";\n    private static final String INSTANCE_PROGRESS = \"progress\";\n    private static final String INSTANCE_SUFFIX = \"suffix\";\n    private static final String INSTANCE_PREFIX = \"prefix\";\n    private static final String INSTANCE_TEXT_VISIBILITY = \"text_visibility\";\n\n    private static final int PROGRESS_TEXT_VISIBLE = 0;\n\n\n    /**\n     * The width of the text that to be drawn.\n     */\n    private float mDrawTextWidth;\n\n    /**\n     * The drawn text start.\n     */\n    private float mDrawTextStart;\n\n    /**\n     * The drawn text end.\n     */\n    private float mDrawTextEnd;\n\n    /**\n     * The text that to be drawn in onDraw().\n     */\n    private String mCurrentDrawText;\n\n    /**\n     * The Paint of the reached area.\n     */\n    private Paint mReachedBarPaint;\n    /**\n     * The Paint of the unreached area.\n     */\n    private Paint mUnreachedBarPaint;\n    /**\n     * The Paint of the progress text.\n     */\n    private Paint mTextPaint;\n\n    /**\n     * Unreached bar area to draw rect.\n     */\n    private RectF mUnreachedRectF = new RectF(0, 0, 0, 0);\n    /**\n     * Reached bar area rect.\n     */\n    private RectF mReachedRectF = new RectF(0, 0, 0, 0);\n\n    /**\n     * The progress text offset.\n     */\n    private float mOffset;\n\n    /**\n     * Determine if need to draw unreached area.\n     */\n    private boolean mDrawUnreachedBar = true;\n\n    private boolean mDrawReachedBar = true;\n\n    private boolean mIfDrawText = true;\n\n    /**\n     * Listener\n     */\n    private OnProgressBarListener mListener;\n\n    public enum ProgressTextVisibility {\n        Visible, Invisible\n    }\n\n    public NumberProgressBar(Context context) {\n        this(context, null);\n    }\n\n    public NumberProgressBar(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public NumberProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n\n        default_reached_bar_height = dp2px(1.5f);\n        default_unreached_bar_height = dp2px(1.0f);\n        default_text_size = sp2px(10);\n        default_progress_text_offset = dp2px(3.0f);\n\n        //load styled attributes.\n        final TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.NumberProgressBar,\n                defStyleAttr, 0);\n\n        mReachedBarColor = attributes.getColor(R.styleable.NumberProgressBar_progress_reached_color, default_reached_color);\n        mUnreachedBarColor = attributes.getColor(R.styleable.NumberProgressBar_progress_unreached_color, default_unreached_color);\n        mTextColor = attributes.getColor(R.styleable.NumberProgressBar_progress_text_color, default_text_color);\n        mTextSize = attributes.getDimension(R.styleable.NumberProgressBar_progress_text_size, default_text_size);\n\n        mReachedBarHeight = attributes.getDimension(R.styleable.NumberProgressBar_progress_reached_bar_height, default_reached_bar_height);\n        mUnreachedBarHeight = attributes.getDimension(R.styleable.NumberProgressBar_progress_unreached_bar_height, default_unreached_bar_height);\n        mOffset = attributes.getDimension(R.styleable.NumberProgressBar_progress_text_offset, default_progress_text_offset);\n\n        int textVisible = attributes.getInt(R.styleable.NumberProgressBar_progress_text_visibility, PROGRESS_TEXT_VISIBLE);\n        if (textVisible != PROGRESS_TEXT_VISIBLE) {\n            mIfDrawText = false;\n        }\n\n        setProgress(attributes.getInt(R.styleable.NumberProgressBar_progress_current, 0));\n        setMax(attributes.getInt(R.styleable.NumberProgressBar_progress_max, 100));\n\n        attributes.recycle();\n        initializePainters();\n    }\n\n    @Override\n    protected int getSuggestedMinimumWidth() {\n        return (int) mTextSize;\n    }\n\n    @Override\n    protected int getSuggestedMinimumHeight() {\n        return Math.max((int) mTextSize, Math.max((int) mReachedBarHeight, (int) mUnreachedBarHeight));\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        setMeasuredDimension(measure(widthMeasureSpec, true), measure(heightMeasureSpec, false));\n    }\n\n    private int measure(int measureSpec, boolean isWidth) {\n        int result;\n        int mode = MeasureSpec.getMode(measureSpec);\n        int size = MeasureSpec.getSize(measureSpec);\n        int padding = isWidth ? getPaddingLeft() + getPaddingRight() : getPaddingTop() + getPaddingBottom();\n        if (mode == MeasureSpec.EXACTLY) {\n            result = size;\n        } else {\n            result = isWidth ? getSuggestedMinimumWidth() : getSuggestedMinimumHeight();\n            result += padding;\n            if (mode == MeasureSpec.AT_MOST) {\n                if (isWidth) {\n                    result = Math.max(result, size);\n                } else {\n                    result = Math.min(result, size);\n                }\n            }\n        }\n        return result;\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        if (mIfDrawText) {\n            calculateDrawRectF();\n        } else {\n            calculateDrawRectFWithoutProgressText();\n        }\n\n        if (mDrawReachedBar) {\n            canvas.drawRect(mReachedRectF, mReachedBarPaint);\n        }\n\n        if (mDrawUnreachedBar) {\n            canvas.drawRect(mUnreachedRectF, mUnreachedBarPaint);\n        }\n\n        if (mIfDrawText)\n            canvas.drawText(mCurrentDrawText, mDrawTextStart, mDrawTextEnd, mTextPaint);\n    }\n\n    private void initializePainters() {\n        mReachedBarPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mReachedBarPaint.setColor(mReachedBarColor);\n\n        mUnreachedBarPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mUnreachedBarPaint.setColor(mUnreachedBarColor);\n\n        mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mTextPaint.setColor(mTextColor);\n        mTextPaint.setTextSize(mTextSize);\n    }\n\n\n    private void calculateDrawRectFWithoutProgressText() {\n        mReachedRectF.left = getPaddingLeft();\n        mReachedRectF.top = getHeight() / 2.0f - mReachedBarHeight / 2.0f;\n        mReachedRectF.right = (getWidth() - getPaddingLeft() - getPaddingRight()) / (getMax() * 1.0f) * getProgress() + getPaddingLeft();\n        mReachedRectF.bottom = getHeight() / 2.0f + mReachedBarHeight / 2.0f;\n\n        mUnreachedRectF.left = mReachedRectF.right;\n        mUnreachedRectF.right = getWidth() - getPaddingRight();\n        mUnreachedRectF.top = getHeight() / 2.0f + -mUnreachedBarHeight / 2.0f;\n        mUnreachedRectF.bottom = getHeight() / 2.0f + mUnreachedBarHeight / 2.0f;\n    }\n\n    private void calculateDrawRectF() {\n\n        mCurrentDrawText = String.format(\"%d\", getProgress() * 100 / getMax());\n        mCurrentDrawText = mPrefix + mCurrentDrawText + mSuffix;\n        mDrawTextWidth = mTextPaint.measureText(mCurrentDrawText);\n\n        if (getProgress() == 0) {\n            mDrawReachedBar = false;\n            mDrawTextStart = getPaddingLeft();\n        } else {\n            mDrawReachedBar = true;\n            mReachedRectF.left = getPaddingLeft();\n            mReachedRectF.top = getHeight() / 2.0f - mReachedBarHeight / 2.0f;\n            mReachedRectF.right = (getWidth() - getPaddingLeft() - getPaddingRight()) / (getMax() * 1.0f) * getProgress() - mOffset + getPaddingLeft();\n            mReachedRectF.bottom = getHeight() / 2.0f + mReachedBarHeight / 2.0f;\n            mDrawTextStart = (mReachedRectF.right + mOffset);\n        }\n\n        mDrawTextEnd = (int) ((getHeight() / 2.0f) - ((mTextPaint.descent() + mTextPaint.ascent()) / 2.0f));\n\n        if ((mDrawTextStart + mDrawTextWidth) >= getWidth() - getPaddingRight()) {\n            mDrawTextStart = getWidth() - getPaddingRight() - mDrawTextWidth;\n            mReachedRectF.right = mDrawTextStart - mOffset;\n        }\n\n        float unreachedBarStart = mDrawTextStart + mDrawTextWidth + mOffset;\n        if (unreachedBarStart >= getWidth() - getPaddingRight()) {\n            mDrawUnreachedBar = false;\n        } else {\n            mDrawUnreachedBar = true;\n            mUnreachedRectF.left = unreachedBarStart;\n            mUnreachedRectF.right = getWidth() - getPaddingRight();\n            mUnreachedRectF.top = getHeight() / 2.0f + -mUnreachedBarHeight / 2.0f;\n            mUnreachedRectF.bottom = getHeight() / 2.0f + mUnreachedBarHeight / 2.0f;\n        }\n    }\n\n    /**\n     * Get progress text color.\n     *\n     * @return progress text color.\n     */\n    public int getTextColor() {\n        return mTextColor;\n    }\n\n    /**\n     * Get progress text size.\n     *\n     * @return progress text size.\n     */\n    public float getProgressTextSize() {\n        return mTextSize;\n    }\n\n    public int getUnreachedBarColor() {\n        return mUnreachedBarColor;\n    }\n\n    public int getReachedBarColor() {\n        return mReachedBarColor;\n    }\n\n    public int getProgress() {\n        return mCurrentProgress;\n    }\n\n    public int getMax() {\n        return mMaxProgress;\n    }\n\n    public float getReachedBarHeight() {\n        return mReachedBarHeight;\n    }\n\n    public float getUnreachedBarHeight() {\n        return mUnreachedBarHeight;\n    }\n\n    public void setProgressTextSize(float textSize) {\n        this.mTextSize = textSize;\n        mTextPaint.setTextSize(mTextSize);\n        invalidate();\n    }\n\n    public void setProgressTextColor(int textColor) {\n        this.mTextColor = textColor;\n        mTextPaint.setColor(mTextColor);\n        invalidate();\n    }\n\n    public void setUnreachedBarColor(int barColor) {\n        this.mUnreachedBarColor = barColor;\n        mUnreachedBarPaint.setColor(mUnreachedBarColor);\n        invalidate();\n    }\n\n    public void setReachedBarColor(int progressColor) {\n        this.mReachedBarColor = progressColor;\n        mReachedBarPaint.setColor(mReachedBarColor);\n        invalidate();\n    }\n\n    public void setReachedBarHeight(float height) {\n        mReachedBarHeight = height;\n    }\n\n    public void setUnreachedBarHeight(float height) {\n        mUnreachedBarHeight = height;\n    }\n\n    public void setMax(int maxProgress) {\n        if (maxProgress > 0) {\n            this.mMaxProgress = maxProgress;\n            invalidate();\n        }\n    }\n\n    public void setSuffix(String suffix) {\n        if (suffix == null) {\n            mSuffix = \"\";\n        } else {\n            mSuffix = suffix;\n        }\n    }\n\n    public String getSuffix() {\n        return mSuffix;\n    }\n\n    public void setPrefix(String prefix) {\n        if (prefix == null)\n            mPrefix = \"\";\n        else {\n            mPrefix = prefix;\n        }\n    }\n\n    public String getPrefix() {\n        return mPrefix;\n    }\n\n    public void incrementProgressBy(int by) {\n        if (by > 0) {\n            setProgress(getProgress() + by);\n        }\n\n        if(mListener != null){\n            mListener.onProgressChange(getProgress(), getMax());\n        }\n    }\n\n    public void setProgress(int progress) {\n        if (progress <= getMax() && progress >= 0) {\n            this.mCurrentProgress = progress;\n            invalidate();\n        }\n    }\n\n    @Override\n    protected Parcelable onSaveInstanceState() {\n        final Bundle bundle = new Bundle();\n        bundle.putParcelable(INSTANCE_STATE, super.onSaveInstanceState());\n        bundle.putInt(INSTANCE_TEXT_COLOR, getTextColor());\n        bundle.putFloat(INSTANCE_TEXT_SIZE, getProgressTextSize());\n        bundle.putFloat(INSTANCE_REACHED_BAR_HEIGHT, getReachedBarHeight());\n        bundle.putFloat(INSTANCE_UNREACHED_BAR_HEIGHT, getUnreachedBarHeight());\n        bundle.putInt(INSTANCE_REACHED_BAR_COLOR, getReachedBarColor());\n        bundle.putInt(INSTANCE_UNREACHED_BAR_COLOR, getUnreachedBarColor());\n        bundle.putInt(INSTANCE_MAX, getMax());\n        bundle.putInt(INSTANCE_PROGRESS, getProgress());\n        bundle.putString(INSTANCE_SUFFIX, getSuffix());\n        bundle.putString(INSTANCE_PREFIX, getPrefix());\n        bundle.putBoolean(INSTANCE_TEXT_VISIBILITY, getProgressTextVisibility());\n        return bundle;\n    }\n\n    @Override\n    protected void onRestoreInstanceState(Parcelable state) {\n        if (state instanceof Bundle) {\n            final Bundle bundle = (Bundle) state;\n            mTextColor = bundle.getInt(INSTANCE_TEXT_COLOR);\n            mTextSize = bundle.getFloat(INSTANCE_TEXT_SIZE);\n            mReachedBarHeight = bundle.getFloat(INSTANCE_REACHED_BAR_HEIGHT);\n            mUnreachedBarHeight = bundle.getFloat(INSTANCE_UNREACHED_BAR_HEIGHT);\n            mReachedBarColor = bundle.getInt(INSTANCE_REACHED_BAR_COLOR);\n            mUnreachedBarColor = bundle.getInt(INSTANCE_UNREACHED_BAR_COLOR);\n            initializePainters();\n            setMax(bundle.getInt(INSTANCE_MAX));\n            setProgress(bundle.getInt(INSTANCE_PROGRESS));\n            setPrefix(bundle.getString(INSTANCE_PREFIX));\n            setSuffix(bundle.getString(INSTANCE_SUFFIX));\n            setProgressTextVisibility(bundle.getBoolean(INSTANCE_TEXT_VISIBILITY) ? ProgressTextVisibility.Visible : ProgressTextVisibility.Invisible);\n            super.onRestoreInstanceState(bundle.getParcelable(INSTANCE_STATE));\n            return;\n        }\n        super.onRestoreInstanceState(state);\n    }\n\n    public float dp2px(float dp) {\n        final float scale = getResources().getDisplayMetrics().density;\n        return dp * scale + 0.5f;\n    }\n\n    public float sp2px(float sp) {\n        final float scale = getResources().getDisplayMetrics().scaledDensity;\n        return sp * scale;\n    }\n\n    public void setProgressTextVisibility(ProgressTextVisibility visibility) {\n        mIfDrawText = visibility == ProgressTextVisibility.Visible;\n        invalidate();\n    }\n\n    public boolean getProgressTextVisibility() {\n        return mIfDrawText;\n    }\n\n    public void setOnProgressBarListener(OnProgressBarListener listener){\n        mListener = listener;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/progress/OnProgressBarListener.java",
    "content": "package com.yoyiyi.soleil.widget.progress;\n\n/**\n * Created by lelexxx on 15-4-23.\n */\npublic interface OnProgressBarListener {\n\n    void onProgressChange(int current, int max);\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/section/HeadOrFooterSection.java",
    "content": "package com.yoyiyi.soleil.widget.section;\n\nimport com.yoyiyi.soleil.R;\n\n/**\n * @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n * @date 创建时间：2017/6/8 18:00\n * 描述:增加头部或者尾部\n */\n\npublic class HeadOrFooterSection extends StatelessSection {\n\n    public ViewHolder holder;\n\n    public HeadOrFooterSection(int headerResourceId) {\n        super(headerResourceId, R.layout.layout_empty);\n    }\n\n    @Override\n    public void onBindHeaderViewHolder(ViewHolder holder) {\n        this.holder = holder;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/section/Section.java",
    "content": "package com.yoyiyi.soleil.widget.section;\n\nimport android.content.Context;\nimport android.support.annotation.Nullable;\nimport android.view.View;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Abstract Section used by SectionedRVAdapter.\n * 修改过 @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @author Gustavo Pagani\n */\npublic abstract class Section<T> {\n\n    public Context mContext;\n\n    public enum State {LOADING, LOADED, FAILED}\n\n    private State state = State.LOADED;\n\n    boolean visible = true;\n\n    boolean hasHeader = false;\n    boolean hasFooter = false;\n\n    Integer headerResourceId;\n    Integer footerResourceId;\n\n    int itemResourceId;\n\n    private Integer loadingResourceId;\n    private Integer failedResourceId;\n\n    private List<T> mList;\n\n\n    /**\n     * 默认构造方法\n     */\n    Section() {\n\n    }\n\n    /**\n     * 设置List\n     *\n     * @param data data\n     */\n    Section(@Nullable List<T> data) {\n        this.mList = (List) (data == null ? new ArrayList() : data);\n    }\n\n    public int getListSize() {\n        return mList.size();\n    }\n\n    /**\n     * 设置Context\n     *\n     * @param context\n     */\n    public void setContext(Context context) {\n        this.mContext = context;\n    }\n\n\n    /**\n     * Create a Section object with loading/failed states but no header and footer\n     *\n     * @param itemResourceId    layout resource for its items\n     * @param loadingResourceId layout resource for its loading state\n     * @param failedResourceId  layout resource for its failed state\n     */\n    public Section(int itemResourceId, int loadingResourceId, int failedResourceId) {\n        this.itemResourceId = itemResourceId;\n        this.loadingResourceId = loadingResourceId;\n        this.failedResourceId = failedResourceId;\n    }\n\n    /**\n     * Create a Section object with loading/failed states, a custom header but no footer\n     *\n     * @param headerResourceId  layout resource for its header\n     * @param itemResourceId    layout resource for its items\n     * @param loadingResourceId layout resource for its loading state\n     * @param failedResourceId  layout resource for its failed state\n     */\n    public Section(int headerResourceId, int itemResourceId, int loadingResourceId, int failedResourceId) {\n        this(itemResourceId, loadingResourceId, failedResourceId);\n        this.headerResourceId = headerResourceId;\n        hasHeader = true;\n    }\n\n    /**\n     * Create a Section object with loading/failed states, a custom header and footer\n     *\n     * @param headerResourceId  layout resource for its header\n     * @param footerResourceId  layout resource for its footer\n     * @param itemResourceId    layout resource for its items\n     * @param loadingResourceId layout resource for its loading state\n     * @param failedResourceId  layout resource for its failed state\n     */\n    public Section(int headerResourceId, int footerResourceId, int itemResourceId, int loadingResourceId, int failedResourceId) {\n        this(headerResourceId, itemResourceId, loadingResourceId, failedResourceId);\n        this.footerResourceId = footerResourceId;\n        hasFooter = true;\n    }\n\n    /**\n     * Set the State of this Section\n     *\n     * @param state state of this section\n     */\n    public final void setState(State state) {\n        this.state = state;\n    }\n\n    /**\n     * Return the current State of this Section\n     *\n     * @return current state of this section\n     */\n    public final State getState() {\n        return state;\n    }\n\n    /**\n     * Check if this Section is visible\n     *\n     * @return true if this Section is vibisle\n     */\n    public final boolean isVisible() {\n        return visible;\n    }\n\n    /**\n     * Set if this Section is visible\n     *\n     * @param visible true if this Section is visible\n     */\n    public final void setVisible(boolean visible) {\n        this.visible = visible;\n    }\n\n    /**\n     * Check if this Section has a header\n     *\n     * @return true if this Section has a header\n     */\n    public final boolean hasHeader() {\n        return hasHeader;\n    }\n\n    /**\n     * Set if this Section has header\n     *\n     * @param hasHeader true if this Section has a header\n     */\n    public final void setHasHeader(boolean hasHeader) {\n        this.hasHeader = hasHeader;\n    }\n\n    /**\n     * Check if this Section has a footer\n     *\n     * @return true if this Section has a footer\n     */\n    public final boolean hasFooter() {\n        return hasFooter;\n    }\n\n    /**\n     * Set if this Section has footer\n     *\n     * @param hasFooter true if this Section has a footer\n     */\n    public final void setHasFooter(boolean hasFooter) {\n        this.hasFooter = hasFooter;\n    }\n\n    /**\n     * Return the layout resource id of the header\n     *\n     * @return layout resource id of the header\n     */\n    public final Integer getHeaderResourceId() {\n        return headerResourceId;\n    }\n\n    /**\n     * Return the layout resource id of the footer\n     *\n     * @return layout resource id of the footer\n     */\n    public final Integer getFooterResourceId() {\n        return footerResourceId;\n    }\n\n    /**\n     * Return the layout resource id of the item\n     *\n     * @return layout resource id of the item\n     */\n    public final int getItemResourceId() {\n        return itemResourceId;\n    }\n\n    /**\n     * Return the layout resource id of the loading view\n     *\n     * @return layout resource id of the loading view\n     */\n    public final Integer getLoadingResourceId() {\n        return loadingResourceId;\n    }\n\n    /**\n     * Return the layout resource id of the failed view\n     *\n     * @return layout resource id of the failed view\n     */\n    public final Integer getFailedResourceId() {\n        return failedResourceId;\n    }\n\n    /**\n     * Bind the data to the ViewHolder for the Content of this Section, that can be the Items,\n     * Loading view or Failed view, depending on the current state of the section\n     *\n     * @param holder   ViewHolder for the Content of this Section\n     * @param position position of the item in the Section, not in the RecyclerView\n     */\n    public final void onBindContentViewHolder(ViewHolder holder, int position) {\n        switch (state) {\n            case LOADING:\n                onBindLoadingViewHolder(holder);\n                break;\n            case LOADED:\n                if (mList != null) {\n                    convert(holder, mList.get(position), position);\n                } else {\n                    onBindItemViewHolder(holder, position);\n                }\n                break;\n            case FAILED:\n                onBindFailedViewHolder(holder);\n                break;\n            default:\n                throw new IllegalStateException(\"Invalid state\");\n        }\n    }\n\n    /**\n     * Return the total of items of this Section, including content items (according to the section\n     * state) plus header and footer\n     *\n     * @return total of items of this section\n     */\n    public final int getSectionItemsTotal() {\n        int contentItemsTotal;\n\n        switch (state) {\n            case LOADING:\n                contentItemsTotal = 1;\n                break;\n            case LOADED:\n                contentItemsTotal = getContentItemsTotal();\n                break;\n            case FAILED:\n                contentItemsTotal = 1;\n                break;\n            default:\n                throw new IllegalStateException(\"Invalid state\");\n        }\n\n        return contentItemsTotal + (hasHeader ? 1 : 0) + (hasFooter ? 1 : 0);\n    }\n\n    /**\n     * Return the total of items of this Section\n     *\n     * @return total of items of this Section\n     */\n    public int getContentItemsTotal() {\n        if (mList != null)\n            return mList.size();\n        else return 1;\n    }\n\n    /**\n     * Return the ViewHolder for the Header of this Section\n     *\n     * @param view View inflated by resource returned by getHeaderResourceId\n     * @return ViewHolder for the Header of this Section\n     */\n    public ViewHolder getHeaderViewHolder(View view) {\n        //   return new SectionedRVAdapter.EmptyViewHolder(view);\n        return new ViewHolder(view);\n    }\n\n    /**\n     * Bind the data to the ViewHolder for the Header of this Section\n     *\n     * @param holder ViewHolder for the Header of this Section\n     */\n    public void onBindHeaderViewHolder(ViewHolder holder) {\n        // Nothing to bind here.\n    }\n\n    /**\n     * Return the ViewHolder for the Footer of this Section\n     *\n     * @param view View inflated by resource returned by getFooterResourceId\n     * @return ViewHolder for the Footer of this Section\n     */\n    public ViewHolder getFooterViewHolder(View view) {\n        // return new SectionedRVAdapter.EmptyViewHolder(view);\n        return new ViewHolder(view);\n    }\n\n    /**\n     * Bind the data to the ViewHolder for the Footer of this Section\n     *\n     * @param holder ViewHolder for the Footer of this Section\n     */\n    public void onBindFooterViewHolder(ViewHolder holder) {\n        // Nothing to bind here.\n    }\n\n    /**\n     * Return the ViewHolder for a single Item of this Section\n     *\n     * @param view View inflated by resource returned by getItemResourceId\n     * @return ViewHolder for the Item of this Section\n     */\n    public ViewHolder getItemViewHolder(View view) {\n        return new ViewHolder(view);\n    }\n\n    public void onBindItemViewHolder(ViewHolder holder, int position) {\n\n    }\n\n    /**\n     * 分割\n     *\n     * @param holder\n     * @param t\n     * @param position\n     */\n    public void convert(ViewHolder holder, T t, int position) {\n\n    }\n\n    /**\n     * Return the ViewHolder for the Loading state of this Section\n     *\n     * @param view View inflated by resource returned by getItemResourceId\n     * @return ViewHolder for the Loading state of this Section\n     */\n    public ViewHolder getLoadingViewHolder(View view) {\n        // return new SectionedRVAdapter.EmptyViewHolder(view);\n        return new ViewHolder(view);\n    }\n\n    /**\n     * Bind the data to the ViewHolder for Loading state of this Section\n     *\n     * @param holder ViewHolder for the Loading state of this Section\n     */\n    public void onBindLoadingViewHolder(ViewHolder holder) {\n        // Nothing to bind here.\n    }\n\n    /**\n     * Return the ViewHolder for the Failed state of this Section\n     *\n     * @param view View inflated by resource returned by getItemResourceId\n     * @return ViewHolder for the Failed of this Section\n     */\n    public ViewHolder getFailedViewHolder(View view) {\n        //return new SectionedRVAdapter.EmptyViewHolder(view);\n        return new ViewHolder(view);\n    }\n\n    /**\n     * Bind the data to the ViewHolder for the Failed state of this Section\n     *\n     * @param holder ViewHolder for the Failed state of this Section\n     */\n    public void onBindFailedViewHolder(ViewHolder holder) {\n        // Nothing to bind here.\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/section/SectionedRVAdapter.java",
    "content": "package com.yoyiyi.soleil.widget.section;\n\nimport android.content.Context;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.VisibleForTesting;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport java.util.HashMap;\nimport java.util.LinkedHashMap;\nimport java.util.Map;\nimport java.util.UUID;\n\n/**\n * A custom RecyclerView with Sections with custom Titles.\n * Sections are displayed in the same order they were added.\n * 修改 @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @author Gustavo Pagani\n */\npublic class SectionedRVAdapter extends RecyclerView.Adapter<ViewHolder> {\n\n    public final static int VIEW_TYPE_HEADER = 0;\n    public final static int VIEW_TYPE_FOOTER = 1;\n    public final static int VIEW_TYPE_ITEM_LOADED = 2;\n    public final static int VIEW_TYPE_LOADING = 3;\n    public final static int VIEW_TYPE_FAILED = 4;\n\n    private LinkedHashMap<String, Section> sections;\n    private HashMap<String, Integer> sectionViewTypeNumbers;\n    private int viewTypeCount = 0;\n    private final static int VIEW_TYPE_QTY = 5;\n    private Context mContext;\n\n    public SectionedRVAdapter() {\n        sections = new LinkedHashMap<>();\n        sectionViewTypeNumbers = new HashMap<>();\n    }\n\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        ViewHolder viewHolder = null;\n        mContext = parent.getContext();\n        for (Map.Entry<String, Integer> entry : sectionViewTypeNumbers.entrySet()) {\n            if (viewType >= entry.getValue() && viewType < entry.getValue() + VIEW_TYPE_QTY) {\n                Section section = sections.get(entry.getKey());\n                //设置section 的 context\n                section.mContext = mContext;\n                int sectionViewType = viewType - entry.getValue();\n                switch (sectionViewType) {\n                    case VIEW_TYPE_HEADER: {\n                        viewHolder = getHeaderViewHolder(parent, section);\n                        break;\n                    }\n                    case VIEW_TYPE_FOOTER: {\n                        viewHolder = getFooterViewHolder(parent, section);\n                        break;\n                    }\n                    case VIEW_TYPE_ITEM_LOADED: {\n                        viewHolder = getItemViewHolder(parent, section);\n                        break;\n                    }\n                    case VIEW_TYPE_LOADING: {\n                        viewHolder = getLoadingViewHolder(parent, section);\n                        break;\n                    }\n                    case VIEW_TYPE_FAILED: {\n                        viewHolder = getFailedViewHolder(parent, section);\n                        break;\n                    }\n                    default:\n                        throw new IllegalArgumentException(\"Invalid viewType\");\n                }\n            }\n        }\n\n        return viewHolder;\n    }\n\n    private ViewHolder getItemViewHolder(ViewGroup parent, Section section) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(section.getItemResourceId(),\n                parent, false);\n        // get the item viewholder from the section\n        return section.getItemViewHolder(view);\n    }\n\n\n    private ViewHolder getHeaderViewHolder(ViewGroup parent, Section section) {\n        Integer resId = section.getHeaderResourceId();\n\n        if (resId == null)\n            throw new NullPointerException(\"Missing 'header' resource id\");\n\n        View view = LayoutInflater.from(parent.getContext()).inflate(resId, parent, false);\n\n        // get the header viewholder from the section\n        return section.getHeaderViewHolder(view);\n    }\n\n\n    private ViewHolder getFooterViewHolder(ViewGroup parent, Section section) {\n        Integer resId = section.getFooterResourceId();\n\n        if (resId == null)\n            throw new NullPointerException(\"Missing 'footer' resource id\");\n\n        View view = LayoutInflater.from(parent.getContext()).inflate(resId, parent, false);\n        // get the footer viewholder from the section\n        return section.getFooterViewHolder(view);\n    }\n\n    private ViewHolder getLoadingViewHolder(ViewGroup parent, Section section) {\n        Integer resId = section.getLoadingResourceId();\n\n        if (resId == null) throw new NullPointerException(\"Missing 'loading state' resource id\");\n\n        View view = LayoutInflater.from(parent.getContext()).inflate(resId, parent, false);\n        // get the loading viewholder from the section\n        return section.getLoadingViewHolder(view);\n    }\n\n    private ViewHolder getFailedViewHolder(ViewGroup parent, Section section) {\n        Integer resId = section.getFailedResourceId();\n\n        if (resId == null) throw new NullPointerException(\"Missing 'failed state' resource id\");\n\n        View view = LayoutInflater.from(parent.getContext()).inflate(resId, parent, false);\n        // get the failed load viewholder from the section\n        return section.getFailedViewHolder(view);\n    }\n\n    /**\n     * Add a section to this recyclerview.\n     *\n     * @param tag     unique identifier of the section\n     * @param section section to be added\n     */\n    public void addSection(String tag, Section section) {\n        this.sections.put(tag, section);\n        this.sectionViewTypeNumbers.put(tag, viewTypeCount);\n        viewTypeCount += VIEW_TYPE_QTY;\n    }\n\n    /**\n     * Add a section to this recyclerview with a random tag;\n     *\n     * @param section section to be added\n     * @return generated tag\n     */\n    public String addSection(Section section) {\n        String tag = UUID.randomUUID().toString();\n\n        addSection(tag, section);\n\n        return tag;\n    }\n\n    /**\n     * Return the section with the tag provided.\n     *\n     * @param tag unique identifier of the section\n     * @return section\n     */\n    public Section getSection(String tag) {\n        return this.sections.get(tag);\n    }\n\n    /**\n     * Remove section from this recyclerview.\n     *\n     * @param tag unique identifier of the section\n     */\n    public void removeSection(String tag) {\n        this.sections.remove(tag);\n    }\n\n    /**\n     * Remove all sections from this recyclerview.\n     */\n    public void removeAllSections() {\n        this.sections.clear();\n    }\n\n    @Override\n    public void onBindViewHolder(ViewHolder holder, int position) {\n\n        int currentPos = 0;\n\n        for (Map.Entry<String, Section> entry : sections.entrySet()) {\n            Section section = entry.getValue();\n\n            // ignore invisible sections\n            if (!section.isVisible()) continue;\n\n            int sectionTotal = section.getSectionItemsTotal();\n\n            // check if position is in this section\n            if (position >= currentPos && position <= (currentPos + sectionTotal - 1)) {\n\n                if (section.hasHeader()) {\n                    if (position == currentPos) {\n                        // delegate the binding to the section header\n                        getSectionForPosition(position).onBindHeaderViewHolder(holder);\n                        return;\n                    }\n                }\n\n                if (section.hasFooter()) {\n                    if (position == (currentPos + sectionTotal - 1)) {\n                        // delegate the binding to the section header\n                        getSectionForPosition(position).onBindFooterViewHolder(holder);\n                        return;\n                    }\n                }\n\n                // delegate the binding to the section content\n                getSectionForPosition(position).onBindContentViewHolder(holder,\n                        getPositionInSection(position));\n                return;\n            }\n\n            currentPos += sectionTotal;\n        }\n\n        throw new IndexOutOfBoundsException(\"Invalid position\");\n    }\n\n    @Override\n    public int getItemCount() {\n        int count = 0;\n\n        for (Map.Entry<String, Section> entry : sections.entrySet()) {\n            Section section = entry.getValue();\n\n            // ignore invisible sections\n            if (!section.isVisible()) continue;\n\n            count += section.getSectionItemsTotal();\n        }\n\n        return count;\n    }\n\n    @Override\n    public int getItemViewType(int position) {\n        /*\n         Each Section has 5 \"viewtypes\":\n         1) header\n         2) footer\n         3) items\n         4) loading\n         5) load failed\n         */\n        try {\n\n\n        } catch (Exception e) {\n\n\n        }\n        int currentPos = 0;\n        for (Map.Entry<String, Section> entry : sections.entrySet()) {\n            Section section = entry.getValue();\n\n            // ignore invisible sections\n            if (!section.isVisible()) continue;\n\n            int sectionTotal = section.getSectionItemsTotal();\n\n            // check if position is in this section\n            if (position >= currentPos && position <= (currentPos + sectionTotal - 1)) {\n\n                int viewType = sectionViewTypeNumbers.get(entry.getKey());\n\n                if (section.hasHeader()) {\n                    if (position == currentPos) {\n                        return viewType;\n                    }\n                }\n\n                if (section.hasFooter()) {\n                    if (position == (currentPos + sectionTotal - 1)) {\n                        return viewType + 1;\n                    }\n                }\n\n                switch (section.getState()) {\n                    case LOADED:\n                        return viewType + 2;\n                    case LOADING:\n                        return viewType + 3;\n                    case FAILED:\n                        return viewType + 4;\n                    default:\n                        throw new IllegalStateException(\"Invalid state\");\n                }\n\n            }\n\n            currentPos += sectionTotal;\n        }\n        throw new IndexOutOfBoundsException(\"Invalid position\");\n    }\n\n    /**\n     * Returns the Section ViewType of an item based on the position in the adapter:\n     * <p>\n     * - SectionedRVAdapter.VIEW_TYPE_HEADER\n     * - SectionedRVAdapter.VIEW_TYPE_FOOTER\n     * - SectionedRVAdapter.VIEW_TYPE_ITEM_LOAViewHolderDED\n     * - SectionedRVAdapter.VIEW_TYPE_LOADING\n     * - SectionedRVAdapter.VIEW_TYPE_FAILED\n     *\n     * @param position position in the adapter\n     * @return SectionedRVAdapter.VIEW_TYPE_HEADER, VIEW_TYPE_FOOTER,\n     * VIEW_TYPE_ITEM_LOADED, VIEW_TYPE_LOADING or VIEW_TYPE_FAILED\n     */\n    public int getSectionItemViewType(int position) {\n        int viewType = getItemViewType(position);\n\n        return viewType % VIEW_TYPE_QTY;\n    }\n\n    /**\n     * Returns the Section object for a position in the adapter.\n     *\n     * @param position position in the adapter\n     * @return Section object for that position\n     */\n    public Section getSectionForPosition(int position) {\n\n        int currentPos = 0;\n\n        for (Map.Entry<String, Section> entry : sections.entrySet()) {\n            Section section = entry.getValue();\n\n            // ignore invisible sections\n            if (!section.isVisible()) continue;\n\n            int sectionTotal = section.getSectionItemsTotal();\n\n            // check if position is in this section\n            if (position >= currentPos && position <= (currentPos + sectionTotal - 1)) {\n                return section;\n            }\n\n            currentPos += sectionTotal;\n        }\n\n        throw new IndexOutOfBoundsException(\"Invalid position\");\n    }\n\n    /**\n     * @deprecated Use {@link #getPositionInSection getPositionInSection} instead.\n     */\n    @Deprecated\n    public int getSectionPosition(int position) {\n        return getPositionInSection(position);\n    }\n\n    /**\n     * Return the item position relative to the section.\n     *\n     * @param position position of the item in the adapter\n     * @return position of the item in the section\n     */\n    public int getPositionInSection(int position) {\n        int currentPos = 0;\n\n        for (Map.Entry<String, Section> entry : sections.entrySet()) {\n            Section section = entry.getValue();\n\n            // ignore invisible sections\n            if (!section.isVisible()) continue;\n\n            int sectionTotal = section.getSectionItemsTotal();\n\n            // check if position is in this section\n            if (position >= currentPos && position <= (currentPos + sectionTotal - 1)) {\n                return position - currentPos - (section.hasHeader() ? 1 : 0);\n            }\n\n            currentPos += sectionTotal;\n        }\n\n        throw new IndexOutOfBoundsException(\"Invalid position\");\n    }\n\n    /**\n     * Return the section position in the adapter.\n     *\n     * @param tag unique identifier of the section\n     * @return position of the section in the adapter\n     */\n    public int getSectionPosition(String tag) {\n        int currentPos = 0;\n\n        for (Map.Entry<String, Section> entry : sections.entrySet()) {\n            Section section = entry.getValue();\n\n            // ignore invisible sections\n            if (!section.isVisible()) continue;\n\n            int sectionTotal = section.getSectionItemsTotal();\n\n            if (entry.getKey().equalsIgnoreCase(tag)) {\n                return currentPos;\n            }\n\n            currentPos += sectionTotal;\n        }\n\n        throw new IllegalArgumentException(\"Invalid tag: \" + tag);\n    }\n\n    /**\n     * Return a map with all sections of this adapter.\n     *\n     * @return a map with all sections\n     */\n    public LinkedHashMap<String, Section> getSectionsMap() {\n        return sections;\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemInserted notifyItemInserted}.\n     *\n     * @param tag      unique identifier of the section\n     * @param position position of the item in the section\n     */\n    public void notifyItemInsertedInSection(String tag, int position) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemInserted(getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + position);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemInserted(int position) {\n        super.notifyItemInserted(position);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemRangeInserted notifyItemRangeInserted}.\n     *\n     * @param tag           unique identifier of the section\n     * @param positionStart position of the first item that was inserted in the section\n     * @param itemCount     number of items inserted in the section\n     */\n    public void notifyItemRangeInsertedInSection(String tag, int positionStart, int itemCount) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemRangeInserted(\n                getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + positionStart, itemCount);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemRangeInserted(int positionStart, int itemCount) {\n        super.notifyItemRangeInserted(positionStart, itemCount);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemRemoved notifyItemRemoved}.\n     *\n     * @param tag      unique identifier of the section\n     * @param position position of the item in the section\n     */\n    public void notifyItemRemovedFromSection(String tag, int position) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemRemoved(getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + position);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemRemoved(int position) {\n        super.notifyItemRemoved(position);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemRangeRemoved notifyItemRangeRemoved}.\n     *\n     * @param tag           unique identifier of the section\n     * @param positionStart previous position of the first item that was removed from the section\n     * @param itemCount     number of items removed from the section\n     */\n    public void notifyItemRangeRemovedFromSection(String tag, int positionStart, int itemCount) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemRangeRemoved(\n                getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + positionStart, itemCount);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemRangeRemoved(int positionStart, int itemCount) {\n        super.notifyItemRangeRemoved(positionStart, itemCount);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemChanged notifyItemChanged}.\n     *\n     * @param tag      unique identifier of the section\n     * @param position position of the item in the section\n     */\n    public void notifyItemChangedInSection(String tag, int position) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemChanged(getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + position);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemChanged(int position) {\n        super.notifyItemChanged(position);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemRangeChanged notifyItemRangeChanged}.\n     *\n     * @param tag           unique identifier of the section\n     * @param positionStart position of the first item that was inserted in the section\n     * @param itemCount     number of items inserted in the section\n     */\n    public void notifyItemRangeChangedInSection(String tag, int positionStart, int itemCount) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemRangeChanged(\n                getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + positionStart, itemCount);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemRangeChanged(int positionStart, int itemCount) {\n        super.notifyItemRangeChanged(positionStart, itemCount);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemRangeChanged notifyItemRangeChanged}.\n     *\n     * @param tag           unique identifier of the section\n     * @param positionStart position of the first item that was inserted in the section\n     * @param itemCount     number of items inserted in the section\n     * @param payload       optional parameter, use null to identify a \"full\" update\n     */\n    public void notifyItemRangeChangedInSection(String tag, int positionStart, int itemCount,\n                                                Object payload) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemRangeChanged(\n                getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + positionStart, itemCount,\n                payload);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemRangeChanged(int positionStart, int itemCount, Object payload) {\n        super.notifyItemRangeChanged(positionStart, itemCount, payload);\n    }\n\n    /**\n     * Helper method that receives position in relation to the section, calculates the relative\n     * position in the adapter and calls {@link #notifyItemMoved notifyItemMoved}.\n     *\n     * @param tag          unique identifier of the section\n     * @param fromPosition previous position of the item in the section\n     * @param toPosition   new position of the item in the section\n     */\n    public void notifyItemMovedInSection(String tag, int fromPosition, int toPosition) {\n        Section section = getValidSectionOrThrowException(tag);\n\n        callSuperNotifyItemMoved(getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + fromPosition,\n                getSectionPosition(tag) + (section.hasHeader ? 1 : 0) + toPosition);\n    }\n\n    @VisibleForTesting\n    void callSuperNotifyItemMoved(int fromPosition, int toPosition) {\n        super.notifyItemMoved(fromPosition, toPosition);\n    }\n\n    @NonNull\n    private Section getValidSectionOrThrowException(String tag) {\n        Section section = getSection(tag);\n\n        if (section == null) {\n            throw new IllegalArgumentException(\"Invalid tag: \" + tag);\n        }\n\n        return section;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/section/StatelessSection.java",
    "content": "package com.yoyiyi.soleil.widget.section;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport java.util.List;\n\n/**\n * Abstract Section with no States.\n * 修改过 @author zzq  作者 E-mail:   soleilyoyiyi@gmail.com\n *\n * @author Gustavo Pagani\n */\npublic abstract class StatelessSection<T> extends Section<T> {\n\n    /**\n     * 带有泛型构造方法\n     *\n     * @param itemResourceId\n     * @param data\n     */\n    public StatelessSection(int itemResourceId, List<T> data) {\n        super(data);\n        this.itemResourceId = itemResourceId;\n    }\n\n\n    /**\n     * 带有泛型构造方法\n     *\n     * @param headerResourceId\n     * @param itemResourceId\n     * @param data\n     */\n    public StatelessSection(int headerResourceId, int itemResourceId, List<T> data) {\n        this(itemResourceId, data);\n        this.headerResourceId = headerResourceId;\n        this.hasHeader = true;\n    }\n\n\n    /**\n     * 带有泛型构造方法\n     *\n     * @param headerResourceId\n     * @param footerResourceId\n     * @param itemResourceId\n     * @param data\n     */\n    public StatelessSection(int headerResourceId, int footerResourceId, int itemResourceId, List<T> data) {\n        this(headerResourceId, itemResourceId, data);\n        this.footerResourceId = footerResourceId;\n        this.hasFooter = true;\n    }\n\n    public StatelessSection(int itemResourceId) {\n        super();\n        this.itemResourceId = itemResourceId;\n    }\n\n\n    /**\n     * Create a Section object with loading/failed states, a custom header but no footer\n     *\n     * @param headerResourceId layout resource for its header\n     * @param itemResourceId   layout resource for its items\n     */\n    public StatelessSection(int headerResourceId, int itemResourceId) {\n        this(itemResourceId);\n        this.headerResourceId = headerResourceId;\n        this.hasHeader = true;\n    }\n\n\n    /**\n     * Create a Section object with loading/failed states, a custom header and footer\n     *\n     * @param headerResourceId layout resource for its header\n     * @param footerResourceId layout resource for its footer\n     * @param itemResourceId   layout resource for its items\n     */\n    public StatelessSection(int headerResourceId, int footerResourceId, int itemResourceId) {\n        this(headerResourceId, itemResourceId);\n        this.footerResourceId = footerResourceId;\n        this.hasFooter = true;\n    }\n\n    @Override\n    public final void onBindLoadingViewHolder(ViewHolder holder) {\n        super.onBindLoadingViewHolder(holder);\n    }\n\n    @Override\n    public final ViewHolder getLoadingViewHolder(View view) {\n        return super.getLoadingViewHolder(view);\n    }\n\n    @Override\n    public final void onBindFailedViewHolder(ViewHolder holder) {\n        super.onBindFailedViewHolder(holder);\n    }\n\n    @Override\n    public final ViewHolder getFailedViewHolder(View view) {\n        return super.getFailedViewHolder(view);\n    }\n\n    public void setMargins(View view, int left, int top, int right, int bottom) {\n        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n        params.setMargins(left, top, right, bottom);\n        view.setLayoutParams(params);\n    }\n\n    public void gone(View view) {\n        ViewGroup.LayoutParams params = view.getLayoutParams();\n        params.height = 0;\n        params.width = 0;\n        view.setLayoutParams(params);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/section/ViewHolder.java",
    "content": "/**\n * Copyright 2013 Joan Zapata\n * <p>\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * <p>\n * http://www.apache.org/licenses/LICENSE-2.0\n * <p>\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\npackage com.yoyiyi.soleil.widget.section;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Paint;\nimport android.graphics.Typeface;\nimport android.graphics.drawable.Drawable;\nimport android.os.Build;\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.DrawableRes;\nimport android.support.annotation.IdRes;\nimport android.support.annotation.StringRes;\nimport android.support.v7.widget.RecyclerView;\nimport android.text.util.Linkify;\nimport android.util.SparseArray;\nimport android.view.View;\nimport android.view.animation.AlphaAnimation;\nimport android.widget.Adapter;\nimport android.widget.AdapterView;\nimport android.widget.Checkable;\nimport android.widget.CompoundButton;\nimport android.widget.ImageView;\nimport android.widget.ProgressBar;\nimport android.widget.RatingBar;\nimport android.widget.TextView;\n\nimport com.chad.library.adapter.base.BaseQuickAdapter;\n\nimport java.util.HashSet;\nimport java.util.LinkedHashSet;\n\n\n/**\n * https://github.com/CymChad/BaseRecyclerViewAdapterHelper\n */\npublic class ViewHolder extends RecyclerView.ViewHolder {\n\n    /**\n     * Views indexed with their IDs\n     */\n    private final SparseArray<View> views;\n\n    public HashSet<Integer> getNestViews() {\n        return nestViews;\n    }\n\n    private final HashSet<Integer> nestViews;\n\n    private final LinkedHashSet<Integer> childClickViewIds;\n\n    private final LinkedHashSet<Integer> itemChildLongClickViewIds;\n    private BaseQuickAdapter adapter;\n    /**\n     * use itemView instead\n     */\n    @Deprecated\n    public View convertView;\n\n    /**\n     * Package private field to retain the associated user object and detect a change\n     */\n    Object associatedObject;\n\n\n    public ViewHolder(final View view) {\n        super(view);\n        this.views = new SparseArray<>();\n        this.childClickViewIds = new LinkedHashSet<>();\n        this.itemChildLongClickViewIds = new LinkedHashSet<>();\n        this.nestViews = new HashSet<>();\n        convertView = view;\n\n\n    }\n\n    private int getClickPosition() {\n        return getLayoutPosition() - adapter.getHeaderLayoutCount();\n    }\n\n    public HashSet<Integer> getItemChildLongClickViewIds() {\n        return itemChildLongClickViewIds;\n    }\n\n    public HashSet<Integer> getChildClickViewIds() {\n        return childClickViewIds;\n    }\n\n    /**\n     * use itemView instead\n     *\n     * @return the ViewHolder root view\n     */\n    @Deprecated\n    public View getConvertView() {\n\n        return convertView;\n    }\n\n    /**\n     * Will set the text of a TextView.\n     *\n     * @param viewId The view id.\n     * @param value  The text to put in the text view.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setText(@IdRes int viewId, CharSequence value) {\n        TextView view = getView(viewId);\n        view.setText(value);\n        return this;\n    }\n\n    public ViewHolder setText(@IdRes int viewId, @StringRes int strId) {\n        TextView view = getView(viewId);\n        view.setText(strId);\n        return this;\n    }\n\n    /**\n     * Will set the image of an ImageView from a resource id.\n     *\n     * @param viewId     The view id.\n     * @param imageResId The image resource id.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setImageResource(@IdRes int viewId, @DrawableRes int imageResId) {\n        ImageView view = getView(viewId);\n        view.setImageResource(imageResId);\n        return this;\n    }\n\n    /**\n     * Will set background color of a view.\n     *\n     * @param viewId The view id.\n     * @param color  A color, not a resource id.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setBackgroundColor(@IdRes int viewId, @ColorInt int color) {\n        View view = getView(viewId);\n        view.setBackgroundColor(color);\n        return this;\n    }\n\n    /**\n     * Will set background of a view.\n     *\n     * @param viewId        The view id.\n     * @param backgroundRes A resource to use as a background.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setBackgroundRes(@IdRes int viewId, @DrawableRes int backgroundRes) {\n        View view = getView(viewId);\n        view.setBackgroundResource(backgroundRes);\n        return this;\n    }\n\n    /**\n     * Will set text color of a TextView.\n     *\n     * @param viewId    The view id.\n     * @param textColor The text color (not a resource id).\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setTextColor(@IdRes int viewId, @ColorInt int textColor) {\n        TextView view = getView(viewId);\n        view.setTextColor(textColor);\n        return this;\n    }\n\n\n    /**\n     * Will set the image of an ImageView from a drawable.\n     *\n     * @param viewId   The view id.\n     * @param drawable The image drawable.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setImageDrawable(@IdRes int viewId, Drawable drawable) {\n        ImageView view = getView(viewId);\n        view.setImageDrawable(drawable);\n        return this;\n    }\n\n    /**\n     * Add an action to set the image of an image view. Can be called multiple times.\n     */\n    public ViewHolder setImageBitmap(@IdRes int viewId, Bitmap bitmap) {\n        ImageView view = getView(viewId);\n        view.setImageBitmap(bitmap);\n        return this;\n    }\n\n    /**\n     * Add an action to set the alpha of a view. Can be called multiple times.\n     * Alpha between 0-1.\n     */\n    public ViewHolder setAlpha(@IdRes int viewId, float value) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {\n            getView(viewId).setAlpha(value);\n        } else {\n            // Pre-honeycomb hack to set Alpha value\n            AlphaAnimation alpha = new AlphaAnimation(value, value);\n            alpha.setDuration(0);\n            alpha.setFillAfter(true);\n            getView(viewId).startAnimation(alpha);\n        }\n        return this;\n    }\n\n    /**\n     * Set a view visibility to VISIBLE (true) or GONE (false).\n     *\n     * @param viewId  The view id.\n     * @param visible True for VISIBLE, false for GONE.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setVisible(@IdRes int viewId, boolean visible) {\n        View view = getView(viewId);\n        view.setVisibility(visible ? View.VISIBLE : View.GONE);\n        return this;\n    }\n\n    /**\n     * Add links into a TextView.\n     *\n     * @param viewId The id of the TextView to linkify.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder linkify(@IdRes int viewId) {\n        TextView view = getView(viewId);\n        Linkify.addLinks(view, Linkify.ALL);\n        return this;\n    }\n\n    /**\n     * Apply the typeface to the given viewId, and enable subpixel rendering.\n     */\n    public ViewHolder setTypeface(@IdRes int viewId, Typeface typeface) {\n        TextView view = getView(viewId);\n        view.setTypeface(typeface);\n        view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);\n        return this;\n    }\n\n    /**\n     * Apply the typeface to all the given viewIds, and enable subpixel rendering.\n     */\n    public ViewHolder setTypeface(Typeface typeface, int... viewIds) {\n        for (int viewId : viewIds) {\n            TextView view = getView(viewId);\n            view.setTypeface(typeface);\n            view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);\n        }\n        return this;\n    }\n\n    /**\n     * Sets the progress of a ProgressBar.\n     *\n     * @param viewId   The view id.\n     * @param progress The progress.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setProgress(@IdRes int viewId, int progress) {\n        ProgressBar view = getView(viewId);\n        view.setProgress(progress);\n        return this;\n    }\n\n    /**\n     * Sets the progress and max of a ProgressBar.\n     *\n     * @param viewId   The view id.\n     * @param progress The progress.\n     * @param max      The max value of a ProgressBar.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setProgress(@IdRes int viewId, int progress, int max) {\n        ProgressBar view = getView(viewId);\n        view.setMax(max);\n        view.setProgress(progress);\n        return this;\n    }\n\n    /**\n     * Sets the range of a ProgressBar to 0...max.\n     *\n     * @param viewId The view id.\n     * @param max    The max value of a ProgressBar.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setMax(@IdRes int viewId, int max) {\n        ProgressBar view = getView(viewId);\n        view.setMax(max);\n        return this;\n    }\n\n    /**\n     * Sets the rating (the number of stars filled) of a RatingBar.\n     *\n     * @param viewId The view id.\n     * @param rating The rating.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setRating(@IdRes int viewId, float rating) {\n        RatingBar view = getView(viewId);\n        view.setRating(rating);\n        return this;\n    }\n\n    /**\n     * Sets the rating (the number of stars filled) and max of a RatingBar.\n     *\n     * @param viewId The view id.\n     * @param rating The rating.\n     * @param max    The range of the RatingBar to 0...max.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setRating(@IdRes int viewId, float rating, int max) {\n        RatingBar view = getView(viewId);\n        view.setMax(max);\n        view.setRating(rating);\n        return this;\n    }\n\n    /**\n     * Sets the on click listener of the view.\n     *\n     * @param viewId   The view id.\n     * @param listener The on click listener;\n     * @return The BaseViewHolder for chaining.\n     */\n    @Deprecated\n    public ViewHolder setOnClickListener(@IdRes int viewId, View.OnClickListener listener) {\n        View view = getView(viewId);\n        view.setOnClickListener(listener);\n        return this;\n    }\n\n    /**\n     * add childView id\n     *\n     * @param viewId add the child view id   can support childview click\n     * @return if you use adapter bind listener\n     * @link {(adapter.setOnItemChildClickListener(listener))}\n     * <p>\n     * or if you can use  recyclerView.addOnItemTouch(listerer)  wo also support this menthod\n     */\n    @SuppressWarnings(\"unchecked\")\n    public ViewHolder addOnClickListener(@IdRes final int viewId) {\n        childClickViewIds.add(viewId);\n        final View view = getView(viewId);\n        if (view != null) {\n            if (!view.isClickable()) {\n                view.setClickable(true);\n            }\n            view.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    if (adapter.getOnItemChildClickListener() != null) {\n                        adapter.getOnItemChildClickListener().onItemChildClick(adapter, v, getClickPosition());\n                    }\n                }\n            });\n        }\n\n        return this;\n    }\n\n\n    /**\n     * set nestview id\n     *\n     * @param viewId add the child view id   can support childview click\n     * @return\n     */\n    public ViewHolder setNestView(@IdRes int viewId) {\n        addOnClickListener(viewId);\n        addOnLongClickListener(viewId);\n        nestViews.add(viewId);\n        return this;\n    }\n\n    /**\n     * add long click view id\n     *\n     * @param viewId\n     * @return if you use adapter bind listener\n     * @link {(adapter.setOnItemChildLongClickListener(listener))}\n     * <p>\n     * or if you can use  recyclerView.addOnItemTouch(listerer)  wo also support this menthod\n     */\n    @SuppressWarnings(\"unchecked\")\n    public ViewHolder addOnLongClickListener(@IdRes final int viewId) {\n        itemChildLongClickViewIds.add(viewId);\n        final View view = getView(viewId);\n        if (view != null) {\n            if (!view.isLongClickable()) {\n                view.setLongClickable(true);\n            }\n            view.setOnLongClickListener(new View.OnLongClickListener() {\n                @Override\n                public boolean onLongClick(View v) {\n                    return adapter.getOnItemChildLongClickListener() != null &&\n                            adapter.getOnItemChildLongClickListener().onItemChildLongClick(adapter, v, getClickPosition());\n                }\n            });\n        }\n        return this;\n    }\n\n\n    /**\n     * Sets the on touch listener of the view.\n     *\n     * @param viewId   The view id.\n     * @param listener The on touch listener;\n     * @return The BaseViewHolder for chaining.\n     */\n    @Deprecated\n    public ViewHolder setOnTouchListener(@IdRes int viewId, View.OnTouchListener listener) {\n        View view = getView(viewId);\n        view.setOnTouchListener(listener);\n        return this;\n    }\n\n    /**\n     * Sets the on long click listener of the view.\n     *\n     * @param viewId   The view id.\n     * @param listener The on long click listener;\n     * @return The BaseViewHolder for chaining.\n     * Please use {@link #addOnLongClickListener(int)} (adapter.setOnItemChildLongClickListener(listener))}\n     */\n    @Deprecated\n    public ViewHolder setOnLongClickListener(@IdRes int viewId, View.OnLongClickListener listener) {\n        View view = getView(viewId);\n        view.setOnLongClickListener(listener);\n        return this;\n    }\n\n    /**\n     * Sets the listview or gridview's item click listener of the view\n     *\n     * @param viewId   The view id.\n     * @param listener The item on click listener;\n     * @return The BaseViewHolder for chaining.\n     * Please use {@link #addOnClickListener(int)} (int)} (adapter.setOnItemChildClickListener(listener))}\n     */\n    @Deprecated\n    public ViewHolder setOnItemClickListener(@IdRes int viewId, AdapterView.OnItemClickListener listener) {\n        AdapterView view = getView(viewId);\n        view.setOnItemClickListener(listener);\n        return this;\n    }\n\n    /**\n     * Sets the listview or gridview's item long click listener of the view\n     *\n     * @param viewId   The view id.\n     * @param listener The item long click listener;\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setOnItemLongClickListener(@IdRes int viewId, AdapterView.OnItemLongClickListener listener) {\n        AdapterView view = getView(viewId);\n        view.setOnItemLongClickListener(listener);\n        return this;\n    }\n\n    /**\n     * Sets the listview or gridview's item selected click listener of the view\n     *\n     * @param viewId   The view id.\n     * @param listener The item selected click listener;\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setOnItemSelectedClickListener(@IdRes int viewId, AdapterView.OnItemSelectedListener listener) {\n        AdapterView view = getView(viewId);\n        view.setOnItemSelectedListener(listener);\n        return this;\n    }\n\n    /**\n     * Sets the on checked change listener of the view.\n     *\n     * @param viewId   The view id.\n     * @param listener The checked change listener of compound button.\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setOnCheckedChangeListener(@IdRes int viewId, CompoundButton.OnCheckedChangeListener listener) {\n        CompoundButton view = getView(viewId);\n        view.setOnCheckedChangeListener(listener);\n        return this;\n    }\n\n    /**\n     * Sets the tag of the view.\n     *\n     * @param viewId The view id.\n     * @param tag    The tag;\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setTag(@IdRes int viewId, Object tag) {\n        View view = getView(viewId);\n        view.setTag(tag);\n        return this;\n    }\n\n    /**\n     * Sets the tag of the view.\n     *\n     * @param viewId The view id.\n     * @param key    The key of tag;\n     * @param tag    The tag;\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setTag(@IdRes int viewId, int key, Object tag) {\n        View view = getView(viewId);\n        view.setTag(key, tag);\n        return this;\n    }\n\n    /**\n     * Sets the checked status of a checkable.\n     *\n     * @param viewId  The view id.\n     * @param checked The checked status;\n     * @return The BaseViewHolder for chaining.\n     */\n    public ViewHolder setChecked(@IdRes int viewId, boolean checked) {\n        View view = getView(viewId);\n        // View unable cast to Checkable\n        if (view instanceof Checkable) {\n            ((Checkable) view).setChecked(checked);\n        }\n        return this;\n    }\n\n    /**\n     * Sets the adapter of a adapter view.\n     *\n     * @param viewId  The view id.\n     * @param adapter The adapter;\n     * @return The BaseViewHolder for chaining.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public ViewHolder setAdapter(@IdRes int viewId, Adapter adapter) {\n        AdapterView view = getView(viewId);\n        view.setAdapter(adapter);\n        return this;\n    }\n\n    /**\n     * Sets the adapter of a adapter view.\n     *\n     * @param adapter The adapter;\n     * @return The BaseViewHolder for chaining.\n     */\n    protected ViewHolder setAdapter(BaseQuickAdapter adapter) {\n        this.adapter = adapter;\n        return this;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public <T extends View> T getView(@IdRes int viewId) {\n        View view = views.get(viewId);\n        if (view == null) {\n            view = itemView.findViewById(viewId);\n            views.put(viewId, view);\n        }\n        return (T) view;\n    }\n\n    /**\n     * Retrieves the last converted object on this view.\n     */\n    public Object getAssociatedObject() {\n        return associatedObject;\n    }\n\n    /**\n     * Should be called during convert\n     */\n    public void setAssociatedObject(Object associatedObject) {\n        this.associatedObject = associatedObject;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/yoyiyi/soleil/widget/statusbar/StatusBarUtil.java",
    "content": "package com.yoyiyi.soleil.widget.statusbar;\n\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.IntRange;\nimport android.support.design.widget.CoordinatorLayout;\nimport android.support.v4.widget.DrawerLayout;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.WindowManager;\nimport android.widget.LinearLayout;\n\nimport com.yoyiyi.soleil.R;\n\n/**\n * Created by Jaeger on 16/2/14.\n * <p>\n * Email: chjie.jaeger@gmail.com\n * GitHub: https://github.com/laobie\n */\npublic class StatusBarUtil {\n\n    public static final int DEFAULT_STATUS_BAR_ALPHA = 112;\n    private static final int FAKE_STATUS_BAR_VIEW_ID = R.id.statusbarutil_fake_status_bar_view;\n    private static final int FAKE_TRANSLUCENT_VIEW_ID = R.id.statusbarutil_translucent_view;\n    private static final int TAG_KEY_HAVE_SET_OFFSET = -123;\n\n    /**\n     * 设置状态栏颜色\n     *\n     * @param activity 需要设置的 activity\n     * @param color    状态栏颜色值\n     */\n    public static void setColor(Activity activity, @ColorInt int color) {\n        setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);\n    }\n\n    /**\n     * 设置状态栏颜色\n     *\n     * @param activity       需要设置的activity\n     * @param color          状态栏颜色值\n     * @param statusBarAlpha 状态栏透明度\n     */\n\n    public static void setColor(Activity activity, @ColorInt int color, @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);\n            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));\n        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();\n            View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID);\n            if (fakeStatusBarView != null) {\n                if (fakeStatusBarView.getVisibility() == View.GONE) {\n                    fakeStatusBarView.setVisibility(View.VISIBLE);\n                }\n                fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));\n            } else {\n                decorView.addView(createStatusBarView(activity, color, statusBarAlpha));\n            }\n            setRootView(activity);\n        }\n    }\n\n    /**\n     * 为滑动返回界面设置状态栏颜色\n     *\n     * @param activity 需要设置的activity\n     * @param color    状态栏颜色值\n     */\n    public static void setColorForSwipeBack(Activity activity, int color) {\n        setColorForSwipeBack(activity, color, DEFAULT_STATUS_BAR_ALPHA);\n    }\n\n    /**\n     * 为滑动返回界面设置状态栏颜色\n     *\n     * @param activity       需要设置的activity\n     * @param color          状态栏颜色值\n     * @param statusBarAlpha 状态栏透明度\n     */\n    public static void setColorForSwipeBack(Activity activity, @ColorInt int color,\n        @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n\n            ViewGroup contentView = ((ViewGroup) activity.findViewById(android.R.id.content));\n            View rootView = contentView.getChildAt(0);\n            int statusBarHeight = getStatusBarHeight(activity);\n            if (rootView != null && rootView instanceof CoordinatorLayout) {\n                final CoordinatorLayout coordinatorLayout = (CoordinatorLayout) rootView;\n                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {\n                    coordinatorLayout.setFitsSystemWindows(false);\n                    contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));\n                    boolean isNeedRequestLayout = contentView.getPaddingTop() < statusBarHeight;\n                    if (isNeedRequestLayout) {\n                        contentView.setPadding(0, statusBarHeight, 0, 0);\n                        coordinatorLayout.post(new Runnable() {\n                            @Override\n                            public void run() {\n                                coordinatorLayout.requestLayout();\n                            }\n                        });\n                    }\n                } else {\n                    coordinatorLayout.setStatusBarBackgroundColor(calculateStatusColor(color, statusBarAlpha));\n                }\n            } else {\n                contentView.setPadding(0, statusBarHeight, 0, 0);\n                contentView.setBackgroundColor(calculateStatusColor(color, statusBarAlpha));\n            }\n            setTransparentForWindow(activity);\n        }\n    }\n\n    /**\n     * 设置状态栏纯色 不加半透明效果\n     *\n     * @param activity 需要设置的 activity\n     * @param color    状态栏颜色值\n     */\n    public static void setColorNoTranslucent(Activity activity, @ColorInt int color) {\n        setColor(activity, color, 0);\n    }\n\n    /**\n     * 设置状态栏颜色(5.0以下无半透明效果,不建议使用)\n     *\n     * @param activity 需要设置的 activity\n     * @param color    状态栏颜色值\n     */\n    @Deprecated\n    public static void setColorDiff(Activity activity, @ColorInt int color) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        transparentStatusBar(activity);\n        ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);\n        // 移除半透明矩形,以免叠加\n        View fakeStatusBarView = contentView.findViewById(FAKE_STATUS_BAR_VIEW_ID);\n        if (fakeStatusBarView != null) {\n            if (fakeStatusBarView.getVisibility() == View.GONE) {\n                fakeStatusBarView.setVisibility(View.VISIBLE);\n            }\n            fakeStatusBarView.setBackgroundColor(color);\n        } else {\n            contentView.addView(createStatusBarView(activity, color));\n        }\n        setRootView(activity);\n    }\n\n    /**\n     * 使状态栏半透明\n     * <p>\n     * 适用于图片作为背景的界面,此时需要图片填充到状态栏\n     *\n     * @param activity 需要设置的activity\n     */\n    public static void setTranslucent(Activity activity) {\n        setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA);\n    }\n\n    /**\n     * 使状态栏半透明\n     * <p>\n     * 适用于图片作为背景的界面,此时需要图片填充到状态栏\n     *\n     * @param activity       需要设置的activity\n     * @param statusBarAlpha 状态栏透明度\n     */\n    public static void setTranslucent(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        setTransparent(activity);\n        addTranslucentView(activity, statusBarAlpha);\n    }\n\n    /**\n     * 针对根布局是 CoordinatorLayout, 使状态栏半透明\n     * <p>\n     * 适用于图片作为背景的界面,此时需要图片填充到状态栏\n     *\n     * @param activity       需要设置的activity\n     * @param statusBarAlpha 状态栏透明度\n     */\n    public static void setTranslucentForCoordinatorLayout(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        transparentStatusBar(activity);\n        addTranslucentView(activity, statusBarAlpha);\n    }\n\n    /**\n     * 设置状态栏全透明\n     *\n     * @param activity 需要设置的activity\n     */\n    public static void setTransparent(Activity activity) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        transparentStatusBar(activity);\n        setRootView(activity);\n    }\n\n    /**\n     * 使状态栏透明(5.0以上半透明效果,不建议使用)\n     * <p>\n     * 适用于图片作为背景的界面,此时需要图片填充到状态栏\n     *\n     * @param activity 需要设置的activity\n     */\n    @Deprecated\n    public static void setTranslucentDiff(Activity activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n            // 设置状态栏透明\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            setRootView(activity);\n        }\n    }\n\n    /**\n     * 为DrawerLayout 布局设置状态栏变色\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     * @param color        状态栏颜色值\n     */\n    public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {\n        setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA);\n    }\n\n    /**\n     * 为DrawerLayout 布局设置状态栏颜色,纯色\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     * @param color        状态栏颜色值\n     */\n    public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {\n        setColorForDrawerLayout(activity, drawerLayout, color, 0);\n    }\n\n    /**\n     * 为DrawerLayout 布局设置状态栏变色\n     *\n     * @param activity       需要设置的activity\n     * @param drawerLayout   DrawerLayout\n     * @param color          状态栏颜色值\n     * @param statusBarAlpha 状态栏透明度\n     */\n    public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color,\n        @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);\n            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);\n        } else {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n        }\n        // 生成一个状态栏大小的矩形\n        // 添加 statusBarView 到布局中\n        ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);\n        View fakeStatusBarView = contentLayout.findViewById(FAKE_STATUS_BAR_VIEW_ID);\n        if (fakeStatusBarView != null) {\n            if (fakeStatusBarView.getVisibility() == View.GONE) {\n                fakeStatusBarView.setVisibility(View.VISIBLE);\n            }\n            fakeStatusBarView.setBackgroundColor(color);\n        } else {\n            contentLayout.addView(createStatusBarView(activity, color), 0);\n        }\n        // 内容布局不是 LinearLayout 时,设置padding top\n        if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {\n            contentLayout.getChildAt(1)\n                .setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(),\n                    contentLayout.getPaddingRight(), contentLayout.getPaddingBottom());\n        }\n        // 设置属性\n        setDrawerLayoutProperty(drawerLayout, contentLayout);\n        addTranslucentView(activity, statusBarAlpha);\n    }\n\n    /**\n     * 设置 DrawerLayout 属性\n     *\n     * @param drawerLayout              DrawerLayout\n     * @param drawerLayoutContentLayout DrawerLayout 的内容布局\n     */\n    private static void setDrawerLayoutProperty(DrawerLayout drawerLayout, ViewGroup drawerLayoutContentLayout) {\n        ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);\n        drawerLayout.setFitsSystemWindows(false);\n        drawerLayoutContentLayout.setFitsSystemWindows(false);\n        drawerLayoutContentLayout.setClipToPadding(true);\n        drawer.setFitsSystemWindows(false);\n    }\n\n    /**\n     * 为DrawerLayout 布局设置状态栏变色(5.0以下无半透明效果,不建议使用)\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     * @param color        状态栏颜色值\n     */\n    @Deprecated\n    public static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            // 生成一个状态栏大小的矩形\n            ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);\n            View fakeStatusBarView = contentLayout.findViewById(FAKE_STATUS_BAR_VIEW_ID);\n            if (fakeStatusBarView != null) {\n                if (fakeStatusBarView.getVisibility() == View.GONE) {\n                    fakeStatusBarView.setVisibility(View.VISIBLE);\n                }\n                fakeStatusBarView.setBackgroundColor(calculateStatusColor(color, DEFAULT_STATUS_BAR_ALPHA));\n            } else {\n                // 添加 statusBarView 到布局中\n                contentLayout.addView(createStatusBarView(activity, color), 0);\n            }\n            // 内容布局不是 LinearLayout 时,设置padding top\n            if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {\n                contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);\n            }\n            // 设置属性\n            setDrawerLayoutProperty(drawerLayout, contentLayout);\n        }\n    }\n\n    /**\n     * 为 DrawerLayout 布局设置状态栏透明\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     */\n    public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {\n        setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA);\n    }\n\n    /**\n     * 为 DrawerLayout 布局设置状态栏透明\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     */\n    public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout,\n        @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        setTransparentForDrawerLayout(activity, drawerLayout);\n        addTranslucentView(activity, statusBarAlpha);\n    }\n\n    /**\n     * 为 DrawerLayout 布局设置状态栏透明\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     */\n    public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);\n            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);\n        } else {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n        }\n\n        ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);\n        // 内容布局不是 LinearLayout 时,设置padding top\n        if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {\n            contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);\n        }\n\n        // 设置属性\n        setDrawerLayoutProperty(drawerLayout, contentLayout);\n    }\n\n    /**\n     * 为 DrawerLayout 布局设置状态栏透明(5.0以上半透明效果,不建议使用)\n     *\n     * @param activity     需要设置的activity\n     * @param drawerLayout DrawerLayout\n     */\n    @Deprecated\n    public static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n            // 设置状态栏透明\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            // 设置内容布局属性\n            ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);\n            contentLayout.setFitsSystemWindows(true);\n            contentLayout.setClipToPadding(true);\n            // 设置抽屉布局属性\n            ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1);\n            vg.setFitsSystemWindows(false);\n            // 设置 DrawerLayout 属性\n            drawerLayout.setFitsSystemWindows(false);\n        }\n    }\n\n    /**\n     * 为头部是 ImageView 的界面设置状态栏全透明\n     *\n     * @param activity       需要设置的activity\n     * @param needOffsetView 需要向下偏移的 View\n     */\n    public static void setTransparentForImageView(Activity activity, View needOffsetView) {\n        setTranslucentForImageView(activity, 0, needOffsetView);\n    }\n\n    /**\n     * 为头部是 ImageView 的界面设置状态栏透明(使用默认透明度)\n     *\n     * @param activity       需要设置的activity\n     * @param needOffsetView 需要向下偏移的 View\n     */\n    public static void setTranslucentForImageView(Activity activity, View needOffsetView) {\n        setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);\n    }\n\n    /**\n     * 为头部是 ImageView 的界面设置状态栏透明\n     *\n     * @param activity       需要设置的activity\n     * @param statusBarAlpha 状态栏透明度\n     * @param needOffsetView 需要向下偏移的 View\n     */\n    public static void setTranslucentForImageView(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha,\n        View needOffsetView) {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            return;\n        }\n        setTransparentForWindow(activity);\n        addTranslucentView(activity, statusBarAlpha);\n        if (needOffsetView != null) {\n            Object haveSetOffset = needOffsetView.getTag(TAG_KEY_HAVE_SET_OFFSET);\n            if (haveSetOffset != null && (Boolean) haveSetOffset) {\n                return;\n            }\n            ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();\n            layoutParams.setMargins(layoutParams.leftMargin, layoutParams.topMargin + getStatusBarHeight(activity),\n                layoutParams.rightMargin, layoutParams.bottomMargin);\n            needOffsetView.setTag(TAG_KEY_HAVE_SET_OFFSET, true);\n        }\n    }\n\n    /**\n     * 为 fragment 头部是 ImageView 的设置状态栏透明\n     *\n     * @param activity       fragment 对应的 activity\n     * @param needOffsetView 需要向下偏移的 View\n     */\n    public static void setTranslucentForImageViewInFragment(Activity activity, View needOffsetView) {\n        setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);\n    }\n\n    /**\n     * 为 fragment 头部是 ImageView 的设置状态栏透明\n     *\n     * @param activity       fragment 对应的 activity\n     * @param needOffsetView 需要向下偏移的 View\n     */\n    public static void setTransparentForImageViewInFragment(Activity activity, View needOffsetView) {\n        setTranslucentForImageViewInFragment(activity, 0, needOffsetView);\n    }\n\n    /**\n     * 为 fragment 头部是 ImageView 的设置状态栏透明\n     *\n     * @param activity       fragment 对应的 activity\n     * @param statusBarAlpha 状态栏透明度\n     * @param needOffsetView 需要向下偏移的 View\n     */\n    public static void setTranslucentForImageViewInFragment(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha,\n        View needOffsetView) {\n        setTranslucentForImageView(activity, statusBarAlpha, needOffsetView);\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {\n            clearPreviousSetting(activity);\n        }\n    }\n\n    /**\n     * 隐藏伪状态栏 View\n     *\n     * @param activity 调用的 Activity\n     */\n    public static void hideFakeStatusBarView(Activity activity) {\n        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();\n        View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID);\n        if (fakeStatusBarView != null) {\n            fakeStatusBarView.setVisibility(View.GONE);\n        }\n        View fakeTranslucentView = decorView.findViewById(FAKE_TRANSLUCENT_VIEW_ID);\n        if (fakeTranslucentView != null) {\n            fakeTranslucentView.setVisibility(View.GONE);\n        }\n    }\n\n    ///////////////////////////////////////////////////////////////////////////////////\n\n    @TargetApi(Build.VERSION_CODES.KITKAT)\n    private static void clearPreviousSetting(Activity activity) {\n        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();\n        View fakeStatusBarView = decorView.findViewById(FAKE_STATUS_BAR_VIEW_ID);\n        if (fakeStatusBarView != null) {\n            decorView.removeView(fakeStatusBarView);\n            ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);\n            rootView.setPadding(0, 0, 0, 0);\n        }\n    }\n\n    /**\n     * 添加半透明矩形条\n     *\n     * @param activity       需要设置的 activity\n     * @param statusBarAlpha 透明值\n     */\n    private static void addTranslucentView(Activity activity, @IntRange(from = 0, to = 255) int statusBarAlpha) {\n        ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);\n        View fakeTranslucentView = contentView.findViewById(FAKE_TRANSLUCENT_VIEW_ID);\n        if (fakeTranslucentView != null) {\n            if (fakeTranslucentView.getVisibility() == View.GONE) {\n                fakeTranslucentView.setVisibility(View.VISIBLE);\n            }\n            fakeTranslucentView.setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0));\n        } else {\n            contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha));\n        }\n    }\n\n    /**\n     * 生成一个和状态栏大小相同的彩色矩形条\n     *\n     * @param activity 需要设置的 activity\n     * @param color    状态栏颜色值\n     * @return 状态栏矩形条\n     */\n    private static View createStatusBarView(Activity activity, @ColorInt int color) {\n        return createStatusBarView(activity, color, 0);\n    }\n\n    /**\n     * 生成一个和状态栏大小相同的半透明矩形条\n     *\n     * @param activity 需要设置的activity\n     * @param color    状态栏颜色值\n     * @param alpha    透明值\n     * @return 状态栏矩形条\n     */\n    private static View createStatusBarView(Activity activity, @ColorInt int color, int alpha) {\n        // 绘制一个和状态栏一样高的矩形\n        View statusBarView = new View(activity);\n        LinearLayout.LayoutParams params =\n            new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));\n        statusBarView.setLayoutParams(params);\n        statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));\n        statusBarView.setId(FAKE_STATUS_BAR_VIEW_ID);\n        return statusBarView;\n    }\n\n    /**\n     * 设置根布局参数\n     */\n    private static void setRootView(Activity activity) {\n        ViewGroup parent = (ViewGroup) activity.findViewById(android.R.id.content);\n        for (int i = 0, count = parent.getChildCount(); i < count; i++) {\n            View childView = parent.getChildAt(i);\n            if (childView instanceof ViewGroup) {\n                childView.setFitsSystemWindows(true);\n                ((ViewGroup) childView).setClipToPadding(true);\n            }\n        }\n    }\n\n    /**\n     * 设置透明\n     */\n    private static void setTransparentForWindow(Activity activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);\n            activity.getWindow()\n                .getDecorView()\n                .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);\n        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n            activity.getWindow()\n                .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n        }\n    }\n\n    /**\n     * 使状态栏透明\n     */\n    @TargetApi(Build.VERSION_CODES.KITKAT)\n    private static void transparentStatusBar(Activity activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);\n            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);\n            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);\n        } else {\n            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\n        }\n    }\n\n    /**\n     * 创建半透明矩形 View\n     *\n     * @param alpha 透明值\n     * @return 半透明 View\n     */\n    private static View createTranslucentStatusBarView(Activity activity, int alpha) {\n        // 绘制一个和状态栏一样高的矩形\n        View statusBarView = new View(activity);\n        LinearLayout.LayoutParams params =\n            new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));\n        statusBarView.setLayoutParams(params);\n        statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));\n        statusBarView.setId(FAKE_TRANSLUCENT_VIEW_ID);\n        return statusBarView;\n    }\n\n    /**\n     * 获取状态栏高度\n     *\n     * @param context context\n     * @return 状态栏高度\n     */\n    public static int getStatusBarHeight(Context context) {\n        // 获得状态栏高度\n        int resourceId = context.getResources().getIdentifier(\"status_bar_height\", \"dimen\", \"android\");\n        return context.getResources().getDimensionPixelSize(resourceId);\n    }\n\n    /**\n     * 计算状态栏颜色\n     *\n     * @param color color值\n     * @param alpha alpha值\n     * @return 最终的状态栏颜色\n     */\n    private static int calculateStatusColor(@ColorInt int color, int alpha) {\n        if (alpha == 0) {\n            return color;\n        }\n        float a = 1 - alpha / 255f;\n        int red = color >> 16 & 0xff;\n        int green = color >> 8 & 0xff;\n        int blue = color & 0xff;\n        red = (int) (red * a + 0.5);\n        green = (int) (green * a + 0.5);\n        blue = (int) (blue * a + 0.5);\n        return 0xff << 24 | red << 16 | green << 8 | blue;\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/anim/dd_mask_in.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n     android:duration=\"250\">\n    <alpha\n        android:fromAlpha=\"0\"\n        android:toAlpha=\"1\"/>\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/dd_mask_out.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n     android:duration=\"250\">\n    <alpha\n        android:fromAlpha=\"1\"\n        android:toAlpha=\"0\"/>\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/dd_menu_in.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n     android:duration=\"250\">\n    <translate\n        android:fromYDelta=\"-100%p\"\n        android:toYDelta=\"0\"/>\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/dd_menu_out.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n     android:duration=\"250\">\n    <translate\n        android:fromYDelta=\"0\"\n        android:toYDelta=\"-100%p\"/>\n\n</set>"
  },
  {
    "path": "app/src/main/res/color/select_bangumi_detail_index_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:color=\"@color/pink_text_color\" android:state_focused=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_enabled=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_selected=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_pressed=\"true\"/>\n    <item android:color=\"@color/black_alpha_30\"/>\n</selector>"
  },
  {
    "path": "app/src/main/res/color/select_bangumi_detail_index_title_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:color=\"@color/pink_text_color\" android:state_focused=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_enabled=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_selected=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_pressed=\"true\"/>\n\n    <item android:color=\"@color/font_gray\"/>\n</selector>"
  },
  {
    "path": "app/src/main/res/color/selector_tv_follow.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:color=\"@color/pink_text_color\" android:state_focused=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_selected=\"true\"/>\n    <item android:color=\"@color/pink_text_color\" android:state_pressed=\"true\"/>\n\n    <item android:color=\"@color/font_gray\"/>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/anim_search_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animation-list xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:oneshot=\"false\">\n\n    <item\n        android:drawable=\"@drawable/search_loading_0\"\n        android:duration=\"100\" />\n    <item\n        android:drawable=\"@drawable/search_loading_1\"\n        android:duration=\"100\" />\n\n</animation-list>"
  },
  {
    "path": "app/src/main/res/drawable/anim_video_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animation-list xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:oneshot=\"false\">\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_1\"\n        android:duration=\"60\"/>\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_3\"\n        android:duration=\"60\"/>\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_5\"\n        android:duration=\"60\"/>\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_7\"\n        android:duration=\"60\"/>\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_9\"\n        android:duration=\"60\"/>\n</animation-list>"
  },
  {
    "path": "app/src/main/res/drawable/btn_more_pink.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <corners android:radius=\"3dp\" />\n\n    <solid android:color=\"@color/pink\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/btn_more_white.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <corners android:radius=\"3dp\" />\n\n    <solid android:color=\"@color/card_view_background\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/default_line.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"line\">\n\n    <solid android:color=\"@color/line_bg\" />\n\n    <size android:height=\"1dp\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/round_wihte_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n\n    <solid android:color=\"@color/nav_head_round_background\" />\n\n    <corners android:radius=\"2dp\" />\n\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/selector_bangumi_detail_bt_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:state_enabled=\"true\">\n        <shape>\n            <stroke android:width=\"1.0px\" android:color=\"@color/colorPrimary\"/>\n            <solid android:color=\"@color/white\"/>\n            <corners android:radius=\"5dp\"/>\n        </shape>\n    </item>\n    <item android:state_enabled=\"false\">\n        <shape>\n            <solid android:color=\"@color/white\"/>\n            <corners android:radius=\"5dp\"/>\n        </shape>\n    </item>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/selector_bangumi_detail_season_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:state_enabled=\"true\"\n        android:drawable=\"@drawable/bangumi_season_title_background_first\"\n        >\n        <stroke android:color=\"@color/colorPrimary\"/>\n\n    </item>\n    <item android:state_enabled=\"false\">\n        <shape>\n            <stroke android:width=\"1.0px\" android:color=\"@color/white\"/>\n            <solid android:color=\"@color/gray_light\"/>\n            <corners android:radius=\"5dp\"/>\n        </shape>\n    </item>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/shape_bangumi_index_green_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <corners android:radius=\"3dp\" />\n\n    <solid android:color=\"@color/bangumi_index_green_bg\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_bangumi_index_pink_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <corners android:radius=\"3dp\" />\n\n    <solid android:color=\"@color/colorPrimary\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_bangumi_index_yellow_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <corners android:radius=\"3dp\" />\n\n    <solid android:color=\"@color/bangumi_index_yellow_bg\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_btn_game_center_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <corners android:radius=\"@dimen/dp4\"/>\n    <stroke\n        android:width=\"@dimen/dp1\"\n        android:color=\"@color/colorPrimary\"/>\n    <solid android:color=\"@color/transparent\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_btn_rank_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <corners android:radius=\"2dp\"/>\n    <solid android:color=\"@color/yellow_50\"/>\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_corner_btn.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:state_pressed=\"true\">\n        <shape>\n            <stroke android:width=\"1.0px\" android:color=\"@color/white\" />\n            <solid android:color=\"@color/colorPrimaryDark\" />\n            <corners android:radius=\"5dp\" />\n        </shape>\n    </item>\n    <item android:state_enabled=\"true\">\n        <shape>\n            <stroke android:width=\"1.0px\" android:color=\"@color/white\" />\n            <solid android:color=\"@color/colorPrimary\" />\n\n            <corners android:radius=\"5dp\" />\n        </shape>\n    </item>\n    <item android:state_enabled=\"false\">\n        <shape>\n            <stroke android:width=\"1.0px\" android:color=\"@color/white\" />\n            <solid android:color=\"@color/gray_light\" />\n            <corners android:radius=\"5dp\" />\n        </shape>\n    </item>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/shape_count_down.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <corners android:radius=\"@dimen/dp4\"/>\n    <solid android:color=\"@color/black_alpha_60\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_dots_default.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"oval\">\n\n    <solid android:color=\"@color/white\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_dots_select.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"oval\">\n\n    <solid android:color=\"@color/colorPrimary\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_gradient.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <gradient\n        android:angle=\"270\"\n        android:endColor=\"#00000000\"\n        android:startColor=\"#33000000\"/>\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_img_count_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <solid android:color=\"@color/black_alpha_60\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_item_decoration.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <solid android:color=\"@color/transparent\"/>\n    <size\n        android:width=\"@dimen/dp10\"\n        android:height=\"1px\"/>\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_login_input_rounded_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <stroke android:width=\"1.0px\" android:color=\"#dadada\" />\n            <solid android:color=\"@color/white\" />\n            <corners android:radius=\"3dp\"  />\n        </shape>\n    </item>\n\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/shape_shadow_gradient.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <gradient\n        android:angle=\"270\"\n        android:endColor=\"#00000000\"\n        android:startColor=\"#9a000000\"\n        android:type=\"linear\"/>\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_shadow_normal_reserve.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <gradient android:startColor=\"#00000000\"\n              android:endColor=\"#44000000\"\n              android:type=\"linear\"\n              android:angle=\"270\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_tv_electricize.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <solid android:color=\"@color/colorPrimary\"/>\n    <corners android:radius=\"@dimen/dp4\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_tv_favourite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n    <corners android:radius=\"@dimen/dp4\"/>\n    <stroke\n        android:width=\"@dimen/dp1\"\n        android:color=\"@color/colorPrimary\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_tv_new_tag.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <corners\n        android:bottomLeftRadius=\"2dp\"\n        android:bottomRightRadius=\"2dp\"\n        android:topLeftRadius=\"0dp\"\n        android:topRightRadius=\"0dp\"/>\n\n    <solid android:color=\"@color/colorPrimary\"/>\n\n    <stroke\n        android:width=\"1dp\"\n        android:color=\"@color/gray\"/>\n\n    <size\n        android:width=\"30dp\"\n        android:height=\"20dp\"/>\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_vip_btn_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n\n    <solid android:color=\"@color/vip_button_bg_color\" />\n\n    <stroke\n        android:width=\"0.5dp\"\n        android:color=\"@color/white\" />\n\n    <corners android:radius=\"2dp\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_white_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <stroke\n        android:width=\"1dp\"\n        android:color=\"@color/white\" />\n\n    <corners android:radius=\"3dp\" />\n\n    <padding\n        android:bottom=\"2dp\"\n        android:left=\"2dp\"\n        android:right=\"2dp\"\n        android:top=\"2dp\" />\n\n\n    <size\n        android:width=\"25dp\"\n        android:height=\"10dp\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/ssdk_oks_classic_platform_cell_back.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\t<item android:state_pressed=\"true\" android:drawable=\"@drawable/ssdk_oks_classic_platfrom_cell_back_sel\"/>\n\t<item android:drawable=\"@drawable/ssdk_oks_classic_platfrom_cell_back_nor\"/>    \n</selector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ssdk_oks_classic_progressbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\t    android:fromDegrees=\"0\"\n\t    android:pivotX=\"50%\"\n\t    android:pivotY=\"50%\"\n\t    android:toDegrees=\"360\" >\n\t    <shape\n\t        android:innerRadiusRatio=\"3\"\n\t        android:shape=\"ring\"\n\t        android:thicknessRatio=\"8\"\n\t        android:useLevel=\"false\" >\n\t        <gradient\n\t            android:centerColor=\"#12ff0e\"\n\t            android:centerX=\"0.50\"\n\t            android:centerY=\"0.50\"\n\t            android:endColor=\"#09bb07\"\n\t        \tandroid:startColor=\"#ffffff\"\n\t            android:type=\"sweep\"\n\t            android:useLevel=\"false\" />\n\t    </shape>\n</rotate>\n"
  },
  {
    "path": "app/src/main/res/drawable/tv_tags_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:shape=\"rectangle\">\n\n    <solid android:color=\"@color/item_tag_background\" />\n\n    <stroke\n        android:width=\"1dp\"\n        android:color=\"@color/gray_light\" />\n\n    <corners\n        android:bottomLeftRadius=\"@dimen/dp50\"\n        android:bottomRightRadius=\"@dimen/dp50\"\n        android:radius=\"@dimen/dp50\"\n        android:topLeftRadius=\"@dimen/dp50\"\n        android:topRightRadius=\"@dimen/dp50\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/videoplayer_erect_icon_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable-mdpi/anim_video_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animation-list xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:oneshot=\"false\">\n\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_1\"\n        android:duration=\"60\" />\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_3\"\n        android:duration=\"60\" />\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_5\"\n        android:duration=\"60\" />\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_7\"\n        android:duration=\"60\" />\n    <item\n        android:drawable=\"@drawable/bili_anim_tv_chan_9\"\n        android:duration=\"60\" />\n</animation-list>"
  },
  {
    "path": "app/src/main/res/layout/activity_ad.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_toolbar\"/>\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <include layout=\"@layout/common_layout_error\"/>\n\n        <include layout=\"@layout/common_refresh_recycler\"/>\n\n    </RelativeLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_bangumi_detail.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    >\n\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        >\n\n        <android.support.v7.widget.RecyclerView\n            android:id=\"@+id/recycler\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:clipToPadding=\"false\"\n            android:overScrollMode=\"never\"\n            android:scrollbars=\"none\"/>\n\n        <include layout=\"@layout/common_layout_error\"/>\n        <com.yoyiyi.soleil.widget.ProgressWheel\n            android:id=\"@+id/pw_loading\"\n            android:layout_width=\"@dimen/dp50\"\n            android:layout_height=\"@dimen/dp50\"\n            android:layout_centerInParent=\"true\"\n            app:matProg_barColor=\"@color/colorPrimary\"\n            app:matProg_barWidth=\"@dimen/dp4\"\n            app:matProg_fillRadius=\"false\"\n            app:matProg_linearProgress=\"true\"\n            app:matProg_progressIndeterminate=\"true\"/>\n\n    </RelativeLayout>\n\n\n    <android.support.v7.widget.Toolbar\n        android:id=\"@+id/toolbar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp81\"\n        android:fitsSystemWindows=\"false\"\n        android:minHeight=\"?attr/actionBarSize\"\n        android:paddingTop=\"@dimen/statusbar_view_height\"\n        app:contentInsetStart=\"@dimen/dp30\"\n        app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n        app:titleTextAppearance=\"@style/Toolbar.TitleText\">\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"@dimen/text_size_16\"/>\n    </android.support.v7.widget.Toolbar>\n</android.support.design.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_bangumi_schedule.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_toolbar\"/>\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <include layout=\"@layout/common_layout_error\"/>\n\n        <include layout=\"@layout/layout_loading\"/>\n\n        <android.support.v7.widget.RecyclerView\n            android:id=\"@+id/recycler\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:clipToPadding=\"false\"\n            android:overScrollMode=\"never\"\n            android:paddingRight=\"@dimen/dp10\"\n            android:scrollbars=\"none\"/>\n    </RelativeLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_brower.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_toolbar\"/>\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <WebView\n            android:id=\"@+id/web_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:overScrollMode=\"never\"/>\n\n        <include layout=\"@layout/layout_loading\"/>\n    </RelativeLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_game_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_toolbar\"/>\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <include layout=\"@layout/common_layout_error\"/>\n\n        <include layout=\"@layout/layout_loading\"/>\n\n        <android.support.v7.widget.RecyclerView\n            android:id=\"@+id/recycler\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:clipToPadding=\"false\"\n            android:overScrollMode=\"never\"\n            android:scrollbars=\"none\"/>\n    </RelativeLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_interest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\">\n\n    <android.support.design.widget.CoordinatorLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <android.support.design.widget.AppBarLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <android.support.v7.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:background=\"@color/colorPrimary\"\n                android:contentInsetStart=\"0dp\"\n                app:contentInsetStart=\"0dp\"\n                app:layout_scrollFlags=\"scroll|enterAlways|snap\"\n                app:popupTheme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n                app:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\">\n\n                <android.support.constraint.ConstraintLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"?attr/actionBarSize\">\n\n                    <ImageView\n                        android:id=\"@+id/iv_back\"\n                        android:layout_width=\"?attr/actionBarSize\"\n                        android:layout_height=\"match_parent\"\n                        android:scaleType=\"center\"\n                        android:src=\"@drawable/ic_clip_back_white\"/>\n\n                    <TextView\n                        android:id=\"@+id/tv_title\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginStart=\"8dp\"\n                        android:maxLines=\"1\"\n                        android:text=\"兴趣圈\"\n                        android:textColor=\"@color/white\"\n                        android:textSize=\"@dimen/text_size_16\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintHorizontal_bias=\"0.5\"\n                        app:layout_constraintStart_toEndOf=\"@+id/iv_back\"\n                        app:layout_constraintTop_toTopOf=\"parent\"/>\n                </android.support.constraint.ConstraintLayout>\n\n            </android.support.v7.widget.Toolbar>\n\n            <com.flyco.tablayout.SlidingTabLayout\n                android:id=\"@+id/sliding_tabs\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp48\"\n                android:background=\"@color/colorPrimary\"\n                app:tl_indicator_corner_radius=\"@dimen/dp1\"\n                app:tl_indicator_height=\"@dimen/dp2\"\n                app:tl_indicator_width_equal_title=\"true\"\n                app:tl_tab_padding=\"@dimen/dp12\"\n                app:tl_tab_space_equal=\"true\"/>\n        </android.support.design.widget.AppBarLayout>\n\n        <com.yoyiyi.soleil.widget.NoScrollViewPager\n            android:id=\"@+id/view_pager\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:overScrollMode=\"never\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n    </android.support.design.widget.CoordinatorLayout>\n\n</FrameLayout>\n\n"
  },
  {
    "path": "app/src/main/res/layout/activity_live.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:orientation=\"vertical\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\">\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_live_region.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_entrance_toolbar\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_login.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:fitsSystemWindows=\"true\"\n              android:orientation=\"vertical\">\n\n    <android.support.design.widget.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:elevation=\"@dimen/dp0\">\n\n        <android.support.v7.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\"\n            android:background=\"@color/colorPrimary\"\n            app:popupTheme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n            app:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n            app:titleTextAppearance=\"@style/Toolbar.TitleText\"/>\n\n\n    </android.support.design.widget.AppBarLayout>\n\n    <RelativeLayout\n        android:id=\"@+id/rl_logo\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\">\n\n        <ImageView\n            android:id=\"@+id/iv_icon_left\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentStart=\"true\"\n            android:src=\"@drawable/ic_22\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_icon_center\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentTop=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:layout_marginTop=\"@dimen/dp5\"\n            android:src=\"@drawable/ic_bili_logo_2016\"\n            />\n\n        <ImageView\n            android:id=\"@+id/iv_icon_right\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentEnd=\"true\"\n            android:src=\"@drawable/ic_33\"/>\n    </RelativeLayout>\n\n\n    <LinearLayout\n        android:id=\"@+id/login_ll\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginEnd=\"@dimen/dp10\"\n        android:layout_marginStart=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp20\"\n        android:background=\"@drawable/shape_login_input_rounded_bg\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp48\"\n            android:gravity=\"center_vertical\">\n\n            <EditText\n                android:id=\"@+id/et_username\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"match_parent\"\n                android:layout_gravity=\"center_horizontal\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_weight=\"1\"\n                android:background=\"@android:color/transparent\"\n                android:drawablePadding=\"@dimen/dp10\"\n                android:drawableStart=\"@drawable/ic_login_username_default\"\n                android:hint=\"请输入账号\"\n                android:inputType=\"textVisiblePassword\"\n                android:maxLines=\"1\"\n                android:textColor=\"@color/black_80\"\n                android:textColorHint=\"@color/gray_20\"\n                android:textSize=\"@dimen/text_size_16\"/>\n\n            <ImageButton\n                android:id=\"@+id/delete_username\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\"\n                android:background=\"@android:color/transparent\"\n                android:paddingEnd=\"@dimen/dp10\"\n                android:paddingStart=\"@dimen/dp20\"\n                android:src=\"@drawable/ic_edittext_clear\"\n                android:visibility=\"gone\"/>\n        </LinearLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/line_bg\"/>\n\n        <EditText\n            android:id=\"@+id/et_password\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp48\"\n            android:layout_gravity=\"center_horizontal\"\n            android:layout_marginStart=\"@dimen/dp8\"\n            android:background=\"@android:color/transparent\"\n            android:drawablePadding=\"@dimen/dp10\"\n            android:drawableStart=\"@drawable/ic_login_password_default\"\n            android:hint=\"请输入密码\"\n            android:inputType=\"textPassword\"\n            android:maxLines=\"1\"\n            android:textColor=\"@color/black_80\"\n            android:textColorHint=\"@color/gray_20\"\n            android:textSize=\"@dimen/text_size_16\"/>\n    </LinearLayout>\n\n\n    <Button\n        android:id=\"@+id/btn_login\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp45\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp30\"\n        android:background=\"@drawable/shape_corner_btn\"\n        android:gravity=\"center\"\n        android:text=\"登录\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_16\"/>\n\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v4.widget.DrawerLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/mDrawerLayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:openDrawer=\"start\">\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <FrameLayout\n            android:id=\"@+id/flContent\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:fitsSystemWindows=\"false\">\n\n        </FrameLayout>\n    </RelativeLayout>\n\n\n    <android.support.design.widget.NavigationView\n        android:id=\"@+id/navView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\"\n        app:headerLayout=\"@layout/nav_header_main\"\n        app:menu=\"@menu/navigation_main\"/>\n</android.support.v4.widget.DrawerLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_offline_download.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_toolbar\"/>\n\n    <ImageView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:src=\"@drawable/img_tips_error_no_downloads\"\n        app:layout_constraintBottom_toTopOf=\"@+id/tv_no_data\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_no_data\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp30\"\n        android:text=\"没有找到你的缓存\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_all_start\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp15\"\n        android:padding=\"@dimen/dp10\"\n        android:text=\"全部开始\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        />\n\n    <View\n        android:id=\"@+id/v_ver\"\n        android:layout_width=\"1px\"\n        android:layout_height=\"@dimen/dp15\"\n        android:background=\"@color/font_gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/tv_all_start\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_all_start\"\n        app:layout_constraintTop_toTopOf=\"@id/tv_all_start\"/>\n\n    <TextView\n        android:id=\"@+id/tv_edit\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp15\"\n        android:padding=\"@dimen/dp10\"\n        android:text=\"编辑\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/v_ver\"\n        />\n\n    <com.yoyiyi.soleil.widget.progress.NumberProgressBar\n        android:id=\"@+id/progress_bar\"\n        style=\"@style/NumberProgressBar_Beauty_Red\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintBottom_toTopOf=\"@+id/tv_all_start\"\n        app:progress_max=\"100\"\n        app:progress_text_visibility=\"invisible\"/>\n\n\n        <TextView\n            android:paddingLeft=\"@dimen/dp10\"\n            android:id=\"@+id/tv_cache_size\"\n            android:layout_width=\"wrap_content\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_all_start\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:gravity=\"center\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n    <ImageView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/dp10\"\n        android:src=\"@drawable/ic_action_download_refresh\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_region_type.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_entrance_toolbar\"/>\n\n   <!-- <include layout=\"@layout/common_layout_error\"/>-->\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_scrolling.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:context=\"com.yoyiyi.soleil.module.app.video.ScrollingActivity\">\n\n    <android.support.design.widget.AppBarLayout\n        android:id=\"@+id/app_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/app_bar_height\"\n        android:fitsSystemWindows=\"true\"\n        android:theme=\"@style/BaseAppTheme.AppBarOverlay\">\n\n        <android.support.design.widget.CollapsingToolbarLayout\n            android:id=\"@+id/toolbar_layout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:fitsSystemWindows=\"true\"\n            app:contentScrim=\"?attr/colorPrimary\"\n            app:layout_scrollFlags=\"scroll|exitUntilCollapsed\"\n            app:toolbarId=\"@+id/toolbar\">\n\n            <android.support.v7.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"?attr/actionBarSize\"\n                app:layout_collapseMode=\"pin\"\n                app:popupTheme=\"@style/BaseAppTheme.PopupOverlay\"/>\n\n        </android.support.design.widget.CollapsingToolbarLayout>\n    </android.support.design.widget.AppBarLayout>\n\n    <include layout=\"@layout/content_scrolling\"/>\n\n    <android.support.design.widget.FloatingActionButton\n        android:id=\"@+id/fab\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/fab_margin\"\n        app:layout_anchor=\"@id/app_bar\"\n        app:layout_anchorGravity=\"bottom|end\"\n        app:srcCompat=\"@android:drawable/ic_dialog_email\"/>\n\n</android.support.design.widget.CoordinatorLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_search.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n    <include layout=\"@layout/layout_search_view\"/>\n\n    <RelativeLayout\n        android:id=\"@+id/rl_search_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_below=\"@+id/search_card_view\">\n\n        <com.flyco.tablayout.SlidingTabLayout\n            android:id=\"@+id/sliding_tabs\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp48\"\n            android:background=\"@color/gray_light_30\"\n            app:tl_indicator_color=\"@color/colorPrimary\"\n            app:tl_indicator_corner_radius=\"@dimen/dp1\"\n            app:tl_indicator_height=\"@dimen/dp2\"\n            app:tl_indicator_width_equal_title=\"true\"\n            app:tl_tab_space_equal=\"true\"\n            app:tl_textSelectColor=\"@color/colorPrimary\"\n            app:tl_textUnselectColor=\"@color/font_normal\"/>\n\n        <com.yoyiyi.soleil.widget.NoScrollViewPager\n            android:id=\"@+id/view_pager\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_below=\"@id/sliding_tabs\"\n            android:overScrollMode=\"never\">\n\n        </com.yoyiyi.soleil.widget.NoScrollViewPager>\n    </RelativeLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_search_load\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"visible\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_splash.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/ivSplash\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"/>\n\n    <LinearLayout\n        android:id=\"@+id/llCountDown\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_marginEnd=\"@dimen/dp16\"\n        android:layout_marginTop=\"@dimen/dp16\"\n        android:background=\"@drawable/shape_count_down\"\n        android:orientation=\"horizontal\"\n        android:padding=\"@dimen/dp6\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"跳过\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n        <TextView\n            android:id=\"@+id/tvCountDown\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"@dimen/dp10\"\n            android:textColor=\"@color/pink\"\n            android:textSize=\"@dimen/text_size_14\"/>\n    </LinearLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_topic_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_toolbar\"/>\n\n    <include layout=\"@layout/common_refresh_recycler\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_total_search.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n    <include layout=\"@layout/layout_search_view\"/>\n\n    <RelativeLayout\n        android:id=\"@+id/rl_search_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_below=\"@+id/search_card_view\">\n\n        <com.flyco.tablayout.SlidingTabLayout\n            android:id=\"@+id/sliding_tabs\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp48\"\n            android:background=\"@color/gray_light_30\"\n            app:tl_indicator_color=\"@color/colorPrimary\"\n            app:tl_indicator_corner_radius=\"@dimen/dp1\"\n            app:tl_indicator_height=\"@dimen/dp2\"\n            app:tl_indicator_width_equal_title=\"true\"\n            app:tl_tab_space_equal=\"true\"\n            app:tl_textSelectColor=\"@color/colorPrimary\"\n            app:tl_textUnselectColor=\"@color/font_normal\"/>\n\n        <com.yoyiyi.soleil.widget.NoScrollViewPager\n            android:id=\"@+id/view_pager\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_below=\"@id/sliding_tabs\"\n            android:overScrollMode=\"never\">\n\n        </com.yoyiyi.soleil.widget.NoScrollViewPager>\n    </RelativeLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_search_load\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"visible\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_up_detail.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <android.support.design.widget.AppBarLayout\n        android:id=\"@+id/app_bar_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n\n        <android.support.design.widget.CollapsingToolbarLayout\n            android:id=\"@+id/collapsing_toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fitsSystemWindows=\"true\"\n            android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n            app:collapsedTitleTextAppearance=\"@style/Toolbar.TitleText\"\n            app:contentScrim=\"?attr/colorPrimary\"\n            app:expandedTitleTextAppearance=\"@style/CollapsingToolbarTitleStyle.About\"\n            app:layout_scrollFlags=\"scroll|exitUntilCollapsed\">\n\n            <android.support.constraint.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@color/card_view_background\"\n                android:fitsSystemWindows=\"true\">\n\n                <ImageView\n                    android:id=\"@+id/iv_zone_bg\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"@dimen/dp160\"\n                    android:background=\"@drawable/ic_zone_background\"/>\n\n                <com.yoyiyi.soleil.widget.CircleImageView\n                    android:id=\"@+id/iv_avatar\"\n                    android:layout_width=\"@dimen/dp84\"\n                    android:layout_height=\"@dimen/dp84\"\n                    android:layout_marginLeft=\"@dimen/dp10\"\n                    android:layout_marginTop=\"@dimen/dp110\"\n                    app:border_color=\"@android:color/white\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\"\n                    tools:src=\"@drawable/bili_default_avatar\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_uname\"\n                    android:paddingTop=\"@dimen/dp4\"\n                    android:paddingBottom=\"@dimen/dp4\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"@dimen/dp10\"\n                    android:layout_marginTop=\"@dimen/dp10\"\n                    android:textColor=\"@color/font_normal\"\n                    android:textSize=\"@dimen/text_size_16\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/iv_avatar\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_favourite\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"@dimen/dp10\"\n                    android:textColor=\"@color/black_alpha_30\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_fans\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"@dimen/dp10\"\n                    android:textColor=\"@color/black_alpha_30\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    app:layout_constraintStart_toEndOf=\"@id/tv_favourite\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_user_des\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"@dimen/dp10\"\n                    android:paddingRight=\"@dimen/dp10\"\n                    android:textColor=\"@color/black_alpha_30\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    android:layout_marginBottom=\"@dimen/dp10\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/tv_fans\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_pay\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"@dimen/dp10\"\n                    android:layout_marginLeft=\"@dimen/dp10\"\n                    android:layout_marginTop=\"@dimen/dp10\"\n                    android:background=\"@drawable/shape_tv_electricize\"\n                    android:paddingBottom=\"@dimen/dp3\"\n                    android:paddingLeft=\"@dimen/dp6\"\n                    android:paddingRight=\"@dimen/dp6\"\n                    android:paddingTop=\"@dimen/dp3\"\n                    android:text=\"关注\"\n                    android:textColor=\"@color/white\"\n                    android:textSize=\"@dimen/text_size_16\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/iv_zone_bg\"\n                    />\n\n                <TextView\n                    android:id=\"@+id/tv_letter\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"@dimen/dp15\"\n                    android:layout_marginLeft=\"@dimen/dp10\"\n                    android:layout_marginTop=\"@dimen/dp10\"\n                    android:background=\"@drawable/shape_tv_favourite\"\n                    android:paddingBottom=\"@dimen/dp3\"\n                    android:paddingLeft=\"@dimen/dp6\"\n                    android:paddingRight=\"@dimen/dp6\"\n                    android:paddingTop=\"@dimen/dp3\"\n                    android:text=\"私信\"\n                    android:textColor=\"@color/pink_text_color\"\n                    android:textSize=\"@dimen/text_size_16\"\n                    app:layout_constraintEnd_toStartOf=\"@+id/tv_pay\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/iv_zone_bg\"\n\n                    />\n\n            </android.support.constraint.ConstraintLayout>\n\n            <android.support.v7.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"?attr/actionBarSize\"\n                android:minHeight=\"?attr/actionBarSize\"\n                app:layout_collapseMode=\"pin\"\n                app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n                app:titleTextAppearance=\"@style/Toolbar.TitleText\"/>\n        </android.support.design.widget.CollapsingToolbarLayout>\n\n        <View\n            android:id=\"@+id/line\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:layout_gravity=\"bottom\"\n            android:background=\"@color/gray_light\"/>\n\n        <com.flyco.tablayout.SlidingTabLayout\n            android:id=\"@+id/sliding_tabs\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp40\"\n            android:layout_gravity=\"center_horizontal\"\n            android:background=\"@color/white_80\"\n            app:tl_indicator_color=\"@color/bili_logo_pink_color\"\n            app:tl_indicator_corner_radius=\"@dimen/dp2\"\n            app:tl_indicator_height=\"@dimen/dp3\"\n            app:tl_indicator_width_equal_title=\"true\"\n            app:tl_tab_padding=\"@dimen/dp10\"\n            app:tl_tab_space_equal=\"false\"\n            app:tl_textSelectColor=\"@color/pink_text_color\"\n            app:tl_textUnselectColor=\"@color/font_normal\"/>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/white_80\"/>\n    </android.support.design.widget.AppBarLayout>\n    <com.yoyiyi.soleil.widget.ProgressWheel\n        android:id=\"@+id/pw_loading\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp50\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n        app:matProg_barColor=\"@color/colorPrimary\"\n        app:matProg_barWidth=\"@dimen/dp4\"\n        app:matProg_fillRadius=\"false\"\n        app:matProg_linearProgress=\"true\"\n        app:matProg_progressIndeterminate=\"true\"/>\n    <android.support.v4.view.ViewPager\n        android:id=\"@+id/view_pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:overScrollMode=\"never\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n\n</android.support.design.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_video_detail.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <android.support.design.widget.CoordinatorLayout\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/coordinatorLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n\n        <android.support.design.widget.AppBarLayout\n            android:id=\"@+id/app_bar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fitsSystemWindows=\"true\"\n            android:theme=\"@style/AppTheme.AppBarOverlay\">\n\n            <android.support.design.widget.CollapsingToolbarLayout\n                android:id=\"@+id/toolbar_layout\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp226\"\n                android:fitsSystemWindows=\"true\"\n                app:contentScrim=\"?attr/colorPrimary\"\n                app:layout_scrollFlags=\"scroll|exitUntilCollapsed|snap\"\n                app:statusBarScrim=\"@android:color/transparent\">\n                <!--设置遮罩层-->\n                <View\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"40dp\"\n                    android:background=\"@drawable/shape_gradient\"\n                    android:fitsSystemWindows=\"true\"\n                    />\n                <!--封面图片-->\n                <ImageView\n                    android:id=\"@+id/iv_video_preview\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"match_parent\"\n                    android:fitsSystemWindows=\"true\"\n                    android:scaleType=\"fitXY\"\n                    app:layout_collapseMode=\"parallax\"\n                    app:layout_collapseParallaxMultiplier=\"0.7\"/>\n                <!--视频及弹幕控件-->\n                <FrameLayout\n                    android:id=\"@+id/video_danmu\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"match_parent\"\n                    android:fitsSystemWindows=\"true\"\n                    android:visibility=\"gone\"\n                    app:layout_collapseMode=\"parallax\"\n                    app:layout_collapseParallaxMultiplier=\"0.7\">\n                    <!--ijk播放器-->\n                    <VideoView\n                        android:id=\"@+id/video_view\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\"\n                        />\n                    <!--哔哩哔哩开源的弹幕控件-->\n                    <master.flame.danmaku.ui.widget.DanmakuView\n                        android:id=\"@+id/danmaku\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\"/>\n                </FrameLayout>\n\n                <android.support.v7.widget.Toolbar\n                    android:id=\"@+id/toolbar\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"?attr/actionBarSize\"\n                    app:contentInsetStart=\"@dimen/dp0\"\n                    app:layout_collapseMode=\"pin\"\n                    app:popupTheme=\"@style/AppTheme.PopupOverlay\">\n\n                    <RelativeLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\">\n\n\n                        <ImageView\n                            android:id=\"@+id/iv_back\"\n                            android:layout_width=\"?attr/actionBarSize\"\n                            android:layout_height=\"match_parent\"\n                            android:scaleType=\"center\"\n                            android:src=\"@drawable/ic_clip_back_white\"\n                            android:visibility=\"visible\"/>\n\n                        <TextView\n                            android:id=\"@+id/tv_title\"\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_centerVertical=\"true\"\n                            android:layout_marginStart=\"8dp\"\n                            android:layout_toEndOf=\"@+id/iv_back\"\n                            android:maxLines=\"1\"\n                            android:text=\"av565648852256\"\n                            android:textColor=\"@color/white\"\n                            android:textSize=\"@dimen/text_size_16\"\n                            android:visibility=\"visible\"\n                            />\n                        <!--自定义带图片的立即播放按钮-->\n                        <android.support.v7.widget.ButtonBarLayout\n                            android:id=\"@+id/bbl_play\"\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"match_parent\"\n                            android:gravity=\"center\"\n                            android:visibility=\"visible\">\n\n\n                            <ImageView\n                                android:id=\"@+id/iv_play\"\n                                android:layout_width=\"wrap_content\"\n                                android:layout_height=\"match_parent\"\n                                android:src=\"@drawable/ic_tv_play\"/>\n\n                            <TextView\n                                android:id=\"@+id/tv_paly\"\n                                android:layout_width=\"wrap_content\"\n                                android:layout_height=\"wrap_content\"\n                                android:layout_gravity=\"center_vertical\"\n                                android:text=\"立即播放\"\n                                android:textColor=\"#ffffff\"\n                                />\n                        </android.support.v7.widget.ButtonBarLayout>\n                    </RelativeLayout>\n\n                </android.support.v7.widget.Toolbar>\n\n\n            </android.support.design.widget.CollapsingToolbarLayout>\n\n            <com.flyco.tablayout.SlidingTabLayout\n                android:id=\"@+id/sliding_tabs\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp40\"\n                android:layout_gravity=\"center_horizontal\"\n                android:background=\"@color/white_80\"\n                app:tl_indicator_color=\"@color/bili_logo_pink_color\"\n                app:tl_indicator_corner_radius=\"@dimen/dp2\"\n                app:tl_indicator_height=\"@dimen/dp3\"\n                app:tl_indicator_width_equal_title=\"true\"\n                app:tl_tab_space_equal=\"false\"\n                app:tl_textSelectColor=\"@color/pink_text_color\"\n                app:tl_textUnselectColor=\"@color/font_normal\"/>\n\n            <View\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp1\"\n                android:background=\"@color/white_80\"/>\n        </android.support.design.widget.AppBarLayout>\n\n        <android.support.v4.widget.NestedScrollView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:fillViewport=\"true\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n\n            <android.support.v4.view.ViewPager\n                android:id=\"@+id/view_pager\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:scrollbars=\"none\"\n                />\n        </android.support.v4.widget.NestedScrollView>\n\n        <!--<android.support.design.widget.FloatingActionButton\n            android:id=\"@+id/fab\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"@dimen/fab_margin\"\n            app:layout_anchor=\"@id/app_bar\"\n            app:layout_anchorGravity=\"bottom|end\"\n            app:srcCompat=\"@android:drawable/ic_dialog_email\"/>-->\n        <android.support.design.widget.FloatingActionButton\n            android:id=\"@+id/fab\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"@dimen/dp16\"\n            android:layout_marginTop=\"@dimen/dp190\"\n            android:src=\"@drawable/ic_fab_play\"\n            app:backgroundTint=\"@color/colorPrimary\"\n            app:layout_anchor=\"@id/app_bar\"\n            app:layout_anchorGravity=\"bottom|end|right\"/>\n    </android.support.design.widget.CoordinatorLayout>\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_video_detail1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\">\n\n    <android.support.design.widget.CoordinatorLayout\n        android:id=\"@+id/main_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:fitsSystemWindows=\"true\">\n\n        <android.support.design.widget.AppBarLayout\n            android:id=\"@+id/app_bar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fitsSystemWindows=\"true\">\n\n            <android.support.design.widget.CollapsingToolbarLayout\n                android:id=\"@+id/collapsing_toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp226\"\n                android:fitsSystemWindows=\"true\"\n                android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n                app:contentScrim=\"?attr/colorPrimary\"\n                app:expandedTitleTextAppearance=\"@style/CollapsingToolbarTitleStyle.About\"\n                app:layout_scrollFlags=\"scroll|exitUntilCollapsed\">\n\n                <FrameLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"@dimen/dp226\"\n                    android:background=\"@color/window_background\"\n                    android:fitsSystemWindows=\"true\"\n                    android:gravity=\"center\">\n\n                    <ImageView\n                        android:id=\"@+id/iv_video_preview\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\"\n                        android:scaleType=\"center\"/>\n\n                    <View\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"@dimen/dp128\"\n                        android:layout_gravity=\"top\"\n                        android:background=\"@drawable/shape_gradient\"/>\n\n                </FrameLayout>\n\n                <android.support.v7.widget.Toolbar\n                    android:id=\"@+id/toolbar\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"?attr/actionBarSize\"\n                    android:minHeight=\"?attr/actionBarSize\"\n                    app:contentInsetStart=\"@dimen/dp0\"\n                    app:layout_collapseMode=\"pin\"\n                    app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n                    app:titleTextAppearance=\"@style/Toolbar.TitleText\">\n\n                    <RelativeLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\">\n\n                        <ImageView\n                            android:id=\"@+id/iv_back\"\n                            android:layout_width=\"?attr/actionBarSize\"\n                            android:layout_height=\"match_parent\"\n                            android:scaleType=\"center\"\n                            android:src=\"@drawable/ic_clip_back_white\"\n                            android:visibility=\"visible\"/>\n\n                        <TextView\n                            android:id=\"@+id/tv_av\"\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_centerVertical=\"true\"\n                            android:layout_toRightOf=\"@id/iv_back\"\n                            android:gravity=\"center\"\n                            android:text=\"av156853285\"\n                            android:textColor=\"@color/white\"\n                            android:textSize=\"@dimen/text_size_16\"\n                            android:visibility=\"visible\"/>\n\n\n                        <TextView\n                            android:id=\"@+id/tv_player\"\n                            android:layout_width=\"wrap_content\"\n                            android:layout_height=\"match_parent\"\n                            android:layout_centerInParent=\"true\"\n                            android:drawablePadding=\"@dimen/dp3\"\n                            android:drawableStart=\"@drawable/ic_fab_play\"\n                            android:gravity=\"center\"\n                            android:text=\"立即播放\"\n                            android:textColor=\"@color/white\"\n                            android:textSize=\"@dimen/text_size_18\"\n                            android:visibility=\"visible\"/>\n\n\n                    </RelativeLayout>\n\n                </android.support.v7.widget.Toolbar>\n\n            </android.support.design.widget.CollapsingToolbarLayout>\n\n            <com.flyco.tablayout.SlidingTabLayout\n                android:id=\"@+id/sliding_tabs\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp40\"\n                android:layout_gravity=\"center_horizontal\"\n                android:background=\"@color/white_80\"\n                app:tl_indicator_color=\"@color/bili_logo_pink_color\"\n                app:tl_indicator_corner_radius=\"@dimen/dp2\"\n                app:tl_indicator_height=\"@dimen/dp3\"\n                app:tl_indicator_width_equal_title=\"true\"\n                app:tl_tab_space_equal=\"false\"\n                app:tl_textSelectColor=\"@color/pink_text_color\"\n                app:tl_textUnselectColor=\"@color/font_normal\"/>\n\n            <View\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp1\"\n                android:background=\"@color/white_80\"/>\n\n        </android.support.design.widget.AppBarLayout>\n\n\n        <com.yoyiyi.soleil.widget.ProgressWheel\n            android:id=\"@+id/pw_loading\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp50\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n            app:matProg_barColor=\"@color/colorPrimary\"\n            app:matProg_barWidth=\"@dimen/dp4\"\n            app:matProg_fillRadius=\"false\"\n            app:matProg_linearProgress=\"true\"\n            app:matProg_progressIndeterminate=\"true\"/>\n\n        <android.support.v4.view.ViewPager\n            android:id=\"@+id/view_pager\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:overScrollMode=\"never\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n\n\n    </android.support.design.widget.CoordinatorLayout>\n\n\n    <android.support.design.widget.FloatingActionButton\n        android:id=\"@+id/fab\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"end\"\n        android:layout_marginEnd=\"@dimen/dp16\"\n        android:layout_marginTop=\"@dimen/dp190\"\n        android:src=\"@drawable/ic_fab_play\"\n        app:backgroundTint=\"@color/colorPrimary\"\n        app:elevation=\"@dimen/dp4\"\n        app:layout_anchor=\"@id/app_bar\"\n        app:layout_anchorGravity=\"bottom|right|end\"\n        app:pressedTranslationZ=\"@dimen/dp4\"\n        app:rippleColor=\"@color/colorPrimaryDark\"/>\n\n\n</FrameLayout>\n\n\n\n\n"
  },
  {
    "path": "app/src/main/res/layout/activity_video_player.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\"\n             android:fitsSystemWindows=\"true\"\n             android:orientation=\"vertical\">\n\n    <com.yoyiyi.soleil.media.VideoPlayerView\n        android:id=\"@+id/palyer_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"center\"/>\n\n    <master.flame.danmaku.ui.widget.DanmakuView\n        android:id=\"@+id/danmaku\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"center\"/>\n\n    <RelativeLayout\n        android:id=\"@+id/rl_loading\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <com.yoyiyi.soleil.widget.ProgressWheel\n            android:id=\"@+id/pw_loading\"\n            android:layout_width=\"@dimen/dp56\"\n            android:layout_height=\"@dimen/dp56\"\n            android:layout_alignParentTop=\"true\"\n            android:layout_centerInParent=\"true\"\n            app:matProg_barColor=\"?attr/colorPrimary\"\n            app:matProg_barWidth=\"@dimen/dp4\"\n            app:matProg_progressIndeterminate=\"true\"/>\n\n        <TextView\n            android:id=\"@+id/tv_loading\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@+id/pw_loading\"\n            android:layout_centerHorizontal=\"true\"\n            android:paddingTop=\"@dimen/dp10\"\n            android:text=\"加载中...\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"@dimen/text_size_16\"/>\n\n    </RelativeLayout>\n\n    <RelativeLayout\n        android:id=\"@+id/rl_start\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"center\"\n        android:background=\"@color/white_30\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:id=\"@+id/iv_bili_loading\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerHorizontal=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"@drawable/anim_video_loading\"/>\n\n        <TextView\n            android:id=\"@+id/tv_start\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentBottom=\"true\"\n            android:text=\"初始化播放器...\"\n            android:textColor=\"@android:color/black\"\n            android:textSize=\"@dimen/text_size_12\"/>\n    </RelativeLayout>\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_vip.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <android.support.design.widget.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\">\n\n        <android.support.design.widget.CollapsingToolbarLayout\n            android:id=\"@+id/collapsing_toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp330\"\n            android:fitsSystemWindows=\"true\"\n            android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n            app:collapsedTitleTextAppearance=\"@style/Toolbar.TitleText\"\n            app:contentScrim=\"?attr/colorPrimary\"\n            app:expandedTitleTextAppearance=\"@style/CollapsingToolbarTitleStyle.About\"\n            app:layout_scrollFlags=\"scroll|exitUntilCollapsed|snap\">\n\n            <android.support.constraint.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:background=\"@drawable/ic_vip_header_bg\"\n                android:fitsSystemWindows=\"true\">\n\n                <LinearLayout\n                    android:id=\"@+id/ll_msg\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"@dimen/dp16\"\n                    android:gravity=\"center\"\n                    android:orientation=\"horizontal\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintHorizontal_bias=\"0.5\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/iv_vip\">\n\n                    <TextView\n                        android:id=\"@+id/tv_msg1\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"您还不是\"\n                        android:textColor=\"@color/white\"\n                        android:textSize=\"@dimen/text_size_14\"/>\n\n                    <TextView\n                        android:id=\"@+id/tv_msg2\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"大会员\"\n                        android:textColor=\"@color/white\"\n                        android:textSize=\"@dimen/text_size_20\"/>\n\n                    <TextView\n                        android:id=\"@+id/tv_msg3\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:text=\"哦\"\n                        android:textColor=\"@color/white\"\n                        android:textSize=\"@dimen/text_size_14\"/>\n                </LinearLayout>\n\n                <ImageView\n                    android:id=\"@+id/iv_vip\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_alignParentTop=\"true\"\n                    android:layout_centerInParent=\"true\"\n                    android:paddingTop=\"@dimen/dp30\"\n                    android:src=\"@drawable/ic_vip_open\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintHorizontal_bias=\"0.5\"\n                    app:layout_constraintStart_toStartOf=\"parent\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_msg4\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"黑科技在召唤\"\n                    android:textColor=\"@color/white\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintHorizontal_bias=\"0.5\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/ll_msg\"/>\n\n                <Button\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"@dimen/dp35\"\n                    android:layout_alignParentBottom=\"true\"\n                    android:layout_centerInParent=\"true\"\n                    android:layout_margin=\"@dimen/dp10\"\n                    android:background=\"@drawable/shape_vip_btn_bg\"\n                    android:text=\"立即开通\"\n                    android:textColor=\"@color/vip_button_text_color\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"/>\n            </android.support.constraint.ConstraintLayout>\n\n            <android.support.v7.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"?attr/actionBarSize\"\n                android:minHeight=\"?attr/actionBarSize\"\n                app:contentInsetStart=\"@dimen/dp30\"\n                app:layout_collapseMode=\"pin\"\n                app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n                app:titleTextAppearance=\"@style/Toolbar.TitleText\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"大会员\"\n                    android:textColor=\"@color/white\"\n                    android:textSize=\"@dimen/text_size_16\"/>\n            </android.support.v7.widget.Toolbar>\n        </android.support.design.widget.CollapsingToolbarLayout>\n    </android.support.design.widget.AppBarLayout>\n\n    <android.support.v4.widget.NestedScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:overScrollMode=\"never\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n\n        <WebView\n            android:id=\"@+id/web_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:overScrollMode=\"never\"\n            android:scrollbars=\"none\"/>\n    </android.support.v4.widget.NestedScrollView>\n</android.support.design.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/app_bar_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\">\n\n    <include layout=\"@layout/layout_main_toolbar\"/>\n</FrameLayout>\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/res/layout/common_entrance_toolbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\">\n\n    <android.support.design.widget.CoordinatorLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <android.support.design.widget.AppBarLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <android.support.v7.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:background=\"@color/colorPrimary\"\n                android:contentInsetStart=\"0dp\"\n                app:contentInsetStart=\"0dp\"\n                app:layout_scrollFlags=\"scroll|enterAlways|snap\"\n                app:popupTheme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n                app:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\">\n\n                <android.support.constraint.ConstraintLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"?attr/actionBarSize\">\n\n                    <ImageView\n                        android:id=\"@+id/iv_back\"\n                        android:layout_width=\"?attr/actionBarSize\"\n                        android:layout_height=\"match_parent\"\n                        android:scaleType=\"center\"\n                        android:src=\"@drawable/ic_clip_back_white\"/>\n\n                    <TextView\n                        android:id=\"@+id/tv_title\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginStart=\"8dp\"\n                        android:maxLines=\"1\"\n                        android:text=\"直播\"\n                        android:textColor=\"@color/white\"\n                        android:textSize=\"@dimen/text_size_16\"\n                        app:layout_constraintBottom_toBottomOf=\"parent\"\n                        app:layout_constraintHorizontal_bias=\"0.5\"\n                        app:layout_constraintStart_toEndOf=\"@+id/iv_back\"\n                        app:layout_constraintTop_toTopOf=\"parent\"/>\n                </android.support.constraint.ConstraintLayout>\n\n            </android.support.v7.widget.Toolbar>\n\n            <com.flyco.tablayout.SlidingTabLayout\n                android:id=\"@+id/sliding_tabs\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp48\"\n                android:background=\"@color/colorPrimary\"\n                app:tl_indicator_corner_radius=\"@dimen/dp1\"\n                app:tl_indicator_height=\"@dimen/dp2\"\n                app:tl_indicator_width_equal_title=\"true\"\n                app:tl_tab_padding=\"@dimen/dp12\"\n                app:tl_tab_space_equal=\"false\"/>\n        </android.support.design.widget.AppBarLayout>\n\n        <com.yoyiyi.soleil.widget.NoScrollViewPager\n            android:id=\"@+id/view_pager\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:overScrollMode=\"never\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n    </android.support.design.widget.CoordinatorLayout>\n\n</FrameLayout>\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/res/layout/common_item_recycler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"wrap_content\"\n             android:layout_marginRight=\"@dimen/dp10\"\n            >\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:overScrollMode=\"never\"\n        android:scrollbars=\"none\"/>\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/common_layout_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_error\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:layout_centerInParent=\"true\"\n    android:orientation=\"vertical\"\n    android:visibility=\"gone\">\n\n    <ImageView\n        android:id=\"@+id/iv_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/img_tips_error_load_error\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp8\"\n        android:text=\"电波无法到达呦\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/iv_error\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/common_recycler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\"\n            >\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:overScrollMode=\"never\"\n        android:scrollbars=\"none\"/>\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/common_refresh_recycler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v4.widget.SwipeRefreshLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/refresh\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:overScrollMode=\"never\"\n        android:scrollbars=\"none\"/>\n</android.support.v4.widget.SwipeRefreshLayout>"
  },
  {
    "path": "app/src/main/res/layout/common_toolbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n       android:layout_width=\"match_parent\"\n       android:layout_height=\"wrap_content\">\n\n    <android.support.design.widget.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:theme=\"@style/AppTheme.AppBarOverlay\"\n        app:elevation=\"@dimen/dp0\">\n\n        <android.support.v7.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"?attr/colorPrimary\"\n            app:popupTheme=\"@style/ToolbarPopupTheme\"\n            app:titleTextAppearance=\"@style/Toolbar.TitleText\">\n        </android.support.v7.widget.Toolbar>\n    </android.support.design.widget.AppBarLayout>\n</merge>\n"
  },
  {
    "path": "app/src/main/res/layout/content_scrolling.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v4.widget.NestedScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n    tools:context=\"com.yoyiyi.soleil.module.app.video.ScrollingActivity\"\n    tools:showIn=\"@layout/activity_scrolling\">\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/text_margin\"\n        android:text=\"@string/large_text\"/>\n\n</android.support.v4.widget.NestedScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_comment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:orientation=\"vertical\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\">\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:scrollbars=\"none\"/>\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_game_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n    <com.yoyiyi.soleil.widget.ProgressWheel\n        android:id=\"@+id/pw_loading\"\n        android:layout_width=\"@dimen/dp50\"\n        android:layout_height=\"@dimen/dp50\"\n        android:layout_centerInParent=\"true\"\n        app:matProg_barColor=\"@color/colorPrimary\"/>\n\n    <include layout=\"@layout/common_recycler\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp120\"\n        android:layout_centerHorizontal=\"true\"\n        android:src=\"@drawable/ic_group_dynamic_empty\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home_chase_bangumi.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:background=\"@color/white\"\n                android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n    <include layout=\"@layout/common_refresh_recycler\"/>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home_discover.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v4.widget.NestedScrollView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:overScrollMode=\"never\"\n    android:paddingBottom=\"@dimen/dp10\"\n    android:scrollbars=\"none\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\">\n\n        <android.support.v7.widget.CardView\n            android:id=\"@+id/card_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp45\"\n            android:layout_marginLeft=\"@dimen/dp10\"\n            android:layout_marginRight=\"@dimen/dp10\"\n            android:layout_marginTop=\"@dimen/dp10\"\n            app:cardBackgroundColor=\"@color/card_view_background\"\n            app:cardCornerRadius=\"@dimen/dp1\"\n            app:cardElevation=\"@dimen/dp0\">\n\n\n            <ImageView\n                android:id=\"@+id/iv_search_scan\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center|start\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_hint_search\"\n                android:tint=\"@color/gray_20\"/>\n\n            <TextView\n                android:id=\"@+id/tv_search_edit\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:layout_gravity=\"center|end\"\n                android:layout_marginStart=\"@dimen/dp40\"\n                android:background=\"@color/card_view_background\"\n                android:gravity=\"center_vertical\"\n                android:maxLines=\"1\"\n                android:text=\"搜索视频、番剧、up主或av号\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_search_code\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center|end\"\n                android:clickable=\"true\"\n                android:padding=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_scan\"\n                android:tint=\"@color/gray_20\"/>\n        </android.support.v7.widget.CardView>\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"@dimen/dp10\"\n            android:text=\"大家都在搜\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n        <com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout\n            android:id=\"@+id/tags_layout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"@dimen/dp5\"\n            android:layout_marginStart=\"@dimen/dp5\"\n            app:max_select=\"-1\"/>\n\n        <android.support.v4.widget.NestedScrollView\n            android:id=\"@+id/hide_scroll_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"200dp\"\n            android:overScrollMode=\"never\"\n            android:visibility=\"gone\">\n\n\n            <com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout\n                android:id=\"@+id/hide_tags_layout\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/dp5\"\n                android:layout_marginStart=\"@dimen/dp5\"\n                app:max_select=\"-1\"/>\n\n        </android.support.v4.widget.NestedScrollView>\n\n        <LinearLayout\n            android:id=\"@+id/ll_more\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp10\"\n            android:clickable=\"true\"\n            android:gravity=\"center\"\n            android:orientation=\"horizontal\">\n\n            <View\n                android:layout_width=\"@dimen/dp0\"\n                android:layout_height=\"@dimen/dp1\"\n                android:layout_marginStart=\"@dimen/dp30\"\n                android:layout_weight=\"1\"\n                android:background=\"@color/gray_light\"/>\n\n            <TextView\n                android:id=\"@+id/tv_more\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawablePadding=\"@dimen/dp5\"\n                android:drawableStart=\"@drawable/ic_arrow_down_gray_round\"\n                android:gravity=\"center\"\n                android:paddingEnd=\"@dimen/dp5\"\n                android:paddingStart=\"@dimen/dp5\"\n                android:text=\"查看更多\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_12\"/>\n\n            <View\n                android:layout_width=\"@dimen/dp0\"\n                android:layout_height=\"@dimen/dp1\"\n                android:layout_marginEnd=\"@dimen/dp30\"\n                android:layout_weight=\"1\"\n                android:background=\"@color/gray_light\"/>\n\n\n        </LinearLayout>\n\n\n        <RelativeLayout\n            android:id=\"@+id/rl_group\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:layout_marginTop=\"@dimen/dp20\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_group\"\n                android:layout_width=\"26dp\"\n                android:layout_height=\"26dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_group\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_group\"\n                android:text=\"兴趣圈\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n        <RelativeLayout\n            android:id=\"@+id/rl_topic_center\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_topic_center\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_header_topic_center\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_topic_center\"\n                android:text=\"话题中心\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n        <RelativeLayout\n            android:id=\"@+id/rl_activity_center\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_activity_center\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_header_activity_center\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_activity_center\"\n                android:text=\"活动中心\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n        <RelativeLayout\n            android:id=\"@+id/rl_black_list\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_black_list\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_header_black_list_center\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_black_list\"\n                android:text=\"小黑屋\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n        </RelativeLayout>\n\n        <RelativeLayout\n            android:id=\"@+id/rl_rank_original\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:layout_marginTop=\"@dimen/dp20\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_rank_original\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_btn_rank_original\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_rank_original\"\n                android:text=\"原创排行榜\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n        <RelativeLayout\n            android:id=\"@+id/rl_rank_all\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_rank_all\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_btn_rank_all\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_rank_all\"\n                android:text=\"全区排行榜\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n\n        <RelativeLayout\n            android:id=\"@+id/rl_game\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:layout_marginTop=\"@dimen/dp20\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_game\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_btn_game\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_game\"\n                android:text=\"游戏中心\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n        <RelativeLayout\n            android:id=\"@+id/rl_mall\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"46dp\"\n            android:background=\"@color/card_view_background\"\n            android:foreground=\"?attr/selectableItemBackground\">\n\n            <ImageView\n                android:id=\"@+id/iv_mall\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_btn_shop\"/>\n\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:layout_toEndOf=\"@+id/iv_mall\"\n                android:text=\"周边商城\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"/>\n        </RelativeLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp1\"\n            android:background=\"@color/window_background\"/>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp60\"/>\n    </LinearLayout>\n</android.support.v4.widget.NestedScrollView>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home_dynamic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintGuide_begin=\"40dp\"/>\n\n    <TextView\n        android:id=\"@+id/tv_follow\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"10dp\"\n        android:text=\"关注\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/guideline\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_bias=\"0.5\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_all\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"@dimen/dp40\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/guideline\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_bias=\"0.5\">\n\n        <TextView\n            android:id=\"@+id/tv_all\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:layout_marginRight=\"@dimen/dp6\"\n            android:layout_marginTop=\"8dp\"\n            android:text=\"全部\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toStartOf=\"@+id/iv_all\"\n            app:layout_constraintRight_toRightOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_bias=\"0.5\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_all\"\n            android:layout_width=\"@dimen/dp14\"\n            android:layout_height=\"@dimen/dp14\"\n            android:layout_marginRight=\"10dp\"\n            android:src=\"@drawable/ic_bangumi_index_filter\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintRight_toRightOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_bias=\"0.5\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <View\n        android:id=\"@+id/v_bottom\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:background=\"@color/black_alpha_60\"\n        app:layout_constraintTop_toBottomOf=\"@+id/cl_all\"/>\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_bottom\">\n\n        <include layout=\"@layout/common_layout_error\"/>\n\n        <include layout=\"@layout/common_refresh_recycler\"/>\n    </RelativeLayout>\n\n    <com.yoyiyi.soleil.widget.expand.ExpandableLayout\n        android:id=\"@+id/expand\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/white_30\"\n        app:el_expanded=\"false\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_bottom\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <TextView\n                android:id=\"@+id/tv_all_select\"\n                android:layout_width=\"@dimen/dp0\"\n                android:layout_height=\"@dimen/dp40\"\n                android:layout_weight=\"1\"\n                android:clickable=\"true\"\n                android:gravity=\"center\"\n                android:text=\"全部\"\n                android:textColor=\"@color/selector_tv_follow\"\n                android:textSize=\"@dimen/text_size_13\"/>\n\n            <TextView\n                android:id=\"@+id/tv_up_select\"\n                android:layout_width=\"@dimen/dp0\"\n                android:layout_height=\"@dimen/dp30\"\n                android:layout_weight=\"1\"\n                android:clickable=\"true\"\n                android:gravity=\"center\"\n                android:text=\"UP主\"\n                android:textColor=\"@color/selector_tv_follow\"\n                android:textSize=\"@dimen/text_size_13\"/>\n\n            <TextView\n                android:id=\"@+id/tv_bangumi_select\"\n                android:layout_width=\"@dimen/dp0\"\n                android:layout_height=\"@dimen/dp30\"\n                android:layout_weight=\"1\"\n                android:clickable=\"true\"\n                android:gravity=\"center\"\n                android:text=\"番剧\"\n                android:textColor=\"@color/selector_tv_follow\"\n                android:textSize=\"@dimen/text_size_13\"/>\n        </LinearLayout>\n    </com.yoyiyi.soleil.widget.expand.ExpandableLayout>\n\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home_live.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n\n    <include layout=\"@layout/common_refresh_recycler\"/>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home_recommend.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:id=\"@+id/rl_head\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <TextView\n            android:id=\"@+id/tv_all\"\n            android:text=\"综合\"\n            android:padding=\"@dimen/dp10\"\n            android:textSize=\"@dimen/text_size_14\"\n            android:textColor=\"@color/font_gray\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"/>\n        <View\n            android:layout_below=\"@+id/tv_all\"\n            android:background=\"@color/line_bg\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"1px\"/>\n        <ImageView\n            android:id=\"@+id/ivRank\"\n            android:layout_marginTop=\"@dimen/dp10\"\n            android:src=\"@drawable/ic_index_rank\"\n            android:tint=\"@color/pink\"\n            android:layout_toLeftOf=\"@+id/iv_tags\"\n            android:layout_width=\"@dimen/dp22\"\n            android:layout_height=\"@dimen/dp22\"/>\n        <ImageView\n            android:id=\"@+id/iv_tags\"\n            android:src=\"@drawable/ic_index_attention\"\n            android:tint=\"@color/pink\"\n          android:layout_margin=\"@dimen/dp10\"\n            android:layout_alignParentEnd=\"true\"\n            android:layout_width=\"@dimen/dp22\"\n            android:layout_height=\"@dimen/dp22\"/>\n    </RelativeLayout>\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n    <FrameLayout\n        android:layout_below=\"@id/rl_head\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginLeft=\"@dimen/dp10\">\n\n        <include layout=\"@layout/common_refresh_recycler\"/>\n    </FrameLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_home_region.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\"\n                android:paddingBottom=\"@dimen/dp10\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_interest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_refresh_recycler\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_main_home.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <include layout=\"@layout/layout_main_toolbar\"/>\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_mine.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:orientation=\"vertical\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\">\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_region_type.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:paddingTop=\"@dimen/dp10\"\n                android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_refresh_recycler\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_region_type_recommend.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_layout_error\"/>\n\n\n    <include layout=\"@layout/common_refresh_recycler\"/>\n\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_search_archive.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\"\n                android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_search_load\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"visible\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_search_movie.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\"\n                android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_search_load\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"visible\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_search_season.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\"\n                android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_search_load\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"visible\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_search_up.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\"\n                android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_search_load\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"visible\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_summary.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\">\n    <include layout=\"@layout/common_recycler\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_archive.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_bangumi.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_coins_video.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_favourite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_group.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_play_games.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_up_submited_video.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:orientation=\"vertical\">\n\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_error\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:src=\"@drawable/img_tips_error_load_error\"\n            app:layout_constraintBottom_toTopOf=\"@+id/tv_error\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_error\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"电波无法到达呦\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_empty\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_marginTop=\"@dimen/dp40\"\n        android:src=\"@drawable/img_tips_error_space_no_permission\"/>\n\n    <include layout=\"@layout/common_layout_error\"/>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_activity_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_margin=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_state\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"@dimen/dp20\"\n            android:scaleType=\"center\"\n            android:src=\"@drawable/ic_badge_going\"\n            app:layout_constraintEnd_toEndOf=\"@id/iv_preview\"\n            app:layout_constraintTop_toTopOf=\"@id/iv_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"1\"\n            android:minLines=\"1\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_preview\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/item_all_region.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"135dp\"\n    android:padding=\"@dimen/dp10\">\n\n    <TextView\n        android:id=\"@+id/tv_rank\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:maxWidth=\"@dimen/dp15\"\n        android:minWidth=\"@dimen/dp15\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:padding=\"@dimen/dp4\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp120\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintDimensionRatio=\"4:3\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_rank\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:ellipsize=\"end\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:minLines=\"2\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_up\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginBottom=\"@dimen/dp4\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_up\"\n        app:layout_constraintBottom_toTopOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_up\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_up\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_up\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_video_play_num\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:src=\"@drawable/ic_upper_info_views\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:maxEms=\"6\"\n        android:minEms=\"6\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_danmaku\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_upper_info_danmakus\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_video_danmaku\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_danmaku\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_video_play\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_bangumi_detail_episodes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    >\n\n    <LinearLayout\n        android:id=\"@+id/ll_root\"\n        android:layout_width=\"@dimen/dp130\"\n        android:layout_height=\"@dimen/dp85\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@drawable/selector_bangumi_detail_bt_bg\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:id=\"@+id/tv_index\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"@dimen/dp5\"\n            android:text=\"ddddd\"\n            android:textColor=\"@color/select_bangumi_detail_index_bg\"\n          />\n\n        <TextView\n            android:id=\"@+id/tv_index_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@+id/tv_index\"\n            android:ellipsize=\"end\"\n            android:minLines=\"1\"\n            android:padding=\"@dimen/dp5\"\n            android:textColor=\"@color/select_bangumi_detail_index_title_bg\"\n            />\n    </LinearLayout>\n    <Space\n        android:id=\"@+id/space\"\n        android:layout_width=\"@dimen/dp10\"\n        android:layout_height=\"wrap_content\"\n        android:visibility=\"gone\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_bangumi_detail_recommend.xml",
    "content": "<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\">\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp0\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_preview\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp150\"\n                android:scaleType=\"center\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_follow\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/shape_shadow_normal_reserve\"\n                android:padding=\"@dimen/dp4\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"/>\n        </android.support.constraint.ConstraintLayout>\n\n    </android.support.v7.widget.CardView>\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/card_view\">\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n    </android.support.constraint.ConstraintLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_bangumi_detail_seasons.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    >\n\n    <LinearLayout\n        android:id=\"@+id/ll_root\"\n        android:layout_width=\"@dimen/dp90\"\n        android:layout_height=\"@dimen/dp45\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@drawable/selector_bangumi_detail_bt_bg\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:id=\"@+id/tv_index\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:padding=\"@dimen/dp5\"\n            android:text=\"ddddd\"\n            android:textColor=\"@color/select_bangumi_detail_index_title_bg\"\n            />\n\n    </LinearLayout>\n\n    <Space\n        android:id=\"@+id/space\"\n        android:layout_width=\"@dimen/dp10\"\n        android:layout_height=\"wrap_content\"\n        android:visibility=\"gone\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_game_center_book_gift.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"172dp\"\n    android:layout_height=\"170dp\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/cardview_light_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <ImageView\n            android:id=\"@+id/iv_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp110\"\n            android:scaleType=\"center\"/>\n\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@+id/iv_video_preview\"\n            android:ellipsize=\"end\"\n            android:paddingLeft=\"@dimen/dp10\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_open\"\n            android:layout_width=\"@dimen/dp52\"\n            android:layout_height=\"@dimen/dp28\"\n            android:layout_marginEnd=\"@dimen/dp10\"\n            android:background=\"@drawable/shape_btn_game_center_bg\"\n            android:gravity=\"center\"\n            android:text=\"预约\"\n            android:textColor=\"@color/pink_text_color\"\n            android:textSize=\"@dimen/text_size_16\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_preview\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>\n"
  },
  {
    "path": "app/src/main/res/layout/item_home_chase_body.xml",
    "content": "<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\">\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp0\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_preview\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp150\"\n                android:scaleType=\"center\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_follow\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/shape_shadow_normal_reserve\"\n                android:padding=\"@dimen/dp4\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"/>\n        </android.support.constraint.ConstraintLayout>\n\n    </android.support.v7.widget.CardView>\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/card_view\">\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_update\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_60\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/tv_video_title\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_state\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_60\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/tv_video_update\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_home_dynamic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp10\"\n    >\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline6\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.46\"\n      />\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_avatar\"\n        android:layout_width=\"24dp\"\n        android:layout_height=\"24dp\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"26dp\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp4\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n       />\n\n    <TextView\n        android:id=\"@+id/tv_title_time\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"26dp\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp4\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_title\"\n      />\n\n    <TextView\n        android:id=\"@+id/tv_title_tag_time\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"26dp\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp4\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_tag\"\n       />\n    <TextView\n        android:id=\"@+id/tv_tag\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"26dp\"\n        android:gravity=\"center\"\n        android:paddingLeft=\"@dimen/dp4\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n       />\n\n    <ImageView\n        android:id=\"@+id/iv_preview\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"100dp\"\n        android:layout_marginTop=\"@dimen/dp34\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline6\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n      />\n\n    <TextView\n        android:id=\"@+id/tv_duration\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/dp10\"\n        android:background=\"@color/black_alpha_60\"\n        android:minWidth=\"@dimen/dp32\"\n        android:padding=\"@dimen/dp2\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_preview\"\n        app:layout_constraintEnd_toEndOf=\"@id/iv_preview\"\n     />\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"2\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline6\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_preview\"\n        />\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_vedio_info\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp2\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:paddingRight=\"@dimen/dp3\"\n        android:paddingTop=\"@dimen/dp2\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline6\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"\n        >\n\n        <ImageView\n            android:id=\"@+id/iv_video_play_num\"\n            android:layout_width=\"16dp\"\n            android:layout_height=\"16dp\"\n            android:src=\"@drawable/ic_upper_info_views\"\n            android:tint=\"@color/gray\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_play_num\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:minWidth=\"@dimen/dp35\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n           />\n\n\n        <ImageView\n            android:id=\"@+id/iv_video_online_region\"\n            android:layout_width=\"16dp\"\n            android:layout_height=\"16dp\"\n            android:src=\"@drawable/ic_upper_info_danmakus\"\n            android:tint=\"@color/gray\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/tv_video_play_num\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n           />\n\n        <TextView\n            android:id=\"@+id/tv_video_favourite\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_video_online_region\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n           />\n    </android.support.constraint.ConstraintLayout>\n\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_vedio_tag\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp2\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:paddingRight=\"@dimen/dp3\"\n        android:paddingTop=\"@dimen/dp2\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_preview\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline6\"\n       >\n\n        <ImageView\n            android:id=\"@+id/iv_tag_video_play_num\"\n            android:layout_width=\"16dp\"\n            android:layout_height=\"16dp\"\n            android:src=\"@drawable/ic_upper_info_views\"\n            android:tint=\"@color/gray\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n         />\n\n        <TextView\n            android:id=\"@+id/tv_tag_video_play_num\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:minWidth=\"@dimen/dp35\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_tag_video_play_num\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n          />\n\n        <ImageView\n            android:id=\"@+id/iv_tag_video_online_region\"\n            android:layout_width=\"16dp\"\n            android:layout_height=\"16dp\"\n            android:src=\"@drawable/ic_upper_info_danmakus\"\n            android:tint=\"@color/gray\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/tv_tag_video_play_num\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n           />\n\n        <TextView\n            android:id=\"@+id/tv_tag_video_favourite\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_tag_video_online_region\"\n           />\n    </android.support.constraint.ConstraintLayout>\n\n\n    <ImageView\n        android:id=\"@+id/iv_view_menu\"\n        android:layout_width=\"14dp\"\n        android:layout_height=\"14dp\"\n        android:paddingBottom=\"@dimen/dp2\"\n        android:src=\"@drawable/ic_promo_index_more_v2\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/cl_vedio_tag\"\n        app:layout_constraintEnd_toEndOf=\"@id/cl_vedio_tag\"\n        app:layout_constraintTop_toTopOf=\"@+id/cl_vedio_tag\"\n       />\n\n    <LinearLayout\n        android:layout_width=\"348dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:orientation=\"vertical\"\n        app:layout_constraintTop_toBottomOf=\"@+id/iv_preview\"\n       >\n\n        <RelativeLayout\n            android:id=\"@+id/fl_recent\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp28\"\n            android:layout_marginTop=\"@dimen/dp10\"\n            android:background=\"@color/gray_light\"\n            android:clickable=\"true\"\n            android:foreground=\"?attr/selectableItemBackground\"\n            app:layout_constraintBottom_toTopOf=\"@id/space\"\n            app:layout_constraintTop_toBottomOf=\"@+id/iv_preview\">\n\n            <TextView\n                android:id=\"@+id/tv_recent\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:gravity=\"center\"\n                android:text=\"还有4个视频被隐藏\"\n                android:textSize=\"@dimen/text_size_12\"/>\n        </RelativeLayout>\n\n        <Space\n            android:id=\"@+id/space\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"10dp\"\n            app:layout_constraintBottom_toTopOf=\"@+id/v_hor\"/>\n\n        <View\n            android:id=\"@+id/v_hor\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"1px\"\n            android:background=\"@color/gray_light\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"/>\n    </LinearLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_home_region_activity_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\">\n\n\n    <android.support.v7.widget.CardView\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"172dp\"\n        android:layout_height=\"170dp\"\n        android:layout_marginBottom=\"@dimen/dp5\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp5\"\n        android:clickable=\"true\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        app:cardBackgroundColor=\"@color/cardview_light_background\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp2\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:orientation=\"vertical\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_preview\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp110\"\n                android:scaleType=\"center\"/>\n\n\n            <TextView\n                android:id=\"@+id/tv_video_title\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_below=\"@+id/iv_video_preview\"\n                android:layout_marginTop=\"@dimen/dp5\"\n                android:ellipsize=\"end\"\n                android:lineSpacingExtra=\"@dimen/dp2\"\n                android:maxLines=\"2\"\n                android:minLines=\"2\"\n                android:paddingLeft=\"@dimen/dp10\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_14\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/iv_preview\"/>\n        </android.support.constraint.ConstraintLayout>\n    </android.support.v7.widget.CardView>\n\n    <Space\n        android:id=\"@+id/space\"\n        android:layout_width=\"@dimen/dp10\"\n        android:layout_height=\"wrap_content\"/>\n</LinearLayout>\n\n"
  },
  {
    "path": "app/src/main/res/layout/item_home_region_entrance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:clickable=\"true\"\n              android:padding=\"@dimen/dp15\"\n              android:foreground=\"?attr/selectableItemBackground\"\n              android:orientation=\"vertical\">\n\n\n    <ImageView\n        android:id=\"@+id/iv_icon\"\n        android:layout_width=\"@dimen/dp38\"\n        android:layout_height=\"@dimen/dp38\"\n        android:layout_gravity=\"center_horizontal\"/>\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_interest_category.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:padding=\"@dimen/dp0\"\n              android:orientation=\"vertical\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_icon\"\n        android:layout_width=\"@dimen/dp38\"\n        android:layout_height=\"@dimen/dp38\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"@dimen/dp10\"/>\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_12\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_live_entrance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:orientation=\"vertical\">\n\n    <ImageView\n        android:id=\"@+id/iv_icon\"\n        android:layout_width=\"@dimen/dp38\"\n        android:layout_height=\"@dimen/dp38\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"@dimen/dp10\"/>\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_12\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_search_movie.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingEnd=\"@dimen/dp10\"\n    android:paddingStart=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline4\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.36\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"110dp\"\n        android:layout_height=\"@dimen/dp140\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline4\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:text=\"ssssssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_area\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_staff\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_area\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_actors\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_staff\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_search_season.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingEnd=\"@dimen/dp10\"\n    android:paddingStart=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline4\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.36\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp140\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline4\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_video_des\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_newest_season\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_des\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_search_up.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_avatar\"\n        android:layout_width=\"@dimen/dp68\"\n        android:layout_height=\"@dimen/dp68\"\n        android:src=\"@drawable/bili_default_avatar\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_avatar\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_avatar\"\n        >\n\n        <TextView\n            android:id=\"@+id/tv_uname\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp10\"\n            android:text=\"ssss\"\n            android:textColor=\"@color/black_80\"\n            android:textSize=\"@dimen/text_size_16\"/>\n\n        <TextView\n            android:id=\"@+id/tv_fans\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"@dimen/dp6\"\n            android:minWidth=\"@dimen/dp120\"\n            android:text=\"ssss\"\n            android:textColor=\"@color/black_alpha_30\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n        <TextView\n            android:id=\"@+id/tv_videos\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"@dimen/dp6\"\n            android:text=\"ssss\"\n            android:textColor=\"@color/black_alpha_30\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintStart_toEndOf=\"@id/tv_fans\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n        <TextView\n            android:id=\"@+id/tv_des\"\n            android:layout_width=\"@dimen/dp0\"\n            android:layout_height=\"wrap_content\"\n            android:ellipsize=\"end\"\n            android:lines=\"1\"\n            android:text=\"ssss\"\n            android:textColor=\"@color/black_alpha_30\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_fans\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_topic_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_margin=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"1\"\n            android:minLines=\"1\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_preview\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/item_up_detail_archive_favourite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    >\n\n    <android.support.v7.widget.CardView\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"@dimen/dp122\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:clickable=\"true\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp2\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"@color/transparent\">\n\n            <ImageView\n                android:id=\"@+id/iv_view1\"\n                android:layout_width=\"@dimen/dp122\"\n                android:layout_height=\"@dimen/dp60\"\n                android:scaleType=\"fitXY\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_view2\"\n                android:layout_width=\"@dimen/dp60\"\n                android:layout_height=\"@dimen/dp60\"\n                android:layout_marginTop=\"@dimen/dp2\"\n                android:scaleType=\"fitXY\"\n                app:layout_constraintTop_toBottomOf=\"@id/iv_view1\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_view3\"\n                android:layout_width=\"@dimen/dp60\"\n                android:layout_height=\"@dimen/dp60\"\n                android:layout_marginLeft=\"@dimen/dp2\"\n                android:layout_marginTop=\"@dimen/dp2\"\n                android:scaleType=\"fitXY\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_view2\"\n                app:layout_constraintTop_toBottomOf=\"@id/iv_view1\"/>\n\n            <TextView\n                android:id=\"@+id/tv_favourite_count\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/dp5\"\n                android:layout_marginTop=\"@dimen/dp5\"\n                android:background=\"@color/black_alpha_60\"\n                android:gravity=\"center\"\n                android:minWidth=\"@dimen/dp20\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_favourite_title\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/shape_shadow_normal_reserve\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_14\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"/>\n        </android.support.constraint.ConstraintLayout>\n    </android.support.v7.widget.CardView>\n\n    <Space\n        android:id=\"@+id/space\"\n        android:layout_width=\"@dimen/dp10\"\n        android:layout_height=\"wrap_content\"\n        android:visibility=\"gone\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_up_detail_favourite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"120dp\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp100\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintDimensionRatio=\"4:3\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_favourite_count\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"@dimen/dp100\"\n        android:background=\"@color/black_alpha_60\"\n        android:gravity=\"center_horizontal\"\n        android:minWidth=\"@dimen/dp35\"\n        android:paddingTop=\"@dimen/dp35\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_preview\"\n        app:layout_constraintEnd_toEndOf=\"@id/iv_video_preview\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_video_preview\"\n        />\n\n    <ImageView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp55\"\n        android:src=\"@drawable/ic_favor_folder\"\n        app:layout_constraintEnd_toEndOf=\"@id/tv_favourite_count\"\n        app:layout_constraintStart_toStartOf=\"@id/tv_favourite_count\"\n        app:layout_constraintTop_toTopOf=\"@id/tv_favourite_count\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:minLines=\"2\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_preview\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_video_state\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_preview\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"\n        />\n\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_bangumi_detail_contracted.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginTop=\"@dimen/dp10\"\n    android:orientation=\"vertical\">\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"130dp\"\n        android:layout_margin=\"@dimen/dp10\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp2\"\n        app:cardElevation=\"@dimen/dp0\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/iv_pay_bangumi_tips\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:padding=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_pay_bangumi_tips\"/>\n\n            <TextView\n                android:id=\"@+id/tv_pay\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"@dimen/dp20\"\n                android:layout_toEndOf=\"@+id/iv_pay_bangumi_tips\"\n                android:paddingTop=\"@dimen/dp5\"\n                android:text=\"请承包我吧\"\n                android:textColor=\"@color/yellow_30\"\n                android:textSize=\"@dimen/text_size_14\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_pay_bangumi_tips\"\n                app:layout_constraintTop_toTopOf=\"@+id/iv_pay_bangumi_tips\"/>\n\n            <TextView\n                android:id=\"@+id/tv_pay_count\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_below=\"@+id/tv_pay\"\n                android:layout_toEndOf=\"@+id/iv_pay_bangumi_tips\"\n                android:text=\"已有10086人承包了这部番\"\n                android:textColor=\"@color/yellow_30\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_pay_bangumi_tips\"\n                app:layout_constraintTop_toBottomOf=\"@+id/tv_pay\"/>\n\n            <TextView\n                android:layout_width=\"70dp\"\n                android:layout_height=\"@dimen/dp30\"\n                android:layout_marginEnd=\"@dimen/dp10\"\n                android:layout_marginTop=\"@dimen/dp20\"\n                android:background=\"@drawable/shape_bangumi_index_yellow_bg\"\n                android:gravity=\"center\"\n                android:text=\"承包\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_14\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <View\n                android:id=\"@id/v_hor\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"1dp\"\n                android:layout_below=\"@+id/iv_pay_bangumi_tips\"\n                android:layout_marginEnd=\"@dimen/dp10\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:background=\"@color/line_bg\"\n                app:layout_constraintTop_toBottomOf=\"@+id/iv_pay_bangumi_tips\"/>\n\n            <com.yoyiyi.soleil.widget.CircleImageView\n                android:id=\"@+id/iv_avatar1\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_marginLeft=\"@dimen/dp10\"\n                android:layout_marginTop=\"@dimen/dp12\"\n                android:src=\"@drawable/bili_default_avatar\"\n                app:border_color=\"@color/white\"\n                app:border_width=\"@dimen/dp1\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/v_hor\"/>\n\n            <com.yoyiyi.soleil.widget.CircleImageView\n                android:id=\"@+id/iv_avatar2\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_marginLeft=\"@dimen/dp22\"\n                android:layout_marginTop=\"@dimen/dp12\"\n                android:src=\"@drawable/bili_default_avatar\"\n                app:border_color=\"@color/white\"\n                app:border_width=\"@dimen/dp1\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/v_hor\"/>\n\n            <com.yoyiyi.soleil.widget.CircleImageView\n                android:id=\"@+id/iv_avatar3\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_marginLeft=\"34dp\"\n                android:layout_marginTop=\"@dimen/dp12\"\n                android:src=\"@drawable/bili_default_avatar\"\n                app:border_color=\"@color/white\"\n                app:border_width=\"@dimen/dp1\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/v_hor\"/>\n\n            <com.yoyiyi.soleil.widget.CircleImageView\n                android:id=\"@+id/iv_avatar4\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_marginLeft=\"@dimen/dp46\"\n                android:layout_marginTop=\"@dimen/dp12\"\n                android:src=\"@drawable/bili_default_avatar\"\n                app:border_color=\"@color/white\"\n                app:border_width=\"@dimen/dp1\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/v_hor\"/>\n\n            <TextView\n                android:id=\"@+id/tv_week_count\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginBottom=\"@dimen/dp5\"\n                android:layout_marginTop=\"@dimen/dp6\"\n                android:paddingBottom=\"@dimen/dp10\"\n                android:paddingTop=\"@dimen/dp10\"\n                android:text=\"等34人七日内承包了这部番\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_avatar4\"\n                app:layout_constraintTop_toBottomOf=\"@id/v_hor\"/>\n\n            <TextView\n                android:layout_width=\"70dp\"\n                android:layout_height=\"25dp\"\n                android:layout_margin=\"@dimen/dp10\"\n                android:gravity=\"center\"\n                android:text=\"查看榜单\"\n                android:textColor=\"@color/yellow_30\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toEndOf=\"parent\"/>\n        </android.support.constraint.ConstraintLayout>\n\n    </android.support.v7.widget.CardView>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_banner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"wrap_content\">\n\n    <com.youth.banner.Banner\n        android:id=\"@+id/banner\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp126\"\n        app:delay_time=\"3000\"\n        app:indicator_drawable_selected=\"@drawable/shape_dots_select\"\n        app:indicator_drawable_unselected=\"@drawable/shape_dots_default\"\n        app:indicator_height=\"@dimen/dp6\"\n        app:indicator_width=\"@dimen/dp6\"\n        app:scroll_time=\"1500\"/>\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_empty.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"@dimen/dp0\"\n              android:layout_height=\"@dimen/dp0\"\n              android:orientation=\"vertical\">\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_hot_tags_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          android:id=\"@+id/tv_tags\"\n          android:layout_width=\"wrap_content\"\n          android:layout_height=\"wrap_content\"\n          android:layout_marginBottom=\"@dimen/dp3\"\n          android:layout_marginLeft=\"@dimen/dp3\"\n          android:layout_marginRight=\"@dimen/dp3\"\n          android:background=\"@drawable/tv_tags_bg\"\n          android:gravity=\"center\"\n          android:paddingBottom=\"@dimen/dp6\"\n          android:paddingEnd=\"@dimen/dp15\"\n          android:paddingStart=\"@dimen/dp15\"\n          android:paddingTop=\"@dimen/dp6\"\n          android:textColor=\"@color/black_alpha_45\"\n          android:textSize=\"@dimen/text_size_14\"/>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_comment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"@dimen/dp12\"\n    android:paddingRight=\"@dimen/dp12\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_avatar\"\n        android:layout_width=\"@dimen/dp48\"\n        android:layout_height=\"@dimen/dp48\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_lv\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginRight=\"@dimen/dp2\"\n        android:layout_marginTop=\"@dimen/dp16\"\n        app:layout_constraintEnd_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintStart_toStartOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toBottomOf=\"@id/iv_avatar\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_uname\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:text=\"sssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_like\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_feedback_like_grey\"\n        android:minEms=\"3\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_dis_like\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_view_menu\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_dis_like\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_feedback_disagree_grey\"\n        android:minEms=\"2\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toStartOf=\"@id/iv_view_menu\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_view_menu\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_view_menu\"\n        android:layout_width=\"@dimen/dp14\"\n        android:layout_height=\"@dimen/dp14\"\n        android:src=\"@drawable/ic_promo_index_more_v2\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_floor\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:minEms=\"2\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n    <TextView\n        android:id=\"@+id/tv_time\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_floor\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n    <TextView\n        android:id=\"@+id/tv_message\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:minLines=\"2\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"@id/tv_floor\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_time\"/>\n\n    <TextView\n        android:id=\"@+id/tv_rcount\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:minEms=\"2\"\n        android:paddingBottom=\"@dimen/dp10\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_message\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:background=\"@color/gray_light\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_des.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_type_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp35\">\n\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"5dp\"\n            android:text=\"xxxxx\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n        <ImageView\n            android:id=\"@+id/iv_arrow\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_gray_arrow_right\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_online\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginRight=\"@dimen/dp4\"\n            android:gravity=\"center_vertical\"\n            android:text=\"xxxx\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toStartOf=\"@+id/iv_trans\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_trans\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:src=\"@drawable/ic_category_more_refresh\"\n            android:tint=\"@color/gray_20\"\n            android:visibility=\"gone\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    </android.support.constraint.ConstraintLayout>\n\n    <TextView\n        android:id=\"@+id/tv_des\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintTop_toBottomOf=\"@+id/cl_type_root\"/>\n\n    <com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout\n        android:id=\"@id/tags_layout\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_des\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@color/gray_light\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tags_layout\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_type_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp35\">\n\n        <ImageView\n            android:id=\"@+id/iv_icon\"\n            android:layout_width=\"@dimen/dp22\"\n            android:layout_height=\"@dimen/dp22\"\n            android:visibility=\"gone\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"5dp\"\n            android:text=\"xxxxx\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n        <ImageView\n            android:id=\"@+id/iv_arrow\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_gray_arrow_right\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_online\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginRight=\"@dimen/dp4\"\n            android:gravity=\"center_vertical\"\n            android:text=\"xxxx\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintEnd_toStartOf=\"@+id/iv_trans\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_trans\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:src=\"@drawable/ic_category_more_refresh\"\n            android:tint=\"@color/gray_20\"\n            android:visibility=\"gone\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    </android.support.constraint.ConstraintLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_info.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\">\n\n    <ImageView\n        android:id=\"@+id/iv_pic_big\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"180dp\"\n        android:background=\"@color/window_background\"\n        android:scaleType=\"centerCrop\"/>\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"@dimen/dp100\"\n        android:layout_height=\"@dimen/dp0\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp83\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp2\"\n        app:cardElevation=\"@dimen/dp0\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/ll_root\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\">\n\n        <ImageView\n            android:id=\"@+id/iv_pic\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_margin=\"@dimen/dp3\"\n            android:scaleType=\"center\"\n            android:src=\"@drawable/bili_default_image_tv\"/>\n    </android.support.v7.widget.CardView>\n\n    <TextView\n        android:id=\"@+id/tv_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@+id/card_view\"\n        app:layout_constraintTop_toTopOf=\"@+id/card_view\"/>\n\n    <TextView\n        android:id=\"@+id/tv_follow\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:layout_marginTop=\"@dimen/dp5\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@+id/card_view\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_play\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:layout_marginTop=\"@dimen/dp5\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@+id/card_view\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_follow\"/>\n\n    <LinearLayout\n        android:id=\"@+id/ll_root\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/card_view\"\n        app:layout_constraintTop_toBottomOf=\"@id/tv_state\">\n\n        <LinearLayout\n            android:id=\"@+id/ll_share\"\n            android:layout_width=\"@dimen/dp0\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            >\n\n            <ImageButton\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/bangumi_detail_ic_share\"\n                android:clickable=\"false\"\n                android:padding=\"@dimen/dp5\"\n                />\n\n            <TextView\n                android:id=\"@+id/tv_share\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/dp2\"\n                android:text=\"分享\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_12\"/>\n        </LinearLayout>\n\n        <LinearLayout\n            android:id=\"@+id/ll_chase\"\n            android:layout_width=\"@dimen/dp0\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            >\n\n            <ImageView\n                android:id=\"@+id/iv_chase\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/bangumi_detail_ic_follow_01\"\n                android:clickable=\"false\"\n                />\n\n            <TextView\n                android:id=\"@+id/tv_chase\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/dp2\"\n                android:text=\"追番\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_12\"\n                />\n        </LinearLayout>\n\n        <LinearLayout\n            android:id=\"@+id/ll_down\"\n            android:layout_width=\"@dimen/dp0\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\"\n            >\n\n            <ImageView\n                android:id=\"@+id/iv_down\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/bangumi_detail_ic_download\"\n                android:clickable=\"false\"\n                />\n\n            <TextView\n                android:id=\"@+id/tv_down\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:padding=\"@dimen/dp2\"\n                android:text=\"缓存\"\n                android:textColor=\"@color/font_normal\"\n                android:textSize=\"@dimen/text_size_12\"\n                />\n        </LinearLayout>\n\n    </LinearLayout>\n\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_more.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginRight=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_more\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"更多热门评论 >>\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_recommend.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:orientation=\"vertical\"\n              android:paddingRight=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_detail_recycler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"wrap_content\"\n    >\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:overScrollMode=\"never\"\n        android:scrollbars=\"none\"/>\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_index_body.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:layout_marginBottom=\"@dimen/dp5\"\n              android:layout_marginLeft=\"@dimen/dp10\"\n              android:layout_marginTop=\"@dimen/dp5\"\n              android:gravity=\"center\"\n              android:orientation=\"vertical\">\n\n\n    <android.support.v7.widget.CardView\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clickable=\"true\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp2\">\n\n        <ImageView\n            android:id=\"@+id/iv_icon\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n    </android.support.v7.widget.CardView>\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:maxEms=\"4\"\n        android:padding=\"@dimen/dp5\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_index_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp15\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp15\"\n    >\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.5\"/>\n\n    <LinearLayout\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp48\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        android:background=\"@drawable/shape_bangumi_index_green_bg\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintEnd_toStartOf=\"@+id/guideline\"\n        app:layout_constraintStart_toStartOf=\"parent\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_bangumi_index\"/>\n\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"@dimen/dp5\"\n            android:src=\"@drawable/ic_bangumi_index_text\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp48\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        android:background=\"@drawable/shape_bangumi_index_yellow_bg\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/guideline\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_bangumi_rank\"/>\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"@dimen/dp10\"\n            android:src=\"@drawable/ic_bangumi_rank_text\"/>\n    </LinearLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_schedule_body.xml",
    "content": "<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp0\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_preview\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp150\"\n                android:scaleType=\"center\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_time\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:background=\"@drawable/shape_shadow_normal_reserve\"\n                android:drawablePadding=\"@dimen/dp4\"\n                android:drawableStart=\"@drawable/bangumi_timeline_clock\"\n                android:padding=\"@dimen/dp4\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"/>\n        </android.support.constraint.ConstraintLayout>\n\n    </android.support.v7.widget.CardView>\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/card_view\">\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_update\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_60\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/tv_video_title\"/>\n\n    </android.support.constraint.ConstraintLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_schedule_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:gravity=\"center\"\n              android:padding=\"@dimen/dp18\"\n    >\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"只有七天的预告哟\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_schedule_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp38\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n    <ImageView\n        android:id=\"@+id/iv_icon\"\n        android:layout_width=\"@dimen/dp22\"\n        android:layout_height=\"@dimen/dp22\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:paddingLeft=\"@dimen/dp4\"\n        android:layout_height=\"wrap_content\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_18\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_date\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_bangumi_schedule_header.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:gravity=\"center\"\n              android:padding=\"@dimen/dp18\"\n    >\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"已经回顾了一整周的更新\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_game_center_body.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"@color/white\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\">\n\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:paddingBottom=\"@dimen/dp10\"\n        android:paddingTop=\"@dimen/dp10\">\n\n        <ImageView\n            android:id=\"@+id/iv_preview\"\n            android:layout_width=\"@dimen/dp65\"\n            android:layout_height=\"@dimen/dp65\"/>\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"@dimen/dp10\"\n            android:paddingBottom=\"@dimen/dp5\"\n            android:paddingTop=\"@dimen/dp5\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintStart_toEndOf=\"@id/iv_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_des\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"@dimen/dp10\"\n            android:paddingBottom=\"@dimen/dp5\"\n            android:paddingTop=\"@dimen/dp5\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"@id/iv_preview\"\n            app:layout_constraintStart_toEndOf=\"@id/iv_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_open\"\n            android:layout_width=\"@dimen/dp52\"\n            android:layout_height=\"@dimen/dp30\"\n            android:layout_marginEnd=\"@dimen/dp10\"\n            android:background=\"@drawable/shape_btn_game_center_bg\"\n            android:gravity=\"center\"\n            android:text=\"打开\"\n            android:textColor=\"@color/pink_text_color\"\n            android:textSize=\"@dimen/text_size_16\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_bias=\"0.5\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:scaleType=\"fitXY\"\n        android:src=\"@drawable/ic_game_center_new\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:background=\"@color/black_alpha_45\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_game_center_book_gift.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:background=\"@color/white\"\n              android:paddingBottom=\"@dimen/dp10\"\n              android:paddingTop=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_game_center_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:background=\"@color/white\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:padding=\"@dimen/dp15\">\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"查看全部游戏 >\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_game_center_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:layout_marginStart=\"@dimen/dp10\"\n              android:orientation=\"vertical\">\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp5\"\n        android:paddingTop=\"@dimen/dp5\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_game_center_user.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"?attr/actionBarSize\"\n    android:background=\"@color/white\"\n    android:paddingBottom=\"@dimen/dp6\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp6\"\n    >\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/toolbar_user_avatar\"\n        android:layout_width=\"@dimen/dp38\"\n        android:layout_height=\"@dimen/dp38\"\n        android:layout_marginEnd=\"@dimen/dp3\"\n        android:layout_marginStart=\"@dimen/dp16\"\n        android:src=\"@mipmap/ic_user_yoyiyi\"\n        app:border_color=\"@color/colorPrimary\"\n        app:border_width=\"@dimen/dp1\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:layout_editor_absoluteY=\"10dp\"/>\n\n    <TextView\n        android:id=\"@+id/textView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:text=\"soleil雪寂\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@+id/toolbar_user_avatar\"\n        app:layout_constraintTop_toTopOf=\"@+id/toolbar_user_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_des\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:text=\"新的风暴已经出现,你准备好了吗?\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/toolbar_user_avatar\"\n        app:layout_constraintStart_toEndOf=\"@+id/toolbar_user_avatar\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_chase_bangumi_index.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp6\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_bangumi\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingEnd=\"@dimen/dp5\"\n        android:paddingStart=\"@dimen/dp5\">\n\n        <android.support.constraint.Guideline\n            android:id=\"@+id/guideline1\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\"\n            app:layout_constraintGuide_percent=\"0.5\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_bangumi_nav22\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/bangumi_follow_home_ic_index_bangumi\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"@+id/guideline1\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_bias=\"0.5\"/>\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:paddingLeft=\"@dimen/dp12\"\n            android:src=\"@drawable/bangumi_follow_home_ic_index_bangumi2\"\n            app:layout_constraintBottom_toBottomOf=\"@+id/iv_bangumi_nav22\"\n            />\n\n        <ImageView\n            android:id=\"@+id/iv_bangumi_domestic\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/bangumi_follow_home_ic_index_domestic\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"@+id/guideline1\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_bangumi_nav33\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:paddingLeft=\"@dimen/dp12\"\n            android:src=\"@drawable/bangumi_follow_home_ic_index_domestic2\"\n            app:layout_constraintBottom_toBottomOf=\"@+id/iv_bangumi_domestic\"\n            app:layout_constraintStart_toStartOf=\"@+id/iv_bangumi_domestic\"/>\n\n    </android.support.constraint.ConstraintLayout>\n\n    <View\n        android:id=\"@+id/v_ver\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp1\"\n        android:background=\"@color/gray_alpha_80\"\n        app:layout_constraintTop_toBottomOf=\"@+id/cl_bangumi\"/>\n\n    <View\n        android:id=\"@+id/v_hor\"\n        android:layout_width=\"@dimen/dp1\"\n        android:layout_height=\"@dimen/dp22\"\n        android:background=\"@color/gray_alpha_80\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/ll_bangumi_timeline\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_ver\"\n        />\n\n    <LinearLayout\n        android:id=\"@+id/ll_bangumi_timeline\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp38\"\n        android:clickable=\"true\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintEnd_toStartOf=\"@id/v_hor\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_ver\">\n\n        <ImageView\n            android:id=\"@+id/iv_bangumi_timeline\"\n            android:layout_width=\"@dimen/dp35\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/bangumi_follow_home_ic_timeline\"\n            />\n\n        <Space\n            android:layout_width=\"@dimen/dp10\"\n            android:layout_height=\"wrap_content\"/>\n\n        <TextView\n            android:id=\"@+id/tv_bangumi_timeline\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"时间表\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"/>\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/ll_bangumi_index\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp38\"\n        android:clickable=\"true\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/v_hor\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_ver\">\n\n        <ImageView\n            android:id=\"@+id/iv_bangumi_index\"\n            android:layout_width=\"@dimen/dp30\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/bangumi_follow_home_ic_index\"\n            />\n\n        <Space\n            android:layout_width=\"@dimen/dp10\"\n            android:layout_height=\"wrap_content\"/>\n\n        <TextView\n            android:id=\"@+id/tv_bangumi_index\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"索    引\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            />\n    </LinearLayout>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp10\"\n        android:background=\"@color/gray_light\"\n        app:layout_constraintTop_toBottomOf=\"@id/ll_bangumi_index\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_chase_body.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:orientation=\"vertical\"\n              android:paddingRight=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_chase_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingEnd=\"@dimen/dp10\"\n    android:paddingStart=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp2\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_preview\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp120\"\n                android:scaleType=\"center\"/>\n\n            <TextView\n                android:id=\"@+id/tv_new_tag\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginRight=\"@dimen/dp25\"\n                android:background=\"@drawable/shape_tv_new_tag\"\n                android:padding=\"@dimen/dp2\"\n                android:text=\"NEW!!\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintEnd_toEndOf=\"@id/iv_video_preview\"\n                app:layout_constraintTop_toTopOf=\"@id/iv_video_preview\"/>\n        </android.support.constraint.ConstraintLayout>\n    </android.support.v7.widget.CardView>\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"2\"\n        android:padding=\"@dimen/dp4\"\n        android:text=\"xxxxxxxxxxxxx\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintTop_toBottomOf=\"@id/card_view\"/>\n\n    <TextView\n        android:id=\"@+id/tv_des\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:padding=\"@dimen/dp4\"\n        android:text=\"xxxxxxxxxxxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintTop_toBottomOf=\"@id/tv_title\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_chase_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:paddingStart=\"@dimen/dp10\"\n    android:paddingEnd=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_type_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp35\">\n\n        <ImageView\n            android:id=\"@+id/iv_icon\"\n            android:layout_width=\"@dimen/dp22\"\n            android:layout_height=\"@dimen/dp22\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"5dp\"\n            android:text=\"xxxxx\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_more\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:drawableEnd=\"@drawable/ic_gray_arrow_right\"\n            android:drawablePadding=\"@dimen/dp3\"\n            android:text=\"查看更多\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_video_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:visibility=\"gone\"\n        app:layout_constraintTop_toBottomOf=\"@id/cl_type_root\">\n\n        <android.support.v7.widget.CardView\n            android:id=\"@+id/card_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:foreground=\"?attr/selectableItemBackground\"\n            app:cardBackgroundColor=\"@color/card_view_background\"\n            app:cardCornerRadius=\"@dimen/dp4\"\n            app:cardElevation=\"@dimen/dp2\">\n\n            <android.support.constraint.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:paddingBottom=\"@dimen/dp4\">\n\n                <ImageView\n                    android:id=\"@+id/iv_video_preview\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"@dimen/dp120\"\n                    android:scaleType=\"center\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_video_title\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"@dimen/dp4\"\n                    android:ellipsize=\"end\"\n                    android:lineSpacingExtra=\"@dimen/dp2\"\n                    android:maxLines=\"2\"\n                    android:paddingLeft=\"@dimen/dp4\"\n                    android:paddingRight=\"@dimen/dp4\"\n                    android:text=\"xxxx\"\n                    android:textColor=\"@color/font_normal\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_video_live_up\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:gravity=\"center\"\n                    android:paddingLeft=\"@dimen/dp4\"\n                    android:paddingTop=\"@dimen/dp4\"\n                    android:text=\"xxxx\"\n                    android:textColor=\"@color/black_alpha_45\"\n                    android:textSize=\"@dimen/text_size_12\"\n                    app:layout_constraintTop_toBottomOf=\"@id/tv_video_title\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_video_online\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"4dp\"\n                    android:drawablePadding=\"@dimen/dp3\"\n                    android:drawableStart=\"@drawable/ic_watching\"\n                    android:gravity=\"center\"\n                    android:paddingRight=\"@dimen/dp4\"\n                    android:text=\"xxxx\"\n                    android:textColor=\"@color/black_alpha_45\"\n                    android:textSize=\"@dimen/text_size_12\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n            </android.support.constraint.ConstraintLayout>\n        </android.support.v7.widget.CardView>\n    </android.support.constraint.ConstraintLayout>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_live_body.xml",
    "content": "<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:minLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_live_up\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingTop=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintTop_toBottomOf=\"@id/tv_video_title\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_online\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"4dp\"\n            android:drawablePadding=\"@dimen/dp3\"\n            android:drawableStart=\"@drawable/ic_watching\"\n            android:gravity=\"center\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_live_body_mul.xml",
    "content": "<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:minLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_live_up\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingTop=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintTop_toBottomOf=\"@id/tv_video_title\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_online\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"4dp\"\n            android:drawablePadding=\"@dimen/dp3\"\n            android:drawableStart=\"@drawable/ic_watching\"\n            android:gravity=\"center\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_live_entrance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:background=\"@color/white\"\n              android:orientation=\"vertical\"\n              android:layout_marginBottom=\"@dimen/dp5\"\n              android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n</LinearLayout>\n\n\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_live_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:paddingBottom=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp10\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_more_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <Button\n            android:id=\"@+id/bt_more\"\n            android:layout_width=\"@dimen/dp120\"\n            android:layout_height=\"@dimen/dp30\"\n            android:background=\"@drawable/btn_more_white\"\n            android:text=\"查看更多\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            android:visibility=\"visible\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/tv_dynamic\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"@dimen/dp5\"\n            android:textColor=\"@color/black_80\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toStartOf=\"@+id/iv_refresh\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_refresh\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_category_more_refresh\"\n            android:tint=\"@color/refresh_pink_background\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <Button\n        android:id=\"@+id/bt_more_live\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp30\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@drawable/btn_more_white\"\n        android:text=\"更多直播\"\n        android:textColor=\"@color/black_alpha_60\"\n        android:textSize=\"@dimen/text_size_14\"\n        android:visibility=\"gone\"\n        app:layout_constraintTop_toBottomOf=\"@id/cl_more_root\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_live_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp6\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_type_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp35\">\n\n        <ImageView\n            android:id=\"@+id/iv_icon\"\n            android:layout_width=\"@dimen/dp22\"\n            android:layout_height=\"@dimen/dp22\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"5dp\"\n            android:text=\"xxxxx\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n        <ImageView\n            android:id=\"@+id/iv_arrow\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_gray_arrow_right\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_online\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center_vertical\"\n            android:text=\"xxxx\"\n            android:layout_marginRight=\"@dimen/dp4\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toStartOf=\"@+id/iv_arrow\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    </android.support.constraint.ConstraintLayout>\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_video_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:visibility=\"gone\"\n        app:layout_constraintTop_toBottomOf=\"@id/cl_type_root\">\n\n        <android.support.v7.widget.CardView\n            android:id=\"@+id/card_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:foreground=\"?attr/selectableItemBackground\"\n            app:cardBackgroundColor=\"@color/card_view_background\"\n            app:cardCornerRadius=\"@dimen/dp4\"\n            app:cardElevation=\"@dimen/dp2\">\n\n            <android.support.constraint.ConstraintLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:paddingBottom=\"@dimen/dp4\">\n\n                <ImageView\n                    android:id=\"@+id/iv_video_preview\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"@dimen/dp120\"\n                    android:scaleType=\"center\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_video_title\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"@dimen/dp4\"\n                    android:ellipsize=\"end\"\n                    android:lineSpacingExtra=\"@dimen/dp2\"\n                    android:maxLines=\"2\"\n                    android:paddingLeft=\"@dimen/dp4\"\n                    android:paddingRight=\"@dimen/dp4\"\n                    android:text=\"xxxx\"\n                    android:textColor=\"@color/font_normal\"\n                    android:textSize=\"@dimen/text_size_14\"\n                    app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_video_live_up\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:gravity=\"center\"\n                    android:paddingLeft=\"@dimen/dp4\"\n                    android:paddingTop=\"@dimen/dp4\"\n                    android:text=\"xxxx\"\n                    android:textColor=\"@color/black_alpha_45\"\n                    android:textSize=\"@dimen/text_size_12\"\n                    app:layout_constraintTop_toBottomOf=\"@id/tv_video_title\"/>\n\n                <TextView\n                    android:id=\"@+id/tv_video_online\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"4dp\"\n                    android:drawablePadding=\"@dimen/dp3\"\n                    android:drawableStart=\"@drawable/ic_watching\"\n                    android:gravity=\"center\"\n                    android:paddingRight=\"@dimen/dp4\"\n                    android:text=\"xxxx\"\n                    android:textColor=\"@color/black_alpha_45\"\n                    android:textSize=\"@dimen/text_size_12\"\n                    app:layout_constraintEnd_toEndOf=\"parent\"\n                    app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n            </android.support.constraint.ConstraintLayout>\n        </android.support.v7.widget.CardView>\n    </android.support.constraint.ConstraintLayout>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_recommend_body.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:clickable=\"true\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp5\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <android.support.constraint.ConstraintLayout\n            android:id=\"@+id/cl_video_follow\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"@drawable/shape_shadow_normal_reserve\"\n            android:padding=\"@dimen/dp4\"\n            app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\">\n\n            <TextView\n                android:id=\"@+id/tv_video_play_num\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableLeft=\"@drawable/bangumi_common_ic_video_views\"\n                android:drawableTint=\"@color/white\"\n                android:text=\"10万\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_danmaku\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/dp10\"\n                android:drawableLeft=\"@drawable/bangumi_common_ic_video_danmakus\"\n                android:drawableTint=\"@color/white\"\n                android:text=\"10万\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintStart_toEndOf=\"@id/tv_video_play_num\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_time\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTint=\"@color/white\"\n                android:text=\"10万\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintEnd_toEndOf=\"parent\"/>\n        </android.support.constraint.ConstraintLayout>\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:minLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_tag\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"4dp\"\n            android:drawablePadding=\"@dimen/dp3\"\n            android:ellipsize=\"end\"\n            android:gravity=\"center\"\n            android:lines=\"1\"\n            android:maxEms=\"10\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/black_alpha_45\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_view_menu\"\n            android:layout_width=\"@dimen/dp14\"\n            android:layout_height=\"@dimen/dp14\"\n            android:layout_marginRight=\"@dimen/dp2\"\n            android:paddingBottom=\"@dimen/dp2\"\n            android:src=\"@drawable/ic_promo_index_more_v2\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_region_activity_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:paddingBottom=\"@dimen/dp5\"\n              android:paddingTop=\"@dimen/dp5\">\n\n    <include layout=\"@layout/common_recycler\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_region_body.xml",
    "content": "<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:minLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"@dimen/dp2\"\n            android:paddingLeft=\"@dimen/dp3\"\n            android:paddingRight=\"@dimen/dp3\"\n            android:paddingTop=\"@dimen/dp2\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_play_num\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:src=\"@drawable/ic_upper_info_views\"\n                android:tint=\"@color/gray\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_play_num\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/dp3\"\n                android:maxEms=\"6\"\n                android:minEms=\"6\"\n                android:text=\"xxxx\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_video_online\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:layout_marginRight=\"@dimen/dp3\"\n                android:src=\"@drawable/ic_promo_index_follow\"\n                android:tint=\"@color/gray\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toStartOf=\"@+id/tv_video_favourite\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_video_online_region\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:layout_marginRight=\"@dimen/dp3\"\n                android:src=\"@drawable/ic_upper_info_danmakus\"\n                android:tint=\"@color/gray\"\n                android:visibility=\"gone\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toStartOf=\"@+id/tv_video_favourite\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_favourite\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center\"\n                android:paddingRight=\"@dimen/dp4\"\n                android:text=\"xxxx\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintStart_toEndOf=\"@+id/tv_video_play_num\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n        </android.support.constraint.ConstraintLayout>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_region_entrance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:orientation=\"vertical\"\n              android:paddingBottom=\"@dimen/dp10\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:overScrollMode=\"never\"\n        android:scrollbars=\"none\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@color/gray_light\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_region_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp10\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_more_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <Button\n            android:id=\"@+id/bt_more\"\n            android:layout_width=\"@dimen/dp120\"\n            android:layout_height=\"@dimen/dp30\"\n            android:background=\"@drawable/btn_more_white\"\n            android:text=\"查看更多\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            android:visibility=\"gone\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/bt_game_center\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <Button\n            android:id=\"@+id/bt_game_center\"\n            android:layout_width=\"@dimen/dp75\"\n            android:layout_height=\"@dimen/dp30\"\n            android:background=\"@drawable/btn_more_pink\"\n            android:foreground=\"?attr/selectableItemBackground\"\n            android:text=\"游戏中心\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"@dimen/text_size_14\"\n            android:visibility=\"visible\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <Button\n            android:id=\"@+id/bt_more_game\"\n            android:layout_width=\"@dimen/dp75\"\n            android:layout_height=\"@dimen/dp30\"\n            android:layout_marginLeft=\"@dimen/dp10\"\n            android:background=\"@drawable/btn_more_white\"\n            android:text=\"更多游戏\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            android:visibility=\"visible\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/bt_game_center\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/tv_dynamic\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"@dimen/dp5\"\n            android:textColor=\"@color/black_80\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toStartOf=\"@+id/iv_refresh\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <ImageView\n            android:id=\"@+id/iv_refresh\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_category_more_refresh\"\n            android:tint=\"@color/refresh_pink_background\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <Button\n        android:id=\"@+id/bt_more_live\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp30\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@drawable/btn_more_white\"\n        android:text=\"更多直播\"\n        android:textColor=\"@color/black_alpha_60\"\n        android:textSize=\"@dimen/text_size_14\"\n        android:visibility=\"gone\"\n        app:layout_constraintTop_toBottomOf=\"@id/cl_more_root\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_region_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp35\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n\n    <ImageView\n        android:id=\"@+id/iv_icon\"\n        android:layout_width=\"@dimen/dp22\"\n        android:layout_height=\"@dimen/dp22\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/dp5\"\n        android:text=\"xxxxx\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_look_up\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@drawable/shape_count_down\"\n        android:padding=\"@dimen/dp4\"\n        android:text=\"进去看看\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_home_region_topic.xml",
    "content": "<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp5\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\">\n\n    <include layout=\"@layout/layout_item_home_region_head\"/>\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:foreground=\"?attr/selectableItemBackground\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp4\"\n        app:cardElevation=\"@dimen/dp2\"\n        app:layout_constraintTop_toBottomOf=\"@+id/cl_root\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n    </android.support.v7.widget.CardView>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_interest_categroty.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:background=\"@color/white\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <LinearLayout\n            android:layout_width=\"@dimen/dp0\"\n            android:layout_height=\"@dimen/dp40\"\n            android:gravity=\"center\"\n            app:layout_constraintEnd_toStartOf=\"@+id/v_ver\"\n            app:layout_constraintStart_toStartOf=\"parent\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawablePadding=\"@dimen/dp10\"\n                android:drawableRight=\"@drawable/ic_group_discover_more_grey\"\n                android:drawableTint=\"@color/colorPrimary\"\n                android:text=\"全部推荐圈子\"\n                android:textColor=\"@color/pink_text_color\"\n                android:textSize=\"@dimen/text_size_12\"/>\n        </LinearLayout>\n\n        <View\n            android:id=\"@+id/v_ver\"\n            android:layout_width=\"1px\"\n            android:layout_height=\"@dimen/dp20\"\n            android:background=\"@color/gray_alpha_80\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.5\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n        <LinearLayout\n            android:layout_width=\"@dimen/dp0\"\n            android:layout_height=\"@dimen/dp40\"\n            android:gravity=\"center\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/v_ver\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawablePadding=\"@dimen/dp10\"\n                android:drawableRight=\"@drawable/ic_group_discover_more_grey\"\n                android:drawableTint=\"@color/gray\"\n                android:text=\"查看全部圈子\"\n                android:textColor=\"@color/gray\"\n                android:textSize=\"@dimen/text_size_12\"/>\n        </LinearLayout>\n    </android.support.constraint.ConstraintLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_interest_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:gravity=\"center_vertical\"\n              android:orientation=\"horizontal\"\n              android:padding=\"@dimen/dp15\">\n\n    <View\n        android:layout_width=\"@dimen/dp3\"\n        android:layout_height=\"@dimen/dp18\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:background=\"@color/colorPrimary\"/>\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:text=\"精选帖子\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_interest_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"@color/white\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"@dimen/dp12\"\n    android:paddingRight=\"@dimen/dp12\"\n    android:paddingTop=\"@dimen/dp12\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_author_avatar\"\n        android:layout_width=\"@dimen/dp20\"\n        android:layout_height=\"@dimen/dp20\"/>\n\n    <!--/**\n    * author_avatar : http://i1.hdslb.com/bfs/face/d5feee58476452c0c43ef71fab38c50e4119294f.jpg\n    * author_mid : 3061924\n    * author_name : 路过的小轩\n    * chosen_time : 1481107581000\n    * image_count : 2\n    * last_reply_author : 51xx点info\n    * last_reply_mid : 82581258\n    * last_reply_time : 1496979724000\n    * level : 4\n    * modify_time : 1481049163000\n    * post_id : 11636\n    * post_image_list : [{\"height\":155,\"id\":43197,\"image_id\":\"49e55c70bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/49e55c70bbe211e6b4bb00163e00043c\",\"img_suffix\":\"jpg\",\"praise_count\":0,\"width\":220},{\"height\":359,\"id\":43198,\"image_id\":\"3e471e30bbe211e6b4bb00163e00043c\",\"image_url\":\"http://img.yo9.com/3e471e30bbe211e6b4bb00163e00043c\",\"img_suffix\":\"jpg\",\"praise_count\":0,\"width\":640}]\n    * post_summary : 灰与幻想的格林姆迦尔我觉得是一部良番了（虽然推图进度慢的可以）画风清新音乐好听，和素晴（没有日）是同一时间的番，据说销量也是黑马，在此强推没有看过的可以去看看。...\n    * post_time : 1481049163000\n    * post_title : 为哈尔希洛而拉票（没想到我居然会为男的拉选票）长文本注意！\n    * praise_count : 17\n    * reply_count : 80\n    * sex : 0\n    * tags : []\n    */-->\n    <TextView\n        android:id=\"@+id/tv_name\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_author_avatar\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_author_avatar\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_author_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_reply_count\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:drawableLeft=\"@drawable/ic_comment_grey\"\n        android:drawableTint=\"@color/gray\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_author_avatar\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_author_avatar\"\n        />\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_des\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp74\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp6\"\n        app:layout_constraintEnd_toStartOf=\"@+id/iv_image\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/iv_author_avatar\">\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:ellipsize=\"end\"\n            android:maxLines=\"1\"\n            android:textColor=\"@color/black_80\"\n            android:textSize=\"@dimen/text_size_14\"/>\n\n        <TextView\n            android:id=\"@+id/tv_summary\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:ellipsize=\"end\"\n            android:textColor=\"@color/font_gray\"\n            android:textSize=\"@dimen/text_size_12\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_title\"/>\n    </android.support.constraint.ConstraintLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_image\"\n        android:layout_width=\"@dimen/dp65\"\n        android:layout_height=\"@dimen/dp78\"\n        android:layout_marginTop=\"@dimen/dp6\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/iv_author_avatar\"/>\n\n    <TextView\n\n        android:id=\"@+id/tv_img_count\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@drawable/shape_img_count_bg\"\n        android:drawableLeft=\"@drawable/ic_pic_num\"\n        android:ellipsize=\"end\"\n        android:minEms=\"3\"\n        android:paddingBottom=\"@dimen/dp1\"\n        android:paddingLeft=\"@dimen/dp6\"\n        android:paddingTop=\"@dimen/dp1\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_image\"\n        app:layout_constraintEnd_toEndOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_group\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintTop_toBottomOf=\"@+id/cl_des\"/>\n\n    <TextView\n        android:id=\"@+id/tv_time\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:textColor=\"@color/font_gray\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/cl_des\"/>\n\n    <Space\n        android:id=\"@+id/space\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp10\"\n        app:layout_constraintTop_toBottomOf=\"@id/tv_group\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:background=\"@color/gray_alpha_80\"\n        android:paddingTop=\"@dimen/dp10\"\n        app:layout_constraintTop_toBottomOf=\"@+id/space\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_region_body.xml",
    "content": "<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"center\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:minLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"@dimen/dp2\"\n            android:paddingLeft=\"@dimen/dp3\"\n            android:paddingRight=\"@dimen/dp3\"\n            android:paddingTop=\"@dimen/dp2\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_play_num\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:src=\"@drawable/ic_upper_info_views\"\n                android:tint=\"@color/gray\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_play_num\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/dp3\"\n                android:maxEms=\"6\"\n                android:minEms=\"6\"\n                android:text=\"xxxx\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_video_online\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:layout_marginRight=\"@dimen/dp3\"\n                android:src=\"@drawable/ic_promo_index_follow\"\n                android:tint=\"@color/gray\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toStartOf=\"@+id/tv_video_favourite\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_video_online_region\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:layout_marginRight=\"@dimen/dp3\"\n                android:src=\"@drawable/ic_upper_info_danmakus\"\n                android:tint=\"@color/gray\"\n                android:visibility=\"gone\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toStartOf=\"@+id/tv_video_favourite\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_favourite\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center\"\n                android:paddingRight=\"@dimen/dp4\"\n                android:text=\"xxxx\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintStart_toEndOf=\"@+id/tv_video_play_num\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n        </android.support.constraint.ConstraintLayout>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_region_footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/tv_no\"\n    android:layout_width=\"match_parent\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:layout_height=\"@dimen/dp38\"\n    android:clickable=\"true\"\n    android:layout_below=\"@+id/fl_content\"\n    android:gravity=\"center\"\n    android:text=\"(╭￣3￣)╭♡ 再怎么找也没有啦\"\n    android:textColor=\"@color/black_alpha_45\"\n    android:textSize=\"@dimen/text_size_12\"\n    android:visibility=\"visible\"/>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_region_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp6\">\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/cl_type_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp35\">\n\n        <ImageView\n            android:id=\"@+id/iv_icon\"\n            android:layout_width=\"@dimen/dp22\"\n            android:layout_height=\"@dimen/dp22\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            />\n\n        <TextView\n            android:id=\"@+id/tv_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"5dp\"\n            android:text=\"xxxxx\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_look_up\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"@drawable/shape_count_down\"\n            android:padding=\"@dimen/dp4\"\n            android:text=\"进去看看\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"@dimen/text_size_12\"\n            android:visibility=\"gone\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n\n        <TextView\n            android:id=\"@+id/tv_rank\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:layout_marginTop=\"8dp\"\n            android:background=\"@drawable/shape_btn_rank_bg\"\n            android:drawablePadding=\"@dimen/dp3\"\n            android:drawableStart=\"@drawable/ic_header_indicator_rank\"\n            android:gravity=\"center\"\n            android:padding=\"@dimen/dp2\"\n            android:text=\"排行榜\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"@dimen/text_size_12\"\n            android:visibility=\"visible\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"/>\n    </android.support.constraint.ConstraintLayout>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_region_recommend_entrance.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"wrap_content\"\n              android:background=\"@color/white\"\n              android:orientation=\"vertical\"\n              android:paddingBottom=\"@dimen/dp10\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_region_type_body.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:clickable=\"true\"\n    android:layout_height=\"135dp\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:padding=\"@dimen/dp10\">\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp120\"\n        android:layout_marginStart=\"0dp\"\n        android:padding=\"@dimen/dp2\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintDimensionRatio=\"4:3\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:ellipsize=\"end\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:minLines=\"2\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_up\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginBottom=\"@dimen/dp4\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_up\"\n        app:layout_constraintBottom_toTopOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_up\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_up\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_up\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_video_play_num\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginLeft=\"@dimen/dp4\"\n        android:src=\"@drawable/ic_upper_info_views\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:maxEms=\"6\"\n        android:minEms=\"6\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_danmaku\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_upper_info_danmakus\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_video_danmaku\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_danmaku\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_video_play\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_region_type_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp35\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:text=\"xxxxx\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_search_archive.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:orientation=\"vertical\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\">\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_search_archive_movie.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingEnd=\"@dimen/dp10\"\n    android:paddingStart=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline4\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.36\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp140\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline4\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/search_result_ic_movie\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:text=\"电影\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_state\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/iv_video_state\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_area\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_staff\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_area\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_actors\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_staff\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_search_archive_movie_more.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginRight=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_more\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"更多热门评论 >>\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_search_archive_seanson_more.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginRight=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_more\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"更多热门评论 >>\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_search_archive_season.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingEnd=\"@dimen/dp10\"\n    android:paddingStart=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline4\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.36\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp140\"\n        android:layout_marginRight=\"@dimen/dp10\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline4\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/search_result_ic_bangumi\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:text=\"番剧\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_state\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/iv_video_state\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_des\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_newest_season\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp6\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline4\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_video_des\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_search_archive_video.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"120dp\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp100\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintDimensionRatio=\"4:3\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_duration\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/dp10\"\n        android:background=\"@color/black_alpha_60\"\n        android:minWidth=\"@dimen/dp32\"\n        android:padding=\"@dimen/dp2\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_preview\"\n        app:layout_constraintEnd_toEndOf=\"@id/iv_video_preview\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:ellipsize=\"end\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:minLines=\"2\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_preview\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_up\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginBottom=\"@dimen/dp4\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_up\"\n        app:layout_constraintBottom_toTopOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_video_up\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_up\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_up\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_up\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_video_play_num\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:src=\"@drawable/ic_upper_info_views\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:maxEms=\"6\"\n        android:minEms=\"6\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_danmaku\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_upper_info_danmakus\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_video_danmaku\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_danmaku\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_video_play\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_up_detail_archive_favourite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"wrap_content\"\n              android:layout_height=\"wrap_content\"\n              android:orientation=\"vertical\">\n\n    <include layout=\"@layout/common_recycler\"/>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_up_detail_archive_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp30\"\n    android:layout_marginBottom=\"@dimen/dp5\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:paddingLeft=\"@dimen/dp10\">\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:text=\"xxxxx\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_more\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginRight=\"@dimen/dp4\"\n        android:gravity=\"center_vertical\"\n        android:text=\"进去看看\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_up_detail_archive_live.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp45\"\n    android:layout_marginBottom=\"@dimen/dp10\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ImageView\n            android:id=\"@+id/iv_live_state\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:layout_marginLeft=\"@dimen/dp12\"\n            android:src=\"@drawable/ic_header_movie_fall\"/>\n\n        <TextView\n            android:id=\"@+id/tv_live_state\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:layout_marginLeft=\"@dimen/dp10\"\n            android:layout_toRightOf=\"@+id/iv_live_state\"\n            android:textColor=\"@color/pink_text_color\"/>\n    </RelativeLayout>\n\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_up_detail_archive_submited_video_item.xml",
    "content": "<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    app:cardBackgroundColor=\"@color/card_view_background\"\n    app:cardCornerRadius=\"@dimen/dp4\"\n    app:cardElevation=\"@dimen/dp2\">\n\n    <android.support.constraint.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"@dimen/dp4\">\n\n        <ImageView\n            android:id=\"@+id/iv_video_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"@dimen/dp120\"\n            android:scaleType=\"fitXY\"/>\n\n        <TextView\n            android:id=\"@+id/tv_video_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"@dimen/dp4\"\n            android:ellipsize=\"end\"\n            android:lineSpacingExtra=\"@dimen/dp2\"\n            android:maxLines=\"2\"\n            android:minLines=\"2\"\n            android:paddingLeft=\"@dimen/dp4\"\n            android:paddingRight=\"@dimen/dp4\"\n            android:text=\"xxxx\"\n            android:textColor=\"@color/font_normal\"\n            android:textSize=\"@dimen/text_size_14\"\n            app:layout_constraintTop_toBottomOf=\"@id/iv_video_preview\"/>\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"@dimen/dp2\"\n            android:paddingLeft=\"@dimen/dp3\"\n            android:paddingRight=\"@dimen/dp3\"\n            android:paddingTop=\"@dimen/dp2\"\n            app:layout_constraintTop_toBottomOf=\"@+id/tv_video_title\">\n\n            <ImageView\n                android:id=\"@+id/iv_video_play_num\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:src=\"@drawable/ic_upper_info_views\"\n                android:tint=\"@color/gray\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_play_num\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/dp3\"\n                android:maxEms=\"6\"\n                android:minEms=\"6\"\n                android:text=\"xxxx\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_video_online\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:layout_marginRight=\"@dimen/dp3\"\n                android:src=\"@drawable/ic_promo_index_follow\"\n                android:tint=\"@color/gray\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toStartOf=\"@+id/tv_video_favourite\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <ImageView\n                android:id=\"@+id/iv_video_online_region\"\n                android:layout_width=\"@dimen/dp16\"\n                android:layout_height=\"@dimen/dp16\"\n                android:layout_marginRight=\"@dimen/dp3\"\n                android:src=\"@drawable/ic_upper_info_danmakus\"\n                android:tint=\"@color/gray\"\n                android:visibility=\"gone\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintEnd_toStartOf=\"@+id/tv_video_favourite\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <TextView\n                android:id=\"@+id/tv_video_favourite\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center\"\n                android:paddingRight=\"@dimen/dp4\"\n                android:text=\"xxxx\"\n                android:textColor=\"@color/black_alpha_45\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintHorizontal_bias=\"0.5\"\n                app:layout_constraintStart_toEndOf=\"@+id/tv_video_play_num\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n        </android.support.constraint.ConstraintLayout>\n    </android.support.constraint.ConstraintLayout>\n</android.support.v7.widget.CardView>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_item_up_submited_video_electricize.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginTop=\"@dimen/dp10\"\n    android:layout_marginBottom=\"@dimen/dp10\"\n    android:orientation=\"vertical\">\n\n    <android.support.v7.widget.CardView\n        android:id=\"@+id/card_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"130dp\"\n        android:layout_margin=\"@dimen/dp10\"\n        app:cardBackgroundColor=\"@color/card_view_background\"\n        app:cardCornerRadius=\"@dimen/dp2\"\n        app:cardElevation=\"@dimen/dp0\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\">\n\n            <ImageView\n                android:id=\"@+id/iv_pay_bangumi_tips\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:padding=\"@dimen/dp10\"\n                android:src=\"@drawable/ic_charge_power\"/>\n\n            <TextView\n                android:id=\"@+id/tv_pay\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"@dimen/dp20\"\n                android:layout_toEndOf=\"@+id/iv_pay_bangumi_tips\"\n                android:paddingTop=\"@dimen/dp5\"\n                android:text=\"请赐予我力量吧！\"\n                android:textColor=\"@color/colorPrimary\"\n                android:textSize=\"@dimen/text_size_14\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_pay_bangumi_tips\"\n                app:layout_constraintTop_toTopOf=\"@+id/iv_pay_bangumi_tips\"/>\n\n            <TextView\n                android:id=\"@+id/tv_pay_count\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_below=\"@+id/tv_pay\"\n                android:layout_toEndOf=\"@+id/iv_pay_bangumi_tips\"\n                android:text=\"已有10086人为我充电\"\n                android:textColor=\"@color/colorPrimary\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_pay_bangumi_tips\"\n                app:layout_constraintTop_toBottomOf=\"@+id/tv_pay\"/>\n\n            <TextView\n                android:layout_width=\"70dp\"\n                android:layout_height=\"@dimen/dp30\"\n                android:layout_marginEnd=\"@dimen/dp10\"\n                android:layout_marginTop=\"@dimen/dp20\"\n                android:background=\"@drawable/shape_bangumi_index_pink_bg\"\n                android:gravity=\"center\"\n                android:text=\"充电\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_14\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\"/>\n\n            <View\n                android:id=\"@id/v_hor\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"1dp\"\n                android:layout_below=\"@+id/iv_pay_bangumi_tips\"\n                android:layout_marginEnd=\"@dimen/dp10\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:background=\"@color/line_bg\"\n                app:layout_constraintTop_toBottomOf=\"@+id/iv_pay_bangumi_tips\"/>\n\n            <TextView\n                android:id=\"@+id/tv_week_count\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginBottom=\"@dimen/dp5\"\n                android:layout_marginTop=\"@dimen/dp6\"\n                app:layout_constraintStart_toStartOf=\"parent\"\n                app:layout_constraintEnd_toEndOf=\"parent\"\n                android:paddingBottom=\"@dimen/dp10\"\n                android:paddingTop=\"@dimen/dp10\"\n                android:text=\"更多电量，更多灵感 ヾ (o ° ω °  ) ノ\"\n                android:textColor=\"@color/colorPrimary\"\n                android:textSize=\"@dimen/text_size_12\"\n                app:layout_constraintBottom_toBottomOf=\"parent\"\n                app:layout_constraintStart_toEndOf=\"@id/iv_avatar4\"\n                app:layout_constraintTop_toBottomOf=\"@id/v_hor\"/>\n\n        </android.support.constraint.ConstraintLayout>\n\n    </android.support.v7.widget.CardView>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_up_submited_video_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"120dp\"\n    android:layout_marginLeft=\"@dimen/dp10\"\n    android:layout_marginRight=\"@dimen/dp10\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp100\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintDimensionRatio=\"4:3\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:ellipsize=\"end\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:minLines=\"2\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_duration\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/dp10\"\n        android:background=\"@color/black_alpha_60\"\n        android:minWidth=\"@dimen/dp32\"\n        android:padding=\"@dimen/dp2\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_preview\"\n        app:layout_constraintEnd_toEndOf=\"@id/iv_video_preview\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_video_play_num\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:src=\"@drawable/ic_upper_info_views\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:maxEms=\"6\"\n        android:minEms=\"6\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_danmaku\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_upper_info_danmakus\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_video_danmaku\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_danmaku\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_video_play\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_video_detail_comment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"@dimen/dp12\"\n    android:paddingRight=\"@dimen/dp12\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_avatar\"\n        android:layout_width=\"@dimen/dp48\"\n        android:layout_height=\"@dimen/dp48\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_lv\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginRight=\"@dimen/dp2\"\n        android:layout_marginTop=\"@dimen/dp16\"\n        app:layout_constraintEnd_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintStart_toStartOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toBottomOf=\"@id/iv_avatar\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_uname\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:text=\"sssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_like\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_feedback_like_grey\"\n        android:minEms=\"3\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toStartOf=\"@id/tv_dis_like\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_view_menu\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_dis_like\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_feedback_disagree_grey\"\n        android:minEms=\"2\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toStartOf=\"@id/iv_view_menu\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_view_menu\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_view_menu\"\n        android:layout_width=\"@dimen/dp14\"\n        android:layout_height=\"@dimen/dp14\"\n        android:src=\"@drawable/ic_promo_index_more_v2\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_floor\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:minEms=\"2\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n    <TextView\n        android:id=\"@+id/tv_time\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_floor\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_uname\"/>\n\n    <TextView\n        android:id=\"@+id/tv_message\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:minLines=\"2\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"@id/tv_floor\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_time\"/>\n\n    <TextView\n        android:id=\"@+id/tv_rcount\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:minEms=\"2\"\n        android:paddingBottom=\"@dimen/dp10\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_message\"/>\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:background=\"@color/gray_light\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_video_detail_more.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cl_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginRight=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n\n    <TextView\n        android:id=\"@+id/tv_more\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"更多热门评论 >>\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintHorizontal_bias=\"0.5\"\n        app:layout_constraintStart_toStartOf=\"parent\"/>\n\n    <View\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"1px\"\n        android:layout_marginLeft=\"@dimen/dp15\"\n        android:background=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_more\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_video_detail_summary_des.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"@color/white\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp10\">\n\n    <TextView\n        android:id=\"@+id/tv_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_play_num\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:src=\"@drawable/ic_upper_info_views\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintTop_toBottomOf=\"@id/tv_title\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_play_num\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:minWidth=\"@dimen/dp35\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_play_num\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_play_num\"/>\n\n\n    <ImageView\n        android:id=\"@+id/iv_video_danmaku\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_upper_info_danmakus\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_video_play_num\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_play_num\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_danmaku\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_danmaku\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_play_num\"/>\n\n    <TextView\n        android:id=\"@+id/tv_des\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintTop_toBottomOf=\"@+id/iv_video_play_num\"/>\n\n    <View\n        android:id=\"@+id/v_hor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@color/line_bg\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_des\"/>\n\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline1\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.25\"/>\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline2\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.5\"/>\n\n    <android.support.constraint.Guideline\n        android:id=\"@+id/guideline3\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_percent=\"0.75\"/>\n\n    <TextView\n        android:id=\"@+id/tv_down\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_header_activity_center\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp5\"\n        android:text=\"ddd\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline3\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_hor\"/>\n\n    <TextView\n        android:id=\"@+id/tv_favourite\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_collect\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp5\"\n        android:text=\"ddd\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline3\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline2\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_hor\"/>\n\n    <TextView\n        android:id=\"@+id/tv_coin\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_coin\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp5\"\n        android:text=\"ddd\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toStartOf=\"@id/guideline2\"\n        app:layout_constraintStart_toEndOf=\"@id/guideline1\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_hor\"/>\n\n    <TextView\n        android:id=\"@+id/tv_share\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:drawableLeft=\"@drawable/ic_share_green\"\n        android:gravity=\"center\"\n        android:padding=\"@dimen/dp5\"\n        android:text=\"ddd\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintEnd_toEndOf=\"@id/guideline1\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/v_hor\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_video_detail_summary_owner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"@color/white\"\n    android:orientation=\"vertical\"\n    android:layout_marginTop=\"@dimen/dp8\"\n    android:padding=\"@dimen/dp10\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/iv_avatar\"\n        android:layout_width=\"@dimen/dp36\"\n        android:layout_height=\"@dimen/dp36\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_name\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:text=\"sssss\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_avatar\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_time\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:text=\"ssss\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_avatar\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_avatar\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_electricize\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:background=\"@drawable/shape_tv_electricize\"\n        android:paddingBottom=\"@dimen/dp3\"\n        android:paddingLeft=\"@dimen/dp6\"\n        android:paddingRight=\"@dimen/dp6\"\n        android:paddingTop=\"@dimen/dp3\"\n        android:text=\"充电\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_avatar\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_avatar\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_favourite\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginEnd=\"@dimen/dp15\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:background=\"@drawable/shape_tv_favourite\"\n        android:paddingBottom=\"@dimen/dp3\"\n        android:paddingLeft=\"@dimen/dp6\"\n        android:paddingRight=\"@dimen/dp6\"\n        android:paddingTop=\"@dimen/dp3\"\n        android:text=\"关注\"\n        android:textColor=\"@color/pink_text_color\"\n        android:textSize=\"@dimen/text_size_16\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_avatar\"\n        app:layout_constraintEnd_toStartOf=\"@id/tv_electricize\"\n        app:layout_constraintTop_toTopOf=\"@+id/iv_avatar\"\n        />\n\n    <View\n        android:id=\"@+id/v_hor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1px\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:background=\"@color/line_bg\"\n        app:layout_constraintTop_toBottomOf=\"@id/iv_avatar\"/>\n\n    <TextView\n        android:id=\"@+id/tv_tag\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"视频相关标签\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_13\"\n        app:layout_constraintTop_toBottomOf=\"@id/v_hor\"\n        />\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp10\"\n        android:text=\"编辑\"\n        android:textColor=\"@color/black_alpha_30\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/tv_tag\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@id/tv_tag\"\n        />\n\n    <com.yoyiyi.soleil.widget.flowlayout.TagFlowLayout\n        android:id=\"@id/tags_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_tag\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_video_detail_summary_relate.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"120dp\"\n    android:clickable=\"true\"\n    android:background=\"@color/white\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n\n    <ImageView\n        android:id=\"@+id/iv_video_preview\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"@dimen/dp100\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintDimensionRatio=\"4:3\"\n        app:layout_constraintTop_toTopOf=\"parent\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_title\"\n        android:layout_width=\"@dimen/dp0\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:layout_marginTop=\"@dimen/dp4\"\n        android:ellipsize=\"end\"\n        android:lineSpacingExtra=\"@dimen/dp2\"\n        android:maxLines=\"3\"\n        android:minLines=\"2\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_up\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginBottom=\"@dimen/dp4\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_up\"\n        app:layout_constraintBottom_toTopOf=\"@+id/iv_video_play_num\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"\n        />\n\n    <TextView\n        android:id=\"@+id/tv_video_up\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_up\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_up\"\n        app:layout_constraintTop_toTopOf=\"@id/iv_video_up\"\n        />\n\n    <ImageView\n        android:id=\"@+id/iv_video_play_num\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginLeft=\"@dimen/dp8\"\n        android:src=\"@drawable/ic_upper_info_views\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@id/iv_video_preview\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/dp3\"\n        android:maxEms=\"6\"\n        android:minEms=\"6\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@+id/iv_video_play_num\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_video_danmaku\"\n        android:layout_width=\"@dimen/dp16\"\n        android:layout_height=\"@dimen/dp16\"\n        android:layout_marginRight=\"@dimen/dp3\"\n        android:src=\"@drawable/ic_upper_info_danmakus\"\n        android:tint=\"@color/gray\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintEnd_toStartOf=\"@+id/tv_video_danmaku\"/>\n\n    <TextView\n        android:id=\"@+id/tv_video_danmaku\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:paddingRight=\"@dimen/dp4\"\n        android:text=\"xxxx\"\n        android:textColor=\"@color/black_alpha_45\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintBottom_toBottomOf=\"@id/iv_video_preview\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_video_play\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_item_video_detail_summary_relate_head.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:clickable=\"true\"\n    android:foreground=\"?attr/selectableItemBackground\"\n    android:paddingBottom=\"@dimen/dp5\"\n    android:paddingLeft=\"@dimen/dp10\"\n    android:layout_marginTop=\"@dimen/dp8\"\n    android:background=\"@color/white\"\n    android:paddingRight=\"@dimen/dp10\"\n    android:paddingTop=\"@dimen/dp5\">\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"视频相关\"\n        android:textColor=\"@color/black_80\"\n        android:textSize=\"@dimen/text_size_14\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_load_more.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"wrap_content\"\n             android:orientation=\"vertical\">\n\n    <LinearLayout\n        android:id=\"@+id/ll_loading\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        android:padding=\"@dimen/dp10\">\n\n        <com.yoyiyi.soleil.widget.ProgressWheel\n            android:id=\"@+id/pw_load_more\"\n            android:layout_width=\"25dp\"\n            android:layout_height=\"25dp\"\n            app:matProg_barColor=\"@color/colorPrimary\"\n            app:matProg_barWidth=\"@dimen/dp3\"\n            app:matProg_fillRadius=\"false\"\n            app:matProg_linearProgress=\"true\"\n            app:matProg_progressIndeterminate=\"true\"/>\n\n        <TextView\n            android:id=\"@+id/tv_load_more\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:layout_marginLeft=\"5dp\"\n            android:layout_toRightOf=\"@id/pw_load_more\"\n            android:text=\"正在加载\"\n            android:textColor=\"@color/gray\"\n            android:textSize=\"@dimen/text_size_14\"/>\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/ll_load_fail\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        android:padding=\"@dimen/dp10\"\n        android:visibility=\"gone\">\n\n        <TextView\n            android:id=\"@+id/tv_load_fail\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:layout_marginLeft=\"5dp\"\n            android:layout_toRightOf=\"@id/pw_load_more\"\n            android:text=\"加载失败,电波无法到达啦\"\n            android:textColor=\"@color/gray\"\n            android:textSize=\"@dimen/text_size_14\"/>\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/ll_load_end\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        android:padding=\"@dimen/dp10\"\n        android:visibility=\"gone\">\n\n        <TextView\n            android:id=\"@+id/tv_load_end\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:layout_marginLeft=\"5dp\"\n            android:layout_toRightOf=\"@id/pw_load_more\"\n            android:text=\"(╭￣3￣)╭♡ 再怎么找也没有啦\"\n            android:textColor=\"@color/gray\"\n            android:textSize=\"@dimen/text_size_14\"/>\n    </LinearLayout>\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"wrap_content\"\n             android:layout_height=\"wrap_content\"\n             android:layout_centerInParent=\"true\"\n             android:orientation=\"vertical\">\n\n    <com.yoyiyi.soleil.widget.ProgressWheel\n        android:id=\"@+id/pw_loading\"\n        android:layout_width=\"@dimen/dp50\"\n        android:layout_height=\"@dimen/dp50\"\n        app:matProg_barColor=\"@color/colorPrimary\"\n        app:matProg_barWidth=\"@dimen/dp4\"\n        app:matProg_fillRadius=\"false\"\n        app:matProg_linearProgress=\"true\"\n        app:matProg_progressIndeterminate=\"true\"/>\n\n\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_main_toolbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\">\n\n    <android.support.design.widget.CoordinatorLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <android.support.design.widget.AppBarLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <android.support.v7.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"?attr/actionBarSize\"\n                android:background=\"@color/colorPrimary\"\n                android:contentInsetStart=\"0dp\"\n                app:contentInsetStart=\"0dp\"\n                app:layout_scrollFlags=\"scroll|enterAlways|snap\"\n                app:popupTheme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n                app:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\">\n\n\n                <LinearLayout\n                    android:id=\"@+id/llNavigation\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"match_parent\"\n                    android:gravity=\"center_vertical\"\n                    android:orientation=\"horizontal\">\n\n\n                    <ImageView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:src=\"@drawable/ic_drawer_home\"/>\n\n                    <com.yoyiyi.soleil.widget.CircleImageView\n                        android:id=\"@+id/toolbarUserAvatar\"\n                        android:layout_width=\"@dimen/dp35\"\n                        android:layout_height=\"@dimen/dp35\"\n                        android:layout_marginEnd=\"@dimen/dp3\"\n                        android:layout_marginStart=\"@dimen/dp16\"\n                        android:src=\"@mipmap/ic_user_yoyiyi\"\n                        app:border_color=\"@color/white\"\n                        app:border_width=\"@dimen/dp1\"/>\n\n                    <TextView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginStart=\"@dimen/dp10\"\n                        android:maxLines=\"1\"\n                        android:text=\"soleil雪寂\"\n                        android:textColor=\"@color/white\"\n                        android:textSize=\"@dimen/text_size_16\"/>\n                </LinearLayout>\n            </android.support.v7.widget.Toolbar>\n\n            <com.flyco.tablayout.SlidingTabLayout\n                android:id=\"@+id/stlTabs\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/dp48\"\n                android:background=\"@color/colorPrimary\"\n                android:paddingLeft=\"@dimen/dp10\"\n                android:paddingRight=\"@dimen/dp10\"\n                app:tl_indicator_corner_radius=\"@dimen/dp1\"\n                app:tl_indicator_height=\"@dimen/dp2\"\n                app:tl_indicator_width=\"@dimen/dp40\"\n                app:tl_tab_space_equal=\"true\"/>\n        </android.support.design.widget.AppBarLayout>\n\n        <com.yoyiyi.soleil.widget.NoScrollViewPager\n            android:id=\"@+id/viewPager\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:overScrollMode=\"never\"\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"/>\n    </android.support.design.widget.CoordinatorLayout>\n    <com.miguelcatalan.materialsearchview.MaterialSearchView\n        android:id=\"@+id/searchView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"/>\n</FrameLayout>\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/res/layout/layout_media_controller.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:fitsSystemWindows=\"true\">\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp48\"\n        android:background=\"@color/media_controller_bg\"\n        android:fitsSystemWindows=\"true\">\n\n        <ImageView\n            android:id=\"@+id/media_controller_back\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentStart=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:layout_marginStart=\"@dimen/dp10\"\n            android:padding=\"@dimen/dp10\"\n            android:src=\"@drawable/bili_player_back_button\"\n            android:tint=\"@color/white\"/>\n\n        <TextView\n            android:id=\"@+id/media_controller_title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerInParent=\"true\"\n            android:layout_marginStart=\"@dimen/dp10\"\n            android:layout_toEndOf=\"@+id/media_controller_back\"\n            android:maxLines=\"1\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"@dimen/text_size_16\"/>\n    </RelativeLayout>\n\n    <ImageView\n        android:id=\"@+id/media_controller_tv_play\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_above=\"@+id/media_controller_controls\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_marginEnd=\"@dimen/dp10\"\n        android:padding=\"@dimen/dp10\"\n        android:src=\"@drawable/ic_tv_play\"/>\n\n    <LinearLayout\n        android:id=\"@+id/media_controller_controls\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@color/media_controller_bg\"\n        android:orientation=\"vertical\">\n\n        <RelativeLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"horizontal\">\n\n\n            <SeekBar\n                android:id=\"@+id/media_controller_seekbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:focusable=\"true\"\n                android:max=\"1000\"\n                android:maxHeight=\"@dimen/dp3\"\n                android:minHeight=\"@dimen/dp3\"\n                android:paddingLeft=\"@dimen/dp16\"\n                android:paddingRight=\"@dimen/dp16\"\n                android:progressDrawable=\"@color/colorPrimary\"\n                android:thumb=\"@drawable/videoplayer_erect_icon_round\"/>\n        </RelativeLayout>\n\n        <RelativeLayout\n            android:id=\"@+id/media_controller_controls_buttons\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"@dimen/dp12\"\n            android:layout_marginRight=\"@dimen/dp12\"\n            android:layout_marginTop=\"@dimen/dp2\"\n            android:orientation=\"horizontal\">\n\n            <ImageButton\n                android:id=\"@+id/media_controller_play_pause\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginStart=\"@dimen/dp10\"\n                android:background=\"@null\"\n                android:gravity=\"center\"\n                android:src=\"@drawable/bili_player_play_can_play\"/>\n\n            <TextView\n                android:id=\"@+id/media_controller_time_current\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerVertical=\"true\"\n                android:layout_marginStart=\"@dimen/dp22\"\n                android:layout_toEndOf=\"@+id/media_controller_play_pause\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                android:textStyle=\"bold\"/>\n\n            <TextView\n                android:id=\"@+id/time_line\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginLeft=\"1dp\"\n                android:layout_marginRight=\"1dp\"\n                android:layout_toEndOf=\"@+id/media_controller_time_current\"\n                android:text=\"/\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"/>\n\n            <TextView\n                android:id=\"@+id/media_controller_time_total\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerVertical=\"true\"\n                android:layout_toEndOf=\"@+id/time_line\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"@dimen/text_size_12\"\n                android:textStyle=\"bold\"/>\n\n            <LinearLayout\n                android:id=\"@+id/media_controller_danmaku_layout\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/dp20\"\n                android:layout_toStartOf=\"@+id/media_controller_controls_quality_layout\"\n                android:clickable=\"true\"\n                android:foreground=\"?attr/selectableItemBackground\"\n                android:gravity=\"center\"\n                android:orientation=\"vertical\"\n                android:padding=\"@dimen/dp3\">\n\n                <ImageView\n                    android:id=\"@+id/media_controller_danmaku_switch\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/bili_player_danmaku_is_open\"/>\n\n                <TextView\n                    android:id=\"@+id/media_controller_danmaku_text\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:paddingTop=\"@dimen/dp3\"\n                    android:text=\"弹幕开\"\n                    android:textColor=\"@color/white\"\n                    android:textSize=\"@dimen/text_size_12\"/>\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/media_controller_controls_quality_layout\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/dp20\"\n                android:layout_toStartOf=\"@+id/media_controller_controls_lock_layout\"\n                android:clickable=\"true\"\n                android:foreground=\"?attr/selectableItemBackground\"\n                android:gravity=\"center\"\n                android:orientation=\"vertical\"\n                android:padding=\"@dimen/dp3\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/ic_player_media_quality_medium\"/>\n\n                <TextView\n                    android:id=\"@+id/media_controller_quality_text\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:paddingTop=\"@dimen/dp3\"\n                    android:text=\"清晰\"\n                    android:textColor=\"@color/white\"\n                    android:textSize=\"@dimen/text_size_12\"/>\n            </LinearLayout>\n\n            <LinearLayout\n                android:id=\"@+id/media_controller_controls_lock_layout\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentEnd=\"true\"\n                android:layout_centerInParent=\"true\"\n                android:layout_marginEnd=\"@dimen/dp10\"\n                android:clickable=\"true\"\n                android:foreground=\"?attr/selectableItemBackground\"\n                android:gravity=\"center\"\n                android:orientation=\"vertical\"\n                android:padding=\"@dimen/dp3\">\n\n                <ImageView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:src=\"@drawable/ic_player_locked_2\"/>\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:paddingTop=\"@dimen/dp3\"\n                    android:text=\"锁屏\"\n                    android:textColor=\"@color/white\"\n                    android:textSize=\"@dimen/text_size_12\"/>\n            </LinearLayout>\n        </RelativeLayout>\n    </LinearLayout>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/layout_recommend_banner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n             android:layout_width=\"match_parent\"\n             android:paddingBottom=\"@dimen/dp5\"\n             android:layout_height=\"wrap_content\">\n\n    <com.youth.banner.Banner\n        android:id=\"@+id/banner\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/dp110\"\n        app:delay_time=\"3000\"\n        app:indicator_drawable_selected=\"@drawable/shape_dots_select\"\n        app:indicator_drawable_unselected=\"@drawable/shape_dots_default\"\n        app:indicator_height=\"@dimen/dp6\"\n        app:indicator_width=\"@dimen/dp6\"\n        app:scroll_time=\"1500\"/>\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/layout_search_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/search_card_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp50\"\n    android:layout_marginEnd=\"@dimen/dp5\"\n    android:layout_marginStart=\"@dimen/dp5\"\n    android:layout_marginTop=\"@dimen/dp10\"\n    android:fitsSystemWindows=\"true\"\n    android:focusable=\"true\"\n    android:focusableInTouchMode=\"true\"\n    app:cardBackgroundColor=\"@color/cardview_light_background\"\n    app:cardCornerRadius=\"@dimen/dp1\"\n    app:cardElevation=\"@dimen/dp0\">\n\n    <ImageView\n        android:id=\"@+id/iv_search_back\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center|start\"\n        android:padding=\"@dimen/dp12\"\n        android:src=\"@drawable/ic_arrow_back_black\"/>\n\n    <EditText\n        android:id=\"@+id/et_search\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"center|end\"\n        android:layout_marginEnd=\"@dimen/dp75\"\n        android:layout_marginStart=\"@dimen/dp40\"\n        android:background=\"@color/white\"\n        android:gravity=\"center_vertical\"\n        android:hint=\"搜索视频、番剧、up主或av号\"\n        android:imeOptions=\"actionSearch\"\n        android:maxLines=\"1\"\n        android:textColor=\"@color/font_normal\"\n        android:textSize=\"@dimen/text_size_14\"/>\n\n\n    <ImageView\n        android:id=\"@+id/iv_search_clear\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center|end\"\n        android:layout_marginEnd=\"@dimen/dp60\"\n        android:src=\"@drawable/ic_close_black\"\n        android:visibility=\"gone\"/>\n\n\n    <ImageView\n        android:id=\"@+id/iv_search\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center|end\"\n        android:clickable=\"true\"\n        android:padding=\"@dimen/dp12\"\n        android:src=\"@drawable/ic_search_query\"/>\n</android.support.v7.widget.CardView>\n\n"
  },
  {
    "path": "app/src/main/res/layout/nav_header_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/dp200\"\n    android:background=\"@color/colorPrimary\"\n    android:gravity=\"bottom\"\n    android:paddingLeft=\"@dimen/dp16\"\n    android:paddingTop=\"@dimen/dp25\"\n    android:theme=\"@style/ThemeOverlay.AppCompat.Dark\">\n\n    <com.yoyiyi.soleil.widget.CircleImageView\n        android:id=\"@+id/ic_user\"\n        android:layout_width=\"@dimen/dp74\"\n        android:layout_height=\"@dimen/dp74\"\n        android:src=\"@mipmap/ic_user_yoyiyi\"\n        app:border_color=\"@android:color/white\"/>\n\n    <TextView\n        android:id=\"@+id/tv_name\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp10\"\n        android:text=\"soleil雪寂\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_14\"\n        app:layout_constraintTop_toBottomOf=\"@+id/ic_user\"/>\n\n    <TextView\n        android:id=\"@+id/tv_lv\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/dp3\"\n        android:background=\"@drawable/shape_white_border\"\n        android:gravity=\"center\"\n        android:text=\"LV6\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"10sp\"\n        app:layout_constraintStart_toEndOf=\"@+id/tv_name\"\n        app:layout_constraintTop_toTopOf=\"@+id/tv_name\"/>\n\n    <TextView\n        android:id=\"@+id/tv_state\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp6\"\n        android:background=\"@drawable/round_wihte_bg\"\n        android:padding=\"@dimen/dp3\"\n        android:text=\"普通会员\"\n        android:textColor=\"@color/nav_head_roung_text_background\"\n        android:textSize=\"10sp\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_name\"/>\n\n    <TextView\n        android:id=\"@+id/tv_icon\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/dp6\"\n        android:padding=\"@dimen/dp3\"\n        android:text=\"硬币:10\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tv_state\"/>\n    <TextView\n        android:id=\"@+id/tv_b\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"@dimen/dp3\"\n        android:text=\"B币:10\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"@dimen/text_size_12\"\n        android:layout_marginLeft=\"@dimen/dp5\"\n        app:layout_constraintStart_toEndOf=\"@id/tv_icon\"\n        app:layout_constraintTop_toTopOf=\"@+id/tv_icon\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_head_noftiy\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginEnd=\"@dimen/dp25\"\n        android:src=\"@drawable/ic_navigation_header_notification\"\n        app:layout_constraintEnd_toStartOf=\"@+id/iv_head_switch_mode\"\n        app:layout_constraintTop_toTopOf=\"@+id/ic_user\"/>\n\n\n    <ImageView\n        android:id=\"@+id/iv_head_switch_mode\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginEnd=\"@dimen/dp10\"\n        android:src=\"@drawable/ic_switch_night\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"@+id/ic_user\"/>\n\n    <ImageView\n        android:id=\"@+id/iv_home_view\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        android:clickable=\"true\"\n        android:src=\"@drawable/bili_drawerbg_logined\"\n        android:tint=\"@color/nav_head_image_background\"/>\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/menu/menu_brower.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <item\n        android:id=\"@+id/menu_share\"\n        android:orderInCategory=\"100\"\n        android:title=\"分享\"\n        app:showAsAction=\"never\"/>\n    <item\n        android:id=\"@+id/menu_open\"\n        android:orderInCategory=\"100\"\n        android:title=\"浏览器打开\"\n        app:showAsAction=\"never\"/>\n\n    <item\n        android:id=\"@+id/menu_copy\"\n        android:orderInCategory=\"100\"\n        android:title=\"复制链接\"\n        app:showAsAction=\"never\"/>\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_interest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n\n    <item\n        android:id=\"@+id/menu_notify\"\n        android:icon=\"@drawable/ic_notifications_white\"\n        android:orderInCategory=\"100\"\n        android:title=\"通知\"\n        app:showAsAction=\"always\"/>\n\n    <item\n        android:id=\"@+id/menu_search\"\n        android:icon=\"@drawable/ic_toolbar_menu_search\"\n        android:orderInCategory=\"100\"\n        android:title=\"搜索\"\n        app:showAsAction=\"always\"/>\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n      xmlns:tools=\"http://schemas.android.com/tools\"\n      tools:context=\".MainActivity\">\n\n    <item\n        android:id=\"@+id/menu_game\"\n        android:icon=\"@drawable/ic_menu_top_game_center\"\n        android:orderInCategory=\"100\"\n        android:title=\"游戏中心\"\n        app:showAsAction=\"always\"/>\n\n    <item\n        android:id=\"@+id/menu_download\"\n        android:icon=\"@drawable/ic_toolbar_menu_download\"\n        android:orderInCategory=\"100\"\n        android:title=\"离线缓存\"\n        app:showAsAction=\"always\"/>\n\n    <item\n        android:id=\"@+id/menu_search\"\n        android:icon=\"@drawable/ic_toolbar_menu_search\"\n        android:orderInCategory=\"100\"\n        android:title=\"搜索\"\n        app:showAsAction=\"always\"/>\n\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_off.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/menu_more\"\n        android:orderInCategory=\"100\"\n        android:title=\"离线设置\"\n        app:showAsAction=\"never\" />\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_region.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n\n    <item\n        android:id=\"@+id/id_action_download\"\n        android:icon=\"@drawable/ic_toolbar_menu_download\"\n        android:orderInCategory=\"100\"\n        android:title=\"离线缓存\"\n        app:showAsAction=\"always\" />\n\n    <item\n        android:id=\"@+id/id_action_search\"\n        android:icon=\"@drawable/ic_toolbar_menu_search\"\n        android:orderInCategory=\"100\"\n        android:title=\"搜索\"\n        app:showAsAction=\"always\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_scrolling.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n      xmlns:tools=\"http://schemas.android.com/tools\"\n      tools:context=\"com.yoyiyi.soleil.module.app.video.ScrollingActivity\">\n    <item\n        android:id=\"@+id/action_settings\"\n        android:orderInCategory=\"100\"\n        android:title=\"@string/action_settings\"\n        app:showAsAction=\"never\"/>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/navigation_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <group android:checkableBehavior=\"single\"\n        android:id=\"@+id/group_nomal\">\n        <item\n            android:id=\"@+id/item_home\"\n            android:checked=\"true\"\n            android:icon=\"@drawable/ic_home_black_24dp\"\n            android:title=\"首页\"/>\n\n        <item\n            android:id=\"@+id/item_vip\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_nav_vip\"\n            android:title=\"我的大会员\"/>\n\n        <item\n            android:id=\"@+id/item_point\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_nav_point\"\n            android:title=\"会员积分\"/>\n        <item\n            android:id=\"@+id/item_unicom\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_nav_unicom\"\n            android:title=\"免流量服务\"/>\n        <item\n            android:id=\"@+id/item_down\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_file_download_black_24dp\"\n            android:title=\"离线缓存\"/>\n    </group>\n\n    <group\n        android:id=\"@+id/group_user\"\n        android:checkableBehavior=\"single\">\n\n        <item\n            android:id=\"@+id/item_view_later\"\n            android:checked=\"false\"\n            android:icon=\"@drawable/ic_view_later_24dp\"\n            android:title=\"稍后再看\"/>\n\n        <item\n            android:id=\"@+id/item_star\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_star_black_24dp\"\n            android:title=\"我的收藏\"/>\n\n        <item\n            android:id=\"@+id/item_history\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_history_black_24dp\"\n            android:title=\"历史记录\"/>\n        <item\n            android:id=\"@+id/item_people\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_people_black_24dp\"\n            android:title=\"我的关注\"/>\n        <item\n            android:id=\"@+id/item_wallet\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_account_balance_wallet_black_24dp\"\n            android:title=\"B币钱包\"/>\n    </group>\n    <group android:checkableBehavior=\"single\"\n           android:id=\"@+id/gruop_setting\"\n        >\n\n        <item\n            android:id=\"@+id/item_theme\"\n            android:checkable=\"false\"\n            android:icon=\"@drawable/ic_color_lens_black_24dp\"\n            android:title=\"主题选择\"/>\n\n        <!-- <item\n             android:id=\"@+id/item_app\"\n             android:checkable=\"false\"\n             android:icon=\"@drawable/ic_shop_black_24dp\"\n             android:title=\"@string/item_app\" />\n -->\n\n        <item\n            android:id=\"@+id/item_settings\"\n            android:icon=\"@drawable/ic_settings_black_24dp\"\n            android:title=\"设置与帮助\"/>\n\n    </group>\n</menu>"
  },
  {
    "path": "app/src/main/res/values/arrays.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string-array name=\"query_suggestions\">\n        <item>re:从零开始的异世界生活</item>\n        <item>守望先锋</item>\n        <item>暴走大事件</item>\n        <item>极限挑战</item>\n        <item>主播真会玩</item>\n        <item>起小点</item>\n        <item>爱来了别错过</item>\n        <item>敖厂长</item>\n        <item>打架吧鬼神</item>\n        <item>老九门</item>\n        <item>不可抗力</item>\n        <item>抗韩中年人</item>\n        <item>我的危险妻子</item>\n        <item>蜡笔小新</item>\n        <item>逗鱼时刻</item>\n        <item>2468499</item>\n        <item>老e</item>\n        <item>谷阿莫</item>\n        <item>大鱼海棠</item>\n        <item>逆风笑</item>\n        <item>徐老师来巡山</item>\n        <item>镇魂街</item>\n        <item>火影忍者</item>\n        <item>狐妖小红娘</item>\n        <item>夏一可</item>\n        <item>papi酱</item>\n        <item>中国boy大基佬</item>\n        <item>日常</item>\n        <item>有喜欢的人</item>\n        <item>交给岚吧</item>\n        <item>arashi</item>\n        <item>骚男</item>\n        <item>超时空要塞</item>\n        <item>薛之谦</item>\n        <item>咱们穿越吧</item>\n        <item>snh48</item>\n        <item>极速前进</item>\n        <item>akb48</item>\n        <item>心有所属</item>\n        <item>海贼王</item>\n        <item>纯黑</item>\n        <item>星际老男孩</item>\n        <item>陈伟霆</item>\n        <item>野良神</item>\n        <item>极乐净土</item>\n        <item>pdd</item>\n        <item>真田丸</item>\n    </string-array>\n    <string-array name=\"main_title\">\n        <item>直播</item>\n        <item>推荐</item>\n        <item>追番</item>\n        <item>分区</item>\n        <item>动态</item>\n        <item>发现</item>\n    </string-array>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n\n    <!-- CircleIndicator -->\n    <declare-styleable name=\"CircleIndicator\">\n        <attr name=\"ci_width\" format=\"dimension\"/>\n        <attr name=\"ci_height\" format=\"dimension\"/>\n        <attr name=\"ci_margin\" format=\"dimension\"/>\n        <attr name=\"ci_animator\" format=\"reference\"/>\n        <attr name=\"ci_animator_reverse\" format=\"reference\"/>\n        <attr name=\"ci_drawable\" format=\"reference\"/>\n        <attr name=\"ci_drawable_unselected\" format=\"reference\"/>\n    </declare-styleable>\n\n    <declare-styleable name=\"ProgressWheel\">\n        <attr name=\"matProg_progressIndeterminate\" format=\"boolean\"/>\n        <attr name=\"matProg_barColor\" format=\"color\"/>\n        <attr name=\"matProg_rimColor\" format=\"color\"/>\n        <attr name=\"matProg_rimWidth\" format=\"dimension\"/>\n        <attr name=\"matProg_spinSpeed\" format=\"float\"/>\n        <attr name=\"matProg_barSpinCycleTime\" format=\"integer\"/>\n        <attr name=\"matProg_circleRadius\" format=\"dimension\"/>\n        <attr name=\"matProg_fillRadius\" format=\"boolean\"/>\n        <attr name=\"matProg_barWidth\" format=\"dimension\"/>\n        <attr name=\"matProg_linearProgress\" format=\"boolean\"/>\n    </declare-styleable>\n    <declare-styleable name=\"CircleImageView\">\n        <attr name=\"border_width\" format=\"dimension\"/>\n        <attr name=\"border_color\" format=\"color\"/>\n    </declare-styleable>\n\n    <declare-styleable name=\"TagFlowLayout\">\n        <attr name=\"auto_select_effect\" format=\"boolean\"></attr>\n        <attr name=\"max_select\" format=\"integer\"></attr>\n        <attr name=\"gravity\">\n            <enum name=\"left\" value=\"-1\"/>\n            <enum name=\"center\" value=\"0\"/>\n            <enum name=\"right\" value=\"1\"/>\n        </attr>\n    </declare-styleable>\n    <declare-styleable name=\"ExpandableLayout\">\n        <attr name=\"el_duration\" format=\"integer\"/>\n        <attr name=\"el_expanded\" format=\"boolean\"/>\n        <attr name=\"el_parallax\" format=\"float\"/>\n        <!-- {@deprecated Use el_parallax instead.} -->\n        <attr name=\"el_translate_children\" format=\"boolean\"/>\n        <attr name=\"layout_expandable\" format=\"boolean\"/>\n        <attr name=\"android:orientation\"/>\n    </declare-styleable>\n    <declare-styleable name=\"DropDownMenu\">\n\n        <attr name=\"ddunderlineColor\" format=\"color\"/>\n        <attr name=\"dddividerColor\" format=\"color\"/>\n        <attr name=\"ddtextSelectedColor\" format=\"color\"/>\n        <attr name=\"ddtextUnselectedColor\" format=\"color\"/>\n        <attr name=\"ddmenuBackgroundColor\" format=\"color\"/>\n        <attr name=\"ddmaskColor\" format=\"color\"/>\n        <attr name=\"ddmenuTextSize\" format=\"dimension\"/>\n        <attr name=\"ddmenuSelectedIcon\" format=\"reference\"/>\n        <attr name=\"ddmenuUnselectedIcon\" format=\"reference\"/>\n        <attr name=\"ddmenuMenuHeightPercent\" format=\"float\"/>\n    </declare-styleable>\n\n    <declare-styleable name=\"NumberProgressBar\">\n        <attr name=\"progress_current\" format=\"integer\"/>\n        <attr name=\"progress_max\" format=\"integer\"/>\n\n        <attr name=\"progress_unreached_color\" format=\"color\"/>\n        <attr name=\"progress_reached_color\" format=\"color\"/>\n\n        <attr name=\"progress_reached_bar_height\" format=\"dimension\"/>\n        <attr name=\"progress_unreached_bar_height\" format=\"dimension\"/>\n\n        <attr name=\"progress_text_size\" format=\"dimension\"/>\n        <attr name=\"progress_text_color\" format=\"color\"/>\n\n        <attr name=\"progress_text_offset\" format=\"dimension\"/>\n\n        <attr name=\"progress_text_visibility\" format=\"enum\">\n            <enum name=\"visible\" value=\"0\"/>\n            <enum name=\"invisible\" value=\"1\"/>\n        </attr>\n    </declare-styleable>\n\n    <declare-styleable name=\"Themes\">\n        <attr name=\"numberProgressBarStyle\" format=\"reference\"/>\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#fb7299</color>\n    <color name=\"colorPrimaryDark\">#fb7299</color>\n    <color name=\"colorAccent\">#FF4081</color>\n    <color name=\"yellow_50\">#FFD11B</color>\n    <color name=\"yellow_30\">#FEA501</color>\n    <color name=\"pink_30\">#FD7071</color>\n    <color name=\"blue_30\">#20C1FD</color>\n    <color name=\"white\">#FFFFFF</color>\n    <color name=\"white_30\">#F2F2F2</color>\n    <color name=\"white_80\">#FAFAFA</color>\n    <color name=\"orange_500\">#FF9800</color>\n    <color name=\"green_300\">#81C784</color>\n    <color name=\"gray\">#B8B8B8</color>\n    <color name=\"gray_20\">#B3B3B3</color>\n    <color name=\"gray_80\">#BEBBB4</color>\n    <color name=\"gray_alpha_80\">#4fBEBBB4</color>\n    <color name=\"gray_light_30\">#E5E5E5</color>\n    <color name=\"black_80\">#222222</color>\n    <color name=\"black_alpha_45\">#71000000</color>\n    <color name=\"transparent\">#00000000</color>\n    <color name=\"black_alpha_30\">#48000000</color>\n    <color name=\"black_alpha_60\">#4f000000</color>\n    <color name=\"background_dark\">#212121</color>\n    <color name=\"media_controller_bg\">#99000000</color>\n    <color name=\"font_normal\">#555555</color>\n    <color name=\"font_gray\">#656565</color>\n    <color name=\"line_bg\">#e6e6e6</color>\n    <color name=\"navigation_background_light\">#FFF8F8F8</color>\n    <color name=\"navigation_subtitle_primary_text\">#FFFFFFFF</color>\n    <color name=\"navigation_subtitle_secondary_text\">#BFFFFFFF</color>\n    <color name=\"item_tag_stroke_background\">@color/white_30</color>\n    <color name=\"card_view_background\">@color/white</color>\n    <color name=\"pink_text_color\">#fb7299</color>\n    <color name=\"item_tag_background\">@color/white</color>\n    <color name=\"refresh_pink_background\">#fb7299</color>\n    <color name=\"bili_logo_pink_color\">#fb7299</color>\n    <color name=\"focus_text_color\">#fb7299</color>\n    <color name=\"focus_bg_color\">@android:color/transparent</color>\n    <color name=\"window_background\">#eaeaea</color>\n    <color name=\"bangumi_badge_gary\">#e58B8B8C</color>\n    <color name=\"nav_head_image_background\">#F8668D</color>\n    <color name=\"nav_head_round_background\">#FDC7D6</color>\n    <color name=\"nav_head_roung_text_background\">#FB7BA0</color>\n    <color name=\"bangumi_index_green_bg\">#75C568</color>\n    <color name=\"bangumi_index_yellow_bg\">#FFC03A</color>\n    <color name=\"vip_button_bg_color\">#FEB1B3</color>\n    <color name=\"vip_button_text_color\">#FE6F70</color>\n    <color name=\"search_background_color\">#E9EAEA</color>\n\n    <color name=\"theme_color_primary\">#fb7299</color>\n    <color name=\"theme_color_primary_dark\">#b85671</color>\n    <color name=\"theme_color_primary_trans\">#99f0486c</color>\n    <color name=\"theme_color_secondary\">#fb7299</color>\n\n    <color name=\"gray_dark\">#999999</color>\n    <color name=\"gray_trans\">#44999999</color>\n    <color name=\"gray_light\">#dcdcdc</color>\n\n    <!-- theme color -->\n    <color name=\"pink\">#fb7299</color>\n    <color name=\"pink_dark\">#b85671</color>\n    <color name=\"pink_trans\">#99f0486c</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <dimen name=\"statusbar_view_height\">0dp</dimen>\n\n    <dimen name=\"text_size_20\">20.0sp</dimen>\n    <dimen name=\"text_size_18\">18.0sp</dimen>\n    <dimen name=\"text_size_16\">16.0sp</dimen>\n    <dimen name=\"text_size_15\">15.0sp</dimen>\n    <dimen name=\"text_size_14\">14.0sp</dimen>\n    <dimen name=\"text_size_13\">13.0sp</dimen>\n    <dimen name=\"text_size_12\">12.0sp</dimen>\n    <dimen name=\"text_size_11\">11.0sp</dimen>\n    <dimen name=\"text_size_10\">10.0sp</dimen>\n\n    <dimen name=\"dp330\">330.0dip</dimen>\n\n    <dimen name=\"dp320\">320.0dip</dimen>\n    <dimen name=\"dp300\">300.0dip</dimen>\n    <dimen name=\"dp290\">290.0dip</dimen>\n    <dimen name=\"dp226\">226.0dip</dimen>\n    <dimen name=\"dp280\">280.0dip</dimen>\n    <dimen name=\"dp270\">270.0dip</dimen>\n    <dimen name=\"dp260\">260.0dip</dimen>\n    <dimen name=\"dp250\">250.0dip</dimen>\n    <dimen name=\"dp240\">240.0dip</dimen>\n    <dimen name=\"dp230\">230.0dip</dimen>\n    <dimen name=\"dp220\">220.0dip</dimen>\n    <dimen name=\"dp210\">210.0dip</dimen>\n    <dimen name=\"dp200\">200.0dip</dimen>\n\n    <dimen name=\"dp195\">195.0dip</dimen>\n    <dimen name=\"dp190\">190.0dip</dimen>\n\n    <dimen name=\"dp185\">185.0dip</dimen>\n    <dimen name=\"dp180\">180.0dip</dimen>\n\n    <dimen name=\"dp175\">175.0dip</dimen>\n    <dimen name=\"dp170\">170.0dip</dimen>\n\n    <dimen name=\"dp165\">165.0dip</dimen>\n    <dimen name=\"dp160\">160.0dip</dimen>\n\n    <dimen name=\"dp155\">155.0dip</dimen>\n    <dimen name=\"dp150\">150.0dip</dimen>\n\n    <dimen name=\"dp145\">145.0dip</dimen>\n    <dimen name=\"dp140\">140.0dip</dimen>\n\n    <dimen name=\"dp135\">135.0dip</dimen>\n    <dimen name=\"dp130\">130.0dip</dimen>\n    <dimen name=\"dp128\">128.0dip</dimen>\n\n    <dimen name=\"dp126\">126.0dip</dimen>\n    <dimen name=\"dp125\">125.0dip</dimen>\n    <dimen name=\"dp122\">122.0dip</dimen>\n\n    <dimen name=\"dp120\">120.0dip</dimen>\n\n    <dimen name=\"dp115\">115.0dip</dimen>\n    <dimen name=\"dp110\">110.0dip</dimen>\n\n    <dimen name=\"dp100\">100.0dip</dimen>\n    <dimen name=\"dp99\">99.0dip</dimen>\n    <dimen name=\"dp98\">98.0dip</dimen>\n    <dimen name=\"dp97\">97.0dip</dimen>\n    <dimen name=\"dp96\">96.0dip</dimen>\n    <dimen name=\"dp95\">95.0dip</dimen>\n    <dimen name=\"dp94\">94.0dip</dimen>\n    <dimen name=\"dp93\">93.0dip</dimen>\n    <dimen name=\"dp92\">92.0dip</dimen>\n    <dimen name=\"dp91\">91.0dip</dimen>\n\n    <dimen name=\"dp90\">90.0dip</dimen>\n    <dimen name=\"dp89\">89.0dip</dimen>\n    <dimen name=\"dp88\">88.0dip</dimen>\n    <dimen name=\"dp87\">87.0dip</dimen>\n    <dimen name=\"dp86\">86.0dip</dimen>\n    <dimen name=\"dp85\">85.0dip</dimen>\n    <dimen name=\"dp84\">84.0dip</dimen>\n    <dimen name=\"dp83\">83.0dip</dimen>\n    <dimen name=\"dp82\">82.0dip</dimen>\n    <dimen name=\"dp81\">81.0dip</dimen>\n\n    <dimen name=\"dp80\">80.0dip</dimen>\n    <dimen name=\"dp79\">79.0dip</dimen>\n    <dimen name=\"dp78\">78.0dip</dimen>\n    <dimen name=\"dp77\">77.0dip</dimen>\n    <dimen name=\"dp76\">76.0dip</dimen>\n    <dimen name=\"dp75\">75.0dip</dimen>\n    <dimen name=\"dp74\">74.0dip</dimen>\n    <dimen name=\"dp73\">73.0dip</dimen>\n    <dimen name=\"dp72\">72.0dip</dimen>\n    <dimen name=\"dp71\">71.0dip</dimen>\n\n    <dimen name=\"dp70\">70.0dip</dimen>\n    <dimen name=\"dp69\">69.0dip</dimen>\n    <dimen name=\"dp68\">68.0dip</dimen>\n    <dimen name=\"dp67\">67.0dip</dimen>\n    <dimen name=\"dp66\">66.0dip</dimen>\n    <dimen name=\"dp65\">65.0dip</dimen>\n    <dimen name=\"dp64\">64.0dip</dimen>\n    <dimen name=\"dp63\">63.0dip</dimen>\n    <dimen name=\"dp62\">62.0dip</dimen>\n    <dimen name=\"dp61\">61.0dip</dimen>\n\n    <dimen name=\"dp60\">60.0dip</dimen>\n    <dimen name=\"dp59\">59.0dip</dimen>\n    <dimen name=\"dp58\">58.0dip</dimen>\n    <dimen name=\"dp57\">57.0dip</dimen>\n    <dimen name=\"dp56\">56.0dip</dimen>\n    <dimen name=\"dp55\">55.0dip</dimen>\n    <dimen name=\"dp54\">54.0dip</dimen>\n    <dimen name=\"dp53\">53.0dip</dimen>\n    <dimen name=\"dp52\">52.0dip</dimen>\n    <dimen name=\"dp51\">51.0dip</dimen>\n\n    <dimen name=\"dp50\">50.0dip</dimen>\n    <dimen name=\"dp49\">49.0dip</dimen>\n    <dimen name=\"dp48\">48.0dip</dimen>\n    <dimen name=\"dp47\">47.0dip</dimen>\n    <dimen name=\"dp46\">46.0dip</dimen>\n    <dimen name=\"dp45\">45.0dip</dimen>\n    <dimen name=\"dp44\">44.0dip</dimen>\n    <dimen name=\"dp43\">43.0dip</dimen>\n    <dimen name=\"dp42\">42.0dip</dimen>\n    <dimen name=\"dp41\">41.0dip</dimen>\n\n    <dimen name=\"dp40\">40.0dip</dimen>\n    <dimen name=\"dp39\">39.0dip</dimen>\n    <dimen name=\"dp38\">38.0dip</dimen>\n    <dimen name=\"dp37\">37.0dip</dimen>\n    <dimen name=\"dp36\">36.0dip</dimen>\n    <dimen name=\"dp35\">35.0dip</dimen>\n    <dimen name=\"dp34\">34.0dip</dimen>\n    <dimen name=\"dp33\">33.0dip</dimen>\n    <dimen name=\"dp32\">32.0dip</dimen>\n    <dimen name=\"dp31\">31.0dip</dimen>\n\n    <dimen name=\"dp30\">30.0dip</dimen>\n    <dimen name=\"dp29\">29.0dip</dimen>\n    <dimen name=\"dp28\">28.0dip</dimen>\n    <dimen name=\"dp27\">27.0dip</dimen>\n    <dimen name=\"dp26\">26.0dip</dimen>\n    <dimen name=\"dp25\">25.0dip</dimen>\n    <dimen name=\"dp24\">24.0dip</dimen>\n    <dimen name=\"dp23\">23.0dip</dimen>\n    <dimen name=\"dp22\">22.0dip</dimen>\n    <dimen name=\"dp21\">21.0dip</dimen>\n\n    <dimen name=\"dp20\">20.0dip</dimen>\n    <dimen name=\"dp19\">19.0dip</dimen>\n    <dimen name=\"dp18\">18.0dip</dimen>\n    <dimen name=\"dp17\">17.0dip</dimen>\n    <dimen name=\"dp16\">16.0dip</dimen>\n    <dimen name=\"dp15\">15.0dip</dimen>\n    <dimen name=\"dp14\">14.0dip</dimen>\n    <dimen name=\"dp13\">13.0dip</dimen>\n    <dimen name=\"dp12\">12.0dip</dimen>\n    <dimen name=\"dp11\">12.0dip</dimen>\n\n    <dimen name=\"dp10\">10.0dip</dimen>\n    <dimen name=\"dp9\">9.0dip</dimen>\n    <dimen name=\"dp8\">8.0dip</dimen>\n    <dimen name=\"dp7\">7.0dip</dimen>\n    <dimen name=\"dp6\">6.0dip</dimen>\n    <dimen name=\"dp5\">5.0dip</dimen>\n    <dimen name=\"dp4\">4.0dip</dimen>\n    <dimen name=\"dp3\">3.0dip</dimen>\n    <dimen name=\"dp2\">2.0dip</dimen>\n    <dimen name=\"dp1\">1.0dip</dimen>\n    <dimen name=\"dp0\">0.0dip</dimen>\n    <dimen name=\"app_bar_height\">180dp</dimen>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"text_margin\">16dp</dimen>\n    <dimen name=\"dp112\">112.0dip</dimen>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item type=\"id\" name=\"statusbarutil_fake_status_bar_view\" />\n    <item type=\"id\" name=\"statusbarutil_translucent_view\" />\n</resources>"
  },
  {
    "path": "app/src/main/res/values/ssdk_instapaper_strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n    <string name=\"ssdk_instapager_login_html\" formatted=\"false\"><![CDATA[\n<!DOCTYPE html>\n<html>\n<head>\n<meta content=\\\"text/html; charset=utf-8\\\" http-equiv=\\\"Content-Type\\\">\n<meta content=\\\"width=device-width,minimum-scale=1,maximum-scale=1,initial-scale=1,user-scalable=no\\\" id=\\\"viewport\\\" name=\\\"viewport\\\">\n<meta content=\\\"yes\\\" name=\\\"apple-mobile-web-app-capable\\\">\n<title>%s</title>\n<style type=\\\"text/css\\\">\nbody{margin:0;padding:0}\n.inputstyle {\n    -webkit-tap-highlight-color:rgba(255,255,255,0);\n    width:100%%;\n    height:44px;\n    color:#000;\n    background:0;\n    border:0;\n    font-size:16px;\n    outline: none;\n    -webkit-appearance:none\n}\n\n.btn {\n    width:90%%;\n    height:44px;\n    line-height:44px;\n    background:#A0C035;\n    border:0;\n    border-radius:4px;\n    color:#fff;\n    font-size:16px;\n    text-align:center;\n    margin-top:15px;\n    display:block\n}\n.btn:disabled {\n    background: #dddddd;\n}\n.error {\n    color:red;\n}\n</style>\n</head>\n\n<body>\n<script type=\\\"text/javascript\\\">\nfunction login(form){\n    var u=form[\\\"u\\\"].value,p=form[\\\"p\\\"].value;\n    if(!u || !p)\n        return false;\n    form[\\\"s\\\"].disabled = true;\n    return true;\n}\n</script>\n<form style=\\\"margin-top:45px;\\\" action=\\\"%s\\\" metho=\\\"get\\\" onsubmit=\\\"return login(this);\\\">\n%s\n<div style=\\\"padding-left:15px;border-top:1px solid #E3E3E5;border-bottom:1px solid #E3E3E5;\\\">\n <input type=\\\"hidden\\\" name=\\\"ID_SIGN\\\" value=\\\"OWELJSFPWECSFEW\\\"/>\n <input class=\\\"inputstyle\\\" id=\\\"u\\\" name=\\\"u\\\" type=\\\"text\\\" value=\\\"%s\\\" placeholder=\\\"%s\\\" style=\\\"border-bottom:1px solid #E3E3E5;\\\"/>\n <input class=\\\"inputstyle\\\" id=\\\"p\\\" name=\\\"p\\\" type=\\\"password\\\" placeholder=\\\"%s\\\"/>\n</div>\n<p><input style=\\\"margin:0 auto;\\\" type=\\\"submit\\\" name=\\\"s\\\" value=\\\"  %s  \\\" class=\\\"btn\\\"/></p>\n</form>\n</body>\n</html>\n]]></string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/ssdk_oks_color_drawables.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <drawable name=\"ssdk_oks_classic_platfrom_cell_back_nor\">#ffffffff</drawable>\n    <drawable name=\"ssdk_oks_classic_platfrom_cell_back_sel\">#ffeeeeee</drawable>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/ssdk_oks_strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ssdk_oks_share\">分享</string>\n    <string name=\"ssdk_oks_sharing\">分享操作正在后台进行…</string>\n    <string name=\"ssdk_oks_share_failed\">分享失败</string>\n    <string name=\"ssdk_oks_share_completed\">分享成功</string>\n    <string name=\"ssdk_oks_share_canceled\">分享已取消</string>\n    <string name=\"ssdk_oks_cancel\">取消</string>\n    <string name=\"ssdk_oks_multi_share\">图文分享</string>\n    <string name=\"ssdk_oks_confirm\">确定</string>\n    <string name=\"ssdk_oks_contacts\">联系人</string>\n    <string name=\"ssdk_oks_pull_to_refresh\">下拉刷新</string>\n\t<string name=\"ssdk_oks_release_to_refresh\">松开刷新</string>\n\t<string name=\"ssdk_oks_refreshing\">刷新中…</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/ssdk_strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ssdk_weibo_oauth_regiseter\">应用授权</string>\n    <string name=\"ssdk_website\">http://www.mob.com</string>\n    <string name=\"ssdk_weibo_upload_content\">分享图片</string>\n    <string name=\"ssdk_wechat_client_inavailable\">目前您的微信版本过低或未安装微信，需要安装微信才能使用</string>\n    <string name=\"ssdk_google_plus_client_inavailable\">Google+ 版本过低或者没有安装，需要升级或安装Google+才能使用！</string>\n    <string name=\"ssdk_qq_client_inavailable\">QQ 版本过低或者没有安装，需要升级或安装QQ才能使用！</string>\n    <string name=\"ssdk_pinterest_client_inavailable\">Pinterest版本过低或者没有安装，需要升级或安装Pinterest才能使用！</string>\n    <string name=\"ssdk_instagram_client_inavailable\">Instagram版本过低或者没有安装，需要升级或安装Instagram才能使用！</string>\n    <string name=\"ssdk_yixin_client_inavailable\">目前您的易信版本过低或未安装，需要安装易信才能使用</string>\n    <string name=\"ssdk_line_client_inavailable\">目前您的Line版本过低或未安装，需要安装Line才能使用</string>\n    <string name=\"ssdk_kakaotalk_client_inavailable\">目前您的KakaoTalk版本过低或未安装，需要安装KakaoTalk才能使用</string>\n    <string name=\"ssdk_kakaostory_client_inavailable\">目前您的KakaoStory版本过低或未安装，需要安装KakaoStory才能使用</string>\n    <string name=\"ssdk_whatsapp_client_inavailable\">目前您的WhatsApp版本过低或未安装，需要安装WhatsApp才能使用</string>\n    <string name=\"ssdk_laiwang_client_inavailable\">目前您的来往版本过低或未安装，需要安装来往才能使用</string>\n    <string name=\"ssdk_alipay_client_inavailable\">目前您的支付宝版本过低或未安装，需要安装支付宝才能使用</string>\n    <string name=\"ssdk_facebookmessenger_client_inavailable\">目前您的FacebookMessenger版本过低或未安装，需要安装才能使用</string>\n    \n\t<string name=\"ssdk_sinaweibo\">新浪微博</string>\n\t<string name=\"ssdk_tencentweibo\">腾讯微博</string>\n\t<string name=\"ssdk_qzone\">QQ空间</string>\n\t<string name=\"ssdk_wechat\">微信好友</string>\n\t<string name=\"ssdk_wechatmoments\">微信朋友圈</string>\n\t<string name=\"ssdk_wechatfavorite\">微信收藏</string>\n\t<string name=\"ssdk_facebook\">Facebook</string>\n\t<string name=\"ssdk_twitter\">Twitter</string>\n\t<string name=\"ssdk_renren\">人人网</string>\n\t<string name=\"ssdk_kaixin\">开心网</string>\n\t<string name=\"ssdk_email\">邮件</string>\n\t<string name=\"ssdk_shortmessage\">信息</string>\n\t<string name=\"ssdk_sohumicroblog\">搜狐微博</string>\n\t<string name=\"ssdk_sohusuishenkan\">搜狐随身看</string>\n\t<string name=\"ssdk_neteasemicroblog\">网易微博</string>\n\t<string name=\"ssdk_douban\">豆瓣</string>\n\t<string name=\"ssdk_youdao\">有道云笔记</string>\n\t<string name=\"ssdk_evernote\">印象笔记</string>\n\t<string name=\"ssdk_linkedin\">领英</string>\n\t<string name=\"ssdk_googleplus\">Google+</string>\n\t<string name=\"ssdk_foursquare\">FourSquare</string>\n\t<string name=\"ssdk_qq\">QQ</string>\n\t<string name=\"ssdk_pinterest\">Pinterest</string>\n\t<string name=\"ssdk_flickr\">Flickr</string>\n\t<string name=\"ssdk_tumblr\">Tumblr</string>\n\t<string name=\"ssdk_dropbox\">Dropbox</string>\n\t<string name=\"ssdk_vkontakte\">VK</string>\n\t<string name=\"ssdk_instagram\">Instagram</string>\n\t<string name=\"ssdk_yixin\">易信</string>\n\t<string name=\"ssdk_yixinmoments\">易信朋友圈</string>\n\t<string name=\"ssdk_mingdao\">明道</string>\n\t<string name=\"ssdk_kakaotalk\">KakaoTalk</string>\n\t<string name=\"ssdk_kakaostory\">KakaoStory</string>\n\t<string name=\"ssdk_line\">Line</string>\n\t<string name=\"ssdk_bluetooth\">蓝牙</string>\n\t<string name=\"ssdk_whatsapp\">WhatsApp</string>\n\t<string name=\"ssdk_pocket\">Pocket</string>\n\t<string name=\"ssdk_instapaper\">Instapaper</string>\n\t<string name=\"ssdk_instapaper_email\">邮箱</string>\n\t<string name=\"ssdk_instapaper_pwd\">密码</string>\n\t<string name=\"ssdk_instapaper_login\">登录</string>\n\t<string name=\"ssdk_instapaper_logining\">登录中…</string>\n\t<string name=\"ssdk_instapager_email_or_password_incorrect\">Email或密码不正确</string>\n    <string name=\"ssdk_facebookmessenger\">Facebook Messenger</string>\n    <string name=\"ssdk_laiwang\">来往</string>\n    <string name=\"ssdk_laiwangmoments\">来往动态</string>\n    <string name=\"ssdk_alipay\">支付宝好友</string>\n    <string name=\"ssdk_alipaymoments\">支付宝生活圈</string>\n    <string name=\"ssdk_plurk\">Plurk</string>\n\t<string name=\"ssdk_youtube\">Youtube</string>\n    <string name=\"ssdk_dingding\">钉钉</string>\n\t<string name=\"ssdk_meipai\">美拍</string>\n\t<string name=\"ssdk_share_to_qzone\">分享到QQ空间</string>\n\t<string name=\"ssdk_share_to_qq\">分享到QQ</string>\n\t<string name=\"ssdk_share_to_facebook\">分享到Facebook</string>\n\t<string name=\"ssdk_mingdao_share_content\">网页分享</string>\n\t<string name=\"ssdk_share_to_mingdao\">分享到明道</string>\n\t<string name=\"ssdk_share_to_googleplus\">分享到Google+</string>\n\t<string name=\"ssdk_share_to_qzone_default\">来自%s的分享</string>\n\t<string name=\"ssdk_use_login_button\">请改用“登录”按钮</string>\n\t<string name=\"ssdk_share_to_youtube\">分享到Youtube</string>\n\t\n\t<string name=\"ssdk_gender_male\">男</string>\n\t<string name=\"ssdk_gender_female\">女</string>\n\t<string name=\"ssdk_symbol_ellipsis\">...</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">bili-soleil</string>\n    <string name=\"title_activity_scrolling\">ScrollingActivity</string>\n    <string name=\"large_text\">\n\n    </string>\n    <string name=\"action_settings\">Settings</string>\n\n    <string name=\"video_init\">初始化播放器…</string>\n    <string name=\"video_loading\">加载中…</string>\n    <string name=\"video_error_title\">不能播放视频</string>\n    <string name=\"video_error_text_invalid_progressive_playback\">对不起，这个视频不适合该装置的流</string>\n    <string name=\"video_error_text_unknown\">该视频不能播放</string>\n    <string name=\"video_error_button\">OK</string>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <style name=\"AppBaseTheme\" parent=\"Theme.AppCompat.Light\"/>\n\n    <!-- Application theme. -->\n    <style name=\"AppTheme\" parent=\"AppBaseTheme\">\n        <!-- All customizations that are NOT specific to a particular LiveApi-level can go here. -->\n        <item name=\"android:listDivider\">@drawable/default_line</item>\n    </style>\n\n    <style name=\"BaseAppTheme\" parent=\"Theme.AppCompat.DayNight.NoActionBar\">\n\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n        <item name=\"android:windowBackground\">@color/window_background</item>\n    </style>\n\n    <style name=\"AppTheme.AppBarOverlay\" parent=\"ThemeOverlay.AppCompat.Dark.ActionBar\"/>\n\n    <style name=\"AppTheme.PopupOverlay\" parent=\"ThemeOverlay.AppCompat.Light\"/>\n\n    <!--设置toolbar字体大小-->\n    <style name=\"Toolbar.TitleText\" parent=\"TextAppearance.Widget.AppCompat.Toolbar.Title\">\n        <item name=\"android:textSize\">16sp</item>\n    </style>\n\n    <!--修改Toolbar menu-->\n    <style name=\"ToolbarPopupTheme\" parent=\"@style/ThemeOverlay.AppCompat.Dark\">\n        <item name=\"android:colorBackground\">@color/white</item>\n        <item name=\"android:textColor\">@android:color/black</item>\n        <item name=\"actionOverflowMenuStyle\">@style/OverflowMenuStyle\n        </item> <!--新增一个item，用于控制menu-->\n    </style>\n\n    <style name=\"OverflowMenuStyle\" parent=\"Widget.AppCompat.Light.PopupMenu.Overflow\">\n        <item name=\"overlapAnchor\">false</item>  <!--把该属性改为false即可使menu位置位于toolbar之下-->\n    </style>\n\n    <style name=\"CollapsingToolbarTitleStyle.About\" parent=\"@android:style/TextAppearance\">\n        <item name=\"android:textColor\">@android:color/transparent</item>\n    </style>\n\n    <style name=\"BaseAppTheme.AppBarOverlay\" parent=\"ThemeOverlay.AppCompat.Dark.ActionBar\"/>\n\n    <style name=\"BaseAppTheme.PopupOverlay\" parent=\"ThemeOverlay.AppCompat.Light\"/>\n\n    <style name=\"Fullscreen\" parent=\"BaseAppTheme\">\n        <!-- 隐藏状态栏 -->\n        <item name=\"android:windowFullscreen\">true</item>\n        <!-- 隐藏标题栏 -->\n        <item name=\"android:windowNoTitle\">true</item>\n    </style>\n\n    <!--离线缓存进度条Style-->\n    <style name=\"NumberProgressBar_Beauty_Red\">\n        <item name=\"android:layout_height\">wrap_content</item>\n        <item name=\"android:layout_width\">match_parent</item>\n        <item name=\"progress_max\">100</item>\n        <item name=\"progress_current\">0</item>\n        <item name=\"progress_unreached_color\">@color/gray_light</item>\n        <item name=\"progress_reached_color\">@color/colorPrimary</item>\n        <item name=\"progress_text_size\">10sp</item>\n        <item name=\"progress_text_color\">#FF3D7F</item>\n        <item name=\"progress_reached_bar_height\">20dp</item>\n        <item name=\"progress_unreached_bar_height\">20dp</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-en/ssdk_oks_strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ssdk_oks_share\">Share</string>\n    <string name=\"ssdk_oks_sharing\">Sharing operation is working in the background…</string>\n    <string name=\"ssdk_oks_share_failed\">Operation failed</string>\n    <string name=\"ssdk_oks_share_completed\">Operation succeeded</string>\n    <string name=\"ssdk_oks_share_canceled\">Operation canceled</string>\n    <string name=\"ssdk_oks_cancel\">Cancel</string>\n    <string name=\"ssdk_oks_multi_share\">Photo Sharing</string>\n    <string name=\"ssdk_oks_confirm\">Confirm</string>\n    <string name=\"ssdk_oks_contacts\">Contacts</string>\n    <string name=\"ssdk_oks_pull_to_refresh\">Pull down to refresh</string>\n\t<string name=\"ssdk_oks_release_to_refresh\">Release to refresh</string>\n\t<string name=\"ssdk_oks_refreshing\">Refreshing…</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-en/ssdk_strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ssdk_weibo_oauth_regiseter\">Authorization</string>\n    <string name=\"ssdk_website\">http://www.mob.com</string>\n    <string name=\"ssdk_weibo_upload_content\">分享图片</string>\n    <string name=\"ssdk_wechat_client_inavailable\">Wechat client not exists or the version is too low</string>\n    <string name=\"ssdk_google_plus_client_inavailable\">Google+ client not exists or the version is too low</string>\n    <string name=\"ssdk_qq_client_inavailable\">Mobile QQ client not exists or the version is too low</string>\n    <string name=\"ssdk_pinterest_client_inavailable\">Pinterest client not exists or the version is too low</string>\n    <string name=\"ssdk_instagram_client_inavailable\">Instagram client not exists or the version is too low</string>\n    <string name=\"ssdk_yixin_client_inavailable\">Yixin client not exists or the version is too low</string>\n    <string name=\"ssdk_line_client_inavailable\">Line client not exists or the version is too low</string>\n    <string name=\"ssdk_kakaotalk_client_inavailable\">KakaoTalk client not exists or the version is too low</string>\n    <string name=\"ssdk_kakaostory_client_inavailable\">KakaoStory client not exists or the version is too low</string>\n    <string name=\"ssdk_whatsapp_client_inavailable\">WhatsApp client not exists or the version is too low</string>\n    <string name=\"ssdk_laiwang_client_inavailable\">Laiwangs client not exists or the version is too low</string>\n    <string name=\"ssdk_alipay_client_inavailable\">Alipay client not exists or the version is too low</string>\n    <string name=\"ssdk_facebookmessenger_client_inavailable\">Facebookmessenger client not exists or the version is too low</string>\n    \n\t<string name=\"ssdk_sinaweibo\">Sina Weibo</string>\n\t<string name=\"ssdk_tencentweibo\">Tencent Weibo</string>\n\t<string name=\"ssdk_qzone\">QZone</string>\n\t<string name=\"ssdk_wechat\">WeChat</string>\n\t<string name=\"ssdk_wechatmoments\">WeChat Moments</string>\n\t<string name=\"ssdk_wechatfavorite\">WeChat Favorites</string>\n\t<string name=\"ssdk_facebook\">Facebook</string>\n\t<string name=\"ssdk_twitter\">Twitter</string>\n\t<string name=\"ssdk_renren\">Renren</string>\n\t<string name=\"ssdk_kaixin\">Kaixin</string>\n\t<string name=\"ssdk_email\">Email</string>\n\t<string name=\"ssdk_shortmessage\">Short Message</string>\n\t<string name=\"ssdk_sohumicroblog\">Sohu Microblog</string>\n\t<string name=\"ssdk_neteasemicroblog\">Netease Microblog</string>\n\t<string name=\"ssdk_douban\">Douban</string>\n\t<string name=\"ssdk_youdao\">Youdao</string>\n\t<string name=\"ssdk_evernote\">Evernote</string>\n\t<string name=\"ssdk_linkedin\">Linked in</string>\n\t<string name=\"ssdk_googleplus\">Google+</string>\n\t<string name=\"ssdk_foursquare\">FourSquare</string>\n\t<string name=\"ssdk_qq\">QQ</string>\n\t<string name=\"ssdk_sohusuishenkan\">Sohu Suishenkan</string>\n\t<string name=\"ssdk_pinterest\">Pinterest</string>\n\t<string name=\"ssdk_flickr\">Flickr</string>\n\t<string name=\"ssdk_tumblr\">Tumblr</string>\n\t<string name=\"ssdk_dropbox\">Dropbox</string>\n\t<string name=\"ssdk_vkontakte\">VK</string>\n\t<string name=\"ssdk_instagram\">Instagram</string>\n\t<string name=\"ssdk_yixin\">Yixin</string>\n\t<string name=\"ssdk_yixinmoments\">Yixin Moments</string>\n\t<string name=\"ssdk_mingdao\">Mingdao</string>\n\t<string name=\"ssdk_kakaotalk\">KakaoTalk</string>\n\t<string name=\"ssdk_kakaostory\">KakaoStory</string>\n\t<string name=\"ssdk_line\">Line</string>\n\t<string name=\"ssdk_bluetooth\">Bluetooth</string>\n\t<string name=\"ssdk_whatsapp\">WhatsApp</string>\n    <string name=\"ssdk_pocket\">Pocket</string>\n    <string name=\"ssdk_instapaper\">Instapaper</string>\n\t<string name=\"ssdk_instapaper_email\">Email</string>\n\t<string name=\"ssdk_instapaper_pwd\">Password</string>\n\t<string name=\"ssdk_instapaper_login\">Sign In</string>\n    <string name=\"ssdk_instapaper_logining\">Sign In…</string>\n\t<string name=\"ssdk_instapager_email_or_password_incorrect\">Email or Password incorrect</string>\n    <string name=\"ssdk_facebookmessenger\">Facebook Messenger</string>\n    <string name=\"ssdk_laiwang\">Laiwang</string>\n    <string name=\"ssdk_laiwangmoments\">Laiwang Moments</string>\n    <string name=\"ssdk_alipay\">Alipay</string>\n    <string name=\"ssdk_alipaymoments\">Alipay Moments</string>\n    <string name=\"ssdk_plurk\">Plurk</string>\n    <string name=\"ssdk_dingding\">Dingding</string>\n\t<string name=\"ssdk_meipai\">Meipai</string>\n\t<string name=\"ssdk_youtube\">Youtube</string>\n\n\t<string name=\"ssdk_share_to_qzone\">Share To QZone</string>\n\t<string name=\"ssdk_share_to_qq\">Share To QQ</string>\n\t<string name=\"ssdk_share_to_googleplus\">Share To Google+</string>\n\t<string name=\"ssdk_share_to_facebook\">Share To Facebook</string>\n\t<string name=\"ssdk_mingdao_share_content\">Share webpage</string>\n\t<string name=\"ssdk_share_to_mingdao\">Share To Mingdao</string>\n\t<string name=\"ssdk_share_to_qzone_default\">Shared from %s</string>\n\t<string name=\"ssdk_use_login_button\">use login button instead</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-v19/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <dimen name=\"statusbar_view_height\">25dp</dimen>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-v19/styles.xml",
    "content": "\n    <resources>\n        <style name=\"AppTheme\" parent=\"@style/AppBaseTheme\">\n            <item name=\"android:windowTranslucentStatus\">true</item>\n        </style>\n    </resources>\n\n"
  },
  {
    "path": "app/src/test/java/com/yoyiyi/soleil/ExampleUnitTest.kt",
    "content": "package com.soleil.bilisoleil\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext.kotlin_version = '1.1.2-4'\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.0.1'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url \"https://jitpack.io\" }\n\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Nov 27 14:52:10 CST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-4.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx1536m\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\n"
  }
]