Commit 969a9636d69862541cf345ee95fda9d16bcb6252

Authored by YangShuai
0 parents

提出用户模块

Showing 76 changed files with 4652 additions and 0 deletions

Too many changes to show.

To preserve performance only 76 of 308 files are displayed.

.gitignore 0 → 100644
  1 +++ a/.gitignore
  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/caches
  5 +/.idea/libraries
  6 +/.idea/modules.xml
  7 +/.idea/workspace.xml
  8 +/.idea/navEditor.xml
  9 +/.idea/assetWizardSettings.xml
  10 +.DS_Store
  11 +/build
  12 +/captures
  13 +.externalNativeBuild
  14 +.cxx
... ...
.idea/codeStyles/Project.xml 0 → 100644
  1 +++ a/.idea/codeStyles/Project.xml
  1 +<component name="ProjectCodeStyleConfiguration">
  2 + <code_scheme name="Project" version="173">
  3 + <codeStyleSettings language="XML">
  4 + <indentOptions>
  5 + <option name="CONTINUATION_INDENT_SIZE" value="4" />
  6 + </indentOptions>
  7 + <arrangement>
  8 + <rules>
  9 + <section>
  10 + <rule>
  11 + <match>
  12 + <AND>
  13 + <NAME>xmlns:android</NAME>
  14 + <XML_ATTRIBUTE />
  15 + <XML_NAMESPACE>^$</XML_NAMESPACE>
  16 + </AND>
  17 + </match>
  18 + </rule>
  19 + </section>
  20 + <section>
  21 + <rule>
  22 + <match>
  23 + <AND>
  24 + <NAME>xmlns:.*</NAME>
  25 + <XML_ATTRIBUTE />
  26 + <XML_NAMESPACE>^$</XML_NAMESPACE>
  27 + </AND>
  28 + </match>
  29 + <order>BY_NAME</order>
  30 + </rule>
  31 + </section>
  32 + <section>
  33 + <rule>
  34 + <match>
  35 + <AND>
  36 + <NAME>.*:id</NAME>
  37 + <XML_ATTRIBUTE />
  38 + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
  39 + </AND>
  40 + </match>
  41 + </rule>
  42 + </section>
  43 + <section>
  44 + <rule>
  45 + <match>
  46 + <AND>
  47 + <NAME>.*:name</NAME>
  48 + <XML_ATTRIBUTE />
  49 + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
  50 + </AND>
  51 + </match>
  52 + </rule>
  53 + </section>
  54 + <section>
  55 + <rule>
  56 + <match>
  57 + <AND>
  58 + <NAME>name</NAME>
  59 + <XML_ATTRIBUTE />
  60 + <XML_NAMESPACE>^$</XML_NAMESPACE>
  61 + </AND>
  62 + </match>
  63 + </rule>
  64 + </section>
  65 + <section>
  66 + <rule>
  67 + <match>
  68 + <AND>
  69 + <NAME>style</NAME>
  70 + <XML_ATTRIBUTE />
  71 + <XML_NAMESPACE>^$</XML_NAMESPACE>
  72 + </AND>
  73 + </match>
  74 + </rule>
  75 + </section>
  76 + <section>
  77 + <rule>
  78 + <match>
  79 + <AND>
  80 + <NAME>.*</NAME>
  81 + <XML_ATTRIBUTE />
  82 + <XML_NAMESPACE>^$</XML_NAMESPACE>
  83 + </AND>
  84 + </match>
  85 + <order>BY_NAME</order>
  86 + </rule>
  87 + </section>
  88 + <section>
  89 + <rule>
  90 + <match>
  91 + <AND>
  92 + <NAME>.*</NAME>
  93 + <XML_ATTRIBUTE />
  94 + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
  95 + </AND>
  96 + </match>
  97 + <order>ANDROID_ATTRIBUTE_ORDER</order>
  98 + </rule>
  99 + </section>
  100 + <section>
  101 + <rule>
  102 + <match>
  103 + <AND>
  104 + <NAME>.*</NAME>
  105 + <XML_ATTRIBUTE />
  106 + <XML_NAMESPACE>.*</XML_NAMESPACE>
  107 + </AND>
  108 + </match>
  109 + <order>BY_NAME</order>
  110 + </rule>
  111 + </section>
  112 + </rules>
  113 + </arrangement>
  114 + </codeStyleSettings>
  115 + </code_scheme>
  116 +</component>
0 117 \ No newline at end of file
... ...
.idea/gradle.xml 0 → 100644
  1 +++ a/.idea/gradle.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="GradleSettings">
  4 + <option name="linkedExternalProjectsSettings">
  5 + <GradleProjectSettings>
  6 + <compositeConfiguration>
  7 + <compositeBuild compositeDefinitionSource="SCRIPT" />
  8 + </compositeConfiguration>
  9 + <option name="distributionType" value="DEFAULT_WRAPPED" />
  10 + <option name="externalProjectPath" value="$PROJECT_DIR$" />
  11 + <option name="resolveModulePerSourceSet" value="false" />
  12 + <option name="testRunner" value="PLATFORM" />
  13 + </GradleProjectSettings>
  14 + </option>
  15 + </component>
  16 +</project>
0 17 \ No newline at end of file
... ...
.idea/misc.xml 0 → 100644
  1 +++ a/.idea/misc.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  4 + <output url="file://$PROJECT_DIR$/build/classes" />
  5 + </component>
  6 + <component name="ProjectType">
  7 + <option name="id" value="Android" />
  8 + </component>
  9 +</project>
0 10 \ No newline at end of file
... ...
.idea/runConfigurations.xml 0 → 100644
  1 +++ a/.idea/runConfigurations.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="RunConfigurationProducerService">
  4 + <option name="ignoredProducers">
  5 + <set>
  6 + <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
  7 + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
  8 + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
  9 + </set>
  10 + </option>
  11 + </component>
  12 +</project>
0 13 \ No newline at end of file
... ...
app/.gitignore 0 → 100644
  1 +++ a/app/.gitignore
  1 +/build
... ...
app/build.gradle 0 → 100644
  1 +++ a/app/build.gradle
  1 +apply plugin: 'com.android.application'
  2 +apply plugin: 'com.alibaba.arouter'
  3 +
  4 +static def stringValue(def value) {
  5 + return "\"${value}\""
  6 +}
  7 +//自定义资源 resValue("bool", "debug", "true")
  8 +//自定义BuildConfig buildConfigField("String", "BASE_URL", stringValue("http://120.92.201.43:8090/"))
  9 +//自定义Manifest manifestPlaceholders = [BaiduMobAd_CHANNEL: "meizu", xxx: "xx"]
  10 +
  11 +def ACTION_SHARE_SEND = "netpp.intent.action.SHARE_SEND"
  12 +def ACTION_SHARE_RELEASE = "netpp.intent.action.SHARE_RELEASE"
  13 +def ACTION_EYEWITNESS_ACTIVITY = "cnlive.intent.action.eyewitness.activity"
  14 +def ACTION_HTML_IMG_PREVIEW = "com.cnlive.strike.moudle.preview.ui.DataProcessingActivity"
  15 +def ACTION_HTML_PAY_ICE = "com.cnlive.strike.moudle.user.ui.activity.PayActivity"
  16 +android {
  17 + compileSdkVersion rootProject.ext.compileSdkVersion
  18 + buildToolsVersion rootProject.ext.buildToolsVersion
  19 + defaultConfig {
  20 + applicationId "com.cnlive.strike"
  21 + minSdkVersion 19
  22 + targetSdkVersion 27
  23 + versionCode 1
  24 + versionName "1.0"
  25 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  26 + multiDexEnabled true
  27 +
  28 + javaCompileOptions {
  29 + annotationProcessorOptions {
  30 + arguments = [AROUTER_MODULE_NAME: project.getName(), AROUTER_GENERATE_DOC: "enable"]
  31 + }
  32 + }
  33 + }
  34 +
  35 + signingConfigs {
  36 + debugConfig {
  37 + storeFile file("www.cnlive.com.key")
  38 + storePassword "www.cnlive.comPassw0rd"
  39 + keyAlias "strike-debug"
  40 + keyPassword "www.cnlive.com"
  41 + }
  42 + releaseConfig {
  43 + storeFile file("www.cnlive.com.key")
  44 + storePassword "www.cnlive.comPassw0rd"
  45 + keyAlias "strike"
  46 + keyPassword "www.cnlive.com"
  47 + }
  48 + }
  49 +
  50 + buildTypes {
  51 + debug {
  52 + signingConfig signingConfigs.debugConfig
  53 + resValue("string", "app_name", "网++ 内测")
  54 + resValue("string", "ACCOUNT_LABEL", "网家家 内测")
  55 + resValue("string", "ACCOUNT_TYPE", "com.cnlive.strike.debug.AccountType")
  56 + resValue("string", "ACCOUNT_PROVIDE", "com.cnlive.strike.debug.AccountProvide")
  57 +
  58 + buildConfigField("String", "QQ_SHARE", stringValue("1106866745"))
  59 + buildConfigField("String", "WECHAT_SHARE", stringValue("wx9b7f9443a8ccf15a"))
  60 + buildConfigField("String", "WECHAT_KEY", stringValue("8d9970bf2901411d8dd2bffb344f147e"))
  61 + buildConfigField("String", "SEND_AUTH_REQ_STATE", stringValue("com_cnlive_strike_debug"))
  62 +
  63 + zipAlignEnabled true
  64 + applicationIdSuffix ".debug"
  65 + resValue("string", "app_name", "网家家 内测")
  66 + buildConfigField("boolean", "VERSION_AS_DEBUG", "true")
  67 + buildConfigField("String", "APP_ID", stringValue("802_jhbqccxw08"))
  68 + buildConfigField("String", "APP_KEY", stringValue("9c5619e9be747bb3b925dd215ca5923d86f12c09b9394f"))
  69 + buildConfigField("String", "APP_SCERET", stringValue("1e6380cb347255e777f72b5aa60f41daa68443a132aaea"))
  70 + buildConfigField("String", "SHARE_APP_KEY", stringValue("26192e9007048"))
  71 + buildConfigField("String", "SHARE_APP_SCERET", stringValue("BNK5YVWfIBLir6WFaXTCNQLSFGTRs+Hnz5EkIfngJmOPLFBlUwmAbw=="))
  72 + buildConfigField("String", "PAY_ACCOUNT", stringValue("wjj_app_test"))
  73 + buildConfigField("String", "H5_CNLIVE", stringValue("http://wjjh5test.cnlive.com/cnnews.html"))
  74 + buildConfigField("String", "H5_DP", stringValue("http://wjjh5test.cnlive.com/cndr.html"))
  75 + buildConfigField("String", "APP_WEB_START_HOST", stringValue("wjjh5test.cnlive.com"))
  76 + buildConfigField("int", "SPECIAL_GROUP_MEMBER_LIMIT", "3")
  77 + buildConfigField("String", "TINGYUN_KEY", stringValue("631d38c6c09247debaab5389e5387b9a"))
  78 + buildConfigField("String", "BAIDU_APP_ID", stringValue("14380872"))
  79 + buildConfigField("String", "BAIDU_APP_KEY", stringValue("ibl8vbKkPVYBw5IOvR8tVGGo"))
  80 + buildConfigField("String", "BAIDU_APP_SECRET", stringValue("QEd6n1qruIGG8AYkyLyqepksO2uUe0GK"))
  81 + buildConfigField("String", "WECHAT_APPID", stringValue("wx9b7f9443a8ccf15a"))
  82 + buildConfigField("String", "SHARE_TITLE", stringValue("快来加入中国网家家,优享美好生活!"))
  83 + buildConfigField("String", "SHARE_SUBTITLE", stringValue("中国网家家 让生活更美好!"))
  84 + buildConfigField("String", "SHARE_DOWNLOAD", stringValue("https://fir.im/d35h"))
  85 + buildConfigField("String", "SHARE_ICON", stringValue("http://wjjh5test.cnlive.com/static/logo.png"))
  86 + buildConfigField("String", "HTML_SUBSCRIBE", stringValue(" http://wjjh5test.cnlive.com/cnSubscription.html"))
  87 + buildConfigField("String", "REPORT_URL", stringValue("http://wjjh5test.cnlive.com/cnReport.html?"))
  88 + buildConfigField("String", "BAIDU_MAP_APP_KEY", stringValue("2IIsTtvX2FA88yvDrPZedc2ZvMhxyDbN"))
  89 + buildConfigField("String", "SHOP_PATH", stringValue("wjjshop.cnlive.com"))
  90 + buildConfigField("String", "UMENG_APPKEY", stringValue("5d6482a30cafb21b6b000d14"))
  91 +
  92 + resValue("string", "outshare", "网家家好友Debug")
  93 + resValue("string", "outsharecircle", "网家家生活圈Debug")
  94 +
  95 + buildConfigField("String", "APP_SPLASH_VERSION", stringValue("5"))
  96 +
  97 + manifestPlaceholders = [
  98 + QQ_APPKEY : "tencent1106866745",
  99 + TINGYUN_SCHEME : "tingyun.33201",
  100 + APP_START_HOST : "wjjh5test.cnlive.com",
  101 + MAP_APPKEY : "2298a0e307e69fab64c02d7d0412fd73",
  102 + BAIDU_APP_ID : "14380872",
  103 + BAIDU_APP_KEY : "ibl8vbKkPVYBw5IOvR8tVGGo",
  104 + BAIDU_MAP_APP_KEY: "2IIsTtvX2FA88yvDrPZedc2ZvMhxyDbN",
  105 + BAIDU_APP_SECRET : "QEd6n1qruIGG8AYkyLyqepksO2uUe0GK",
  106 + UMENG_APPKEY : "5d6482a30cafb21b6b000d14",
  107 + OPENINSTALL_KEY : "gzqtwt"
  108 + ]
  109 + }
  110 + release {
  111 + signingConfig signingConfigs.releaseConfig
  112 +
  113 + minifyEnabled false
  114 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  115 +
  116 + resValue("string", "ACCOUNT_LABEL", "网家家")
  117 + resValue("string", "ACCOUNT_TYPE", "com.cnlive.strike.AccountType")
  118 + resValue("string", "ACCOUNT_PROVIDE", "com.cnlive.strike.AccountProvide")
  119 +
  120 + buildConfigField("String", "QQ_SHARE", stringValue("1106691520"))
  121 + buildConfigField("String", "WECHAT_SHARE", stringValue("wxed528fc749b7ee88"))
  122 + buildConfigField("String", "WECHAT_KEY", stringValue("729c3d3055fe336bcdef7020c2548e89"))
  123 + buildConfigField("String", "SEND_AUTH_REQ_STATE", stringValue("com_cnlive_strike"))
  124 +
  125 + zipAlignEnabled true
  126 + resValue("string", "app_name", "网家家")
  127 + buildConfigField("boolean", "VERSION_AS_DEBUG", "false")
  128 + buildConfigField("String", "APP_ID", stringValue("769_jetj7bq525"))
  129 + buildConfigField("String", "APP_KEY", stringValue("0d57b045ec0c3988a682d94c644e66b9b8e0d2b8ef937d"))
  130 + buildConfigField("String", "APP_SCERET", stringValue("275e8dc29274a1186d82f65bc607c231d02bcb3bfd8976"))
  131 + buildConfigField("String", "SHARE_APP_KEY", stringValue("24e4abeaa92d8"))
  132 + buildConfigField("String", "SHARE_APP_SCERET", stringValue("FFtu2hsTjCHaZobVP4xNJNoQi1AqS9o8bdYYiv/3SXJTDva0l0arSw=="))
  133 + buildConfigField("String", "PAY_ACCOUNT", stringValue("wjj_app"))
  134 + buildConfigField("String", "H5_CNLIVE", stringValue("http://wjjh5.cnlive.com/index.html"))
  135 + buildConfigField("String", "H5_DP", stringValue("http://wjjh5.cnlive.com/number.html"))
  136 + buildConfigField("String", "APP_WEB_START_HOST", stringValue("wjjh5.cnlive.com"))
  137 + buildConfigField("int", "SPECIAL_GROUP_MEMBER_LIMIT", "10")
  138 + buildConfigField("String", "TINGYUN_KEY", stringValue("4069112acd1c429693e6f9bf70eba939"))
  139 + buildConfigField("String", "BAIDU_APP_ID", stringValue("14380860"))
  140 + buildConfigField("String", "BAIDU_APP_KEY", stringValue("4bX1eK7SiCL461QBnRKilowc"))
  141 + buildConfigField("String", "BAIDU_APP_SECRET", stringValue("BTzXLoPbUjlLeOM1nHnfOuTB9q18YZVq"))
  142 + buildConfigField("String", "WECHAT_APPID", stringValue("wxed528fc749b7ee88"))
  143 + buildConfigField("String", "SHARE_TITLE", stringValue("快来加入中国网家家,优享美好生活!"))
  144 + buildConfigField("String", "SHARE_SUBTITLE", stringValue("中国网家家 让生活更美好!"))
  145 + buildConfigField("String", "SHARE_DOWNLOAD", stringValue("http://apiwjj.cnlive.com/download/index.html"))
  146 + buildConfigField("String", "SHARE_ICON", stringValue("http://wjjh5.cnlive.com/static/logo.png"))
  147 + buildConfigField("String", "HTML_SUBSCRIBE", stringValue(" http://wjjh5.cnlive.com/cnSubscription.html"))
  148 + buildConfigField("String", "REPORT_URL", stringValue("http://wjjh5.cnlive.com/cnReport.html?"))
  149 + buildConfigField("String", "BAIDU_MAP_APP_KEY", stringValue("Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"))
  150 + buildConfigField("String", "SHOP_PATH", stringValue("managemall.cnlive.com"))
  151 + buildConfigField("String", "UMENG_APPKEY", stringValue("5d647f890cafb21b6b000aee"))
  152 +
  153 + resValue("string", "outshare", "网家家好友")
  154 + resValue("string", "outsharecircle", "网家家生活圈")
  155 +
  156 + buildConfigField("String", "APP_SPLASH_VERSION", stringValue("5"))
  157 +
  158 + manifestPlaceholders = [
  159 + QQ_APPKEY : "tencent1106691520",
  160 + TINGYUN_SCHEME : "tingyun.33867",
  161 + APP_START_HOST : "wjjh5.cnlive.com",
  162 + MAP_APPKEY : "4b9aa4122d1d6f4d6beb6cb7701f2873",
  163 + BAIDU_APP_ID : "14380860",
  164 + BAIDU_APP_KEY : "4bX1eK7SiCL461QBnRKilowc",
  165 + BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2",
  166 + BAIDU_APP_SECRET : "BTzXLoPbUjlLeOM1nHnfOuTB9q18YZVq",
  167 + UMENG_APPKEY : "5d647f890cafb21b6b000aee",
  168 + OPENINSTALL_KEY : "vfkj9x"
  169 + ]
  170 + }
  171 +
  172 +
  173 + }
  174 +
  175 + compileOptions {
  176 + sourceCompatibility JavaVersion.VERSION_1_8
  177 + targetCompatibility JavaVersion.VERSION_1_8
  178 + }
  179 + dataBinding {
  180 + enabled true
  181 + }
  182 + dexOptions {
  183 + javaMaxHeapSize '4g'
  184 + }
  185 + compileOptions {
  186 + sourceCompatibility 1.8
  187 + targetCompatibility 1.8
  188 + }
  189 +}
  190 +
  191 +dependencies {
  192 + implementation fileTree(dir: 'libs', include: ['*.jar'])
  193 + implementation "com.android.support:support-v4:$rootProject.supportV4"
  194 + implementation "com.android.support:appcompat-v7:$rootProject.appcompatV7"
  195 + implementation "com.android.support:design:$rootProject.design"
  196 + implementation "com.android.support:support-v13:$rootProject.supportV13"
  197 + implementation "com.android.support:recyclerview-v7:$rootProject.recyclerviewV7"
  198 + testImplementation 'junit:junit:4.12'
  199 + //ARouter
  200 + implementation "com.alibaba:arouter-api:$rootProject.arouterApiVersion"
  201 + annotationProcessor "com.alibaba:arouter-compiler:$rootProject.arouterCompilerVersion"
  202 +
  203 + api "com.cnlive.libs:network:$rootProject.libNetwork"
  204 + //CNLive Encipher
  205 + implementation "com.cnlive:lib-cnencipher:$rootProject.libCnencipher"
  206 + implementation "com.cnlive:lib_cnutil:$rootProject.libCnUtil"
  207 +
  208 + //base
  209 + implementation "com.cnlive.libs:base:$rootProject.libBase"
  210 + implementation project(path: ':moudle_user')
  211 +
  212 + //UI框架库 (http://qmuiteam.com/android/page/document.html)
  213 + implementation "com.qmuiteam:qmui:$rootProject.qmui"
  214 + implementation "com.cnlive.libs:arch:$rootProject.appArch"
  215 +
  216 + // eventbus
  217 + implementation "org.greenrobot:eventbus:$rootProject.eventBus"
  218 +
  219 +}
... ...
app/proguard-rules.pro 0 → 100644
  1 +++ a/app/proguard-rules.pro
  1 +# Add project specific ProGuard rules here.
  2 +# You can control the set of applied configuration files using the
  3 +# proguardFiles setting in build.gradle.
  4 +#
  5 +# For more details, see
  6 +# http://developer.android.com/guide/developing/tools/proguard.html
  7 +
  8 +# If your project uses WebView with JS, uncomment the following
  9 +# and specify the fully qualified class name to the JavaScript interface
  10 +# class:
  11 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  12 +# public *;
  13 +#}
  14 +
  15 +# Uncomment this to preserve the line number information for
  16 +# debugging stack traces.
  17 +#-keepattributes SourceFile,LineNumberTable
  18 +
  19 +# If you keep the line number information, uncomment this to
  20 +# hide the original source file name.
  21 +#-renamesourcefileattribute SourceFile
... ...
app/src/androidTest/java/com/cnlive/strike/moduleuser/ExampleInstrumentedTest.java 0 → 100644
  1 +++ a/app/src/androidTest/java/com/cnlive/strike/moduleuser/ExampleInstrumentedTest.java
  1 +package com.cnlive.strike.moduleuser;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import androidx.test.platform.app.InstrumentationRegistry;
  6 +import androidx.test.ext.junit.runners.AndroidJUnit4;
  7 +
  8 +import org.junit.Test;
  9 +import org.junit.runner.RunWith;
  10 +
  11 +import static org.junit.Assert.*;
  12 +
  13 +/**
  14 + * Instrumented test, which will execute on an Android device.
  15 + *
  16 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  17 + */
  18 +@RunWith(AndroidJUnit4.class)
  19 +public class ExampleInstrumentedTest {
  20 + @Test
  21 + public void useAppContext() {
  22 + // Context of the app under test.
  23 + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
  24 +
  25 + assertEquals("com.cnlive.strike.moduleuser", appContext.getPackageName());
  26 + }
  27 +}
... ...
app/src/main/AndroidManifest.xml 0 → 100644
  1 +++ a/app/src/main/AndroidManifest.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:tools="http://schemas.android.com/tools"
  4 + package="com.cnlive.strike">
  5 +
  6 + <uses-permission
  7 + android:name="android.permission.AUTHENTICATE_ACCOUNTS"
  8 + android:maxSdkVersion="22" />
  9 + <uses-permission
  10 + android:name="android.permission.GET_ACCOUNTS"
  11 + android:maxSdkVersion="22" />
  12 + <uses-permission
  13 + android:name="android.permission.MANAGE_ACCOUNTS"
  14 + android:maxSdkVersion="22" />
  15 + <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> <!-- 账户自动更新 App保活相关 -->
  16 + <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
  17 + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  18 + <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
  19 + <uses-permission android:name="android.permission.ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED" />
  20 + <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 账户权限相关 -->
  21 + <uses-permission
  22 + android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
  23 + tools:ignore="ProtectedPermissions" />
  24 + <uses-permission
  25 + android:name="android.permission.ACCOUNT_MANAGER"
  26 + tools:ignore="ProtectedPermissions" />
  27 + <uses-permission android:name="android.permission.INTERNET" />
  28 +
  29 + <application
  30 + android:name=".moduleuser.MyApp"
  31 + android:allowBackup="true"
  32 + android:icon="@mipmap/ic_launcher"
  33 + android:label="@string/app_name"
  34 + android:roundIcon="@mipmap/ic_launcher_round"
  35 + android:supportsRtl="true"
  36 + android:theme="@style/AppTheme">
  37 + <service
  38 + android:name="com.cnlive.strike.user.auth.UserAccountService"
  39 + tools:ignore="ExportedService">
  40 + <intent-filter>
  41 + <action android:name="android.accounts.AccountAuthenticator" />
  42 + </intent-filter>
  43 +
  44 + <meta-data
  45 + android:name="android.accounts.AccountAuthenticator"
  46 + android:resource="@xml/authenticator" />
  47 + </service>
  48 +
  49 + <service
  50 + android:name="com.cnlive.strike.user.auth.UserSyncService"
  51 + android:exported="true">
  52 + <intent-filter>
  53 + <action android:name="android.content.SyncAdapter" />
  54 + </intent-filter>
  55 +
  56 + <meta-data
  57 + android:name="android.content.SyncAdapter"
  58 + android:resource="@xml/account_sync_adapter" />
  59 + </service>
  60 +
  61 + <provider
  62 + android:name="com.cnlive.strike.user.auth.UserAccountProvider"
  63 + android:authorities="@string/ACCOUNT_PROVIDE"
  64 + android:exported="false"
  65 + android:syncable="true" />
  66 + <activity android:name=".moduleuser.MainActivity">
  67 + <intent-filter>
  68 + <action android:name="android.intent.action.MAIN" />
  69 +
  70 + <category android:name="android.intent.category.LAUNCHER" />
  71 + </intent-filter>
  72 + </activity>
  73 + <activity
  74 + android:name=".moduleuser.TestActivity"
  75 + android:label="UserAPI"
  76 + android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
  77 + </application>
  78 +
  79 +</manifest>
0 80 \ No newline at end of file
... ...
app/src/main/java/com/cnlive/strike/moduleuser/MainActivity.java 0 → 100644
  1 +++ a/app/src/main/java/com/cnlive/strike/moduleuser/MainActivity.java
  1 +package com.cnlive.strike.moduleuser;
  2 +
  3 +
  4 +import android.content.Intent;
  5 +import android.os.Bundle;
  6 +import android.support.v7.app.AppCompatActivity;
  7 +
  8 +import com.cnlive.strike.R;
  9 +import com.cnlive.strike.moudle.user.ui.activity.LoginActivity;
  10 +import com.cnlive.strike.user.auth.UserService;
  11 +import com.cnlive.strike.util.SharedPreferencesUtils;
  12 +
  13 +
  14 +public class MainActivity extends AppCompatActivity {
  15 + @Override
  16 + protected void onCreate(Bundle savedInstanceState) {
  17 + super.onCreate(savedInstanceState);
  18 + setContentView(R.layout.activity_main);
  19 + startLoginPage();
  20 + }
  21 +
  22 + public void startLoginPage() {
  23 +// int version = Integer.parseInt(BuildConfig.APP_SPLASH_VERSION);
  24 +// SharedPreferencesUtils.put(this, "APP_SPLASH_VERSION", version);
  25 + SharedPreferencesUtils.put(this, "isFirstLogin", false);
  26 + Intent intent = new Intent(this, LoginActivity.class);
  27 + startActivity(intent);
  28 + overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
  29 + finish();
  30 + }
  31 +}
... ...
app/src/main/java/com/cnlive/strike/moduleuser/MyApp.java 0 → 100644
  1 +++ a/app/src/main/java/com/cnlive/strike/moduleuser/MyApp.java
  1 +package com.cnlive.strike.moduleuser;
  2 +
  3 +import android.app.Application;
  4 +
  5 +import com.alibaba.android.arouter.launcher.ARouter;
  6 +import com.cnlive.libs.base.application.AppConfig;
  7 +import com.cnlive.strike.BuildConfig;
  8 +import com.cnlive.strike.user.auth.UserService;
  9 +
  10 +public class MyApp extends Application {
  11 + @Override
  12 + public void onCreate() {
  13 + super.onCreate();
  14 + //App默认配置单
  15 + AppConfig.init(this, BuildConfig.APP_ID, BuildConfig.APP_KEY,
  16 + BuildConfig.APP_SCERET, BuildConfig.SPECIAL_GROUP_MEMBER_LIMIT,
  17 + BuildConfig.VERSION_AS_DEBUG, BuildConfig.BAIDU_APP_KEY, BuildConfig.BAIDU_APP_SECRET,
  18 + UserService.getUid(getApplicationContext()), BuildConfig.WECHAT_APPID,
  19 + BuildConfig.SHARE_DOWNLOAD, BuildConfig.SHARE_ICON, BuildConfig.PAY_ACCOUNT,
  20 + BuildConfig.SHARE_TITLE, BuildConfig.SHARE_SUBTITLE, BuildConfig.REPORT_URL,
  21 + BuildConfig.BAIDU_MAP_APP_KEY, BuildConfig.SHOP_PATH);
  22 + initARouter();
  23 + }
  24 +
  25 + /**
  26 + * 初始化阿里的路由
  27 + */
  28 + private void initARouter() {
  29 + if (BuildConfig.DEBUG) { // 这两行必须写在init之前,否则这些配置在init过程中将无效
  30 + ARouter.openLog(); // 打印日志
  31 + ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
  32 + ARouter.printStackTrace(); // 打印日志的时候打印线程堆栈
  33 + }
  34 + ARouter.init(this); // 尽可能早,推荐在Application中初始化
  35 + }
  36 +}
... ...
app/src/main/java/com/cnlive/strike/moduleuser/TestActivity.java 0 → 100644
  1 +++ a/app/src/main/java/com/cnlive/strike/moduleuser/TestActivity.java
  1 +package com.cnlive.strike.moduleuser;
  2 +
  3 +import android.app.Activity;
  4 +import android.content.Intent;
  5 +import android.net.Uri;
  6 +import android.os.Bundle;
  7 +import android.text.TextUtils;
  8 +import android.util.Log;
  9 +
  10 +import androidx.annotation.Nullable;
  11 +
  12 +import com.cnlive.strike.moudle.user.model.UserConst;
  13 +import com.cnlive.strike.moudle.user.ui.activity.FirstLoginActivity;
  14 +import com.cnlive.strike.moudle.user.ui.activity.LoginActivity;
  15 +import com.cnlive.strike.moudle.user.ui.activity.MainTestActivity;
  16 +import com.cnlive.strike.moudle.user.ui.activity.PersonalDataActivity;
  17 +import com.cnlive.strike.user.auth.UserService;
  18 +
  19 +public class TestActivity extends Activity {
  20 + private int eventType;
  21 + private boolean isHasOtherUserInfo = false;
  22 + private String TAG = "TestActivity";
  23 +
  24 + /************MainActivity 所需要的数据***********/
  25 + private String type;
  26 + private Uri uri;
  27 + private boolean clickAd;
  28 + private String sharetype;
  29 + private String classifyTagMsg;
  30 + /************LoginActivity 所需要的数据***********/
  31 + private String tagMsg;
  32 + /************修改用户头像 所需要的数据***********/
  33 + private String faceUrl;
  34 + /************修改用户昵称 所需要的数据***********/
  35 + private String nickName;
  36 + /************CoinRainAction 所需要的数据***********/
  37 + private String taskId;
  38 + private String contentId;
  39 + private String addtype;
  40 + private Boolean isDouyin;
  41 +
  42 + @Override
  43 + protected void onCreate(@Nullable @android.support.annotation.Nullable Bundle savedInstanceState) {
  44 + super.onCreate(savedInstanceState);
  45 + if (null != getIntent().getExtras()) {
  46 + eventType = getIntent().getExtras().getInt("eventType");
  47 + initAction(eventType);
  48 + }
  49 + }
  50 +
  51 + private void initAction(int eventType) {
  52 + switch (eventType) {
  53 + //是新用户
  54 + case UserConst.IS_NEW_USER://是新用户
  55 + Log.e(TAG, "是新用户");
  56 +
  57 + //TODO 必须设置用户头像
  58 + //OpenInstall用户注册统计
  59 +// OpenInstall.reportRegister();
  60 + //友盟账号登录统计,暂时只有平台登录,后续对接三方登录
  61 +// MobclickAgent.onProfileSignIn("CNLive", user.getUid());
  62 + isHasOtherUserInfo = getIntent().getExtras().getBoolean("isHasOtherUserInfo");
  63 +
  64 + //判断是否有其他平台数据
  65 + if (isHasOtherUserInfo) {
  66 + type = getIntent().getExtras().getString("type");
  67 + uri = (Uri) getIntent().getExtras().get("uri");
  68 + clickAd = getIntent().getExtras().getBoolean(LoginActivity.TAG_CLICK_AD);
  69 + sharetype = getIntent().getExtras().getString("sharetype");
  70 + classifyTagMsg = getIntent().getExtras().getString("classifyTagMsg");
  71 +
  72 +
  73 + //直接显示主视图
  74 + Intent intent = new Intent(this, MainTestActivity.class);
  75 + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  76 + intent.putExtra("type", type);
  77 + intent.putExtra("uri", uri);
  78 + intent.putExtra(LoginActivity.TAG_CLICK_AD, clickAd);
  79 + intent.putExtra("sharetype", sharetype);
  80 + if (!TextUtils.isEmpty(classifyTagMsg)) {
  81 + intent.putExtra("classifyTagMsg", classifyTagMsg);
  82 + }
  83 + startActivity(intent);
  84 + } else {
  85 + tagMsg = getIntent().getExtras().getString("tagMsg");
  86 + clickAd = getIntent().getExtras().getBoolean(LoginActivity.TAG_CLICK_AD);
  87 + //没有第三方数据,跳转到设置用户信息的界面
  88 + Intent intent = new Intent(this, FirstLoginActivity.class);
  89 + intent.putExtra(LoginActivity.TAG_MSG, TextUtils.isEmpty(tagMsg) ? "" : tagMsg);
  90 + intent.putExtra(LoginActivity.TAG_CLICK_AD, clickAd);
  91 + startActivity(intent);
  92 +
  93 + }
  94 + Log.e(TAG, "initAction: ");
  95 + finish();
  96 + break;
  97 + case UserConst.IS_NOT_NEW_USER://不是新用户
  98 + //todo
  99 + //友盟账号登录统计,暂时只有平台登录,后续对接三方登录
  100 +// MobclickAgent.onProfileSignIn("CNLive", user.getUid());
  101 + type = getIntent().getExtras().getString("type");
  102 + uri = (Uri) getIntent().getExtras().get("uri");
  103 + clickAd = getIntent().getExtras().getBoolean(LoginActivity.TAG_CLICK_AD);
  104 + sharetype = getIntent().getExtras().getString("sharetype");
  105 + classifyTagMsg = getIntent().getExtras().getString("classifyTagMsg");
  106 + //直接显示主视图
  107 +// Intent intent = new Intent(this, MainTestActivity.class);
  108 +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  109 +// intent.putExtra("type", type);
  110 +// intent.putExtra("uri", uri);
  111 +// intent.putExtra(LoginActivity.TAG_CLICK_AD, clickAd);
  112 +// intent.putExtra("sharetype", sharetype);
  113 +// if (!TextUtils.isEmpty(classifyTagMsg)) {
  114 +// intent.putExtra("classifyTagMsg", classifyTagMsg);
  115 +// }
  116 +// startActivity(intent);
  117 + PersonalDataActivity.startActivity(this);
  118 + Log.e(TAG, "不是新用户");
  119 + finish();
  120 + break;
  121 +
  122 + case UserConst.MODIFY_USER_IMAGE://修改用户头像
  123 + Log.e(TAG, "修改用户头像");
  124 +
  125 + faceUrl = getIntent().getExtras().getString("faceUrl");
  126 + //todo
  127 +// LoginManager.modifyUserImage(UserService.getUid(this), faceUrl);
  128 + finish();
  129 + break;
  130 +
  131 + case UserConst.USER_INVALID://用户失效
  132 + Log.e(TAG, "用户失效");
  133 +
  134 + //todo
  135 + // UserOfflineUtil.userInvalid(context);
  136 + finish();
  137 + case UserConst.MODIFY_USER_NAME://修改用户名称
  138 + //todo
  139 + Log.e(TAG, "修改用户名称");
  140 + nickName = getIntent().getExtras().getString("nickName");
  141 + // LoginManager.modifyUserName( UserService.getUid(context), nickName);
  142 +
  143 + finish();
  144 + break;
  145 + case UserConst.COIN_RAIN_ACTION://下金币
  146 + Log.e(TAG, "下金币");
  147 + //todo
  148 + taskId = getIntent().getExtras().getString("taskId");
  149 + contentId = getIntent().getExtras().getString("contentId");
  150 + addtype = getIntent().getExtras().getString("addtype");
  151 + isDouyin = getIntent().getExtras().getBoolean("isDouyin");
  152 + if (TextUtils.isEmpty(taskId)) {
  153 + taskId = "";
  154 + }
  155 + if (TextUtils.isEmpty(contentId)) {
  156 + contentId = "";
  157 + }
  158 + if (TextUtils.isEmpty(addtype)) {
  159 + addtype = "";
  160 + }
  161 + //CoinRainAction.code(activity, UserService.getUid(activity), taskId,contentId, addtype,isDouyin);
  162 +
  163 + break;
  164 + }
  165 + }
  166 +
  167 +}
... ...
app/src/main/res/drawable-v24/ic_launcher_foreground.xml 0 → 100644
  1 +++ a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
  1 +<vector xmlns:android="http://schemas.android.com/apk/res/android"
  2 + xmlns:aapt="http://schemas.android.com/aapt"
  3 + android:width="108dp"
  4 + android:height="108dp"
  5 + android:viewportWidth="108"
  6 + android:viewportHeight="108">
  7 + <path
  8 + android:fillType="evenOdd"
  9 + android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
  10 + android:strokeWidth="1"
  11 + android:strokeColor="#00000000">
  12 + <aapt:attr name="android:fillColor">
  13 + <gradient
  14 + android:endX="78.5885"
  15 + android:endY="90.9159"
  16 + android:startX="48.7653"
  17 + android:startY="61.0927"
  18 + android:type="linear">
  19 + <item
  20 + android:color="#44000000"
  21 + android:offset="0.0" />
  22 + <item
  23 + android:color="#00000000"
  24 + android:offset="1.0" />
  25 + </gradient>
  26 + </aapt:attr>
  27 + </path>
  28 + <path
  29 + android:fillColor="#FFFFFF"
  30 + android:fillType="nonZero"
  31 + android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
  32 + android:strokeWidth="1"
  33 + android:strokeColor="#00000000" />
  34 +</vector>
... ...
app/src/main/res/drawable/ic_launcher_background.xml 0 → 100644
  1 +++ a/app/src/main/res/drawable/ic_launcher_background.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<vector xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:width="108dp"
  4 + android:height="108dp"
  5 + android:viewportWidth="108"
  6 + android:viewportHeight="108">
  7 + <path
  8 + android:fillColor="#008577"
  9 + android:pathData="M0,0h108v108h-108z" />
  10 + <path
  11 + android:fillColor="#00000000"
  12 + android:pathData="M9,0L9,108"
  13 + android:strokeWidth="0.8"
  14 + android:strokeColor="#33FFFFFF" />
  15 + <path
  16 + android:fillColor="#00000000"
  17 + android:pathData="M19,0L19,108"
  18 + android:strokeWidth="0.8"
  19 + android:strokeColor="#33FFFFFF" />
  20 + <path
  21 + android:fillColor="#00000000"
  22 + android:pathData="M29,0L29,108"
  23 + android:strokeWidth="0.8"
  24 + android:strokeColor="#33FFFFFF" />
  25 + <path
  26 + android:fillColor="#00000000"
  27 + android:pathData="M39,0L39,108"
  28 + android:strokeWidth="0.8"
  29 + android:strokeColor="#33FFFFFF" />
  30 + <path
  31 + android:fillColor="#00000000"
  32 + android:pathData="M49,0L49,108"
  33 + android:strokeWidth="0.8"
  34 + android:strokeColor="#33FFFFFF" />
  35 + <path
  36 + android:fillColor="#00000000"
  37 + android:pathData="M59,0L59,108"
  38 + android:strokeWidth="0.8"
  39 + android:strokeColor="#33FFFFFF" />
  40 + <path
  41 + android:fillColor="#00000000"
  42 + android:pathData="M69,0L69,108"
  43 + android:strokeWidth="0.8"
  44 + android:strokeColor="#33FFFFFF" />
  45 + <path
  46 + android:fillColor="#00000000"
  47 + android:pathData="M79,0L79,108"
  48 + android:strokeWidth="0.8"
  49 + android:strokeColor="#33FFFFFF" />
  50 + <path
  51 + android:fillColor="#00000000"
  52 + android:pathData="M89,0L89,108"
  53 + android:strokeWidth="0.8"
  54 + android:strokeColor="#33FFFFFF" />
  55 + <path
  56 + android:fillColor="#00000000"
  57 + android:pathData="M99,0L99,108"
  58 + android:strokeWidth="0.8"
  59 + android:strokeColor="#33FFFFFF" />
  60 + <path
  61 + android:fillColor="#00000000"
  62 + android:pathData="M0,9L108,9"
  63 + android:strokeWidth="0.8"
  64 + android:strokeColor="#33FFFFFF" />
  65 + <path
  66 + android:fillColor="#00000000"
  67 + android:pathData="M0,19L108,19"
  68 + android:strokeWidth="0.8"
  69 + android:strokeColor="#33FFFFFF" />
  70 + <path
  71 + android:fillColor="#00000000"
  72 + android:pathData="M0,29L108,29"
  73 + android:strokeWidth="0.8"
  74 + android:strokeColor="#33FFFFFF" />
  75 + <path
  76 + android:fillColor="#00000000"
  77 + android:pathData="M0,39L108,39"
  78 + android:strokeWidth="0.8"
  79 + android:strokeColor="#33FFFFFF" />
  80 + <path
  81 + android:fillColor="#00000000"
  82 + android:pathData="M0,49L108,49"
  83 + android:strokeWidth="0.8"
  84 + android:strokeColor="#33FFFFFF" />
  85 + <path
  86 + android:fillColor="#00000000"
  87 + android:pathData="M0,59L108,59"
  88 + android:strokeWidth="0.8"
  89 + android:strokeColor="#33FFFFFF" />
  90 + <path
  91 + android:fillColor="#00000000"
  92 + android:pathData="M0,69L108,69"
  93 + android:strokeWidth="0.8"
  94 + android:strokeColor="#33FFFFFF" />
  95 + <path
  96 + android:fillColor="#00000000"
  97 + android:pathData="M0,79L108,79"
  98 + android:strokeWidth="0.8"
  99 + android:strokeColor="#33FFFFFF" />
  100 + <path
  101 + android:fillColor="#00000000"
  102 + android:pathData="M0,89L108,89"
  103 + android:strokeWidth="0.8"
  104 + android:strokeColor="#33FFFFFF" />
  105 + <path
  106 + android:fillColor="#00000000"
  107 + android:pathData="M0,99L108,99"
  108 + android:strokeWidth="0.8"
  109 + android:strokeColor="#33FFFFFF" />
  110 + <path
  111 + android:fillColor="#00000000"
  112 + android:pathData="M19,29L89,29"
  113 + android:strokeWidth="0.8"
  114 + android:strokeColor="#33FFFFFF" />
  115 + <path
  116 + android:fillColor="#00000000"
  117 + android:pathData="M19,39L89,39"
  118 + android:strokeWidth="0.8"
  119 + android:strokeColor="#33FFFFFF" />
  120 + <path
  121 + android:fillColor="#00000000"
  122 + android:pathData="M19,49L89,49"
  123 + android:strokeWidth="0.8"
  124 + android:strokeColor="#33FFFFFF" />
  125 + <path
  126 + android:fillColor="#00000000"
  127 + android:pathData="M19,59L89,59"
  128 + android:strokeWidth="0.8"
  129 + android:strokeColor="#33FFFFFF" />
  130 + <path
  131 + android:fillColor="#00000000"
  132 + android:pathData="M19,69L89,69"
  133 + android:strokeWidth="0.8"
  134 + android:strokeColor="#33FFFFFF" />
  135 + <path
  136 + android:fillColor="#00000000"
  137 + android:pathData="M19,79L89,79"
  138 + android:strokeWidth="0.8"
  139 + android:strokeColor="#33FFFFFF" />
  140 + <path
  141 + android:fillColor="#00000000"
  142 + android:pathData="M29,19L29,89"
  143 + android:strokeWidth="0.8"
  144 + android:strokeColor="#33FFFFFF" />
  145 + <path
  146 + android:fillColor="#00000000"
  147 + android:pathData="M39,19L39,89"
  148 + android:strokeWidth="0.8"
  149 + android:strokeColor="#33FFFFFF" />
  150 + <path
  151 + android:fillColor="#00000000"
  152 + android:pathData="M49,19L49,89"
  153 + android:strokeWidth="0.8"
  154 + android:strokeColor="#33FFFFFF" />
  155 + <path
  156 + android:fillColor="#00000000"
  157 + android:pathData="M59,19L59,89"
  158 + android:strokeWidth="0.8"
  159 + android:strokeColor="#33FFFFFF" />
  160 + <path
  161 + android:fillColor="#00000000"
  162 + android:pathData="M69,19L69,89"
  163 + android:strokeWidth="0.8"
  164 + android:strokeColor="#33FFFFFF" />
  165 + <path
  166 + android:fillColor="#00000000"
  167 + android:pathData="M79,19L79,89"
  168 + android:strokeWidth="0.8"
  169 + android:strokeColor="#33FFFFFF" />
  170 +</vector>
... ...
app/src/main/res/layout/activity_main.xml 0 → 100644
  1 +++ a/app/src/main/res/layout/activity_main.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
  4 + xmlns:tools="http://schemas.android.com/tools"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent"
  7 + tools:context=".MainActivity">
  8 +
  9 +
  10 +</LinearLayout>
0 11 \ No newline at end of file
... ...
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml 0 → 100644
  1 +++ a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <background android:drawable="@drawable/ic_launcher_background" />
  4 + <foreground android:drawable="@drawable/ic_launcher_foreground" />
  5 +</adaptive-icon>
0 6 \ No newline at end of file
... ...
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml 0 → 100644
  1 +++ a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <background android:drawable="@drawable/ic_launcher_background" />
  4 + <foreground android:drawable="@drawable/ic_launcher_foreground" />
  5 +</adaptive-icon>
0 6 \ No newline at end of file
... ...
app/src/main/res/mipmap-hdpi/ic_launcher.png 0 → 100644

2.89 KB

app/src/main/res/mipmap-hdpi/ic_launcher_round.png 0 → 100644

4.79 KB

app/src/main/res/mipmap-mdpi/ic_launcher.png 0 → 100644

2.01 KB

app/src/main/res/mipmap-mdpi/ic_launcher_round.png 0 → 100644

2.72 KB

app/src/main/res/mipmap-xhdpi/ic_launcher.png 0 → 100644

4.38 KB

app/src/main/res/mipmap-xhdpi/ic_launcher_round.png 0 → 100644

6.73 KB

app/src/main/res/mipmap-xxhdpi/ic_launcher.png 0 → 100644

6.24 KB

app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png 0 → 100644

10.2 KB

app/src/main/res/mipmap-xxxhdpi/ic_launcher.png 0 → 100644

8.91 KB

app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png 0 → 100644

14.8 KB

app/src/main/res/values/colors.xml 0 → 100644
  1 +++ a/app/src/main/res/values/colors.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <color name="colorPrimary">#008577</color>
  4 + <color name="colorPrimaryDark">#00574B</color>
  5 + <color name="colorAccent">#D81B60</color>
  6 +</resources>
... ...
app/src/main/res/values/strings.xml 0 → 100644
  1 +++ a/app/src/main/res/values/strings.xml
  1 +<resources>
  2 +<!-- <string name="app_name">ModuleUser</string>-->
  3 +</resources>
... ...
app/src/main/res/values/styles.xml 0 → 100644
  1 +++ a/app/src/main/res/values/styles.xml
  1 +<resources>
  2 +
  3 + <!-- Base application theme. -->
  4 + <style name="AppTheme" parent="QMUI.Compat.NoActionBar">
  5 + <!-- Customize your theme here. -->
  6 + <item name="colorPrimary">@color/colorPrimary</item>
  7 + <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  8 + <item name="colorAccent">@color/colorAccent</item>
  9 + </style>
  10 +
  11 +</resources>
... ...
app/src/test/java/com/cnlive/strike/moduleuser/ExampleUnitTest.java 0 → 100644
  1 +++ a/app/src/test/java/com/cnlive/strike/moduleuser/ExampleUnitTest.java
  1 +package com.cnlive.strike.moduleuser;
  2 +
  3 +import org.junit.Test;
  4 +
  5 +import static org.junit.Assert.*;
  6 +
  7 +/**
  8 + * Example local unit test, which will execute on the development machine (host).
  9 + *
  10 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  11 + */
  12 +public class ExampleUnitTest {
  13 + @Test
  14 + public void addition_isCorrect() {
  15 + assertEquals(4, 2 + 2);
  16 + }
  17 +}
0 18 \ No newline at end of file
... ...
app/www.cnlive.com.key 0 → 100644
No preview for this file type
build.gradle 0 → 100644
  1 +++ a/build.gradle
  1 +// Top-level build file where you can add configuration options common to all sub-projects/modules.
  2 +apply from: "config.gradle"
  3 +buildscript {
  4 + repositories {
  5 + //关联微博
  6 + maven { url "https://dl.bintray.com/thelasterstar/maven/" }
  7 + google()
  8 + jcenter()
  9 + mavenCentral()
  10 + maven {
  11 + url 'http://nexus2.tingyun.com/nexus/content/repositories/snapshots/'
  12 + }
  13 + maven {
  14 + url 'https://dl.bintray.com/granzon/cnlive'
  15 + }
  16 +
  17 + maven { url 'https://dl.bintray.com/umsdk/release' }
  18 + }
  19 + dependencies {
  20 + classpath 'com.android.tools.build:gradle:3.5.1'
  21 + classpath "com.alibaba:arouter-register:1.0.2"
  22 + // NOTE: Do not place your application dependencies here; they belong
  23 + // in the individual module build.gradle files
  24 + }
  25 +}
  26 +
  27 +allprojects {
  28 + repositories {
  29 + maven { url "https://dl.bintray.com/thelasterstar/maven/" }
  30 + google()
  31 + jcenter()
  32 + //------------------ 资源库配置 ------------------
  33 + maven {
  34 + url "http://android.nexus.cnlive.com/repository/cnlive-mixed/"
  35 + credentials { username = nexusId; password = nexusPw }
  36 + }
  37 + //------------------ 资源库配置 END------------------
  38 + maven {
  39 + url 'https://dl.bintray.com/granzon/cnlive'
  40 + }
  41 + maven {
  42 + url 'https://dl.bintray.com/granzon/cnliveLibs'
  43 + }
  44 + maven {
  45 + url "https://jitpack.io"
  46 + }
  47 +
  48 + }
  49 +}
  50 +
  51 +task clean(type: Delete) {
  52 + delete rootProject.buildDir
  53 +}
  54 +
  55 +//配置全局变量
  56 +ext {
  57 + def versionMajor = 1
  58 + def versionMinor = 5
  59 + def versionPatch = 5
  60 + def versionBuild = 5
  61 + // module依赖库公共版本号
  62 + versionCode = versionMajor * 1000 + versionMinor * 100 + versionPatch * 10 + versionBuild
  63 + versionName = "${versionMajor}.${versionMinor}.${versionPatch}.${versionBuild}"
  64 +
  65 + compileSdkVersion = 29
  66 + buildToolsVersion = "29.0.2"
  67 + minSdkVersion = 19
  68 + targetSdkVersion = 29
  69 + //基础库
  70 + libBase = '1.6.2'
  71 + libNetwork = '1.1.5'
  72 + libEmoj = '2.0.9'
  73 + libMenu = '1.0.6'
  74 + libAnalytics = '1.1.0'
  75 + libLargeImage = '1.0.1'
  76 + libMediaPicker = '1.5.8'
  77 + libWjjPay = "1.0.5"
  78 + appAgriculture = "1.1.9"
  79 + appArch = '1.1.1'
  80 +
  81 + //视频库
  82 + libVideoQiniu = '1.0.6'
  83 +
  84 + //幸福中国
  85 + moduleHappyChina = '0.0.12'
  86 +
  87 + //support 相关
  88 + supportV4 = '28.0.0'
  89 + appcompatV7 = '28.0.0'
  90 + design = '28.0.0'
  91 + supportV13 = '28.0.0'
  92 + recyclerviewV7 = '28.0.0'
  93 + cardviewV7 = '28.0.0'
  94 + multidex = '1.0.3'
  95 + constraintLayout = '1.1.3'
  96 +
  97 + //阿里路由框架
  98 + arouterApiVersion = '1.4.0'
  99 + arouterCompilerVersion = '1.2.1'
  100 +
  101 + //视讯云相关
  102 + libCnUtil = '3.1.5'
  103 + libCnVideo = '3.3.11'
  104 + libUpload = '2.0.6'
  105 + libCnencipher = '1.1.1'
  106 +
  107 + //glide
  108 + glide = '4.5.0'
  109 + glideTransformations = '3.0.1'
  110 + compiler = '4.5.0'
  111 +
  112 + //数据库加密
  113 + androidDatabaseSqlcipher = '3.5.6'
  114 +
  115 + //qmui
  116 + qmui = '1.4.0'
  117 +
  118 + //高德地图
  119 + location = 'latest.integration'
  120 +
  121 + //SmartRefresh
  122 + SmartRefreshLayout = '1.1.0-alpha-6'
  123 + SmartRefreshHeader = '1.1.0-alpha-6'
  124 +
  125 + //二维码相关
  126 + bgaQrcodeZxing = '1.3.6'
  127 + bgaQrcodeZbar = '1.3.6'
  128 +
  129 + //七牛
  130 + qiniuAndroidSdk = '7.3.11'
  131 +
  132 + //听云
  133 + nbsNewlensAgent = '2.14.1'
  134 +
  135 + //eventbus
  136 + eventbus = '3.1.1'
  137 +
  138 + //华为推送
  139 + push = '2.6.0.301'
  140 +
  141 + //mvp 框架
  142 + mvp = '3.0.4'
  143 + viewstate = '3.0.4'
  144 + mvpLce = '3.0.4'
  145 + mvpNullobjectPresenter = '3.0.4'
  146 +
  147 + //GSON
  148 + gson = '2.8.2'
  149 +
  150 + //greendao
  151 + greendao = '3.2.2'
  152 +
  153 + //retrofit2
  154 + retrofit = '2.3.0'
  155 + converterGson = '2.3.0'
  156 + adapterRxjava2 = '2.3.0'
  157 +
  158 + //okhttp3
  159 + okhttp = '3.9.0'
  160 + loggingInterceptor = '3.9.0'
  161 +
  162 + //rxJava
  163 + rxJava = "2.1.8"
  164 + rxAndroid = "2.0.1"
  165 +
  166 + //IM
  167 + imsdk = '3.3.2.14394.14395'
  168 + callsdk = '1.0.9'
  169 + //魅族推送
  170 + pushInternal = '3.6.+@aar'
  171 +
  172 + //其他
  173 + circleimageview = '2.1.0'
  174 + recyclerviewAnimators = '2.2.6'
  175 + TimePickerDialog = '1.0.1'
  176 + loadingviewlib = '1.0'
  177 + lottie = '2.7.0'
  178 + easypermissions = '1.0.0'
  179 + rotatephotoview = '1.0.5'
  180 + LargeImageView = '1.1.0'
  181 + magicindicator = '1.6.0'
  182 + libAudio = '1.0.1'
  183 +
  184 + appSubscription = "2.0.5"
  185 + eventBus = "3.1.1"
  186 + agentweb = '4.0.3-beta'
  187 + filechooser = '4.0.3-beta'
  188 + download = '4.0.3-beta'
  189 +
  190 + pedometer = "0.9.8"
  191 + avi = "2.1.3"
  192 + classification = "0.5.7"
  193 +
  194 + //友盟
  195 + umsdk_analytics = "8.0.0"
  196 + umsdk_common = "2.0.0"
  197 + //小家音箱
  198 + xiaojiaSoundBox="0.3.17"
  199 + //动画大全
  200 + viewAnimationsEasing='2.0@aar'
  201 + viewAnimationsAndroid='2.3@aar'
  202 + //蓝牙
  203 + BleLib="2.3.4"
  204 +}
... ...
config.gradle 0 → 100644
  1 +++ a/config.gradle
  1 +ext {
  2 + //Nexus 访问账号
  3 + nexusId = "developer"
  4 + nexusPw = "android_2019"
  5 +
  6 + //Nexus 发布配置
  7 + maven = [
  8 + //发布版地址(暂未使用)
  9 + mavenUrl : "http://android.nexus.cnlive.com/repository/cnlive/",
  10 + //快照版地址(暂未使用)
  11 + mavenDevUrl : "http://android.nexus.cnlive.com/repository/cnlive-snapshot/",
  12 + //混合版地址
  13 + mavenMixedUrl : "http://android.nexus.cnlive.com/repository/cnlive-mixed/",
  14 + //发布账号(单独分配)
  15 + mavenUserName: "developer",
  16 + mavenPwd : "android_2019"
  17 + ]
  18 +
  19 + //Maven Base库配置
  20 + moudle_user = [
  21 + //编译方式
  22 + debug : false,
  23 + //版本号
  24 + version: "0.0.1",
  25 + //Lib库前缀
  26 + packeg : "com.cnlive.module",
  27 + //Lib库名称
  28 + name : "user"
  29 + ]
  30 +}
0 31 \ No newline at end of file
... ...
gradle.properties 0 → 100644
  1 +++ a/gradle.properties
  1 +# Project-wide Gradle settings.
  2 +# IDE (e.g. Android Studio) users:
  3 +# Gradle settings configured through the IDE *will override*
  4 +# any settings specified in this file.
  5 +# For more details on how to configure your build environment visit
  6 +# http://www.gradle.org/docs/current/userguide/build_environment.html
  7 +# Specifies the JVM arguments used for the daemon process.
  8 +# The setting is particularly useful for tweaking memory settings.
  9 +org.gradle.jvmargs=-Xmx1536m
  10 +# When configured, Gradle will run in incubating parallel mode.
  11 +# This option should only be used with decoupled projects. More details, visit
  12 +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
  13 +# org.gradle.parallel=true
  14 +# AndroidX package structure to make it clearer which packages are bundled with the
  15 +# Android operating system, and which are packaged with your app's APK
  16 +# https://developer.android.com/topic/libraries/support-library/androidx-rn
  17 +android.useAndroidX=false
  18 +# Automatically convert third-party libraries to use AndroidX
  19 +android.enableJetifier=false
  20 +
