Commit 7f627417 by 刘鹏

Merge remote-tracking branch 'origin/new_dev_4.3.91' into new_dev_4.3.91

# Conflicts:
#	config.gradle
parents 493da86b e2c30018
...@@ -21,9 +21,9 @@ import java.util.List; ...@@ -21,9 +21,9 @@ import java.util.List;
public final class DemoGlobalConfig implements IConfigModule { public final class DemoGlobalConfig implements IConfigModule {
String APP_DOMAIN = "https://api.github.com/"; String APP_DOMAIN = "https://api.github.com/";
// public static String appEnv = YDLConstants.ENV_AUTO_TEST; // public static String appEnv = YDLConstants.ENV_AUTO_TEST;
public static String appEnv = YDLConstants.ENV_TEST; // public static String appEnv = YDLConstants.ENV_TEST;
// public static String appEnv = YDLConstants.ENV_NEW_TEST;//配置未上传到maven库 // public static String appEnv = YDLConstants.ENV_NEW_TEST;//配置未上传到maven库
// public static String appEnv = YDLConstants.ENV_PROD; public static String appEnv = YDLConstants.ENV_PROD;
@Override @Override
public void injectAppLifecycle(@NotNull Context context, @NotNull List<IAppLifecycles> lifecycles) { public void injectAppLifecycle(@NotNull Context context, @NotNull List<IAppLifecycles> lifecycles) {
lifecycles.add(new DemoAppLifecycles()); lifecycles.add(new DemoAppLifecycles());
......
apply from: "config.gradle" apply from: "config.gradle"
buildscript { buildscript {
ext.kotlin_version = '1.3.50'
ext { ext {
kotlin_version = '1.3.21' kotlin_version = '1.3.50'
support_version = '26.1.0' support_version = '26.1.0'
minSdkVersion = 21 minSdkVersion = 21
targetSdkVersion = 28 targetSdkVersion = 28
...@@ -16,50 +15,27 @@ buildscript { ...@@ -16,50 +15,27 @@ buildscript {
constrait_support_version = '1.0.2' constrait_support_version = '1.0.2'
} }
repositories { repositories {
google()
//壹点灵android maven私服 开发版
maven {
url 'http://nexus.yidianling.com/repository/AndroidRepository/'
credentials {
username "admin"
password "fjoi#1+#@"
}
}
maven { maven {
url 'http://nexus.yidianling.com/repository/AndroidReleases/' url 'http://nexus.yidianling.com/repository/android/'
credentials { credentials {
username "admin" username "admin"
password "fjoi#1+#@" password "fjoi#1+#@"
} }
} }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
mavenCentral()
// maven {
// url 'https://dl.bintray.com/zouyuhan/maven'
// }
google() google()
jcenter() mavenLocal()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } // maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
//Umeng sdk maven 地址
maven { url 'https://repo1.maven.org/maven2/'}
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.2.0' classpath 'com.android.tools.build:gradle:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
classpath 'com.meituan.android.walle:plugin:1.1.5'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.meituan.robust:gradle-plugin:0.4.87'
classpath 'com.meituan.robust:auto-patch-plugin:0.4.87'
//bugly 符号表 //bugly 符号表
classpath 'com.tencent.bugly:symtabfileuploader:2.2.1' classpath 'com.tencent.bugly:symtabfileuploader:2.2.1'
//微信资源混淆
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.16'
classpath 'com.ydl.plugins:modular:1.0.3' classpath 'com.ydl.plugins:modular:1.0.3'
classpath 'com.ydl:notracepoint-gradle-plugin:0.0.3' classpath 'com.ydl:notracepoint-gradle-plugin:0.0.3'
classpath 'com.ydl.plugins:restools:0.0.1' classpath 'com.ydl.plugins:restools:1.0.1'
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc1' classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc1'
} }
} }
...@@ -68,34 +44,16 @@ allprojects { ...@@ -68,34 +44,16 @@ allprojects {
repositories { repositories {
//壹点灵android maven私服 开发版 //壹点灵android maven私服 开发版
maven { maven {
url 'http://nexus.yidianling.com/repository/AndroidRepository/' url 'http://nexus.yidianling.com/repository/android/'
credentials {
username "admin"
password "fjoi#1+#@"
}
}
maven {
url 'http://nexus.yidianling.com/repository/AndroidReleases/'
credentials { credentials {
username "admin" username "admin"
password "fjoi#1+#@" password "fjoi#1+#@"
} }
} }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
// maven { url'http://developer.huawei.com/repo/' } mavenCentral()
maven { url "https://jitpack.io" }
maven {
// url 'https://maven.google.com'
url'https://dl.google.com/dl/android/maven2/'
}
// maven {
// url 'https://dl.bintray.com/zouyuhan/maven'
// }
google() google()
jcenter() mavenLocal()
maven { url 'https://maven.aliyun.com/repository/releases' }
//Umeng sdk maven 地址
maven { url 'https://repo1.maven.org/maven2/'}
} }
} }
......
...@@ -6,9 +6,11 @@ ext { ...@@ -6,9 +6,11 @@ ext {
// -------------- 业务模块 -------------- // -------------- 业务模块 --------------
//第三步 若干 //第三步 若干
"m-confide" : "0.0.49.69", "m-confide" : "0.0.49.69",
"m-consultant" : "0.0.60.19", "m-consultant" : "0.0.60.20",
"m-fm" : "0.0.30.08", "m-fm" : "0.0.30.08",
"m-user" : "0.0.62.04", "m-user" : "0.0.62.04",
"m-home" : "0.0.23.18",
"m-im" : "0.0.21.30",
"m-home" : "0.0.23.35", "m-home" : "0.0.23.35",
"m-im" : "0.0.21.30", "m-im" : "0.0.21.30",
"m-dynamic" : "0.0.7.35", "m-dynamic" : "0.0.7.35",
...@@ -92,9 +94,11 @@ ext { ...@@ -92,9 +94,11 @@ ext {
//第三步 若干 //第三步 若干
"m-confide" : "0.0.49.69", "m-confide" : "0.0.49.69",
"m-consultant" : "0.0.60.19", "m-consultant" : "0.0.60.20",
"m-fm" : "0.0.30.08", "m-fm" : "0.0.30.08",
"m-user" : "0.0.62.04", "m-user" : "0.0.62.04",
"m-home" : "0.0.23.18",
"m-im" : "0.0.21.30",
"m-home" : "0.0.23.35", "m-home" : "0.0.23.35",
"m-im" : "0.0.21.30", "m-im" : "0.0.21.30",
"m-dynamic" : "0.0.7.35", "m-dynamic" : "0.0.7.35",
......
...@@ -75,9 +75,8 @@ dependencies { ...@@ -75,9 +75,8 @@ dependencies {
kapt "com.alibaba:arouter-compiler:$arouter_compiler" kapt "com.alibaba:arouter-compiler:$arouter_compiler"
api "com.alibaba:arouter-api:$arouter_api" api "com.alibaba:arouter-api:$arouter_api"
api ('com.ydl:ydl-av:1.3.4@aar'){ implementation "com.ydl:ydl-av:1.3.9"
transitive = true implementation 'com.volcengine:apm_insight:1.4.6.cn'
}
if (rootProject.ext.dev_mode){ if (rootProject.ext.dev_mode){
//开发时使用 //开发时使用
......
...@@ -34,6 +34,7 @@ import com.ydl.audioim.player.AudioPlayer ...@@ -34,6 +34,7 @@ import com.ydl.audioim.player.AudioPlayer
import com.ydl.audioim.presenter.AudioHomePresenterImpl import com.ydl.audioim.presenter.AudioHomePresenterImpl
import com.ydl.audioim.utils.AudioLogUtils import com.ydl.audioim.utils.AudioLogUtils
import com.ydl.audioim.utils.DateUtils import com.ydl.audioim.utils.DateUtils
import com.ydl.audioim.utils.onConfideEvent
import com.ydl.audioim.widget.AxbConfirmDialog import com.ydl.audioim.widget.AxbConfirmDialog
import com.ydl.audioim.widget.ZDialog import com.ydl.audioim.widget.ZDialog
import com.ydl.webview.H5Params import com.ydl.webview.H5Params
...@@ -55,7 +56,6 @@ import com.ydl.ydlcommon.utils.log.AliYunLogConfig ...@@ -55,7 +56,6 @@ import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
import de.greenrobot.event.EventBus import de.greenrobot.event.EventBus
import io.agora.rtc.Constants import io.agora.rtc.Constants
...@@ -262,6 +262,7 @@ class AudioHomeActivity : ...@@ -262,6 +262,7 @@ class AudioHomeActivity :
override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) { override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onJoinChannelSuccess(channel, uid, elapsed) super.onJoinChannelSuccess(channel, uid, elapsed)
onMeJoined()
callEventSave("20", "$uid 用户声网加入频道成功:channel=$channel") callEventSave("20", "$uid 用户声网加入频道成功:channel=$channel")
LogUtil.e("[agora]$uid 用户声网加入频道成功:channel=$channel") LogUtil.e("[agora]$uid 用户声网加入频道成功:channel=$channel")
...@@ -349,6 +350,7 @@ class AudioHomeActivity : ...@@ -349,6 +350,7 @@ class AudioHomeActivity :
super.onUserJoined(uid, elapsed) super.onUserJoined(uid, elapsed)
callEventSave("20", "${uid}加入频道回调") callEventSave("20", "${uid}加入频道回调")
LogUtil.e("[agora]远端用户/主播加入频道回调") LogUtil.e("[agora]远端用户/主播加入频道回调")
onPeerJoined()
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "远端用户/主播加入频道回调") .sendRichLog(AliYunLogConfig.AGORA, "远端用户/主播加入频道回调")
} }
...@@ -795,6 +797,7 @@ class AudioHomeActivity : ...@@ -795,6 +797,7 @@ class AudioHomeActivity :
fun rtcCall() { fun rtcCall() {
YDLavManager.instances.rtcCall(listenerUid, channelId, sendDoctocrMsg) YDLavManager.instances.rtcCall(listenerUid, channelId, sendDoctocrMsg)
onStartCall()
} }
/** /**
...@@ -1411,4 +1414,24 @@ class AudioHomeActivity : ...@@ -1411,4 +1414,24 @@ class AudioHomeActivity :
) { ) {
YDLavManager.instances.callEventSave(status,res , session, line) YDLavManager.instances.callEventSave(status,res , session, line)
} }
private fun onStartCall() {
val dimension = hashMapOf("conversation" to "start_call", "call" to "call_start")
onConfideEvent(dimension, channelId)
}
private fun onMeJoined() {
val dimension = hashMapOf("conversation" to "me_joined")
onConfideEvent(dimension, channelId)
}
fun onPeerAccepted() {
val dimension = hashMapOf("conversation" to "peer_accepted", "call" to "call_accepted")
onConfideEvent(dimension, channelId)
}
private fun onPeerJoined() {
val dimension = hashMapOf("conversation" to "peer_joined")
onConfideEvent(dimension, channelId)
}
} }
...@@ -6,6 +6,7 @@ import android.os.Handler ...@@ -6,6 +6,7 @@ import android.os.Handler
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.launcher.ARouter
import com.bytedance.apm.insight.ApmInsightAgent
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.audioim.bean.AgoraInvitationBean import com.ydl.audioim.bean.AgoraInvitationBean
import com.ydl.audioim.http.AudioApiRequestUtil import com.ydl.audioim.http.AudioApiRequestUtil
...@@ -13,6 +14,7 @@ import com.ydl.audioim.http.command.ConnectExceptionCommand ...@@ -13,6 +14,7 @@ import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.router.AudioImIn import com.ydl.audioim.router.AudioImIn
import com.ydl.audioim.utils.AudioLogUtils import com.ydl.audioim.utils.AudioLogUtils
import com.ydl.audioim.utils.AudioLogUtils.Companion.writeAgoraLog import com.ydl.audioim.utils.AudioLogUtils.Companion.writeAgoraLog
import com.ydl.audioim.utils.onConfideEvent
import com.ydl.consultantim.ConsultantAudioHomeActivity import com.ydl.consultantim.ConsultantAudioHomeActivity
import com.ydl.ydl_av.messge_service.YDLRTMClient import com.ydl.ydl_av.messge_service.YDLRTMClient
import com.ydl.ydl_av.messge_service.bean.RTMMesssage import com.ydl.ydl_av.messge_service.bean.RTMMesssage
...@@ -41,6 +43,7 @@ import io.agora.rtm.RtmStatusCode.ConnectionChangeReason.CONNECTION_CHANGE_REASO ...@@ -41,6 +43,7 @@ import io.agora.rtm.RtmStatusCode.ConnectionChangeReason.CONNECTION_CHANGE_REASO
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import org.json.JSONObject
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
...@@ -99,6 +102,8 @@ class YDLavManager { ...@@ -99,6 +102,8 @@ class YDLavManager {
"${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}" "${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}"
) )
val dimension = hashMapOf("call" to "call_received_by_peer")
onConfideEvent(dimension, response?.ChannelId)
val act = ActivityManager.getInstance().getTopTaskActivity() val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
...@@ -120,6 +125,7 @@ class YDLavManager { ...@@ -120,6 +125,7 @@ class YDLavManager {
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
act.joinChannel() act.joinChannel()
act.onPeerAccepted()
} }
} }
} }
...@@ -131,6 +137,8 @@ class YDLavManager { ...@@ -131,6 +137,8 @@ class YDLavManager {
AliYunLogConfig.AGORA, AliYunLogConfig.AGORA,
"${response?.calleeId}已拒绝呼叫邀请" "${response?.calleeId}已拒绝呼叫邀请"
) )
val dimension = hashMapOf("call" to "call_refused")
onConfideEvent(dimension, response?.ChannelId)
val act = ActivityManager.getInstance().getTopTaskActivity() val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
...@@ -152,6 +160,8 @@ class YDLavManager { ...@@ -152,6 +160,8 @@ class YDLavManager {
AliYunLogConfig.AGORA, AliYunLogConfig.AGORA,
"主叫已取消呼叫邀请" "主叫已取消呼叫邀请"
) )
val dimension = hashMapOf("call" to "call_canceled")
onConfideEvent(dimension, response?.ChannelId)
val act = ActivityManager.getInstance().getTopTaskActivity() val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
...@@ -168,6 +178,11 @@ class YDLavManager { ...@@ -168,6 +178,11 @@ class YDLavManager {
AliYunLogConfig.AGORA, AliYunLogConfig.AGORA,
"呼叫${response?.calleeId}用户失败:${response?.response}" "呼叫${response?.calleeId}用户失败:${response?.response}"
) )
val dimension = hashMapOf(
"call" to "call_fail",
"call_fail" to "code${errorCode}"
)
onConfideEvent(dimension, response?.ChannelId)
val act = ActivityManager.getInstance().getTopTaskActivity() val act = ActivityManager.getInstance().getTopTaskActivity()
//专家离线或者30 秒后仍未收到专家响应,重新再邀请一次 //专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
when (errorCode) { when (errorCode) {
......
package com.ydl.audioim.utils
import com.apm.insight.log.VLog
import com.bytedance.apm.insight.ApmInsightAgent
import com.ydl.ydlcommon.modular.ModularServiceManager
import org.json.JSONObject
internal fun onConfideEvent(dimension: HashMap<String, String>, channel: String?) {
try {
val uid = ModularServiceManager.getPlatformUserService()?.getUser()?.userId
val ext = JSONObject(mapOf("uid" to uid, "channelId" to (channel ?: "unknown")))
ApmInsightAgent.monitorEvent("confide", dimension, hashMapOf(), ext)
} catch (throwable: Throwable) {
VLog.e("onConfideEvent", throwable.message)
}
}
\ No newline at end of file
...@@ -230,7 +230,13 @@ class ExpertSearchAdapter( ...@@ -230,7 +230,13 @@ class ExpertSearchAdapter(
if (it.isNotEmpty()){ if (it.isNotEmpty()){
for (tag in itemBean.tagList){ for (tag in itemBean.tagList){
val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_tag, holder.ll_tags, false) val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_tag, holder.ll_tags, false)
view.tvTag.text = tag.tagName tag.tagName?.let { name ->
if (name.length>4){
view.tvTag.text = "${name.substring(0,4)}…"
}else{
view.tvTag.text = name
}
}
if (tag.isHigh==1){ if (tag.isHigh==1){
view.tvTag.setBackgroundResource(R.drawable.consultant_bg_radius_line_eb892c) view.tvTag.setBackgroundResource(R.drawable.consultant_bg_radius_line_eb892c)
view.tvTag.setTextColor(ContextCompat.getColor(context,R.color.color_EB892C)) view.tvTag.setTextColor(ContextCompat.getColor(context,R.color.color_EB892C))
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
android:gravity="center" android:gravity="center"
android:layout_marginEnd="6dp" android:layout_marginEnd="6dp"
android:padding="3dp" android:padding="3dp"
android:maxLength="5"
android:textColor="@color/platform_color_999999" android:textColor="@color/platform_color_999999"
android:textSize="10sp" android:textSize="10sp"
tools:text="恋爱情感" /> tools:text="恋爱情感" />
package com.yidianling.dynamic.event
data class dynamicFocusEvent (
var focusState:String
)
\ No newline at end of file
...@@ -42,6 +42,7 @@ import com.yidianling.dynamic.common.net.DynamicApiUtils; ...@@ -42,6 +42,7 @@ import com.yidianling.dynamic.common.net.DynamicApiUtils;
import com.yidianling.dynamic.dialog.CancelFocusDialog; import com.yidianling.dynamic.dialog.CancelFocusDialog;
import com.yidianling.dynamic.event.BlackEvent; import com.yidianling.dynamic.event.BlackEvent;
import com.yidianling.dynamic.event.LoginStateEvent; import com.yidianling.dynamic.event.LoginStateEvent;
import com.yidianling.dynamic.event.dynamicFocusEvent;
import com.yidianling.dynamic.model.Command; import com.yidianling.dynamic.model.Command;
import com.yidianling.dynamic.model.MemberInfoBean; import com.yidianling.dynamic.model.MemberInfoBean;
import com.yidianling.dynamic.router.DynamicIn; import com.yidianling.dynamic.router.DynamicIn;
...@@ -433,7 +434,9 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -433,7 +434,9 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
/** /**
* *
*/ */
@SuppressLint("CheckResult")
private void Focus() { private void Focus() {
showProgressDialog(""); showProgressDialog("");
Command.FocusCmd cmd = new Command.FocusCmd(mem_id, "1"); Command.FocusCmd cmd = new Command.FocusCmd(mem_id, "1");
DynamicApiUtils.focus(cmd) DynamicApiUtils.focus(cmd)
...@@ -450,6 +453,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -450,6 +453,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
fans_count = (fans_counti + 1) + ""; fans_count = (fans_counti + 1) + "";
members_top_user_fensi_num_tv.setText("粉丝 " + fans_count); members_top_user_fensi_num_tv.setText("粉丝 " + fans_count);
focus_state = "1"; focus_state = "1";
EventBus.getDefault().post(new dynamicFocusEvent(focus_state));
Drawable drawable = getResources().getDrawable(R.drawable.dynamic_ic_expand); Drawable drawable = getResources().getDrawable(R.drawable.dynamic_ic_expand);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
members_top_user_focus_ortion_tv.setCompoundDrawablePadding(20); members_top_user_focus_ortion_tv.setCompoundDrawablePadding(20);
...@@ -461,6 +465,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -461,6 +465,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
fans_count = (fans_counti - 1) + ""; fans_count = (fans_counti - 1) + "";
members_top_user_fensi_num_tv.setText("粉丝 " + fans_count); members_top_user_fensi_num_tv.setText("粉丝 " + fans_count);
focus_state = "2"; focus_state = "2";
EventBus.getDefault().post(new dynamicFocusEvent(focus_state));
members_top_user_focus_ortion_tv.setCompoundDrawables(null, null, null, null); members_top_user_focus_ortion_tv.setCompoundDrawables(null, null, null, null);
members_top_user_focus_ortion_tv.setText("+ 关注"); members_top_user_focus_ortion_tv.setText("+ 关注");
members_top_user_focus_ortion_tv.setTextColor(getResources().getColor(R.color.dynamic_white)); members_top_user_focus_ortion_tv.setTextColor(getResources().getColor(R.color.dynamic_white));
......
...@@ -290,6 +290,11 @@ public class TopicDetailActivity extends BaseMvpActivity<TopicDetailView, TopicD ...@@ -290,6 +290,11 @@ public class TopicDetailActivity extends BaseMvpActivity<TopicDetailView, TopicD
totalMembers = 0; totalMembers = 0;
topicId = getIntent().getStringExtra("topic_id"); topicId = getIntent().getStringExtra("topic_id");
isSplash = getIntent().getBooleanExtra("isSplash", false); isSplash = getIntent().getBooleanExtra("isSplash", false);
Bundle bundle = getIntent().getBundleExtra("bundle");
if (bundle != null) {
topicId = bundle.getString("topic_id", "44");
isSplash = bundle.getBoolean("isSplash", false);
}
adapter = new TopicDetailMemberAdapter(this); adapter = new TopicDetailMemberAdapter(this);
mFragments = new Fragment[]{TrendListInFragment.newInstance("1", topicId, "default", "0"), mFragments = new Fragment[]{TrendListInFragment.newInstance("1", topicId, "default", "0"),
TrendListInFragment.newInstance("2", topicId, "default", "0")}; TrendListInFragment.newInstance("2", topicId, "default", "0")};
......
...@@ -24,6 +24,7 @@ import android.text.Html; ...@@ -24,6 +24,7 @@ import android.text.Html;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.text.style.ImageSpan; import android.text.style.ImageSpan;
import android.util.EventLog;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
...@@ -72,6 +73,8 @@ import com.yidianling.dynamic.R2; ...@@ -72,6 +73,8 @@ import com.yidianling.dynamic.R2;
import com.yidianling.dynamic.common.browsePictures.BrowsePicturesActivity2; import com.yidianling.dynamic.common.browsePictures.BrowsePicturesActivity2;
import com.yidianling.dynamic.common.emoji.EmoticonPickerView; import com.yidianling.dynamic.common.emoji.EmoticonPickerView;
import com.yidianling.dynamic.common.emoji.IEmoticonSelectedListener; import com.yidianling.dynamic.common.emoji.IEmoticonSelectedListener;
import com.yidianling.dynamic.event.LoginStateEvent;
import com.yidianling.dynamic.event.dynamicFocusEvent;
import com.yidianling.dynamic.members.MembersActivity; import com.yidianling.dynamic.members.MembersActivity;
import com.yidianling.dynamic.model.CommentBean; import com.yidianling.dynamic.model.CommentBean;
import com.yidianling.dynamic.model.Reply; import com.yidianling.dynamic.model.Reply;
...@@ -95,6 +98,7 @@ import java.util.concurrent.TimeUnit; ...@@ -95,6 +98,7 @@ import java.util.concurrent.TimeUnit;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import de.greenrobot.event.EventBus;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
...@@ -374,6 +378,7 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr ...@@ -374,6 +378,7 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
setContentView(R.layout.dynamic_activity_trend_details); setContentView(R.layout.dynamic_activity_trend_details);
ButterKnife.bind(this); ButterKnife.bind(this);
initDatas(); initDatas();
...@@ -1451,8 +1456,18 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr ...@@ -1451,8 +1456,18 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr
if (subscribe != null) { if (subscribe != null) {
subscribe.dispose(); subscribe.dispose();
} }
EventBus.getDefault().unregister(this);
}
public void onEvent(dynamicFocusEvent event) {
// 1已关注 2关注
if (event.getFocusState().equals("1")){
tvGuanzhu.setVisibility(GONE);
tvGuanzhu.setText("已关注");
}else{
tvGuanzhu.setVisibility(VISIBLE);
tvGuanzhu.setText("关注");
}
} }
@NonNull @NonNull
@Override @Override
public ITrendsDetailPresenterImpl createPresenter() { public ITrendsDetailPresenterImpl createPresenter() {
......
...@@ -4,10 +4,10 @@ import android.content.Context ...@@ -4,10 +4,10 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.launcher.ARouter
import com.ydl.media.audio.AudioPlayer import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.model.Music import com.ydl.media.audio.model.Music
...@@ -23,6 +23,7 @@ import com.ydl.ydlcommon.base.config.HttpConfig ...@@ -23,6 +23,7 @@ import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.bean.ShareData import com.ydl.ydlcommon.bean.ShareData
import com.ydl.ydlcommon.data.PlatformRamImpl import com.ydl.ydlcommon.data.PlatformRamImpl
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.modular.ModularServiceManager.provide
import com.ydl.ydlcommon.router.IYDLRouterConstant import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.utils.LogUtil import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.Utils import com.ydl.ydlcommon.utils.Utils
...@@ -110,6 +111,16 @@ open class HomeBaseImpl : IHomeBaseEvent { ...@@ -110,6 +111,16 @@ open class HomeBaseImpl : IHomeBaseEvent {
mHomeView!!.getConsultData(type.id.toString(), selectPosition) mHomeView!!.getConsultData(type.id.toString(), selectPosition)
} }
override fun jumpToTopicDetail(topic_id: String) {
val bundle = Bundle()
bundle.putString("topic_id", topic_id)
bundle.putBoolean("isSplash", false)
//动态详情
ARouter.getInstance().build("/topic/detail")
.withBundle("bundle", bundle)
.navigation()
}
private var headerView: View? = null private var headerView: View? = null
var mContext: Context? = null var mContext: Context? = null
......
...@@ -185,4 +185,10 @@ interface IHomeBaseEvent { ...@@ -185,4 +185,10 @@ interface IHomeBaseEvent {
* @param selectPosition 选中的position * @param selectPosition 选中的position
*/ */
fun getConsultData(type: HomeHeaderBean.ConsultCategoryDateBean, selectPosition: Int) fun getConsultData(type: HomeHeaderBean.ConsultCategoryDateBean, selectPosition: Int)
/*
* 跳转话题详情
*
* */
fun jumpToTopicDetail(topic_id:String)
} }
\ No newline at end of file
...@@ -67,7 +67,10 @@ class HomeAssuageGriefItemView(private val mContext: Context, private var homeEv ...@@ -67,7 +67,10 @@ class HomeAssuageGriefItemView(private val mContext: Context, private var homeEv
homeModuleAssuageGriefViewTag.text = bean?.askTag homeModuleAssuageGriefViewTag.text = bean?.askTag
homeModuleAssuageGriefViewCommentsCount.text = bean?.commentsCount.toString() homeModuleAssuageGriefViewCommentsCount.text = bean?.commentsCount.toString()
homeModuleAssuageGriefViewZanCount.text = bean?.zanCount.toString() homeModuleAssuageGriefViewZanCount.text = bean?.zanCount.toString()
ll_topic_detail.setOnClickListener {
//跳转话题详情
homeEvent?.jumpToTopicDetail(bean.topicId.toString())
}
/** /**
* 点赞 * 点赞
......
...@@ -187,6 +187,7 @@ ...@@ -187,6 +187,7 @@
android:background="@drawable/home_assuage_grief_item_view_tab_back" android:background="@drawable/home_assuage_grief_item_view_tab_back"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:id="@+id/ll_topic_detail"
android:paddingLeft="@dimen/platform_dp_7" android:paddingLeft="@dimen/platform_dp_7"
android:paddingTop="@dimen/platform_dp_4" android:paddingTop="@dimen/platform_dp_4"
android:paddingRight="@dimen/platform_dp_7" android:paddingRight="@dimen/platform_dp_7"
......
package com.yidianling.im.bean
/**
* Created by Ykai on 2022/5/6.
*/
data class FirstQuestionBean(
var objects:List<ContentBean>
)
data class ContentBean(
var type:Int,
var content:String,
var id:Long
)
\ No newline at end of file
package com.yidianling.im.ui.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yidianling.im.R
import com.yidianling.im.bean.ContentBean
/**
* Created by Ykai on 2022/5/5.
*
* 首问语适配器
*/
class FirstQuestionAdapter(data:MutableList<ContentBean>): BaseQuickAdapter<ContentBean,BaseViewHolder>(R.layout.im_item_chat_first_question) {
override fun convert(holder: BaseViewHolder, item: ContentBean) {
holder.setText(R.id.tv_question_name,item.content)
}
}
\ No newline at end of file
...@@ -30,6 +30,7 @@ import androidx.appcompat.app.AppCompatActivity; ...@@ -30,6 +30,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.SPUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.Observer; import com.netease.nimlib.sdk.Observer;
...@@ -250,6 +251,7 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy { ...@@ -250,6 +251,7 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
} }
}; };
@SuppressLint("CheckResult")
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
...@@ -257,9 +259,6 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy { ...@@ -257,9 +259,6 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
titleBar = ((YDLBaseMessageActivity) getActivity()).getTitleBarBottom(); titleBar = ((YDLBaseMessageActivity) getActivity()).getTitleBarBottom();
titleBar.setTitleLeftDraw(getResources().getDrawable(R.drawable.loading_01)); titleBar.setTitleLeftDraw(getResources().getDrawable(R.drawable.loading_01));
titleBar.setTitle("正在连接中..."); titleBar.setTitle("正在连接中...");
if (sessionType==SessionTypeEnum.Team){
titleBar.setRightIcon(getContext().getDrawable(R.drawable.platform_common_more));
}
fl_container = rootView.findViewById(R.id.message_activity_list_view_container); fl_container = rootView.findViewById(R.id.message_activity_list_view_container);
v_chattips = rootView.findViewById(R.id.v_chattips); v_chattips = rootView.findViewById(R.id.v_chattips);
...@@ -318,9 +317,27 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy { ...@@ -318,9 +317,27 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
} }
//如果是群聊 //如果是群聊
if (SessionTypeEnum.Team==sessionType){ if (SessionTypeEnum.Team==sessionType){
titleBar.setRightIcon(getContext().getDrawable(R.drawable.platform_common_more));
rela_zixun.setVisibility(View.GONE); rela_zixun.setVisibility(View.GONE);
titleBar.setTitleRightDraw(null); titleBar.setTitleRightDraw(null);
}
// 判断最近一次发送消息的时间是否大于24小时
long time = System.currentTimeMillis()-SPUtils.getInstance().getLong(ModularServiceManager.INSTANCE.provide(IUserService.class).getUserInfo().getUid(),0L);
if (time==0L||time>24*60*60*1000){ //如果等于0或者大于则请求首问语接口
// 获取首问语数据
ServiceImpl.Companion.getInstance().getFirstQuestion()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(res -> {
if (res.code.equals("200")){
if (!res.data.getObjects().isEmpty()){
inputPanel.setFirstQuestion(res.data.getObjects());
}
}
}, throwable -> {
ToastUtil.toastShort(throwable.getMessage());
});
} }
} }
...@@ -429,8 +446,8 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy { ...@@ -429,8 +446,8 @@ public class YDLMessageFragment extends TFragment implements ModuleProxy {
}, throwable -> { }, throwable -> {
}); });
} }
} }
/** /**
* 是否隐藏输入框相关控件 * 是否隐藏输入框相关控件
*/ */
......
...@@ -26,7 +26,13 @@ import android.widget.ImageView; ...@@ -26,7 +26,13 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.SPUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.media.record.AudioRecorder; import com.netease.nimlib.sdk.media.record.AudioRecorder;
import com.netease.nimlib.sdk.media.record.IAudioRecordCallback; import com.netease.nimlib.sdk.media.record.IAudioRecordCallback;
...@@ -40,9 +46,13 @@ import com.netease.nimlib.sdk.msg.model.CustomNotificationConfig; ...@@ -40,9 +46,13 @@ import com.netease.nimlib.sdk.msg.model.CustomNotificationConfig;
import com.netease.nimlib.sdk.msg.model.IMMessage; import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.tbruyelle.rxpermissions2.Permission; import com.tbruyelle.rxpermissions2.Permission;
import com.tbruyelle.rxpermissions2.RxPermissions; import com.tbruyelle.rxpermissions2.RxPermissions;
import com.ydl.ydlcommon.modular.ModularServiceManager;
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils;
import com.yidianling.common.tools.ToastUtil; import com.yidianling.common.tools.ToastUtil;
import com.yidianling.im.R; import com.yidianling.im.R;
import com.yidianling.im.bean.ContentBean;
import com.yidianling.im.event.MultipleSelectedEvent; import com.yidianling.im.event.MultipleSelectedEvent;
import com.yidianling.im.ui.adapter.FirstQuestionAdapter;
import com.yidianling.nimbase.api.UIKitOptions; import com.yidianling.nimbase.api.UIKitOptions;
import com.yidianling.nimbase.api.model.session.SessionCustomization; import com.yidianling.nimbase.api.model.session.SessionCustomization;
import com.yidianling.nimbase.business.session.actions.BaseAction; import com.yidianling.nimbase.business.session.actions.BaseAction;
...@@ -58,8 +68,10 @@ import com.yidianling.uikit.api.NimUIKit; ...@@ -58,8 +68,10 @@ import com.yidianling.uikit.api.NimUIKit;
import com.yidianling.uikit.api.NimUIKitImpl; import com.yidianling.uikit.api.NimUIKitImpl;
import com.yidianling.uikit.business.ait.AitTextChangeListener; import com.yidianling.uikit.business.ait.AitTextChangeListener;
import com.yidianling.uikit.custom.widget.SafeHelpRemindDialog; import com.yidianling.uikit.custom.widget.SafeHelpRemindDialog;
import com.yidianling.user.api.service.IUserService;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import de.greenrobot.event.EventBus; import de.greenrobot.event.EventBus;
...@@ -112,6 +124,11 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -112,6 +124,11 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
/***贴图表情控件*/ /***贴图表情控件*/
protected EmoticonPickerView emoticonPickerView; protected EmoticonPickerView emoticonPickerView;
/**首问语相关控件*/
public ConstraintLayout clFirstQuestion;
public RecyclerView rvFirstQuestion;
private FirstQuestionAdapter firstQuestionAdapter;
/***语音*/ /***语音*/
protected AudioRecorder audioMessageHelper; protected AudioRecorder audioMessageHelper;
private Chronometer time; private Chronometer time;
...@@ -148,6 +165,8 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -148,6 +165,8 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
private Boolean onlyShowInputTest=false;//灵犀2.0 点击其他的时候隐藏除输入框以外的其他内容 private Boolean onlyShowInputTest=false;//灵犀2.0 点击其他的时候隐藏除输入框以外的其他内容
private String uid;
/***设置输入框内容*/ /***设置输入框内容*/
public void setInputContent(String content) { public void setInputContent(String content) {
messageEditText.setText(content == null ? "" : content); messageEditText.setText(content == null ? "" : content);
...@@ -218,6 +237,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -218,6 +237,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
} }
private void init() { private void init() {
uid = ModularServiceManager.INSTANCE.provide(IUserService.class).getUserInfo().getUid();
initViews(); initViews();
initInputBarListener(); initInputBarListener();
initTextEdit(); initTextEdit();
...@@ -276,6 +296,35 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -276,6 +296,35 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
textAudioSwitchLayout.setVisibility(View.GONE); textAudioSwitchLayout.setVisibility(View.GONE);
} }
initVoice(); initVoice();
// 首问语控件初始化
initFirstQuestion();
}
private void initFirstQuestion() {
clFirstQuestion = view.findViewById(R.id.cl_first_question);
rvFirstQuestion = view.findViewById(R.id.rv_first_question);
firstQuestionAdapter = new FirstQuestionAdapter(new ArrayList<>());
rvFirstQuestion.setLayoutManager(new LinearLayoutManager(context));
rvFirstQuestion.setAdapter(firstQuestionAdapter);
firstQuestionAdapter.setOnItemClickListener((adapter, view, position) -> {
String content = firstQuestionAdapter.getData().get(position).getContent();
// 埋点
ActionCountUtils.Companion.baiDuCountSign3("counselor_consult_page","quick_language_click",content,"","");
// 根据uid记录每次发消息的时间戳
SPUtils.getInstance().put(uid,System.currentTimeMillis());
onTextMessageSendButtonPressed(content);
clFirstQuestion.setVisibility(View.GONE);
});
}
/**
* 设置首问语数据
* @param data
*/
public void setFirstQuestion(List<ContentBean> data){
clFirstQuestion.setVisibility(View.VISIBLE);
firstQuestionAdapter.getData().addAll(data);
firstQuestionAdapter.notifyDataSetChanged();
} }
private void initVoice() { private void initVoice() {
...@@ -446,6 +495,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -446,6 +495,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
// 点击edittext,切换键盘和更多布局 // 点击edittext,切换键盘和更多布局
private void switchToTextLayout(boolean needShowInput) { private void switchToTextLayout(boolean needShowInput) {
hideEmojiLayout(); hideEmojiLayout();
hideFirstQuestionLayout();
hideActionPanelLayout(); hideActionPanelLayout();
audioRecordBtn.setVisibility(View.GONE); audioRecordBtn.setVisibility(View.GONE);
...@@ -500,8 +550,10 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -500,8 +550,10 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
* 替换之后最终发送的字符串 * 替换之后最终发送的字符串
*/ */
private void onTextMessageSendButtonClick() { private void onTextMessageSendButtonClick() {
IMMessage textMessage = createTextMessage(sendText); // 根据uid记录每次发消息的时间戳
SPUtils.getInstance().put(uid,System.currentTimeMillis());
IMMessage textMessage = createTextMessage(sendText);
if (container.proxy.sendMessage(textMessage)) { if (container.proxy.sendMessage(textMessage)) {
restoreText(true); restoreText(true);
} }
...@@ -605,6 +657,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -605,6 +657,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
messageEditLL.setVisibility(View.GONE); messageEditLL.setVisibility(View.GONE);
hideInputMethod(); hideInputMethod();
hideEmojiLayout(); hideEmojiLayout();
hideFirstQuestionLayout();
hideActionPanelLayout(); hideActionPanelLayout();
switchToAudioButtonInInputBar.setVisibility(View.GONE); switchToAudioButtonInInputBar.setVisibility(View.GONE);
...@@ -644,6 +697,16 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -644,6 +697,16 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
} }
/** /**
* 隐藏首问语布局
*/
public void hideFirstQuestionLayout(){
uiHandler.removeCallbacks(showFirstQuestionRunnable);
if (clFirstQuestion != null) {
clFirstQuestion.setVisibility(View.GONE);
}
}
/**
* 隐藏更多布局 * 隐藏更多布局
*/ */
private void hideActionPanelLayout() { private void hideActionPanelLayout() {
...@@ -704,6 +767,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -704,6 +767,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
* 显示表情布局 * 显示表情布局
*/ */
private void showEmojiLayout() { private void showEmojiLayout() {
hideFirstQuestionLayout();
hideInputMethod(); hideInputMethod();
hideActionPanelLayout(); hideActionPanelLayout();
hideAudioLayout(); hideAudioLayout();
...@@ -752,6 +816,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -752,6 +816,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
*/ */
private void showActionPanelLayout() { private void showActionPanelLayout() {
hideEmojiLayout(); hideEmojiLayout();
hideFirstQuestionLayout();
hideInputMethod(); hideInputMethod();
uiHandler.postDelayed(showMoreFuncRunnable, SHOW_LAYOUT_DELAY); uiHandler.postDelayed(showMoreFuncRunnable, SHOW_LAYOUT_DELAY);
...@@ -765,6 +830,13 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -765,6 +830,13 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
} }
}; };
private Runnable showFirstQuestionRunnable = new Runnable() {
@Override
public void run() {
clFirstQuestion.setVisibility(View.VISIBLE);
}
};
private Runnable showMoreFuncRunnable = new Runnable() { private Runnable showMoreFuncRunnable = new Runnable() {
@Override @Override
public void run() { public void run() {
...@@ -875,6 +947,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba ...@@ -875,6 +947,7 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
hideInputMethod(); hideInputMethod();
hideActionPanelLayout(); hideActionPanelLayout();
hideEmojiLayout(); hideEmojiLayout();
hideFirstQuestionLayout();
} }
}; };
} }
......
...@@ -4,6 +4,7 @@ import com.ydl.ydlcommon.base.config.YDL_DOMAIN ...@@ -4,6 +4,7 @@ import com.ydl.ydlcommon.base.config.YDL_DOMAIN
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.im.bean.BusyBean import com.yidianling.im.bean.BusyBean
import com.yidianling.im.bean.FirstQuestionBean
import com.yidianling.uikit.custom.http.response.* import com.yidianling.uikit.custom.http.response.*
import com.yidianling.uikit.custom.http.response.question.QuestionsInfoBean import com.yidianling.uikit.custom.http.response.question.QuestionsInfoBean
import io.reactivex.Observable import io.reactivex.Observable
...@@ -115,10 +116,13 @@ interface ServiceApi { ...@@ -115,10 +116,13 @@ interface ServiceApi {
//答题 //答题
@POST("cms/exam/api/v1/exams/{id}/lingxi/answer-question") @POST("cms/exam/api/v1/exams/{id}/lingxi/answer-question")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA) @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun answerQuestion( fun answerQuestion(@Path("id") id: String, @Body body: RequestBody): Observable<BaseAPIResponse<String>>
@Path("id") id: String,
@Body body: RequestBody
): Observable<BaseAPIResponse<String>>
/**
* 获取首问语
*/
@POST("dmp/v1/clouddata/schemas/lingxi_quick_replies/query")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA,"X-App-Id: crm_cloud")
fun getFirstQuestion( @Body map: Map<String,@JvmSuppressWildcards Any>): Observable<BaseAPIResponse<FirstQuestionBean>>
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON ...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlnet.YDLHttpUtils import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.im.bean.BusyBean import com.yidianling.im.bean.BusyBean
import com.yidianling.im.bean.FirstQuestionBean
import com.yidianling.im.http.ImRetrofitApi import com.yidianling.im.http.ImRetrofitApi
import com.yidianling.uikit.custom.http.response.* import com.yidianling.uikit.custom.http.response.*
import com.yidianling.uikit.custom.http.response.question.QuestionsInfoBean import com.yidianling.uikit.custom.http.response.question.QuestionsInfoBean
...@@ -188,4 +189,15 @@ class ServiceImpl private constructor() { ...@@ -188,4 +189,15 @@ class ServiceImpl private constructor() {
return YDLHttpUtils.obtainApi(ImRetrofitApi::class.java).batchSendCustomizeMessage(body) return YDLHttpUtils.obtainApi(ImRetrofitApi::class.java).batchSendCustomizeMessage(body)
} }
/**
* 获取首问语
*/
fun getFirstQuestion(): Observable<BaseAPIResponse<FirstQuestionBean>> {
val filterMap = HashMap<String,Any>()
filterMap["type"] = 1
val map = HashMap<String,Any>()
map["filter"] = filterMap
return YDLHttpUtils.obtainApi(ServiceApi::class.java).getFirstQuestion(map)
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_question_name"
android:layout_width="match_parent"
android:layout_height="48dp"
tools:text="我感觉自己心里有抑郁倾向"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:textSize="14sp"
android:textColor="#16263D"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/platform_color_F2F2F2" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/messageActivityBottomLayout" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:id="@+id/messageActivityBottomLayout"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:orientation="vertical"> android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/im_nim_message_activity_text_layout" />
<include layout="@layout/im_nim_message_activity_text_layout" />
<com.yidianling.nimbase.business.session.emoji.EmoticonPickerView
android:id="@+id/emoticon_picker_view" <com.yidianling.nimbase.business.session.emoji.EmoticonPickerView
android:layout_width="wrap_content" android:id="@+id/emoticon_picker_view"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:visibility="gone" /> android:layout_height="wrap_content"
</LinearLayout> android:visibility="gone" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_first_question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="46dp"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:text="您可以试试这样描述您的问题:"
app:layout_constraintTop_toTopOf="parent"
android:textColor="@color/platform_color_999999"
android:textSize="13sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="46dp"
android:background="@color/platform_color_F2F2F2" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_first_question"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintHeight_default="wrap"
app:layout_constraintHeight_max="200dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="47dp"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textMessageLayout" android:id="@+id/textMessageLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="56dp" android:layout_height="56dp"
android:background="@color/platform_color_F7F7F7" android:background="@color/platform_color_F7F7F7"
android:gravity="center_vertical"> android:gravity="center_vertical">
<!--android:paddingTop="@dimen/bottom_component_margin_vertical"-->
<!--android:paddingBottom="@dimen/bottom_component_margin_vertical"-->
<FrameLayout <FrameLayout
android:id="@+id/switchLayout" android:id="@+id/switchLayout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -42,6 +41,7 @@ ...@@ -42,6 +41,7 @@
<Button <Button
android:id="@+id/audioRecord" android:id="@+id/audioRecord"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
...@@ -52,7 +52,6 @@ ...@@ -52,7 +52,6 @@
android:textColor="@color/color_3D3D3D" android:textColor="@color/color_3D3D3D"
android:textSize="15sp" android:textSize="15sp"
android:textStyle="bold" android:textStyle="bold"
style="?android:attr/borderlessButtonStyle"
android:visibility="gone" /> android:visibility="gone" />
</FrameLayout> </FrameLayout>
...@@ -75,10 +74,10 @@ ...@@ -75,10 +74,10 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" android:layout_marginRight="10dp"
android:hint="隐私保密,安心咨询"
android:layout_weight="1" android:layout_weight="1"
android:autoLink="all" android:autoLink="all"
android:background="#ffffff" android:background="#ffffff"
android:hint="隐私保密,安心咨询"
android:maxHeight="72dp" android:maxHeight="72dp"
android:maxLines="4" android:maxLines="4"
android:textColorHint="#CCCCCC" android:textColorHint="#CCCCCC"
...@@ -114,17 +113,17 @@ ...@@ -114,17 +113,17 @@
android:scaleType="center" /> android:scaleType="center" />
<TextView <TextView
android:id="@+id/buttonSendMessage" android:id="@+id/buttonSendMessage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/platform_bg_radius_5" android:background="@drawable/platform_bg_radius_5"
android:contentDescription="@string/im_empty" android:contentDescription="@string/im_empty"
android:gravity="center" android:gravity="center"
android:padding="5dp" android:padding="5dp"
android:text="@string/im_send" android:text="@string/im_send"
android:textColor="@color/platform_but_text_color" android:textColor="@color/platform_but_text_color"
android:textSize="14sp" /> android:textSize="14sp" />
</FrameLayout> </FrameLayout>
</RelativeLayout> </RelativeLayout>
...@@ -613,7 +613,8 @@ ...@@ -613,7 +613,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/white" android:background="@color/white"
android:visibility="gone" /> android:visibility="gone"
/>
<include <include
layout="@layout/im_nim_message_activity_bottom_layout" /> layout="@layout/im_nim_message_activity_bottom_layout" />
</LinearLayout> </LinearLayout>
...@@ -5,6 +5,13 @@ def mavenRepositoryUrl = "http://nexus.yidianling.com/repository/AndroidReleases ...@@ -5,6 +5,13 @@ def mavenRepositoryUrl = "http://nexus.yidianling.com/repository/AndroidReleases
def getVersionName() { def getVersionName() {
return hasProperty('VERSION_NAME') ? VERSION_NAME : rootProject.ext.ydlPublishVersion[project.getName()] return hasProperty('VERSION_NAME') ? VERSION_NAME : rootProject.ext.ydlPublishVersion[project.getName()]
} }
task sourceJar(type:Jar){
classifier = 'source'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives sourceJar
}
afterEvaluate { project -> afterEvaluate { project ->
uploadArchives { uploadArchives {
...@@ -16,6 +23,7 @@ afterEvaluate { project -> ...@@ -16,6 +23,7 @@ afterEvaluate { project ->
repository(url: mavenRepositoryUrl) { repository(url: mavenRepositoryUrl) {
authentication(userName: "admin", password: "fjoi#1+#@") authentication(userName: "admin", password: "fjoi#1+#@")
} }
// repository(url:mavenLocal().url)
} }
} }
} }
......
...@@ -75,6 +75,7 @@ dependencies { ...@@ -75,6 +75,7 @@ dependencies {
//====================YDL Repository==================== //====================YDL Repository====================
// api rootProject.ext.dependencies["ydl-pushagent"] // api rootProject.ext.dependencies["ydl-pushagent"]
// api rootProject.ext.dependencies["ydl-hnet"] // api rootProject.ext.dependencies["ydl-hnet"]
implementation 'com.volcengine:apm_insight:1.4.6.cn'
api(rootProject.ext.dependencies["ydl-notracepoint"]) { api(rootProject.ext.dependencies["ydl-notracepoint"]) {
transitive = true transitive = true
exclude group: 'com.google.code.gson', module: 'gson' exclude group: 'com.google.code.gson', module: 'gson'
......
package com.ydl.ydlcommon.utils.log package com.ydl.ydlcommon.utils.log
import com.aliyun.sls.android.producer.* import com.aliyun.sls.android.producer.*
import com.apm.insight.log.VLog
import com.ydl.ydlcommon.base.BaseApp.Companion.getApp import com.ydl.ydlcommon.base.BaseApp.Companion.getApp
import com.ydl.ydlcommon.data.PlatformDataManager.getRam import com.ydl.ydlcommon.data.PlatformDataManager.getRam
import com.ydl.ydlcommon.modular.ModularServiceManager.getPlatformUserService import com.ydl.ydlcommon.modular.ModularServiceManager.getPlatformUserService
...@@ -45,6 +46,7 @@ class AliYunRichLogsHelper { ...@@ -45,6 +46,7 @@ class AliYunRichLogsHelper {
* @param value 具体的状态值 * @param value 具体的状态值
* */ * */
fun sendRichLog(key: String, value: String) { fun sendRichLog(key: String, value: String) {
VLog.i(key, value)
val log = Log() val log = Log()
val userInfo = getPlatformUserService()!!.getUser() val userInfo = getPlatformUserService()!!.getUser()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment