Commit 74f4e08b by 洪国微

去除umentUtils

parents 612b796e 136c817d
......@@ -4,7 +4,6 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
//apply plugin: 'trace-point'
kapt {
arguments {
......@@ -37,6 +36,9 @@ android {
}
multiDexEnabled true
ndk {
abiFilters "armeabi-v7a" // 指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)
}
}
compileOptions {
......@@ -158,37 +160,33 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
kapt rootProject.ext.dependencies["dagger2-compiler"]
// api 'com.ydl:m-user-module-ydl:0.0.6'
// api 'com.ydl:ydl-webview:0.0.3@aar'
// api 'com.ydl:m-user-api:0.0.4'
//
// api('com.ydl:ydl-platform:0.0.5@aar') {
// transitive = true
// }
api project(':m-consultant')
api project(':m-user')
implementation project(':ydl-platform')
implementation project(':ydl-webview')
api rootProject.ext.dependencies["butterknife"]
kapt rootProject.ext.dependencies["butterknife-compiler"]
if (true) {
//开发模式
api project(':m-user')
api project(':m-fm')
api project(':m-tests')
api project(':m-consultant')
api (project(':ydl-platform')){
transitive = true
}
implementation project(':ydl-webview')
implementation project(':ydl-media')
} else {
//发布模式
api 'com.ydl:m-user-module-ydl:0.0.6'
api rootProject.ext.dependencies["ydl-webview"]
api rootProject.ext.dependencies["ydl-m-user-api"]
api rootProject.ext.dependencies["ydl-m-fm-api"]
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
}
implementation rootProject.ext.dependencies["retrofit-url-manager"]
kapt 'com.alibaba:arouter-compiler:1.2.2'
}
//noTracePoint{
// outputModifyFile = false
// targetPackages = ['com.cxzapp.yidianling',
// 'com.yidianling.consultant',
// 'com.yidianling.course',
// 'com.yidianling.dynamic',
// 'com.ydl.home_module',
// 'com.yidianling.fm',
// 'com.yidianling.im',
// 'com.yidianling.avchatkit',
// 'com.yidianling.uikit',
// 'com.yidianling.phonecall',
// 'com.yidianling.tests',
// 'com.yidianling.user',
// 'com.yidianling.ydlcommon',
// ]
//}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" package="com.ydl.component">
<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"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
xmlns:tools="http://schemas.android.com/tools"
package="com.ydl.component">
<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" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:name="com.ydl.ydlcommon.base.BaseApp"
......@@ -18,24 +18,30 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
tools:replace="android:allowBackup, android:icon, android:label"
android:theme="@style/platform_CommonTheme"
tools:ignore="GoogleAppIndexingWarning">
<!--<activity android:name="com.yidianling.user.ui.login.RegisterAndLoginActivity"-->
<!--<activity android:name=".MainActivity"/>-->
<activity android:name=".MainActivity"
android:theme="@style/platform_NoTitleTheme"
>
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:allowBackup, android:icon, android:label">
<activity android:name=".music.MusicPlayActivity"
android:theme="@style/platform_NoTitleTheme" />
<!-- <activity android:name="com.yidianling.user.ui.login.RegisterAndLoginActivity" -->
<!-- <activity android:name=".MainActivity"/> -->
<activity
android:name=".MainActivity"
android:theme="@style/platform_NoTitleTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<category android:name="android.intent.category.LAUNCHER"/>
<intent-filter>
<action android:name="com.ydl.media.ACTION_MUSIC_CLICK" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<meta-data
android:name="com.ydl.component.base.DemoGlobalConfig"
android:value="ModuleConfig"/>
android:value="ModuleConfig" />
<activity
android:name="com.tencent.tauth.AuthActivity"
......@@ -50,7 +56,6 @@
<data android:scheme="tencent1105070461" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
/*___Generated_by_IDEA___*/
package com.ydl.component;
/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */
public final class BuildConfig {
public final static boolean DEBUG = Boolean.parseBoolean(null);
}
\ No newline at end of file
/*___Generated_by_IDEA___*/
package com.ydl.component;
/* This stub is only used by the IDE. It is NOT the Manifest class actually packed into the APK */
public final class Manifest {
}
\ No newline at end of file
/*___Generated_by_IDEA___*/
package com.ydl.component;
/* This stub is only used by the IDE. It is NOT the R class actually packed into the APK */
public final class R {
}
\ No newline at end of file
......@@ -2,23 +2,46 @@ package com.ydl.component
import android.Manifest
import android.annotation.SuppressLint
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.net.Uri
import android.os.IBinder
import android.provider.Settings
import android.util.Log
import com.alibaba.android.arouter.launcher.ARouter
import com.tbruyelle.rxpermissions2.RxPermissions
import com.umeng.analytics.MobclickAgent
import com.ydl.component.music.MusicPlayActivity
import com.ydl.component.mvp.DemoContract
import com.ydl.component.mvp.DemoPresenter
import com.ydl.media.audio.PlayService
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydl_router.manager.YDLRouterParams
import com.ydl.ydlcommon.mvp.lce.BaseLceActivity
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.ExpertSearchActivity.Companion.HOT_SEARCH_DOCTOR_NAME
import com.yidianling.tests.home.TestHomeActivity
import kotlinx.android.synthetic.main.activity_main.*
/**
* Created by haorui on 2019-09-01 .
* Des:
*/
class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(), DemoContract.View {
class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(),
DemoContract.View {
private var serviceConnection: ServiceConnection? = null
protected var playService: PlayService? = null
override fun getContentViewId(): Int {
return R.id.lce_content_view
}
override fun getStateViewId(): Int {
return R.id.lce_state_view
}
override fun setData(data: String) {
tv_content.text = data
......@@ -33,10 +56,11 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
}
override fun initDataAndEvent() {
loadData()
bindService()
reLoadData()
requestPermission()
tv_user.setOnClickListener {
loadData()
reLoadData()
}
tv_home.setOnClickListener {
......@@ -45,19 +69,55 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
bt_to_other.setOnClickListener {
ARouter.getInstance().build("/user/login")
.withBoolean("bind_phone",false)
.withBoolean("isFromGuide",true)
.withBoolean("bind_phone", false)
.withBoolean("isFromGuide", true)
.navigation()
}
bt_to_consultant.setOnClickListener {
ARouter.getInstance()
.build("/consult/hot_search")
.withString(HOT_SEARCH_DOCTOR_NAME, this.resources?.getString(R.string.platform_search_hint))
.navigation()
// bt_to_consultant.setOnClickListener {
// ARouter.getInstance()
// .build("/consult/hot_search")
// .withString(
// HOT_SEARCH_DOCTOR_NAME,
// this.resources?.getString(R.string.platform_search_hint)
// )
// .navigation()
// }
bt_to_music.setOnClickListener {
startActivity(Intent(this, MusicPlayActivity::class.java))
}
bt_to_tests.setOnClickListener {
startActivity(Intent(this, TestHomeActivity::class.java))
}
bt_to_muse.setOnClickListener {
YDLRouterManager.router(IYDLRouterConstant.ROUTER_MUSE,
YDLRouterParams().putExtra(IYDLRouterConstant.MUSIC_URL, "http://video.yidianling.com/2019/05/30/e6d4a71e8c895f2156a2ff37d93ca3a9.mp3")
.putExtra(IYDLRouterConstant.DATA_JSON, "{\n" +
" \"muses\": [{\n" +
" \"id\": 6,\n" +
" \"name\": \"冥想基础介绍-1-什么是冥想?\",\n" +
" \"audioUrl\":\n" +
" \"http://video.yidianling.com/2019/05/30/e6d4a71e8c895f2156a2ff37d93ca3a9.mp3\",\n" +
" \"backgroundUrl\":\n" +
" \"https://img.yidianling.com/file/2019/06/10/i4qdax82ok2aizq3.png\",\n" +
" \"effectCode\": 1,\n" +
" \"category\": 2,\n" +
" \"playCount\": 929,\n" +
" \"sort\": 255,\n" +
" \"isDelete\": 1,\n" +
" \"createTime\": \"May 30, 2019 4:45:17 PM\",\n" +
" \"updateTime\": \"Jun 10, 2019 7:14:23 PM\"\n" +
" }]\n" +
" }"))
}
bt_to_fm.setOnClickListener {
YDLRouterManager.router(IYDLRouterConstant.ROUTER_FM_LIST)
}
}
override fun loadData() {
override fun reLoadData() {
mPresenter?.loadUsers()
}
......@@ -72,7 +132,10 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
} else if (permission.shouldShowRequestPermissionRationale) {
requestPermission()
} else {
ToastUtil.toastLong(this, getString(R.string.platform_need_storage_permission_hint))
ToastUtil.toastLong(
this,
getString(R.string.platform_need_storage_permission_hint)
)
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
val uri = Uri.fromParts("package", packageName, null)
intent.data = uri
......@@ -82,4 +145,35 @@ class MainActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(
}
}
private fun bindService() {
val intent = Intent()
intent.setClass(this, PlayService::class.java!!)
serviceConnection = PlayServiceConnection()
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)
}
override fun onResume() {
super.onResume()
MobclickAgent.onResume(this)
}
override fun onDestroy() {
if (serviceConnection != null) {
unbindService(serviceConnection)
}
super.onDestroy()
}
private inner class PlayServiceConnection : ServiceConnection {
override fun onServiceConnected(name: ComponentName, service: IBinder) {
playService = (service as PlayService.PlayBinder).service
}
override fun onServiceDisconnected(name: ComponentName) {
Log.e(javaClass.simpleName, "service disconnected")
}
}
}
......@@ -2,8 +2,10 @@ package com.ydl.component.api
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.ydl.component.model.HomeFMBean
import com.ydl.ydlcommon.base.config.YDL_DOMAIN
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import io.reactivex.Observable
import retrofit2.http.GET
import retrofit2.http.Headers
......@@ -26,6 +28,12 @@ interface DemoService {
@GET("home/index")
fun getHome1Data(): Observable<JsonObject>
//首页电台请求
@Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
@GET("fm/list/all")
fun getFMData(@Query("perPageRows") perPageRows: String = "4"): Observable<BaseAPIResponse<HomeFMBean>>
companion object {
const val HEADER_API_VERSION = "Accept: application/vnd.github.v3+json"
const val DOMAIN_GITHUB = "github"
......
......@@ -3,7 +3,12 @@ package com.ydl.component.base;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import com.ydl.media.audio.PlayService;
import com.ydl.ydlcommon.base.delegate.IAppLifecycles;
import com.ydl.ydlcommon.utils.YdlBuryPointUtil;
import org.jetbrains.annotations.NotNull;
/**
......@@ -18,7 +23,10 @@ public class DemoAppLifecycles implements IAppLifecycles {
@Override
public void onCreate(@NotNull Application application) {
//数据埋点初始化--一定要放在主进程中
YdlBuryPointUtil.init(application);
Intent intent = new Intent(application, PlayService.class);
application.startService(intent);
}
@Override
......
package com.ydl.component.model
import com.google.gson.annotations.SerializedName
/**
* Created by haorui on 2019/2/14.
* Des:首页电台模块参数
*/
class HomeFMBean{
var endRow: Int = 0
var isHasNextPage: Boolean = false
var isHasPreviousPage: Boolean = false
var isIsFirstPage: Boolean = false
var isIsLastPage: Boolean = false
var navigateFirstPage: Int = 0
var navigateLastPage: Int = 0
var navigatePages: Int = 0
var nextPage: Int = 0
var pageNum: Int = 0
var pageSize: Int = 0
var pages: Int = 0
var prePage: Int = 0
var size: Int = 0
var startRow: Int = 0
var total: Int = 0
var list: List<ListBean>? = null
var navigatepageNums: List<Int>? = null
class ListBean {
var adminId: Int = 0
var appImg: String? = null
@SerializedName("author")
var artist: String? = null
var categoryId: Int = 0
var createTime: String? = null
@SerializedName("description")
var album: String? = null
/**
* 喜欢人数
*/
var favorites: Int = 0
/**
* 电台地址
*/
@SerializedName("fmUrl")
var path: String? = null
/**
* 收听人数
*/
var hits: Int = 0
var id: Int = 0
/**
* 封面地址
*/
@SerializedName("imageUrl")
var coverPath: String? = null
var isOriginal: String? = null
var isShow: String? = null
@SerializedName("name")
var title: String? = null
var orderNum: Int = 0
var period: String? = null
var shareCount: Int = 0
var updateTime: String? = null
override fun toString(): String {
return "ListBean(artist=$artist, album=$album, coverPath=$coverPath, title=$title)"
}
}
}
package com.ydl.component.music
import com.ydl.component.R
import com.ydl.component.mvp.DemoContract
import com.ydl.component.mvp.DemoPresenter
import com.ydl.ydlcommon.mvp.lce.BaseLceActivity
class MusicPlayActivity : BaseLceActivity<DemoContract.View, DemoContract.Presenter>(), DemoContract.View {
override fun getContentViewId(): Int {
return R.id.lce_content_view
}
override fun getStateViewId(): Int {
return R.id.lce_state_view
}
private var mPlayFragment: PlayFragment? = null
override fun createPresenter(): DemoContract.Presenter {
return DemoPresenter()
}
override fun layoutResId(): Int {
return R.layout.activity_music_play
}
override fun initDataAndEvent() {
reLoadData()
}
override fun reLoadData() {
mPresenter.loadFmMusic()
}
override fun setData(data: String) {
val ft = supportFragmentManager.beginTransaction()
ft.setCustomAnimations(R.anim.fragment_slide_up, 0)
if (mPlayFragment == null) {
mPlayFragment = PlayFragment()
ft.replace(android.R.id.content, mPlayFragment)
} else {
ft.show(mPlayFragment)
}
ft.commitAllowingStateLoss()
}
}
package com.ydl.component.music;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import com.ydl.component.R;
import com.ydl.media.audio.AudioPlayer;
import com.ydl.media.audio.OnPlayerEventListener;
import com.ydl.media.audio.enums.PlayModeEnum;
import com.ydl.media.audio.model.Music;
import com.ydl.media.audio.utils.CoverImageUtils;
import com.ydl.media.view.PlayTypeEnum;
import com.ydl.media.view.PlayerFloatHelper;
import com.yidianling.common.tools.ToastUtil;
import java.util.HashMap;
import java.util.Locale;
import java.util.Objects;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* Created by haorui on 2019-10-28 .
* Des:
*/
public class PlayFragment extends Fragment implements View.OnClickListener,
SeekBar.OnSeekBarChangeListener, OnPlayerEventListener {
@BindView(R.id.ll_content)
LinearLayout llContent;
@BindView(R.id.iv_play_page_bg)
ImageView ivPlayingBg;
@BindView(R.id.iv_back)
ImageView ivBack;
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.tv_artist)
TextView tvArtist;
@BindView(R.id.sb_progress)
SeekBar sbProgress;
@BindView(R.id.tv_current_time)
TextView tvCurrentTime;
@BindView(R.id.tv_total_time)
TextView tvTotalTime;
@BindView(R.id.iv_mode)
ImageView ivMode;
@BindView(R.id.iv_play)
ImageView ivPlay;
@BindView(R.id.iv_next)
ImageView ivNext;
@BindView(R.id.iv_prev)
ImageView ivPrev;
@BindView(R.id.iv_cover)
ImageView ivCover;
int mLastProgress;
boolean isDraggingProgress;
private Unbinder unbinder;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_play, container, false);
unbinder = ButterKnife.bind(this, rootView);
return rootView ;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initPlayMode();
onChangeImpl(AudioPlayer.Companion.get().getPlayMusic());
AudioPlayer.Companion.get().addOnPlayEventListener(this);
}
@Override
public void onStart() {
super.onStart();
setListener();
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
protected void setListener() {
ivBack.setOnClickListener(this);
ivMode.setOnClickListener(this);
ivPlay.setOnClickListener(this);
ivPrev.setOnClickListener(this);
ivNext.setOnClickListener(this);
sbProgress.setOnSeekBarChangeListener(this);
}
void initPlayMode() {
int mode = AudioPlayer.Companion.get().getPlayMode().value();
ivMode.setImageLevel(mode);
}
@Override
public void onChange(Music music) {
onChangeImpl(music);
}
@Override
public void onPlayerStart() {
ivPlay.setSelected(true);
}
@Override
public void onPlayerPause() {
ivPlay.setSelected(false);
}
/**
* 更新播放进度
*/
@Override
public void onPublish(int percent,long currentPosition) {
if (!isDraggingProgress) {
sbProgress.setProgress((int) currentPosition);
}
}
@Override
public void onBufferingUpdate(int percent) {
if(percent==0) {
return;
}
sbProgress.setSecondaryProgress(sbProgress.getMax() * 100 / percent);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_back:
onBackPressed();
break;
case R.id.iv_mode:
switchPlayMode();
break;
case R.id.iv_play:
play();
if(!PlayerFloatHelper.Companion.isShow(getActivity())) {
PlayerFloatHelper.Companion.show(getActivity(), PlayTypeEnum.PLAY_TYPE_FM,new HashMap<>());
}else {
PlayerFloatHelper.Companion.showIfPlaying(getActivity());
}
break;
case R.id.iv_next:
next();
break;
case R.id.iv_prev:
prev();
break;
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (seekBar == sbProgress) {
if (Math.abs(progress - mLastProgress) >= DateUtils.SECOND_IN_MILLIS) {
tvCurrentTime.setText(formatTime(progress));
mLastProgress = progress;
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
if (seekBar == sbProgress) {
isDraggingProgress = true;
}
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (seekBar == sbProgress) {
isDraggingProgress = false;
if (AudioPlayer.Companion.get().isPlaying() || AudioPlayer.Companion.get().isPausing()) {
int progress = seekBar.getProgress();
AudioPlayer.Companion.get().seekTo(-1, progress);
} else {
seekBar.setProgress(0);
}
}
}
void onChangeImpl(Music music) {
if (music == null) {
return;
}
tvTitle.setText(music.getTitle());
tvArtist.setText(music.getArtist());
sbProgress.setProgress((int) AudioPlayer.Companion.get().getAudioPosition());
sbProgress.setSecondaryProgress(0);
sbProgress.setMax((int) AudioPlayer.Companion.get().getDuration());
mLastProgress = 0;
tvCurrentTime.setText(R.string.play_time_start);
tvTotalTime.setText(formatTime(AudioPlayer.Companion.get().getDuration()));
setCoverAndBg(music);
if (AudioPlayer.Companion.get().isPlaying() || AudioPlayer.Companion.get().isPreparing()) {
ivPlay.setSelected(true);
} else {
ivPlay.setSelected(false);
}
}
void play() {
AudioPlayer.Companion.get().playPause();
}
void next() {
AudioPlayer.Companion.get().next();
}
void prev() {
AudioPlayer.Companion.get().prev();
}
void switchPlayMode() {
PlayModeEnum mode = AudioPlayer.Companion.get().getPlayMode();
switch (mode) {
case LIST_LOOP:
mode = PlayModeEnum.SHUFFLE;
ToastUtil.toastShort(getString(R.string.mode_shuffle));
break;
case SHUFFLE:
mode = PlayModeEnum.SINGLE;
ToastUtil.toastShort(getString(R.string.mode_one));
break;
case SINGLE_LOOP:
mode = PlayModeEnum.LIST_LOOP;
ToastUtil.toastShort(getString(R.string.mode_loop));
break;
}
AudioPlayer.Companion.get().setPlayMode(mode);
initPlayMode();
}
void onBackPressed() {
getActivity().onBackPressed();
ivBack.setEnabled(false);
}
void setCoverAndBg(Music music) {
CoverImageUtils.INSTANCE.loadRound(Objects.requireNonNull(music.getCoverPath()), bitmap -> ivCover.setImageBitmap(bitmap));
CoverImageUtils.INSTANCE.loadBlur(music.getCoverPath(), bitmap -> ivPlayingBg.setImageBitmap(bitmap));
}
String formatTime(long time) {
return formatTime("mm:ss", time);
}
public static String formatTime(String pattern, long milli) {
int m = (int) (milli / DateUtils.MINUTE_IN_MILLIS);
int s = (int) ((milli / DateUtils.SECOND_IN_MILLIS) % 60);
String mm = String.format(Locale.getDefault(), "%02d", m);
String ss = String.format(Locale.getDefault(), "%02d", s);
return pattern.replace("mm", mm).replace("ss", ss);
}
@Override
public void onDestroy() {
AudioPlayer.Companion.get().removeOnPlayEventListener(this);
PlayerFloatHelper.Companion.onDestroy();
super.onDestroy();
}
@Override
public void onPrepared(long duration) {
sbProgress.setMax((int) duration);
tvTotalTime.setText(formatTime(duration));
}
@Override
public void onComplete() {
}
}
......@@ -2,6 +2,8 @@ package com.ydl.component.mvp
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.ydl.component.model.HomeFMBean
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.mvp.base.IModel
import com.ydl.ydlcommon.mvp.base.IPresenter
import com.ydl.ydlcommon.mvp.lce.ILceView
......@@ -19,12 +21,13 @@ interface DemoContract {
interface Presenter : IPresenter<View> {
fun loadUsers()
fun loadHome()
fun loadFmMusic()
}
interface Model : IModel{
fun getUser(): Observable<JsonArray>
fun getHome(): Observable<JsonObject>
fun getFmMusic(): Observable<HomeFMBean>
}
}
\ No newline at end of file
......@@ -5,6 +5,8 @@ import android.arch.lifecycle.OnLifecycleEvent
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.ydl.component.api.DemoService
import com.ydl.component.model.HomeFMBean
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.mvp.base.BaseModel
import com.ydl.ydlnet.YDLHttpUtils
import io.reactivex.Observable
......@@ -14,6 +16,13 @@ import io.reactivex.Observable
* Des:
*/
class DemoModel : BaseModel(), DemoContract.Model {
override fun getFmMusic(): Observable<HomeFMBean> {
return YDLHttpUtils.obtainApi(DemoService::class.java)
.getFMData()
.compose(RxUtils.resultJavaData())
}
override fun getHome(): Observable<JsonObject> {
return YDLHttpUtils.obtainApi(DemoService::class.java)
.getHomeData()
......
......@@ -2,9 +2,11 @@ package com.ydl.component.mvp
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.ydl.component.model.HomeFMBean
import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.model.Music
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.ydl.ydlcommon.utils.RxLifecycleUtils
import com.ydl.ydlnet.builder.interceptor.YDLTransformer
import com.ydl.ydlnet.client.observer.CommonObserver
/**
......@@ -13,22 +15,37 @@ import com.ydl.ydlnet.client.observer.CommonObserver
*/
class DemoPresenter : BasePresenter<DemoContract.View,DemoContract.Model>(),
DemoContract.Presenter {
override fun loadHome() = mModel!!.getHome()
.compose(YDLTransformer.switchSchedulers(mView))
.compose(RxLifecycleUtils.bindToLifecycle(mView!!))//使用 Rxlifecycle,使 Disposable 和 Activity 一起销毁
override fun loadFmMusic() {
mModel.getFmMusic()
.compose(RxUtils.applySchedulers(mView))
.subscribe(object : CommonObserver<HomeFMBean>() {
override fun onError(errorMsg: String) {
}
override fun onSuccess(homeFMBean: HomeFMBean) {
homeFMBean.list?.let {
AudioPlayer.get().addPlayList(stringToMusicPlayerList(it))
mView.setData("")
}
}
})
}
override fun loadHome() = mModel.getHome()
.compose(RxUtils.applySchedulers(mView))
.subscribe(object : CommonObserver<JsonObject>() {
override fun onError(errorMsg: String) {
}
override fun onSuccess(users: JsonObject) {
var cateTitle = users.getAsJsonObject("data").getAsJsonArray("askCategoryData").get(0).asJsonObject.get("cateTitle").asString;
mView?.setData(cateTitle)
mView.setData(cateTitle)
}
})
override fun loadUsers() = mModel!!.getUser()
.compose(YDLTransformer.switchSchedulers(mView))
.compose(RxLifecycleUtils.bindToLifecycle(mView!!))//使用 Rxlifecycle,使 Disposable 和 Activity 一起销毁
override fun loadUsers() = mModel.getUser()
.compose(RxUtils.applySchedulers(mView))//使用 Rxlifecycle,使 Disposable 和 Activity 一起销毁
.subscribe(object : CommonObserver<JsonArray>() {
override fun onError(errorMsg: String) {
}
......@@ -43,4 +60,24 @@ class DemoPresenter : BasePresenter<DemoContract.View,DemoContract.Model>(),
return DemoModel()
}
//将列表转为播放器可用列表
private fun stringToMusicPlayerList(list: List<HomeFMBean.ListBean>): ArrayList<Music> {
var nlist = ArrayList<Music>()
try {
for (i in list.indices) {
var be = Music()
be.path = list[i].path
be.coverPath = list[i].coverPath
be.title = list[i].title
be.album = list[i].album
be.artist = list[i].artist
nlist.add(be)
}
} catch (e: Exception) {
e.printStackTrace()
}
return nlist
}
}
<?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>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_play_btn_loop_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_loop" />
</selector>
\ 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:drawable="@drawable/ic_play_btn_next_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_next" />
</selector>
\ 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:drawable="@drawable/ic_play_btn_one_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_one" />
</selector>
\ 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:drawable="@drawable/ic_play_btn_pause_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_pause" />
</selector>
\ 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:drawable="@drawable/play_btn_pause_selector" android:state_selected="true" />
<item android:drawable="@drawable/play_btn_play_selector" />
</selector>
\ 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:drawable="@drawable/ic_play_btn_play_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_play" />
</selector>
\ 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:drawable="@drawable/ic_play_btn_prev_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_prev" />
</selector>
\ 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:drawable="@drawable/ic_play_btn_shuffle_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/ic_play_btn_shuffle" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/play_btn_loop_selector"
android:maxLevel="0" />
<item
android:drawable="@drawable/play_btn_shuffle_selector"
android:maxLevel="1" />
<item
android:drawable="@drawable/play_btn_one_selector"
android:maxLevel="2" />
</level-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="1dp" />
<solid android:color="@color/white_24p" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="1dp" />
<solid android:color="@color/red" />
</shape>
</clip>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="1dp" />
<solid android:color="@color/red_30p" />
</shape>
</clip>
</item>
</layer-list>
\ 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"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:id="@+id/lce_content_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:paddingLeft="30dp"
android:textSize="14dp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/platform_google_blue"
android:gravity="center_vertical"
android:textColor="@color/platform_white"
android:paddingLeft="30dp"
android:text="Multiple Base Url Request Test"
android:background="@color/platform_google_blue"
android:layout_width="match_parent"
android:layout_height="50dp"/>
android:textColor="@color/platform_white"
android:textSize="14dp" />
<TextView
android:layout_margin="30dp"
android:text="CONTENT"
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:text="CONTENT" />
<LinearLayout
android:layout_marginLeft="30dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="80dp"
>
android:layout_marginLeft="30dp"
android:orientation="horizontal">
<TextView
android:layout_marginRight="40dp"
android:background="@android:color/darker_gray"
android:padding="10dp"
android:id="@+id/tv_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="User Request!"
/>
<TextView
android:background="@android:color/holo_green_dark"
android:layout_marginRight="40dp"
android:background="@android:color/darker_gray"
android:padding="10dp"
android:text="User Request!" />
<TextView
android:id="@+id/tv_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home Request!"
/>
android:background="@android:color/holo_green_dark"
android:padding="10dp"
android:text="Home Request!" />
</LinearLayout>
<TextView
android:paddingLeft="30dp"
android:textSize="14dp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/platform_google_blue"
android:gravity="center_vertical"
android:textColor="@color/platform_white"
android:paddingLeft="30dp"
android:text="Component Module Test"
android:background="@color/platform_google_blue"
android:layout_width="match_parent"
android:layout_height="50dp"/>
android:textColor="@color/platform_white"
android:textSize="14dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/bt_to_other"
android:layout_marginTop="10dp"
android:layout_marginLeft="30dp"
android:text="Jump to Other"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:text="Jump to Other" />
<Button
android:id="@+id/bt_to_consultant"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:text="Jump to consultant" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/bt_to_music"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:text="Jump to consultant"
android:layout_marginTop="10dp"
android:text="Jump to Musci" />
<Button
android:id="@+id/bt_to_muse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:text="Jump to 冥想" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/bt_to_fm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:text="Jump to FM" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/bt_to_tests"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:text="Jump to Tests" />
</LinearLayout>
......@@ -92,6 +142,6 @@
<com.ydl.ydlcommon.mvp.lce.view.YDLStateView
android:id="@+id/lce_state_view"
android:layout_width="match_parent"
android:layout_height="300dp"/>
android:layout_height="300dp" />
</LinearLayout>
\ 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/lce_content_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
<com.ydl.ydlcommon.mvp.lce.view.YDLStateView
android:id="@+id/lce_state_view"
android:layout_width="match_parent"
android:layout_height="300dp"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_play_page_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:scaleType="centerCrop"
android:src="@drawable/play_page_default_bg" />
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_50p"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_back"
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize"
android:scaleType="centerInside"
android:src="@drawable/ic_arrow_down" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text="无音乐"
android:textColor="@color/white"
android:textSize="@dimen/text_size_common" />
<TextView
android:id="@+id/tv_artist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/grey"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/vp_play_page"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:overScrollMode="never">
<ImageView
android:src="@drawable/play_page_disc"
android:id="@+id/iv_cover"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true" />
</RelativeLayout>
<include layout="@layout/include_play_page_controller" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin">
<TextView
android:id="@+id/tv_current_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/play_time_start"
android:textColor="@color/white"
android:textSize="10sp" />
<SeekBar
android:id="@+id/sb_progress"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxHeight="2dp"
android:minHeight="2dp"
android:progressDrawable="@drawable/seek_bar_progress_style"
android:thumb="@drawable/ic_seek_bar_progress_btn" />
<TextView
android:id="@+id/tv_total_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/play_time_start"
android:textColor="@color/white_50p"
android:textSize="10sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/play_mode_level_list" />
<ImageView
android:id="@+id/iv_prev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/iv_play"
android:src="@drawable/play_btn_prev_selector" />
<ImageView
android:id="@+id/iv_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/play_btn_play_pause_selector" />
<ImageView
android:id="@+id/iv_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/iv_play"
android:src="@drawable/play_btn_next_selector" />
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
......@@ -3,4 +3,21 @@
<color name="text_user" tools:ignore="MissingDefaultResource">#5195cb</color>
<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>
</resources>
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<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>
<resources>
<string name="play_time_start">00:00</string>
<string name="mode_loop">列表循环</string>
<string name="mode_shuffle">随机播放</string>
<string name="mode_one">单曲循环</string>
</resources>
......@@ -15,14 +15,31 @@ buildscript {
}
repositories {
google()
maven {
//壹点灵android maven私服 开发版
maven{
url 'http://nexus.yidianling.com/repository/AndroidRepository/'
credentials {
username "admin"
password "fjoi#1+#@"
}
}
maven{
url 'http://nexus.yidianling.com/repository/AndroidReleases/'
credentials {
username "admin"
password "fjoi#1+#@"
}
}
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven {
url 'https://dl.bintray.com/zouyuhan/maven'
}
google()
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
......@@ -39,36 +56,38 @@ buildscript {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.16'
classpath 'com.ydl.plugins:modular:1.0.0'
classpath 'com.ydl:notracepoint-gradle-plugin:0.0.3'
classpath 'com.github.better.restools:ResTools:1.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'http://developer.huawei.com/repo/' }
maven { url "https://jitpack.io" }
maven {
url 'https://maven.google.com'
}
maven {
url 'https://dl.bintray.com/zouyuhan/maven'
}
//壹点灵android maven私服
maven {
url 'http://nexus.yidianling.com/repository/AndroidReleases/'
//壹点灵android maven私服 开发版
maven{
url 'http://nexus.yidianling.com/repository/AndroidRepository/'
credentials {
username "admin"
password "fjoi#1+#@"
}
}
maven {
url 'http://nexus.yidianling.com/repository/AndroidRepository/'
maven{
url 'http://nexus.yidianling.com/repository/AndroidReleases/'
credentials {
username "admin"
password "fjoi#1+#@"
}
}
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url'http://developer.huawei.com/repo/' }
maven { url "https://jitpack.io" }
maven {
url 'https://maven.google.com'
}
maven {
url 'https://dl.bintray.com/zouyuhan/maven'
}
google()
jcenter()
}
}
......
ext {
kotlin_version = '1.3.21'
dev_mode = true
ydl_app = [
appName : "心理咨询壹点灵",
......@@ -131,7 +132,7 @@ ext {
"systembartint" : "com.readystatesoftware.systembartint:systembartint:1.0.3",
"cube" : 'in.srain.cube:cube-sdk:1.0.44@aar',
"support-multidex" : 'com.android.support:multidex:1.0.2',
"ydl-ijkplayer-jjdxm" : 'com.ydl:jjdxm-ijkplayer:0.0.1',
"ydl-ijkplayer-jjdxm" : 'com.ydl:jjdxm-ijkplayer:0.0.3',
"robust" : 'com.meituan.robust:robust:0.4.87',
"walle" : 'com.meituan.android.walle:library:1.1.5',
"jpush" : 'cn.jiguang.sdk:jpush:3.2.0',
......@@ -157,7 +158,7 @@ ext {
"ydl-pushagent" : 'com.ydl:ydl-pushagent:0.1.8',
"ydl-notracepoint" : 'com.ydl:notracepoint-lib:0.1.8@aar',
"ydl-js" : 'com.ydl:ydl-js:1.0.7-SNAPSHOT@aar',
"ydl-router" : 'com.ydl:ydl-router:1.3.0-SNAPSHOT@aar',
"ydl-router" : 'com.ydl:ydl-router:1.3.2-SNAPSHOT@aar',
"xrecyclerview" : 'com.ydl:xrecyclerview:1.0.0-SNAPSHOT@aar',
"arouter-api" : "com.alibaba:arouter-api:1.4.1",
"arouter-compiler" : "com.alibaba:arouter-compiler:1.2.2",
......@@ -169,5 +170,11 @@ ext {
"ydl-utils" : 'com.ydl:ydl-utils:0.0.2',
"ydl-net" : 'com.ydl:ydl-net:0.0.1',
//Modular Api
"ydl-user-router" : 'com.ydl:router:1.0.0-SNAPSHOT@aar',
"ydl-platform" : 'com.ydl:ydl-platform:0.0.11@aar',
"ydl-m-user-api" : 'com.ydl:m-user-api:0.0.5',
"ydl-webview" : 'com.ydl:ydl-webview:0.0.14@aar',
"ydl-m-muse-api" : 'com.ydl:m-muse-api:0.0.1@aar'
]
}
......@@ -70,7 +70,7 @@ dependencies {
// implementation project(":ydl-platform")
implementation 'com.ydl:ydl-webview:0.0.14@aar'
implementation('com.ydl:ydl-platform:0.0.11@aar') {
implementation('com.ydl:ydl-platform:0.0.12@aar') {
transitive = true
// exclude group: 'com.ydl', module: 'ydl-utils'
// exclude group: 'com.ydl', module: 'ydl-js'
......
......@@ -54,7 +54,6 @@ import com.ydl.ydlcommon.base.BaseMvpActivity
import com.ydl.ydlcommon.mvp.lce.BaseLceActivity
import com.ydl.ydlcommon.router.YdlCommonRouterManager
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.UMEventUtils
import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.ToastUtil
import de.greenrobot.event.EventBus
......@@ -560,9 +559,6 @@ class AudioHomeActivity : BaseMvpActivity<IAudioHomeActivityContract.View, IAudi
* 声网初始化
*/
private fun initializeAgoraEngine() {
//数据埋点
UMEventUtils.umEvent("ydl_android_login", "", "")
/**
* 创建一个实例
* param appId 应用id
......
......@@ -146,7 +146,7 @@
android:id="@+id/progress_view"
android:layout_width="70dp"
android:layout_height="70dp"
app:progressWidth="2dp" />
app:pa_progressWidth="2dp" />
<ImageView
android:id="@+id/iv_hang_up"
......
......@@ -88,7 +88,7 @@ dependencies {
implementation'com.ydl:router:1.0.0-SNAPSHOT@aar'
// implementation project(":ydl-platform")
implementation('com.ydl:ydl-platform:0.0.11@aar') {
implementation('com.ydl:ydl-platform:0.0.12@aar') {
transitive = true
// exclude group: 'com.ydl', module: 'ydl-utils'
// exclude group: 'com.ydl', module: 'ydl-js'
......
......@@ -24,9 +24,7 @@ import com.ydl.confide.home.listener.ConfideHomeRecycleViewListener
import com.ydl.confide.home.listener.ConfideHomeRecyleSuspendListener
import com.ydl.confide.home.presenter.ConfideHomePresenterImpl
import com.ydl.confide.home.util.ConfideHomeUtils
import com.ydl.ydlcommon.base.BaseMvpActivity
import com.ydl.ydlcommon.mvp.lce.BaseLceActivity
import com.ydl.ydlcommon.utils.UMEventUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.DrawableRightTextView
import com.ydl.ydlcommon.view.WrapContentLinearLayoutManager
......@@ -49,7 +47,7 @@ class ConfideHomeActivity : BaseLceActivity<IConfideHomeContract.View,IConfideHo
}
override fun getStateViewId(): Int {
return R.id.lce_state_view
}
override fun reLoadData() {
......@@ -164,8 +162,6 @@ class ConfideHomeActivity : BaseLceActivity<IConfideHomeContract.View,IConfideHo
override fun initDataAndEvent() {
isSplash = intent.getBooleanExtra("isSplash", false)
//统计埋点
UMEventUtils.listen_list(ConfideHomeActivity@ this)
//初始化View
initView()
mConfideEvent = ConfideHomeEventImpl(this, this)
......
......@@ -7,6 +7,7 @@ import com.ydl.confide.home.http.ConfideRecommendParam
import com.ydl.ydlcommon.mvp.base.IModel
import com.ydl.ydlcommon.mvp.base.IPresenter
import com.ydl.ydlcommon.mvp.base.IView
import com.ydl.ydlcommon.mvp.lce.ILceView
import com.ydl.ydlcommon.view.DrawableRightTextView
import io.reactivex.Observable
......@@ -19,7 +20,7 @@ import io.reactivex.Observable
*/
interface IConfideHomeContract{
//View接口
interface View : IView {
interface View : IView,ILceView {
/**
* 倾诉首页数据请求结果
......
......@@ -29,7 +29,6 @@ import com.ydl.media.view.PlayerFloatHelper
import com.ydl.media.view.PlayerFloatView
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.utils.UMEventUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.router.RouterManager
import com.yidianling.router.im.IMRequestCallback
......@@ -64,7 +63,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param title banner 标题
*/
override fun bannerClick(linkUrl: String?, position: Int?, title: String?) {
UMEventUtils.listen_banner(mContext)
link(linkUrl)
}
......@@ -72,8 +70,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* 最近倾诉--继续倾诉
*/
override fun latelyConfideClick(linkUrl: String?) {
//埋点
UMEventUtils.umEvent("最近倾诉点击", "最近倾诉模块", linkUrl)
link(linkUrl)
}
......@@ -90,11 +86,7 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param linkUrl
*/
override fun categoryClick(linkUrl: String?) {
//埋点
UMEventUtils.umEvent("倾诉指南点击", "倾诉指南", linkUrl)
UMEventUtils.listen_classification(mContext)
link(linkUrl)
}
......@@ -103,7 +95,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param linkUrl 跳转地址
*/
override fun recommendClick(linkUrl: String?) {
UMEventUtils.listen_recommend_say(mContext)
link(linkUrl)
}
......@@ -112,7 +103,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param linkUrl 跳转地址
*/
override fun recommendMoreClick(linkUrl: String?) {
UMEventUtils.listen_recommend_more(mContext)
link(linkUrl)
}
......@@ -121,7 +111,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param linkUrl 跳转地址
*/
override fun soundClick(linkUrl: String?) {
UMEventUtils.listen_find_say(mContext)
link(linkUrl)
}
......@@ -130,7 +119,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param linkUrl 跳转地址
*/
override fun soundMoreClick(linkUrl: String?) {
UMEventUtils.listen_find_more(mContext)
link(linkUrl)
}
......@@ -139,7 +127,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param linkUrl 跳转地址
*/
override fun consultantClick(linkUrl: String?) {
UMEventUtils.listen_recommend(mContext)
link(linkUrl)
}
......@@ -158,8 +145,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* @param playUrl 播放地址
*/
override fun playVoice(type: Int?, index: Int?, playUrl: String?) {
//埋点
UMEventUtils.umEvent("听声寻人点击", "图片点击", "图片点击")
val mu = Music()
mu.path = playUrl
......@@ -188,9 +173,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
mContext?.let { PlayerFloatHelper.show(it) }
}
//埋点
UMEventUtils.umEvent("列表展示点击", "语音点击", "语音点击")
umengPlayVoice(type)
confideHomeView.updataPlayStatu(type, index!!, recommendId, true)
initCache(type, index!!, recommendId, playUrl)
......@@ -230,15 +212,12 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
when (type) {
//为你推荐
IConfideHomeConfig.TYPE_RECOMMEND -> {
UMEventUtils.listen_recommend_play(mContext)
}
//听声寻人
IConfideHomeConfig.TYPE_SOUND -> {
UMEventUtils.listen_find_play(mContext)
}
//咨询师推荐
IConfideHomeConfig.TYPE_CONSULTANT -> {
UMEventUtils.listen_audio_list(mContext)
}
}
}
......@@ -280,7 +259,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
* 私聊
*/
override fun toChatForMsg(doctorId: String?) {
UMEventUtils.umEvent("列表展示点击", "喊他上线点击", "喊他上线点击")
if (!PhoneCallIn.isLogin() && null != mContext && mContext is Activity) {
mContext!!.startActivity(PhoneCallIn.loginWayIntent(mContext as Activity))
......@@ -355,8 +333,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
ConfideHomeUtils.synchroTextDrawable(mContext!!, 1, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
sortPopup = ConfideHomeSortPopupWindow(mContext!!, bodyBean.group[0].data!!, allFiltersBean!!.selectSort!!, object : ConfideHomeSortPopupWindow.OnSortItemSelectedListener {
override fun onSortItemSelected(sortItem: ConfideHomeFiterItemBean) {
//埋点
UMEventUtils.umEvent("筛选点击", "筛选名称", "排序-${sortItem.name}")
//更改小图标
ConfideHomeUtils.synchroTextDrawable(mContext!!, 1, IConfideHomeConfig.FILTER_STATUS_NORMAL, filterView, mConfideAdapter)
......@@ -417,8 +393,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
ageBuild.append("${data.name};")
}
}
//埋点
UMEventUtils.umEvent("筛选点击", "筛选名称", "性别-${sexData.name}-年龄-${ageBuild.toString()}")
ConfideHomeUtils.synchroTextColor(mContext!!, 2, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
allFiltersBean.selectSex!!.name = sexData.name
......@@ -459,8 +433,6 @@ class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeCo
ageBuild.append("${data.name};")
}
}
//埋点
UMEventUtils.umEvent("筛选点击", "筛选名称", "擅长方向-${ageBuild.toString()}")
ConfideHomeUtils.synchroTextColor(mContext!!, 3, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
allFiltersBean.selectGoodData.clear()
......
......@@ -10,8 +10,10 @@ import com.ydl.confide.home.contract.IConfideHomeContract
import com.ydl.confide.home.http.ConfideRecommendParam
import com.ydl.confide.home.model.ConfideHomeModelImpl
import com.ydl.confide.home.util.ConfideHomeUtils
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.ydl.ydlcommon.mvp.lce.ILceView
import com.ydl.ydlcommon.utils.RxLifecycleUtils
import com.ydl.ydlcommon.utils.YDLAsyncUtils
import com.ydl.ydlcommon.utils.YDLCacheUtils
......@@ -79,6 +81,7 @@ class ConfideHomePresenterImpl : BasePresenter<IConfideHomeContract.View,IConfid
val disposable = mModel.confideHomeRequest()
.map { it }
.filter { it != null }
.compose(RxUtils.applySchedulers(mView))
.compose(RxLifecycleUtils.bindToLifecycle(mView!!))//使用 Rxlifecycle,使 Disposable 和 Activity 一起销毁
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer {
......@@ -125,6 +128,7 @@ class ConfideHomePresenterImpl : BasePresenter<IConfideHomeContract.View,IConfid
val disposable = mModel.recommendList(param)
.map { it }
.filter { it != null }
.compose(RxUtils.applySchedulers(mView))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer {
mView.recommendListResponse(it)
......@@ -146,11 +150,13 @@ class ConfideHomePresenterImpl : BasePresenter<IConfideHomeContract.View,IConfid
val disposable = mModel.recommendList(param)
.map { it }
.filter { it != null }
.compose(RxUtils.applySchedulers(mView))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer {
mView.recommendListMoreResponse(it)
}, object : ThrowableConsumer() {
override fun accept(msg: String) {
mView.showError(msg)
mView.showError1(msg)
}
})
......
......@@ -12,7 +12,6 @@ import com.ydl.confide.R
import com.ydl.confide.home.bean.ConfideHomeBodyBean
import com.ydl.confide.home.contract.IConfideHomeContract
import com.ydl.confide.home.event.IConfideHomeEvent
import com.ydl.ydlcommon.utils.UMEventUtils
import kotlinx.android.synthetic.main.confidehome_item_category.view.*
/**
......@@ -61,8 +60,6 @@ class ConfideHomeCategoryItemView(mContext: Context, @Nullable attrs: AttributeS
//锚点到筛选位置
homeView.moveToFilter()
//埋点
UMEventUtils.umEvent("专业师资点击", "专业师资", "专业师资")
}
}
}
......
......@@ -9,7 +9,6 @@ import com.ydl.confide.home.bean.ConfideHomeBodyBean
import com.ydl.confide.home.config.IConfideHomeConfig
import com.ydl.confide.home.event.IConfideHomeEvent
import com.ydl.confide.home.util.ConfideHomeUtils
import com.ydl.ydlcommon.utils.UMEventUtils
import kotlinx.android.synthetic.main.confidehome_listen_and_found_item_view.view.*
/**
......@@ -172,8 +171,6 @@ class ConfideHomeListenAndFoundItemView(mContext: Context, private var confideHo
private fun click(bodyBean: ConfideHomeBodyBean) {
when (bodyBean.confideLine) {//1在线 2离线 3通话中
1, 3,4 -> {
//埋点
UMEventUtils.umEvent("听声寻人点击", "向他倾诉点击", "向他倾诉")
confideHomeEvent.soundClick(bodyBean.linkUrl)
}
......
......@@ -18,7 +18,6 @@ import com.ydl.confide.home.bean.ConfideHomeBodyBean
import com.ydl.confide.home.config.IConfideHomeConfig
import com.ydl.confide.home.contract.IConfideHomeContract
import com.ydl.confide.home.event.IConfideHomeEvent
import com.ydl.ydlcommon.utils.UMEventUtils
import kotlinx.android.synthetic.main.confidehome_recommend_view.view.*
/**
......@@ -81,8 +80,6 @@ class ConfideHomeRecommendView(var view: IConfideHomeContract.View, context: Con
setConfideButton(bodyBean)
//设置页面点击事件
this.setOnClickListener {
//埋点(这里的点击事件是执行的同一个方法,但是点击区域不同,所以分开统计)
UMEventUtils.umEvent("列表展示点击", "图片点击", "图片点击")
confideHomeEvent.consultantClick(bodyBean.linkUrl)
}
......@@ -293,12 +290,8 @@ class ConfideHomeRecommendView(var view: IConfideHomeContract.View, context: Con
when (bodyBean.confideLine) {//1在线 2离线 3通话中
1, 3, 4 -> {
if (bodyBean.confideLine == 1) {
//埋点(这里的点击事件是执行的同一个方法,但是点击区域不同,所以分开统计)
UMEventUtils.umEvent("列表展示点击", "向他倾诉点击", "向他倾诉点击")
}
if (bodyBean.confideLine == 3) {
//埋点(这里的点击事件是执行的同一个方法,但是点击区域不同,所以分开统计)
UMEventUtils.umEvent("列表展示点击", "正在通话中点击", "正在通话中点击")
}
confideHomeEvent.consultantClick(bodyBean.linkUrl)
......
......@@ -68,4 +68,13 @@
android:background="@color/white"
android:visibility="gone" />
<com.ydl.ydlcommon.mvp.lce.view.YDLStateView
android:id="@+id/lce_state_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/rv_list"
android:layout_alignTop="@+id/rv_list"
android:layout_alignRight="@+id/rv_list"
android:layout_alignBottom="@+id/rv_list"/>
</RelativeLayout>
\ No newline at end of file
......@@ -2,6 +2,14 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'plugin.resTools' // 资源重命名插件
// 配置资源重命名插件
resConfig {
new_prefix = 'consultant_' // 资源前缀
old_prefix = '' // 老前缀,可为''空字符串
}
kapt {
arguments {
arg("AROUTER_MODULE_NAME", "consultant")
......@@ -35,6 +43,10 @@ android {
}
}
//前缀的名字
resourcePrefix "consultant_"
//Flavor 信息
publishNonDefault true
productFlavors {
ydl {}
......@@ -51,21 +63,24 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.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'
api'com.ydl:router:1.0.0-SNAPSHOT@aar'
implementation modularPublication('com.ydl:m-user-api')
api project(":ydl-webview")
api project(":ydl-platform")
// compileOnly 'com.ydl:m-user-api:0.0.4'
// api 'com.ydl:ydl-webview:0.0.12@aar'
// api('com.ydl:ydl-platform:0.0.9@aar') {
// transitive = true
// }
api rootProject.ext.dependencies["ydl-user-router"]
if (rootProject.ext.dev_mode){
//开发时使用
implementation modularPublication('com.ydl:m-user-api')
api project(":ydl-webview")
api project(":ydl-platform")
} else {
//发布时使用
compileOnly rootProject.ext.dependencies["ydl-m-user-api"]
api rootProject.ext.dependencies["ydl-webview"]
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
}
}
modular {
//模块包名
packageName "com.yidianling.consultant"
// 模块发布需要的参数
publish {
modules {
xlzx {
//发布信息 module/api 通用
groupId = "com.ydl"
artifactId = "m-consultant-module-xlzx"
// 上报的业务模块 aar 包的版本号
version = "0.0.9"
// 上报的 心理咨询 业务模块 aar 包的版本号
version = "0.0.12"
}
ydl{
//发布信息 module/api 通用
groupId = "com.ydl"
artifactId = "m-consultant-module-ydl"
// 上报的业务模块 aar 包的版本号
version = "0.0.9"
// 上报的 壹点灵 业务模块 aar 包的版本号
version = "0.0.12"
}
}
api {
//发布信息 module/api 通用
// 壹点灵/心理咨询 业务模块 API层 jar包的发布信息
groupId = "com.ydl"
artifactId = "m-consultant-api"
// version = "0.0.1"
//开发时注释掉版本号,发布api时打开
//version = "0.0.1"
// API 层打包时需要引入的依赖
apiDependencies {
implementation "com.google.code.gson:gson:2.8.2"
......
......@@ -7,12 +7,12 @@
android:name=".ExpertSearchActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme"/>
android:theme="@style/consultant_NoTitleTheme"/>
<activity
android:name=".HotSearchActivity"
android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme"/>
android:theme="@style/consultant_NoTitleTheme"/>
</application>
</manifest>
\ No newline at end of file
/*___Generated_by_IDEA___*/
package com.yidianling.consultant;
/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */
public final class BuildConfig {
public final static boolean DEBUG = Boolean.parseBoolean(null);
}
\ No newline at end of file
/*___Generated_by_IDEA___*/
package com.yidianling.consultant;
/* This stub is only used by the IDE. It is NOT the Manifest class actually packed into the APK */
public final class Manifest {
}
\ No newline at end of file
/*___Generated_by_IDEA___*/
package com.yidianling.consultant;
/* This stub is only used by the IDE. It is NOT the R class actually packed into the APK */
public final class R {
}
\ No newline at end of file
......@@ -55,11 +55,11 @@ import com.yidianling.consultant.ui.view.AreaPopupWindow
import com.yidianling.consultant.ui.view.CategoryPopupWindow
import com.yidianling.consultant.ui.view.FilterPopupWindow
import com.yidianling.consultant.ui.view.SortPopupWindow
import kotlinx.android.synthetic.main.activity_expert_search_list.*
import kotlinx.android.synthetic.main.item_filter_online.view.*
import kotlinx.android.synthetic.main.layout_search_content.*
import kotlinx.android.synthetic.main.layout_search_head_bg.*
import kotlinx.android.synthetic.main.layout_search_toolbar.*
import kotlinx.android.synthetic.main.consultant_activity_expert_search_list.*
import kotlinx.android.synthetic.main.consultant_item_filter_online.view.*
import kotlinx.android.synthetic.main.consultant_layout_search_content.*
import kotlinx.android.synthetic.main.consultant_layout_search_head_bg.*
import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.*
import org.json.JSONObject
import java.util.concurrent.Executors
......@@ -80,7 +80,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
}
override fun layoutResId(): Int {
return R.layout.activity_expert_search_list
return R.layout.consultant_activity_expert_search_list
}
override fun initDataAndEvent() {
......@@ -389,7 +389,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
}
}
}
banner_search.setImageLoader(GlideImageLoader(R.drawable.expert_banner_default)).setImages(bannerList).start()
banner_search.setImageLoader(GlideImageLoader(R.drawable.consultant_expert_banner_default)).setImages(bannerList).start()
banner_search.setIndicatorBottomPadding(20)
}
......@@ -467,7 +467,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
val popWidth = RxDeviceTool.getScreenWidth(mContext)
val mWidth = (popWidth - RxImageTool.dp2px(10f)) / hotData.size
for ((index, hot) in hotData!!.withIndex()) {
val tv = View.inflate(mContext, R.layout.item_filter_online, null) as TextView
val tv = View.inflate(mContext, R.layout.consultant_item_filter_online, null) as TextView
val textView = tv.tvFree
val params = LinearLayout.LayoutParams(0, RxImageTool.dp2px(22f))
params.weight = 1f
......@@ -844,7 +844,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
isRecommend = false
if (curPage == 1) {
v_loading.setViewType(LogoLoadingView.TYPE_NET_LOSS, getString(R.string.reload_hint))
v_loading.setViewType(LogoLoadingView.TYPE_NET_LOSS, getString(R.string.consultant_reload_hint))
v_loading.visibility = View.VISIBLE
ll_network_error.visibility = View.GONE
......@@ -875,7 +875,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
if (msg != null) {
ToastUtil.toastShort(msg)
}
v_loading.setViewType(LogoLoadingView.TYPE_NET_LOSS, getString(R.string.reload_hint))
v_loading.setViewType(LogoLoadingView.TYPE_NET_LOSS, getString(R.string.consultant_reload_hint))
v_loading.visibility = View.VISIBLE
ll_network_error.visibility = View.GONE
......@@ -1424,7 +1424,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
}
FILTER_STATUS_FILTERED -> {
tv.typeface = Typeface.DEFAULT_BOLD
tv.setTextColor(ContextCompat.getColor(this, R.color.main_theme))
tv.setTextColor(ContextCompat.getColor(this, R.color.consultant_main_theme))
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.platform_ic_arrow_drop_down_grey_500_18dp, 0)
}
FILTER_STATUS_OPEN -> {
......
......@@ -31,8 +31,8 @@ import com.yidianling.consultant.bean.HotSearchPopularDoctorBean
import com.yidianling.consultant.contract.IHotSearchContract
import com.yidianling.consultant.modular.utils.TempH5RouteUtils
import com.yidianling.consultant.presenter.HotSearchPresenterImpl
import kotlinx.android.synthetic.main.activity_hot_search.*
import kotlinx.android.synthetic.main.item_expert_hot_search.view.*
import kotlinx.android.synthetic.main.consultant_activity_hot_search.*
import kotlinx.android.synthetic.main.consultant_item_expert_hot_search.view.*
@Route(path = "/consult/hot_search")
class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View,IHotSearchContract.Presenter>(), IHotSearchContract.View {
......@@ -51,7 +51,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View,IHotSearchCont
private var dp42: Int = 0
override fun layoutResId(): Int {
return R.layout.activity_hot_search
return R.layout.consultant_activity_hot_search
}
override fun createPresenter(): IHotSearchContract.Presenter {
......@@ -155,7 +155,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View,IHotSearchCont
llHotSearch.visibility = View.VISIBLE
flHotSearch.removeAllViews()
for (index in keywordData.indices) {
val view = LayoutInflater.from(this).inflate(R.layout.item_expert_hot_search, flHotSearch, false)
val view = LayoutInflater.from(this).inflate(R.layout.consultant_item_expert_hot_search, flHotSearch, false)
view.tvHotSearch.text = keywordData[index].keyword
view.setOnClickListener {
etSearch.setText(keywordData[index].keyword)
......@@ -175,7 +175,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View,IHotSearchCont
expertWidth = 0
flHotExpert.removeAllViews()
for (index in hotSearchExpert.indices) {
val view = LayoutInflater.from(this).inflate(R.layout.item_expert_hot_search, flHotSearch, false)
val view = LayoutInflater.from(this).inflate(R.layout.consultant_item_expert_hot_search, flHotSearch, false)
view.tvHotSearch.text = hotSearchExpert[index].name
if (!TextUtils.isEmpty(hotSearchExpert[index].name)) {
expertWidth += getTextContentWidth(view.findViewById(R.id.tvHotSearch), if (hotSearchExpert[index].name!!.length > 7) hotSearchExpert[index].name!!.substring(0, 8) else hotSearchExpert[index].name!!) + dp42
......@@ -215,7 +215,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View,IHotSearchCont
TempH5RouteUtils.tempH5Route(focusList[it].linkUrl)
}
}
banner.setImageLoader(GlideImageLoader(R.drawable.expert_banner_default)).setImages(bannerList).start()
banner.setImageLoader(GlideImageLoader(R.drawable.consultant_expert_banner_default)).setImages(bannerList).start()
banner.setIndicatorBottomPadding(5)
}
......@@ -231,7 +231,7 @@ class HotSearchActivity : BaseMvpActivity<IHotSearchContract.View,IHotSearchCont
if (historyList.size > 0) {
for (historyStr in historyList.reversed()) {
val view = LayoutInflater.from(this).inflate(R.layout.item_expert_hot_search, flHotSearch, false)
val view = LayoutInflater.from(this).inflate(R.layout.consultant_item_expert_hot_search, flHotSearch, false)
view.tvHotSearch.text = historyStr
historyCurrentWidth += getTextContentWidth(view.findViewById(R.id.tvHotSearch),
if (historyStr.length > 7) historyStr.substring(0, 8) else historyStr) + RxImageTool.dp2px(50f)
......
......@@ -8,7 +8,7 @@ import android.view.ViewGroup
import android.widget.TextView
import com.yidianling.consultant.R
import com.yidianling.consultant.model.bean.CateItem
import kotlinx.android.synthetic.main.item_subject.view.*
import kotlinx.android.synthetic.main.consultant_item_subject.view.*
/**
* 主题Recycler适配器
......@@ -25,7 +25,7 @@ class CategoryRecyclerViewAdapter(private val context: Context, private val cate
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(context).inflate(R.layout.item_subject, parent, false)
val itemView = LayoutInflater.from(context).inflate(R.layout.consultant_item_subject, parent, false)
return ViewHolder(itemView)
}
......
......@@ -9,7 +9,7 @@ import android.view.ViewGroup
import com.ydl.ydlcommon.adapter.MyBaseAdapter
import com.yidianling.consultant.R
import com.yidianling.consultant.model.bean.RegionItem
import kotlinx.android.synthetic.main.item_region.view.*
import kotlinx.android.synthetic.main.consultant_item_region.view.*
@Suppress("DEPRECATION")
/**
......@@ -31,7 +31,7 @@ class RegionRecyclerViewAdapter(val context: Context, val regionList: ArrayList<
//选中状态
holder.itemView.tvRegionName.setTypeface(Typeface.DEFAULT_BOLD)
// holder.itemView.tvRegionName.setBackgroundColor(Color.rgb(255, 255, 255))
holder.itemView.tvRegionName.setTextColor(context.resources.getColor(R.color.main_theme))
holder.itemView.tvRegionName.setTextColor(context.resources.getColor(R.color.consultant_main_theme))
holder.itemView.view_select.visibility = View.VISIBLE
} else {
//未选中状态
......@@ -46,7 +46,7 @@ class RegionRecyclerViewAdapter(val context: Context, val regionList: ArrayList<
override fun getItemCount(): Int = regionList.size + 1
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.item_region, parent, false)
val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_region, parent, false)
return ViewHolder(view)
}
......
......@@ -10,7 +10,7 @@ import android.view.ViewGroup
import com.yidianling.consultant.R
import com.yidianling.consultant.listener.OnSortItemSelectedListener
import com.yidianling.consultant.model.bean.ReorderItem
import kotlinx.android.synthetic.main.item_sort.view.*
import kotlinx.android.synthetic.main.consultant_item_sort.view.*
/**
* Created by zqk on 17-9-20.
......@@ -23,7 +23,7 @@ class SortRecyclerViewAdapter(private val context: Context,
override fun getItemCount(): Int = sortItems.size
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(context).inflate(R.layout.item_sort, parent, false)
val itemView = LayoutInflater.from(context).inflate(R.layout.consultant_item_sort, parent, false)
return ViewHolder(itemView)
}
......@@ -33,7 +33,7 @@ class SortRecyclerViewAdapter(private val context: Context,
holder.tvSort.text = item.value
if (item.key == selectedSort.key) {
holder.tvSort.setTypeface(Typeface.DEFAULT_BOLD)
holder.tvSort.setTextColor(ContextCompat.getColor(context, R.color.main_theme))
holder.tvSort.setTextColor(ContextCompat.getColor(context, R.color.consultant_main_theme))
// holder.ivCheck.visibility = View.VISIBLE
}
}
......
......@@ -10,7 +10,7 @@ import android.view.ViewGroup
import com.ydl.ydlcommon.adapter.MyBaseAdapter
import com.yidianling.consultant.R
import com.yidianling.consultant.model.bean.SubItem
import kotlinx.android.synthetic.main.item_consult_type.view.*
import kotlinx.android.synthetic.main.consultant_item_consult_type.view.*
/**
* 城市列表适配器
......@@ -30,7 +30,7 @@ class SubRecyclerViewAdapter(val context: Context, val subList: ArrayList<SubIte
if (selectedSub.key == region.key) {
//选中状态
holder.itemView.tvConsultTypeName.setTypeface(Typeface.DEFAULT_BOLD)
holder.itemView.tvConsultTypeName.setTextColor(ContextCompat.getColor(context,R.color.main_theme))
holder.itemView.tvConsultTypeName.setTextColor(ContextCompat.getColor(context,R.color.consultant_main_theme))
// holder.itemView.ivCheckCircle.visibility = View.VISIBLE
} else {
//未选中状态
......@@ -44,7 +44,7 @@ class SubRecyclerViewAdapter(val context: Context, val subList: ArrayList<SubIte
override fun getItemCount(): Int = subList.size + 1
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.item_consult_type, parent, false)
val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_consult_type, parent, false)
return ViewHolder(view)
}
......
......@@ -35,7 +35,7 @@ data class DoctorServiceItem(/**
*/
val isOnline : Int?,
/**
* 能力等级 5.精英
* 能力等级 1.实习 2.新手 3.精英
*/
val abilityLevel : Int?,
/**
......
......@@ -15,7 +15,7 @@ import com.yidianling.consultant.adapter.RegionRecyclerViewAdapter
import com.yidianling.consultant.adapter.SubRecyclerViewAdapter
import com.yidianling.consultant.model.bean.RegionItem
import com.yidianling.consultant.model.bean.SubItem
import kotlinx.android.synthetic.main.ui_region_popup_window.view.*
import kotlinx.android.synthetic.main.consultant_ui_region_popup_window.view.*
/**
* 地区选择弹窗
......@@ -32,7 +32,7 @@ class AreaPopupWindow(val context: Context, regionList: ArrayList<RegionItem>,
init {
subList.addAll(selectedRegion.sub)
val view = LayoutInflater.from(context).inflate(R.layout.ui_region_popup_window, null)
val view = LayoutInflater.from(context).inflate(R.layout.consultant_ui_region_popup_window, null)
this.contentView = view
this.isFocusable = true
@Suppress("DEPRECATION")
......
......@@ -13,7 +13,7 @@ import com.yidianling.consultant.R
import com.yidianling.consultant.adapter.CategoryRecyclerViewAdapter
import com.yidianling.consultant.listener.OnCategoriesSelectedListener
import com.yidianling.consultant.model.bean.CateItem
import kotlinx.android.synthetic.main.ui_subject_popup_window.view.*
import kotlinx.android.synthetic.main.consultant_ui_subject_popup_window.view.*
/**
* 主题弹窗
......@@ -24,7 +24,7 @@ class CategoryPopupWindow(context: Context, categories: ArrayList<CateItem>, sel
var onSubjectsSelectedListener: OnCategoriesSelectedListener? = null
init {
val view = LayoutInflater.from(context).inflate(R.layout.ui_subject_popup_window, null)
val view = LayoutInflater.from(context).inflate(R.layout.consultant_ui_subject_popup_window, null)
this.contentView = view
this.isFocusable = true
@Suppress("DEPRECATION")
......
......@@ -33,9 +33,9 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.item_filter.view.*
import kotlinx.android.synthetic.main.item_price_range.view.*
import kotlinx.android.synthetic.main.ui_filter_popup.view.*
import kotlinx.android.synthetic.main.consultant_item_filter.view.*
import kotlinx.android.synthetic.main.consultant_item_price_range.view.*
import kotlinx.android.synthetic.main.consultant_ui_filter_popup.view.*
/**
......@@ -67,7 +67,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
var etMaxPrice: EditText? = null
init {
val view = LayoutInflater.from(context).inflate(R.layout.ui_filter_popup, null)
val view = LayoutInflater.from(context).inflate(R.layout.consultant_ui_filter_popup, null)
dp5 = RxImageTool.dip2px(5f)
dp10 = RxImageTool.dip2px(10f)
......@@ -86,7 +86,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
this.setBackgroundDrawable(BitmapDrawable())
this.isOutsideTouchable = true
this.animationStyle = R.style.expert_service_popupwindow_filter_anim_style
this.animationStyle = R.style.consultant_expert_service_popupwindow_filter_anim_style
initShowTypeViews(view)
initEnquiryViews(view)
......@@ -270,12 +270,12 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
//按钮置灰/解除置灰
contentView.btnConfirm.isEnabled = it > 0
if (it > 0) {
contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.confirm_text_color))
contentView.btnConfirm.background = ContextCompat.getDrawable(context, R.drawable.bg_radius_5_dark)
// contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.white))
contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.consultant_confirm_text_color))
contentView.btnConfirm.background = ContextCompat.getDrawable(context, R.drawable.consultant_bg_radius_5_dark)
// contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.consultant_white))
} else {
contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.confirm_text_hint_color))
contentView.btnConfirm.background = ContextCompat.getDrawable(context, R.drawable.bg_radius_5_light)
contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.consultant_confirm_text_hint_color))
contentView.btnConfirm.background = ContextCompat.getDrawable(context, R.drawable.consultant_bg_radius_5_light)
// contentView.btnConfirm.setTextColor(ContextCompat.getColor(context,R.color.color_999999))
}
......@@ -297,7 +297,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
private fun initOtherViews(view: View) {
val mWidth = (popWidth - RxImageTool.dp2px(52f)) / 3
for ((index, other) in filterData!!.other!!.withIndex()) {
val textView = View.inflate(context, R.layout.item_filter, null) as TextView
val textView = View.inflate(context, R.layout.consultant_item_filter, null) as TextView
val params = FrameLayout.LayoutParams(mWidth, dp36)
val marginNum = dp5
params.setMargins(marginNum + (dp10 + mWidth) * (index % 3),
......@@ -334,7 +334,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
val mWidth = (popWidth - RxImageTool.dp2px(40f)) / 2
var float = 46f
for ((index, other) in filterData!!.title!!.withIndex()) {
val textView = View.inflate(context, R.layout.item_filter, null) as TextView
val textView = View.inflate(context, R.layout.consultant_item_filter, null) as TextView
// val params = FrameLayout.LayoutParams(mWidth,FrameLayout.LayoutParams.WRAP_CONTENT)
val params = FrameLayout.LayoutParams(mWidth, dp36)
val marginNum = dp5
......@@ -376,7 +376,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
private fun initAgeViews(view: View) {
val mWidth = (popWidth - RxImageTool.dp2px(52f)) / 3
for ((index, age) in filterData!!.age!!.withIndex()) {
val textView = View.inflate(context, R.layout.item_filter, null) as TextView
val textView = View.inflate(context, R.layout.consultant_item_filter, null) as TextView
val params = FrameLayout.LayoutParams(mWidth, RxImageTool.dp2px(36f))
val marginNum = RxImageTool.dp2px(5f)
params.setMargins(marginNum + (dp10 + mWidth) * (index % 3),
......@@ -412,7 +412,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
private fun initEnquiryViews(view: View) {
val mWidth = (popWidth - RxImageTool.dp2px(52f)) / 3
for ((index, enquiry) in filterData!!.enquiry!!.withIndex()) {
val textView = View.inflate(context, R.layout.item_filter, null) as TextView
val textView = View.inflate(context, R.layout.consultant_item_filter, null) as TextView
val params = FrameLayout.LayoutParams(mWidth, RxImageTool.dp2px(36f))
val marginNum = RxImageTool.dp2px(5f)
params.setMargins(marginNum + (RxImageTool.dp2px(10f) + mWidth) * (index % 3),
......@@ -445,7 +445,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
}
private fun initPriceViews(view: View) {
val priceRange = View.inflate(context, R.layout.item_price_range, null) as LinearLayout
val priceRange = View.inflate(context, R.layout.consultant_item_price_range, null) as LinearLayout
etMinPrice = priceRange.findViewById<EditText>(R.id.etMinPrice);
etMaxPrice = priceRange.findViewById<EditText>(R.id.etMaxPrice);
......@@ -499,7 +499,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
val mWidth = (popWidth - RxImageTool.dp2px(52f)) / 3
for ((index, priceRangesItem) in filterData!!.priceRanges!!.withIndex()) {
val textView = View.inflate(context, R.layout.item_filter, null) as TextView
val textView = View.inflate(context, R.layout.consultant_item_filter, null) as TextView
val params = FrameLayout.LayoutParams(mWidth, RxImageTool.dp2px(48f))
val marginNum = RxImageTool.dp2px(2f)
params.setMargins(marginNum + (RxImageTool.dp2px(10f) + mWidth) * (index % 3),
......@@ -578,7 +578,7 @@ class FilterPopupWindow(private val context: Context, private val filterData: Fi
private fun initShowTypeViews(view: View) {
val mWidth = (popWidth - RxImageTool.dp2px(42f)) / 2
for ((index, showType) in filterData.showType.withIndex()) {
val textView = View.inflate(context, R.layout.item_filter, null) as TextView
val textView = View.inflate(context, R.layout.consultant_item_filter, null) as TextView
val params = FrameLayout.LayoutParams(mWidth, dp36)
val marginNum = dp5
var textMarginLeft = marginNum + (dp10 + mWidth) * (index % 2)
......
......@@ -10,7 +10,7 @@ import com.yidianling.consultant.R
import com.yidianling.consultant.adapter.SortRecyclerViewAdapter
import com.yidianling.consultant.listener.OnSortItemSelectedListener
import com.yidianling.consultant.model.bean.ReorderItem
import kotlinx.android.synthetic.main.ui_sort_popup_window.view.*
import kotlinx.android.synthetic.main.consultant_ui_sort_popup_window.view.*
/**
* 排序弹窗
......@@ -22,7 +22,7 @@ class SortPopupWindow(val context: Context, private val sortItems: ArrayList<Reo
private var adapter: SortRecyclerViewAdapter
init {
val view = LayoutInflater.from(context).inflate(R.layout.ui_sort_popup_window, null)
val view = LayoutInflater.from(context).inflate(R.layout.consultant_ui_sort_popup_window, null)
this.contentView = view
this.isFocusable = true
@Suppress("DEPRECATION")
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/consultant_filter_content_text_color_en" android:state_selected="true" android:state_enabled="true"/>
<item android:color="@color/consultant_filter_content_text_color_un" android:state_enabled="true"/>
</selector>
\ No newline at end of file
......@@ -5,5 +5,5 @@
<solid android:color="#F2faff"/>
<stroke
android:width="1dp"
android:color="@color/main_theme"/>
android:color="@color/consultant_main_theme"/>
</shape>
\ No newline at end of file
......@@ -2,9 +2,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp" />
<solid android:color="@color/confirm_bg_color" />
<solid android:color="@color/consultant_confirm_bg_color" />
<stroke
android:width="1dp"
android:color="@color/confirm_bg_color" />
android:color="@color/consultant_confirm_bg_color" />
</shape>
\ No newline at end of file
......@@ -2,9 +2,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp" />
<solid android:color="@color/main_theme_light" />
<solid android:color="@color/consultant_main_theme_light" />
<stroke
android:width="1dp"
android:color="@color/main_theme_light" />
android:color="@color/consultant_main_theme_light" />
</shape>
\ No newline at end of file
This diff is collapsed. Click to expand it.
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