... ...
gradle/wrapper/gradle-wrapper.jar 0 → 100644
No preview for this file type
gradle/wrapper/gradle-wrapper.properties 0 → 100644
  1 +++ a/gradle/wrapper/gradle-wrapper.properties
  1 +#Wed Oct 30 10:59:02 CST 2019
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
... ...
gradlew 0 → 100644
  1 +++ a/gradlew
  1 +#!/usr/bin/env sh
  2 +
  3 +##############################################################################
  4 +##
  5 +## Gradle start up script for UN*X
  6 +##
  7 +##############################################################################
  8 +
  9 +# Attempt to set APP_HOME
  10 +# Resolve links: $0 may be a link
  11 +PRG="$0"
  12 +# Need this for relative symlinks.
  13 +while [ -h "$PRG" ] ; do
  14 + ls=`ls -ld "$PRG"`
  15 + link=`expr "$ls" : '.*-> \(.*\)$'`
  16 + if expr "$link" : '/.*' > /dev/null; then
  17 + PRG="$link"
  18 + else
  19 + PRG=`dirname "$PRG"`"/$link"
  20 + fi
  21 +done
  22 +SAVED="`pwd`"
  23 +cd "`dirname \"$PRG\"`/" >/dev/null
  24 +APP_HOME="`pwd -P`"
  25 +cd "$SAVED" >/dev/null
  26 +
  27 +APP_NAME="Gradle"
  28 +APP_BASE_NAME=`basename "$0"`
  29 +
  30 +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
  31 +DEFAULT_JVM_OPTS=""
  32 +
  33 +# Use the maximum available, or set MAX_FD != -1 to use that value.
  34 +MAX_FD="maximum"
  35 +
  36 +warn () {
  37 + echo "$*"
  38 +}
  39 +
  40 +die () {
  41 + echo
  42 + echo "$*"
  43 + echo
  44 + exit 1
  45 +}
  46 +
  47 +# OS specific support (must be 'true' or 'false').
  48 +cygwin=false
  49 +msys=false
  50 +darwin=false
  51 +nonstop=false
  52 +case "`uname`" in
  53 + CYGWIN* )
  54 + cygwin=true
  55 + ;;
  56 + Darwin* )
  57 + darwin=true
  58 + ;;
  59 + MINGW* )
  60 + msys=true
  61 + ;;
  62 + NONSTOP* )
  63 + nonstop=true
  64 + ;;
  65 +esac
  66 +
  67 +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
  68 +
  69 +# Determine the Java command to use to start the JVM.
  70 +if [ -n "$JAVA_HOME" ] ; then
  71 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
  72 + # IBM's JDK on AIX uses strange locations for the executables
  73 + JAVACMD="$JAVA_HOME/jre/sh/java"
  74 + else
  75 + JAVACMD="$JAVA_HOME/bin/java"
  76 + fi
  77 + if [ ! -x "$JAVACMD" ] ; then
  78 + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
  79 +
  80 +Please set the JAVA_HOME variable in your environment to match the
  81 +location of your Java installation."
  82 + fi
  83 +else
  84 + JAVACMD="java"
  85 + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
  86 +
  87 +Please set the JAVA_HOME variable in your environment to match the
  88 +location of your Java installation."
  89 +fi
  90 +
  91 +# Increase the maximum file descriptors if we can.
  92 +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
  93 + MAX_FD_LIMIT=`ulimit -H -n`
  94 + if [ $? -eq 0 ] ; then
  95 + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
  96 + MAX_FD="$MAX_FD_LIMIT"
  97 + fi
  98 + ulimit -n $MAX_FD
  99 + if [ $? -ne 0 ] ; then
  100 + warn "Could not set maximum file descriptor limit: $MAX_FD"
  101 + fi
  102 + else
  103 + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
  104 + fi
  105 +fi
  106 +
  107 +# For Darwin, add options to specify how the application appears in the dock
  108 +if $darwin; then
  109 + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
  110 +fi
  111 +
  112 +# For Cygwin, switch paths to Windows format before running java
  113 +if $cygwin ; then
  114 + APP_HOME=`cygpath --path --mixed "$APP_HOME"`
  115 + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
  116 + JAVACMD=`cygpath --unix "$JAVACMD"`
  117 +
  118 + # We build the pattern for arguments to be converted via cygpath
  119 + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
  120 + SEP=""
  121 + for dir in $ROOTDIRSRAW ; do
  122 + ROOTDIRS="$ROOTDIRS$SEP$dir"
  123 + SEP="|"
  124 + done
  125 + OURCYGPATTERN="(^($ROOTDIRS))"
  126 + # Add a user-defined pattern to the cygpath arguments
  127 + if [ "$GRADLE_CYGPATTERN" != "" ] ; then
  128 + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
  129 + fi
  130 + # Now convert the arguments - kludge to limit ourselves to /bin/sh
  131 + i=0
  132 + for arg in "$@" ; do
  133 + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
  134 + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
  135 +
  136 + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
  137 + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
  138 + else
  139 + eval `echo args$i`="\"$arg\""
  140 + fi
  141 + i=$((i+1))
  142 + done
  143 + case $i in
  144 + (0) set -- ;;
  145 + (1) set -- "$args0" ;;
  146 + (2) set -- "$args0" "$args1" ;;
  147 + (3) set -- "$args0" "$args1" "$args2" ;;
  148 + (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
  149 + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
  150 + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
  151 + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
  152 + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
  153 + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
  154 + esac
  155 +fi
  156 +
  157 +# Escape application args
  158 +save () {
  159 + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
  160 + echo " "
  161 +}
  162 +APP_ARGS=$(save "$@")
  163 +
  164 +# Collect all arguments for the java command, following the shell quoting and substitution rules
  165 +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
  166 +
  167 +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
  168 +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
  169 + cd "$(dirname "$0")"
  170 +fi
  171 +
  172 +exec "$JAVACMD" "$@"
... ...
gradlew.bat 0 → 100644
  1 +++ a/gradlew.bat
  1 +@if "%DEBUG%" == "" @echo off
  2 +@rem ##########################################################################
  3 +@rem
  4 +@rem Gradle startup script for Windows
  5 +@rem
  6 +@rem ##########################################################################
  7 +
  8 +@rem Set local scope for the variables with windows NT shell
  9 +if "%OS%"=="Windows_NT" setlocal
  10 +
  11 +set DIRNAME=%~dp0
  12 +if "%DIRNAME%" == "" set DIRNAME=.
  13 +set APP_BASE_NAME=%~n0
  14 +set APP_HOME=%DIRNAME%
  15 +
  16 +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
  17 +set DEFAULT_JVM_OPTS=
  18 +
  19 +@rem Find java.exe
  20 +if defined JAVA_HOME goto findJavaFromJavaHome
  21 +
  22 +set JAVA_EXE=java.exe
  23 +%JAVA_EXE% -version >NUL 2>&1
  24 +if "%ERRORLEVEL%" == "0" goto init
  25 +
  26 +echo.
  27 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
  28 +echo.
  29 +echo Please set the JAVA_HOME variable in your environment to match the
  30 +echo location of your Java installation.
  31 +
  32 +goto fail
  33 +
  34 +:findJavaFromJavaHome
  35 +set JAVA_HOME=%JAVA_HOME:"=%
  36 +set JAVA_EXE=%JAVA_HOME%/bin/java.exe
  37 +
  38 +if exist "%JAVA_EXE%" goto init
  39 +
  40 +echo.
  41 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
  42 +echo.
  43 +echo Please set the JAVA_HOME variable in your environment to match the
  44 +echo location of your Java installation.
  45 +
  46 +goto fail
  47 +
  48 +:init
  49 +@rem Get command-line arguments, handling Windows variants
  50 +
  51 +if not "%OS%" == "Windows_NT" goto win9xME_args
  52 +
  53 +:win9xME_args
  54 +@rem Slurp the command line arguments.
  55 +set CMD_LINE_ARGS=
  56 +set _SKIP=2
  57 +
  58 +:win9xME_args_slurp
  59 +if "x%~1" == "x" goto execute
  60 +
  61 +set CMD_LINE_ARGS=%*
  62 +
  63 +:execute
  64 +@rem Setup the command line
  65 +
  66 +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
  67 +
  68 +@rem Execute Gradle
  69 +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
  70 +
  71 +:end
  72 +@rem End local scope for the variables with windows NT shell
  73 +if "%ERRORLEVEL%"=="0" goto mainEnd
  74 +
  75 +:fail
  76 +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
  77 +rem the _cmd.exe /c_ return code!
  78 +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
  79 +exit /b 1
  80 +
  81 +:mainEnd
  82 +if "%OS%"=="Windows_NT" endlocal
  83 +
  84 +:omega
... ...
moudle_user/.gitignore 0 → 100644
  1 +++ a/moudle_user/.gitignore
  1 +/build
... ...
moudle_user/build.gradle 0 → 100644
  1 +++ a/moudle_user/build.gradle
  1 +apply plugin: 'com.android.library'
  2 +apply from: './maven_push.gradle'
  3 +android {
  4 + compileSdkVersion rootProject.ext.compileSdkVersion
  5 + buildToolsVersion rootProject.ext.buildToolsVersion
  6 +
  7 +
  8 + defaultConfig {
  9 + minSdkVersion rootProject.ext.minSdkVersion
  10 + targetSdkVersion rootProject.ext.targetSdkVersion
  11 + versionCode rootProject.ext.versionCode
  12 + versionName rootProject.ext.versionName
  13 + javaCompileOptions {
  14 + annotationProcessorOptions {
  15 + arguments = [AROUTER_MODULE_NAME: project.getName(), AROUTER_GENERATE_DOC: "enable"]
  16 + }
  17 + }
  18 + }
  19 + compileOptions {
  20 + sourceCompatibility JavaVersion.VERSION_1_8
  21 + targetCompatibility JavaVersion.VERSION_1_8
  22 + }
  23 +
  24 + buildTypes {
  25 + debug {
  26 + resValue("string", "ACCOUNT_LABEL", "网家家 内测")
  27 + resValue("string", "ACCOUNT_TYPE", "com.c nlive.strike.debug.AccountType")
  28 + resValue("string", "ACCOUNT_PROVIDE", "com.cnlive.strike.debug.AccountProvide")
  29 +
  30 + zipAlignEnabled true
  31 + buildConfigField("String", "QQ_SHARE", stringValue("1106866745"))
  32 + buildConfigField("String", "WECHAT_SHARE", stringValue("wx9b7f9443a8ccf15a"))
  33 + buildConfigField("String", "WECHAT_KEY", stringValue("8d9970bf2901411d8dd2bffb344f147e"))
  34 + buildConfigField("String", "SEND_AUTH_REQ_STATE", stringValue("com_cnlive_strike_debug"))
  35 + manifestPlaceholders = [
  36 + QQ_APPKEY: "tencent1106866745"
  37 + ]
  38 + }
  39 + release {
  40 + resValue("string", "ACCOUNT_LABEL", "网家家")
  41 + resValue("string", "ACCOUNT_TYPE", "com.cnlive.strike.AccountType")
  42 + resValue("string", "ACCOUNT_PROVIDE", "com.cnlive.strike.AccountProvide")
  43 + minifyEnabled false
  44 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  45 +
  46 + zipAlignEnabled true
  47 + buildConfigField("String", "QQ_SHARE", stringValue("1106691520"))
  48 + buildConfigField("String", "WECHAT_SHARE", stringValue("wxed528fc749b7ee88"))
  49 + buildConfigField("String", "WECHAT_KEY", stringValue("729c3d3055fe336bcdef7020c2548e89"))
  50 + buildConfigField("String", "SEND_AUTH_REQ_STATE", stringValue("com_cnlive_strike"))
  51 + manifestPlaceholders = [
  52 + QQ_APPKEY: "tencent1106691520"
  53 + ]
  54 + }
  55 + }
  56 + dataBinding {
  57 + enabled true
  58 + }
  59 +}
  60 +
  61 +static def stringValue(def value) {
  62 + return "\"${value}\""
  63 +}
  64 +
  65 +dependencies {
  66 + implementation fileTree(include: ['*.jar'], dir: 'libs')
  67 +// implementation "com.android.support:support-v4:$rootProject.supportV4"
  68 + implementation "com.android.support:appcompat-v7:$rootProject.appcompatV7"
  69 + implementation "com.android.support:design:$rootProject.design"
  70 + implementation "com.android.support:support-v13:$rootProject.supportV13"
  71 + implementation "com.android.support:recyclerview-v7:$rootProject.recyclerviewV7"
  72 +
  73 + //ARouter
  74 + implementation "com.alibaba:arouter-api:$rootProject.arouterApiVersion"
  75 + implementation 'com.android.support.constraint:constraint-layout:1.1.3'
  76 + annotationProcessor "com.alibaba:arouter-compiler:$rootProject.arouterCompilerVersion"
  77 +
  78 + //base
  79 + implementation "com.cnlive.libs:base:$rootProject.libBase"
  80 + api "com.cnlive.libs:network:$rootProject.libNetwork"
  81 +
  82 + //CNLive Encipher
  83 + implementation "com.cnlive:lib-cnencipher:$rootProject.libCnencipher"
  84 + implementation "com.cnlive:lib_cnutil:$rootProject.libCnUtil"
  85 +
  86 + //UI框架库 (http://qmuiteam.com/android/page/document.html)
  87 + implementation "com.qmuiteam:qmui:$rootProject.qmui"
  88 + implementation "com.cnlive.libs:arch:$rootProject.appArch"
  89 +
  90 + //腾讯
  91 + api files('libs/open_sdk_r6008_lite.jar')
  92 +
  93 + //微博
  94 + implementation 'com.sina.weibo.sdk:core:4.4.1:openDefaultRelease@aar'
  95 +
  96 + //微信
  97 + implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.3.1'
  98 +
  99 + //IM
  100 + api "com.tencent.imsdk:imsdk:$rootProject.imsdk"
  101 +
  102 + //图片选择器
  103 + implementation "com.cnlive.libs:mediapicker:$rootProject.libMediaPicker"
  104 +
  105 + implementation "com.cnlive.libs:emoj:$rootProject.libEmoj"
  106 +
  107 + implementation files('libs/pinyin4j-2.5.0.jar')
  108 +
  109 + //glide
  110 + implementation "com.github.bumptech.glide:glide:$rootProject.glide"
  111 + implementation "jp.wasabeef:glide-transformations:$rootProject.glideTransformations"
  112 + implementation "com.android.support.constraint:constraint-layout:$rootProject.constraintLayout"
  113 + annotationProcessor "com.github.bumptech.glide:compiler:$rootProject.compiler"
  114 +
  115 + // eventbus
  116 + implementation "org.greenrobot:eventbus:$rootProject.eventBus"
  117 +}
... ...
moudle_user/consumer-rules.pro 0 → 100644
  1 +++ a/moudle_user/consumer-rules.pro
... ...
moudle_user/libs/open_sdk_r6008_lite.jar 0 → 100644
No preview for this file type
moudle_user/libs/pinyin4j-2.5.0.jar 0 → 100644
No preview for this file type
moudle_user/maven_push.gradle 0 → 100644
  1 +++ a/moudle_user/maven_push.gradle
  1 +apply plugin: 'maven'
  2 +
  3 +uploadArchives() {
  4 + repositories {
  5 + mavenDeployer {
  6 + def lib = moudle_user
  7 + //发布环境(正式/测试)
  8 + android.defaultPublishConfig lib.debug ? "debug" : "release"
  9 + //发布渠道(地址/账号)
  10 + repository(url: maven.mavenMixedUrl) {
  11 + authentication(userName: maven.mavenUserName, password: maven.mavenPwd)
  12 + }
  13 + //发布信息(包名/别名/版本)
  14 + pom.project {
  15 + groupId lib.packeg
  16 + artifactId lib.name
  17 + version = lib.debug ? lib.version.concat("-SNAPSHOT") : lib.version
  18 + }
  19 + pom.whenConfigured { pom ->
  20 + pom.dependencies.clear()
  21 + }
  22 +
  23 + }
  24 + }
  25 +}
0 26 \ No newline at end of file
... ...
moudle_user/proguard-rules.pro 0 → 100644
  1 +++ a/moudle_user/proguard-rules.pro
  1 +# Add project specific ProGuard rules here.
  2 +# You can control the set of applied configuration files using the
  3 +# proguardFiles setting in build.gradle.
  4 +#
  5 +# For more details, see
  6 +# http://developer.android.com/guide/developing/tools/proguard.html
  7 +
  8 +# If your project uses WebView with JS, uncomment the following
  9 +# and specify the fully qualified class name to the JavaScript interface
  10 +# class:
  11 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  12 +# public *;
  13 +#}
  14 +
  15 +# Uncomment this to preserve the line number information for
  16 +# debugging stack traces.
  17 +#-keepattributes SourceFile,LineNumberTable
  18 +
  19 +# If you keep the line number information, uncomment this to
  20 +# hide the original source file name.
  21 +#-renamesourcefileattribute SourceFile
... ...
moudle_user/src/androidTest/java/com/cnlive/strike/moudle_user/ExampleInstrumentedTest.java 0 → 100644
  1 +++ a/moudle_user/src/androidTest/java/com/cnlive/strike/moudle_user/ExampleInstrumentedTest.java
  1 +package com.cnlive.strike.moudle_user;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import androidx.test.platform.app.InstrumentationRegistry;
  6 +import androidx.test.ext.junit.runners.AndroidJUnit4;
  7 +
  8 +import org.junit.Test;
  9 +import org.junit.runner.RunWith;
  10 +
  11 +import static org.junit.Assert.*;
  12 +
  13 +/**
  14 + * Instrumented test, which will execute on an Android device.
  15 + *
  16 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  17 + */
  18 +@RunWith(AndroidJUnit4.class)
  19 +public class ExampleInstrumentedTest {
  20 + @Test
  21 + public void useAppContext() {
  22 + // Context of the app under test.
  23 + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
  24 +
  25 + assertEquals("com.cnlive.strike.moudle_user.test", appContext.getPackageName());
  26 + }
  27 +}
... ...
moudle_user/src/debug/res/mipmap-hdpi/icon_account.png 0 → 100644

4.41 KB

moudle_user/src/debug/res/mipmap-ldpi/icon_account.png 0 → 100644

2.17 KB

moudle_user/src/debug/res/mipmap-xhdpi/icon_account.png 0 → 100644

5.93 KB

moudle_user/src/debug/res/mipmap-xxhdpi/icon_account.png 0 → 100644

9.25 KB

moudle_user/src/debug/res/mipmap-xxxhdpi/icon_account.png 0 → 100644

13.2 KB

moudle_user/src/main/AndroidManifest.xml 0 → 100644
  1 +++ a/moudle_user/src/main/AndroidManifest.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:tools="http://schemas.android.com/tools"
  4 + package="com.cnlive.strike.moudle_user">
  5 +
  6 + <uses-permission android:name="android.permission.INTERNET" />
  7 +
  8 + <!-- for mta statistics, not necessary-->
  9 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  10 + <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  11 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  12 + <uses-permission
  13 + android:name="android.permission.AUTHENTICATE_ACCOUNTS"
  14 + android:maxSdkVersion="22" />
  15 + <uses-permission
  16 + android:name="android.permission.GET_ACCOUNTS"
  17 + android:maxSdkVersion="22" />
  18 + <uses-permission
  19 + android:name="android.permission.MANAGE_ACCOUNTS"
  20 + android:maxSdkVersion="22" />
  21 + <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> <!-- 账户自动更新 App保活相关 -->
  22 + <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
  23 + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  24 + <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
  25 + <uses-permission android:name="android.permission.ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED" />
  26 + <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 账户权限相关 -->
  27 + <uses-permission
  28 + android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
  29 + tools:ignore="ProtectedPermissions" />
  30 + <uses-permission
  31 + android:name="android.permission.ACCOUNT_MANAGER"
  32 + tools:ignore="ProtectedPermissions" />
  33 + <uses-permission android:name="android.permission.INTERNET" />
  34 +
  35 + <application android:largeHeap="true">
  36 + <meta-data
  37 + android:name="WEIBO_APPKEY"
  38 + android:value="3884700821" />
  39 + <meta-data
  40 + android:name="WEIBO_CHANNEL"
  41 + android:value="weibo" />
  42 +
  43 + <activity android:name="com.cnlive.strike.moudle.user.ui.activity.MainTestActivity" />
  44 + <activity
  45 + android:name="com.cnlive.strike.moudle.user.ui.activity.LoginActivity"
  46 + android:configChanges="keyboardHidden|screenSize|orientation|smallestScreenSize|screenLayout"
  47 + android:launchMode="singleTop"
  48 + android:screenOrientation="portrait"
  49 + android:windowSoftInputMode="stateHidden|adjustPan">
  50 + <intent-filter>
  51 + <action android:name="android.accounts.AccountAuthenticator" />
  52 + </intent-filter>
  53 + </activity>
  54 + <activity
  55 + android:name="com.tencent.connect.common.AssistActivity"
  56 + android:configChanges="orientation|keyboardHidden|screenSize"
  57 + android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  58 + <activity
  59 + android:name="com.tencent.tauth.AuthActivity"
  60 + android:launchMode="singleTop"
  61 + android:noHistory="true">
  62 + <intent-filter>
  63 + <action android:name="android.intent.action.VIEW" />
  64 +
  65 + <category android:name="android.intent.category.DEFAULT" />
  66 + <category android:name="android.intent.category.BROWSABLE" />
  67 +
  68 + <data android:scheme="${QQ_APPKEY}" />
  69 + </intent-filter>
  70 + </activity>
  71 +
  72 + <activity
  73 + android:name="com.cnlive.strike.moudle.user.ui.activity.BindPhoneNumberActivity"
  74 + android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
  75 + android:launchMode="singleTop"
  76 + android:screenOrientation="portrait" />
  77 + <activity
  78 + android:name="com.cnlive.strike.moudle.user.ui.activity.FirstLoginActivity"
  79 + android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
  80 + android:launchMode="singleTop"
  81 + android:screenOrientation="portrait" />
  82 + <activity
  83 + android:name="com.cnlive.strike.moudle.user.ui.activity.SelectCountryActivity"
  84 + android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
  85 + android:launchMode="singleTask"
  86 + android:screenOrientation="portrait"
  87 + android:windowSoftInputMode="adjustResize" />
  88 + <activity
  89 + android:name="com.cnlive.strike.debug.wxapi.WXEntryActivity"
  90 + android:exported="true"
  91 + android:label="@string/app_name"
  92 + android:launchMode="singleTop"
  93 + android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
  94 + <!-- 个人资料页-->
  95 + <activity
  96 + android:name="com.cnlive.strike.moudle.user.ui.activity.PersonalDataActivity"
  97 + android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
  98 + android:launchMode="singleTop"
  99 + android:screenOrientation="portrait" />
  100 + <!--预览头像-->
  101 + <activity
  102 + android:name="com.cnlive.strike.moudle.user.ui.activity.PersonalImageActivity"
  103 + android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
  104 + android:launchMode="singleTop"
  105 + android:screenOrientation="portrait" />
  106 + <!-- 个人资料姓名-->
  107 + <activity
  108 + android:name="com.cnlive.strike.moudle.user.ui.activity.UpdateContentActivity"
  109 + android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
  110 + android:launchMode="singleTop"
  111 + android:screenOrientation="portrait"
  112 + android:windowSoftInputMode="stateVisible|adjustPan" />
  113 +<!-- 个人签名-->
  114 + <activity
  115 + android:name="com.cnlive.strike.moudle.user.ui.activity.SignatureActivity"
  116 + android:configChanges="keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
  117 + android:launchMode="singleTop"
  118 + android:screenOrientation="portrait"
  119 + android:windowSoftInputMode="stateVisible|adjustPan" />
  120 + </application>
  121 +
  122 +</manifest>
0 123 \ No newline at end of file
... ...
moudle_user/src/main/java/com/cnlive/share/arouter/ARouterUtil.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/arouter/ARouterUtil.java
  1 +package com.cnlive.share.arouter;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import com.alibaba.android.arouter.launcher.ARouter;
  6 +import com.cnlive.libs.base.util.SharedPreferencesHelper;
  7 +import com.cnlive.strike.user.auth.UserService;
  8 +import com.cnlive.strike.util.HelperUtil;
  9 +
  10 +public class ARouterUtil {
  11 + /**
  12 + * 分享完成 增加积分
  13 + */
  14 + public static void addIntegrationPic(Context context, String taskId, String contentId, String addtype) {
  15 + Boolean app_is_show_integral = SharedPreferencesHelper.getInstance(context).getBoolValue("APP_IS_SHOW_INTEGRAL");
  16 + if (app_is_show_integral) {
  17 + HelperUtil.goToCoinRainAction(context, taskId, contentId, addtype,false);
  18 +// CoinRainAction.code(context, UserService.getUid(context), taskId, contentId, addtype,false);
  19 + }
  20 + }
  21 +
  22 + /**
  23 + * 打开举报的h5页面
  24 + *
  25 + * @param context
  26 + * @param url
  27 + */
  28 + public static void startReportActivity(Context context, String url) {
  29 + ARouter.getInstance().build("/web/WebViewActivity")
  30 + .withString("rUrl", url)
  31 + .navigation(context);
  32 + }
  33 +
  34 +
  35 +}
... ...
moudle_user/src/main/java/com/cnlive/share/data/FullVideoShareItemData.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/data/FullVideoShareItemData.java
  1 +package com.cnlive.share.data;
  2 +
  3 +public class FullVideoShareItemData {
  4 +
  5 + public static final int TYPE_WEIXIN = 0X1001;
  6 + public static final int TYPE_PENG_YOU_QUAN = 0X1002;
  7 + public static final int TYPE_WJJ = 0X1003;
  8 + public static final int TYPE_WJJ_QUAN = 0X1004;
  9 + public static final int TYPE_QQ = 0X1005;
  10 + public static final int TYPE_BROWSER = 0X1006;
  11 + public static final int TYPE_WEIBO = 0X1007;
  12 +
  13 + private int iconId;
  14 + private String title;
  15 + private int type;
  16 +
  17 + public FullVideoShareItemData(int iconId, String title, int type) {
  18 + this.iconId = iconId;
  19 + this.title = title;
  20 + this.type = type;
  21 + }
  22 +
  23 + public int getIconId() {
  24 + return iconId;
  25 + }
  26 +
  27 + public void setIconId(int iconId) {
  28 + this.iconId = iconId;
  29 + }
  30 +
  31 + public String getTitle() {
  32 + return title;
  33 + }
  34 +
  35 + public void setTitle(String title) {
  36 + this.title = title;
  37 + }
  38 +
  39 + public int getType() {
  40 + return type;
  41 + }
  42 +
  43 + public void setType(int type) {
  44 + this.type = type;
  45 + }
  46 +}
... ...
moudle_user/src/main/java/com/cnlive/share/data/IconInfo.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/data/IconInfo.java
  1 +package com.cnlive.share.data;
  2 +
  3 +/**
  4 + * Created by Lynn on 2018/8/23.
  5 + */
  6 +
  7 +public class IconInfo {
  8 + public static final String WJJ_FRIEND = "wjj_friend";//网家家好友
  9 + public static final String WJJ_CIRCLE = "wjj_circle";//网家家生活圈
  10 + public static final String WECHAT_FRIEND = "weChat_friend";//微信好友
  11 + public static final String WECHAT_CIRCLE = "weChat_circle";//微信朋友圈
  12 + public static final String QQ = "qq";//qq
  13 + public static final String WEBO = "webo";//微博
  14 + public static final String BROWSER = "browser";//浏览器打开
  15 + public static final String REPORT = "report"; //举报
  16 + public static final String DOWNLOAD_ALBUM_IMG = "down_album_img";
  17 + private String id;
  18 + private String title;
  19 + private int icon;
  20 +
  21 + public IconInfo(String id, String title, int icon) {
  22 + this.id = id;
  23 + this.title = title;
  24 + this.icon = icon;
  25 + }
  26 +
  27 + public String getId() {
  28 + return id;
  29 + }
  30 +
  31 + public void setId(String id) {
  32 + this.id = id;
  33 + }
  34 +
  35 + public String getTitle() {
  36 + return title;
  37 + }
  38 +
  39 + public void setTitle(String title) {
  40 + this.title = title;
  41 + }
  42 +
  43 + public int getIcon() {
  44 + return icon;
  45 + }
  46 +
  47 + public void setIcon(int icon) {
  48 + this.icon = icon;
  49 + }
  50 +}
... ...
moudle_user/src/main/java/com/cnlive/share/data/ShareInfo.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/data/ShareInfo.java
  1 +package com.cnlive.share.data;
  2 +
  3 +/**
  4 + * 创建:wukuiqing
  5 + * <p>
  6 + * 时间:2017/11/13
  7 + * <p>
  8 + * 描述:分享的 数据类型
  9 + */
  10 +
  11 +public class ShareInfo {
  12 + //分享的标题
  13 + private String title;
  14 + //分享的简介
  15 + private String content;
  16 + //分享的图片
  17 + private String imgurl;
  18 + private String siteUrl;
  19 + //分享的Url
  20 + private String url;
  21 + //分享的类型 (默认: share_article 积分用)
  22 + private String shareType;
  23 + //分享的内容id
  24 + private String contentId;
  25 + //兼容低版本的网页链接
  26 + private String webpageUrl;
  27 + //小程序原始id 示例(gh_d43f693ca31f);
  28 + private String userName;
  29 + //小程序页面路径 示例 ("/pages/media")
  30 + private String path;
  31 + //(int类型) 正式版:0,测试版:1,体验版:2
  32 + private int miniprogramType;
  33 + // 1:目击者 2:生活圈 3:H5 4:点播 5:直播
  34 +
  35 + //举报类型
  36 + private String reportType;
  37 + //是否展示投诉的页面
  38 + public boolean isReport;
  39 +
  40 + //是否是网家家生活圈内容的分享
  41 + private boolean isProcessWjjShare;
  42 +
  43 + //网家家分享区分外部内部时 内部用的url
  44 + private String wjjShareUrl;
  45 +
  46 +
  47 + public boolean isProcessWjjShare() {
  48 + return isProcessWjjShare;
  49 + }
  50 +
  51 + public void setProcessWjjShare(boolean processWjjShare) {
  52 + isProcessWjjShare = processWjjShare;
  53 + }
  54 +
  55 + public String getWjjShareUrl() {
  56 + return wjjShareUrl;
  57 + }
  58 +
  59 + public void setWjjShareUrl(String wjjShareUrl) {
  60 + this.wjjShareUrl = wjjShareUrl;
  61 + }
  62 +
  63 +
  64 +
  65 + public String getReportType() {
  66 + return reportType;
  67 + }
  68 +
  69 + public void setReportType(String reportType) {
  70 + this.reportType = reportType;
  71 + }
  72 +
  73 +
  74 + public String getWebpageUrl() {
  75 + return webpageUrl;
  76 + }
  77 +
  78 + public void setWebpageUrl(String webpageUrl) {
  79 + this.webpageUrl = webpageUrl;
  80 + }
  81 +
  82 + public String getUserName() {
  83 + return userName;
  84 + }
  85 +
  86 + public void setUserName(String userName) {
  87 + this.userName = userName;
  88 + }
  89 +
  90 + public String getPath() {
  91 + return path;
  92 + }
  93 +
  94 + public void setPath(String path) {
  95 + this.path = path;
  96 + }
  97 +
  98 + public int getMiniprogramType() {
  99 + return miniprogramType;
  100 + }
  101 +
  102 + public void setMiniprogramType(int miniprogramType) {
  103 + this.miniprogramType = miniprogramType;
  104 + }
  105 +
  106 +
  107 + public String getShareType() {
  108 + return shareType;
  109 + }
  110 +
  111 + public void setShareType(String shareType) {
  112 + if (shareType == null) {
  113 + shareType = "share_article";
  114 + }
  115 + this.shareType = shareType;
  116 + }
  117 +
  118 + public String getContentId() {
  119 + return contentId;
  120 + }
  121 +
  122 + public void setContentId(String contentId) {
  123 + if (contentId == null) {
  124 + contentId = "";
  125 + }
  126 + this.contentId = contentId;
  127 + }
  128 +
  129 + public String getTitle() {
  130 + return title;
  131 + }
  132 +
  133 + public void setTitle(String title) {
  134 + if (title != null && title.length() >= 200)
  135 + title = title.substring(0, 200);
  136 +
  137 + this.title = title;
  138 + }
  139 +
  140 + public String getContent() {
  141 + return content;
  142 + }
  143 +
  144 + public void setContent(String content) {
  145 + if (content != null && content.length() >= 200)
  146 + content = content.substring(0, 200);
  147 +
  148 + this.content = content;
  149 + }
  150 +
  151 + public String getImgurl() {
  152 + return imgurl;
  153 + }
  154 +
  155 + public void setImgurl(String imgurl) {
  156 + this.imgurl = imgurl;
  157 + }
  158 +
  159 + public String getSiteUrl() {
  160 + return siteUrl;
  161 + }
  162 +
  163 + public void setSiteUrl(String siteUrl) {
  164 + this.siteUrl = siteUrl;
  165 + }
  166 +
  167 + public String getUrl() {
  168 + return url;
  169 + }
  170 +
  171 + public void setUrl(String url) {
  172 + this.url = url;
  173 + }
  174 +}
... ...
moudle_user/src/main/java/com/cnlive/share/data/ShareIntegralTypeInfo.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/data/ShareIntegralTypeInfo.java
  1 +package com.cnlive.share.data;
  2 +
  3 +/**
  4 + * 作者: 吴奎庆
  5 + * <p>
  6 + * 时间: 2019/3/9
  7 + * <p>
  8 + * 简介: 分享
  9 + */
  10 +public class ShareIntegralTypeInfo {
  11 + public String getShareType() {
  12 + return shareType;
  13 + }
  14 +
  15 + public void setShareType(String shareType) {
  16 + this.shareType = shareType;
  17 + }
  18 +
  19 + public String getContentId() {
  20 + return contentId;
  21 + }
  22 +
  23 + public void setContentId(String contentId) {
  24 + this.contentId = contentId;
  25 + }
  26 +
  27 + private String shareType;
  28 + private String contentId;
  29 +}
... ...
moudle_user/src/main/java/com/cnlive/share/data/WeChatInfo.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/data/WeChatInfo.java
  1 +package com.cnlive.share.data;
  2 +
  3 +/**
  4 + * 作者: 吴奎庆
  5 + * <p>
  6 + * 时间: 2019/8/30
  7 + * <p>
  8 + * 简介:
  9 + */
  10 +
  11 +public class WeChatInfo {
  12 + private int errCode;
  13 +
  14 + private String openid;
  15 +
  16 + //普通用户性别,1为男性,2为女性
  17 + private int sex;
  18 +
  19 + private String nickname;
  20 +
  21 + private String headimgurl;
  22 +
  23 + private String province;
  24 +
  25 + private String language;
  26 +
  27 + private String country;
  28 +
  29 + private String unionid;
  30 +
  31 + public String getOpenid() {
  32 + return openid;
  33 + }
  34 +
  35 + public void setOpenid(String openid) {
  36 + this.openid = openid;
  37 + }
  38 +
  39 + public String getNickname() {
  40 + return nickname;
  41 + }
  42 +
  43 + public void setNickname(String nickname) {
  44 + this.nickname = nickname;
  45 + }
  46 +
  47 + public String getHeadimgurl() {
  48 + return headimgurl;
  49 + }
  50 +
  51 + public void setHeadimgurl(String headimgurl) {
  52 + this.headimgurl = headimgurl;
  53 + }
  54 +
  55 + public String getSex() {
  56 + return "" + sex;
  57 + }
  58 +
  59 + public String getProvince() {
  60 + return province;
  61 + }
  62 +
  63 + public void setProvince(String province) {
  64 + this.province = province;
  65 + }
  66 +
  67 + public String getLanguage() {
  68 + return language;
  69 + }
  70 +
  71 + public void setLanguage(String language) {
  72 + this.language = language;
  73 + }
  74 +
  75 + public String getCountry() {
  76 + return country;
  77 + }
  78 +
  79 + public void setCountry(String country) {
  80 + this.country = country;
  81 + }
  82 +
  83 + public String getUnionid() {
  84 + return unionid;
  85 + }
  86 +
  87 + public void setUnionid(String unionid) {
  88 + this.unionid = unionid;
  89 + }
  90 +
  91 + public void setSex(int sex) {
  92 + this.sex = sex;
  93 + }
  94 +
  95 + public int getErrCode() {
  96 + return errCode;
  97 + }
  98 +
  99 + public void setErrCode(int errCode) {
  100 + this.errCode = errCode;
  101 + }
  102 +
  103 + @Override
  104 + public String toString() {
  105 + return "WeChatInfo{" +
  106 + "errCode='" + errCode + '\'' +
  107 + ", openid='" + openid + '\'' +
  108 + ", sex=" + sex +
  109 + ", nickname='" + nickname + '\'' +
  110 + ", headimgurl='" + headimgurl + '\'' +
  111 + ", province='" + province + '\'' +
  112 + ", language='" + language + '\'' +
  113 + ", country='" + country + '\'' +
  114 + ", unionid='" + unionid + '\'' +
  115 + '}';
  116 + }
  117 +}
... ...
moudle_user/src/main/java/com/cnlive/share/observable/ShareClickObservable.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/observable/ShareClickObservable.java
  1 +package com.cnlive.share.observable;
  2 +
  3 +import java.util.Observable;
  4 +
  5 +/**
  6 + * 作者: 吴奎庆
  7 + * <p>
  8 + * 时间: 2019/9/25
  9 + * <p>
  10 + * 简介: 分享点击的观察者
  11 + */
  12 +public class ShareClickObservable extends Observable {
  13 +
  14 + private static ShareClickObservable instance;
  15 +
  16 + public static ShareClickObservable getInstance() {
  17 +
  18 + synchronized (ShareClickObservable.class) {
  19 + if (instance == null) {
  20 + instance = new ShareClickObservable();
  21 + }
  22 + }
  23 + return instance;
  24 + }
  25 +
  26 + /**
  27 + * @param type 1 网家家好友 2 网家家生活圈 3 微信好友 4 微信朋友圈 5 qq 6 微博 7 外部 8 举报
  28 + */
  29 + public void update(int type) {
  30 + setChanged();
  31 + notifyObservers(type);
  32 + }
  33 +
  34 +}
... ...
moudle_user/src/main/java/com/cnlive/share/observable/WechatLoginObservable.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/observable/WechatLoginObservable.java
  1 +package com.cnlive.share.observable;
  2 +
  3 +import com.cnlive.share.data.WeChatInfo;
  4 +
  5 +import java.util.Observable;
  6 +
  7 +/**
  8 + * 作者: 吴奎庆
  9 + * <p>
  10 + * 时间: 2019/9/10
  11 + * <p>
  12 + * 简介: 微信三方登陆的观察者
  13 + *
  14 + */
  15 +public class WechatLoginObservable extends Observable {
  16 + static WechatLoginObservable wechatLoginObservable;
  17 +
  18 + public static WechatLoginObservable getInstance() {
  19 + if (wechatLoginObservable == null)
  20 + synchronized (WechatLoginObservable.class) {
  21 + if (wechatLoginObservable == null)
  22 + wechatLoginObservable = new WechatLoginObservable();
  23 + }
  24 + return wechatLoginObservable;
  25 + }
  26 +
  27 +
  28 + public void update(WeChatInfo wechatInfo) {
  29 + setChanged();
  30 + notifyObservers(wechatInfo);
  31 + }
  32 +
  33 +}
... ...
moudle_user/src/main/java/com/cnlive/share/observable/WechatShareObservable.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/observable/WechatShareObservable.java
  1 +package com.cnlive.share.observable;
  2 +
  3 +import java.util.Observable;
  4 +
  5 +/**
  6 + * 作者: 吴奎庆
  7 + * <p>
  8 + * 时间: 2019/9/18
  9 + * <p>
  10 + * 简介: 微信分享完成
  11 + */
  12 +public class WechatShareObservable extends Observable {
  13 +
  14 + static WechatShareObservable wechatLoginObservable;
  15 +
  16 + public static WechatShareObservable getInstance() {
  17 + if (wechatLoginObservable == null)
  18 + synchronized (WechatLoginObservable.class) {
  19 + if (wechatLoginObservable == null)
  20 + wechatLoginObservable = new WechatShareObservable();
  21 + }
  22 + return wechatLoginObservable;
  23 + }
  24 +
  25 + /**
  26 + * 1 分享完成 2 取消 3 失败
  27 + * @param state
  28 + */
  29 + public void update(int state) {
  30 + setChanged();
  31 + notifyObservers(state);
  32 + }
  33 +
  34 +}
... ...
moudle_user/src/main/java/com/cnlive/share/util/DateTimeUtil.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/util/DateTimeUtil.java
  1 +package com.cnlive.share.util;
  2 +
  3 +import android.annotation.SuppressLint;
  4 +import android.util.Log;
  5 +
  6 +import java.text.DateFormat;
  7 +import java.text.ParseException;
  8 +import java.text.ParsePosition;
  9 +import java.text.SimpleDateFormat;
  10 +import java.util.Calendar;
  11 +import java.util.Date;
  12 +
  13 +/**
  14 + * 时间、日期工具类
  15 + * Created by fanji on 2017/7/19.
  16 + */
  17 +
  18 +public class DateTimeUtil {
  19 +
  20 + static SimpleDateFormat format;
  21 +
  22 + /**
  23 + * 日期格式:yyyy-MM-dd HH:mm:ss
  24 + **/
  25 + public static final String DF_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
  26 +
  27 + /**
  28 + * 日期格式:yyyy-MM-dd HH:mm
  29 + **/
  30 + public static final String DF_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
  31 + // yyyy-MM-dd-HH-mm
  32 +
  33 + /**
  34 + * 日期格式:yyyy-MM-dd
  35 + **/
  36 + public static final String DF_YYYY_MM_DD = "yyyy-MM-dd";
  37 +
  38 + /**
  39 + * 日期格式:HH:mm:ss
  40 + **/
  41 + public static final String DF_HH_MM_SS = "HH:mm:ss";
  42 +
  43 + /**
  44 + * 日期格式:HH:mm
  45 + **/
  46 + public static final String DF_HH_MM = "HH:mm";
  47 +
  48 + private final static long minute = 60 * 1000;// 1分钟
  49 + private final static long hour = 60 * minute;// 1小时
  50 + private final static long day = 24 * hour;// 1天
  51 + private final static long month = 31 * day;// 月
  52 + private final static long year = 12 * month;// 年
  53 +
  54 +
  55 + public DateTimeUtil() {
  56 +
  57 + }
  58 +
  59 + /**
  60 + * 将日期格式化成友好的字符串:几分钟前、几小时前、几天前、几月前、几年前、刚刚
  61 + *
  62 + * @param date
  63 + * @return
  64 + */
  65 + public static String formatFriendly(Date date) {
  66 + if (date == null) {
  67 + return null;
  68 + }
  69 + long diff = new Date().getTime() - date.getTime();
  70 + long r = 0;
  71 + if (diff > year) {
  72 + r = (diff / year);
  73 + return r + "年前";
  74 + }
  75 + if (diff > month) {
  76 + r = (diff / month);
  77 + return r + "个月前";
  78 + }
  79 + if (diff > day) {
  80 + r = (diff / day);
  81 + return r + "天前";
  82 + }
  83 + if (diff > hour) {
  84 + r = (diff / hour);
  85 + return r + "个小时前";
  86 + }
  87 + if (diff > minute) {
  88 + r = (diff / minute);
  89 + return r + "分钟前";
  90 + }
  91 + return "刚刚";
  92 + }
  93 +
  94 + /**
  95 + * 生活圈模仿微信时间展示样式
  96 + *
  97 + * @param date
  98 + * @return
  99 + */
  100 + public static String formatNewFriendly(Date date) {
  101 + if (date == null) {
  102 + return null;
  103 + }
  104 + long diff = new Date().getTime() - date.getTime();
  105 + long r = 0;
  106 + if (diff > day) {
  107 + r = (diff / day);
  108 + if (r==1){
  109 + return"昨天";
  110 + }else {
  111 + return r + "天前";
  112 + }
  113 + }
  114 + if (diff > hour) {
  115 + r = (diff / hour);
  116 + return r + "小时前";
  117 + }
  118 + if (diff > minute) {
  119 + r = (diff / minute);
  120 + return r + "分钟前";
  121 + }
  122 + return "1分钟前";
  123 + }
  124 +
  125 + /**
  126 + * 将日期以yyyy-MM-dd HH:mm:ss格式化
  127 + *
  128 + * @param dateL 日期
  129 + * @return
  130 + */
  131 + @SuppressLint("SimpleDateFormat")
  132 + public static String formatDateTime(long dateL) {
  133 + SimpleDateFormat sdf = new SimpleDateFormat(DF_YYYY_MM_DD_HH_MM_SS);
  134 + Date date = new Date(dateL);
  135 + return sdf.format(date);
  136 + }
  137 +
  138 + /**
  139 + * 将日期以yyyy-MM-dd HH:mm:ss格式化
  140 + *
  141 + * @param dateL 日期
  142 + * @return
  143 + */
  144 + @SuppressLint("SimpleDateFormat")
  145 + public static String formatDateTime(long dateL, String pattern) {
  146 + SimpleDateFormat sdf = new SimpleDateFormat(pattern);
  147 + Date date = new Date(dateL);
  148 + return sdf.format(date);
  149 + }
  150 +
  151 +
  152 + /**
  153 + * 将日期以yyyy-MM-dd HH:mm:ss格式化
  154 + *
  155 + * @param date 日期
  156 + * @param formater
  157 + * @return
  158 + */
  159 + @SuppressLint("SimpleDateFormat")
  160 + public static String formatDateTime(Date date, String formater) {
  161 + SimpleDateFormat sdf = new SimpleDateFormat(formater);
  162 + return sdf.format(date);
  163 + }
  164 +
  165 + /**
  166 + * 将日期字符串转成日期
  167 + *
  168 + * @param strDate 字符串日期
  169 + * @return java.util.date日期类型
  170 + */
  171 + @SuppressLint("SimpleDateFormat")
  172 + public static Date parseDate(String strDate) {
  173 + DateFormat dateFormat = new SimpleDateFormat(DF_YYYY_MM_DD_HH_MM_SS);
  174 + Date returnDate = null;
  175 + try {
  176 + returnDate = dateFormat.parse(strDate);
  177 + } catch (ParseException e) {
  178 +
  179 + }
  180 + return returnDate;
  181 +
  182 + }
  183 +
  184 + /**
  185 + * 获取系统当前日期
  186 + *
  187 + * @return
  188 + */
  189 + public static Date gainCurrentDate() {
  190 + return new Date();
  191 + }
  192 +
  193 + /**
  194 + * 验证日期是否比当前日期早
  195 + *
  196 + * @param target1 比较时间1
  197 + * @param target2 比较时间2
  198 + * @return true 则代表target1比target2晚或等于target2,否则比target2早
  199 + */
  200 + public static boolean compareDate(Date target1, Date target2) {
  201 + boolean flag = false;
  202 + try {
  203 + String target1DateTime = formatDateTime(target1, DF_YYYY_MM_DD_HH_MM_SS);
  204 + String target2DateTime = formatDateTime(target2, DF_YYYY_MM_DD_HH_MM_SS);
  205 + if (target1DateTime.compareTo(target2DateTime) <= 0) {
  206 + flag = true;
  207 + }
  208 + } catch (Exception e) {
  209 + System.out.println("比较失败,原因:" + e.getMessage());
  210 + }
  211 + return flag;
  212 + }
  213 +
  214 + /**
  215 + * 对日期进行增加操作
  216 + *
  217 + * @param target 需要进行运算的日期
  218 + * @param hour 小时
  219 + * @return
  220 + */
  221 + public static Date addDateTime(Date target, double hour) {
  222 + if (null == target || hour < 0) {
  223 + return target;
  224 + }
  225 +
  226 + return new Date(target.getTime() + (long) (hour * 60 * 60 * 1000));
  227 + }
  228 +
  229 + /**
  230 + * 对日期进行相减操作
  231 + *
  232 + * @param target 需要进行运算的日期
  233 + * @param hour 小时
  234 + * @return
  235 + */
  236 + public static Date subDateTime(Date target, double hour) {
  237 + if (null == target || hour < 0) {
  238 + return target;
  239 + }
  240 +
  241 + return new Date(target.getTime() - (long) (hour * 60 * 60 * 1000));
  242 + }
  243 +
  244 + /**
  245 + * 获取系统时间的方法:月/日 时:分:秒
  246 + */
  247 + public static String getFormateDate() {
  248 + Calendar calendar = Calendar.getInstance();
  249 + int month = (calendar.get(Calendar.MONTH) + 1);
  250 + int day = calendar.get(Calendar.DAY_OF_MONTH);
  251 + int hour = calendar.get(Calendar.HOUR_OF_DAY);
  252 + int minute = calendar.get(Calendar.MINUTE);
  253 + int second = calendar.get(Calendar.SECOND);
  254 +
  255 + String systemTime = (month < 10 ? "0" + month : month) + "/" + (day < 10 ? "0" + day : day) + " " + (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second);
  256 + return systemTime;
  257 + }
  258 +
  259 + /**
  260 + * 获取系统时间的方法:时:分:秒
  261 + */
  262 + public static String getHourAndMinute() {
  263 + Calendar calendar = Calendar.getInstance();
  264 + int hour = calendar.get(Calendar.HOUR_OF_DAY);
  265 + int minute = calendar.get(Calendar.MINUTE);
  266 + return (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute);
  267 + }
  268 +
  269 + /**
  270 + * 获取分钟
  271 + */
  272 + public static int getMinute() {
  273 + Calendar calendar = Calendar.getInstance();
  274 + int hour = calendar.get(Calendar.HOUR_OF_DAY);
  275 + int minute = calendar.get(Calendar.MINUTE);
  276 + return minute;
  277 + }
  278 +
  279 + /**
  280 + * 获取系统时间的方法:时
  281 + */
  282 + public static String getHour() {
  283 + Calendar calendar = Calendar.getInstance();
  284 + int hour = calendar.get(Calendar.HOUR_OF_DAY);
  285 + return ((hour < 10 ? "0" + hour : hour) + "");
  286 + }
  287 +
  288 + /**
  289 + * 将2017-07-10 00:00:00 换2017-07-10
  290 + *
  291 + * @param strDate
  292 + * @return
  293 + */
  294 + public static String strFormatStr(String strDate) {
  295 + if (strDate.equals("")) {
  296 + return "";
  297 + }
  298 + return dateToStr(strToDate(strDate));
  299 + }
  300 +
  301 + /**
  302 + * 2015-01-07 15:05:34
  303 + *
  304 + * @param strDate
  305 + * @return
  306 + */
  307 + @SuppressLint("SimpleDateFormat")
  308 + public static Date strToDateHHMMSS(String strDate) {
  309 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  310 + ParsePosition pos = new ParsePosition(0);
  311 + Date strtodate = formatter.parse(strDate, pos);
  312 + return strtodate;
  313 + }
  314 +
  315 + /**
  316 + * 2015-01-07 15:05
  317 + *
  318 + * @param strDate
  319 + * @return
  320 + */
  321 + @SuppressLint("SimpleDateFormat")
  322 + public static Date strToDateHHMM(String strDate) {
  323 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  324 + ParsePosition pos = new ParsePosition(0);
  325 + Date strtodate = formatter.parse(strDate, pos);
  326 + return strtodate;
  327 + }
  328 +
  329 + /**
  330 + * 2015-01-07
  331 + *
  332 + * @param strDate
  333 + * @return
  334 + */
  335 + @SuppressLint("SimpleDateFormat")
  336 + public static Date strToDate(String strDate) {
  337 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  338 + ParsePosition pos = new ParsePosition(0);
  339 + Date strtodate = formatter.parse(strDate, pos);
  340 + return strtodate;
  341 + }
  342 +
  343 + /**
  344 + * 2015.01.07
  345 + *
  346 + * @param strDate
  347 + * @return
  348 + */
  349 + @SuppressLint("SimpleDateFormat")
  350 + public static Date strToDateDorp(String strDate) {
  351 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd");
  352 + ParsePosition pos = new ParsePosition(0);
  353 + Date strtodate = formatter.parse(strDate, pos);
  354 + return strtodate;
  355 + }
  356 +
  357 + @SuppressLint("SimpleDateFormat")
  358 + public static String dateToStr(Date dateDate) {
  359 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  360 + String dateString = formatter.format(dateDate);
  361 + return dateString;
  362 + }
  363 +
  364 + /**
  365 + * 传入一个String转化为long
  366 + */
  367 + @SuppressLint("SimpleDateFormat")
  368 + public static Long stringParserLong(String param) throws ParseException {
  369 + format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  370 + return format.parse(param).getTime();
  371 + }
  372 +
  373 + /**
  374 + * 传入一个String转化为long
  375 + */
  376 + @SuppressLint("SimpleDateFormat")
  377 + public static Long stringParserLong1(String param) throws ParseException {
  378 + format = new SimpleDateFormat("yyyyMMddHHmmss");
  379 + return format.parse(param).getTime();
  380 + }
  381 +
  382 + /**
  383 + * 当前时间转换为long
  384 + */
  385 + @SuppressLint("SimpleDateFormat")
  386 + public static Long currentDateParserLong() throws ParseException {
  387 + format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  388 + return format.parse(format.format(Calendar.getInstance().getTime())).getTime();
  389 + }
  390 +
  391 + /**
  392 + * 当前时间 如: 2013-04-22 10:37:00
  393 + */
  394 + @SuppressLint("SimpleDateFormat")
  395 + public static String getCurrentDate() {
  396 + format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  397 + return format.format(Calendar.getInstance().getTime());
  398 + }
  399 +
  400 + /**
  401 + * 当前时间 如: 10:37
  402 + */
  403 + @SuppressLint("SimpleDateFormat")
  404 + public static String getCurrentDateHHMM() {
  405 + format = new SimpleDateFormat("HH:mm");
  406 + return format.format(Calendar.getInstance().getTime());
  407 + }
  408 +
  409 + /**
  410 + * 当前时间 如: 10:37
  411 + *
  412 + * @throws ParseException
  413 + */
  414 + @SuppressLint("SimpleDateFormat")
  415 + public static String getCurrentDateHHMMSS() {
  416 + format = new SimpleDateFormat("HH:mm:ss");
  417 + return format.format(Calendar.getInstance().getTime());
  418 + }
  419 +
  420 + /**
  421 + * 当前时间 如: 20130422
  422 + */
  423 + @SuppressLint("SimpleDateFormat")
  424 + public static String getCurrentDateString() {
  425 + format = new SimpleDateFormat("yyyyMMddHHmm");
  426 + return format.format(Calendar.getInstance().getTime());
  427 + }
  428 +
  429 + /**
  430 + * 当前时间 如: 2013-04-22
  431 + */
  432 + @SuppressLint("SimpleDateFormat")
  433 + public static String getCurrentTime() {
  434 + format = new SimpleDateFormat("yyyy-MM-dd");
  435 + return format.format(Calendar.getInstance().getTime());
  436 + }
  437 +
  438 + @SuppressLint("SimpleDateFormat")
  439 + public static String getSWAHDate() {
  440 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  441 + return format.format(Calendar.getInstance().getTime());
  442 + }
  443 +
  444 + @SuppressLint("SimpleDateFormat")
  445 + public static Long stringToLongD(String param) throws ParseException {
  446 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  447 + return format.parse(param.substring(0, param.length() - 4)).getTime();
  448 + }
  449 +
  450 + @SuppressLint("SimpleDateFormat")
  451 + public static Long stringToLong(String param) throws ParseException {
  452 + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm");
  453 + return format.parse(param).getTime();
  454 + }
  455 +
  456 + /**
  457 + * 获取两个日期之间的间隔天数
  458 + *
  459 + * @return
  460 + */
  461 + @SuppressLint("SimpleDateFormat")
  462 + public static int getGapCount(Date startDate, Date endDate) {
  463 + Calendar fromCalendar = Calendar.getInstance();
  464 + fromCalendar.setTime(startDate);
  465 + fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
  466 + fromCalendar.set(Calendar.MINUTE, 0);
  467 + fromCalendar.set(Calendar.SECOND, 0);
  468 + fromCalendar.set(Calendar.MILLISECOND, 0);
  469 +
  470 + Calendar toCalendar = Calendar.getInstance();
  471 + toCalendar.setTime(endDate);
  472 + toCalendar.set(Calendar.HOUR_OF_DAY, 0);
  473 + toCalendar.set(Calendar.MINUTE, 0);
  474 + toCalendar.set(Calendar.SECOND, 0);
  475 + toCalendar.set(Calendar.MILLISECOND, 0);
  476 +
  477 + return (int) ((toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (1000 * 60 * 60 * 24));
  478 + }
  479 +
  480 + /**
  481 + * 日期转换成Java字符串
  482 + *
  483 + * @param date
  484 + * @return str
  485 + */
  486 + @SuppressLint("SimpleDateFormat")
  487 + public static String DateToStr(Date date) {
  488 +
  489 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  490 + String str = format.format(date);
  491 + return str;
  492 + }
  493 +
  494 + /**
  495 + * 字符串转换成日期
  496 + *
  497 + * @param str
  498 + * @return date
  499 + */
  500 + @SuppressLint("SimpleDateFormat")
  501 + public static Date StrToDate(String str) {
  502 +
  503 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  504 + Date date = null;
  505 + try {
  506 + date = format.parse(str);
  507 + } catch (ParseException e) {
  508 + e.printStackTrace();
  509 + }
  510 + return date;
  511 + }
  512 +
  513 + /**
  514 + * 字符串转换成日期
  515 + *
  516 + * @param str
  517 + * @return date
  518 + */
  519 + @SuppressLint("SimpleDateFormat")
  520 + public static Date StrToDateDrop(String str) {
  521 +
  522 + SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
  523 + Date date = null;
  524 + try {
  525 + date = format.parse(str);
  526 + } catch (ParseException e) {
  527 + e.printStackTrace();
  528 + }
  529 + return date;
  530 + }
  531 +
  532 + /**
  533 + * @param time
  534 + * @return
  535 + */
  536 + @SuppressLint("SimpleDateFormat")
  537 + public static long getLongTime(String time) {
  538 + long ct = 0;
  539 + try {
  540 + format = new SimpleDateFormat("HH:mm:ss");
  541 + ct = format.parse(time).getTime();
  542 + } catch (Exception e) {
  543 + e.printStackTrace();
  544 + }
  545 + return ct;
  546 + }
  547 +
  548 + /**
  549 + * 判断两日期是否同一天
  550 + *
  551 + * @param str1
  552 + * @param str2
  553 + * @return
  554 + */
  555 + @SuppressLint("SimpleDateFormat")
  556 + public static boolean isSameDay(String str1, String str2) {
  557 +
  558 + Date day1 = null, day2 = null;
  559 + day1 = DateTimeUtil.strToDate(str1);
  560 + day2 = DateTimeUtil.strToDate(str2);
  561 +
  562 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  563 +
  564 + String ds1 = sdf.format(day1);
  565 +
  566 + String ds2 = sdf.format(day2);
  567 +
  568 + if (ds1.equals(ds2)) {
  569 + return true;
  570 + } else {
  571 + return false;
  572 + }
  573 +
  574 + }
  575 +
  576 + /**
  577 + * 获取两个日期的时间差
  578 + */
  579 + @SuppressLint("SimpleDateFormat")
  580 + public static int getTimeInterval(String date) {
  581 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  582 + int interval = 0;
  583 + try {
  584 + Date currentTime = new Date();// 获取现在的时间
  585 + Date beginTime = dateFormat.parse(date);
  586 + interval = (int) ((beginTime.getTime() - currentTime.getTime()) / (1000));// 时间差
  587 + // 单位秒
  588 + } catch (ParseException e) {
  589 + e.printStackTrace();
  590 + }
  591 + return interval;
  592 + }
  593 +
  594 + /**
  595 + * 获取两个日期的时间差 yyyy.MM.dd HH.mm.ss
  596 + */
  597 + @SuppressLint("SimpleDateFormat")
  598 + public static int getInterval(String bDate, String eDate) {
  599 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");
  600 + int interval = 0;
  601 + try {
  602 + Date currentTime = dateFormat.parse(eDate);// 获取现在的时间
  603 + Date beginTime = dateFormat.parse(bDate);
  604 + interval = (int) ((beginTime.getTime() - currentTime.getTime()));// 时间差
  605 + // 单位秒
  606 + } catch (ParseException e) {
  607 + e.printStackTrace();
  608 + }
  609 + return interval;
  610 + }
  611 +
  612 + /**
  613 + * 两个时间之差 求出一个long Time
  614 + *
  615 + * @param date
  616 + * @return
  617 + */
  618 + @SuppressLint("SimpleDateFormat")
  619 + public static long getTime(String date) {
  620 +
  621 + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  622 + long diff = 0;
  623 + try {
  624 + Date currentTime = new Date();// 获取现在的时间
  625 + Date getdate = df.parse(date);
  626 + diff = getdate.getTime() - currentTime.getTime();
  627 +
  628 + } catch (Exception e) {
  629 + }
  630 + return diff;
  631 + }
  632 +
  633 +
  634 + /**
  635 + * 日期转换成Java字符串
  636 + *
  637 + * @param DATE1
  638 + * @param DATE2
  639 + * @return
  640 + */
  641 + @SuppressLint("SimpleDateFormat")
  642 + public static int compare_date(String DATE1, String DATE2) {
  643 + DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  644 + try {
  645 + Date dt1 = df.parse(DATE1);
  646 + Date dt2 = df.parse(DATE2);
  647 + if (dt1.getTime() >= dt2.getTime()) {
  648 + return 1;
  649 + } else if (dt1.getTime() < dt2.getTime()) {
  650 + return -1;
  651 + } else {
  652 + return 0;
  653 + }
  654 + } catch (Exception exception) {
  655 + exception.printStackTrace();
  656 + }
  657 + return 0;
  658 + }
  659 +
  660 + /**
  661 + * 传入时间 算出星期几
  662 + *
  663 + * @param str 2014年1月3日
  664 + * @param days 1:2014年1月4日 类推
  665 + * @return
  666 + */
  667 + @SuppressLint("SimpleDateFormat")
  668 + public static String formatDate(String str, int days) {
  669 +
  670 + String dateStr = "";
  671 + try {
  672 + DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
  673 + Date date = df.parse(str);
  674 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  675 + Calendar c = Calendar.getInstance();
  676 + Date d = dateFormat.parse(dateFormat.format(date));
  677 + c.setTime(d);
  678 + c.add(Calendar.DAY_OF_MONTH, days);
  679 + switch (c.get(Calendar.DAY_OF_WEEK) - 1) {
  680 + case 0:
  681 + dateStr = "周日";
  682 + break;
  683 + case 1:
  684 + dateStr = "周一";
  685 + break;
  686 + case 2:
  687 + dateStr = "周二";
  688 + break;
  689 + case 3:
  690 + dateStr = "周三";
  691 + break;
  692 + case 4:
  693 + dateStr = "周四";
  694 + break;
  695 + case 5:
  696 + dateStr = "周五";
  697 + break;
  698 + case 6:
  699 + dateStr = "周六";
  700 + break;
  701 + default:
  702 + break;
  703 + }
  704 + } catch (Exception e) {
  705 + e.printStackTrace();
  706 + }
  707 +
  708 + return dateStr;
  709 + }
  710 +
  711 + /**
  712 + * 根据提供的年月日获取该月份的第一天
  713 + */
  714 + public static String getSupportBeginDayofMonth(int year, int monthOfYear) {
  715 + Calendar cal = Calendar.getInstance();
  716 + cal.set(Calendar.YEAR, year);
  717 + cal.set(Calendar.MONTH, monthOfYear - 1);
  718 + cal.set(Calendar.DAY_OF_MONTH, 1);
  719 + cal.set(Calendar.HOUR_OF_DAY, 0);
  720 + cal.set(Calendar.MINUTE, 0);
  721 + cal.set(Calendar.SECOND, 0);
  722 +
  723 + cal.set(Calendar.DAY_OF_MONTH, 1);
  724 + return cal.getTimeInMillis() + "";
  725 + }
  726 +
  727 + /**
  728 + * 根据提供的年月获取该月份的最后一天
  729 + *
  730 + * @return
  731 + */
  732 + public static String getSupportEndDayofMonth(int year, int monthOfYear) {
  733 + Calendar cal = Calendar.getInstance();
  734 + cal.set(Calendar.YEAR, year);
  735 + cal.set(Calendar.MONTH, monthOfYear);
  736 + cal.set(Calendar.DAY_OF_MONTH, 1);
  737 + cal.set(Calendar.HOUR_OF_DAY, 23);
  738 + cal.set(Calendar.MINUTE, 59);
  739 + cal.set(Calendar.SECOND, 59);
  740 +
  741 + cal.add(Calendar.DAY_OF_MONTH, -1);
  742 + return cal.getTimeInMillis() + "";
  743 + }
  744 +
  745 + public static String getYear(long millseconds) {
  746 +
  747 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  748 + Date date = new Date(millseconds);
  749 + return sdf.format(date).substring(0, 4);
  750 + }
  751 +
  752 + public static String getMonth(long millseconds) {
  753 +
  754 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  755 + Date date = new Date(millseconds);
  756 + return sdf.format(date).substring(4, 6);
  757 + }
  758 +
  759 + public static String formatFriendly(String timeStr) {
  760 + String time = "";
  761 + try {
  762 + time = DateTimeUtil.formatFriendly(new Date(Long.valueOf(timeStr) * 1000L));
  763 + } catch (Exception e) {
  764 + Log.e("FriendCircleMessage", "Time format exception.", e);
  765 + }
  766 + return time;
  767 + }
  768 +
  769 +}
... ...
moudle_user/src/main/java/com/cnlive/share/util/OkHttpUtils.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/util/OkHttpUtils.java
  1 +package com.cnlive.share.util;
  2 +
  3 +
  4 +
  5 +import android.os.Handler;
  6 +import android.os.Looper;
  7 +
  8 +import com.google.gson.Gson;
  9 +import com.google.gson.internal.$Gson$Types;
  10 +
  11 +import java.io.IOException;
  12 +import java.lang.reflect.ParameterizedType;
  13 +import java.lang.reflect.Type;
  14 +import java.util.List;
  15 +import java.util.concurrent.TimeUnit;
  16 +
  17 +import okhttp3.Call;
  18 +import okhttp3.Callback;
  19 +import okhttp3.FormBody;
  20 +import okhttp3.OkHttpClient;
  21 +import okhttp3.Request;
  22 +import okhttp3.RequestBody;
  23 +import okhttp3.Response;
  24 +
  25 +/**
  26 + *
  27 + */
  28 +public class OkHttpUtils {
  29 +
  30 + private static final String TAG = "OkHttpUtils";
  31 +
  32 + private static OkHttpUtils mInstance;
  33 + private OkHttpClient mOkHttpClient;
  34 + private Handler mDelivery;
  35 + private Gson mGson;
  36 +
  37 + private OkHttpUtils() {
  38 + mOkHttpClient = new OkHttpClient.Builder()
  39 + .connectTimeout(10, TimeUnit.SECONDS)
  40 + .writeTimeout(10, TimeUnit.SECONDS)
  41 + .readTimeout(30, TimeUnit.SECONDS)
  42 + .build();
  43 + mGson = new Gson();
  44 + mDelivery = new Handler(Looper.getMainLooper());
  45 + }
  46 +
  47 + private synchronized static OkHttpUtils getmInstance() {
  48 + if (mInstance == null) {
  49 + mInstance = new OkHttpUtils();
  50 + }
  51 + return mInstance;
  52 + }
  53 +
  54 + private void getRequest(String url, final ResultCallback callback) {
  55 + final Request request = new Request.Builder().url(url).build();
  56 + deliveryResult(callback, request);
  57 + }
  58 +
  59 + private void postRequest(String url, final ResultCallback callback, List<Param> params) {
  60 + Request request = buildPostRequest(url, params);
  61 + deliveryResult(callback, request);
  62 + }
  63 +
  64 + /**
  65 + * 处理结果
  66 + * @param callback
  67 + * @param request
  68 + */
  69 + private void deliveryResult(final ResultCallback callback, Request request) {
  70 +
  71 + mOkHttpClient.newCall(request).enqueue(new Callback() {
  72 + @Override
  73 + public void onFailure(Call call, IOException e) {
  74 + sendFailCallback(callback, e);
  75 + }
  76 +
  77 + @Override
  78 + public void onResponse(Call call, Response response) throws IOException {
  79 + try {
  80 + String str = response.body().string();
  81 + if (callback.mType == String.class) {
  82 + /**
  83 + * 返回字符串
  84 + */
  85 + sendSuccessCallBack(callback, str);
  86 + } else {
  87 + /**
  88 + * 这里处理解析返回对象
  89 + */
  90 + Object object = mGson.fromJson(str, callback.mType);
  91 + sendSuccessCallBack(callback, object);
  92 +
  93 + }
  94 + } catch (final Exception e) {
  95 +// LogUtils.e(TAG, "convert json failure", e);
  96 + sendFailCallback(callback, e);
  97 + }
  98 + }
  99 + });
  100 + }
  101 +
  102 + private void sendFailCallback(final ResultCallback callback, final Exception e) {
  103 + mDelivery.post(new Runnable() {
  104 + @Override
  105 + public void run() {
  106 + if (callback != null) {
  107 + callback.onFailure(e);
  108 + }
  109 + }
  110 + });
  111 + }
  112 +
  113 + private void sendSuccessCallBack(final ResultCallback callback, final Object obj) {
  114 + mDelivery.post(new Runnable() {
  115 + @Override
  116 + public void run() {
  117 + if (callback != null) {
  118 + callback.onSuccess(obj);
  119 + }
  120 + }
  121 + });
  122 + }
  123 +
  124 + private Request buildPostRequest(String url, List<Param> params) {
  125 + FormBody.Builder builder= new FormBody.Builder();
  126 + for (Param param : params) {
  127 + builder.add(param.key, param.value);
  128 + }
  129 + RequestBody requestBody = builder.build();
  130 + return new Request.Builder().url(url).post(requestBody).build();
  131 + }
  132 +
  133 +
  134 + /**********************对外接口************************/
  135 +
  136 + /**
  137 + * get请求
  138 + * @param url 请求url
  139 + * @param callback 请求回调
  140 + */
  141 + public static void get(String url, ResultCallback callback) {
  142 + getmInstance().getRequest(url, callback);
  143 + }
  144 +
  145 + /**
  146 + * post请求
  147 + * @param url 请求url
  148 + * @param callback 请求回调
  149 + * @param params 请求参数
  150 + */
  151 + public static void post(String url, final ResultCallback callback, List<Param> params) {
  152 + getmInstance().postRequest(url, callback, params);
  153 + }
  154 +
  155 + /**
  156 + * http请求回调类,回调方法在UI线程中执行
  157 + * @param <T>
  158 + */
  159 + public static abstract class ResultCallback<T> {
  160 +
  161 + Type mType;
  162 +
  163 + public ResultCallback(){
  164 + mType = getSuperclassTypeParameter(getClass());
  165 + }
  166 +
  167 + static Type getSuperclassTypeParameter(Class<?> subclass) {
  168 + Type superclass = subclass.getGenericSuperclass();
  169 + if (superclass instanceof Class) {
  170 + throw new RuntimeException("Missing type parameter.");
  171 + }
  172 + ParameterizedType parameterized = (ParameterizedType) superclass;
  173 + return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
  174 + }
  175 +
  176 + /**
  177 + * 请求成功回调
  178 + * @param response
  179 + */
  180 + public abstract void onSuccess(T response);
  181 +
  182 + /**
  183 + * 请求失败回调
  184 + * @param e
  185 + */
  186 + public abstract void onFailure(Exception e);
  187 + }
  188 +
  189 + /**
  190 + * post请求参数类 这里可以根据项目抽取成泛型
  191 + */
  192 + public static class Param {
  193 +
  194 + String key;
  195 + String value;
  196 +
  197 + public Param() {
  198 + }
  199 +
  200 + public Param(String key, String value) {
  201 + this.key = key;
  202 + this.value = value;
  203 + }
  204 +
  205 + }
  206 +
  207 +
  208 +}
0 209 \ No newline at end of file
... ...
moudle_user/src/main/java/com/cnlive/share/util/Util.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/share/util/Util.java
  1 +package com.cnlive.share.util;
  2 +
  3 +/**
  4 + * 作者: 吴奎庆
  5 + * <p>
  6 + * 时间: 2018/8/22
  7 + * <p>
  8 + * 简介:
  9 + */
  10 +
  11 +
  12 +import android.content.Context;
  13 +import android.content.Intent;
  14 +import android.content.pm.PackageInfo;
  15 +import android.content.pm.PackageManager;
  16 +import android.graphics.Bitmap;
  17 +import android.graphics.Bitmap.CompressFormat;
  18 +import android.graphics.Canvas;
  19 +import android.graphics.Rect;
  20 +import android.net.Uri;
  21 +import android.text.TextUtils;
  22 +
  23 +import com.cnlive.libs.base.application.AppConfig;
  24 +import com.cnlive.libs.data.network.util.UriUtil;
  25 +import com.cnlive.strike.moudle_user.BuildConfig;
  26 +import com.cnlive.strike.user.auth.UserService;
  27 +import com.sina.weibo.sdk.WbSdk;
  28 +import com.sina.weibo.sdk.auth.AuthInfo;
  29 +import com.tencent.mm.opensdk.openapi.IWXAPI;
  30 +import com.tencent.mm.opensdk.openapi.WXAPIFactory;
  31 +
  32 +import java.io.ByteArrayOutputStream;
  33 +import java.io.InputStream;
  34 +import java.util.List;
  35 +
  36 +
  37 +public class Util {
  38 +
  39 + public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
  40 +
  41 + if (bmp == null) return null;
  42 + int i;
  43 + int j;
  44 + if (bmp.getHeight() > bmp.getWidth()) {
  45 + i = bmp.getWidth();
  46 + j = bmp.getWidth();
  47 + } else {
  48 + i = bmp.getHeight();
  49 + j = bmp.getHeight();
  50 + }
  51 +
  52 + Bitmap localBitmap = Bitmap.createBitmap(i, j, Bitmap.Config.RGB_565);
  53 + Canvas localCanvas = new Canvas(localBitmap);
  54 +
  55 + while (true) {
  56 + localCanvas.drawBitmap(bmp, new Rect(0, 0, i, j), new Rect(0, 0, i, j), null);
  57 + if (needRecycle)
  58 + bmp.recycle();
  59 + ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream();
  60 + localBitmap.compress(CompressFormat.JPEG, 100,
  61 + localByteArrayOutputStream);
  62 + localBitmap.recycle();
  63 + byte[] arrayOfByte = localByteArrayOutputStream.toByteArray();
  64 + try {
  65 + localByteArrayOutputStream.close();
  66 + return arrayOfByte;
  67 + } catch (Exception e) {
  68 + // F.out(e);
  69 + }
  70 + i = bmp.getHeight();
  71 + j = bmp.getHeight();
  72 + }
  73 + }
  74 +
  75 + public static byte[] inputStreamToByte(InputStream is) {
  76 + try {
  77 + ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
  78 + int ch;
  79 + while ((ch = is.read()) != -1) {
  80 + bytestream.write(ch);
  81 + }
  82 + byte imgdata[] = bytestream.toByteArray();
  83 + bytestream.close();
  84 + return imgdata;
  85 + } catch (Exception e) {
  86 + e.printStackTrace();
  87 + }
  88 +
  89 + return null;
  90 + }
  91 +
  92 + /**
  93 + * 判断是否安装了微信客户端
  94 + */
  95 + public static boolean isWXAppInstalledAndSupported(Context context) {
  96 + IWXAPI api = WXAPIFactory.createWXAPI(context, BuildConfig.WECHAT_SHARE);
  97 + return api.isWXAppInstalled();
  98 + }
  99 +
  100 +
  101 + public static boolean isWeixinAvilible(Context context) {
  102 + PackageManager packageManager = context.getPackageManager();// 获取packagemanager
  103 + List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息
  104 + if (pinfo != null) {
  105 + for (int i = 0; i < pinfo.size(); i++) {
  106 + String pn = pinfo.get(i).packageName;
  107 + if (pn.equals("com.tencent.mm")) {
  108 + return true;
  109 + }
  110 + }
  111 + }
  112 + return false;
  113 + }
  114 +
  115 + /**
  116 + * 判断qq是否可用
  117 + *
  118 + * @param context
  119 + * @return
  120 + */
  121 + public static boolean isQQClientAvailable(Context context) {
  122 + final PackageManager packageManager = context.getPackageManager();
  123 + List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
  124 + if (pinfo != null) {
  125 + for (int i = 0; i < pinfo.size(); i++) {
  126 + String pn = pinfo.get(i).packageName;
  127 + if (pn.equals("com.tencent.mobileqq")) {
  128 + return true;
  129 + }
  130 + }
  131 + }
  132 + return false;
  133 + }
  134 +
  135 +
  136 + //Scheme 检测QQ分享
  137 + public static boolean checkQQ(Context context) {
  138 + if (context == null || context.getPackageManager() == null) return false;
  139 + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mqqapi://share"));
  140 + return !context.getPackageManager().queryIntentActivities(intent, 0).isEmpty();
  141 + }
  142 +
  143 + public static boolean checkWechat(Context context) {
  144 + if (context == null || context.getPackageManager() == null) return false;
  145 + if (Util.isWXAppInstalledAndSupported(context)) return true;
  146 + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("weixin://"));
  147 + return !context.getPackageManager().queryIntentActivities(intent, 0).isEmpty();
  148 + }
  149 +
  150 +
  151 + /**
  152 + * 处理分享地址
  153 + *
  154 + * @param shareInfoUrl
  155 + * @param mContext
  156 + */
  157 + public static String processUrlData(String shareInfoUrl, Context mContext, boolean isToWjj) {
  158 + if (shareInfoUrl.contains("http://wjjh5.cnlive.com") || shareInfoUrl.contains("http://wjjh5test.cnlive.com")) {
  159 + Uri oldUri = Uri.parse(shareInfoUrl);
  160 + //判断分享地址中是否有参数,如果没有则先拼接问号
  161 + if (oldUri.getQueryParameterNames().size() <= 0) {
  162 + if (!shareInfoUrl.contains("?"))
  163 + shareInfoUrl = shareInfoUrl.concat("?");
  164 + }
  165 + if (!shareInfoUrl.contains("?sid=") && !shareInfoUrl.contains("&sid=")) {
  166 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  167 + pageUrl.append(oldUri.getQueryParameterNames().size() <= 0 ? "sid=" : "&sid=").append(UserService.getUid(mContext));
  168 + shareInfoUrl = pageUrl.toString();
  169 + }
  170 +
  171 + if (!shareInfoUrl.contains("?shareSid=") && !shareInfoUrl.contains("&shareSid=")) {
  172 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  173 + pageUrl.append("&shareSid=").append(UserService.getUid(mContext));
  174 + shareInfoUrl = pageUrl.toString();
  175 + }
  176 + if (!shareInfoUrl.contains("?isApp=") && !shareInfoUrl.contains("&isApp=")) {
  177 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  178 + pageUrl.append("&isApp=").append(isToWjj);
  179 + shareInfoUrl = pageUrl.toString();
  180 + }
  181 +
  182 +
  183 + if (!shareInfoUrl.contains("?ver=") && !shareInfoUrl.contains("&ver=")) {
  184 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  185 + pageUrl.append("&ver=").append(AppConfig.getAppVersion());
  186 + shareInfoUrl = pageUrl.toString();
  187 + }
  188 +
  189 + if (!shareInfoUrl.contains("?plat=") && !shareInfoUrl.contains("&plat=")) {
  190 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  191 + pageUrl.append("&plat=").append("a");
  192 + shareInfoUrl = pageUrl.toString();
  193 + }
  194 +
  195 + if (!shareInfoUrl.contains("?wjjFrom=") && !shareInfoUrl.contains("&wjjFrom=")) {
  196 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  197 + pageUrl.append("&wjjFrom=").append(AppConfig.getAppChannel());
  198 + shareInfoUrl = pageUrl.toString();
  199 + }
  200 + if (!shareInfoUrl.contains("?appId=") && !shareInfoUrl.contains("&appId=")) {
  201 + StringBuilder pageUrl = new StringBuilder(shareInfoUrl);
  202 + pageUrl.append("&appId=").append(AppConfig.getAppId());
  203 + shareInfoUrl = pageUrl.toString();
  204 + }
  205 + Uri uri = Uri.parse(shareInfoUrl);
  206 +
  207 + String[] urls = shareInfoUrl.split("\\?");
  208 + String url = urls[0];
  209 + StringBuilder pageUrl = new StringBuilder(url);
  210 + pageUrl.append("?");
  211 + for (String key : uri.getQueryParameterNames()) {
  212 + if ("sid".equals(key)) {
  213 + pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(UserService.getUid(mContext)) ? "" : UserService.getUid(mContext))).append("&");
  214 + } else if ("ver".equals(key)) {
  215 + pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(AppConfig.getAppVersion()) ? "" : AppConfig.getAppVersion())).append("&");
  216 + } else if ("plat".equals(key)) {
  217 + pageUrl.append(key).append("=").append(Uri.encode("a")).append("&");
  218 + } else if ("shareSid".equals(key)) {
  219 + pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(UserService.getUid(mContext)) ? "" : UserService.getUid(mContext))).append("&");
  220 + } else if ("isApp".equals(key)) {
  221 + pageUrl.append(key).append("=").append(isToWjj).append("&");
  222 + } else if ("wjjFrom".equals(key)) {
  223 + pageUrl.append(key).append("=").append(Uri.encode(AppConfig.getAppChannel())).append("&");
  224 + } else if ("appId".equals(key)) {
  225 + pageUrl.append(key).append("=").append(Uri.encode(AppConfig.getAppId())).append("&");
  226 + } else {
  227 + String value = UriUtil.getQueryParameterWithDecode(uri.getEncodedQuery(), key);
  228 + pageUrl.append(key).append("=").append(Uri.encode(TextUtils.isEmpty(value) ? "" : value)).append("&");
  229 + }
  230 + }
  231 + pageUrl = deleteCharOfEnd(pageUrl, "&", true);
  232 + shareInfoUrl = pageUrl.toString();
  233 +
  234 +
  235 + }
  236 + return shareInfoUrl;
  237 + }
  238 +
  239 + public static StringBuilder deleteCharOfEnd(StringBuilder strBud, String item, boolean asLast) {
  240 + if (strBud == null) return null;
  241 + int index = asLast ? strBud.lastIndexOf(item) : strBud.indexOf(item);
  242 + if (index == strBud.length() - 1) strBud.deleteCharAt(index);
  243 + return strBud;
  244 + }
  245 +
  246 + public static String buildTransaction(final String type) {
  247 + return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
  248 + }
  249 +
  250 + public static boolean isNetUrl(String url) {
  251 +
  252 + if (TextUtils.isEmpty(url)) return false;
  253 +
  254 + if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("rtsp:") || url.startsWith("ftp:")) {
  255 + return true;
  256 + } else {
  257 + return false;
  258 + }
  259 +// String UrlEndAppendNextChars = "(http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:;_/=<>]*)?";
  260 +//
  261 +// // 邮箱验证规则
  262 +// // 编译正则表达式
  263 +//
  264 +// Pattern pattern = Pattern.compile(UrlEndAppendNextChars);
  265 +// // 忽略大小写的写法
  266 +// // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
  267 +// Matcher matcher = pattern.matcher(url);
  268 +// // 字符串是否与正则表达式相匹配
  269 +// boolean rs = matcher.matches();
  270 +// return Patterns.WEB_URL.matcher(url).matches();
  271 + }
  272 +
  273 + public static boolean isWeiboInstallAndInit(Context context) {
  274 + if (context == null || context.getPackageManager() == null) return false;
  275 + if (!WbSdk.isWbInstall(context)) return false;
  276 + if (!Util.initWeibo(context)) return false;
  277 + return true;
  278 + }
  279 +
  280 + public static boolean initWeibo(Context context) {
  281 + try {
  282 + AuthInfo info = new AuthInfo(context, "3884700821",
  283 + "http://wjjh5.cnlive.com/apkdownload.php",
  284 + "email,direct_messages_read,direct_messages_write,"
  285 + + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
  286 + + "follow_app_official_microblog," + "invitation_write");
  287 + WbSdk.install(context, info);
  288 + WbSdk.checkInit();
  289 + return true;
  290 + } catch (Exception ignored) {
  291 + }
  292 + return false;
  293 + }
  294 +
  295 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiBaseRequest.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiBaseRequest.java
  1 +package com.cnlive.strike.data.network.api;
  2 +
  3 +import android.content.Context;
  4 +import android.util.Log;
  5 +
  6 +import com.cnlive.libs.base.application.AppConfig;
  7 +import com.cnlive.libs.base.logic.callback.DataCallback;
  8 +import com.cnlive.strike.data.network.model.BaseInfo;
  9 +import com.cnlive.libs.data.network.ApiBuild;
  10 +import com.cnlive.libs.data.network.Subscriber;
  11 +import com.cnlive.libs.data.network.interceptor.DESEncryptInterceptor;
  12 +import com.cnlive.libs.data.network.interceptor.DefaultEncryptInterceptor;
  13 +import com.cnlive.libs.data.network.interceptor.NetPPEncryptInterceptor;
  14 +import com.cnlive.libs.data.network.interceptor.NetPPPayEncryptInterceptor;
  15 +import com.cnlive.libs.data.network.interceptor.SignEncrypt2Interceptor;
  16 +import com.cnlive.libs.data.network.interceptor.SignEncryptInterceptor;
  17 +
  18 +import io.reactivex.android.schedulers.AndroidSchedulers;
  19 +import io.reactivex.disposables.Disposable;
  20 +import io.reactivex.schedulers.Schedulers;
  21 +import okhttp3.Interceptor;
  22 +import okhttp3.OkHttpClient;
  23 +import okhttp3.Request;
  24 +import okhttp3.Response;
  25 +import retrofit2.adapter.rxjava2.Result;
  26 +
  27 +import static com.cnlive.libs.base.logic.Config.SUCCESS;
  28 +
  29 +
  30 +/**
  31 + * Created by xiansong on 2017/9/8.
  32 + */
  33 +
  34 +public class ApiBaseRequest<Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo> {
  35 +
  36 + private static final int OKHTTP_KEEP_ALIVE_DURATION_SECONDS = 10;
  37 +
  38 + //网家家 接口域名
  39 + public static final String BASE_URL = "https://apiwjj.cnlive.com/";
  40 + //网家家 测试环境 接口域名
  41 + public static final String DEBUG_URL = "http://apiwjjtest.cnlive.com/";
  42 + //IM 接口域名
  43 + private static final String IM_URL = "https://wjjim.cnlive.com/";
  44 + //IM 测试环境 接口域名
  45 + public static final String IM_DEBUG_URL = "http://imtest.cnlive.com/";
  46 + //OPEN API 接口域名
  47 + public static final String OPEN_URL = "https://api.cnlive.com/";
  48 + //WJJ JSON
  49 + private static final String JSON_URL = "https://wjj.ys1.cnliveimg.com/";
  50 +
  51 + private static final String DEBUG_CMS_URL = "http://cmstest.cnlive.com:8768/";
  52 + // TODO: 2018/11/27 cms正式地址
  53 + private static final String CMS_URL = "http://cms.cnlive.com:8768/";
  54 +
  55 + public static <T> String baseEndpoint() {
  56 + return AppConfig.isDebug() ? DEBUG_URL : BASE_URL;
  57 + }
  58 +
  59 +
  60 + public static <T> String baseIMEndpoint() {
  61 + return AppConfig.isDebug() ? IM_DEBUG_URL : IM_URL;
  62 + }
  63 +
  64 + public static <T> String baseCMSEndpoint() {
  65 + return AppConfig.isDebug() ? DEBUG_CMS_URL : CMS_URL;
  66 + }
  67 +
  68 + private static <T> String serviceEndpoint(Class<T> clazz) {
  69 + if (clazz == ApiBaseServiceOpen.class) {
  70 + return OPEN_URL;
  71 + } else
  72 + return baseEndpoint();
  73 + }
  74 +
  75 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  76 + ApiBaseRequest<Observable, BaseData> observable(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  77 + return observable(clazz, false, api, null);
  78 + }
  79 +
  80 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  81 + ApiBaseRequest<Observable, BaseData> observable(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor interceptor) {
  82 + return observable(clazz, false, api, interceptor);
  83 + }
  84 +
  85 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  86 + ApiBaseRequest<Observable, BaseData> observable(Class<Service> clazz, boolean decode, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor interceptor) {
  87 + ApiBaseRequest<Observable, BaseData> request = new ApiBaseRequest<>();
  88 + ApiBuild<Service, Observable, BaseData> build = ApiBuild.service(clazz, api);
  89 + build.setEndpoint(serviceEndpoint(clazz));
  90 + if (interceptor != null) build.addInterceptor(interceptor);
  91 + request.observable = build.build(decode, OKHTTP_KEEP_ALIVE_DURATION_SECONDS);
  92 + return request;
  93 + }
  94 +
  95 + public static <Service> Service serviceNoSign(Class<Service> clazz) {
  96 + return service(clazz, (Interceptor) new DefaultEncryptInterceptor());
  97 + }
  98 +
  99 + public static <Service> Service service(Class<Service> clazz) {
  100 + return service(clazz, new SignEncryptInterceptor());
  101 + }
  102 +
  103 + public static <Service> Service service(Class<Service> clazz, boolean valueUrlencode, boolean responseUrldecode) {
  104 + return service(clazz, responseUrldecode, new SignEncryptInterceptor(valueUrlencode));
  105 + }
  106 +
  107 + public static <Service> Service serviceDES(Class<Service> clazz) {
  108 + return service(clazz, new DESEncryptInterceptor());
  109 + }
  110 +
  111 + public static <Service> Service serviceNetPP(Class<Service> clazz) {
  112 + return service(clazz, new NetPPEncryptInterceptor());
  113 + }
  114 +
  115 + public static <Service> Service serviceNetPPPay(Class<Service> clazz) {
  116 + return service(clazz, new NetPPPayEncryptInterceptor());
  117 + }
  118 +
  119 +
  120 + private static <Service> Service service(Class<Service> clazz, Interceptor... interceptor) {
  121 + return service(clazz, false, interceptor);
  122 + }
  123 +
  124 + private static <Service> Service service(Class<Service> clazz, boolean decode, Interceptor... interceptor) {
  125 + return ApiBuild.service(clazz, null)
  126 + .setEndpoint(serviceEndpoint(clazz))
  127 + .addInterceptor(interceptor)
  128 + .service(decode, OKHTTP_KEEP_ALIVE_DURATION_SECONDS);
  129 + }
  130 +
  131 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  132 + ApiBaseRequest<Observable, BaseData> serviceNoSign(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  133 + return service(clazz, api, new DefaultEncryptInterceptor());
  134 + }
  135 +
  136 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  137 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  138 + return service(clazz, api, new SignEncryptInterceptor());
  139 + }
  140 +
  141 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  142 + ApiBaseRequest<Observable, BaseData> serviceNewVersion(Class<Service> clazz, long connectTimeout, long readTimeout, ApiBuild.Api<Service, Observable, BaseData> api) {
  143 + return serviceNewVersion(clazz, false, api, connectTimeout, readTimeout, new SignEncryptInterceptor());
  144 + }
  145 +
  146 +
  147 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  148 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api, boolean valueUrlencode, boolean responseUrldecode) {
  149 + return service(clazz, responseUrldecode, api, new SignEncryptInterceptor(valueUrlencode));
  150 + }
  151 +
  152 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  153 + ApiBaseRequest<Observable, BaseData> serviceDES(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  154 + return service(clazz, api, new DESEncryptInterceptor());
  155 + }
  156 +
  157 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  158 + ApiBaseRequest<Observable, BaseData> service2encode(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  159 + return service(clazz, api, new SignEncrypt2Interceptor());
  160 + }
  161 +
  162 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  163 + ApiBaseRequest<Observable, BaseData> serviceNetPP(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  164 + return service(clazz, api, new NetPPEncryptInterceptor());
  165 + }
  166 +
  167 + public static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  168 + ApiBaseRequest<Observable, BaseData> serviceNetPPPay(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api) {
  169 + return service(clazz, api, new NetPPPayEncryptInterceptor());
  170 + }
  171 +
  172 + private static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  173 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor... interceptor) {
  174 + return service(clazz, false, api, interceptor);
  175 + }
  176 +
  177 + private static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  178 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, boolean decode, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor... interceptor) {
  179 +
  180 + ApiBaseRequest<Observable, BaseData> request = new ApiBaseRequest<>();
  181 +
  182 + request.observable = ApiBuild.service(clazz, api)
  183 + .setEndpoint(serviceEndpoint(clazz))
  184 + .addInterceptor(interceptor)
  185 + .build(decode, OKHTTP_KEEP_ALIVE_DURATION_SECONDS);
  186 +
  187 + return request;
  188 + }
  189 +
  190 +
  191 + private static <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  192 + ApiBaseRequest<Observable, BaseData> serviceNewVersion(Class<Service> clazz, boolean decode, ApiBuild.Api<Service, Observable, BaseData> api, long connectTimeout, long readTimeout, Interceptor... interceptor) {
  193 +
  194 + ApiBaseRequest<Observable, BaseData> request = new ApiBaseRequest<>();
  195 +
  196 + request.observable = ApiBuild.service(clazz, api)
  197 + .setEndpoint(serviceEndpoint(clazz))
  198 + .setConnectTimeout(connectTimeout)
  199 + .setReadTimeout(readTimeout)
  200 + .addInterceptor(interceptor)
  201 + .build(decode);
  202 +
  203 + return request;
  204 + }
  205 +
  206 + private Observable observable;
  207 +
  208 + private ApiBaseRequest() {
  209 + }
  210 +
  211 + public static <Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  212 + Disposable subscribe(Observable observable, Subscriber<BaseData> subscriber) {
  213 + return observable.take(1)
  214 + .subscribeOn(Schedulers.io())
  215 + .observeOn(AndroidSchedulers.mainThread())
  216 + .subscribe(subscriber.next, subscriber.error, subscriber.complete, subscriber.subscribe);
  217 + }
  218 +
  219 + public Disposable subscribe(Subscriber<BaseData> subscriber) {
  220 + return observable.take(1)
  221 + .subscribeOn(Schedulers.io())
  222 + .observeOn(AndroidSchedulers.mainThread())
  223 + .subscribe(subscriber.next, subscriber.error, subscriber.complete, subscriber.subscribe);
  224 + }
  225 +
  226 + public Disposable subscribe(Context context, DataCallback<BaseData> callback) {
  227 + Subscriber<BaseData> subscriber = new Subscriber<BaseData>(context) {
  228 + @Override
  229 + public void onCompleted(String s, String s1, BaseData data) {
  230 + if (callback == null) return;
  231 + callback.callback(SUCCESS, "", data);
  232 + }
  233 +
  234 + @Override
  235 + public void onError(String code, String message) {
  236 + if (callback == null) return;
  237 + int errorCode = -1;
  238 + try {
  239 + errorCode = Integer.valueOf(code);
  240 + } catch (Exception ignored) {
  241 + }
  242 +
  243 + Log.e("LynnTest read", code + " \n " + message);
  244 + callback.callback(errorCode, message, null);
  245 + }
  246 + };
  247 +
  248 + return observable.take(1)
  249 + .subscribeOn(Schedulers.io())
  250 + .observeOn(AndroidSchedulers.mainThread())
  251 + .subscribe(subscriber.next, subscriber.error, subscriber.complete, subscriber.subscribe);
  252 + }
  253 +
  254 + public static Disposable loadData(String url, DataCallback<String> callback) {
  255 + return io.reactivex.Observable
  256 + .just(url)
  257 + .map(s -> {
  258 + Response response = null;
  259 + String data = null;
  260 + try {
  261 + OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象
  262 + Request request = new Request.Builder().url(url).build();
  263 + response = client.newCall(request).execute();//得到Response 对
  264 + if (response.isSuccessful()) data = response.body().string();
  265 + } catch (Exception e) {
  266 + Log.e("Api", "", e);
  267 + }
  268 +
  269 + if (data != null) {
  270 +// Log.e("DemoView", "response.code()==" + response.code());
  271 +// Log.e("DemoView", "response.message()==" + response.message());
  272 +// Log.e("DemoView", "res==" + data);
  273 + //此时的代码执行在子线程,修改UI的操作请使用handler跳转到UI线程。
  274 + }
  275 + return data;
  276 + })
  277 + .subscribeOn(Schedulers.io())
  278 + .observeOn(AndroidSchedulers.mainThread())
  279 + .subscribe(s -> callback.callback(0, "", s));
  280 + }
  281 +
  282 + public interface SetUrl {
  283 + <T> BaseRequest getUrl(Class<T> clazz);
  284 +
  285 + class BaseRequest {
  286 + Class clazz;
  287 +
  288 + }
  289 + }
  290 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiBaseServiceOpen.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiBaseServiceOpen.java
  1 +package com.cnlive.strike.data.network.api;
  2 +
  3 +import com.cnlive.strike.data.network.model.BaseInfo;
  4 +import com.cnlive.strike.data.network.model.FaceData;
  5 +import com.cnlive.strike.data.network.model.TokenData;
  6 +import com.cnlive.strike.data.network.model.UserData;
  7 +
  8 +import java.util.List;
  9 +import java.util.Map;
  10 +
  11 +import io.reactivex.Observable;
  12 +import okhttp3.MultipartBody;
  13 +import okhttp3.RequestBody;
  14 +import retrofit2.adapter.rxjava2.Result;
  15 +import retrofit2.http.Multipart;
  16 +import retrofit2.http.POST;
  17 +import retrofit2.http.Part;
  18 +import retrofit2.http.PartMap;
  19 +import retrofit2.http.QueryMap;
  20 +
  21 +/**
  22 + * Created by xiansong on 2018/3/22.
  23 + */
  24 +
  25 +public interface ApiBaseServiceOpen {
  26 +
  27 +
  28 + /**
  29 + * 顶踩一条节目 0:踩 1:顶
  30 + *
  31 + * @param map
  32 + * @return
  33 + */
  34 + @POST("open/api2/ctServices/supportForHd/support")
  35 + Observable<Result<BaseInfo>> support(@QueryMap Map<String, String> map);
  36 +
  37 +
  38 + /**
  39 + * 快捷登录前发送验证码
  40 + *
  41 + * @param map
  42 + * @return
  43 + */
  44 + @POST("open/api2/user/sendVerifyCode")
  45 + Observable<Result<BaseInfo>> sendVerifyCodeBefQuickLogin(@QueryMap Map<String, String> map);
  46 +
  47 + /**
  48 + * 快捷登录
  49 + *
  50 + * @param map
  51 + * @return
  52 + */
  53 + @POST("open/api2/user/loginInQuickly")
  54 + Observable<Result<BaseInfo<UserData>>> quickLogin(@QueryMap Map<String, String> map);
  55 +
  56 + /**
  57 + * 登录
  58 + *
  59 + * @param map
  60 + * @return
  61 + */
  62 + @POST("open/api2/user/loginIn")
  63 + Observable<Result<BaseInfo<UserData>>> login(@QueryMap Map<String, String> map);
  64 +
  65 + /**
  66 + * 查询用户信息
  67 + *
  68 + * @param map
  69 + * @return
  70 + */
  71 + @POST("open/api2/user/readUserById")
  72 + Observable<Result<BaseInfo<UserData>>> queryUserInfo(@QueryMap Map<String, String> map);
  73 +
  74 + /**
  75 + * 更新用户附加信息
  76 + *
  77 + * @param map
  78 + * @return
  79 + */
  80 + @POST("open/api2/user/updateUserExtInfo")
  81 + Observable<Result<BaseInfo>> updateUserExtInfo(@QueryMap Map<String, String> map);
  82 +
  83 + /**
  84 + * 修改用户单项信息
  85 + *
  86 + * @param map
  87 + * @return
  88 + */
  89 + @POST("open/api2/user/updateUserById")
  90 + Observable<Result<BaseInfo>> modifyUserInfo(@QueryMap Map<String, String> map);
  91 +
  92 +
  93 + /**
  94 + * 注册或修改手机号前发手机验证码
  95 + *
  96 + * @param map
  97 + * @return
  98 + */
  99 + @POST("open/api2/user/sendVerifyCodeForUnRegistered")
  100 + Observable<Result<BaseInfo>> sendVerifyCodeForUnRegistered(@QueryMap Map<String, String> map);
  101 +
  102 + /**
  103 + * 更新手机号
  104 + *
  105 + * @param map
  106 + * @return
  107 + */
  108 + @POST("open/api2/user/updateMobileById")
  109 + Observable<Result<BaseInfo>> updateMobile(@QueryMap Map<String, String> map);
  110 +
  111 + /**
  112 + * 注册
  113 + *
  114 + * @param map
  115 + * @return
  116 + */
  117 + @POST("open/api2/user/register")
  118 + Observable<Result<BaseInfo<UserData>>> register(@QueryMap Map<String, String> map);
  119 +
  120 +
  121 + /**
  122 + * 获取access_token
  123 + *
  124 + * @param map
  125 + * @return
  126 + */
  127 + @POST("open/api2/token")
  128 + Observable<Result<BaseInfo<TokenData>>> accessToken(@QueryMap Map<String, String> map);
  129 +
  130 + /**
  131 + * 上传头像
  132 + *
  133 + * @param map
  134 + * @param params
  135 + * @return
  136 + */
  137 + @Multipart
  138 + @POST("open/api2/user/updateUserFaceById")
  139 + Observable<Result<BaseInfo<FaceData>>> updateUserFace(@PartMap Map<String, RequestBody> map,
  140 + @Part List<MultipartBody.Part> params);
  141 +
  142 +
  143 +
  144 + /**
  145 + * 音频播放鉴权接口
  146 + * @param map
  147 + * @return
  148 + */
  149 + @POST("open/api2/user/loginIn3rdForWJJ")
  150 + Observable<Result<BaseInfo<UserData>>> loginIn3rdForWJJ(@QueryMap Map<String, String> map);
  151 + /**
  152 + * 登陆
  153 + * @param map
  154 + * @return
  155 + */
  156 + @POST("open/api2/user/loginIn3rdAndMobileForWJJ")
  157 + Observable<Result<BaseInfo<UserData>>> loginIn3rdAndMobileForWJJ(@QueryMap Map<String, String> map);
  158 +
  159 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiBaseSubscriber.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiBaseSubscriber.java
  1 +package com.cnlive.strike.data.network.api;
  2 +
  3 +
  4 +import com.cnlive.libs.data.network.Subscriber;
  5 +
  6 +/**
  7 + * Created by xiansong on 2017/9/8.
  8 + */
  9 +
  10 +public class ApiBaseSubscriber {
  11 +
  12 + private static final String success_code = "0";
  13 + private static final String success_message = "数据加载成功";
  14 +
  15 + public static final Subscriber.Config subscriberBuild = Subscriber.newConfig()
  16 + .putInfo(Subscriber.Config.response_success, success_code, success_message) ;
  17 +
  18 + public static String getSuccessCode(){
  19 + return success_code;
  20 + }
  21 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiTest.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/api/ApiTest.java
  1 +package com.cnlive.strike.data.network.api;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import com.cnlive.libs.base.logic.callback.DataCallback;
  6 +import com.cnlive.libs.data.network.ApiBuild;
  7 +import com.cnlive.libs.data.network.Subscriber;
  8 +
  9 +import io.reactivex.Observable;
  10 +import io.reactivex.disposables.Disposable;
  11 +import okhttp3.Interceptor;
  12 +
  13 +public class ApiTest implements Test {
  14 + @Override
  15 + public String baseEndpoint() {
  16 + return null;
  17 + }
  18 +
  19 + @Override
  20 + public String baseIMEndpoint() {
  21 + return null;
  22 + }
  23 +
  24 + @Override
  25 + public String baseCMSEndpoint() {
  26 + return null;
  27 + }
  28 +
  29 + @Override
  30 + public String serviceEndpoint(Class clazz) {
  31 + return null;
  32 + }
  33 +
  34 + @Override
  35 + public ApiBaseRequest observable(Class clazz, ApiBuild.Api api) {
  36 + return null;
  37 + }
  38 +
  39 + @Override
  40 + public ApiBaseRequest observable(Class clazz, ApiBuild.Api api, Interceptor interceptor) {
  41 + return null;
  42 + }
  43 +
  44 + @Override
  45 + public ApiBaseRequest observable(Class clazz, boolean decode, ApiBuild.Api api, Interceptor interceptor) {
  46 + return null;
  47 + }
  48 +
  49 + @Override
  50 + public Object serviceNoSign(Class clazz) {
  51 + return null;
  52 + }
  53 +
  54 + @Override
  55 + public Object service(Class clazz) {
  56 + return null;
  57 + }
  58 +
  59 + @Override
  60 + public Object service(Class clazz, boolean valueUrlencode, boolean responseUrldecode) {
  61 + return null;
  62 + }
  63 +
  64 + @Override
  65 + public Object serviceDES(Class clazz) {
  66 + return null;
  67 + }
  68 +
  69 + @Override
  70 + public Object serviceNetPP(Class clazz) {
  71 + return null;
  72 + }
  73 +
  74 + @Override
  75 + public Object serviceNetPPPay(Class clazz) {
  76 + return null;
  77 + }
  78 +
  79 + @Override
  80 + public Object service(Class clazz, Interceptor... interceptor) {
  81 + return null;
  82 + }
  83 +
  84 + @Override
  85 + public Object service(Class clazz, boolean decode, Interceptor... interceptor) {
  86 + return null;
  87 + }
  88 +
  89 + @Override
  90 + public ApiBaseRequest serviceNoSign(Class clazz, ApiBuild.Api api) {
  91 + return null;
  92 + }
  93 +
  94 + @Override
  95 + public ApiBaseRequest service(Class clazz, ApiBuild.Api api) {
  96 + return null;
  97 + }
  98 +
  99 + @Override
  100 + public ApiBaseRequest serviceNewVersion(Class clazz, long connectTimeout, long readTimeout, ApiBuild.Api api) {
  101 + return null;
  102 + }
  103 +
  104 + @Override
  105 + public ApiBaseRequest service(Class clazz, ApiBuild.Api api, boolean valueUrlencode, boolean responseUrldecode) {
  106 + return null;
  107 + }
  108 +
  109 + @Override
  110 + public ApiBaseRequest serviceDES(Class clazz, ApiBuild.Api api) {
  111 + return null;
  112 + }
  113 +
  114 + @Override
  115 + public ApiBaseRequest service2encode(Class clazz, ApiBuild.Api api) {
  116 + return null;
  117 + }
  118 +
  119 + @Override
  120 + public ApiBaseRequest serviceNetPP(Class clazz, ApiBuild.Api api) {
  121 + return null;
  122 + }
  123 +
  124 + @Override
  125 + public ApiBaseRequest serviceNetPPPay(Class clazz, ApiBuild.Api api) {
  126 + return null;
  127 + }
  128 +
  129 + @Override
  130 + public ApiBaseRequest service(Class clazz, ApiBuild.Api api, Interceptor... interceptor) {
  131 + return null;
  132 + }
  133 +
  134 + @Override
  135 + public ApiBaseRequest service(Class clazz, boolean decode, ApiBuild.Api api, Interceptor... interceptor) {
  136 + return null;
  137 + }
  138 +
  139 + @Override
  140 + public ApiBaseRequest serviceNewVersion(Class clazz, boolean decode, ApiBuild.Api api, long connectTimeout, long readTimeout, Interceptor... interceptor) {
  141 + return null;
  142 + }
  143 +
  144 + @Override
  145 + public Disposable subscribe(Observable observable, Subscriber subscriber) {
  146 + return null;
  147 + }
  148 +
  149 + @Override
  150 + public Disposable subscribe(Subscriber subscriber) {
  151 + return null;
  152 + }
  153 +
  154 + @Override
  155 + public Disposable subscribe(Context context, DataCallback callback) {
  156 + return null;
  157 + }
  158 +
  159 + @Override
  160 + public Disposable loadData(String url, DataCallback callback) {
  161 + return null;
  162 + }
  163 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/api/Test.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/api/Test.java
  1 +package com.cnlive.strike.data.network.api;
  2 +
  3 +import android.content.Context;
  4 +
  5 +import com.cnlive.libs.base.logic.callback.DataCallback;
  6 +import com.cnlive.libs.data.network.ApiBuild;
  7 +import com.cnlive.libs.data.network.Subscriber;
  8 +import com.cnlive.strike.data.network.model.BaseInfo;
  9 +
  10 +import io.reactivex.disposables.Disposable;
  11 +import okhttp3.Interceptor;
  12 +import retrofit2.adapter.rxjava2.Result;
  13 +
  14 +public interface Test<Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo> {
  15 + public static final int OKHTTP_KEEP_ALIVE_DURATION_SECONDS = 10;
  16 +
  17 + //网家家 接口域名
  18 + public static final String BASE_URL = "https://apiwjj.cnlive.com/";
  19 + //网家家 测试环境 接口域名
  20 + public static final String DEBUG_URL = "http://apiwjjtest.cnlive.com/";
  21 + //IM 接口域名
  22 + public static final String IM_URL = "https://wjjim.cnlive.com/";
  23 + //IM 测试环境 接口域名
  24 + public static final String IM_DEBUG_URL = "http://imtest.cnlive.com/";
  25 + //OPEN API 接口域名
  26 + public static final String OPEN_URL = "https://api.cnlive.com/";
  27 + //WJJ JSON
  28 + public static final String JSON_URL = "https://wjj.ys1.cnliveimg.com/";
  29 +
  30 + public static final String DEBUG_CMS_URL = "http://cmstest.cnlive.com:8768/";
  31 + // TODO: 2018/11/27 cms正式地址
  32 + public static final String CMS_URL = "http://cms.cnlive.com:8768/";
  33 +
  34 + public <T> String baseEndpoint();
  35 +
  36 +
  37 + public <T> String baseIMEndpoint();
  38 +
  39 + public <T> String baseCMSEndpoint();
  40 +
  41 + public <T> String serviceEndpoint(Class<T> clazz);
  42 +
  43 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  44 + ApiBaseRequest<Observable, BaseData> observable(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  45 +
  46 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  47 + ApiBaseRequest<Observable, BaseData> observable(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor interceptor);
  48 +
  49 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  50 + ApiBaseRequest<Observable, BaseData> observable(Class<Service> clazz, boolean decode, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor interceptor);
  51 +
  52 + public <Service> Service serviceNoSign(Class<Service> clazz);
  53 +
  54 + public <Service> Service service(Class<Service> clazz);
  55 +
  56 + public <Service> Service service(Class<Service> clazz, boolean valueUrlencode, boolean responseUrldecode);
  57 +
  58 + public <Service> Service serviceDES(Class<Service> clazz);
  59 +
  60 + public <Service> Service serviceNetPP(Class<Service> clazz);
  61 +
  62 + public <Service> Service serviceNetPPPay(Class<Service> clazz);
  63 +
  64 +
  65 + public <Service> Service service(Class<Service> clazz, Interceptor... interceptor);
  66 +
  67 + public <Service> Service service(Class<Service> clazz, boolean decode, Interceptor... interceptor);
  68 +
  69 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  70 + ApiBaseRequest<Observable, BaseData> serviceNoSign(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  71 +
  72 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  73 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  74 +
  75 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  76 + ApiBaseRequest<Observable, BaseData> serviceNewVersion(Class<Service> clazz, long connectTimeout, long readTimeout, ApiBuild.Api<Service, Observable, BaseData> api);
  77 +
  78 +
  79 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  80 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api, boolean valueUrlencode, boolean responseUrldecode);
  81 +
  82 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  83 + ApiBaseRequest<Observable, BaseData> serviceDES(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  84 +
  85 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  86 + ApiBaseRequest<Observable, BaseData> service2encode(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  87 +
  88 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  89 + ApiBaseRequest<Observable, BaseData> serviceNetPP(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  90 +
  91 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  92 + ApiBaseRequest<Observable, BaseData> serviceNetPPPay(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api);
  93 +
  94 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  95 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor... interceptor);
  96 +
  97 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  98 + ApiBaseRequest<Observable, BaseData> service(Class<Service> clazz, boolean decode, ApiBuild.Api<Service, Observable, BaseData> api, Interceptor... interceptor);
  99 +
  100 +
  101 + public <Service, Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  102 + ApiBaseRequest<Observable, BaseData> serviceNewVersion(Class<Service> clazz, boolean decode, ApiBuild.Api<Service, Observable, BaseData> api, long connectTimeout, long readTimeout, Interceptor... interceptor);
  103 +
  104 +
  105 + public <Observable extends io.reactivex.Observable<Result<BaseData>>, BaseData extends BaseInfo>
  106 + Disposable subscribe(Observable observable, Subscriber<BaseData> subscriber);
  107 +
  108 + public Disposable subscribe(Subscriber<BaseData> subscriber);
  109 +
  110 + public Disposable subscribe(Context context, DataCallback<BaseData> callback);
  111 +
  112 +
  113 + public Disposable loadData(String url, DataCallback<String> callback);
  114 +
  115 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/model/BaseInfo.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/model/BaseInfo.java
  1 +package com.cnlive.strike.data.network.model;
  2 +
  3 +import com.cnlive.libs.data.network.model.IBaseInfo;
  4 +import com.cnlive.strike.data.network.api.ApiBaseSubscriber;
  5 +
  6 +
  7 +public class BaseInfo<T> implements IBaseInfo {
  8 + //TODO 接口错误信息 需要自定义
  9 + private String errorCode = ApiBaseSubscriber.getSuccessCode();
  10 + private String errorMessage = "";
  11 +
  12 + //TODO 接口内容数据 需要自定义
  13 + private T data;
  14 +
  15 + public void setCode(String status_code) {
  16 + this.errorCode = status_code;
  17 + }
  18 +
  19 + @Override
  20 + public String getCode() {
  21 + return errorCode;
  22 + }
  23 +
  24 + public void setMessage(String errorMessage) {
  25 + this.errorMessage = errorMessage;
  26 + }
  27 +
  28 + @Override
  29 + public String getMessage() {
  30 + return errorMessage;
  31 + }
  32 +
  33 + public void setData(T data) {
  34 + this.data = data;
  35 + }
  36 +
  37 + public T getData() {
  38 + return data;
  39 + }
  40 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/model/FaceData.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/model/FaceData.java
  1 +package com.cnlive.strike.data.network.model;
  2 +
  3 +/**
  4 + * Created by Lynn on 2018/10/15.
  5 + */
  6 +
  7 +public class FaceData {
  8 + private String faceUrl;
  9 + private String bigFaceUrl;
  10 +
  11 + public String getFaceUrl() {
  12 + return faceUrl;
  13 + }
  14 +
  15 + public void setFaceUrl(String faceUrl) {
  16 + this.faceUrl = faceUrl;
  17 + }
  18 +
  19 + public String getBigFaceUrl() {
  20 + return bigFaceUrl;
  21 + }
  22 +
  23 + public void setBigFaceUrl(String bigFaceUrl) {
  24 + this.bigFaceUrl = bigFaceUrl;
  25 + }
  26 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/model/StorageInfoData.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/model/StorageInfoData.java
  1 +package com.cnlive.strike.data.network.model;
  2 +
  3 +/**
  4 + * Created by cnlive201803 on 2018/5/31.
  5 + */
  6 +
  7 +public class StorageInfoData {
  8 + private int storageId;
  9 + private String storageName;
  10 + private int storageType;
  11 + private int state;
  12 + private int contentType;
  13 + private int profile;
  14 + private String domain;
  15 +
  16 +
  17 + public int getStorageId() {
  18 + return storageId;
  19 + }
  20 +
  21 + public void setStorageId(int storageId) {
  22 + this.storageId = storageId;
  23 + }
  24 +
  25 + public String getStorageName() {
  26 + return storageName;
  27 + }
  28 +
  29 + public void setStorageName(String storageName) {
  30 + this.storageName = storageName;
  31 + }
  32 +
  33 + public int getStorageType() {
  34 + return storageType;
  35 + }
  36 +
  37 + public void setStorageType(int storageType) {
  38 + this.storageType = storageType;
  39 + }
  40 +
  41 + public int getState() {
  42 + return state;
  43 + }
  44 +
  45 + public void setState(int state) {
  46 + this.state = state;
  47 + }
  48 +
  49 + public int getContentType() {
  50 + return contentType;
  51 + }
  52 +
  53 + public void setContentType(int contentType) {
  54 + this.contentType = contentType;
  55 + }
  56 +
  57 + public int getProfile() {
  58 + return profile;
  59 + }
  60 +
  61 + public void setProfile(int profile) {
  62 + this.profile = profile;
  63 + }
  64 +
  65 + public String getDomain() {
  66 + return domain;
  67 + }
  68 +
  69 + public void setDomain(String domain) {
  70 + this.domain = domain;
  71 + }
  72 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/model/TimeStampInfo.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/model/TimeStampInfo.java
  1 +package com.cnlive.strike.data.network.model;
  2 +
  3 +/**
  4 + * 作者: 吴奎庆
  5 + * <p>
  6 + * 时间: 2019/8/27
  7 + * <p>
  8 + * 简介:
  9 + */
  10 +public class TimeStampInfo {
  11 + long timestamp;
  12 +
  13 + public long getTimestamp() {
  14 + return timestamp;
  15 + }
  16 +
  17 + public void setTimestamp(long timestamp) {
  18 + this.timestamp = timestamp;
  19 + }
  20 +}
... ...
moudle_user/src/main/java/com/cnlive/strike/data/network/model/TokenData.java 0 → 100644
  1 +++ a/moudle_user/src/main/java/com/cnlive/strike/data/network/model/TokenData.java
  1 +package com.cnlive.strike.data.network.model;
  2 +
  3 +/**
  4 + * Created by Lynn on 2018/10/15.
  5 + */
  6 +
  7 +public class TokenData {
  8 +
  9 + private String access_token;
  10 + private int expires_in;
  11 +
  12 + public String getAccess_token() {
  13 + return access_token;
  14 + }
  15 +
  16 + public void setAccess_token(String access_token) {
  17 + this.access_token = access_token;
  18 + }
  19 +
  20 + public int getExpires_in() {
  21 + return expires_in;
  22 + }
  23 +
  24 + public void setExpires_in(int expires_in) {
  25 + this.expires_in = expires_in;
  26 + }
  27 +}
... ...