liumingming

fix

Showing 100 changed files with 3471 additions and 0 deletions

Too many changes to show.

To preserve performance only 100 of 100+ files are displayed.

  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/workspace.xml
  5 +/.idea/libraries
  6 +.DS_Store
  7 +/build
  8 +.idea/*
  9 +../.idea
  10 +.idea/sonarlint/
  11 +/captures
  12 +.externalNativeBuild
  1 +/build
  1 +import java.text.SimpleDateFormat
  2 +
  3 +apply plugin: 'com.android.library'
  4 +
  5 +
  6 +def T_RTC_SDK = '7.9.9568'
  7 +
  8 +// versionCode按时间自增
  9 +static def increasedVersionCode(){
  10 + return (int)(System.currentTimeMillis()/1000/60)
  11 +}
  12 +
  13 +def baseVersion = rootProject.ext.sdkVersion
  14 +
  15 +static def buildTime() {
  16 + def df = new SimpleDateFormat("MMddHHmm")
  17 + return df.format(new Date())
  18 +}
  19 +
  20 +def video = "2.0.2.12291101"
  21 +
  22 +
  23 +def videoName = "video_small"
  24 +
  25 +android {
  26 + compileSdkVersion 28
  27 +
  28 + defaultConfig {
  29 +
  30 + useLibrary 'org.apache.http.legacy'
  31 +
  32 + minSdkVersion 17
  33 + targetSdkVersion 28
  34 + versionCode increasedVersionCode()
  35 + versionName "${baseVersion}.${buildTime()}"
  36 +
  37 + ndk {
  38 + //设置支持的SO库架构
  39 + abiFilters "armeabi-v7a","armeabi","arm64-v8a"//, "x86","arm64-v8a","x86_64"
  40 + }
  41 +
  42 + consumerProguardFiles 'proguard-rules.pro'
  43 + }
  44 +
  45 + buildTypes {
  46 +
  47 + release {
  48 + minifyEnabled false
  49 +// proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  50 + buildConfigField('boolean',"PRINT_LOG","${rootProject.ext.isPrint}")
  51 + buildConfigField('boolean',"TV_MODEL","${rootProject.ext.isTV}")
  52 + buildConfigField('boolean',"SOUND_MODEL","${rootProject.ext.isSound}")
  53 + buildConfigField('String',"SDK_VERSION","\"${rootProject.ext.sdkVersion}\"")
  54 + }
  55 + debug{
  56 +
  57 + minifyEnabled false
  58 +// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  59 + buildConfigField('boolean',"PRINT_LOG","${rootProject.ext.isPrint}")
  60 + buildConfigField('boolean',"TV_MODEL","${rootProject.ext.isTV}")
  61 + buildConfigField('boolean',"SOUND_MODEL","${rootProject.ext.isSound}")
  62 + buildConfigField('String',"SDK_VERSION","\"${rootProject.ext.sdkVersion}\"")
  63 + }
  64 + }
  65 +
  66 + lintOptions
  67 + {
  68 + checkReleaseBuilds false
  69 + abortOnError false
  70 + }
  71 +
  72 + compileOptions {
  73 + sourceCompatibility JavaVersion.VERSION_1_8
  74 + targetCompatibility JavaVersion.VERSION_1_8
  75 + }
  76 +}
  77 +
  78 +dependencies {
  79 + implementation fileTree(dir: 'libs', include: ['*.jar'])
  80 +
  81 + implementation 'androidx.appcompat:appcompat:1.2.0'
  82 +
  83 + implementation 'androidx.recyclerview:recyclerview:1.1.0'
  84 +
  85 + implementation 'com.github.bumptech.glide:glide:4.9.0'
  86 +
  87 + api 'com.hhmedic.android.sdk:okhttputils:1.0.0.12311516'
  88 +
  89 + implementation 'com.google.code.gson:gson:2.8.0'
  90 +
  91 + implementation "com.tencent.liteav:LiteAVSDK_TRTC:$T_RTC_SDK"
  92 +
  93 +}
  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
  22 +
  23 +# Add project specific ProGuard rules here.
  24 +# You can control the set of applied configuration files using the
  25 +# proguardFiles setting in build.gradle.
  26 +#
  27 +# For more details, see
  28 +# http://developer.android.com/guide/developing/tools/proguard.html
  29 +
  30 +# If your project uses WebView with JS, uncomment the following
  31 +# and specify the fully qualified class name to the JavaScript interface
  32 +# class:
  33 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  34 +# public *;
  35 +#}
  36 +
  37 +# Uncomment this to preserve the line number information for
  38 +# debugging stack traces.
  39 +#-keepattributes SourceFile,LineNumberTable
  40 +
  41 +# If you keep the line number information, uncomment this to
  42 +# hide the original source file name.
  43 +#-renamesourcefileattribute SourceFile
  44 +
  45 +
  46 +#-ignorewarnings
  47 +#-keepattributes *Annotation*
  48 +#-keepattributes Exceptions
  49 +#-keepattributes InnerClasses
  50 +#-keepattributes Signature
  51 +#-keepattributes SourceFile,LineNumberTable
  52 +#
  53 +#
  54 +##指定代码的压缩级别
  55 +#-optimizationpasses 5
  56 +#
  57 +##包明不混合大小写
  58 +#-dontusemixedcaseclassnames
  59 +#
  60 +##不去忽略非公共的库类
  61 +#-dontskipnonpubliclibraryclasses
  62 +#
  63 +# #优化 不优化输入的类文件
  64 +#-dontoptimize
  65 +#
  66 +# #预校验
  67 +#-dontpreverify
  68 +#
  69 +# #混淆时是否记录日志
  70 +#-verbose
  71 +#
  72 +# # 混淆时所采用的算法
  73 +#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  74 +#
  75 +##保护注解
  76 +#-keepattributes *Annotation*
  77 +
  78 +# 保持哪些类不被混淆
  79 +-keep public class * extends android.app.Fragment
  80 +-keep public class * extends android.app.Activity
  81 +-keep public class * extends android.app.Application
  82 +-keep public class * extends android.app.Service
  83 +-keep public class * extends android.content.BroadcastReceiver
  84 +-keep public class * extends android.content.ContentProvider
  85 +-keep public class * extends android.app.backup.BackupAgentHelper
  86 +-keep public class * extends android.preference.Preference
  87 +-keep public class com.android.vending.licensing.ILicensingService
  88 +
  89 +##记录生成的日志数据,gradle build时在本项目根目录输出##
  90 +#apk 包内所有 class 的内部结构
  91 +#-dump proguard/class_files.txt
  92 +#未混淆的类和成员
  93 +#-printseeds proguard/seeds.txt
  94 +#列出从 apk 中删除的代码
  95 +#-printusage proguard/unused.txt
  96 +#混淆前后的映射
  97 +#-printmapping proguard/mapping.txt
  98 +########记录生成的日志数据,gradle build时 在本项目根目录输出-end######
  99 +
  100 +
  101 +#如果引用了v4或者v7包
  102 +-dontwarn android.support.**
  103 +
  104 +####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####
  105 +
  106 +
  107 +
  108 +#保持 native 方法不被混淆
  109 +-keepclasseswithmembernames class * {
  110 + native <methods>;
  111 +}
  112 +
  113 +#保持自定义控件类不被混淆
  114 +-keepclasseswithmembers class * {
  115 + public <init>(android.content.Context, android.util.AttributeSet);
  116 +}
  117 +
  118 +#保持自定义控件类不被混淆
  119 +-keepclassmembers class * extends android.app.Activity {
  120 + public void *(android.view.View);
  121 +}
  122 +
  123 +-keep public class * extends android.view.View {
  124 + public <init>(android.content.Context);
  125 + public <init>(android.content.Context, android.util.AttributeSet);
  126 + public <init>(android.content.Context, android.util.AttributeSet, int);
  127 + public void set*(...);
  128 +}
  129 +
  130 +#保持 Parcelable 不被混淆
  131 +-keep class * implements android.os.Parcelable {
  132 + public static final android.os.Parcelable$Creator *;
  133 +}
  134 +
  135 +#保持 Serializable 不被混淆
  136 +-keepnames class * implements java.io.Serializable
  137 +
  138 +#保持 Serializable 不被混淆并且enum 类也不被混淆
  139 +-keepclassmembers class * implements java.io.Serializable {
  140 + static final long serialVersionUID;
  141 + private static final java.io.ObjectStreamField[] serialPersistentFields;
  142 + !static !transient <fields>;
  143 + !private <fields>;
  144 + !private <methods>;
  145 + private void writeObject(java.io.ObjectOutputStream);
  146 + private void readObject(java.io.ObjectInputStream);
  147 + java.lang.Object writeReplace();
  148 + java.lang.Object readResolve();
  149 +}
  150 +
  151 +#保持枚举 enum 类不被混淆
  152 +-keepclassmembers enum * {
  153 + public static **[] values();
  154 + public static ** valueOf(java.lang.String);
  155 +}
  156 +
  157 +-keepclassmembers class * {
  158 + public void *ButtonClicked(android.view.View);
  159 +}
  160 +
  161 +#不混淆资源类
  162 +-keepclassmembers class **.R$* {
  163 + public static <fields>;
  164 +}
  165 +
  166 +
  167 +
  168 +-keep public class * extends android.app.Dialog
  169 +
  170 +-dontwarn com.bumptech.glide.**
  171 +
  172 +-dontwarn java.lang.invoke.**
  173 +
  174 +-dontnote org.apache.http.**
  175 +-dontnote android.net.http.**
  176 +
  177 +-dontnote android.os.**
  178 +-dontnote com.android.internal.**
  179 +-dontnote android.view.**
  180 +
  181 +-dontnote com.hhmedic.android.sdk.module.gesturesview.views.**
  182 +
  183 +-dontnote com.willy.ratingbar.ScaleRatingBar
  184 +
  185 +
  186 +-keep class com.hhmedic.android.sdk.HHDoctor {*;}
  187 +-keep class com.hhmedic.android.sdk.config.HHPushConfig {*;}
  188 +-keep class com.hhmedic.android.sdk.config.HHSDKOptions {*;}
  189 +
  190 +-keep class com.hhmedic.android.sdk.module.SDKRoute {*;}
  191 +
  192 +
  193 +
  194 +-keep class com.hhmedic.android.sdk.config.NetEnvironmental {*;}
  195 +
  196 +
  197 +
  198 +-dontwarn com.squareup.picasso.**
  199 +-dontwarn okio.**
  200 +-dontwarn com.bumptech.glide.**
  201 +-dontnote com.netease.nimlib.**
  202 +-keep class com.hhmedic.android.sdk.module.permission.**{*;}
  203 +-keep class okhttp3.**{*;}
  204 +-keep class okio.**{*;}
  205 +-keep class com.zhy.http.**{*;}
  206 +-keep class com.alexvasilkov.**{*;}
  207 +-keep class com.hhmedic.android.sdk.core.net.volley.**{*;}
  208 +-keep class com.bumptech.glide.**{*;}
  209 +-keep class android.arch.**{*;}
  210 +-keep class com.google.gson.**{*;}
  211 +
  212 +-dontnote com.bumptech.glide.**
  213 +-dontnote com.google.gson.**
  214 +-dontnote okhttp3.internal.**
  215 +-dontnote okhttp3.**
  216 +-dontnote okio.**
  217 +
  218 +-keepattributes *Annotation*
  219 +-keep @**annotation** class * {*;}
  220 +
  221 +
  222 +-keep class com.alibaba.sdk.android.**{*;}
  223 +-dontnote com.alibaba.**
  224 +-keep class com.ut.**{*;}
  225 +-keep class com.ta.**{*;}
  226 +-dontwarn com.zhihu.matisse.**
  227 +-dontnote com.ut.**
  228 +-dontnote android.net.**
  229 +-keep class com.hhmedic.android.sdk.uikit.widget.dialog.HHTipDialog.*{*;}
  230 +-keep class com.hhmedic.android.sdk.uikit.widget.dialog.HHTipDialog$*{*;}
  231 +
  232 +-keep class com.hhmedic.android.sdk.uikit.utils.HHStatusBarHelper{*;}
  233 +
  234 +
  235 +-keep class com.tencent.** { *; }
  236 +-keep class com.hhmedic.android.sdk.utils.HHFileProvider {*;}
  237 +
  238 +
  239 +-dontwarn com.netease.**
  240 +-dontwarn io.netty.**
  241 +-keep class com.netease.** {*;}
  242 +#如果 netty 使用的官方版本,它中间用到了反射,因此需要 keep。如果使用的是我们提供的版本,则不需要 keep
  243 +-keep class io.netty.** {*;}
  244 +-keep class com.netease.mobsecurity.** {*;}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + package="com.hhmedic.android.sdk.lego">
  4 +
  5 +
  6 + <uses-feature android:name="android.hardware.camera" />
  7 + <uses-feature android:name="android.hardware.camera.autofocus" />
  8 +
  9 + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  10 +
  11 + <!-- 访问网络状态 -->
  12 + <uses-permission android:name="android.permission.INTERNET" />
  13 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  14 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  15 + <!-- 外置存储存取权限 -->
  16 + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  17 +
  18 + <!-- 多媒体相关 -->
  19 + <uses-permission android:name="android.permission.CAMERA" />
  20 + <uses-permission android:name="android.permission.RECORD_AUDIO" />
  21 +
  22 + <!-- 如果需要实时音视频通话模块,下面的权限也是必须的。否则,可以不加 -->
  23 + <uses-permission android:name="android.permission.BLUETOOTH" />
  24 + <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  25 + <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  26 +
  27 + <application android:networkSecurityConfig="@xml/hh_network_security_config"
  28 + >
  29 +
  30 +
  31 + <activity android:name="com.hhmedic.android.sdk.video.chat.RtcVideoAct" android:theme="@style/hh_video_chat_style"/>
  32 +
  33 + <provider
  34 + android:name="com.hhmedic.android.sdk.base.utils.HHFileProvider"
  35 + android:authorities="${applicationId}.hhprovider"
  36 + android:exported="false"
  37 + android:grantUriPermissions="true">
  38 + <meta-data
  39 + android:name="android.support.FILE_PROVIDER_PATHS"
  40 + android:resource="@xml/provider_paths" />
  41 + </provider>
  42 +
  43 + <activity android:name="com.hhmedic.android.sdk.module.video.player.HHVideoAct" android:theme="@style/HH_ChatTheme" android:screenOrientation="behind"/>
  44 +
  45 + <activity android:name="com.hhmedic.android.sdk.module.browser.HHBrowserAct" android:theme="@style/HH_Normal_Theme" android:screenOrientation="behind"/>
  46 +
  47 +
  48 + </application>
  49 +
  50 +</manifest>
  1 +package com.hhmedic.android.sdk;
  2 +
  3 +import androidx.annotation.IntDef;
  4 +
  5 +import com.tencent.trtc.TRTCCloudDef;
  6 +
  7 +public class VideoSetting {
  8 +
  9 + public static boolean enableGSENSORMode = true;
  10 +
  11 + public static int remoteRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0;
  12 +
  13 +
  14 + @Deprecated
  15 + public static int videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
  16 +
  17 +
  18 + @IntDef(value = {TRTCCloudDef.TRTC_VIDEO_ROTATION_0,TRTCCloudDef.TRTC_VIDEO_ROTATION_90,TRTCCloudDef.TRTC_VIDEO_ROTATION_180,TRTCCloudDef.TRTC_VIDEO_ROTATION_270})
  19 + public @interface RotationType {
  20 +
  21 + }
  22 +
  23 + @IntDef(value = {TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT,TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE})
  24 + public @interface VideoResolutionModeType {
  25 +
  26 + }
  27 +
  28 + /**
  29 + * 是否开启设备的重力感应
  30 + * @param enable 是否开启
  31 + */
  32 + public static void setEnableGSENSORMode(boolean enable) {
  33 + enableGSENSORMode = enable;
  34 + }
  35 +
  36 + /**
  37 + * 设置远端视频在本地显示的旋转方向
  38 + * @param rotation 旋转方向
  39 + */
  40 + public static void setRemoteRotation(@RotationType int rotation) {
  41 + remoteRotation = rotation;
  42 + }
  43 +
  44 + /**
  45 + * 设置方向
  46 + *
  47 + * 建议使用 setVideoEncParam
  48 + * @param mode 方向
  49 + */
  50 + @Deprecated
  51 + public static void setVideoResolutionMode(@VideoResolutionModeType int mode) {
  52 + videoResolutionMode = mode;
  53 + }
  54 +
  55 +
  56 +
  57 + private static TRTCCloudDef.TRTCVideoEncParam mVideoEncParam;
  58 +
  59 +
  60 + public static TRTCCloudDef.TRTCVideoEncParam getVideoEncParamConfig(){
  61 +
  62 + return mVideoEncParam;
  63 + }
  64 +
  65 +
  66 + /**
  67 + * 设置 TRTC 编码信息
  68 + *
  69 + * 分辨率 码率,FPS等
  70 + *
  71 + * 参考资料: https://cloud.tencent.com/document/product/647/32267
  72 + *
  73 + * 码率 和分辨率 设置参考 https://cloud.tencent.com/document/product/647/32236#.E6.8E.A8.E8.8D.90.E7.9A.84.E9.85.8D.E7.BD.AE
  74 + *
  75 + * @param param TRTCVideoEncParam
  76 + *
  77 + *
  78 + */
  79 + public static void setVideoEncParam(TRTCCloudDef.TRTCVideoEncParam param){
  80 +
  81 + mVideoEncParam = param;
  82 + }
  83 +
  84 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public class DeviceSetting {
  4 +
  5 +
  6 + /**
  7 + * 默认不开启音频采集通道16K和48K,默认使用32K
  8 + */
  9 + public static void enableDefaultSamplerRate() {
  10 + HHConfig.useSampleRate48K_HZ = false;
  11 + HHConfig.useSampleRate16K_HZ = false;
  12 + }
  13 +
  14 + /**
  15 + * 默认音频采集通道使用16K
  16 + */
  17 + public static void enableSampleRate16K_HZ() {
  18 + HHConfig.useSampleRate48K_HZ = false;
  19 + HHConfig.useSampleRate16K_HZ = true;
  20 + }
  21 +
  22 + /**
  23 + * 默认音频采集通道使用48K
  24 + */
  25 + public static void enableSampleRate48K_HZ() {
  26 + HHConfig.useSampleRate48K_HZ = true;
  27 + HHConfig.useSampleRate16K_HZ = false;
  28 + }
  29 +
  30 + /**
  31 + * 设置是否开启铃声的Music通道
  32 + * @param enable 是否开启
  33 + */
  34 + public static void enableRingTypeMusic(boolean enable) {
  35 + HHConfig.useSoundStreamMusic = enable;
  36 + }
  37 +
  38 + /**
  39 + * 是否开启高清语音模式,开启后会解决一些设备听不到医生声音的问题
  40 + * @param enable 是否开启
  41 + */
  42 + public static void enableHighQualityMusic(boolean enable) {
  43 + HHConfig.enableHighQualityMusic = enable;
  44 + }
  45 +
  46 + /**
  47 + * 是否开启视频画面全屏显示,默认为不显示全屏
  48 + * @param enable 是否显示全屏
  49 + */
  50 + public static void enableVideoFullScreen(boolean enable) {
  51 + HHConfig.enableVideoFullScreen = enable;
  52 + }
  53 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public enum DeviceType
  4 +{
  5 + NORMAL, //正常设备 包括手机 PAD
  6 +
  7 + SOUND,//音响
  8 +
  9 +
  10 + TV,//电视
  11 +
  12 +
  13 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public interface DoctorType
  4 +{
  5 + String EXPERT = "zhuanke";
  6 +
  7 + String FAM_DOCTOR = "quanke";
  8 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +import android.content.pm.ActivityInfo;
  4 +import android.text.TextUtils;
  5 +import android.view.Surface;
  6 +
  7 +
  8 +/**
  9 + * Created by iOS on 2016/11/1.
  10 + *
  11 + *
  12 + */
  13 +
  14 +public class HHConfig
  15 +{
  16 +
  17 +
  18 + public static boolean DEBUG = false;
  19 +
  20 + private static boolean TEST_MODEL = false;
  21 +
  22 + public static boolean OPEN_CAMERA = true;
  23 +
  24 + public static boolean ENABLE_PUSH = true;
  25 +
  26 + //设置成true后可以使用接入方自己定义的铃声,不播放方SDK默认铃声
  27 + public static boolean USE_CUSTOM_RING_SOUND = false;
  28 +
  29 + public static boolean VIDEO_DEFAULT_FRONT_CAMERA = true;
  30 +
  31 + private static final String SDK_VERSION = "2.8.0";
  32 +
  33 + private static String PID = "3001";
  34 +
  35 +
  36 + //请求扩展字段 第三方设置
  37 + private static String ext = null;
  38 +
  39 +
  40 + public static MessageOptions mMessageOptions;
  41 +
  42 +
  43 + public static boolean isTest()
  44 + {
  45 + return TEST_MODEL;
  46 + }
  47 +
  48 +
  49 + public static String getExtString(){
  50 +
  51 + return ext;
  52 + }
  53 +
  54 +
  55 + public static DeviceType DEVICE_TYPE = DeviceType.NORMAL;
  56 +
  57 +
  58 + public static int ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_BEHIND;
  59 +
  60 + public static int deviceDefaultRotation = Surface.ROTATION_0;
  61 +
  62 + public static boolean enableVideoRotateInRending = true;
  63 +
  64 + public static boolean ENABLE_CALL_ERROR_TOAST = true;
  65 +
  66 + public static boolean isSkipEditMember = false;
  67 +
  68 + public static boolean useSampleRate16K_HZ = false;
  69 +
  70 + public static boolean useSampleRate48K_HZ = false;
  71 +
  72 + public static boolean useSoundStreamMusic = false;
  73 +
  74 + public static boolean enableHighQualityMusic = false;
  75 +
  76 + public static boolean enableEffectAcousticEchoCanceler = true;
  77 +
  78 + public static int localRenderRotation = 0;
  79 + /**
  80 + * 是否开启评价功能,在视频超过3分钟挂断的时候会弹出,如果不需要可以设置为false,建议开启评价功能
  81 + */
  82 + public static boolean isOpenEvaluation = true;
  83 +
  84 + public static String tabletSlogan;
  85 +
  86 + public static boolean canAddMember = true;
  87 +
  88 + public static String messageTitle;
  89 +
  90 + public static boolean canShowMultiCall = false;
  91 +
  92 + public static boolean enableVideoFullScreen = false;
  93 +
  94 + public static boolean enableActivate = true;
  95 +
  96 + public static boolean enableMedical = true;
  97 +
  98 + public static boolean enableCustomPreviewSize = false;
  99 +
  100 + public static boolean enableVipInfo = true;
  101 +
  102 + public static boolean enableAddMemberInDoc = true;
  103 +
  104 + public static boolean isSound()
  105 + {
  106 + if (DEVICE_TYPE == null)
  107 + {
  108 + DEVICE_TYPE = DeviceType.NORMAL;
  109 + }
  110 +
  111 + return DEVICE_TYPE == DeviceType.SOUND;
  112 + }
  113 +
  114 +
  115 + public static boolean isTV()
  116 + {
  117 + if (DEVICE_TYPE == null)
  118 + {
  119 + DEVICE_TYPE = DeviceType.NORMAL;
  120 + }
  121 +
  122 + return DEVICE_TYPE == DeviceType.TV;
  123 + }
  124 +
  125 +
  126 + public static DeviceType getDeviceType()
  127 + {
  128 + if (DEVICE_TYPE == null)
  129 + {
  130 + DEVICE_TYPE = DeviceType.NORMAL;
  131 + }
  132 +
  133 + return DEVICE_TYPE;
  134 + }
  135 +
  136 + public static void openTest()
  137 + {
  138 + TEST_MODEL = true;
  139 + }
  140 +
  141 + public static void closeTest()
  142 + {
  143 + TEST_MODEL = false;
  144 + }
  145 +
  146 + public static void setOpenEvaluation(boolean isOpen) {
  147 + isOpenEvaluation = isOpen;
  148 + }
  149 +
  150 + public static boolean getOpenEvaluation() {
  151 +
  152 + if (isTV()){
  153 + return false;
  154 + }
  155 +
  156 + return isOpenEvaluation;
  157 + }
  158 +
  159 +
  160 + public static void setPid(String pid)
  161 + {
  162 + if (!TextUtils.isEmpty(pid))
  163 + {
  164 + PID = pid;
  165 + }
  166 + }
  167 +
  168 + public static String getPid()
  169 + {
  170 + return PID;
  171 + }
  172 +
  173 +
  174 + public static String getSdkVersion()
  175 + {
  176 + return SDK_VERSION;
  177 + }
  178 +
  179 +
  180 +
  181 +
  182 + public static void initFromOption(HHSDKOptions options){
  183 +
  184 + if (options.dev) {
  185 + HHConfig.openTest();
  186 + } else {
  187 + HHConfig.closeTest();
  188 + }
  189 +
  190 + HHConfig.setPid(options.getSdkProductId());
  191 +
  192 + HHConfig.DEBUG = options.isDebug;
  193 +
  194 + if (options.mDeviceType != null) {
  195 +
  196 + HHConfig.DEVICE_TYPE = options.mDeviceType;
  197 + }
  198 +
  199 + HHConfig.ORIENTATION = options.mOrientation;
  200 +
  201 + HHConfig.OPEN_CAMERA = options.isOpenCamera;
  202 +
  203 + HHConfig.USE_CUSTOM_RING_SOUND = options.useCustomRingSound;
  204 +
  205 + HHConfig.setOpenEvaluation(options.isOpenEvaluation);
  206 +
  207 + HHConfig.VIDEO_DEFAULT_FRONT_CAMERA = options.videoDefaultFrontCamera;
  208 +
  209 + HHConfig.deviceDefaultRotation = options.deviceDefaultRotation;
  210 +
  211 + HHConfig.enableVideoRotateInRending = options.enableVideoRotateInRending;
  212 +
  213 + HHConfig.ENABLE_PUSH = options.enablePush;
  214 +
  215 + HHConfig.ENABLE_CALL_ERROR_TOAST = options.enableCallErrorToast;
  216 +
  217 + HHConfig.useSampleRate16K_HZ = options.useSampleRate16K_HZ;
  218 +
  219 + HHConfig.useSampleRate48K_HZ = options.useSampleRate48K_HZ;
  220 +
  221 + HHConfig.useSoundStreamMusic = options.useSoundStreamMusic;
  222 +
  223 + HHConfig.enableHighQualityMusic = options.enableHighQualityMusic;
  224 +
  225 + HHConfig.enableEffectAcousticEchoCanceler = options.enableEffectAcousticEchoCanceler;
  226 +
  227 + HHConfig.localRenderRotation = options.localRenderRotation;
  228 +
  229 + HHConfig.canAddMember = options.enableAddMember;
  230 +
  231 + HHConfig.canShowMultiCall = options.enableMultiCall;
  232 +
  233 + HHConfig.tabletSlogan = options.mCompanySloganTip;
  234 +
  235 + HHConfig.messageTitle = options.messageTitle;
  236 +
  237 + HHConfig.setExt(options.mExtensionString);
  238 +
  239 + HHConfig.enableVideoFullScreen = options.enableVideoFullScreen;
  240 +
  241 + HHConfig.enableActivate = options.enableActivate;
  242 +
  243 + HHConfig.enableMedical = options.enableMedical;
  244 +
  245 + HHConfig.mMessageOptions = options.messageOptions;
  246 +
  247 + HHConfig.enableCustomPreviewSize = options.enableCustomPreviewSize;
  248 +
  249 + HHConfig.enableVipInfo = options.enableVipInfo;
  250 +
  251 + HHConfig.enableAddMemberInDoc = options.enableAddMemberInDoc;
  252 +
  253 + if (options.mSenderConfig != null){
  254 +
  255 + if (!TextUtils.isEmpty(options.mSenderConfig.getIcon())){
  256 +
  257 + SystemSenderInfo.ICON = options.mSenderConfig.getIcon();
  258 + }
  259 +
  260 + if (!TextUtils.isEmpty(options.mSenderConfig.getNickName())){
  261 +
  262 + SystemSenderInfo.NAME = options.mSenderConfig.getNickName();
  263 + }
  264 +
  265 + }
  266 + }
  267 +
  268 +
  269 +
  270 + public static void setExt(String ext){
  271 +
  272 + HHConfig.ext = ext;
  273 + }
  274 +
  275 +
  276 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +import android.app.Activity;
  4 +
  5 +public class HHPushConfig
  6 +{
  7 +
  8 + /**
  9 + * 通知栏提醒的响应intent的activity类型。<br>
  10 + * 可以为null。如果未提供,将使用包的launcher的入口intent的activity。
  11 + */
  12 + public Class<? extends Activity> notificationEntrance;
  13 +
  14 + /**
  15 + * 状态栏提醒的小图标的资源ID。<br>
  16 + * 如果不提供,使用app的icon
  17 + */
  18 + public int notificationSmallIconId;
  19 +
  20 +
  21 + /**
  22 + * 小米推送 appId
  23 + */
  24 + public String xmAppId;
  25 +
  26 + /**
  27 + * 小米推送 appKey
  28 + */
  29 + public String xmAppKey;
  30 +
  31 + /**
  32 + * 小米推送证书,请在云信管理后台申请
  33 + */
  34 + public String xmCertificateName;
  35 +
  36 + /**
  37 + * 华为推送的AppId
  38 + */
  39 + public String hwAppId;
  40 +
  41 + /**
  42 + * 华为推送 appId 请在 AndroidManifest.xml 文件中配置
  43 + * 华为推送证书,请在云信管理后台申请
  44 + */
  45 + public String hwCertificateName;
  46 +
  47 + public String vivoCertificateName;
  48 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +import android.content.pm.ActivityInfo;
  4 +import android.view.Surface;
  5 +
  6 +/**
  7 + * SDK配置选项
  8 + */
  9 +public class HHSDKOptions {
  10 +
  11 +
  12 + /**
  13 + * 和缓分配的唯一id
  14 + */
  15 + private String sdkProductId;
  16 +
  17 +
  18 + public HHSDKOptions(String sdkProductId) {
  19 + this.sdkProductId = sdkProductId;
  20 + }
  21 +
  22 +
  23 + public String getSdkProductId() {
  24 + return sdkProductId;
  25 + }
  26 +
  27 + /**
  28 + * 是否开启debug
  29 + */
  30 + public boolean isDebug = false;
  31 +
  32 + /**
  33 + * 配置推送信息
  34 + */
  35 + public HHPushConfig pushConfig;
  36 +
  37 +
  38 + /**
  39 + * 视频过程中 是否要开启 拍照
  40 + */
  41 + public boolean isOpenCamera = true;
  42 +
  43 +
  44 + /**
  45 + * 设备类型,如果是音响 需要更改 DeviceType.SOUND
  46 + */
  47 + public DeviceType mDeviceType;
  48 +
  49 + /**
  50 + * 设备序列号 音响设备需要传
  51 + */
  52 + public String mImei;
  53 +
  54 +
  55 + /**
  56 + * 屏幕方向 默认是更随上个界面的方向
  57 + */
  58 + public int mOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND;
  59 +
  60 +
  61 + /**
  62 + * 开启测试环境 默认关闭
  63 + */
  64 + public boolean dev = false;
  65 +
  66 +
  67 + /**
  68 + * 设置关闭SDK默认呼叫铃声
  69 + */
  70 + public boolean useCustomRingSound = false;
  71 +
  72 +
  73 + /**
  74 + * 设置默认开启前置摄像头
  75 + */
  76 + public boolean videoDefaultFrontCamera = true;
  77 +
  78 + /**
  79 + * 设置是否开启push
  80 + */
  81 + public boolean enablePush = true;
  82 +
  83 +
  84 + /**
  85 + * 是否在呼叫时候出错了弹Toast提示
  86 + */
  87 + public boolean enableCallErrorToast = true;
  88 +
  89 + /**
  90 + * coop id 渠道号
  91 + */
  92 +
  93 + public String mCoopId;
  94 +
  95 + /**
  96 + * 设备旋转角度,如果对方(医生端)看客户端角度不对可以用这个参数调整,调整方向是顺时针
  97 + */
  98 + public int deviceDefaultRotation = Surface.ROTATION_0;
  99 +
  100 + /**
  101 + * 是否开启视频绘制时自动旋转
  102 + */
  103 + public boolean enableVideoRotateInRending = true;
  104 +
  105 +
  106 + /**
  107 + * 是否使用16000 也可以叫做16k的音频通道
  108 + */
  109 + public boolean useSampleRate16K_HZ = false;
  110 +
  111 + /**
  112 + * 是否使用48000 也可以叫做16k的音频通道
  113 + */
  114 + public boolean useSampleRate48K_HZ = false;
  115 +
  116 +
  117 + /**
  118 + * 是否播放铃声使用Music通道
  119 + */
  120 + public boolean useSoundStreamMusic = false;
  121 +
  122 + /**
  123 + * 是否开启播放高清音乐模式
  124 + * 在某些机器人接入的时候如果通话播放声音有问题可以设置这个试试
  125 + */
  126 + public boolean enableHighQualityMusic = false;
  127 +
  128 + /**
  129 + * 是否开启回声抑制
  130 + */
  131 + public boolean enableEffectAcousticEchoCanceler = true;
  132 +
  133 +
  134 + /**
  135 + * 本地预览以及传输给对方的画面旋转角度,在特定设备需要适配的时候需要设置
  136 + */
  137 + public int localRenderRotation = 0;
  138 +
  139 + /**
  140 + * 是否开启评价功能,在视频超过3分钟挂断的时候会弹出,如果不需要可以设置为false,建议开启评价功能
  141 + */
  142 + public boolean isOpenEvaluation = true;
  143 +
  144 +
  145 + /**
  146 + * 是否保留 添加成员入口
  147 + */
  148 + public boolean enableAddMember = true;
  149 +
  150 +
  151 + /**
  152 + * 是否保留 档案库中添加成员入口
  153 + */
  154 + public boolean enableAddMemberInDoc = true;
  155 +
  156 + /**
  157 + * 信息流系统发送者身份配置
  158 + */
  159 + public SystemSenderConfig mSenderConfig;
  160 +
  161 + /**
  162 + * 信息流 界面 设置
  163 + */
  164 + public MessageOptions messageOptions;
  165 +
  166 + /**
  167 + * 视频页面水印,如配置则在智能音箱或电视端视频时显示
  168 + */
  169 + public String mCompanySloganTip;
  170 +
  171 + /**
  172 + * 设置Message界面的标题
  173 + */
  174 + public String messageTitle;
  175 +
  176 + /**
  177 + * 是否开启多人呼叫入口
  178 + */
  179 + public boolean enableMultiCall = false;
  180 +
  181 + /**
  182 + * TV版本视频是否全屏显示
  183 + */
  184 + public boolean enableVideoFullScreen = false;
  185 +
  186 + /**
  187 + * 是否显示激活入口
  188 + */
  189 + public boolean enableActivate = true;
  190 +
  191 + /**
  192 + * sdk 扩展统计字段
  193 + */
  194 + public String mExtensionString;
  195 +
  196 + /**
  197 + * 是否开启档案库
  198 + */
  199 + public boolean enableMedical = true;
  200 +
  201 + /**
  202 + * 是否开启自定义预览窗口大小
  203 + */
  204 + public boolean enableCustomPreviewSize = false;
  205 +
  206 +
  207 + /**
  208 + * 是否开启显示会员日期
  209 + */
  210 + public boolean enableVipInfo = true;
  211 +
  212 + public static HHSDKOptions defaultSoundOption(String productId) {
  213 + HHSDKOptions options = new HHSDKOptions(productId);
  214 + options.isOpenCamera = false;
  215 + options.mOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
  216 + options.mDeviceType = DeviceType.SOUND;
  217 + return options;
  218 + }
  219 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public class MessageOptions {
  4 +
  5 +
  6 + public boolean isFilterSummary;
  7 +
  8 + public boolean isFilterMedicinal;
  9 +
  10 + public boolean hideUserCenter;
  11 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public class NetEnvironmental
  4 +{
  5 + public static boolean isTest()
  6 + {
  7 + return HHConfig.isTest();
  8 + }
  9 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public class SystemSenderConfig {
  4 +
  5 +
  6 + private String mIcon;
  7 +
  8 + private String mNickName;
  9 +
  10 +
  11 + public SystemSenderConfig(String nickName,String icon ){
  12 +
  13 + this.mIcon = icon;
  14 +
  15 + this.mNickName = nickName;
  16 +
  17 + }
  18 +
  19 +
  20 + public String getNickName(){
  21 +
  22 + return mNickName;
  23 + }
  24 +
  25 +
  26 + public String getIcon(){
  27 +
  28 + return mIcon;
  29 + }
  30 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +public class SystemSenderInfo {
  4 +
  5 +
  6 + public static String ICON = "https://imgs.hh-medic.com/photo/E2019042210511134518/069b07ef023a49a8a58d7efc3f99fbf5.jpg";
  7 +
  8 + public static String NAME = "系统小助手";
  9 +}
  1 +package com.hhmedic.android.sdk.config;
  2 +
  3 +import android.text.TextUtils;
  4 +
  5 +import java.io.Serializable;
  6 +
  7 +public final class Version implements Serializable
  8 +{
  9 +
  10 + private static String APP_VERSION = HHConfig.getSdkVersion();
  11 +
  12 +
  13 + public static String getVersion()
  14 + {
  15 + if (TextUtils.isEmpty(APP_VERSION))
  16 + {
  17 + APP_VERSION = HHConfig.getSdkVersion();
  18 + }
  19 +
  20 + return APP_VERSION;
  21 + }
  22 +
  23 +
  24 +
  25 + public static void setCommonV(String v)
  26 + {
  27 +
  28 + if (TextUtils.isEmpty(v))
  29 + {
  30 + return;
  31 + }
  32 +
  33 + if ((TextUtils.equals("3001", HHConfig.getPid()) || TextUtils.equals("3010", HHConfig.getPid()) || TextUtils.equals("3011", HHConfig.getPid())))
  34 + {
  35 + APP_VERSION = v;
  36 + }
  37 + }
  38 +
  39 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 +
  5 + <scale android:fromXScale="1.0" android:toXScale="1.0"
  6 + android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="0%"
  7 + android:pivotY="0%" android:duration="200" />
  8 +</set>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <scale android:fromXScale="1.0" android:toXScale="1.0"
  5 + android:fromYScale="1.0" android:toYScale="0.0" android:pivotX="0%"
  6 + android:pivotY="0%" android:duration="200" />
  7 +
  8 +</set>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  3 + <item android:drawable="@color/hhui_drawable_color_list_separator"/>
  4 + <item android:drawable="@color/hhui_config_color_white" android:bottom="@dimen/hh_list_divider_height"/>
  5 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  3 + <item android:drawable="@color/hhui_drawable_color_list_separator"/>
  4 + <item android:drawable="@color/hhui_drawable_color_list_pressed" android:bottom="@dimen/hh_list_divider_height"/>
  5 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:drawable="@drawable/hh_av_chat_accept_bg_press" android:state_pressed="true"/>
  4 + <item android:drawable="@drawable/hh_av_chat_accept_bg_normal" />
  5 +</selector>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:color="@color/hh_sdk_line_color" android:state_enabled="false"/>
  4 +
  5 + <item android:color="@android:color/white"/>
  6 +
  7 +</selector>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:drawable="@drawable/hh_av_change_front_disable" android:state_enabled="false" />
  4 + <item android:drawable="@drawable/hh_av_change_front_press" android:state_pressed="true" />
  5 + <item android:drawable="@drawable/hh_av_change_front_normal" />
  6 +</selector>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:drawable="@drawable/hh_av_chat_voice_press" android:state_enabled="false" />
  4 + <item android:drawable="@drawable/hh_av_chat_voice_press" android:state_pressed="true" />
  5 + <item android:drawable="@drawable/hh_av_chat_voice" />
  6 +</selector>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:drawable="@drawable/hh_av_chat_refuse_bg_press" android:state_pressed="true"/>
  4 + <item android:drawable="@drawable/hh_av_chat_refuse_bg_normal" />
  5 +</selector>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + >
  4 +
  5 + <corners android:radius="3dp"/>
  6 +
  7 + <solid android:color="#33000000"/>
  8 +
  9 +</shape>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <item android:drawable="@drawable/hh_list_item_bg_with_border_bottom_pressed" android:state_pressed="true"/>
  5 +
  6 + <item android:drawable="@drawable/hh_list_item_bg_with_border_bottom"/>
  7 +
  8 +
  9 +</selector>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:id="@android:id/background">
  4 + <clip>
  5 + <shape>
  6 +
  7 + <gradient android:startColor="@android:color/white" android:endColor="@android:color/white"/>
  8 +
  9 +
  10 + </shape>
  11 +
  12 + </clip>
  13 +
  14 + </item>
  15 +
  16 + <item android:id="@android:id/progress">
  17 + <clip>
  18 + <shape>
  19 +
  20 + <gradient android:startColor="@color/hp_sdk_blue" android:endColor="@color/hp_sdk_blue"/>
  21 + </shape>
  22 +
  23 + </clip>
  24 +
  25 + </item>
  26 +
  27 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:shape="rectangle">
  4 +
  5 + <corners android:radius="10dp"/>
  6 +
  7 + <solid android:color="@android:color/white"/>
  8 +</shape>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <corners android:radius="@dimen/hh_radius"/>
  4 + <solid android:color="@color/hhui_config_color_white"/>
  5 +</shape>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:shape="rectangle" >
  4 + <solid android:color="@color/hhui_config_color_75_pure_black" />
  5 + <corners android:radius="15dp" />
  6 +</shape>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:shape="rectangle">
  4 + <solid android:color="@android:color/black"/>
  5 +
  6 +</shape>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:shape="rectangle">
  4 + <solid android:color="@android:color/black"/>
  5 +
  6 + <corners android:radius="@dimen/hh_radius"/>
  7 +
  8 +</shape>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:id="@+id/main_content"
  5 + android:layout_height="match_parent">
  6 +
  7 +
  8 + <com.hhmedic.android.sdk.module.video.widget.chat.ChatVideoView
  9 + android:id="@+id/chat"
  10 + android:layout_width="match_parent"
  11 + android:layout_height="match_parent"
  12 + android:visibility="gone" />
  13 +
  14 +
  15 + <com.hhmedic.android.sdk.module.video.widget.calling.CallingView
  16 + android:id="@+id/call"
  17 + android:layout_width="match_parent"
  18 + android:layout_height="match_parent" />
  19 +
  20 +
  21 + <FrameLayout
  22 + android:id="@+id/preview_layout"
  23 + android:layout_width="@dimen/hp_video_small_width"
  24 + android:layout_height="@dimen/hp_video_small_height"
  25 + android:layout_alignParentEnd="true"
  26 + android:layout_marginTop="@dimen/hh_chat_small_layout_top"
  27 + android:layout_marginEnd="15dp">
  28 +
  29 +
  30 + </FrameLayout>
  31 +
  32 +
  33 + <TextView
  34 + android:visibility="gone"
  35 + android:text="@string/hh_dev_tips"
  36 + android:textColor="@android:color/holo_red_dark"
  37 + android:layout_marginTop="36dp"
  38 + android:layout_centerHorizontal="true"
  39 + android:id="@+id/dev_tips_incoming"
  40 + android:layout_width="wrap_content"
  41 + android:layout_height="wrap_content" />
  42 +
  43 +
  44 +</RelativeLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:orientation="vertical" android:layout_width="match_parent"
  4 + android:background="@color/hh_ui_bg"
  5 + android:layout_height="match_parent">
  6 +
  7 +
  8 + <include layout="@layout/hh_system_toolbar_layout"/>
  9 +
  10 +
  11 +
  12 + <ProgressBar
  13 + android:max="100"
  14 + android:progressDrawable="@drawable/hh_progress_bg"
  15 + style="?android:attr/progressBarStyleHorizontal"
  16 + android:id="@+id/hh_progress"
  17 + android:layout_width="match_parent"
  18 + android:layout_height="2dp"/>
  19 +
  20 +
  21 + <WebView
  22 + android:id="@+id/webView"
  23 + android:layout_width="match_parent"
  24 + android:layout_height="match_parent"/>
  25 +
  26 +
  27 +
  28 +</LinearLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + xmlns:app="http://schemas.android.com/apk/res-auto"
  5 + android:background="@android:color/black"
  6 + android:layout_height="match_parent">
  7 +
  8 +
  9 + <com.hhmedic.android.sdk.module.video.player.VideoView
  10 + android:id="@+id/video"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent"/>
  13 +
  14 +
  15 + <TextView
  16 + android:id="@+id/connect"
  17 + android:text="@string/hh_video_connect_str"
  18 + android:layout_width="wrap_content"
  19 + android:textColor="@android:color/white"
  20 + android:layout_centerInParent="true"
  21 + android:layout_height="wrap_content"/>
  22 +
  23 +
  24 + <Button
  25 + android:layout_marginTop="14dp"
  26 + android:id="@+id/hang_up"
  27 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  28 + style="@style/hh_av_btn"
  29 + android:layout_marginBottom="30dp"
  30 + android:layout_alignParentBottom="true"
  31 + android:layout_centerHorizontal="true"
  32 + android:text="@string/hh_av_hangup_btn"
  33 + android:layout_width="wrap_content"
  34 + android:layout_height="wrap_content" />
  35 +
  36 +
  37 +
  38 +
  39 + <androidx.appcompat.widget.Toolbar
  40 + android:id="@+id/toolbar"
  41 + app:titleTextColor="@android:color/transparent"
  42 + android:layout_width="match_parent"
  43 + android:layout_height="46dp"
  44 + android:layout_marginTop="40dp"
  45 + app:theme="@style/HH.Toolbar.Light"
  46 + android:background="@android:color/transparent"
  47 + />
  48 +
  49 +
  50 +
  51 +
  52 +
  53 +</RelativeLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout
  3 + xmlns:android="http://schemas.android.com/apk/res/android"
  4 + android:orientation="vertical" android:layout_width="match_parent"
  5 + android:layout_height="match_parent">
  6 +
  7 +
  8 + <ImageView
  9 + android:id="@+id/cover"
  10 + android:scaleType="centerCrop"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent"
  13 + android:contentDescription="@string/hh_sdk_image_name" />
  14 +
  15 +
  16 + <TextView
  17 + android:id="@+id/count"
  18 + android:paddingBottom="1dp"
  19 + android:paddingTop="1dp"
  20 + android:paddingStart="@dimen/normal_margin"
  21 + android:paddingEnd="@dimen/normal_margin"
  22 + android:background="@color/hp_sdk_alpha_black"
  23 + android:layout_alignParentEnd="true"
  24 + android:textColor="@android:color/white"
  25 + android:textSize="10.0sp"
  26 + android:layout_width="wrap_content"
  27 + android:layout_height="wrap_content" />
  28 +
  29 +
  30 +
  31 + <ProgressBar
  32 + android:max="100"
  33 + android:id="@+id/progress"
  34 + android:layout_margin="@dimen/normal_margin"
  35 + android:layout_centerVertical="true"
  36 + style="?android:attr/progressBarStyleHorizontal"
  37 + android:layout_width="match_parent"
  38 + android:layout_height="4dp" />
  39 +
  40 +
  41 +
  42 +
  43 + <RelativeLayout
  44 + android:visibility="gone"
  45 + android:id="@+id/error_tips_layout"
  46 + android:layout_width="match_parent"
  47 + android:layout_height="match_parent">
  48 +
  49 + <ImageView
  50 + android:src="@drawable/hh_sdk_error_red_icon"
  51 + android:layout_centerInParent="true"
  52 + android:layout_width="wrap_content"
  53 + android:layout_height="wrap_content"
  54 + android:contentDescription="@string/hh_sdk_image_name" />
  55 +
  56 +
  57 + <TextView
  58 + android:paddingBottom="1dp"
  59 + android:paddingTop="1dp"
  60 + android:background="@color/hp_sdk_alpha_black"
  61 + android:textColor="@android:color/white"
  62 + android:textSize="9.0sp"
  63 + android:gravity="center_horizontal"
  64 + android:text="@string/hh_video_upload_error"
  65 + android:layout_alignParentBottom="true"
  66 + android:layout_width="match_parent"
  67 + android:layout_height="wrap_content" />
  68 +
  69 +
  70 + </RelativeLayout>
  71 +
  72 +
  73 +
  74 +
  75 +
  76 +</RelativeLayout>
  77 +
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="wrap_content"
  5 + android:orientation="vertical">
  6 +
  7 + <TextView
  8 + android:id="@+id/title"
  9 + android:layout_width="match_parent"
  10 + android:layout_height="@dimen/hh_bottom_sheet_title_height"
  11 + android:ellipsize="middle"
  12 + android:gravity="center_vertical"
  13 + android:singleLine="true"
  14 + android:visibility="gone"/>
  15 +
  16 + <ListView
  17 + android:id="@+id/listview"
  18 + android:layout_width="match_parent"
  19 + android:layout_height="wrap_content"
  20 + android:background="@color/hhui_config_color_white"
  21 + android:divider="@null"
  22 + android:dividerHeight="0dp"/>
  23 +</LinearLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="@dimen/hh_bottom_sheet_list_item_height"
  5 + android:gravity="center"
  6 + android:background="@drawable/hh_list_item_bg"
  7 + android:orientation="horizontal"
  8 + android:paddingLeft="16dp"
  9 + android:paddingRight="16dp">
  10 +
  11 +
  12 +
  13 + <TextView
  14 + android:text="@string/hh_sdk_image_name"
  15 + android:id="@+id/bottom_dialog_list_item_title"
  16 + android:layout_width="wrap_content"
  17 + android:layout_height="wrap_content"
  18 + android:ellipsize="middle"
  19 + android:textColor="@color/hp_black_33"
  20 + android:textSize="16.0sp"
  21 + android:singleLine="true"
  22 + />
  23 +
  24 +
  25 +</LinearLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:id="@+id/calling_content"
  5 + android:layout_height="match_parent">
  6 +
  7 +
  8 +
  9 +
  10 +
  11 +</FrameLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent"
  5 + android:background="@color/hh_certificate_bg">
  6 +
  7 + <ImageView
  8 + android:id="@+id/hh_doctor_certificate"
  9 + android:layout_width="match_parent"
  10 + android:layout_height="match_parent" />
  11 +
  12 +
  13 + <RelativeLayout
  14 + android:id="@+id/hh_loading_state_layout"
  15 + android:layout_width="match_parent"
  16 + android:layout_height="match_parent">
  17 +
  18 +
  19 + <LinearLayout
  20 + android:layout_width="match_parent"
  21 + android:layout_height="wrap_content"
  22 + android:layout_centerInParent="true"
  23 + android:gravity="center_horizontal"
  24 + android:orientation="vertical">
  25 +
  26 +
  27 + <ImageView
  28 + android:layout_width="wrap_content"
  29 + android:layout_height="wrap_content"
  30 + android:contentDescription="@string/hh_sdk_image_name"
  31 + />
  32 +
  33 +
  34 + <LinearLayout
  35 + android:id="@+id/hh_text_state_layout"
  36 + android:layout_width="wrap_content"
  37 + android:layout_height="wrap_content"
  38 + android:layout_marginTop="16dp"
  39 + android:gravity="center_vertical">
  40 +
  41 +
  42 + <TextView
  43 + android:id="@+id/hh_state_text"
  44 + android:layout_width="wrap_content"
  45 + android:layout_height="wrap_content"
  46 + android:layout_gravity="center_vertical"
  47 + android:textColor="@android:color/white"
  48 + android:textSize="14.0sp" />
  49 +
  50 +
  51 + <com.hhmedic.android.sdk.uikit.widget.HHLoadingView
  52 + android:id="@+id/hh_loading"
  53 + android:layout_width="wrap_content"
  54 + android:layout_height="wrap_content"
  55 + android:layout_marginStart="10dp" />
  56 +
  57 +
  58 + </LinearLayout>
  59 +
  60 +
  61 + </LinearLayout>
  62 +
  63 + </RelativeLayout>
  64 +
  65 +
  66 + <ImageView
  67 + android:id="@+id/hh_certificate_close"
  68 + android:layout_width="wrap_content"
  69 + android:layout_height="wrap_content"
  70 + android:layout_alignParentEnd="true"
  71 + android:contentDescription="@string/hh_sdk_image_name"
  72 + android:paddingStart="16dp"
  73 + android:paddingTop="28dp"
  74 + android:paddingEnd="20dp"
  75 + android:paddingBottom="16dp"
  76 + android:src="@drawable/hh_close_icon_white" />
  77 +
  78 +
  79 +</RelativeLayout>
  80 +
  81 +
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:id="@+id/bottom_control"
  4 + android:layout_width="match_parent"
  5 + android:layout_height="match_parent">
  6 +
  7 +
  8 + <RelativeLayout
  9 + android:id="@+id/bottom_menu_layout"
  10 + android:layout_width="match_parent"
  11 + android:layout_height="wrap_content"
  12 + android:layout_alignParentBottom="true"
  13 + android:background="@drawable/hh_av_bottom_bg"
  14 + android:paddingLeft="@dimen/hh_horizontal_margin"
  15 + android:paddingRight="@dimen/hh_horizontal_margin">
  16 +
  17 +
  18 + <LinearLayout
  19 + android:id="@+id/photos_layout"
  20 + android:layout_width="wrap_content"
  21 + android:layout_height="wrap_content"
  22 + android:layout_alignParentStart="true"
  23 + android:gravity="center_horizontal"
  24 + android:orientation="vertical">
  25 +
  26 +
  27 + <View
  28 + android:id="@+id/empty_view_for_bottom"
  29 + android:layout_width="1dp"
  30 + android:layout_height="100dp" />
  31 +
  32 + <com.hhmedic.android.sdk.module.video.widget.chat.ChatToolsView
  33 + android:id="@+id/tools"
  34 + android:layout_width="wrap_content"
  35 + android:layout_height="wrap_content"
  36 + android:layout_marginBottom="20dp"
  37 + android:visibility="gone" />
  38 +
  39 +
  40 + <ImageView
  41 + android:id="@+id/showTools"
  42 + android:layout_width="wrap_content"
  43 + android:layout_height="wrap_content"
  44 + android:layout_marginBottom="20dp"
  45 + android:background="@drawable/hh_av_tools_bg"
  46 + android:contentDescription="@string/hh_sdk_image_name"
  47 + android:paddingStart="13dp"
  48 + android:paddingEnd="13dp"
  49 + android:src="@drawable/hp_avchat_tools_more" />
  50 +
  51 + <com.hhmedic.android.sdk.module.video.widget.chat.UploadView
  52 + android:id="@+id/upload"
  53 + android:layout_width="64dp"
  54 + android:layout_height="64dp"
  55 + android:layout_marginTop="14dp" />
  56 +
  57 + <Button
  58 + android:id="@+id/photos"
  59 + style="@style/hh_av_btn"
  60 + android:layout_width="wrap_content"
  61 + android:layout_height="wrap_content"
  62 + android:layout_marginTop="18dp"
  63 + android:drawableTop="@drawable/hh_av_chat_voice_bg"
  64 + android:text="@string/hp_video_camera_title" />
  65 +
  66 +
  67 + </LinearLayout>
  68 +
  69 +
  70 + <LinearLayout
  71 +
  72 + android:id="@+id/center"
  73 + android:layout_width="wrap_content"
  74 + android:layout_height="wrap_content"
  75 + android:layout_alignBottom="@+id/photos_layout"
  76 + android:layout_centerHorizontal="true"
  77 + android:gravity="center_horizontal"
  78 + android:orientation="vertical">
  79 +
  80 +
  81 + <TextView
  82 + android:id="@+id/time_label"
  83 + android:layout_width="wrap_content"
  84 + android:layout_height="wrap_content"
  85 + android:layout_marginTop="@dimen/hh_vertical_large"
  86 + android:textColor="@android:color/white"
  87 + android:textSize="@dimen/hp_video_menu_text_font" />
  88 +
  89 +
  90 + <Button
  91 +
  92 + android:id="@+id/hand_up"
  93 + style="@style/hh_av_btn"
  94 + android:layout_width="wrap_content"
  95 + android:layout_height="wrap_content"
  96 + android:layout_marginTop="14dp"
  97 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  98 + android:text="@string/hh_av_hangup_btn" />
  99 +
  100 +
  101 + </LinearLayout>
  102 +
  103 +
  104 + <LinearLayout
  105 + android:id="@+id/switch_layout"
  106 + android:layout_width="wrap_content"
  107 + android:layout_height="wrap_content"
  108 + android:layout_alignBottom="@+id/photos_layout"
  109 + android:layout_alignParentEnd="true"
  110 + android:gravity="center_horizontal"
  111 + android:orientation="vertical">
  112 +
  113 +
  114 + <Button
  115 + android:id="@+id/change_doctor"
  116 + style="@style/hh_av_btn"
  117 + android:layout_width="wrap_content"
  118 + android:layout_height="wrap_content"
  119 + android:layout_marginBottom="4dp"
  120 + android:drawableTop="@drawable/hh_av_chat_change_doctor_icon"
  121 + android:text="@string/hh_av_change_doctor"
  122 + android:textColor="@drawable/hh_av_btn_text_color" />
  123 +
  124 +
  125 + <Button
  126 + android:id="@+id/change"
  127 + style="@style/hh_av_btn"
  128 + android:layout_width="wrap_content"
  129 + android:layout_height="wrap_content"
  130 + android:layout_marginTop="14dp"
  131 + android:drawableTop="@drawable/hh_av_chat_change_camera_bg"
  132 + android:text="@string/hh_av_change_camera"
  133 + android:textColor="@drawable/hh_av_btn_text_color" />
  134 +
  135 +
  136 + <Button
  137 + android:id="@+id/showJob"
  138 + style="@style/hh_av_btn"
  139 + android:layout_width="wrap_content"
  140 + android:layout_height="wrap_content"
  141 + android:drawablePadding="2dp"
  142 + android:text="@string/hp_doctor_job_title"
  143 + android:textColor="@android:color/white"
  144 + android:visibility="gone" />
  145 +
  146 +
  147 + </LinearLayout>
  148 +
  149 +
  150 + </RelativeLayout>
  151 +
  152 +
  153 + <ImageView
  154 + android:id="@+id/watermark"
  155 + android:layout_width="match_parent"
  156 + android:layout_height="wrap_content"
  157 + android:layout_marginStart="@dimen/normal_margin"
  158 + android:layout_marginTop="@dimen/hh_chat_water_layout_top"
  159 + android:layout_marginEnd="122dp"
  160 + android:contentDescription="@string/hh_sdk_image_name"
  161 + android:scaleType="fitStart" />
  162 +
  163 +
  164 + <com.hhmedic.android.sdk.module.video.widget.chat.ChatTipView
  165 + android:id="@+id/hh_chat_tip"
  166 + android:layout_width="wrap_content"
  167 + android:layout_height="wrap_content"
  168 + android:layout_centerInParent="true" />
  169 +
  170 +</RelativeLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:id="@+id/connect_layout"
  4 + android:layout_width="wrap_content"
  5 + android:layout_height="40dp"
  6 + android:layout_centerInParent="true"
  7 + android:background="@drawable/hp_tips_bg"
  8 + android:gravity="center"
  9 + android:paddingStart="10dp"
  10 + android:paddingEnd="10dp">
  11 +
  12 +
  13 + <TextView
  14 + android:id="@+id/tips"
  15 + android:layout_width="wrap_content"
  16 + android:layout_height="wrap_content"
  17 + android:text="@string/hh_video_connect_str"
  18 + android:paddingLeft="10dp"
  19 + android:paddingRight="10dp"
  20 + android:textColor="@android:color/white"
  21 + android:textSize="15.0sp" />
  22 +
  23 +
  24 +<!-- <com.hhmedic.android.sdk.uikit.widget.WaitView-->
  25 +<!-- android:id="@+id/connect_wait"-->
  26 +<!-- android:layout_width="20dp"-->
  27 +<!-- android:visibility="gone"-->
  28 +<!-- android:layout_height="wrap_content"-->
  29 +<!-- android:layout_marginStart="@dimen/dp_6"-->
  30 +<!-- android:textColor="@android:color/white" />-->
  31 +
  32 +
  33 +</LinearLayout>
  34 +
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:orientation="vertical" android:layout_width="wrap_content"
  4 + android:background="@drawable/hh_av_tools_bg"
  5 + android:paddingStart="8dp"
  6 + android:paddingEnd="8dp"
  7 + android:layout_height="wrap_content">
  8 +
  9 + <LinearLayout
  10 + android:layout_gravity="center_horizontal"
  11 + android:id="@+id/job_icon_layout"
  12 + style="@style/hp_video_menu_layout"
  13 + android:layout_width="wrap_content"
  14 + android:layout_height="wrap_content">
  15 +
  16 +
  17 + <ImageView
  18 + android:src="@drawable/hp_doctor_job_icon"
  19 + android:layout_width="wrap_content"
  20 + android:layout_height="wrap_content"
  21 + android:contentDescription="@string/hh_sdk_image_name" />
  22 +
  23 +
  24 + <TextView
  25 + android:text="@string/hp_doctor_job_title"
  26 + style="@style/hp_video_menu_text"
  27 + android:layout_width="wrap_content"
  28 + android:layout_height="wrap_content" />
  29 +
  30 +
  31 + </LinearLayout>
  32 +
  33 +
  34 +
  35 + <LinearLayout
  36 + android:layout_gravity="center_horizontal"
  37 + android:id="@+id/flash_layout"
  38 + style="@style/hp_video_menu_layout"
  39 + android:layout_width="wrap_content"
  40 + android:layout_height="wrap_content">
  41 +
  42 +
  43 + <ImageView
  44 + android:id="@+id/open_result"
  45 + android:src="@drawable/hp_flash_close"
  46 + android:layout_width="wrap_content"
  47 + android:layout_height="wrap_content"
  48 + android:contentDescription="@string/hh_sdk_image_name" />
  49 +
  50 +
  51 + <TextView
  52 + android:text="@string/hp_flash_title"
  53 + style="@style/hp_video_menu_text"
  54 + android:layout_width="wrap_content"
  55 + android:layout_height="wrap_content" />
  56 +
  57 +
  58 + </LinearLayout>
  59 +
  60 +
  61 +
  62 + <ImageView
  63 + android:id="@+id/close"
  64 + android:layout_marginTop="10dp"
  65 + android:src="@drawable/hp_avchat_tools_more_open"
  66 + android:layout_gravity="center_horizontal"
  67 + android:layout_width="wrap_content"
  68 + android:layout_height="wrap_content"
  69 + android:contentDescription="@string/hh_sdk_image_name" />
  70 +
  71 +
  72 +</LinearLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout
  3 + xmlns:android="http://schemas.android.com/apk/res/android"
  4 + android:layout_width="match_parent"
  5 + android:background="@drawable/hp_black_bg"
  6 + android:layout_height="match_parent">
  7 +
  8 +
  9 + <FrameLayout
  10 + android:id="@+id/large_size_preview"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent"
  13 + android:gravity="center"
  14 + android:layout_centerInParent="true"
  15 + android:background="@drawable/hp_black_bg"
  16 + android:orientation="horizontal" />
  17 +
  18 +
  19 + <TextView
  20 + android:id="@+id/notificationLayout"
  21 + android:layout_width="match_parent"
  22 + android:layout_height="match_parent"
  23 + android:layout_gravity="center"
  24 + android:gravity="center"
  25 + android:shadowDy="1"
  26 + android:shadowRadius="1"
  27 + android:textSize="16sp"
  28 + />
  29 +
  30 +</RelativeLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent" android:layout_height="match_parent">
  4 +
  5 +
  6 +
  7 +
  8 + <ImageView
  9 + android:id="@+id/icon"
  10 + android:scaleType="centerCrop"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent"
  13 + android:contentDescription="@string/hh_sdk_image_name" />
  14 +
  15 +
  16 +
  17 + <LinearLayout
  18 + android:paddingTop="@dimen/dp_10"
  19 + android:background="@color/hp_alpha_black"
  20 + android:layout_above="@+id/bottom_layout"
  21 + android:orientation="vertical"
  22 + android:paddingBottom="@dimen/dp_10"
  23 + android:layout_width="match_parent"
  24 + android:layout_height="wrap_content">
  25 +
  26 + <TextView
  27 + android:layout_gravity="center_horizontal"
  28 + android:id="@+id/name"
  29 + android:text="@string/hh_sdk_image_name"
  30 + android:textSize="22sp"
  31 + android:textColor="@android:color/white"
  32 + android:layout_width="wrap_content"
  33 + android:layout_height="wrap_content" />
  34 +
  35 +
  36 +
  37 + <RelativeLayout
  38 + android:layout_marginTop="@dimen/dp_6"
  39 + android:layout_width="match_parent"
  40 + android:layout_height="wrap_content">
  41 +
  42 +
  43 + <TextView
  44 + android:id="@+id/des"
  45 + android:layout_centerHorizontal="true"
  46 + android:text="@string/hh_av_accept_show_hint"
  47 + android:textSize="13.0sp"
  48 + android:textColor="@android:color/white"
  49 + android:layout_width="wrap_content"
  50 + android:layout_height="wrap_content" />
  51 +
  52 +
  53 + <com.hhmedic.android.sdk.uikit.widget.WaitView
  54 + android:layout_width="wrap_content"
  55 + android:layout_toEndOf="@+id/des"
  56 + android:textColor="@android:color/white"
  57 + android:layout_marginStart="@dimen/dp_6"
  58 + android:id="@+id/wait"
  59 + android:layout_height="wrap_content" />
  60 +
  61 +
  62 +
  63 + </RelativeLayout>
  64 +
  65 +
  66 +
  67 +
  68 +
  69 +
  70 + </LinearLayout>
  71 +
  72 +
  73 +
  74 + <FrameLayout
  75 + android:background="@color/hp_alpha_black"
  76 + android:paddingLeft="@dimen/hh_horizontal_margin"
  77 + android:paddingRight="@dimen/hh_horizontal_margin"
  78 + android:id="@+id/bottom_layout"
  79 + android:layout_alignParentBottom="true"
  80 + android:layout_width="match_parent"
  81 + android:layout_height="wrap_content">
  82 +
  83 +
  84 +
  85 + <RelativeLayout
  86 + android:id="@+id/calling_bottom"
  87 + android:paddingRight="@dimen/hh_callback_padding"
  88 + android:paddingLeft="@dimen/hh_callback_padding"
  89 + android:visibility="gone"
  90 + android:layout_width="match_parent"
  91 + android:layout_height="wrap_content">
  92 +
  93 +
  94 + <Button
  95 + android:id="@+id/refuse"
  96 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  97 + style="@style/hh_av_btn"
  98 + android:text="@string/hh_av_refuse_btn"
  99 + android:layout_width="wrap_content"
  100 + android:layout_height="wrap_content" />
  101 +
  102 +
  103 + <Button
  104 + android:id="@+id/accept"
  105 + android:text="@string/hh_av_accept_btn"
  106 + android:layout_alignParentEnd="true"
  107 + android:drawableTop="@drawable/hh_av_accept_btn_bg"
  108 + style="@style/hh_av_btn"
  109 + android:layout_width="wrap_content"
  110 + android:layout_height="wrap_content">
  111 + <requestFocus/>
  112 + </Button>
  113 +
  114 +
  115 + <!-- 多人视频 中间状态 -->
  116 +
  117 + <Button
  118 + android:visibility="gone"
  119 + android:layout_centerHorizontal="true"
  120 + android:id="@+id/cancel_multi"
  121 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  122 + style="@style/hh_av_btn"
  123 + android:text="@string/hh_cancel"
  124 + android:layout_width="wrap_content"
  125 + android:layout_height="wrap_content" />
  126 +
  127 +
  128 + </RelativeLayout>
  129 +
  130 +
  131 + <Button
  132 + android:layout_gravity="center_horizontal"
  133 + android:id="@+id/cancel"
  134 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  135 + style="@style/hh_av_btn"
  136 + android:text="@string/hh_cancel"
  137 + android:layout_width="wrap_content"
  138 + android:layout_height="wrap_content" />
  139 +
  140 +
  141 + </FrameLayout>
  142 +
  143 +
  144 +
  145 +
  146 +</RelativeLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:background="#ff282828"
  4 + android:layout_width="match_parent" android:layout_height="match_parent">
  5 +
  6 +
  7 +
  8 + <ImageView
  9 + android:id="@+id/expert_icon"
  10 + android:layout_marginTop="120dp"
  11 + android:layout_centerHorizontal="true"
  12 + android:layout_width="190dp"
  13 + android:layout_height="190dp"
  14 + android:contentDescription="@string/hh_sdk_image_name" />
  15 +
  16 +
  17 +
  18 +
  19 + <TextView
  20 + android:layout_below="@+id/expert_icon"
  21 + android:layout_centerHorizontal="true"
  22 + android:id="@+id/expert_name"
  23 + android:layout_marginTop="12dp"
  24 + android:text="@string/hh_sdk_image_name"
  25 + android:textSize="22sp"
  26 + android:textColor="@android:color/white"
  27 + android:layout_width="wrap_content"
  28 + android:layout_height="wrap_content" />
  29 +
  30 +
  31 +
  32 + <RelativeLayout
  33 + android:layout_below="@+id/expert_name"
  34 + android:layout_centerHorizontal="true"
  35 + android:layout_marginTop="@dimen/dp_6"
  36 + android:layout_width="match_parent"
  37 + android:layout_height="wrap_content">
  38 +
  39 +
  40 + <TextView
  41 + android:id="@+id/expert_des"
  42 + android:layout_centerHorizontal="true"
  43 + android:text="@string/hh_av_accept_show_hint"
  44 + android:textSize="13.0sp"
  45 + android:textColor="@android:color/white"
  46 + android:layout_width="wrap_content"
  47 + android:layout_height="wrap_content" />
  48 +
  49 +
  50 + <com.hhmedic.android.sdk.uikit.widget.WaitView
  51 + android:layout_width="wrap_content"
  52 + android:layout_toEndOf="@+id/expert_des"
  53 + android:textColor="@android:color/white"
  54 + android:layout_marginStart="@dimen/dp_6"
  55 + android:id="@+id/expert_wait"
  56 + android:layout_height="wrap_content" />
  57 +
  58 +
  59 +
  60 + </RelativeLayout>
  61 +
  62 +
  63 +
  64 + <RelativeLayout
  65 + android:layout_alignParentBottom="true"
  66 + android:paddingEnd="@dimen/hh_callback_padding"
  67 + android:paddingStart="@dimen/hh_callback_padding"
  68 + android:layout_width="match_parent"
  69 + android:layout_height="wrap_content">
  70 +
  71 +
  72 + <Button
  73 + android:id="@+id/expert_refuse"
  74 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  75 + style="@style/hh_av_btn"
  76 + android:text="@string/hh_av_refuse_btn"
  77 + android:focusedByDefault="false"
  78 + android:layout_width="wrap_content"
  79 + android:layout_height="wrap_content">
  80 + </Button>
  81 +
  82 +
  83 + <Button
  84 + android:id="@+id/expert_accept"
  85 + android:text="@string/hh_av_accept_btn"
  86 + android:layout_alignParentEnd="true"
  87 + android:drawableTop="@drawable/hh_av_accept_btn_bg"
  88 + style="@style/hh_av_btn"
  89 + android:focusedByDefault="true"
  90 + android:layout_width="wrap_content"
  91 + android:layout_height="wrap_content">
  92 + <requestFocus/>
  93 + </Button>
  94 +
  95 +
  96 + </RelativeLayout>
  97 +
  98 +
  99 +
  100 +</RelativeLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent">
  5 +
  6 +
  7 +
  8 +
  9 + <ImageView
  10 + android:id="@+id/lineup_ad"
  11 + android:layout_width="match_parent"
  12 + android:scaleType="centerCrop"
  13 + android:layout_height="match_parent"
  14 + android:contentDescription="@string/hh_sdk_image_name" />
  15 +
  16 +
  17 + <LinearLayout
  18 + android:layout_alignParentBottom="true"
  19 + android:paddingTop="@dimen/dp_10"
  20 + android:background="@color/hp_alpha_black"
  21 + android:orientation="vertical"
  22 + android:paddingBottom="@dimen/dp_10"
  23 + android:layout_width="match_parent"
  24 + android:layout_height="wrap_content">
  25 +
  26 +
  27 +
  28 + <TextView
  29 + android:layout_marginTop="@dimen/dp_10"
  30 + android:id="@+id/lineup_tips"
  31 + android:layout_gravity="center_horizontal"
  32 + android:text="@string/hp_call_wait_str"
  33 + android:textSize="16sp"
  34 + android:textColor="@android:color/white"
  35 + android:layout_width="wrap_content"
  36 + android:layout_height="wrap_content" />
  37 +
  38 +
  39 + <com.hhmedic.android.sdk.uikit.widget.WaitView
  40 + android:layout_width="wrap_content"
  41 + android:layout_marginTop="@dimen/dp_6"
  42 + android:textColor="@android:color/white"
  43 + android:layout_marginStart="@dimen/dp_6"
  44 + android:id="@+id/wait"
  45 + android:layout_gravity="center_horizontal"
  46 + android:layout_height="wrap_content" />
  47 +
  48 +
  49 +
  50 + <Button
  51 + android:layout_gravity="center_horizontal"
  52 + android:id="@+id/cancel"
  53 + android:drawableTop="@drawable/hh_av_refuse_btn_bg"
  54 + style="@style/hh_av_btn"
  55 + android:text="@string/hh_cancel"
  56 + android:layout_width="wrap_content"
  57 + android:layout_height="wrap_content" />
  58 +
  59 +
  60 + </LinearLayout>
  61 +
  62 +
  63 +
  64 +
  65 +
  66 +
  67 +
  68 +
  69 +
  70 +
  71 +</RelativeLayout>
  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 + android:id="@+id/toolbar_layout"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="wrap_content"
  7 + android:orientation="vertical">
  8 +
  9 + <androidx.appcompat.widget.Toolbar
  10 + android:id="@+id/toolbar"
  11 + app:titleTextColor="@android:color/black"
  12 + android:layout_width="match_parent"
  13 + android:layout_height="46dp"
  14 + android:background="@android:color/white"
  15 + app:theme="@style/HHUI.Toolbar"
  16 + app:titleTextAppearance="@style/HHUI.Toolbar.TitleText"
  17 + />
  18 +
  19 +
  20 + <View style="@style/hh_sdk_line" />
  21 +
  22 +</LinearLayout>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<merge xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent">
  5 + <!--<LinearLayout-->
  6 + <!--android:id="@+id/contentWrap"-->
  7 + <!--style="@style/hhui_tip_dialog_wrap"-->
  8 + <!--android:orientation="vertical"/>-->
  9 +
  10 + <LinearLayout android:id="@+id/contentWrap"
  11 + android:orientation="vertical"
  12 + style="@style/hhui_tip_dialog_wrap"/>
  13 +
  14 +</merge>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<menu xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto">
  4 +
  5 + <item
  6 + android:id="@+id/close"
  7 + app:showAsAction="always"
  8 + android:title="关闭" />
  9 +
  10 +</menu>
No preview for this file type
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 +
  5 + <attr name="hhui_content_padding_horizontal" format="dimension"/> <!-- 已废弃 -->
  6 + <attr name="hhui_content_spacing_horizontal" format="dimension"/> <!-- margin 和 padding 等使用的内容通用水平间距 -->
  7 +
  8 + <attr name="hhui_dialog_min_width" format="dimension"/>
  9 + <attr name="hhui_dialog_max_width" format="dimension"/>
  10 + <attr name="hhui_dialog_bg" format="reference"/>
  11 + <attr name="hhui_dialog_margin_vertical" format="dimension"/>
  12 + <attr name="hhui_dialog_padding_horizontal" format="dimension"/>
  13 + <attr name="hhui_dialog_background_dim_amount" format="float"/>
  14 + <attr name="hhui_dialog_wrapper_style" format="reference"/>
  15 + <attr name="hhui_dialog_title_style" format="reference"/>
  16 + <attr name="hhui_dialog_action_container_style" format="reference"/>
  17 + <attr name="hhui_dialog_action_style" format="reference"/>
  18 + <attr name="hhui_dialog_message_content_style" format="reference"/>
  19 + <attr name="hhui_dialog_edit_content_style" format="reference"/>
  20 + <attr name="hhui_dialog_menu_container_style" format="reference"/>
  21 + <attr name="hhui_dialog_menu_item_style" format="reference"/>
  22 +
  23 + <!-- tips -->
  24 + <attr name="hhui_tip_dialog_bg" format="reference"/>
  25 + <attr name="hhui_tip_dialog_min_width" format="dimension"/>
  26 + <attr name="hhui_tip_dialog_min_height" format="dimension"/>
  27 + <attr name="hhui_tip_dialog_padding_vertical" format="dimension"/>
  28 + <attr name="hhui_tip_dialog_padding_horizontal" format="dimension"/>
  29 + <attr name="hhui_tip_dialog_margin_horizontal" format="dimension"/>
  30 +
  31 +
  32 +
  33 +
  34 + <declare-styleable name="HHUILoadingView">
  35 + <attr name="hhui_loading_view_size" format="dimension"/>
  36 + <attr name="android:color"/>
  37 + </declare-styleable>
  38 + <attr name="HHUILoadingStyle" format="reference"/>
  39 +
  40 +
  41 +
  42 +
  43 +
  44 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 +
  5 + <color name="hp_alpha_black">#80000000</color>
  6 +
  7 + <color name="hp_black_33">#ff333333</color>
  8 +
  9 + <color name="hp_black_66">#ff666666</color>
  10 +
  11 + <color name="hp_black_64">#ff646464</color>
  12 +
  13 +
  14 + <color name="hp_black_99">#ff999999</color>
  15 +
  16 + <color name="hp_black_96">#ff969696</color>
  17 +
  18 +
  19 + <color name="hhui_config_color_white">#ffffff</color>
  20 +
  21 + <color name="hhui_config_color_75_pure_black">#C0000000</color>
  22 +
  23 + <color name="hhui_drawable_color_list_pressed">#DEE0E2</color>
  24 +
  25 + <color name="hhui_drawable_color_list_separator">#DEE0E2</color>
  26 +
  27 +
  28 + <color name="hp_sdk_blue">#ff0592f5</color>
  29 +
  30 +
  31 + <color name="hp_sdk_alpha_black">#80000000</color>
  32 +
  33 + <color name="hh_sdk_line_color">#ffd2d2d2</color>
  34 +
  35 + <color name="hh_hint_color">#797D86</color>
  36 +
  37 + <color name="hh_certificate_bg">#66000000</color>
  38 +
  39 + <color name="hh_ui_bg">#fff3f3f3</color>
  40 +
  41 + <color name="hp_hint">#ffaaaaaa</color>
  42 +
  43 + <color name="hh_red_tips">#ffEC1313</color>
  44 +
  45 +
  46 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 +
  5 + <dimen name="dp_10">10.0dp</dimen>
  6 +
  7 + <dimen name="dp_6">6.0dp</dimen>
  8 +
  9 + <dimen name="hh_av_profile_height">64dp</dimen>
  10 +
  11 + <dimen name="normal_margin">8.0dp</dimen>
  12 +
  13 + <dimen name="hh_horizontal_margin">14.0dp</dimen>
  14 +
  15 + <dimen name="hp_video_small_height">135.0dp</dimen>
  16 +
  17 + <dimen name="hp_video_small_width">96.0dp</dimen>
  18 +
  19 + <dimen name="hh_vertical_large">40dp</dimen>
  20 +
  21 + <dimen name="hh_vertical_medium">30dp</dimen>
  22 +
  23 + <dimen name="hh_action_bar_height">46dp</dimen>
  24 +
  25 + <dimen name="hh_radius">4dp</dimen>
  26 +
  27 + <dimen name="uikit_horizontal_margin">14.0dp</dimen>
  28 +
  29 + <dimen name="hh_bottom_sheet_list_item_height">56.0dp</dimen>
  30 +
  31 + <dimen name="hh_bottom_sheet_title_height">56.0dp</dimen>
  32 +
  33 + <dimen name="hh_bottom_sheet_grid_padding_vertical">12.0dp</dimen>
  34 +
  35 + <dimen name="hh_bottom_sheet_grid_line_padding_horizontal">12.0dp</dimen>
  36 +
  37 + <dimen name="hh_bottom_sheet_grid_line_vertical_space">0dp</dimen>
  38 +
  39 + <dimen name="hh_bottom_sheet_grid_item_mini_width">84.0dp</dimen>
  40 +
  41 + <dimen name="hh_bottom_sheet_grid_item_icon_size">56.0dp</dimen>
  42 +
  43 + <dimen name="hh_list_divider_height">1px</dimen>
  44 +
  45 + <!-- 全局统一的界面左右间距,例如列表分隔线inset -->
  46 + <dimen name="hhui_content_padding_horizontal">@dimen/hhui_content_spacing_horizontal</dimen> <!-- 已废弃 -->
  47 + <dimen name="hhui_content_spacing_horizontal">16dp</dimen> <!-- margin 和 padding 等使用的内容通用水平间距 -->
  48 +
  49 +
  50 + <dimen name="hp_video_menu_text_font">12.0sp</dimen>
  51 +
  52 + <dimen name="hh_notify_carton_font">14.0sp</dimen>
  53 +
  54 + <dimen name="hh_chat_small_layout_top">36.0dp</dimen>
  55 +
  56 + <dimen name="hh_chat_water_layout_top">34.0dp</dimen>
  57 +
  58 + <dimen name="hp_chat_layout_padding">10dp</dimen>
  59 +
  60 +
  61 + <dimen name="hh_setting_item_height">50dp</dimen>
  62 +
  63 + <dimen name="hh_callback_padding">26dp</dimen>
  64 +
  65 + <dimen name="hp_content_padding">10dp</dimen>
  66 +
  67 + <dimen name="hp_content_font_padding">4dp</dimen>
  68 +
  69 + <dimen name="hh_line_height">0.5dp</dimen>
  70 +
  71 + <dimen name="hh_vertical_margin">14.0dp</dimen>
  72 +
  73 + <dimen name="hh_tablet_slogan_size">40sp</dimen>
  74 +
  75 + <dimen name="hh_sdk_dialog_margin_h">40dp</dimen>
  76 +
  77 + <dimen name="hh_sdk_dialog_margin_v">70dp</dimen>
  78 +
  79 +
  80 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 + <string-array name="hp_sdk_select_photo">
  5 +
  6 +
  7 +
  8 + <item>拍照</item>
  9 +
  10 + <item>从图库选择</item>
  11 +
  12 + <item>取消</item>
  13 +
  14 + </string-array>
  15 +
  16 +
  17 + <string name="hh_sdk_image_name">contentDescription</string>
  18 +
  19 + <string name="hp_line_up_timeout">目前医生比较繁忙,请稍候重试。</string>
  20 +
  21 + <string name="hh_av_accept_show_hint">邀请你视频</string>
  22 +
  23 + <string name="hh_av_change_camera">切换摄像头</string>
  24 +
  25 + <string name="hh_av_change_doctor">更换医生</string>
  26 +
  27 + <string name="hh_upload_img_tip">微信扫描二维码\n上传照片</string>
  28 +
  29 + <string name="hh_av_accept_btn">接听</string>
  30 +
  31 + <string name="hh_av_refuse_btn">拒绝</string>
  32 +
  33 + <string name="hh_av_hangup_btn">挂断</string>
  34 +
  35 + <string name="hp_video_camera_title">拍照</string>
  36 +
  37 + <string name="hp_call_wait_str">目前咨询人数较多,感谢耐心等待</string>
  38 +
  39 + <string name="hh_cancel">取消</string>
  40 +
  41 + <string name="hh_sdk_ok">确定</string>
  42 +
  43 + <string name="hh_change_doctor_ok">确定更换</string>
  44 +
  45 + <string name="hh_sdk_back">返回</string>
  46 +
  47 + <string name="hh_av_switch_audio_model">已切换到语音聊天</string>
  48 +
  49 + <string name="hp_doctor_job_title">执业医师资格证</string>
  50 +
  51 + <string name="hp_flash_title">闪光灯</string>
  52 +
  53 + <string name="hp_address_title">地址</string>
  54 +
  55 + <string name="hh_av_waiting_accept">呼叫中</string>
  56 +
  57 + <string name="hh_av_other_platform">已在其他设备接听</string>
  58 +
  59 + <string name="hh_av_broke">通话已结束</string>
  60 +
  61 + <string name="hh_av_remote_cancel">对方取消</string>
  62 +
  63 + <string name="hh_av_waiting_connect">拨号中</string>
  64 +
  65 + <string name="hp_call_permission_tips">您拒绝了视频需要的相机和录音权限,无法视频</string>
  66 +
  67 + <string name="hp_local_phone_call">本地电话,已自动为你挂断视频</string>
  68 +
  69 + <string name="hh_sdk_upload_tips">点击重新上传</string>
  70 +
  71 + <string name="hh_sdk_upload_success_tips">已上传</string>
  72 +
  73 +
  74 +
  75 +
  76 + <string name="hh_av_calling_net_broke_timeout">通话中,网络断开超时</string>
  77 +
  78 + <string name="hh_av_call_failed_offline">通话不可达,对方离线状态</string>
  79 +
  80 + <string name="hh_av_no_permission">暂无权限,请开通音视频服务</string>
  81 +
  82 + <string name="hh_av_other_error">未知错误</string>
  83 +
  84 + <string name="hh_av_calling_busy">对方正忙</string>
  85 +
  86 + <string name="hh_dev_tips">当前处在测试环境下</string>
  87 +
  88 + <string name="hh_video_connect_str">连接中</string>
  89 +
  90 +
  91 + <string name="net_poor_tip">当前网络质量较差</string>
  92 +
  93 +
  94 + <string name="hh_video_upload_error">点击重传</string>
  95 +
  96 +
  97 + <string name="hh_alert_change_doctor_tips">立即更换其他医生咨询,确定更换吗?【只可更换1次】</string>
  98 +
  99 + <string name="hh_alert_change_doctor_fail_tips">您已更换过医生,24小时内只可更换1次</string>
  100 +
  101 +
  102 + <string name="hh_error_tip_chat_connect_over_time">当前网络状态不佳,建议切换网络或稍后呼叫医生</string>
  103 +
  104 + <string name="hh_audio_record_error">目前无法视频,请在“系统设置”查看本应用的麦克风权限是否打开,打开后可正常通话。</string>
  105 +
  106 + <string name="hh_permission_tips">视频通话需要相机和录音权限才能进行,请立即设置</string>
  107 +
  108 +
  109 + <string name="hh_permission_alert_setting">设置</string>
  110 +
  111 + <string name="hh_multi_cancel_tips">%s取消呼叫</string>
  112 +
  113 + <string name="hh_multi_wait_doctor_join">医生接通中</string>
  114 + <string name="hh_multi_incoming_title">%s 邀请你视频咨询</string>
  115 +
  116 + <string name="hh_multi_hearer_state_title_leave">%s已断开连接</string>
  117 + <string name="hh_multi_hearer_state_title_leave_tips">%s已断开连接</string>
  118 +
  119 + <string name="hh_multi_hearer_state_title_busy_tips">%s拒绝接听</string>
  120 +
  121 + <string name="hh_multi_hearer_state_title_busy">%s已拒绝</string>
  122 +
  123 +
  124 +
  125 + <string name="hh_alert_i_known">我知道了</string>
  126 +
  127 + <string name="hh_call_dialog_title">请选择给谁咨询健康问题 </string>
  128 +
  129 + <string name="hh_call_protocol_str"> 同意《服务说明》咨询建议仅参考,如症状未缓解请到医院就诊</string>
  130 +
  131 + <string name="hh_call_protocol_alert">同意《服务说明》后可发起咨询</string>
  132 +
  133 +
  134 + <string name="hp_save">保存</string>
  135 +
  136 +
  137 +
  138 +
  139 +
  140 +
  141 +
  142 +
  143 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 +
  5 + <style name="hh_av_btn" parent="hh_btn_style">
  6 +
  7 + <item name="android:drawablePadding">@dimen/normal_margin</item>
  8 + <item name="android:textColor">@android:color/white</item>
  9 + <item name="android:textSize">@dimen/hp_video_menu_text_font</item>
  10 +
  11 + </style>
  12 +
  13 +
  14 + <style name="hh_job_btn" parent="hh_btn_style">
  15 +
  16 + <item name="android:drawablePadding">-8dp</item>
  17 + <item name="android:textColor">@android:color/white</item>
  18 + <item name="android:textSize">@dimen/hp_video_menu_text_font</item>
  19 +
  20 + </style>
  21 +
  22 +
  23 + <style name="hh_btn_style" parent="@style/Widget.AppCompat.Button.Borderless">
  24 +
  25 + </style>
  26 +
  27 +
  28 + <style name="hp_video_menu_layout">
  29 +
  30 + <item name="android:paddingTop">20.0dp</item>
  31 +
  32 + <item name="android:gravity">center_horizontal</item>
  33 +
  34 + <item name="android:orientation">vertical</item>
  35 +
  36 + </style>
  37 +
  38 +
  39 + <style name="hp_video_menu_text">
  40 +
  41 + <item name="android:textColor">@android:color/white</item>
  42 +
  43 + <item name="android:layout_marginTop">6dp</item>
  44 +
  45 + <item name="android:textSize">9.0sp</item>
  46 +
  47 + </style>
  48 +
  49 +
  50 +
  51 + <style name="HH_ChatTheme" parent="Theme.AppCompat.Light.NoActionBar">
  52 + <!-- Customize your theme here. -->
  53 + <item name="colorPrimary">@color/hhui_config_color_white</item>
  54 + <item name="colorPrimaryDark">@color/hhui_config_color_white</item>
  55 + <item name="colorAccent">@color/hhui_config_color_white</item>
  56 + <item name="colorControlNormal">@android:color/black</item>
  57 + <item name="buttonBarPositiveButtonStyle">@style/hh_positiveBtnStyle</item>
  58 + <item name="buttonBarNegativeButtonStyle">@style/hh_negativeBtnStyle</item>
  59 +
  60 + </style>
  61 +
  62 +
  63 + <style name="HH_Normal_Theme" parent="Theme.AppCompat.Light.NoActionBar">
  64 + <!-- Customize your theme here. -->
  65 + <item name="colorPrimary">@color/hhui_config_color_white</item>
  66 + <item name="colorPrimaryDark">@color/hhui_config_color_white</item>
  67 + <item name="colorAccent">@color/hp_sdk_blue</item>
  68 + <item name="colorControlNormal">@color/hp_sdk_blue</item>
  69 + <item name="buttonBarPositiveButtonStyle">@style/hh_positiveBtnStyle</item>
  70 + <item name="buttonBarNegativeButtonStyle">@style/hh_negativeBtnStyle</item>
  71 +
  72 + </style>
  73 +
  74 + <!--确定按钮样式-->
  75 + <style name="hh_positiveBtnStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
  76 + <item name="android:textColor">@color/hp_sdk_blue</item>
  77 + </style>
  78 +
  79 + <!--确定按钮样式-->
  80 + <style name="hh_negativeBtnStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
  81 + <item name="android:textColor">@color/hp_black_96</item>
  82 + </style>
  83 +
  84 + <style name="hhui_tip_dialog_wrap">
  85 + <item name="android:layout_width">wrap_content</item>
  86 + <item name="android:layout_height">wrap_content</item>
  87 + <item name="android:minWidth">120.dp</item>
  88 + <item name="android:minHeight">56.dp</item>
  89 + <item name="android:layout_gravity">center</item>
  90 + <item name="android:layout_marginLeft">20dp</item>
  91 + <item name="android:layout_marginRight">20dp</item>
  92 + <item name="android:gravity">center</item>
  93 + <item name="android:paddingLeft">16dp</item>
  94 + <item name="android:paddingRight">16dp</item>
  95 + <item name="android:paddingTop">24dp</item>
  96 + <item name="android:paddingBottom">24dp</item>
  97 + <item name="android:background">@drawable/hhui_tip_dialog_bg</item>
  98 + </style>
  99 +
  100 +
  101 + <style name="HHUI.TipDialog" parent="android:Theme.Dialog">
  102 + <item name="android:windowFrame">@null</item>
  103 + <item name="android:windowNoTitle">true</item>
  104 + <item name="android:windowBackground">@android:color/transparent</item>
  105 + <item name="android:backgroundDimEnabled">false</item>
  106 + <item name="android:windowIsFloating">true</item>
  107 + <item name="android:windowContentOverlay">@null</item>
  108 + </style>
  109 +
  110 +
  111 + <style name="HHUI.BottomSheet" parent="android:Theme.Dialog">
  112 + <item name="android:backgroundDimAmount">0.6</item>
  113 + <item name="android:windowNoTitle">true</item>
  114 + <item name="android:windowBackground">@android:color/transparent</item>
  115 + <item name="android:windowAnimationStyle">@null
  116 + </item><!-- 为了避免在有 NavigationBar 的手机上 Dialog 从 NavigationBar 底部上来。去掉 Dialog 的动画,使用 View 的动画。-->
  117 + <item name="android:layout_width">match_parent</item>
  118 + </style>
  119 +
  120 +
  121 + <style name="HHUI.Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
  122 + <item name="android:textSize">17sp</item>
  123 + <item name="android:textColor">@android:color/black</item>
  124 + </style>
  125 +
  126 +
  127 + <style name="HHUI.Toolbar" parent="Theme.AppCompat.Light">
  128 +
  129 + <item name="actionMenuTextColor">@android:color/black</item>
  130 + <item name="colorPrimary">@color/hhui_config_color_white</item>
  131 + <item name="colorPrimaryDark">@color/hhui_config_color_white</item>
  132 + <item name="colorControlNormal">@android:color/black</item>
  133 +
  134 + </style>
  135 +
  136 +
  137 + <style name="hh_sdk_line">
  138 +
  139 + <item name="android:layout_height">1px</item>
  140 + <item name="android:layout_width">match_parent</item>
  141 + <item name="android:background">@color/hh_sdk_line_color</item>
  142 +
  143 + </style>
  144 +
  145 +
  146 + <style name="hh_popupAnimation" mce_bogus="1" parent="android:Animation">
  147 + <item name="android:windowEnterAnimation">@anim/hh_pop_enter</item>
  148 + <item name="android:windowExitAnimation">@anim/hh_pop_exit</item>
  149 + </style>
  150 +
  151 +
  152 +
  153 + <style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
  154 + <item name="android:textSize">17sp</item>
  155 + <item name="android:textColor">@android:color/black</item>
  156 + </style>
  157 +
  158 +
  159 +
  160 + <style name="HH_PopupAnimation" parent="android:Animation" mce_bogus="1">
  161 + <item name="android:windowEnterAnimation">@anim/hh_pop_enter</item>
  162 + <item name="android:windowExitAnimation">@anim/hh_pop_exit</item>
  163 + </style>
  164 +
  165 +
  166 + <style name="hh_sdk_dialog" parent="Theme.AppCompat.Light.Dialog.Alert">
  167 +
  168 +
  169 + <item name="colorAccent">@color/hp_black_33</item>
  170 +
  171 + </style>
  172 +
  173 +
  174 + <style name="HH.Toolbar.Light" parent="HHUI.Toolbar">
  175 +
  176 + <item name="colorControlNormal">@android:color/white</item>
  177 +
  178 + <item name="actionMenuTextColor">@android:color/white</item>
  179 +
  180 + </style>
  181 +
  182 +
  183 +
  184 +
  185 +
  186 +
  187 + <style name="hh_normal_font">
  188 +
  189 + <item name="android:textSize">15.0sp</item>
  190 +
  191 + <item name="android:textColor">@color/hp_black_33</item>
  192 +
  193 + <item name="android:lineSpacingExtra">2dp</item>
  194 +
  195 + </style>
  196 +
  197 +
  198 +
  199 +
  200 +
  201 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 +
  4 + <style name="HHUI.Compat" parent="Theme.AppCompat.Light">
  5 + <item name="hhui_content_spacing_horizontal">20dp</item>
  6 + <item name="hhui_content_padding_horizontal">@dimen/hhui_content_spacing_horizontal</item>
  7 + <item name="hhui_dialog_min_width">260dp</item>
  8 + <item name="hhui_dialog_max_width">360dp</item>
  9 + <item name="hhui_dialog_bg">@drawable/hhui_dialog_bg</item>
  10 + <item name="hhui_dialog_margin_vertical">20dp</item>
  11 + <item name="hhui_dialog_padding_horizontal">24dp</item>
  12 + <item name="hhui_dialog_background_dim_amount">0.6</item>
  13 + <!--<item name="hhui_dialog_wrapper_style">@style/QMUI.Dialog.Wrapper</item>-->
  14 + <!--<item name="hhui_dialog_title_style">@style/QMUI.Dialog.Title</item>-->
  15 + <!--<item name="hhui_dialog_action_container_style">@style/QMUI.Dialog.ActionContainer</item>-->
  16 + <!--<item name="hhui_dialog_action_style">@style/QMUI.Dialog.Action</item>-->
  17 + <!--<item name="hhui_dialog_message_content_style">@style/QMUI.Dialog.MessageContent</item>-->
  18 + <!--<item name="hhui_dialog_edit_content_style">@style/QMUI.Dialog.EditContent</item>-->
  19 + <!--<item name="hhui_dialog_menu_container_style">@style/QMUI.Dialog.MenuContainer</item>-->
  20 + <!--<item name="hhui_dialog_menu_item_style">@style/QMUI.Dialog_MenuItem</item>-->
  21 +
  22 + <!-- tip -->
  23 + <item name="hhui_tip_dialog_bg">@drawable/hhui_tip_dialog_bg</item>
  24 + <item name="hhui_tip_dialog_min_width">120dp</item>
  25 + <item name="hhui_tip_dialog_min_height">56dp</item>
  26 + <item name="hhui_tip_dialog_margin_horizontal">?attr/hhui_content_spacing_horizontal</item>
  27 + <item name="hhui_tip_dialog_padding_vertical">12dp</item>
  28 + <item name="hhui_tip_dialog_padding_horizontal">?attr/hhui_content_padding_horizontal</item>
  29 +
  30 + </style>
  31 +
  32 +</resources>
  1 +<resources>
  2 +</resources>
  1 +<resources>
  2 +
  3 + <!-- Base application theme. -->
  4 + <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  5 + <!-- Customize your theme here. -->
  6 +
  7 + </style>
  8 +
  9 +
  10 +
  11 + <style name="hh_video_chat_style" parent="Theme.AppCompat.Light.NoActionBar">
  12 +
  13 +
  14 +
  15 + </style>
  16 +
  17 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<network-security-config>
  3 + <base-config cleartextTrafficPermitted="true" />
  4 +</network-security-config>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<paths>
  3 + <external-path
  4 + name="external_files"
  5 + path="." />
  6 +
  7 +
  8 + <root-path
  9 + name="root_path"
  10 + path="." />
  11 +
  12 + <cache-path
  13 + name="cache_path"
  14 + path="."/>
  15 +
  16 +</paths>
  1 +// Top-level build file where you can add configuration options common to all sub-projects/modules.
  2 +ext{
  3 + //这个标志打的是测试还是正式包
  4 + isDebug = true
  5 + //标志是否要打印log
  6 + isPrint = false
  7 +
  8 + isTV = false
  9 +
  10 + isSound = false
  11 +
  12 + useDNS = false
  13 +
  14 + sdkVersion = "3.0.6"
  15 +}
  16 +
  17 +buildscript {
  18 +
  19 + repositories {
  20 + google()
  21 + jcenter()
  22 +
  23 + }
  24 + dependencies {
  25 + classpath 'com.android.tools.build:gradle:3.5.0'
  26 + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
  27 + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
  28 + }
  29 +}
  30 +
  31 +allprojects {
  32 + repositories {
  33 + google()
  34 + jcenter()
  35 +
  36 + }
  37 +
  38 + repositories {
  39 + mavenCentral()
  40 + }
  41 +}
  42 +
  43 +task clean(type: Delete) {
  44 + delete rootProject.buildDir
  45 +}
  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=true
  18 +# Automatically convert third-party libraries to use AndroidX
  19 +android.enableJetifier=true
  20 +
  21 +android.injected.testOnly=false
No preview for this file type
  1 +#Thu Jul 23 11:51:04 CST 2020
  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.6.4-all.zip
  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" "$@"
  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
  1 +apply plugin: 'com.android.application'
  2 +
  3 +android {
  4 + compileSdkVersion 29
  5 + buildToolsVersion "29.0.2"
  6 +
  7 + defaultConfig {
  8 + applicationId "com.hhmedic.android.sdktest"
  9 + minSdkVersion 17
  10 + targetSdkVersion 29
  11 + versionCode 1
  12 + versionName "1.0"
  13 + multiDexEnabled true
  14 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  15 +
  16 + ndk {
  17 + //设置支持的SO库架构
  18 + abiFilters "armeabi-v7a"//, "x86","arm64-v8a","x86_64"
  19 + }
  20 + }
  21 +
  22 + buildTypes {
  23 + release {
  24 + minifyEnabled true
  25 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  26 + }
  27 +
  28 + debug {
  29 + minifyEnabled true
  30 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  31 + }
  32 + }
  33 +
  34 +
  35 + compileOptions {
  36 + sourceCompatibility JavaVersion.VERSION_1_8
  37 + targetCompatibility JavaVersion.VERSION_1_8
  38 + }
  39 +
  40 +}
  41 +
  42 +dependencies {
  43 + implementation fileTree(dir: 'libs', include: ['*.jar'])
  44 +
  45 + implementation project(':app')
  46 +// implementation 'com.hhmedic.android.sdk:hh_trtc_pingan_dev:3.0.6.12091027'
  47 +
  48 +
  49 + implementation 'com.github.bumptech.glide:glide:4.9.0'
  50 +
  51 + api 'com.hhmedic.android.sdk:okhttputils:1.0.0.12011739'
  52 +
  53 + implementation 'com.google.code.gson:gson:2.8.0'
  54 +
  55 + implementation 'androidx.appcompat:appcompat:1.2.0'
  56 + implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  57 + testImplementation 'junit:junit:4.12'
  58 + androidTestImplementation 'androidx.test.ext:junit:1.1.1'
  59 + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
  60 +
  61 + debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
  62 + releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
  63 +}
  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
  22 +
  23 +-ignorewarnings
  24 +-keepattributes *Annotation*
  25 +-keepattributes Exceptions
  26 +-keepattributes InnerClasses
  27 +-keepattributes Signature
  28 +-keepattributes SourceFile,LineNumberTable
  29 +
  30 +
  31 +#指定代码的压缩级别
  32 +-optimizationpasses 5
  33 +
  34 +#包明不混合大小写
  35 +-dontusemixedcaseclassnames
  36 +
  37 +#不去忽略非公共的库类
  38 +-dontskipnonpubliclibraryclasses
  39 +
  40 + #优化 不优化输入的类文件
  41 +-dontoptimize
  42 +
  43 + #预校验
  44 +-dontpreverify
  45 +
  46 + #混淆时是否记录日志
  47 +-verbose
  48 +
  49 + # 混淆时所采用的算法
  50 +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  51 +
  52 +#保护注解
  53 +-keepattributes *Annotation*
  1 +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"sdktest-release.apk","fullName":"release","baseName":"release"},"path":"sdktest-release.apk","properties":{}}]
No preview for this file type
  1 +package com.hhmedic.android.sdktest;
  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.hhmedic.android.sdktest", appContext.getPackageName());
  26 + }
  27 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + package="com.hhmedic.android.sdktest">
  4 +
  5 +
  6 + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  7 +
  8 +
  9 + <application
  10 + android:name="com.hhmedic.android.sdktest.TestApp"
  11 + android:allowBackup="true"
  12 + android:icon="@mipmap/ic_launcher"
  13 + android:label="@string/app_name"
  14 + android:roundIcon="@mipmap/ic_launcher_round"
  15 + android:supportsRtl="true"
  16 + android:theme="@style/AppTheme">
  17 + <activity android:name=".MainActivity">
  18 + <intent-filter>
  19 + <action android:name="android.intent.action.MAIN" />
  20 +
  21 + <category android:name="android.intent.category.LAUNCHER" />
  22 + </intent-filter>
  23 + </activity>
  24 + </application>
  25 +
  26 +</manifest>
  1 +package com.hhmedic.android.sdktest;
  2 +
  3 +import android.content.Context;
  4 +import android.graphics.drawable.ColorDrawable;
  5 +import android.view.LayoutInflater;
  6 +import android.view.View;
  7 +import android.view.ViewGroup;
  8 +import android.widget.PopupWindow;
  9 +
  10 +public class ChatFrontPop extends PopupWindow {
  11 +
  12 +
  13 + public ChatFrontPop(Context context) {
  14 + super(context);
  15 + initView(context);
  16 + }
  17 +
  18 + private void initView(Context context)
  19 + {
  20 + View view = LayoutInflater.from(context).inflate(R.layout.hh_chat_front_layout,null);
  21 +
  22 + setContentView(view);
  23 +
  24 + setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
  25 +
  26 + setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
  27 +
  28 + setFocusable(true);
  29 +
  30 + setOutsideTouchable(true);
  31 +
  32 + setBackgroundDrawable(new ColorDrawable(0));
  33 +
  34 + setClippingEnabled(false);
  35 +
  36 + view.findViewById(R.id.close).setOnClickListener(v -> {
  37 + dismiss();
  38 + });
  39 + }
  40 +}