Commit ed92e1fd by 严久程

Merge branch '声网通话流程优化' into dev

# Conflicts:
#	config.gradle
#	m-audioim/src/main/java/com/ydl/audioim/AudioHomeActivity.kt
#	m-audioim/src/main/java/com/ydl/consultantim/ConsultantAudioHomeActivity.kt
#	m-confide/src/main/java/com/ydl/confide/home/bean/ConfideConnectResponse.kt
#	m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchActivity.kt
#	m-consultant/src/main/java/com/yidianling/consultant/adapter/ExpertSearchAdapter.kt
parents 5fca51ef 5ea2f4f9
......@@ -180,6 +180,7 @@ dependencies {
implementation fileTree(dir: 'aars', include: ['*.aar'])
implementation project(':m-user')
implementation modularPublication('com.ydl:m-user-api')
implementation modularPublication('com.ydl:m-confide-api')
api project(':m-tests')
api project(':m-consultant')
implementation modularPublication('com.ydl:m-consultant-api')
......@@ -187,7 +188,7 @@ dependencies {
api project(':m-home')
// api project(':m-confide')
api project(':m-confide')
// api "com.ydl:m-consultant-api:0.0.2"
// api 'com.ydl:m-consultant-module-ydl:0.0.18@aar'
......
......@@ -3,6 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.ydl.component">
<permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
......@@ -21,7 +23,7 @@
android:supportsRtl="true"
android:theme="@style/platform_CommonTheme"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:allowBackup, android:icon, android:label">
tools:replace="android:allowBackup, android:icon, android:label,android:name">
<activity
android:name=".music.FragmentContainerActivity"
android:theme="@style/platform_NoTitleTheme" />
......
package com.ydl.component
//import com.ydl.confide.home.ConfideHomeActivity
//import com.ydl.confide.home.ConfideHomeActivity
//import com.yidianling.consultant.ExpertSearchActivity.Companion.HOT_SEARCH_DOCTOR_NAME
//import com.yidianling.consultant.api.IConsultantService
import android.Manifest
import android.annotation.SuppressLint
import android.content.ComponentName
......@@ -12,34 +8,29 @@ import android.content.Intent
import android.content.ServiceConnection
import android.net.Uri
import android.os.IBinder
import android.os.Process
import android.provider.Settings
import android.util.Log
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.tbruyelle.rxpermissions2.RxPermissions
import com.umeng.analytics.MobclickAgent
import com.ydl.audioim.YDLavManager
import com.ydl.component.music.FragmentContainerActivity
import com.ydl.component.mvp.DemoContract
import com.ydl.component.mvp.DemoPresenter
import com.ydl.media.audio.PlayService
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.mvp.lce.BaseLceActivity
import com.ydl.ydlcommon.utils.ActivityManager.Companion.finishAll
import com.yidianling.common.tools.ToastUtil
import com.yidianling.fm.api.service.IFMService
import com.yidianling.tests.home.NewTestHomeActivity
import com.yidianling.user.ui.collect.CollectSexAndBirthActivity
import com.yidianling.user.widget.SecretDescriptionDialog
import com.yidianling.user.widget.SecretDescriptionDialog.OnSecretDescriptionDialogListener
import com.yidianling.user.widget.SecretDialog
import com.yidianling.user.widget.SecretDialog.OnSecretDialogListener
import kotlinx.android.synthetic.main.activity_main.*
import com.ydl.ydlcommon.utils.ResUtil.getResources
import com.alibaba.fastjson.serializer.AwtCodec.support
import android.support.v4.app.SupportActivity
import android.support.v4.app.SupportActivity.ExtraData
import com.ydl.component.mvp.DemoContract
import com.ydl.component.route.PlatformTempCommonRouteImpl
import com.ydl.confide.home.ConfideHomeActivity
import com.ydl.ydlcommon.router.YdlCommonRouterManager
/**
......@@ -78,6 +69,8 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
// YDLavManager.instances.init(this, "3387e9b251f3491e9221a9877e8f7830")
YdlCommonRouterManager.initYdlCommonRoute(PlatformTempCommonRouteImpl())
bindService()
reLoadData()
requestPermission()
......@@ -115,23 +108,23 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
FragmentContainerActivity.start(this, "TrendsHomeFragment")
}
bt_to_tests.setOnClickListener {
// startActivity(Intent(this, NewTestHomeActivity::class.java))
startActivity(Intent(this, NewTestHomeActivity::class.java))
// SecretActivity.Companion.startProtocol(this, it.data.getContent());
secretDescriptionDialog = SecretDescriptionDialog(
this@MainActivity,
"122342453653456345674356",
object : OnSecretDescriptionDialogListener {
override fun onCancel() {
secretDescriptionDialog!!.dismiss()
showEnsureDialog()
}
override fun onSure() {
secretDescriptionDialog!!.dismiss()
}
})
secretDescriptionDialog!!.setCanceledOnTouchOutside(false)
secretDescriptionDialog!!.show()
// secretDescriptionDialog = SecretDescriptionDialog(
// this@MainActivity,
// "122342453653456345674356",
// object : OnSecretDescriptionDialogListener {
// override fun onCancel() {
// secretDescriptionDialog!!.dismiss()
// showEnsureDialog()
// }
//
// override fun onSure() {
// secretDescriptionDialog!!.dismiss()
// }
// })
// secretDescriptionDialog!!.setCanceledOnTouchOutside(false)
// secretDescriptionDialog!!.show()
}
bt_to_collect_info.setOnClickListener {
......@@ -139,7 +132,7 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
}
bt_to_confide.setOnClickListener {
// YDLavManager.instances.login("1193016")
// startActivity(Intent(this, ConfideHomeActivity::class.java))
startActivity(Intent(this, ConfideHomeActivity::class.java))
}
bt_to_muse.setOnClickListener {
......@@ -185,44 +178,19 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
.navigation()
}
bt_to_home.setOnClickListener {
// FragmentContainerActivity.start(this, "YdlHomeFragment")
startActivity(Intent(this, TestAppActivity::class.java))
FragmentContainerActivity.start(this, "YdlHomeFragment")
}
bt_to_mine.setOnClickListener {
FragmentContainerActivity.start(this, "MineFragment")
}
bt_to_test.setOnClickListener {
val dialog = SecretDescriptionDialog(this@MainActivity,
"感谢您信任并使用壹点灵APP,\\n\n" +
"我们深知个人隐私的重要性,为了您更好的使用本APP,希望您着重关注:\\n\\n1. 为向您提供交易相关基本功能,我们会收集、使用必要的信息;\\n\n" +
"2. 基于您的明示授权,我们可能会获取您的位置(为您提供附近的咨询师等)、设备号信息(以保障您账号与交易安全)等信息,您有权拒绝或取消授权;\\n\n" +
"3. 我们会采业界先进的安全措施保护您的信息安全;\\n\n" +
"4. 未经您同意,我们不会从第三方处获取、共享或向其提供您的信息;\\n\n" +
"5. 您可以查询、更正、删除您的个人信息。",
object : SecretDescriptionDialog.OnSecretDescriptionDialogListener {
override fun onCancel() {
val secretDialog = SecretDialog(
this@MainActivity,
object : SecretDialog.OnSecretDialogListener {
override fun onCancel() {
ToastUtil.toastShort("onCancel")
}
override fun onSure() {
ToastUtil.toastShort("nextStep")
}
})
secretDialog?.show()
}
override fun onSure() {
ToastUtil.toastShort("nextStep")
}
}
)
dialog.show()
bt_to_privacy.setOnClickListener {
startActivity(Intent(this@MainActivity,TestAppActivity::class.java))
}
}
override fun reLoadData() {
mPresenter.loadHome()
}
......
......@@ -7,6 +7,7 @@ import android.support.v7.app.AppCompatActivity
import com.yidianling.consultant.ExpertSearchFragment
import com.yidianling.dynamic.trendsHome.TrendsHomeFragment
import com.yidianling.home.ui.fragment.YdlHomeFragment
import com.yidianling.user.mine.MineFragment
import kotlinx.android.synthetic.main.activity_test_app.*
import java.util.*
......@@ -28,6 +29,7 @@ class TestAppActivity : AppCompatActivity() {
fragments.add(YdlHomeFragment())
fragments.add(ExpertSearchFragment())
fragments.add(TrendsHomeFragment().setTab("trend_tap"))
fragments.add(MineFragment())
val adapter: FragmentPagerAdapter =
object : FragmentPagerAdapter(supportFragmentManager) {
override fun getItem(position: Int): Fragment {
......
package com.ydl.component.base;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Process;
import android.support.annotation.RequiresApi;
import com.facebook.stetho.Stetho;
import com.meituan.android.walle.WalleChannelReader;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.smtt.sdk.QbSdk;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
import com.ydl.audioim.YDLavManager;
import com.ydl.component.BuildConfig;
import com.ydl.component.MainActivity;
import com.ydl.media.audio.PlayService;
import com.ydl.ydlcommon.base.config.HttpConfig;
import com.ydl.ydlcommon.base.config.YDLConstants;
import com.ydl.ydlcommon.base.delegate.IAppLifecycles;
import com.ydl.ydlcommon.utils.LogUtil;
import com.ydl.ydlcommon.utils.YdlBuryPointUtil;
import com.yidianling.course.lifeCallback.CoursePlayLifecycle;
import com.yidianling.im.config.NimApplication;
import org.jetbrains.annotations.NotNull;
import io.flutter.view.FlutterMain;
/**
* Created by haorui on 2019-09-02.
* Des:
*/
public class DemoAppLifecycles implements IAppLifecycles {
@Override
public void attachBaseContext(@NotNull Context base) {
}
@RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public void onCreate(@NotNull Application application) {
//模块初始化
moduleInit(application);
if (NIMUtil.isMainProcess(application)) {
YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
//第三方SDK初始化
initThirdServiceSDK(application);
//Flutter 初始化需要在主线程中执行
FlutterMain.startInitialization(application);
// FlutterMain.ensureInitializationComplete(application, null);
//
// FlutterEngine flutterEngine = new FlutterEngine(application);
// flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
// YDLCommonPlugin plugin = new YDLCommonPlugin();
// flutterEngine.getLocalizationChannel().channel.setMethodCallHandler(plugin);
Intent intent = new Intent(application, PlayService.class);
application.startService(intent);
application.registerActivityLifecycleCallbacks(new CoursePlayLifecycle());
Stetho.initializeWithDefaults(application);
}
}
@Override
public void onTerminate(@NotNull Application application) {
}
private void moduleInit(Application application) {
NimApplication.getInstance().initIm(application, MainActivity.class);
}
private void initThirdServiceSDK(Application application) {
new Thread() {
@Override
public void run() {
super.run();
//设置线程优先级,不与主线程抢资源
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
//子线程中初始化X5内核,防止ANR问题
initX5(application);
if (DemoGlobalConfig.appEnv.equals(YDLConstants.ENV_PROD)) {
// YDLavManager.Companion.getInstances().init(application, "3387e9b251f3491e9221a9877e8f7830");
} else {
// YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
}
//bugly
String packageName = application.getPackageName();
String channel = WalleChannelReader.getChannel(application);
if (channel == null || channel.equals("null")) {
channel = "test";
}
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(application);
strategy.setAppChannel(channel);
String appkey = BuildConfig.DEBUG ? "630a3a5cea" : "3939e71afa";
CrashReport.initCrashReport(application, appkey, BuildConfig.DEBUG, strategy);
//umeng
String umAppkey = null;
if (BuildConfig.FLAVOR.endsWith("ydl")) {
umAppkey = "56970affe0f55a9cda001e24";
channel = "android_" + channel;
initUM(umAppkey, channel, application);
PlatformConfig.setWeixin("wx57a9d930270498c7", "17c031f02500ded3457a80e69d8e5e45");
PlatformConfig.setQQZone("1105070461", "6BvkUnk6wXJekcgR");
} else if (BuildConfig.FLAVOR.endsWith("xlzx")) {
umAppkey = "5859e1656e27a42fa400021f";
channel = "ATK_7_android_" + channel;
initUM(umAppkey, channel, application);
PlatformConfig.setWeixin("wx1c6af5a11b5f531f", "1ddb93abbb2d81e604657d38e94a5720");
PlatformConfig.setQQZone("1107931541", "8dCvxUpi525uPGTJ");
}
// 选用AUTO页面采集模式
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
MobclickAgent.setCatchUncaughtExceptions(!BuildConfig.DEBUG);
//开启友盟集成测试
UMConfigure.setLogEnabled(BuildConfig.DEBUG);
HttpConfig.Companion.getInstance().initSocketConfig(() -> {
//数据埋点初始化 (一定要放在主进程中/因为用到了umeng统计,需要放在umeng初始化后)
YdlBuryPointUtil.init(application, true);
});
//安全检测
//YDLAppProtector.init();
}
}.start();
}
private void initUM(String umAppKey, String channel, Application application) {
/**
* 初始化common库
* 参数1:上下文,不能为空
* 参数2:友盟 app key
* 参数3:友盟 channel
* 参数4:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机
* 参数5:Push推送业务的secret
*/
UMConfigure.init(application, umAppKey, channel, UMConfigure.DEVICE_TYPE_PHONE, null);
UMShareAPI.init(application, umAppKey);
}
/**
* 初始化X5内核
*
* @param application
*/
private void initX5(Application application) {
// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案
// HashMap map = new HashMap();
// map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
// QbSdk.initTbsSettings(map);
// if (!QbSdk.isTbsCoreInited()) {//// preinit只需要调用一次,如果已经完成了初始化,那么就直接构造view
// QbSdk.preInit(application, null);// 设置X5初始化完成的回调接口
// }
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
//初始化完成回调
LogUtil.i("QbSdk onViewInitFinished:" + arg0);
}
@Override
public void onCoreInitFinished() {
LogUtil.i("QbSdk onCoreInitFinished");
}
};
QbSdk.initX5Environment(application, cb);
}
}
\ No newline at end of file
......@@ -20,8 +20,8 @@ import java.util.List;
public final class DemoGlobalConfig implements IConfigModule {
String APP_DOMAIN = "https://api.github.com/";
// public static String appEnv = YDLConstants.ENV_AUTO_TEST;
// public static String appEnv = YDLConstants.ENV_TEST;
public static String appEnv = YDLConstants.ENV_PROD;
public static String appEnv = YDLConstants.ENV_TEST;
// public static String appEnv = YDLConstants.ENV_PROD;
@Override
public void injectAppLifecycle(@NotNull Context context, @NotNull List<IAppLifecycles> lifecycles) {
......@@ -34,6 +34,7 @@ public final class DemoGlobalConfig implements IConfigModule {
builder.setFrom("ydl".equals(BuildConfig.FLAVOR) ? YDLConstants.FROM_YDL : YDLConstants.FROM_XLZX)
.addUrl("github", APP_DOMAIN)
.setEnv(appEnv)
.setName("yidianling")
.setDebug(BuildConfig.DEBUG);
}
}
......@@ -14,12 +14,15 @@ import com.yidianling.home.ui.fragment.YdlHomeFragment
//import com.yidianling.dynamic.trendsHome.TrendsHomeFragment
//import com.yidianling.home.ui.fragment.YdlHomeFragment
import com.yidianling.im.ui.page.NewMultiMessageFragment
import com.yidianling.tests.home.NewTestHomeFragment
import com.yidianling.user.mine.MineFragment
class FragmentContainerActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(), DemoContract.View {
class FragmentContainerActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(),
DemoContract.View {
companion object{
fun start(context: Context,fragmentName : String = "") {
companion object {
fun start(context: Context, fragmentName: String = "") {
val intent = Intent(context, FragmentContainerActivity::class.java)
intent.putExtra("fragmentName", fragmentName)
context.startActivity(intent)
......@@ -37,6 +40,7 @@ class FragmentContainerActivity : BaseLceActivity<DemoContract.View, DemoContra
override fun getStateViewId(): Int {
return com.ydl.component.R.id.lce_state_view
}
override fun createPresenter(): DemoContract.Presenter {
return DemoPresenter()
}
......@@ -61,7 +65,7 @@ class FragmentContainerActivity : BaseLceActivity<DemoContract.View, DemoContra
}
private fun getFragment(): Fragment {
val fragmentName = intent.getStringExtra("fragmentName")?:""
val fragmentName = intent.getStringExtra("fragmentName") ?: ""
if ("NewMultiMessageFragment" == fragmentName) {
return NewMultiMessageFragment()
}
......@@ -74,6 +78,12 @@ class FragmentContainerActivity : BaseLceActivity<DemoContract.View, DemoContra
if ("ExpertSearchFragment" == fragmentName) {
return ExpertSearchFragment()
}
if ("MineFragment" == fragmentName) {
return MineFragment()
}
if ("NewTestHomeFragment" == fragmentName) {
return NewTestHomeFragment()
}
return PlayFragment()
}
}
package com.ydl.component.route
import android.app.Activity
import android.content.Context
import com.ydl.ydlcommon.router.IYdlCommonRouter
import com.ydl.ydlcommon.router.YdlUserInfo
import com.yidianling.im.bridge.P2PCustomActionHandlerImpl
import com.yidianling.im.router.ImIn
import com.yidianling.im.session.SessionHelper
import com.yidianling.user.ui.login.RegisterAndLoginActivity
class PlatformTempCommonRouteImpl : IYdlCommonRouter {
override fun startMain(activity: Activity, isSplashActivity: Boolean) {
}
override fun startMain(context: Context, selectTab: Int, trend_tap: String?) {
}
override fun setMoreService(context: Context) {
}
override fun getUserInfo(): YdlUserInfo? {
val userInfo = ImIn.getUserResponse() ?: return null
return YdlUserInfo(userInfo.uid ?: "", userInfo.accessToken ?: "", userInfo.hxpwd
?: "", userInfo.userInfo!!.nick_name ?: "", userInfo.userInfo!!.head ?: "")
}
override fun getUid(): Int {
return ImIn.getUserInfo()?.uid?.toInt() ?: 0
}
}
\ No newline at end of file
......@@ -3,6 +3,8 @@ package com.ydl.component.service.web;
import android.app.Activity;
import com.alibaba.android.arouter.launcher.ARouter;
import com.ydl.confide.api.IConfideService;
import com.ydl.webview.H5JsBean;
import com.ydl.webview.H5Params;
import com.ydl.webview.NewH5Activity;
......@@ -357,6 +359,11 @@ public class WVClickAbstractListener implements WebViewClientClickListener {
@Override
public void confideConnect(H5JsBean.H5JsCmd.Params jsData) {
// ModularServiceManager.INSTANCE.provide(IConfideService.class).connectionJava(jsData.getId(),jsData.getConfideType(),mContext,null,jsData.getCallType());
((IConfideService) ARouter.getInstance().build("/confide/ConfideService").navigation()).connectionJava(jsData.getId(), 3, mContext, null, jsData.getCallType());
}
@Override
......@@ -440,4 +447,6 @@ public class WVClickAbstractListener implements WebViewClientClickListener {
((NewH5Activity) mContext).setSelfPageType(selfType);
}
}
}
......@@ -16,7 +16,9 @@ import com.yidianling.user.UserHelper
*/
class WebJavascriptHandler : IJavascriptHandler{
override fun getUriAppendSuffix(): String {
return "platform_main_theme=00C9E2&platform_main_theme_light=00D4DF&platform_main_theme_bright=EAFAFC"
}
var wvEnventPro: WebViewClientClickListener? = null
constructor(listener: WebViewClientClickListener) : super() {
......
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%p" />
</set>
......@@ -17,7 +17,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/platform_google_blue"
android:background="@color/platform_main_theme"
android:gravity="center_vertical"
android:paddingLeft="30dp"
android:text="Multiple Base Url Request Test"
......@@ -59,7 +59,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/platform_google_blue"
android:background="@color/platform_main_theme"
android:gravity="center_vertical"
android:paddingLeft="30dp"
android:text="Component Module Test"
......@@ -203,13 +203,21 @@
android:paddingBottom="20dp">
<Button
android:id="@+id/bt_to_test"
android:id="@+id/bt_to_privacy"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:text="入口" />
<Button
android:id="@+id/bt_to_mine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:text="我的" />
</LinearLayout>
</LinearLayout>
......
......@@ -4,20 +4,52 @@
<color name="black" tools:ignore="MissingDefaultResource">#FF000000</color>
<color name="white">@android:color/white</color>
<color name="white_8p">#14FFFFFF</color>
<color name="white_16p">#29FFFFFF</color>
<color name="white_24p">#3DFFFFFF</color>
<color name="white_50p">#80FFFFFF</color>
<color name="white_96p">#F5FFFFFF</color>
<color name="black_50p">#80000000</color>
<color name="red">#F44336</color>
<color name="red_30p">#4CF44336</color>
<color name="blue">#2196F3</color>
<color name="grey">#9E9E9E</color>
<color name="grey_50p">#809E9E9E</color>
<color name="grey_300">#E0E0E0</color>
<color name="grey_700_96p">#F5616161</color>
<color name="grey_300_96p">#F5E0E0E0</color>
<color name="grey_900">#212121</color>
<color name="grey_900_96p">#F5212121</color>
<!-- ============ 标准颜色 ============ -->
<!--主题色 - 用于TabBar、突出文字、按钮和icon-->
<color name="platform_main_theme">#fdbd00</color>
<!--辅助色 1 - 主色系浅色-->
<color name="platform_main_theme_light">#FFEC8C</color>
<!--辅助色 2 - 主色系亮色-->
<color name="platform_main_theme_bright">#fffae0</color>
<!-- ============ 背景颜色 ============ -->
<!-- 标签背景色-->
<color name="platform_tag_bg_color">#F7F7F7</color>
<!-- 大面积背景颜色-->
<color name="platform_big_bg_color">#F0F0F0</color>
<!-- 分割线颜色-->
<color name="platform_dividing_line_color">#EBEBEB</color>
<!-- 主题色渐变背景颜色 -->
<color name="platform_main_gradient_start_color">#fdbd00</color>
<color name="platform_main_gradient_end_color">#FFD814</color>
<!-- 主题色渐变未选中背景颜色 -->
<color name="platform_main_gradient_start_color_un">#66fdbd00</color>
<color name="platform_main_gradient_end_color_un">#66FFD814</color>
<!-- ============ 文字颜色 ============ -->
<!-- 一级类目,标题、点缀文字颜色-->
<color name="platform_text_dark_color">#242424</color>
<!-- 二级类目文字颜色-->
<color name="platform_text_light_color">#666666</color>
<!-- 三级次要文字颜色-->
<color name="platform_text_bright_color">#999999</color>
<!-- 四级编辑框提示文字颜色-->
<color name="platform_text_hint_color">#BFBFBF</color>
<!-- ============ 按钮颜色 ============ -->
<!--确认文字按钮颜色 - 亮色模式下与深色模式相反-->
<color name="platform_but_text_color">#242424</color>
<!--按钮字体颜色 - 亮色模式下与深色模式近似-->
<color name="platform_but_text_color_unselected">#555555</color>
<color name="platform_but_text_color_selected">#242424</color>
</resources>
......@@ -3,7 +3,4 @@
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="text_size_common">16sp</dimen>
<dimen name="play_bar_height">57dp</dimen>
<dimen name="screen_tips_top">80dp</dimen>
<dimen name="divider_height">0.5dp</dimen>
</resources>
......@@ -16,6 +16,8 @@ buildscript {
constrait_support_version = '1.0.2'
}
repositories {
google()
//壹点灵android maven私服 开发版
maven{
url 'http://nexus.yidianling.com/repository/AndroidRepository/'
......
......@@ -2,6 +2,51 @@ ext {
kotlin_version = "1.3.21"
dev_mode = false
ydlPublishVersion = [
// -------------- 业务模块 --------------
//第三步 若干
"m-confide" : "0.0.48.52",
"m-consultant" : "0.0.59.10",
"m-fm" : "0.0.29.9",
"m-user" : "0.0.60.12",
"m-home" : "0.0.22.5",
"m-im" : "0.0.18.10",
"m-dynamic" : "0.0.7.7",
"m-article" : "0.0.0.5",
"m-muse" : "0.0.28.12",
"m-tests" : "0.0.24.7",
"m-course" : "0.0.42.5",
//-------------- 业务模块 API 层 --------------
"m-audioim-api" : "0.0.6",
"m-confide-api" : "0.0.2.1",
"m-consultant-api": "0.0.5.2",
"m-course-api" : "0.0.3.6",
"m-fm-api" : "0.0.3",
"m-muse-api" : "0.0.1",
"m-tests-api" : "0.0.2",
"m-user-api" : "0.0.10.15",
"m-home-api" : "0.0.4.1",
"m-im-api" : "0.0.12.21",
"m-dynamic-api" : "0.0.3.7",
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.39.26",
//第二步 若干
"ydl-webview" : "0.0.38.32",
"ydl-media" : "0.0.21.6",
"ydl-pay" : "0.0.18.9",
"m-audioim" : "0.0.49.29.4",
"ydl-flutter-base": "0.0.14.16",
//以下 几乎不会动
"router" : "0.0.1",
"ydl-net" : "0.0.3.1",
"ydl-utils" : "0.0.3.1",
]
ydl_app = [
appName : "心理咨询壹点灵",
applicationId: "com.cxzapp.yidianling",
......@@ -39,51 +84,7 @@ ext {
]
ydlPublishVersion = [
// -------------- 业务模块 --------------
//第三步 若干
"m-confide" : "0.0.48.44",
"m-consultant" : "0.0.59.15",
"m-fm" : "0.0.29.3",
"m-user" : "0.0.60.3",
"m-home" : "0.0.22.2",
"m-im" : "0.0.18.1",
"m-dynamic" : "0.0.7.5",
"m-muse" : "0.0.28.9",
"m-tests" : "0.0.24.0",
"m-course" : "0.0.42.0",
//-------------- 业务模块 API 层 --------------
"m-audioim-api" : "0.0.5",
"m-confide-api" : "0.0.1.1",
"m-consultant-api": "0.0.4",
"m-course-api" : "0.0.2",
"m-fm-api" : "0.0.2",
"m-muse-api" : "0.0.1",
"m-tests-api" : "0.0.1",
"m-user-api" : "0.0.9",
"m-home-api" : "0.0.3",
"m-im-api" : "0.0.8",
"m-dynamic-api" : "0.0.1",
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.39.24",
//第二步 若干
"ydl-webview" : "0.0.38.29",
"ydl-media" : "0.0.20",
"ydl-pay" : "0.0.17",
"m-audioim" : "0.0.49.18",
"ydl-flutter-base": "0.0.14.12",
//以下 几乎不会动
"router" : "0.0.1",
"ydl-net" : "0.0.3.1",
"ydl-utils" : "0.0.3.1",
]
ydlCompileVersion = [
// -------------- 业务模块 --------------
......@@ -101,28 +102,28 @@ ext {
"m-tests" : "0.0.18.1",
"m-course" : "0.0.34.10",
//-------------- 业务模块 API 层 --------------
"m-audioim-api" : "0.0.5",
"m-confide-api" : "0.0.1.1",
"m-consultant-api": "0.0.4",
"m-course-api" : "0.0.2",
"m-fm-api" : "0.0.2",
"m-audioim-api" : "0.0.6",
"m-confide-api" : "0.0.2.1",
"m-consultant-api": "0.0.5.2",
"m-course-api" : "0.0.3.6",
"m-fm-api" : "0.0.3",
"m-muse-api" : "0.0.1",
"m-tests-api" : "0.0.1",
"m-user-api" : "0.0.9",
"m-home-api" : "0.0.3",
"m-im-api" : "0.0.8",
"m-dynamic-api" : "0.0.1",
"m-tests-api" : "0.0.2",
"m-user-api" : "0.0.10.15",
"m-home-api" : "0.0.4.1",
"m-im-api" : "0.0.12.21",
"m-dynamic-api" : "0.0.3.7",
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.39.24",
//第二步 若干
"ydl-platform" : "0.0.39.26",
"ydl-webview" : "0.0.38.29",
"ydl-media" : "0.0.20",
"ydl-pay" : "0.0.17",
"m-audioim" : "0.0.49.18",
"ydl-flutter-base": "0.0.10.9",
//第二步 若干
"ydl-webview" : "0.0.38.31",
"ydl-media" : "0.0.21.6",
"ydl-pay" : "0.0.18.9",
"m-audioim" : "0.0.49.29.4",
"ydl-flutter-base": "0.0.14.14",
//以下 几乎不会动
"router" : "0.0.1",
......@@ -270,7 +271,7 @@ ext {
//flutter功能组件升级===>发布ydl-flutter组件===>引用flutter相关的业务模块
"ydl-flutter-base" : "com.ydl:ydl-flutter-base:${ydlCompileVersion["ydl-flutter-base"]}", //组件化项目中的flutter base模块
"ydl-flutter" : "com.ydl:ydl-flutter:0.0.18.9@aar", //flutter aar
"ydl-flutter" : "com.ydl:ydl-flutter:0.0.20@aar", //flutter aar
"ydl-flutter-sp" : "com.ydl:ydl-flutter-sp:0.0.2@aar", //flutter 缓存 aar
//基础组件 <<--- 先发这个,发完改这里的版本号
......
/build
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'resTools' // 资源重命名插件
// 配置资源重命名插件
resConfig {
new_prefix = 'article_' // 资源前缀
old_prefix = '' // 老前缀,可为''空字符串
}
kapt {
arguments {
arg("AROUTER_MODULE_NAME", "article")
}
}
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: "article"]
}
}
flavorDimensions "versionCode"//Flavor 维度信息
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//前缀的名字
// resourcePrefix "article_"
//Flavor 信息
publishNonDefault true
productFlavors {
ydl {}
xlzx {}
}
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
res.srcDirs = [
'src/main/res'
]
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
api fileTree(dir: 'libs', include: ['*.aar','*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
kapt 'com.alibaba:arouter-compiler:1.2.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
api rootProject.ext.dependencies["ydl-user-router"]
if (rootProject.ext.dev_mode){
//开发时使用
api project(':ydl-webview')
api project(':ydl-platform')
implementation project(':ydl-flutter-base')
}else {
//发布时使用
api rootProject.ext.dependencies["ydl-webview"]
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
implementation rootProject.ext.dependencies["ydl-flutter-base"]
}
}
isApplicaiton = false
modular {
packageName "com.ydl.audioim"
//模块包名
packageName "com.yidianling.article"
// 模块发布需要的参数
publish {
modules {
xlzx {
groupId = "com.ydl"
artifactId = "m-article-module-xlzx"
// 上报的 心理咨询 业务模块 aar 包的版本号
version = rootProject.ext.ydlPublishVersion[childProject.getName()]
}
ydl{
groupId = "com.ydl"
artifactId = "m-article-module-ydl"
// 上报的 壹点灵 业务模块 aar 包的版本号
version = rootProject.ext.ydlPublishVersion[childProject.getName()]
}
}
api {
//发布信息 module/api 通用
//壹点灵/心理咨询 业务模块 API层 jar包的发布信息
groupId = "com.ydl"
artifactId = "m-audioim-api"
artifactId = "m-article-api"
//开发时注释掉版本号,发布api时打开
version = rootProject.ext.ydlPublishVersion[childProject.getName()+"-api"]
// version = "0.0.5"
// API 层打包时需要引入的依赖
apiDependencies {
implementation "com.google.code.gson:gson:2.8.2"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.alibaba:arouter-api:1.4.1'
implementation 'de.greenrobot:eventbus:2.4.0'
}
}
}
......
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yidianling.article">
<application>
<activity android:name=".flutter.ArticleActivity"
android:screenOrientation="portrait"/>
</application>
</manifest>
\ No newline at end of file
package com.yidianling.article.flutter
import com.alibaba.android.arouter.facade.annotation.Route
import com.channel.ydl_flutter_base.base.BaseFlutterActivity
import org.json.JSONObject
/**
* Created by harvie on 2019/9/6.
*/
@Route(path = "/article/list")
class ArticleActivity : BaseFlutterActivity() {
override fun initialRoute(): String {
return "article/home"
}
override fun initChannelPlugin(jsonObject: JSONObject) {
ArticlePlugin.rigister(this)
}
}
package com.yidianling.article.flutter
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydlcommon.utils.AppUtils
import com.ydl.ydlcommon.view.dialog.YDLShareDialog
import com.yidianling.common.tools.ToastUtil
import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
/**
* Created by harvie on 2019/9/6.
*/
class ArticlePlugin : MethodChannel.MethodCallHandler {
companion object {
const val CHANNEL: String = "lib/m_module/article"
const val ACTION_TO_H5 = "action_to_h5" //跳转原生H5
const val ACTION_GET_COMMON_PARAMS = "action_get_common_params" //获取http公用参数
fun rigister(activity: FlutterActivity) {
MethodChannel(activity.flutterView, CHANNEL).setMethodCallHandler(ArticlePlugin(activity))
}
}
private var mActivity: FlutterActivity? = null
private constructor(activity: FlutterActivity) {
mActivity = activity
}
override fun onMethodCall(methodCall: MethodCall, result: MethodChannel.Result) {
methodCall.let {
when (methodCall.method) {
// flutter获取原生的功能
ACTION_TO_H5 -> {
var url: String? = methodCall.argument<String>("url")
YDLRouterManager.router("ydl-user://h5/h5?params={'url':'${url}'}")
// NewH5Activity.start(mActivity, H5Params(url?:"",null))
}
ACTION_GET_COMMON_PARAMS -> {
val map = AppUtils.getHttpCommonParams()
result?.success(map)
}
else -> {
}
}
}
}
/**
* 分享,跟FM一致
*/
private fun share(methodCall: MethodCall?) {
var shareUrl = methodCall?.argument<String>("shareUrl") ?: ""
var title = methodCall?.argument<String>("title") ?: ""
var path = methodCall?.argument<String>("path") ?: ""
var appId = methodCall?.argument<String>("appId") ?: ""
if (shareUrl.isEmpty()) {
ToastUtil.toastShort("分享数据获取失败")
} else {
val dialog = YDLShareDialog.style7(mActivity!!, title, shareUrl, null, "https://img.yidianling.com/file/2019/06/10/fm0vovijx0p2br9s.png", path, appId)
dialog.setCallBack(object : YDLShareDialog.ICallBack {
override fun callBack(type: Int) {
}
})
dialog.show(mActivity!!.fragmentManager, "lose")
}
}
}
\ No newline at end of file
......@@ -85,11 +85,13 @@ dependencies {
api project(':ydl-webview')
implementation modularPublication('com.ydl:m-user-api')
implementation modularPublication('com.ydl:m-audioim-api')
implementation modularPublication('com.ydl:m-im-api')
}else {
//发布时使用
api rootProject.ext.dependencies["ydl-webview"]
compileOnly rootProject.ext.dependencies["ydl-m-user-api"]
compileOnly rootProject.ext.dependencies["ydl-m-audioim-api"]
compileOnly rootProject.ext.dependencies["ydl-m-im-api"]
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
......
package com.ydl.audioim
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.ydl.audioim.api.AudioImApi
/**
* 模块对外提供接口的实现类
*/
@Route(path = "/audioim/audioimapi")
class AudioImImpl: AudioImApi {
override fun init(context: Context?) {
}
override fun loginAgora(userId: String?) {
YDLavManager.instances.login(userId)
}
}
\ No newline at end of file
package com.ydl.audioim.bean;
/**
* @author jiucheng
* @描述:自定义的Invitation
* @Copyright Copyright (c) 2018
* @Company 壹点灵
* @date 2020/4/23
*/
public class AgoraInvitationBean {
public String data;
public String business="agora";
public String callType;//1发起呼叫 2接受呼叫 3取消呼叫 4拒绝呼叫邀请 5呼叫超时
}
......@@ -3,7 +3,9 @@ package com.ydl.audioim.http
import com.google.gson.Gson
import com.ydl.audioim.bean.AgoraTokenResponse
import com.ydl.audioim.bean.ConnectBean
import com.ydl.audioim.http.command.*
import com.ydl.audioim.http.command.ConnectCommand
import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.http.command.NoticePushCommand
import com.ydl.consultantim.bean.ListenTokenBean
import com.ydl.consultantim.command.ListenTokenCmd
import com.ydl.ydlcommon.data.http.BaseAPIResponse
......@@ -29,8 +31,7 @@ class AudioApiRequestUtil {
*/
fun connectListen(cmd: ConnectCommand): Observable<BaseAPIResponse<ConnectBean>> {
return RxUtils.mapObservable(cmd)
.flatMap {
it->
.flatMap { it ->
YDLHttpUtils.obtainApi(AudioNetAPi::class.java).connectListen(it)
}
}
......@@ -85,15 +86,19 @@ class AudioApiRequestUtil {
/**
* 获取声网登录token
*/
fun getAgoraToken(): Observable<BaseAPIResponse<AgoraTokenResponse>>{
fun getAgoraToken(): Observable<BaseAPIResponse<AgoraTokenResponse>> {
return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).getAgoraToken()
}
/**
* 获取声网登录token
*/
fun listenToken(cmd: ListenTokenCmd): Observable<BaseResponse<ListenTokenBean>>{
fun listenToken(cmd: ListenTokenCmd): Observable<BaseResponse<ListenTokenBean>> {
return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).listenToken(NetworkParamsUtils.getMaps(cmd))
}
fun callEndStatusUpdate(channelId: String, endStatus: Int, msg: String): Observable<BaseAPIResponse<Any>> {
return YDLHttpUtils.obtainApi(AudioNetAPi::class.java).callEndStatusUpdate(channelId, endStatus, msg)
}
}
}
\ No newline at end of file
......@@ -69,4 +69,8 @@ interface AudioNetAPi {
fun listenToken(@FieldMap map: Map<String, String>): Observable<BaseResponse<ListenTokenBean>>
@GET("message/call-end/agora")
@Headers( YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun callEndStatusUpdate(@Query("channelId") channelId:String,@Query("endStatus") endStatus:Int,@Query("msg") msg:String): Observable<BaseAPIResponse<Any>>
}
\ No newline at end of file
package com.ydl.audioim.router
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.yidianling.im.api.bean.IMRegisterObserverCustomNotificationCallBack
import com.yidianling.im.api.bean.IMSendCustomNotificationResultCallBack
import com.yidianling.im.api.service.IImService
/**
* @author jiucheng
* @描述:
* @Copyright Copyright (c) 2018
* @Company 壹点灵
* @date 2020/4/21
*/
object AudioImIn {
private fun getImService(): IImService {
return ModularServiceManager.provide(IImService::class.java)
}
/**
* 发送自定义通知
*/
fun sendCustomNotification(toUid: String, content: String, callback: IMSendCustomNotificationResultCallBack) {
getImService().sendCustomNotification(toUid, content, callback)
}
/**
* 注册自定通知接收器
*/
fun registerObserveCustomNotification(callback: IMRegisterObserverCustomNotificationCallBack) {
getImService().registerObserveCustomNotification(callback)
}
}
\ No newline at end of file
package com.ydl.audioim.api
import com.alibaba.android.arouter.facade.template.IProvider
/**
* 对外api接口
*/
interface AudioImApi : IProvider {
/**
* 登录声网Im
*/
fun loginAgora(uid:String?)
}
\ No newline at end of file
......@@ -3,6 +3,6 @@
<corners android:radius="90dp" />
<solid android:color="@color/platform_google_blue" />
<solid android:color="@color/platform_main_theme" />
</shape>
\ No newline at end of file
......@@ -3,7 +3,7 @@
<corners android:radius="20dp" />
<gradient android:startColor="#1DA1F2"
android:endColor="@color/dynamic_main_theme_light"
android:endColor="#1DA1F2"
android:angle="180"/>
</shape>
\ No newline at end of file
......@@ -6,6 +6,7 @@
android:layout_height="match_parent"
android:background="@color/platform_color_80353535">
<TextView
android:id="@+id/tv_change_route"
android:layout_width="wrap_content"
......@@ -14,21 +15,30 @@
android:layout_marginTop="25dp"
android:layout_marginRight="10dp"
android:background="?android:attr/selectableItemBackground"
android:drawableRight="@drawable/audioim_img_choose_arrow_unuse"
android:drawablePadding="6dp"
android:padding="5dp"
android:text="切换至传统电话"
android:text="后可切换至传统电话"
android:textColor="@color/platform_color_50FFFFFF"
android:textSize="13sp"
android:visibility="visible" />
<TextView
android:id="@+id/tv_change_time_counter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tv_change_route"
android:layout_toLeftOf="@+id/tv_change_route"
android:textColor="@color/white"
android:textSize="15dp"
tools:text="60s" />
<RelativeLayout
android:id="@+id/rl_head"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="74dp">
android:layout_marginTop="60dp">
<com.ydl.ydlcommon.view.WaveView
android:id="@+id/wave_view"
......@@ -80,33 +90,53 @@
tools:text="你存在的本身就是值得被爱的你存在的本身就是值得被爱的" />
<!-- 倾诉剩余时间-->
<RelativeLayout
<android.support.constraint.ConstraintLayout
android:id="@+id/rl_remain_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/rl_hang_up"
android:layout_marginBottom="20dp"
android:visibility="gone">
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/tv_notes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="您的倾诉时间还有"
android:textColor="@color/platform_color_30FFFFFF"
android:textSize="12sp" />
android:text="剩余时长"
android:textColor="@color/white"
android:textSize="15dp"
app:layout_constraintEnd_toStartOf="@+id/tv_remain_time"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_remain_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_notes"
android:layout_centerHorizontal="true"
android:layout_marginStart="11dp"
android:layout_toRightOf="@+id/tv_notes"
android:text="23:23"
android:textColor="@color/white"
android:textSize="20sp" />
</RelativeLayout>
android:textSize="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_notes"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_notes"
android:layout_marginTop="2dp"
android:text="(限24小时内拨打)"
android:textColor="#80FFFFFF"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_remain_time" />
</android.support.constraint.ConstraintLayout>
<TextView
android:id="@+id/tv_change_doctor"
......@@ -130,7 +160,8 @@
android:text="正在等待聆听者接受邀请…"
android:textColor="@color/platform_color_70FFFFFF"
android:textSize="12sp"
android:visibility="visible" />
android:visibility="visible"
tools:visibility="gone" />
<!--挂断按钮-->
<RelativeLayout
......@@ -212,8 +243,27 @@
android:paddingBottom="4dp"
android:textColor="@color/white"
android:visibility="gone"
tools:visibility="visible"
tools:text="已接通"
/>
tools:visibility="visible" />
<TextView
android:id="@+id/tv_nte_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_tips"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="@drawable/audioim_toast_view_background"
android:drawableLeft="@drawable/av_audio_wifi_better"
android:elevation="6dp"
android:paddingLeft="11dp"
android:paddingTop="4dp"
android:paddingRight="11dp"
android:paddingBottom="4dp"
android:textColor="@color/white"
android:visibility="gone"
tools:text="对方的网络状况不佳"
tools:visibility="visible" />
</RelativeLayout>
......@@ -47,6 +47,7 @@
android:textColor="@color/white"
android:textSize="26sp"
tools:text="用户" />
<TextView
android:id="@+id/tv_tips"
android:layout_width="wrap_content"
......@@ -59,9 +60,9 @@
android:ellipsize="end"
android:gravity="center"
android:maxLines="2"
android:text="向您发起语音通话请求"
android:textColor="@color/white"
android:textSize="15sp"
android:text="向您发起语音通话请求" />
android:textSize="15sp" />
<!--自定义弹窗-->
......@@ -83,6 +84,26 @@
tools:text="连接中..."
tools:visibility="visible" />
<TextView
android:id="@+id/tv_nte_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_tips"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="@drawable/audioim_toast_view_background"
android:drawableLeft="@drawable/av_audio_wifi_better"
android:elevation="6dp"
android:paddingLeft="11dp"
android:paddingTop="4dp"
android:paddingRight="11dp"
android:paddingBottom="4dp"
android:textColor="@color/white"
android:visibility="gone"
tools:text="对方的网络状况不佳"
tools:visibility="visible" />
<!-- 倾诉剩余时间-->
<RelativeLayout
android:id="@+id/rl_remain_time"
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="audioim_color_40353535">#66353535</color>
<color name="audioim_color_80353535">#CC353535</color>
<color name="audioim_color_50ffffff">#B3ffffff</color>
<color name="audioim_color_30FFFFFF">#4DFFFFFF</color>
<color name="audioim_color_70FFFFFF">#B3FFFFFF</color>
</resources>
<resources>
<string name="audioim_app_name">av</string>
<string name="audioim_need_storage_permission_hint">App正常工作需要内部存储使用权限,请开启</string>
</resources>
......@@ -85,6 +85,8 @@ dependencies {
api project(':ydl-media')
api project(':ydl-platform')
api project(':m-audioim')
api project(":ydl-pay")
api project(':ydl-webview')
implementation modularPublication('com.ydl:m-im-api')
implementation modularPublication('com.ydl:m-user-api')
implementation modularPublication('com.ydl:m-confide-api')
......@@ -92,6 +94,8 @@ dependencies {
//发布时使用
api rootProject.ext.dependencies["ydl-media"]
api rootProject.ext.dependencies["m-audioim"]
api rootProject.ext.dependencies["ydl-pay"]
api rootProject.ext.dependencies["ydl-webview"]
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
......
......@@ -6,35 +6,35 @@ import com.ydl.audioim.bean.ExpertInfoBean
/**
* 倾诉连接响应数据
*/
class ConfideConnectResponse{
class ConfideConnectResponse {
var dialDetail : DialDetail? = null
var listenOrderId : Long? = 0 //订单ID
var callId : String? = null //
var payId : String?=null //支付ID
var payTitle : String? = null //支付标题
var listenOrderPrice : Double? = null //订单金额
var userBaseInfoRespDto : UserBaseInfoRespDto?=null
var coupon :CouponData? = null //优惠信息
var dialDetail: DialDetail? = null
var listenOrderId: Long? = 0 //订单ID
var callId: String? = null //
var payId: String? = null //支付ID
var payTitle: String? = null //支付标题
var listenOrderPrice: Double? = null //订单金额
var userBaseInfoRespDto: UserBaseInfoRespDto? = null
var coupon: CouponData? = null //优惠信息
var isShowAxb = true
}
class DialDetail{
class DialDetail {
var agoraExpertInfo: ExpertInfoBean? = null
var callConnectType :Int ? = null
var dialReason : String? = null //连接失败原因
var dialStatus : Int? = null //连接状态
var phoneNu : String ?= null //axb号码
var callConnectType: Int? = null
var dialReason: String? = null //连接失败原因
var dialStatus: Int? = null //连接状态
var phoneNu: String? = null //axb号码
}
class UserBaseInfoRespDto{
var availableMoney : Double ? = null
var companyMoney : Double ? = null
var doctorId : Long ? = null
var phone : Long ? = null
var userType : String?=null
class UserBaseInfoRespDto {
var availableMoney: Double? = null
var companyMoney: Double? = null
var doctorId: Long? = null
var phone: Long? = null
var userType: String? = null
}
class CouponData{
var couponMoney:Double? = 0.00
class CouponData {
var couponMoney: Double? = 0.00
}
\ No newline at end of file
package com.ydl.confide.home.constants;
/**
* 一些常量字符串
* Created by hgw on 2017/5/20.
*/
public class FinalString {
//绑定手机提示语
public static final String BIND_PHONE = "为了及时接收消息通知,请立即绑定手机";
//用户对用户发起第一次私聊做安全提示
public static final String FIRST_CHAT_TIP = "对方非认证咨询师,请注意保护隐私,以免造成信息泄露";
public static final String MESSAGE_IN_NUM="请注意自我保护!向陌生人发送联系方式,隐私存在被传播泄漏风险,平台内所有联系方式均对双方匿名显示";
public static final String CALL_PHONE = "\n400-765-1010\n(服务时间 早8:30-凌晨2:00)";
//连接倾听未绑定手机提示
public static final String TEL_BINDPHONE = "电话连接需要绑定手机哦~";
}
package com.ydl.confide.home.modular.service
import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.support.v4.app.DialogFragment
import android.text.TextUtils
import com.alibaba.android.arouter.facade.annotation.Route
import com.google.gson.Gson
import com.ydl.audioim.YDLavManager
import com.ydl.audioim.widget.AxbConfirmDialog
import com.ydl.confide.api.IConfideService
import com.ydl.confide.home.ConfideHomeActivity
import com.ydl.webview.TellData
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.base.config.YDLConstants
import com.ydl.ydlcommon.utils.YDLCacheUtils
/**
* Created by haorui on 2019-12-11 .
......@@ -39,6 +49,67 @@ class ConfdieServiceImpl : IConfideService {
context.startActivity(intent)
}
override fun connectionJava(id: Int, type: Int, activity: Activity, tellData: String?, callType: String?) {
var myTellData: TellData? = if (tellData == null ) null else Gson().fromJson(tellData, TellData::class.java)
ConfideWebServiceImpl().connectionJava(id, type, activity, myTellData, callType)
}
override fun ydlAvManagerLogin(uid: String?) {
YDLavManager.instances.login(uid)
}
override fun startCondifeHomePage(context: Context, isSplash: Boolean) {
val intent1 = Intent(context, ConfideHomeActivity::class.java)
intent1.putExtra("isSplash", isSplash)
intent1.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent1)
}
override fun initYdlavManager(app: Application) {
var avManagerKey = ""
if (BaseApp.instance.getGlobalConfig().appDebug) {
val appEnv = BaseApp.instance.getGlobalConfig().appEnv
//debug包根据url判断使用正式或者测试key
val cacheAppEnv = YDLCacheUtils.getCacheApi()
if (!TextUtils.isEmpty(cacheAppEnv)) {
if (YDLConstants.ENV_TEST == cacheAppEnv) {
avManagerKey = "13b1536698f64905a1e7e5bb978ba821"
} else {
avManagerKey = "3387e9b251f3491e9221a9877e8f7830"
}
} else {
if (YDLConstants.ENV_TEST == appEnv || YDLConstants.ENV_AUTO_TEST == appEnv) {
avManagerKey = "13b1536698f64905a1e7e5bb978ba821"
} else {
avManagerKey = "3387e9b251f3491e9221a9877e8f7830"
}
}
} else {
//release包始终使用正式key
avManagerKey = "3387e9b251f3491e9221a9877e8f7830"
}
YDLavManager.instances.init(app, avManagerKey)
}
override fun showAxbConfirmDialog(activity: Activity?, type: Int, phoneNumber: String?) {
val dialog = AxbConfirmDialog(activity, type, object : AxbConfirmDialog.OnClickEnsureListener {
override fun onClickEnsure() {
phoneNumber?.let {
val phoneIntent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber!!))
activity?.startActivity(phoneIntent)
}
}
override fun onClose() {
}
})
dialog.show()
}
override fun closePlayer() {
}
......
package com.ydl.confide.home.modular.service
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.text.TextUtils
import com.alibaba.android.arouter.launcher.ARouter
import com.ydl.audioim.IntentConstants
import com.ydl.audioim.bean.ExpertInfoBean
import com.ydl.audioim.widget.AxbConfirmDialog
import com.ydl.confide.home.bean.ConnectParamJava
import com.ydl.confide.home.constants.FinalString
import com.ydl.confide.home.http.ConfideHomeDataManager
import com.ydl.confide.home.util.ConfideNetworkUtil
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.webview.TellData
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.user.api.service.IUserService
import com.yidianling.ydl_pay.pay.payDialog.CallBack
import com.yidianling.ydl_pay.pay.payDialog.ConfidePayParams
import com.yidianling.ydl_pay.pay.payDialog.PayDialog
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
/**
* Created by haorui on 2019-10-10.
* Des: 对应主项目中的WebServiceImpl
*/
class ConfideWebServiceImpl{
//倾诉支付弹窗
fun confidePayDialog(id: Int?, type : Int?, activity: Activity, confidePay : ConfidePayParams, callType:String?){
PayDialog(activity)
.setCallback(object : CallBack {
override fun onSuccess() {
//支付成功,直接拨打
if (TextUtils.isEmpty(confidePay.confideUrl)){
connectionJava(id?:0,type?:1,activity,null,callType)
}else{
//倾诉订单列表页面过来,会有confideUrl值,则直接跳转此url
NewH5Activity.start(activity, H5Params(confidePay.confideUrl!!,""))
}
}
override fun onError() {
}
})
.show(confidePay)
}
//java版axb和声网接口
@SuppressLint("CheckResult")
fun connectionJava(id: Int, type : Int, activity: Activity, tellData : TellData?, callType:String?){
ConfideHomeDataManager.getHttp().connectionJava(ConnectParamJava(""+id, ""+type,callType))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if ("200".equals(it.code)){
if (it.data?.dialDetail?.dialStatus !=null){
if (100007 == it.data?.dialDetail?.dialStatus) {
//支付弹窗
//参数转换
var confidePay = ConfidePayParams(it.data?.payTitle?:"倾诉服务",it.data?.listenOrderPrice,it.data?.coupon?.couponMoney?:0.00,
it.data?.userBaseInfoRespDto?.availableMoney?:0.00,it.data?.payId?:"","")
confidePayDialog(id,type,activity,confidePay,callType)
} else if (100008 == it.data?.dialDetail?.dialStatus) {
CommonDialog(activity)
.setCancelAble(false)
.setMessage(FinalString.TEL_BINDPHONE)
.setLeftOnclick("忍痛放弃",null)
.setRightClick("果断绑定") { view->
try {
ModularServiceManager.provide(IUserService::class.java).wxBindToInputhonePage(activity)
}catch (e: Exception) {}
}
.show()
}else if(0==it.data?.dialDetail?.dialStatus){
//连接成功
if (it.data?.dialDetail?.callConnectType?:-1==3){
//声网
it.data?.dialDetail?.agoraExpertInfo?:return@subscribe
callAgora(activity,id,it.data!!.dialDetail!!.agoraExpertInfo!!,it.data.callId?:"0",it.data.listenOrderId?:0L,tellData,it.data.isShowAxb)
}else{
//axb
val dialog = AxbConfirmDialog(activity,1,object :AxbConfirmDialog.OnClickEnsureListener{
override fun onClickEnsure() {
var phoneIntent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:${it.data?.dialDetail?.phoneNu?:0}"))
activity.startActivity(phoneIntent)
}
override fun onClose() {
}
})
dialog.show()
}
}else{
ToastHelper.show(it.data?.dialDetail?.dialReason?:"连接失败")
}
}else{
ToastHelper.show(it.data?.dialDetail?.dialReason?:"连接失败")
}
}else{
ToastHelper.show(it.msg)
}
}, {
ToastHelper.show(it.message?:"连接失败")
})
}
//启动声网电话
private fun callAgora(activity: Activity, confideId:Int, expertInfo : ExpertInfoBean, call_id:String, relation_id:Long, tellData: TellData?,isShowAXB:Boolean){
//3G以下或者其他不确定异常能判断出来的
if (!ConfideNetworkUtil.isWifiOr3G(activity)) {
CommonDialog.create(activity)
.setTitle("温馨提示")
.setMessage("当前网络异常\n请使用普通电话拨打?")
.setLeftOnclick("暂不拨打") {
}
.setRightClick("普通电话拨号") {
connectionJava(confideId,1,activity,tellData,"0")
}
.show()
} else {
if (expertInfo.listenerStatus != 1) {
ToastHelper.show("老师正在通话中,请稍后重试")
return
}
if (TextUtils.isEmpty(expertInfo.channelId)) {
ToastHelper.show("服务端返回参数异常,请刷新页面后重试")
return
}
if(expertInfo.remainingTime?.remainingTime==null){
expertInfo.remainingTime = ExpertInfoBean.ListenRemainingTime(expertInfo.totalDuration);
}
ARouter.getInstance().build("/av/AudioHomeActivity")
.withString(IntentConstants.INTENT_EXPERT_HEAD_URL, expertInfo.expertHeadUrl)
.withString(IntentConstants.INTENT_EXPERT_NAME, expertInfo.expertName)
.withString(IntentConstants.INTENT_EXPERT_TIPS, expertInfo.expertTips)
.withString(IntentConstants.INTENT_ROOM_ID, expertInfo.channelId)
.withString(IntentConstants.INTENT_REMAIN_TIME, expertInfo.remainingTime.remainingTime)
.withString(IntentConstants.INTENT_CALL_ID, call_id)
.withString(IntentConstants.INTENT_RELATION_ID, "${relation_id}")
.withString(IntentConstants.INTENT_TOKEN, expertInfo.token)
.withString(IntentConstants.INTENT_SIGNAL_TOKEN, expertInfo.signalToken)
.withString(IntentConstants.INTENT_LISTENER_UID, expertInfo.listenerUid)
.withString(IntentConstants.INTENT_TOTAL_DURATION, expertInfo.totalDuration)
.withString(IntentConstants.INTENT_COMMENT_URL, expertInfo.commentUrl)
.withString(IntentConstants.INTENT_LISTEN_ID, confideId.toString())
.withBoolean(IntentConstants.INTENT_ISSHOWAXB,isShowAXB)
.navigation(activity)
}
}
}
......@@ -164,7 +164,7 @@ class ConfideHomeSexAgePopupWindow(context: Context, sexData: ArrayList<ConfideH
private fun setSelect(tvSex1: TextView,boolean: Boolean){
if (boolean){
tvSex1.setBackgroundResource(R.drawable.confide_filter_select_sel)
tvSex1.setTextColor(tvSex1.context.resources.getColor(R.color.confide_main_theme))
tvSex1.setTextColor(tvSex1.context.resources.getColor(R.color.platform_main_theme))
}else{
tvSex1.setBackgroundResource(R.drawable.confide_filter_select_nor)
tvSex1.setTextColor(tvSex1.context.resources.getColor(R.color._6))
......
......@@ -35,7 +35,7 @@ class ConfideHomeSortAdapter(private val context: Context,
if (holder != null) {
holder.tvSort.text = item.name
if (item.id == selectedSort.id) {
holder.tvSort.setTextColor(context.resources.getColor(R.color.confide_main_theme))
holder.tvSort.setTextColor(context.resources.getColor(R.color.platform_main_theme))
}else{
holder.tvSort.setTextColor(ContextCompat.getColor(context, R.color._6))
}
......
......@@ -459,11 +459,11 @@ class ConfideHomeUtils {
when (status) {
IConfideHomeConfig.FILTER_STATUS_NORMAL -> {
tv.setTextColor(ContextCompat.getColor(mContext, R.color._6))
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_ic_arrow_drop_down_grey_500_18dp, 0)
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_arrow_drop_down_un, 0)
}
IConfideHomeConfig.FILTER_STATUS_FILTERED, IConfideHomeConfig.FILTER_STATUS_OPEN -> {
tv.setTextColor(ContextCompat.getColor(mContext, R.color.confide_main_theme))
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.confide_ic_arrow_drop_down_green_18dp, 0)
tv.setTextColor(ContextCompat.getColor(mContext, R.color.platform_main_theme))
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_arrow_drop_down_en, 0)
}
}
}
......@@ -476,20 +476,20 @@ class ConfideHomeUtils {
tv.setTextColor(ContextCompat.getColor(mContext, R.color._6))
}
IConfideHomeConfig.FILTER_STATUS_FILTERED, IConfideHomeConfig.FILTER_STATUS_OPEN -> {
tv.setTextColor(ContextCompat.getColor(mContext, R.color.confide_main_theme))
tv.setTextColor(ContextCompat.getColor(mContext, R.color.platform_main_theme))
}
}
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_ic_arrow_drop_down_grey_500_18dp, 0)
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_arrow_drop_down_un, 0)
}
//更改筛选选项的按钮 图标
private fun updateOthersTextDrawable(mContext: Context, tv: AppCompatTextView, status: Int) {
when (status) {
IConfideHomeConfig.FILTER_STATUS_NORMAL -> {
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_ic_arrow_drop_down_grey_500_18dp, 0)
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_arrow_drop_down_un, 0)
}
IConfideHomeConfig.FILTER_STATUS_FILTERED, IConfideHomeConfig.FILTER_STATUS_OPEN -> {
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.confide_ic_arrow_drop_down_green_18dp, 0)
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_arrow_drop_down_en, 0)
}
}
}
......
package com.ydl.confide.home.util;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
public class ConfideNetworkUtil {
/**
* 网络类型
*/
public static final int NETWORK_CLASS_UNKNOWN = 0;
public static final int NETWORK_CLASS_2_G = 1;
public static final int NETWORK_CLASS_3_G = 2;
public static final int NETWORK_CLASS_4_G = 3;
public static final int NETWORK_CLASS_WIFI = 10;
/**
* 获取在Mobile网络下的网络类型. 2G,3G,4G
*
* @param context
* @return
*/
public static int getNetworkClass(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (networkInfo.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case 12: // TelephonyManager.NETWORK_TYPE_EVDO_B:
case 14: // TelephonyManager.NETWORK_TYPE_EHRPD:
case 15: // TelephonyManager.NETWORK_TYPE_HSPAP:
return NETWORK_CLASS_3_G;
case 13: // TelephonyManager.NETWORK_TYPE_LTE:
return NETWORK_CLASS_4_G;
default:
return NETWORK_CLASS_UNKNOWN;
}
} else if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return NETWORK_CLASS_WIFI;
}
}
}
return NETWORK_CLASS_UNKNOWN;
}
public static boolean isWifiOr3G(Context context) {
if (isWifi(context)) {
return true;
} else {
return is3G(context);
}
}
public static boolean is2G(Context context) {
return !isWifiOr3G(context);
}
public static boolean is3G(Context context) {
int type = getNetworkClass(context);
if (type == NETWORK_CLASS_3_G || type == NETWORK_CLASS_4_G) {
return true;
} else {
return false;
}
}
/**
* 当前网络是否是wifi网络
*
* @param context
* @return
*/
public static boolean isWifi(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
if (ni.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
} else {
return false;
}
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
}
\ No newline at end of file
......@@ -93,7 +93,7 @@ class ConfideHomeFilterView(mContext: Context, @Nullable attrs: AttributeSet?, d
textView.text = bodyBean.filterName
textView.setTag(R.id.tv_title,bodyBean)
if ("排序" == bodyBean.filterName){
textView.setTextColor(ContextCompat.getColor(context, R.color.confide_main_theme))
textView.setTextColor(ContextCompat.getColor(context, R.color.platform_main_theme))
// textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_drop_down_green_18dp, 0)
}
textView.setOnClickListener {
......@@ -127,7 +127,7 @@ class ConfideHomeFilterView(mContext: Context, @Nullable attrs: AttributeSet?, d
var view = getChildAt(index)
if (view is DrawableRightTextView){
if ("排序" == view.text){
view.setTextColor(ContextCompat.getColor(context, R.color.confide_main_theme))
view.setTextColor(ContextCompat.getColor(context, R.color.platform_main_theme))
}else{
view.setTextColor(ContextCompat.getColor(context, R.color._6))
}
......
package com.ydl.confide.api
import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.Intent
import android.support.v4.app.DialogFragment
......@@ -15,4 +16,14 @@ interface IConfideService : IProvider {
//倾诉首页
fun openConfideHome(context: Context)
fun connectionJava(id: Int, type: Int, activity: Activity, tellData: String?, callType:String?)
fun ydlAvManagerLogin(uid: String?)
fun startCondifeHomePage(context: Context, isSplash: Boolean)
fun initYdlavManager(app: Application)
fun showAxbConfirmDialog(activity: Activity?, type: Int, phoneNumber: String?)
}
\ No newline at end of file
package com.ydl.confide.listener
interface ConnectionJavaResListener {
fun onRequestResponse(res: String)
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="300"
/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/confide_main_theme" android:state_selected="true" android:state_enabled="true"/>
<item android:color="@color/platform_main_theme" android:state_selected="true" android:state_enabled="true"/>
<item android:color="@color/_6" android:state_enabled="true"/>
</selector>
\ No newline at end of file
......@@ -4,7 +4,7 @@
android:shape="rectangle"
android:useLevel="false">
<solid android:color="@color/confide_main_theme"/>
<solid android:color="@color/platform_main_theme"/>
<corners android:radius="10dp"/>
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="@color/confide_main_theme_light"
android:endColor="@color/confide_main_theme"
android:startColor="@color/platform_main_gradient_end_color"
android:endColor="@color/platform_main_gradient_start_color"
android:angle="0" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="@color/confide_main_theme_light"
android:endColor="@color/confide_main_theme"
android:startColor="@color/platform_main_gradient_end_color"
android:endColor="@color/platform_main_gradient_start_color"
android:angle="0" />
</shape>
\ No newline at end of file
......@@ -3,8 +3,8 @@
android:shape="rectangle">
<gradient
android:startColor="#FFDB26"
android:endColor="#FFD814"/>
android:startColor="@color/platform_main_gradient_end_color"
android:endColor="@color/platform_main_gradient_start_color"/>
<corners android:radius="15dp" />
......
......@@ -4,10 +4,10 @@
<corners android:radius="20dp" />
<!--<stroke-->
<!--android:width="1dp"-->
<!--android:color="@color/confide_main_theme" />-->
<!--android:color="@color/platform_main_theme" />-->
<gradient
android:startColor="@color/confide_main_theme"
android:endColor="@color/confide_main_theme"
android:startColor="@color/platform_main_theme"
android:endColor="@color/platform_main_theme"
android:angle="0"/>
</shape>
\ No newline at end of file
......@@ -4,7 +4,7 @@
<corners android:radius="20dp" />
<stroke
android:width="1px"
android:color="@color/confide_main_theme" />
android:color="@color/platform_main_theme" />
<!--<solid android:color="@color/white"/>-->
</shape>
\ No newline at end of file
......@@ -2,5 +2,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<solid android:color="#FFFFFF" />
<stroke android:width="1px" android:color="@color/confide_main_theme"/>
<stroke android:width="1px" android:color="@color/platform_main_theme"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="100dp"/>
<solid android:color="@color/confide_main_theme" />
<solid android:color="@color/platform_main_theme" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomRightRadius="3dp"/>
<solid android:color="@color/confide_main_theme" />
<solid android:color="@color/platform_main_theme" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="180"
android:endColor="#00ffffff"
android:startColor="@color/white" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 圆角 -->
<corners android:radius="@dimen/confide_default_dis_size_big" />
<stroke
android:width="1dp"
android:color="#D6D6D6" />
<solid android:color="@color/transparent" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 背景色 -->
<solid android:color="@color/white"/>
<!-- 边框色 -->
<stroke android:width="1dip" android:color="@color/platform_default_button_bg" />
//圆角
<corners android:radius="4dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 背景色 -->
<solid android:color="#D9D9D9"/>
<!-- 边框色 -->
<stroke android:width="1dip" android:color="#D9D9D9" />
//圆角
<corners android:radius="4dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout
android:id="@+id/rl_head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp">
<com.yidianling.phonecall.WaveView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:background="@color/transparent" />
<ImageView
android:id="@+id/sdv_head"
android:layout_width="@dimen/confide_head_size_big"
android:layout_height="@dimen/confide_head_size_big"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:contentDescription="@null" />
</RelativeLayout>
<LinearLayout
android:id="@+id/lin_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:layout_below="@+id/rl_head"
android:layout_marginTop="50dp"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/confide_divide_line_stroke_width"
android:layout_marginBottom="@dimen/confide_default_dis_size_huge"
android:background="#22222B24" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/confide_default_dis_size_huge"
android:text="请注意接听,通常为0571开头号码"
android:textColor="@color/white" />
<TextView
android:id="@+id/tv_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/confide_default_dis_size_huge"
android:text="如倒计时结束后仍然未接到来电,请挂断后重新连接"
android:textColor="@color/white" />
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/confide_divide_line_stroke_width"
android:layout_marginBottom="@dimen/confide_default_dis_size_huge"
android:background="#22222B24" />
</LinearLayout>
<LinearLayout
android:id="@+id/lin_djs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_below="@+id/lin_text"
android:layout_above="@+id/iv_stop"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="倒计时:"/>
<TextView
android:id="@+id/text_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:gravity="center"
android:layout_above="@+id/lin_text"
android:textColor="@color/red"
tools:text="30"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text=" 秒"/>
</LinearLayout>
<ImageView
android:id="@+id/iv_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:src="@drawable/confide_state_stop"
android:visibility="invisible"/>
</RelativeLayout>
......@@ -49,7 +49,7 @@
android:layout_marginLeft="15dp"
android:background="@drawable/confide_filter_reset_btn_bg"
android:text="@string/platform_reset"
android:textColor="@color/confide_main_theme"
android:textColor="@color/platform_main_theme"
android:textSize="@dimen/confide_dp_18" />
<Button
......
......@@ -52,7 +52,7 @@
android:paddingLeft="@dimen/confide_dp_20"
android:paddingRight="@dimen/confide_dp_20"
android:text="一键倾诉"
android:textColor="@color/platform_color_242424"
android:textColor="@color/platform_but_text_color"
android:textSize="14dp"
android:textStyle="bold" />
</LinearLayout>
......
......@@ -114,7 +114,7 @@
android:layout_weight="1"
android:background="@drawable/confide_filter_reset_btn_bg"
android:text="@string/platform_reset"
android:textColor="@color/confide_main_theme"
android:textColor="@color/platform_main_theme"
android:textSize="@dimen/confide_dp_18" />
<Button
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="confide_color_242424">#242424</color>
<color name="confide_new_divide_color">#f0f0f0</color>
<color name="confide_line">#F0F0F0</color>
<color name="confide_filters_line">#E0E0E0</color>
......
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<!--分割线粗细-->
<dimen name="confide_divide_line_stroke_width">0.5dp</dimen>
<!--距离部分-->
<dimen name="confide_default_dis_size_nano">2dp</dimen>
<dimen name="confide_default_dis_size_micro">4dp</dimen>
<dimen name="confide_default_dis_size_small">6dp</dimen>
<dimen name="confide_default_dis_size">8dp</dimen>
<dimen name="confide_default_dis_size_big">10dp</dimen>
<dimen name="confide_default_dis_size_large">12dp</dimen>
<dimen name="confide_default_dis_size_huge">14dp</dimen>
<dimen name="confide_default_dis_size_huge_more">16dp</dimen>
<!--字体大小部分-->
<dimen name="confide_default_text_size_micro">8sp</dimen>
<dimen name="confide_default_text_size_little">10sp</dimen>
<dimen name="confide_default_text_size_small">12sp</dimen>
<dimen name="confide_default_text_size">14sp</dimen>
<dimen name="confide_default_text_size_big">16sp</dimen>
<dimen name="confide_default_text_size_large">18sp</dimen>
<!--TitleBar高度-->
<dimen name="confide_title_bar_height">45dp</dimen>
<dimen name="confide_action_bar_height">48dip</dimen>
<!--JumpTextView部分-->
<dimen name="confide_jump_text_view_min_height">55dp</dimen>
<dimen name="confide_jump_text_view_icon_size">25dp</dimen>
<!-- dialog -->
<dimen name="confide_normal_text_size">16sp</dimen>
<dimen name="confide_big_text_size">17sp</dimen>
<dimen name="confide_light_line_size">1px</dimen>
<dimen name="confide_dialog_padding_vertical">20dip</dimen>
<dimen name="confide_custom_dialog_padding_vertical">15dip</dimen>
<dimen name="confide_dark_line_size">3px</dimen>
<dimen name="confide_dialog_text_margin_horizontal">15dip</dimen>
<dimen name="confide_very_samll_text_size">9sp</dimen>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="confide_activity_horizontal_margin">16dp</dimen>
<dimen name="confide_activity_vertical_margin">16dp</dimen>
<!--动态-->
<!--顶部title Size-->
<dimen name="confide_title_height">45dp</dimen>
<dimen name="confide_title_txt_sp">20sp</dimen>
<!-- map -->
<dimen name="confide_chatroom_head_height">200dp</dimen>
<dimen name="confide_dp_1">1dp</dimen>
<dimen name="confide_dp_2">2dp</dimen>
<dimen name="confide_dp_3">3dp</dimen>
<dimen name="confide_dp_4">4dp</dimen>
<dimen name="confide_dp_5">5dp</dimen>
<dimen name="confide_dp_6">6dp</dimen>
<dimen name="confide_dp_7">7dp</dimen>
<dimen name="confide_dp_8">8dp</dimen>
<dimen name="confide_dp_9">9dp</dimen>
<dimen name="confide_dp_10">10dp</dimen>
<dimen name="confide_dp_11">11dp</dimen>
<dimen name="confide_dp_12">12dp</dimen>
......@@ -71,31 +34,7 @@
<dimen name="confide_dp_18">18dp</dimen>
<dimen name="confide_dp_19">19dp</dimen>
<dimen name="confide_dp_20">20dp</dimen>
<dimen name="confide_dp_21">21dp</dimen>
<dimen name="confide_dp_22">22dp</dimen>
<dimen name="confide_dp_23">23dp</dimen>
<dimen name="confide_dp_24">24dp</dimen>
<dimen name="confide_dp_25">25dp</dimen>
<dimen name="confide_dp_26">26dp</dimen>
<dimen name="confide_dp_27">27dp</dimen>
<dimen name="confide_dp_28">28dp</dimen>
<dimen name="confide_dp_29">29dp</dimen>
<dimen name="confide_dp_30">30dp</dimen>
<dimen name="confide_dp_31">31dp</dimen>
<dimen name="confide_dp_32">32dp</dimen>
<dimen name="confide_dp_33">33dp</dimen>
<dimen name="confide_dp_34">34dp</dimen>
<dimen name="confide_dp_35">35dp</dimen>
<dimen name="confide_dp_36">36dp</dimen>
<dimen name="confide_dp_37">37dp</dimen>
<dimen name="confide_dp_38">38dp</dimen>
<dimen name="confide_dp_48">48dp</dimen>
<dimen name="confide_dp_60">60dp</dimen>
<dimen name="confide_dp_64">64dp</dimen>
<dimen name="confide_dp_88">88dp</dimen>
<dimen name="confide_dp_99">99dp</dimen>
<dimen name="confide_dp_115">115dp</dimen>
<dimen name="confide_dp_127">127dp</dimen>
<dimen name="confide_head_size_big">72dp</dimen>
</resources>
<resources>
<string name="confide_app_name">PhoneCall</string>
<string name="confide_title">即时倾诉</string>
</resources>
......@@ -5,9 +5,9 @@
<item name="android:windowActionBar">false</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">@color/confide_main_theme</item>
<item name="colorPrimaryDark">@color/confide_main_theme</item>
<item name="colorAccent">@color/confide_main_theme</item>
<item name="colorPrimary">@color/platform_main_theme</item>
<item name="colorPrimaryDark">@color/platform_main_theme</item>
<item name="colorAccent">@color/platform_main_theme</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--主题色-->
<color name="confide_main_theme">#fdbd00</color>
<!--主题浅色-->
<color name="confide_main_theme_light">#FCDA42</color>
<!--主题亮色-->
<color name="confide_main_theme_bright">#fffae0</color>
<!--确认按钮背景颜色-->
<color name="confide_confirm_bg_color">#FFDD33</color>
<!--确认按钮字体颜色-->
<color name="confide_confirm_text_color">#242424</color>
<!--确认按钮提示字体颜色-->
<color name="confide_confirm_text_hint_color">#666666</color>
<!--筛选条件选择框字体颜色-->
<color name="confide_filter_content_text_color_en">#242424</color>
<color name="confide_filter_content_text_color_un">#555555</color>
<!--私聊按钮背景颜色-->
<color name="confide_chat_start_color">#ffd814</color>
<color name="confide_chat_end_color">#ffdb26</color>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--主题色-->
<color name="confide_main_theme">#1da1f2</color>
<!--主题浅色-->
<color name="confide_main_theme_light">#60BDF5</color>
<!--主题亮色-->
<color name="confide_main_theme_bright">#E8F6FF</color>
<!--确认按钮背景颜色-->
<color name="confide_confirm_bg_color">#1da1f2</color>
<!--确认按钮颜色-->
<color name="confide_confirm_text_color">#ffffff</color>
<!--确认提示颜色-->
<color name="confide_confirm_text_hint_color">#60ffffff</color>
<!--筛选条件选择框字体颜色-->
<color name="confide_filter_content_text_color_en">#1da1f2</color>
<color name="confide_filter_content_text_color_un">#242424</color>
<!--私聊按钮背景颜色-->
<color name="confide_chat_start_color">#23B2FA</color>
<color name="confide_chat_end_color">#1DA1F2</color>
</resources>
......@@ -18,6 +18,7 @@ import android.view.inputmethod.InputMethodManager
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
......@@ -57,7 +58,7 @@ import kotlinx.android.synthetic.main.consultant_layout_search_content.*
import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.*
import org.json.JSONObject
import java.util.concurrent.Executors
@Route(path = "/consultant/consultant")
class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPresenter>(),
View.OnClickListener, IExpertSearchView,
OnCategoriesSelectedListener, OnSortItemSelectedListener, OnFilterConfirmListener,
......@@ -77,11 +78,15 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
initData()
val ffrom = PlatformDataManager.getRam().getChannelName()
if (!TextUtils.isEmpty(ffrom) && ffrom.startsWith("ATK_7") && ffrom.endsWith("huawei")) {
if (!TextUtils.isEmpty(ffrom) &&
(ffrom.startsWith("ATK_7") && ffrom.endsWith("huawei"))||
(ffrom.startsWith("ATK_android_yyjlcs"))
) {
rl_hot_fix_for_huawei.visibility = View.GONE
} else {
rl_hot_fix_for_huawei.visibility = View.VISIBLE
}
}
override fun initDataAndEventLazy() {
......@@ -167,12 +172,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
btn_call.setOnClickListener(this)
tv_guide.setOnClickListener(this)
rl_search.setOnClickListener(this)
srlContainer.setColorSchemeColors(
ContextCompat.getColor(
activity,
R.color.consultant_main_theme
)
)
srlContainer.setColorSchemeColors(ContextCompat.getColor(activity, R.color.platform_main_theme))
srlContainer.setProgressViewOffset(false, 0, 200)
srlContainer.setOnRefreshListener(this)
initNetLossView()
......@@ -1455,7 +1455,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
}
FILTER_STATUS_FILTERED -> {
tv.typeface = Typeface.DEFAULT_BOLD
tv.setTextColor(ContextCompat.getColor(context, R.color.consultant_main_theme))
tv.setTextColor(ContextCompat.getColor(context, R.color.platform_main_theme))
tv.setCompoundDrawablesWithIntrinsicBounds(
0,
0,
......@@ -1466,12 +1466,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
FILTER_STATUS_OPEN -> {
tv.typeface = Typeface.DEFAULT_BOLD
tv.setTextColor(ContextCompat.getColor(context, R.color.platform_colorTextDefault))
tv.setCompoundDrawablesWithIntrinsicBounds(
0,
0,
R.drawable.consultant_ic_arrow_drop_down,
0
)
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_arrow_drop_down_en, 0)
}
}
}
......
......@@ -61,7 +61,7 @@ class ExpertSearchAdapter(
var pageIndex: Int = 0
fun setEntrance(pageIndex: Int) {
fun setEntrance( pageIndex: Int) {
this.pageIndex = pageIndex
}
......@@ -144,9 +144,21 @@ class ExpertSearchAdapter(
.into(holder.imgFightEpidemicIcon)
holder.imgFightEpidemicIcon.visibility = View.VISIBLE
}
if(itemBean.joinActivity==true ){
//活动图标
if (!TextUtils.isEmpty(itemBean.activityImg)) {
holder.imgActivity.visibility = View.VISIBLE
GlideApp.with(context).load(itemBean.activityImg).into(holder.imgActivity)
} else {
holder.imgActivity.visibility = View.GONE
}
}else{
holder.imgActivity.visibility = View.GONE
}
//影藏其余所有标签(除公益)
holder.imgAbilityLevel.visibility = View.GONE
holder.imgActivity.visibility = View.GONE
holder.imgNewEnter.visibility = View.GONE
} else {
holder.imgFightEpidemicIcon.visibility = View.GONE
......@@ -236,9 +248,10 @@ class ExpertSearchAdapter(
holder.tvChat.setTextColor(
ContextCompat.getColor(
context,
R.color.consultant_confirm_text_color
R.color.platform_but_text_color
)
)
holder.tvChat.setTextColor(ContextCompat.getColor(context,R.color.platform_but_text_color))
holder.tvChat.background =
ContextCompat.getDrawable(context, R.drawable.consultant_expert_search_chat)
} else {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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