Commit 4577285a by 霍志良

Merge remote-tracking branch 'origin/d/4.4.10' into feat/zl/consult_top_modify

# Conflicts:
#	app/src/main/java/com/ydl/component/base/DemoGlobalConfig.java
#	build.gradle
parents aa70d33b c2689a91
...@@ -4,11 +4,10 @@ package com.ydl.component.base; ...@@ -4,11 +4,10 @@ package com.ydl.component.base;
import android.content.Context; import android.content.Context;
import com.ydl.component.BuildConfig; import com.ydl.component.BuildConfig;
import com.ydl.ydlcommon.base.config.GlobalConfig;
import com.ydl.ydlcommon.base.config.IConfigModule; import com.ydl.ydlcommon.base.config.IConfigModule;
import com.ydl.ydlcommon.base.config.YDLConstants; import com.ydl.ydlcommon.base.config.YDLConstants;
import com.ydl.ydlcommon.base.delegate.IAppLifecycles; import com.ydl.ydlcommon.base.delegate.IAppLifecycles;
import com.ydl.ydlcommon.base.config.GlobalConfig;
import com.ydl.ydlcommon.utils.YDLCacheUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
......
...@@ -137,9 +137,9 @@ dependencies { ...@@ -137,9 +137,9 @@ dependencies {
//====================云信基础库==================== //====================云信基础库====================
implementation 'com.ydl:nim-base:1.1.1.2' implementation 'com.ydl:nim-base:1.1.1.2'
implementation 'com.netease.nimlib:basesdk:9.1.1' implementation 'com.netease.nimlib:basesdk:9.2.1'
implementation 'com.netease.nimlib:avchat:9.1.1' implementation 'com.netease.nimlib:avchat:9.2.1'
implementation 'com.netease.nimlib:nrtc:9.1.1' implementation 'com.netease.nimlib:nrtc:9.2.1'
//OPPO推送需要单独引入 //OPPO推送需要单独引入
implementation 'com.google.code.gson:gson:2.6.2' implementation 'com.google.code.gson:gson:2.6.2'
implementation 'commons-codec:commons-codec:1.6' implementation 'commons-codec:commons-codec:1.6'
......
...@@ -14,7 +14,7 @@ buildscript { ...@@ -14,7 +14,7 @@ buildscript {
ydlrouter_version = '1.2.3' ydlrouter_version = '1.2.3'
constrait_support_version = '1.0.2' constrait_support_version = '1.0.2'
componentVersion = "0.3.0.40-zl" componentVersion = "0.3.0.44"
} }
repositories { repositories {
mavenCentral() mavenCentral()
......
...@@ -131,7 +131,7 @@ ext { ...@@ -131,7 +131,7 @@ ext {
"flowlayout" : "cn.lankton:flowlayout:3.1.0", "flowlayout" : "cn.lankton:flowlayout:3.1.0",
"androidanimations" : "com.daimajia.androidanimations:library:2.3@aar", "androidanimations" : "com.daimajia.androidanimations:library:2.3@aar",
//友盟统计 //友盟统计
"umeng-common" : "com.umeng.umsdk:common:9.5.1", "umeng-common" : "com.umeng.umsdk:common:9.5.2",
"umeng-asms" : "com.umeng.umsdk:asms:1.6.3", "umeng-asms" : "com.umeng.umsdk:asms:1.6.3",
//友盟社会化分享 //友盟社会化分享
"umeng-share-core" : "com.umeng.umsdk:share-core:7.1.4", "umeng-share-core" : "com.umeng.umsdk:share-core:7.1.4",
...@@ -164,7 +164,7 @@ ext { ...@@ -164,7 +164,7 @@ ext {
"blankUtil" : "com.blankj:utilcode:1.25.9", "blankUtil" : "com.blankj:utilcode:1.25.9",
"ydl-hnet" : "com.ydl:h-net:0.0.8", "ydl-hnet" : "com.ydl:h-net:0.0.8",
"ydl-user-router" : "com.ydl:router:1.0.0-SNAPSHOT@aar", "ydl-user-router" : "com.ydl:router:1.0.0-SNAPSHOT@aar",
"ydl-device" : "com.ydl:device-id:0.0.31", "ydl-device" : "com.ydl:device-id:0.0.35",
//flutter功能组件升级===>发布ydl-flutter组件===>引用flutter相关的业务模块 //flutter功能组件升级===>发布ydl-flutter组件===>引用flutter相关的业务模块
"ydl-flutter" : "com.ydl:ydl-flutter:0.0.57@aar", //flutter aar "ydl-flutter" : "com.ydl:ydl-flutter:0.0.57@aar", //flutter aar
// "ydl-flutter-sp" : "com.ydl:ydl-flutter-sp:0.0.2@aar", //flutter 缓存 aar // "ydl-flutter-sp" : "com.ydl:ydl-flutter-sp:0.0.2@aar", //flutter 缓存 aar
......
...@@ -17,5 +17,7 @@ ...@@ -17,5 +17,7 @@
android:launchMode="singleTask" android:launchMode="singleTask"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<service android:name=".AudioService"/>
</application> </application>
</manifest> </manifest>
...@@ -33,7 +33,6 @@ import com.ydl.audioim.http.command.ConnectExceptionCommand ...@@ -33,7 +33,6 @@ import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.http.command.NoticePushCommand import com.ydl.audioim.http.command.NoticePushCommand
import com.ydl.audioim.http.command.PayLoad import com.ydl.audioim.http.command.PayLoad
import com.ydl.audioim.listener.IntentConstants import com.ydl.audioim.listener.IntentConstants
import com.ydl.audioim.notification.FloatService
import com.ydl.audioim.player.AudioPlayer import com.ydl.audioim.player.AudioPlayer
import com.ydl.audioim.presenter.AudioHomePresenterImpl import com.ydl.audioim.presenter.AudioHomePresenterImpl
import com.ydl.audioim.router.AudioImIn import com.ydl.audioim.router.AudioImIn
...@@ -234,7 +233,6 @@ class AudioHomeActivity : ...@@ -234,7 +233,6 @@ class AudioHomeActivity :
private var canChangeRoute: Boolean = false private var canChangeRoute: Boolean = false
private var hasHandleRefused = false private var hasHandleRefused = false
private var mServiceIntent: Intent? = null
private val notificationCallback = object : IMRegisterObserverCustomNotificationCallBack { private val notificationCallback = object : IMRegisterObserverCustomNotificationCallBack {
override fun onObserverCustomNotification(fromUid: String, toUid: String, content: String) { override fun onObserverCustomNotification(fromUid: String, toUid: String, content: String) {
if (fromUid == listenerUid) { if (fromUid == listenerUid) {
...@@ -522,12 +520,6 @@ class AudioHomeActivity : ...@@ -522,12 +520,6 @@ class AudioHomeActivity :
override fun initDataAndEvent() { override fun initDataAndEvent() {
//状态栏颜色 //状态栏颜色
setWindowStatusBarColor() setWindowStatusBarColor()
mServiceIntent = Intent(this@AudioHomeActivity, FloatService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(mServiceIntent)
} else {
startService(mServiceIntent)
}
//初始化传感器 //初始化传感器
initSensorManager() initSensorManager()
//页面传递数据初始化 //页面传递数据初始化
...@@ -1607,7 +1599,6 @@ class AudioHomeActivity : ...@@ -1607,7 +1599,6 @@ class AudioHomeActivity :
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
stopService(mServiceIntent)
findRouteService(IImService::class.java).unregisterObserveCustomNotification(notificationCallback) findRouteService(IImService::class.java).unregisterObserveCustomNotification(notificationCallback)
uploadLog() uploadLog()
phoneHandler?.removeCallbacksAndMessages(null) phoneHandler?.removeCallbacksAndMessages(null)
......
package com.ydl.audioim
import android.app.*
import android.content.Context
import android.content.Intent
import android.os.Build
class AudioService : Service() {
override fun onCreate() {
val createNotification = createNotification(this)
startForeground(12001, createNotification)
}
override fun onBind(intent: Intent?) = null
private fun createNotification(context: Context): Notification = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
// 创建消息渠道
val channel =
NotificationChannel("EasyFloat", "系统悬浮窗", NotificationManager.IMPORTANCE_MIN)
val manager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.createNotificationChannel(channel)
Notification.Builder(context, "EasyFloat")
.setCategory(Notification.CATEGORY_SERVICE)
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ->
Notification.Builder(context)
.setCategory(Notification.CATEGORY_SERVICE)
.setPriority(Notification.PRIORITY_MIN)
else -> Notification.Builder(context)
}
// .setSmallIcon(R.drawable.audioim_audio_home_img_answer)
// .setContentText("正在通话中")
// .setContentIntent(PendingIntent.getActivity(context, 0, Intent(context, MainActivity::class.java), 0))
.setAutoCancel(true)
.setOngoing(true)
.build()
}
\ No newline at end of file
package com.ydl.audioim.notification
import android.app.*
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.IBinder
import com.ydl.audioim.R
class FloatService : Service() {
var notificationManager: NotificationManager? = null;
var notificationId = "audio_av";
var notificationName = "正在通话中";
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
//创建NotificationChannel
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
var channel = NotificationChannel(
notificationId,
notificationName,
NotificationManager.IMPORTANCE_HIGH
);
//不震动
channel.enableVibration(false);
//静音
channel.setSound(null, null);
notificationManager?.createNotificationChannel(channel);
}
//创建服务后,五秒内调用该方法
startForeground(1, getNotification());
}
/**
* 获取通知(Android8.0后需要)
* @return
*/
fun getNotification(): Notification {
var builder = Notification.Builder(this)
.setSmallIcon(R.drawable.dialog_list_bg)
.setContentTitle("壹点灵")
.setContentIntent(getIntent())
.setContentText("正在通话中");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(notificationId);
}
return builder.build();
}
/**
* 点击后,直接打开app(之前的页面),不跳转特定activity
* @return
*/
fun getIntent(): PendingIntent {
var msgIntent =
applicationContext.packageManager.getLaunchIntentForPackage(packageName);//获取启动Activity
var pendingIntent = PendingIntent.getActivity(
applicationContext,
1,
msgIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
return pendingIntent;
}
}
\ No newline at end of file
...@@ -11,7 +11,6 @@ import android.hardware.SensorEvent ...@@ -11,7 +11,6 @@ import android.hardware.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
import android.hardware.SensorManager import android.hardware.SensorManager
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.PowerManager import android.os.PowerManager
import android.provider.Settings import android.provider.Settings
import android.text.TextUtils import android.text.TextUtils
...@@ -27,7 +26,6 @@ import com.ydl.audioim.R ...@@ -27,7 +26,6 @@ import com.ydl.audioim.R
import com.ydl.audioim.YDLavManager import com.ydl.audioim.YDLavManager
import com.ydl.audioim.http.command.ConnectExceptionCommand import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.http.command.PayLoad import com.ydl.audioim.http.command.PayLoad
import com.ydl.audioim.notification.FloatService
import com.ydl.audioim.player.AudioPlayer import com.ydl.audioim.player.AudioPlayer
import com.ydl.audioim.utils.AudioLogUtils import com.ydl.audioim.utils.AudioLogUtils
import com.ydl.audioim.utils.DateUtils import com.ydl.audioim.utils.DateUtils
...@@ -120,7 +118,6 @@ class ConsultantAudioHomeActivity : ...@@ -120,7 +118,6 @@ class ConsultantAudioHomeActivity :
* 是否连接成功 * 是否连接成功
*/ */
private var isConnectSuccess: Boolean = false private var isConnectSuccess: Boolean = false
private var mServiceIntent: Intent? = null
companion object { companion object {
const val PARAM: String = "param" const val PARAM: String = "param"
...@@ -501,12 +498,6 @@ class ConsultantAudioHomeActivity : ...@@ -501,12 +498,6 @@ class ConsultantAudioHomeActivity :
override fun initDataAndEvent() { override fun initDataAndEvent() {
EventBus.getDefault().register(this) EventBus.getDefault().register(this)
callEventSave("30", "进入接听界面") callEventSave("30", "进入接听界面")
mServiceIntent = Intent(this@ConsultantAudioHomeActivity, FloatService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(mServiceIntent)
} else {
startService(mServiceIntent)
}
//状态栏颜色 //状态栏颜色
setWindowStatusBarColor() setWindowStatusBarColor()
//点亮屏幕 并解锁 //点亮屏幕 并解锁
...@@ -1123,7 +1114,6 @@ class ConsultantAudioHomeActivity : ...@@ -1123,7 +1114,6 @@ class ConsultantAudioHomeActivity :
} }
override fun onDestroy() { override fun onDestroy() {
stopService(mServiceIntent)
LogUtil.e("http-------------onDestory") LogUtil.e("http-------------onDestory")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:onDestroy channelId:${mAudioMessageBean?.channelId}") AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:onDestroy channelId:${mAudioMessageBean?.channelId}")
......
package com.yidianling.consultant.adapter package com.yidianling.consultant.adapter
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context import android.content.Context
import android.graphics.Typeface import android.graphics.Typeface
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
...@@ -19,10 +20,11 @@ import com.ydl.webview.NewH5Activity ...@@ -19,10 +20,11 @@ import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.module.GlideApp import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydlcommon.base.config.HttpConfig import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.utils.LogUtil import com.ydl.ydlcommon.modular.findRouteService
import com.ydl.ydlcommon.utils.URLUtils import com.ydl.ydlcommon.utils.URLUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.consultant.IExpertSearchView import com.yidianling.consultant.IExpertSearchView
import com.yidianling.consultant.R import com.yidianling.consultant.R
import com.yidianling.consultant.constants.ConsultBIConstants import com.yidianling.consultant.constants.ConsultBIConstants
...@@ -30,6 +32,7 @@ import com.yidianling.consultant.listener.OnExpertClickListener ...@@ -30,6 +32,7 @@ import com.yidianling.consultant.listener.OnExpertClickListener
import com.yidianling.consultant.model.bean.ExpertServiceItem import com.yidianling.consultant.model.bean.ExpertServiceItem
import com.yidianling.consultant.modular.utils.TempH5RouteUtils import com.yidianling.consultant.modular.utils.TempH5RouteUtils
import com.yidianling.consultant.router.ConsultantIn import com.yidianling.consultant.router.ConsultantIn
import com.yidianling.user.api.service.IUserService
import kotlinx.android.synthetic.main.consultant_expert_search_feedbackrate.view.* import kotlinx.android.synthetic.main.consultant_expert_search_feedbackrate.view.*
import kotlinx.android.synthetic.main.consultant_expert_search_header_view.view.* import kotlinx.android.synthetic.main.consultant_expert_search_header_view.view.*
import kotlinx.android.synthetic.main.consultant_expert_search_item_view.view.* import kotlinx.android.synthetic.main.consultant_expert_search_item_view.view.*
...@@ -581,6 +584,18 @@ class ExpertSearchAdapter( ...@@ -581,6 +584,18 @@ class ExpertSearchAdapter(
if (!TextUtils.isEmpty(doctor.uid)) { if (!TextUtils.isEmpty(doctor.uid)) {
val userService = findRouteService(IUserService::class.java)
if (!userService.isBindPhone() && context is Activity) {
CommonDialog(context)
.setMessage("为了及时接收消息通知,请立即绑定手机")
.setLeftOnclick("忍痛放弃") {}
.setRightClick("果断绑定") {
userService.wxBindToInputhonePage(context) // 跳转绑定手机号页面
}
.setCancelAble(false)
.show()
return@setOnClickListener
}
//跳转私聊 //跳转私聊
ConsultantIn.startP2PSession(context as AppCompatActivity, doctor.uid!!) ConsultantIn.startP2PSession(context as AppCompatActivity, doctor.uid!!)
ActionCountUtils.count(ConsultBIConstants.UserMainEvent.YDL_PRIVATE_CHAT_CLICK) ActionCountUtils.count(ConsultBIConstants.UserMainEvent.YDL_PRIVATE_CHAT_CLICK)
......
package com.yidianling.consultant.ui.view.topView package com.yidianling.consultant.ui.view.topView
import android.app.Activity
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
...@@ -21,8 +20,6 @@ import com.yidianling.consultant.listener.OnCategoriesSelectedListener ...@@ -21,8 +20,6 @@ import com.yidianling.consultant.listener.OnCategoriesSelectedListener
import com.yidianling.consultant.model.bean.AllFilter import com.yidianling.consultant.model.bean.AllFilter
import com.yidianling.consultant.model.bean.ChildrenBean import com.yidianling.consultant.model.bean.ChildrenBean
import com.yidianling.consultant.model.bean.EightCategoryBean import com.yidianling.consultant.model.bean.EightCategoryBean
import kotlinx.android.synthetic.main.consultant_expert_search_big_shot_one.view.*
import kotlinx.android.synthetic.main.consultant_layout_category_view.*
import kotlinx.android.synthetic.main.consultant_layout_category_view.view.* import kotlinx.android.synthetic.main.consultant_layout_category_view.view.*
class EightCategoryView : LinearLayout, CategoryDetailAdapter.OutAdapterClicklistener, class EightCategoryView : LinearLayout, CategoryDetailAdapter.OutAdapterClicklistener,
...@@ -145,7 +142,7 @@ class EightCategoryView : LinearLayout, CategoryDetailAdapter.OutAdapterClicklis ...@@ -145,7 +142,7 @@ class EightCategoryView : LinearLayout, CategoryDetailAdapter.OutAdapterClicklis
category_detail.layoutManager = leftmanager category_detail.layoutManager = leftmanager
category_detail.adapter = categoryRightAdapter category_detail.adapter = categoryRightAdapter
mutableList.forEachIndexed { index, mutable -> mutableList.forEachIndexed { index, mutable ->
if (mutable[0].isSelected) { if (mutable.size > 0 && mutable[0].isSelected) {
eightCategoryListBean.get(index).hasData = true eightCategoryListBean.get(index).hasData = true
return@forEachIndexed return@forEachIndexed
} }
......
...@@ -32,7 +32,7 @@ class CourseListDialog : BaseDialogFragment() { ...@@ -32,7 +32,7 @@ class CourseListDialog : BaseDialogFragment() {
private lateinit var recycler_list: RecyclerView private lateinit var recycler_list: RecyclerView
override fun getLayoutResourceId(): Int = R.layout.dialog_course_list override fun getLayoutResourceId(): Int = R.layout.dialog_course_list
override fun getGravity(): Int = Gravity.BOTTOM override fun setGravity(): Int = Gravity.BOTTOM
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
context?.let { ctx -> context?.let { ctx ->
......
...@@ -26,7 +26,7 @@ class CourseSpeedDialog : BaseDialogFragment() { ...@@ -26,7 +26,7 @@ class CourseSpeedDialog : BaseDialogFragment() {
private lateinit var tv_cancel: TextView private lateinit var tv_cancel: TextView
override fun getLayoutResourceId(): Int = R.layout.dialog_course_speed override fun getLayoutResourceId(): Int = R.layout.dialog_course_speed
override fun getGravity(): Int = Gravity.BOTTOM override fun setGravity(): Int = Gravity.BOTTOM
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
context?.let { context?.let {
......
...@@ -20,11 +20,11 @@ public class MemberFragment extends DynamicFragment { ...@@ -20,11 +20,11 @@ public class MemberFragment extends DynamicFragment {
private View view; private View view;
private Context context; private Context context;
private TextView member_age_tv,member_emotional_state_tv,member_job_tv,member_address_tv,member_introduction_tv; private TextView member_age_tv,member_emotional_state_tv,member_job_tv,member_address_tv,member_introduction_tv,member_ip_tv;
String age,emotional_state,job,address,introduction; String age,emotional_state,job,address,introduction,ipProvince;
public static MemberFragment newInstance(String age, String emotional_state, String job, String address, String introduction){ public static MemberFragment newInstance(String age, String emotional_state, String job, String address, String introduction, String ipProvince){
MemberFragment memberFragment=new MemberFragment(); MemberFragment memberFragment=new MemberFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString("age", age); args.putString("age", age);
...@@ -32,6 +32,7 @@ public class MemberFragment extends DynamicFragment { ...@@ -32,6 +32,7 @@ public class MemberFragment extends DynamicFragment {
args.putString("job", job); args.putString("job", job);
args.putString("address", address); args.putString("address", address);
args.putString("introduction", introduction); args.putString("introduction", introduction);
args.putString("ipProvince", ipProvince);
memberFragment.setArguments(args); memberFragment.setArguments(args);
return memberFragment; return memberFragment;
} }
...@@ -46,18 +47,21 @@ public class MemberFragment extends DynamicFragment { ...@@ -46,18 +47,21 @@ public class MemberFragment extends DynamicFragment {
member_job_tv=(TextView)view.findViewById(R.id.member_job_tv); member_job_tv=(TextView)view.findViewById(R.id.member_job_tv);
member_address_tv=(TextView)view.findViewById(R.id.member_address_tv); member_address_tv=(TextView)view.findViewById(R.id.member_address_tv);
member_introduction_tv=(TextView)view.findViewById(R.id.member_introduction_tv); member_introduction_tv=(TextView)view.findViewById(R.id.member_introduction_tv);
member_ip_tv = view.findViewById(R.id.member_ip_tv);
age=getArguments().getString("age"); age=getArguments().getString("age");
emotional_state=getArguments().getString("emotional_state"); emotional_state=getArguments().getString("emotional_state");
job=getArguments().getString("job"); job=getArguments().getString("job");
address=getArguments().getString("address"); address=getArguments().getString("address");
introduction=getArguments().getString("introduction"); introduction=getArguments().getString("introduction");
ipProvince=getArguments().getString("ipProvince");
member_age_tv.setText(age); member_age_tv.setText(age);
member_emotional_state_tv.setText(emotional_state); member_emotional_state_tv.setText(emotional_state);
member_job_tv.setText(job); member_job_tv.setText(job);
member_address_tv.setText(address); member_address_tv.setText(address);
member_introduction_tv.setText(introduction); member_introduction_tv.setText(introduction);
member_ip_tv.setText(ipProvince);
return view; return view;
} }
} }
...@@ -24,7 +24,7 @@ import androidx.appcompat.app.AlertDialog; ...@@ -24,7 +24,7 @@ import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.alibaba.android.arouter.launcher.ARouter;
import com.google.gson.internal.LinkedTreeMap; import com.google.gson.internal.LinkedTreeMap;
import com.ydl.ydl_image.module.GlideApp; import com.ydl.ydl_image.module.GlideApp;
import com.ydl.ydlcommon.base.BaseActivity; import com.ydl.ydlcommon.base.BaseActivity;
...@@ -83,7 +83,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -83,7 +83,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
List<String> reportReasons;//举报内容列表 List<String> reportReasons;//举报内容列表
private FragmentManager fragmentManager; private FragmentManager fragmentManager;
String age, emotional_state, job, address, introduction; String age, emotional_state, job, address, introduction, ipProvince;
String focus_state;//关注状态 String focus_state;//关注状态
boolean zan_state; boolean zan_state;
...@@ -239,6 +239,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -239,6 +239,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
job = person.profession; job = person.profession;
address = person.address; address = person.address;
introduction = person.description; introduction = person.description;
ipProvince = person.ipProvince;
String bg = person.bg; String bg = person.bg;
GlideApp.with(MembersActivity.this) GlideApp.with(MembersActivity.this)
.load(head) .load(head)
...@@ -477,12 +478,13 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -477,12 +478,13 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
private void RightSet() { private void RightSet() {
final List<String> dialog_datas = new ArrayList<String>(); final List<String> dialog_datas = new ArrayList<String>();
if (shielding == false) { if (!shielding) {
dialog_datas.add("屏蔽ta"); dialog_datas.add("屏蔽ta");
} else { } else {
dialog_datas.add("解除屏蔽"); dialog_datas.add("解除屏蔽");
} }
dialog_datas.add("举报"); dialog_datas.add("举报");
dialog_datas.add("投诉与反馈");
int itemTextColor = getResources().getColor(R.color.dynamic_black); int itemTextColor = getResources().getColor(R.color.dynamic_black);
ListDialog.Builder builder1 = new ListDialog.Builder(MembersActivity.this, dialog_datas, itemTextColor); ListDialog.Builder builder1 = new ListDialog.Builder(MembersActivity.this, dialog_datas, itemTextColor);
builder1.SetLastStr("取消"); builder1.SetLastStr("取消");
...@@ -495,10 +497,9 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -495,10 +497,9 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
builder1.SetOnItemClickLister(new ListDialog.Builder.OnItemClickLister() { builder1.SetOnItemClickLister(new ListDialog.Builder.OnItemClickLister() {
@Override @Override
public void onItemClick(Dialog dialog, View view, int position) { public void onItemClick(Dialog dialog, View view, int position) {
if (dialog_datas.size() == 2) {//不含取消关注
switch (position) { switch (position) {
case 0: case 0:
if (shielding == false) { if (!shielding) {
shieldHint(); shieldHint();
} else { } else {
RemoveShielding(); RemoveShielding();
...@@ -507,7 +508,9 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -507,7 +508,9 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
case 1: case 1:
report(); report();
break; break;
} case 2:
ARouter.getInstance().build("/mine/FeedBackActivity").navigation();
break;
} }
dialog.dismiss(); dialog.dismiss();
} }
...@@ -728,7 +731,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene ...@@ -728,7 +731,7 @@ public class MembersActivity extends BaseActivity implements View.OnClickListene
members_information_tv.setTextColor(getResources().getColor(R.color.platform_main_theme)); members_information_tv.setTextColor(getResources().getColor(R.color.platform_main_theme));
members_information_hint_tv.setBackgroundColor(getResources().getColor(R.color.platform_main_theme)); members_information_hint_tv.setBackgroundColor(getResources().getColor(R.color.platform_main_theme));
if (memberfragment == null) { if (memberfragment == null) {
memberfragment = MemberFragment.newInstance(age, emotional_state, job, address, introduction); memberfragment = MemberFragment.newInstance(age, emotional_state, job, address, introduction, ipProvince);
transaction.add(R.id.members_content_frm, memberfragment); transaction.add(R.id.members_content_frm, memberfragment);
} else { } else {
transaction.show(memberfragment); transaction.show(memberfragment);
......
...@@ -35,6 +35,7 @@ public class CommentBean { ...@@ -35,6 +35,7 @@ public class CommentBean {
private ShareData share_data; private ShareData share_data;
private int isAvailable; //是否空闲 0-否 1-是 private int isAvailable; //是否空闲 0-否 1-是
private int isOpenListen; //是否开通倾诉 0-否 1-是 private int isOpenListen; //是否开通倾诉 0-否 1-是
private String ipProvince;
private String listenLinkUrl; //统一路由url private String listenLinkUrl; //统一路由url
...@@ -52,6 +53,14 @@ public class CommentBean { ...@@ -52,6 +53,14 @@ public class CommentBean {
return isOpenListen; return isOpenListen;
} }
public String getIpProvince() {
return ipProvince;
}
public void setIpProvince(String ipProvince) {
this.ipProvince = ipProvince;
}
public ShareData getShare_data() { public ShareData getShare_data() {
return share_data; return share_data;
} }
......
...@@ -24,5 +24,7 @@ public class MemberInfoBean { ...@@ -24,5 +24,7 @@ public class MemberInfoBean {
public String description; public String description;
public String address; public String address;
public String bg; public String bg;
public String ipProvince;
} }
} }
...@@ -76,6 +76,7 @@ public class TrendsDetailInfoBean { ...@@ -76,6 +76,7 @@ public class TrendsDetailInfoBean {
public String uid; public String uid;
public String multitextType;//动态类型 public String multitextType;//动态类型
public ExtAd ext; public ExtAd ext;
public String ipProvince;
} }
//图片 //图片
......
...@@ -948,6 +948,7 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr ...@@ -948,6 +948,7 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr
holder.setHeadImageWithUrl(R.id.item_recommend_trend_user_head_iv, data.getHeader()); //头像 holder.setHeadImageWithUrl(R.id.item_recommend_trend_user_head_iv, data.getHeader()); //头像
holder.setText(R.id.text_userName, data.getName()); //用户名 holder.setText(R.id.text_userName, data.getName()); //用户名
holder.setText(R.id.text_time, data.getTime_str()); //发布时间 holder.setText(R.id.text_time, data.getTime_str()); //发布时间
if (!TextUtils.isEmpty(data.getIpProvince())) holder.setText(R.id.tv_ip, "IP属地: " + data.getIpProvince()); // IP属地
holder.setImageResource(R.id.img_comment_sex, data.getGender() == 1 ? R.drawable.dynamic_male : R.drawable.dynamic_female); holder.setImageResource(R.id.img_comment_sex, data.getGender() == 1 ? R.drawable.dynamic_male : R.drawable.dynamic_female);
holder.setImageResource(R.id.img_comment_zan, data.getIs_zan() == 1 ? R.drawable.dynamic_reply_zan_sel : R.drawable.dynamic_reply_zan); holder.setImageResource(R.id.img_comment_zan, data.getIs_zan() == 1 ? R.drawable.dynamic_reply_zan_sel : R.drawable.dynamic_reply_zan);
showCommentItemContent(holder, data); showCommentItemContent(holder, data);
...@@ -1406,6 +1407,7 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr ...@@ -1406,6 +1407,7 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr
return commentCount > commentListAdapter.getDatas().size(); return commentCount > commentListAdapter.getDatas().size();
} }
@SuppressLint("SetTextI18n")
private void fillContent() { private void fillContent() {
linComment.setVisibility(VISIBLE); linComment.setVisibility(VISIBLE);
linContent.setVisibility(View.VISIBLE); linContent.setVisibility(View.VISIBLE);
...@@ -1420,8 +1422,8 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr ...@@ -1420,8 +1422,8 @@ public class TrendsDetailActivity extends BaseMvpActivity<ITrendsDetailView, ITr
tvContent.setVisibility(View.GONE); tvContent.setVisibility(View.GONE);
} }
tvUserName.setText(mTrendBody.name); tvUserName.setText(mTrendBody.name);
tvTime.setText(mTrendBody.timeStr + "-"); //发布时间 tvTime.setText(mTrendBody.timeStr); //发布时间
tvFrom.setText(mTrendBody.from); //来源 if (!TextUtils.isEmpty(mTrendBody.ipProvince)) tvFrom.setText("IP属地: " + mTrendBody.ipProvince); // IP属地
if (TextUtils.isEmpty(mTrendBody.title)) { if (TextUtils.isEmpty(mTrendBody.title)) {
tvTrendInfoTitle.setVisibility(GONE); tvTrendInfoTitle.setVisibility(GONE);
......
...@@ -335,6 +335,7 @@ public class TrendsHomeFragment extends BaseFragment implements ITrendHomeView, ...@@ -335,6 +335,7 @@ public class TrendsHomeFragment extends BaseFragment implements ITrendHomeView,
intent.putExtra("bundle", bundle); intent.putExtra("bundle", bundle);
startActivity(intent); startActivity(intent);
// PublishTrendActivityTrends.Companion.start(requireContext(),"44","今日打卡"); // PublishTrendActivityTrends.Companion.start(requireContext(),"44","今日打卡");
trendsAndQuestionDialog.dismiss();
} }
@Override @Override
...@@ -349,6 +350,7 @@ public class TrendsHomeFragment extends BaseFragment implements ITrendHomeView, ...@@ -349,6 +350,7 @@ public class TrendsHomeFragment extends BaseFragment implements ITrendHomeView,
bundle.putInt("dynamic_question", 2); bundle.putInt("dynamic_question", 2);
intent.putExtra("bundle", bundle); intent.putExtra("bundle", bundle);
startActivity(intent); startActivity(intent);
trendsAndQuestionDialog.dismiss();
} }
}); });
trendsAndQuestionDialog.show(); trendsAndQuestionDialog.show();
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
tools:visibility="visible"
android:visibility="gone"> android:visibility="gone">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
...@@ -148,7 +149,6 @@ ...@@ -148,7 +149,6 @@
</RelativeLayout> </RelativeLayout>
<TextView <TextView
android:id="@+id/text_time" android:id="@+id/text_time"
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -166,11 +166,12 @@ ...@@ -166,11 +166,12 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/text_userName_rel" android:layout_below="@+id/text_userName_rel"
android:layout_marginStart="10dp"
android:layout_marginTop="7dp" android:layout_marginTop="7dp"
android:layout_toRightOf="@id/text_time" android:layout_toRightOf="@id/text_time"
android:textColor="@color/dynamic_text_trend_defult" android:textColor="@color/dynamic_text_trend_defult"
android:textSize="12sp" android:textSize="12sp"
tools:text=" - 来自安卓客户端" /> tools:text="IP属地: XX" />
<TextView <TextView
android:id="@+id/text_guanzhu" android:id="@+id/text_guanzhu"
...@@ -498,6 +499,7 @@ ...@@ -498,6 +499,7 @@
<com.ydl.ydlcommon.ui.LogoLoadingView <com.ydl.ydlcommon.ui.LogoLoadingView
android:id="@+id/v_loading" android:id="@+id/v_loading"
tools:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>
......
...@@ -114,4 +114,25 @@ ...@@ -114,4 +114,25 @@
android:text="" android:text=""
android:textSize="18sp"/> android:textSize="18sp"/>
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/dynamic_black"
android:text="IP属地"
android:textSize="18sp"
android:layout_marginRight="15dp"/>
<TextView
android:id="@+id/member_ip_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/dynamic_black"
android:textSize="18sp"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
...@@ -112,6 +112,17 @@ ...@@ -112,6 +112,17 @@
tools:text="23分钟前" /> tools:text="23分钟前" />
<TextView <TextView
android:id="@+id/tv_ip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_9d9ea7"
android:layout_toEndOf="@id/text_time"
android:layout_marginStart="10dp"
android:textSize="12sp"
android:layout_alignBaseline="@id/text_time"
tools:text="IP属地: XX"/>
<TextView
android:id="@+id/text_chat" android:id="@+id/text_chat"
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="30dp" android:layout_height="30dp"
......
...@@ -23,7 +23,9 @@ import com.ydl.ydl_image.module.GlideApp ...@@ -23,7 +23,9 @@ import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydl_router.manager.YDLRouterManager import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydlcommon.base.BaseMvpFragment import com.ydl.ydlcommon.base.BaseMvpFragment
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.* import com.ydl.ydlcommon.utils.SharedPreferencesEditor
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.Utils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.yidianling.consultant.OnBottomWordListener import com.yidianling.consultant.OnBottomWordListener
import com.yidianling.consultant.api.IConsultantService import com.yidianling.consultant.api.IConsultantService
...@@ -698,9 +700,13 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm ...@@ -698,9 +700,13 @@ open class YdlHomeFragment : BaseMvpFragment<IHomeContract.View, HomePresenterIm
} }
textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD) textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
} }
val minus = list?.size ?: -1
if (minus != -1 && tab.position < minus) {
list?.get(tab.position)?.let { homeEvent?.getConfideData(it, tab.position) } list?.get(tab.position)?.let { homeEvent?.getConfideData(it, tab.position) }
} }
} }
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
......
...@@ -9,15 +9,18 @@ import android.widget.FrameLayout ...@@ -9,15 +9,18 @@ import android.widget.FrameLayout
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.manager.YDLImageCacheManager import com.ydl.ydl_image.manager.YDLImageCacheManager
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.modular.findRouteService
import com.ydl.ydlcommon.utils.StringUtils import com.ydl.ydlcommon.utils.StringUtils
import com.ydl.ydlcommon.utils.URLUtils import com.ydl.ydlcommon.utils.URLUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.RxImageTool
import com.yidianling.consultant.api.IConsultantService import com.yidianling.consultant.api.IConsultantService
import com.yidianling.home.R import com.yidianling.home.R
import com.yidianling.home.constants.HomeBIConstants import com.yidianling.home.constants.HomeBIConstants
import com.yidianling.home.event.IHomeBaseEvent import com.yidianling.home.event.IHomeBaseEvent
import com.yidianling.home.model.bean.HomeConsultBean import com.yidianling.home.model.bean.HomeConsultBean
import com.yidianling.user.api.service.IUserService
import kotlinx.android.synthetic.ydl.home_consult_item_view.view.* import kotlinx.android.synthetic.ydl.home_consult_item_view.view.*
/** /**
...@@ -72,7 +75,6 @@ class HomeConsultItemView(private var mContext: Context, private var homeEvent: ...@@ -72,7 +75,6 @@ class HomeConsultItemView(private var mContext: Context, private var homeEvent:
)*/ )*/
//补充点击事件埋点 //补充点击事件埋点
ActionCountUtils.count(HomeBIConstants.YDL_USER_EXPERT_INTRODUCTION_CLICK, bean.uid.toString()) ActionCountUtils.count(HomeBIConstants.YDL_USER_EXPERT_INTRODUCTION_CLICK, bean.uid.toString())
val url = URLUtils.appendParmas(bean.linkUrl,"cateId",cateId)
ModularServiceManager.provide(IConsultantService::class.java).dueToTypeJumpAutoOrGuide( ModularServiceManager.provide(IConsultantService::class.java).dueToTypeJumpAutoOrGuide(
mContext as Activity, mContext as Activity,
11, 11,
...@@ -134,6 +136,18 @@ class HomeConsultItemView(private var mContext: Context, private var homeEvent: ...@@ -134,6 +136,18 @@ class HomeConsultItemView(private var mContext: Context, private var homeEvent:
*/ */
private fun setConfideButton(bodyBean: HomeConsultBean.ListBean) { private fun setConfideButton(bodyBean: HomeConsultBean.ListBean) {
tv_consult_chat.setOnClickListener { tv_consult_chat.setOnClickListener {
val userService = findRouteService(IUserService::class.java)
if (!userService.isBindPhone() && context is Activity) {
CommonDialog(context)
.setMessage("为了及时接收消息通知,请立即绑定手机")
.setLeftOnclick("忍痛放弃") {}
.setRightClick("果断绑定") {
userService.wxBindToInputhonePage(context as Activity) // 跳转绑定手机号页面
}
.setCancelAble(false)
.show()
return@setOnClickListener
}
ModularServiceManager.provide(IConsultantService::class.java).dueToTypeJumpAutoOrGuide( ModularServiceManager.provide(IConsultantService::class.java).dueToTypeJumpAutoOrGuide(
mContext as Activity, mContext as Activity,
11, 11,
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
android:id="@+id/tv_consult_chat" android:id="@+id/tv_consult_chat"
android:layout_width="44dp" android:layout_width="44dp"
android:layout_height="44dp" android:layout_height="44dp"
android:layout_alignParentEnd="true"
android:layout_alignTop="@+id/img_consult_head" android:layout_alignTop="@+id/img_consult_head"
android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/platform_dp_13" android:layout_marginTop="@dimen/platform_dp_13"
android:layout_marginEnd="@dimen/platform_dp_15" android:layout_marginEnd="@dimen/platform_dp_15"
android:background="@drawable/home_consult_chat_bg" android:background="@drawable/home_consult_chat_bg"
......
...@@ -118,6 +118,7 @@ ...@@ -118,6 +118,7 @@
<activity <activity
android:name="com.yidianling.avchatkit.activity.AVChatActivity" android:name="com.yidianling.avchatkit.activity.AVChatActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:launchMode="singleTask"
android:theme="@style/FullScreenTheme" android:theme="@style/FullScreenTheme"
android:windowSoftInputMode="stateAlwaysHidden" /> android:windowSoftInputMode="stateAlwaysHidden" />
......
package com.yidianling.avchatkit; package com.yidianling.avchatkit;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.netease.nimlib.app.AppForegroundWatcherCompat;
import com.netease.nimlib.sdk.avchat.model.AVChatData; import com.netease.nimlib.sdk.avchat.model.AVChatData;
import com.yidianling.avchatkit.activity.AVChatActivity; import com.yidianling.avchatkit.activity.AVChatActivity;
import com.yidianling.avchatkit.common.Handlers; import com.yidianling.avchatkit.common.Handlers;
...@@ -21,6 +23,18 @@ public class AVChatProfile { ...@@ -21,6 +23,18 @@ public class AVChatProfile {
private boolean isAVChatting = false; // 是否正在音视频通话 private boolean isAVChatting = false; // 是否正在音视频通话
private NotificationManager notificationManager; private NotificationManager notificationManager;
public static AVChatProfile getInstance() {
return InstanceHolder.instance;
}
public boolean isAVChatting() {
return isAVChatting;
}
public void setAVChatting(boolean chating) {
isAVChatting = chating;
}
@Nullable @Nullable
private AVChatData backgroundIncomingCallData; private AVChatData backgroundIncomingCallData;
@Nullable @Nullable
...@@ -33,6 +47,11 @@ public class AVChatProfile { ...@@ -33,6 +47,11 @@ public class AVChatProfile {
return TextUtils.equals(backgroundIncomingCallData.getAccount(), account); return TextUtils.equals(backgroundIncomingCallData.getAccount(), account);
} }
private static class InstanceHolder {
public final static AVChatProfile instance = new AVChatProfile();
}
public void removeBackgroundIncomingCall(boolean activeMissCall) { public void removeBackgroundIncomingCall(boolean activeMissCall) {
backgroundIncomingCallData = null; backgroundIncomingCallData = null;
...@@ -50,6 +69,15 @@ public class AVChatProfile { ...@@ -50,6 +69,15 @@ public class AVChatProfile {
@Override @Override
public void run() { public void run() {
// 启动,如果 task正在启动,则稍等一下 // 启动,如果 task正在启动,则稍等一下
if (Build.VERSION.SDK_INT >= 29 && AppForegroundWatcherCompat.isBackground()) {
backgroundIncomingCallData = data;
backgroundIncomingCallNotification = new AVChatNotification(AVChatKit.getContext());
backgroundIncomingCallNotification.init(data.getAccount(), displayName);
backgroundIncomingCallNotification.activeIncomingCallNotification(true, backgroundIncomingCallData);
} else {
// 启动,如果 task正在启动,则稍等一下
if (AVChatKit.isMainTaskLaunching()) { if (AVChatKit.isMainTaskLaunching()) {
launchIncomingCall(data, displayName, source); launchIncomingCall(data, displayName, source);
} else { } else {
...@@ -57,25 +85,13 @@ public class AVChatProfile { ...@@ -57,25 +85,13 @@ public class AVChatProfile {
AVChatActivity.incomingCall(AVChatKit.getContext(), data, displayName, source); AVChatActivity.incomingCall(AVChatKit.getContext(), data, displayName, source);
} }
} }
}
}; };
Handlers.sharedHandler(AVChatKit.getContext()).postDelayed(runnable, 200); Handlers.sharedHandler(AVChatKit.getContext()).postDelayed(runnable, 200);
} }
public static AVChatProfile getInstance() {
return InstanceHolder.instance;
}
public boolean isAVChatting() {
return isAVChatting;
}
public void setAVChatting(boolean chating) {
isAVChatting = chating;
}
private static class InstanceHolder {
public final static AVChatProfile instance = new AVChatProfile();
}
public void launchActivity(final AVChatData data, final String displayName, final int source) { public void launchActivity(final AVChatData data, final String displayName, final int source) {
Runnable runnable = new Runnable() { Runnable runnable = new Runnable() {
......
package com.yidianling.avchatkit.activity; package com.yidianling.avchatkit.activity;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock; import android.os.SystemClock;
import android.view.LayoutInflater; import android.view.LayoutInflater;
...@@ -118,13 +120,7 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ ...@@ -118,13 +120,7 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
// 接听来电 // 接听来电
public static void incomingCall(Context context, AVChatData config, String displayName, int source) { public static void incomingCall(Context context, AVChatData config, String displayName, int source) {
needFinish = false; needFinish = false;
Intent intent = new Intent(); Intent intent = incomingCallIntent(context, config, displayName, source);
intent.setClass(context, AVChatActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(KEY_CALL_CONFIG, config);
intent.putExtra(KEY_DISPLAY_NAME, displayName);
intent.putExtra(KEY_IN_CALLING, true);
intent.putExtra(KEY_SOURCE, source);
context.startActivity(intent); context.startActivity(intent);
} }
@NonNull @NonNull
...@@ -143,6 +139,10 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ ...@@ -143,6 +139,10 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getIntent().hasExtra(KEY_NEED_FINISH)) {
needFinish = getIntent().getBooleanExtra(KEY_NEED_FINISH, false);
}
// 若来电或去电未接通时,点击home。另外一方挂断通话。从最近任务列表恢复,则finish // 若来电或去电未接通时,点击home。另外一方挂断通话。从最近任务列表恢复,则finish
if (needFinish) { if (needFinish) {
finish(); finish();
...@@ -184,7 +184,6 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ ...@@ -184,7 +184,6 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
hasOnPause = true; hasOnPause = true;
} }
@Override @Override
...@@ -662,6 +661,7 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ ...@@ -662,6 +661,7 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
avChatData != null ? avChatData.getAccount() : receiverId); avChatData != null ? avChatData.getAccount() : receiverId);
} }
@SuppressLint("CheckResult")
@Override @Override
public void onAudioToVideo() { public void onAudioToVideo() {
new RxPermissions(this) new RxPermissions(this)
...@@ -729,8 +729,12 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ ...@@ -729,8 +729,12 @@ public class AVChatActivity extends AVChatBaseUI implements AVChatVideoUI.TouchZ
@Override @Override
public void finish() { public void finish() {
isUserFinish = true; isUserFinish = true;
if (mIsInComingCall && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
super.finishAndRemoveTask();
} else {
super.finish(); super.finish();
} }
}
@Override @Override
......
package com.yidianling.avchatkit.ui; package com.yidianling.avchatkit.ui;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
...@@ -10,13 +9,13 @@ import android.widget.Button; ...@@ -10,13 +9,13 @@ import android.widget.Button;
import android.widget.Chronometer; import android.widget.Chronometer;
import android.widget.TextView; import android.widget.TextView;
import com.blankj.utilcode.constant.PermissionConstants;
import com.blankj.utilcode.util.PermissionUtils;
import com.netease.nimlib.sdk.avchat.AVChatCallback; import com.netease.nimlib.sdk.avchat.AVChatCallback;
import com.netease.nimlib.sdk.avchat.AVChatManager; import com.netease.nimlib.sdk.avchat.AVChatManager;
import com.netease.nimlib.sdk.avchat.constant.AVChatControlCommand; import com.netease.nimlib.sdk.avchat.constant.AVChatControlCommand;
import com.netease.nimlib.sdk.avchat.constant.AVChatType; import com.netease.nimlib.sdk.avchat.constant.AVChatType;
import com.netease.nimlib.sdk.avchat.model.AVChatData; import com.netease.nimlib.sdk.avchat.model.AVChatData;
import com.tbruyelle.rxpermissions2.Permission;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.ydl.ydlcommon.utils.DeviceTool; import com.ydl.ydlcommon.utils.DeviceTool;
import com.yidianling.avchatkit.AVChatKit; import com.yidianling.avchatkit.AVChatKit;
import com.yidianling.avchatkit.activity.AVChatActivity; import com.yidianling.avchatkit.activity.AVChatActivity;
...@@ -34,7 +33,7 @@ import com.yidianling.avchatkit.module.AVSwitchListener; ...@@ -34,7 +33,7 @@ import com.yidianling.avchatkit.module.AVSwitchListener;
import com.yidianling.common.tools.ToastUtil; import com.yidianling.common.tools.ToastUtil;
import com.yidianling.im.R; import com.yidianling.im.R;
import io.reactivex.functions.Consumer; import java.util.List;
/** /**
* 音频界面显示变化以及点击事件 * 音频界面显示变化以及点击事件
...@@ -383,22 +382,21 @@ public class AVChatAudioUI implements View.OnClickListener, ToggleListener { ...@@ -383,22 +382,21 @@ public class AVChatAudioUI implements View.OnClickListener, ToggleListener {
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
private void requestPermission() { private void requestPermission() {
new RxPermissions((Activity) this.context) PermissionUtils
.requestEach(Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA) .permission(PermissionConstants.MICROPHONE, PermissionConstants.CAMERA)
.subscribe(new Consumer<Permission>() { .callback(new PermissionUtils.FullCallback() {
@Override @Override
public void accept(Permission permission) throws Exception { public void onGranted(List<String> permissionsGranted) {
if (permission.granted) {
doReceiveCall(); doReceiveCall();
} else if (permission.shouldShowRequestPermissionRationale){ }
requestPermission();
}else { @Override
ToastUtil.toastLong(context,"请开启相机和麦克风权限后重试"); public void onDenied(List<String> permissionsDeniedForever, List<String> permissionsDenied) {
ToastUtil.toastLong(context, "请开启相机和麦克风权限后重试");
DeviceTool.openPersisonSetting((Activity) AVChatAudioUI.this.context); DeviceTool.openPersisonSetting((Activity) AVChatAudioUI.this.context);
((Activity) AVChatAudioUI.this.context).finish(); ((Activity) AVChatAudioUI.this.context).finish();
} }
} }).request();
} );
} }
// 接听来电 // 接听来电
......
...@@ -15,7 +15,6 @@ import com.ydl.ydlcommon.data.http.RxUtils ...@@ -15,7 +15,6 @@ import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.utils.log.LogHelper import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.ListNoCancelDialog import com.ydl.ydlcommon.view.ListNoCancelDialog
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.api.param.RmHistoryParam import com.yidianling.im.api.param.RmHistoryParam
import com.yidianling.im.api.param.RmTalkParam import com.yidianling.im.api.param.RmTalkParam
import com.yidianling.im.api.param.TopMessageParam import com.yidianling.im.api.param.TopMessageParam
...@@ -24,15 +23,11 @@ import com.yidianling.im.event.UpdateTabUnreadNumEvent ...@@ -24,15 +23,11 @@ import com.yidianling.im.event.UpdateTabUnreadNumEvent
import com.yidianling.im.helper.IMChatUtil import com.yidianling.im.helper.IMChatUtil
import com.yidianling.im.helper.MsgReceiveHelper import com.yidianling.im.helper.MsgReceiveHelper
import com.yidianling.im.http.ImHttpImpl import com.yidianling.im.http.ImHttpImpl
import com.yidianling.im.router.ImIn
import com.yidianling.im.session.SessionHelper import com.yidianling.im.session.SessionHelper
import com.yidianling.im.ui.page.fragment.bean.ChatItemBean import com.yidianling.im.ui.page.fragment.bean.ChatItemBean
import com.yidianling.im.ui.page.fragment.bean.ChatModelBean
import com.yidianling.im.ui.page.fragment.view.ChatItemView import com.yidianling.im.ui.page.fragment.view.ChatItemView
import com.yidianling.im.ui.page.fragment.view.ChatTimeItemView import com.yidianling.im.ui.page.fragment.view.ChatTimeItemView
import com.yidianling.im.ui.param.ChatParam
import de.greenrobot.event.EventBus import de.greenrobot.event.EventBus
import kotlinx.android.synthetic.main.im_chat_fragment_layout.*
/** /**
* 互动列表适配器 * 互动列表适配器
...@@ -94,7 +89,7 @@ class ChatAdapter(var context: Context, private var mList: ArrayList<ChatItemBea ...@@ -94,7 +89,7 @@ class ChatAdapter(var context: Context, private var mList: ArrayList<ChatItemBea
name.add("标记为已读") name.add("标记为已读")
} }
val builder = ListNoCancelDialog.Builder(context, name, 0) val builder = ListNoCancelDialog.Builder(context, name, 0)
builder.SetOnItemClickLister(object : ListNoCancelDialog.Builder.OnItemClickLister { builder.setOnItemClickLister(object : ListNoCancelDialog.Builder.OnItemClickLister {
override fun onItemClick(dialog: Dialog, view: View, position1: Int) { override fun onItemClick(dialog: Dialog, view: View, position1: Int) {
val tag = name[position1] val tag = name[position1]
when (tag) { when (tag) {
......
package com.ydl.js package com.ydl.js
import android.app.Activity
import android.content.Context
import android.webkit.JavascriptInterface import android.webkit.JavascriptInterface
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.google.gson.Gson import com.google.gson.Gson
...@@ -18,6 +20,7 @@ import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils ...@@ -18,6 +20,7 @@ import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.log.AliYunLogConfig import com.ydl.ydlcommon.utils.log.AliYunLogConfig
import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper import com.ydl.ydlcommon.utils.log.AliYunRichLogsHelper
import com.ydl.ydlcommon.utils.log.LogHelper import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.view.dialog.CommonDialog
import com.yidianling.common.tools.LogUtil import com.yidianling.common.tools.LogUtil
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
...@@ -56,14 +59,15 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven ...@@ -56,14 +59,15 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven
wvEnventPro?.jumpLogin(jsData.cmd?.params) wvEnventPro?.jumpLogin(jsData.cmd?.params)
return return
} }
val userService = findRouteService(IUserService::class.java)
if (jsData.url.equals("http")) { if (jsData.url.equals("http")) {
if (jsData.cmd?.params?.toUid != 0) { if (jsData.cmd?.params?.toUid != 0) {
wvEnventPro?.chat( wvEnventPro?.chat(
findRouteService(IUserService::class.java).getUserInfo()?.uid?.toInt() ?: 0, userService.getUserInfo()?.uid?.toInt() ?: 0,
jsData.cmd?.params?.toUid ?: 0, jsData.cmd?.params?.toUid ?: 0,
0, 0,
findRouteService(IUserService::class.java).getUserInfo()?.accessToken, userService.getUserInfo()?.accessToken,
jsData.cmd?.params?.isFromQingShu ?: 0, jsData.cmd?.params?.isFromQingShu ?: 0,
jsData.cmd?.params?.closeReplaceChat ?: false jsData.cmd?.params?.closeReplaceChat ?: false
) )
...@@ -72,11 +76,11 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven ...@@ -72,11 +76,11 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven
} }
} else if (jsData.url.equals("ydl_app")) { } else if (jsData.url.equals("ydl_app")) {
wvEnventPro?.ydlNative(jsData.cmd) wvEnventPro?.ydlNative(jsData.cmd)
jumpAction(jsData) jumpAction(jsData, userService)
} }
} }
fun jumpAction(jsData: H5JsBean) { private fun jumpAction(jsData: H5JsBean, userService: IUserService) {
LogUtil.d("jumpAction") LogUtil.d("jumpAction")
when (jsData.cmd!!.action_name) { when (jsData.cmd!!.action_name) {
"fm" -> if (jsData.cmd!!.params!!.id > 0) { "fm" -> if (jsData.cmd!!.params!!.id > 0) {
...@@ -126,7 +130,7 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven ...@@ -126,7 +130,7 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven
"chat" -> "chat" ->
//私聊 //私聊
if (wvEnventPro != null) { if (wvEnventPro != null) {
wvEnventPro?.chat(findRouteService(IUserService::class.java).getUserResponse()?.uid?.toInt() ?: 0, wvEnventPro.chat(userService.getUserResponse()?.uid?.toInt() ?: 0,
jsData.cmd!!.params!!.toUid, 0, jsData.cmd!!.params!!.toUid, 0,
JsModularService.getIUserService().getUserInfo()?.accessToken, JsModularService.getIUserService().getUserInfo()?.accessToken,
jsData.cmd!!.params!!.isFromQingShu, jsData.cmd!!.params!!.isFromQingShu,
...@@ -135,13 +139,14 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven ...@@ -135,13 +139,14 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven
// 埋点 // 埋点
ActionCountUtils.count("ydl_user_main_page|private_chat_click") ActionCountUtils.count("ydl_user_main_page|private_chat_click")
} }
"chat_send_message" -> "chat_send_message" -> {
//跳转私聊:并发送消息 //跳转私聊:并发送消息
if (wvEnventPro != null) { wvEnventPro?.chatSendMessage(
wvEnventPro!!.chatSendMessage(findRouteService(IUserService::class.java).getUserResponse()?.uid?.toInt() ?: 0, userService.getUserResponse()?.uid?.toInt() ?: 0,
jsData.cmd!!.params!!.toUid, jsData.cmd!!.params!!.toUid,
0, JsModularService.getIUserService().getUserInfo()?.accessToken, 0, JsModularService.getIUserService().getUserInfo()?.accessToken,
jsData.cmd!!.params!!.isFromQingShu) jsData.cmd!!.params!!.isFromQingShu
)
} }
"chat_team" -> "chat_team" ->
//群聊 //群聊
...@@ -169,7 +174,7 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven ...@@ -169,7 +174,7 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven
"set_time_warn" -> "set_time_warn" ->
//提醒专家设置时间 //提醒专家设置时间
if (wvEnventPro != null) { if (wvEnventPro != null) {
wvEnventPro!!.sendSubscriptionTimeMessage("" + jsData.cmd?.params?.toUid) wvEnventPro.sendSubscriptionTimeMessage("" + jsData.cmd?.params?.toUid)
} }
"user_home" -> if (wvEnventPro != null) { "user_home" -> if (wvEnventPro != null) {
wvEnventPro!!.openMember("" + jsData.cmd?.params?.uid) wvEnventPro!!.openMember("" + jsData.cmd?.params?.uid)
...@@ -507,4 +512,5 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven ...@@ -507,4 +512,5 @@ class NewH5_JavascriptHandler(private val webView: WebView?, private val wvEnven
} }
} }
} }
...@@ -39,6 +39,8 @@ import io.reactivex.disposables.Disposable ...@@ -39,6 +39,8 @@ import io.reactivex.disposables.Disposable
import io.reactivex.functions.Consumer import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_play_meditation.* import kotlinx.android.synthetic.main.activity_play_meditation.*
import kotlinx.android.synthetic.main.activity_play_meditation.iv_close
import kotlinx.android.synthetic.main.activity_play_meditation.tv_title
import kotlinx.android.synthetic.main.player_control_view.* import kotlinx.android.synthetic.main.player_control_view.*
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
......
...@@ -32,10 +32,6 @@ ...@@ -32,10 +32,6 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
<activity <activity
android:name=".ui.FillInfoActivity"
android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" />
<activity
android:name=".safePrivate.CheckPasswordActivity" android:name=".safePrivate.CheckPasswordActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
...@@ -126,19 +122,19 @@ ...@@ -126,19 +122,19 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
<activity <activity
android:name=".mine.PersonalDesActivity" android:name=".mine.PersonalInfoActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
<activity <activity
android:name=".mine.PersonalInfoActivity" android:name=".mine.RechargeActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
<activity <activity
android:name=".mine.RechargeActivity" android:name=".mine.ModifyInfoActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
<activity <activity
android:name=".mine.SetInfoActivity" android:name=".mine.ModifyAvatarActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" /> android:theme="@style/platform_NoTitleTheme" />
<activity <activity
......
...@@ -7,9 +7,11 @@ import com.ydl.ydlcommon.data.http.BaseResponse ...@@ -7,9 +7,11 @@ import com.ydl.ydlcommon.data.http.BaseResponse
import com.yidianling.user.api.bean.UserResponseBean import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.bean.CollectFocusItemBean import com.yidianling.user.bean.CollectFocusItemBean
import com.yidianling.user.http.LoginApiRequestUtil.Companion.LOGIN_USER_PORT import com.yidianling.user.http.LoginApiRequestUtil.Companion.LOGIN_USER_PORT
import com.yidianling.user.http.request.UserModifyAuditRespDto
import com.yidianling.user.http.response.* import com.yidianling.user.http.response.*
import com.yidianling.user.mine.bean.RedPacketId import com.yidianling.user.mine.bean.RedPacketId
import io.reactivex.Observable import io.reactivex.Observable
import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.* import retrofit2.http.*
...@@ -67,16 +69,6 @@ interface UserApi { ...@@ -67,16 +69,6 @@ interface UserApi {
@POST("user/set-info") @POST("user/set-info")
fun setUserInfo(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>> fun setUserInfo(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>
//上传头像
@Multipart
@POST("user/set-info")
fun uploadHeadImg(@PartMap params: MutableMap<String, RequestBody>): Observable<BaseResponse<Any>>
//上传头像
@Multipart
@POST("user/set-info")
fun uploadHeadImg(@Part("type") param: RequestBody): Observable<BaseResponse<Any>>
//验证账号密码 //验证账号密码
@FormUrlEncoded @FormUrlEncoded
@POST("user/chkin-pass") @POST("user/chkin-pass")
...@@ -251,4 +243,27 @@ interface UserApi { ...@@ -251,4 +243,27 @@ interface UserApi {
@POST("login/v2/is_need_strong_bind") @POST("login/v2/is_need_strong_bind")
@Headers( YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL, LOGIN_USER_PORT) @Headers( YDL_DOMAIN+ YDL_DOMAIN_LOGIN_BASE_URL, LOGIN_USER_PORT)
fun isNeedForceBindPhone(@Body map: Map<String,String>): Observable<BaseAPIResponse<Boolean>> fun isNeedForceBindPhone(@Body map: Map<String,String>): Observable<BaseAPIResponse<Boolean>>
/**
* 修改昵称、头像、简介等基本信息
*/
@POST("user/v1/baseInfo/modify")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun modifyUserBaseInfo(@Body map: Map<String,String>): Observable<BaseAPIResponse<Boolean>>
/**
* 获取用户审核信息
*/
@POST("user/v1/getUserAuditInfo")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun getUserAuditInfo(@Body map: Map<String,String>): Observable<BaseAPIResponse<UserModifyAuditRespDto>>
/**
* 上传图片
*/
@Multipart
@POST("file/upload")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun uploadFile(@Part file: MultipartBody.Part): Observable<BaseAPIResponse<String>>
} }
\ No newline at end of file
...@@ -9,15 +9,11 @@ import com.yidianling.user.api.bean.UserResponseBean ...@@ -9,15 +9,11 @@ import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.bean.CheckPhonePassBean import com.yidianling.user.bean.CheckPhonePassBean
import com.yidianling.user.bean.CollectFocusItemBean import com.yidianling.user.bean.CollectFocusItemBean
import com.yidianling.user.http.request.* import com.yidianling.user.http.request.*
import com.yidianling.user.http.response.CheckPassword import com.yidianling.user.http.response.*
import com.yidianling.user.http.response.CountryResponse
import com.yidianling.user.http.response.ExistResponse
import com.yidianling.user.http.response.SecretResponse
import com.yidianling.user.mine.bean.RedPackDataForRegister
import com.yidianling.user.mine.bean.RedPacketId import com.yidianling.user.mine.bean.RedPacketId
import com.yidianling.user.mine.bean.RedPacketIdCmd import com.yidianling.user.mine.bean.RedPacketIdCmd
import com.yidianling.user.http.response.*
import io.reactivex.Observable import io.reactivex.Observable
import java.io.File
/** /**
* author : Zhangwenchao * author : Zhangwenchao
...@@ -46,8 +42,6 @@ interface UserHttp { ...@@ -46,8 +42,6 @@ interface UserHttp {
fun setUserInfo(param: UserInfoParam): Observable<BaseResponse<Any>> fun setUserInfo(param: UserInfoParam): Observable<BaseResponse<Any>>
fun uploadHead(param: HeadParam): Observable<BaseResponse<Any>>
fun checkPhonePass(cmd: CheckPhonePassBean): Observable<BaseResponse<CheckPassword>> fun checkPhonePass(cmd: CheckPhonePassBean): Observable<BaseResponse<CheckPassword>>
fun bindQQ(param: BindQQ): Observable<BaseResponse<Any>> fun bindQQ(param: BindQQ): Observable<BaseResponse<Any>>
...@@ -84,4 +78,10 @@ interface UserHttp { ...@@ -84,4 +78,10 @@ interface UserHttp {
/**用户注销账号*/ /**用户注销账号*/
fun accountLogOff(param: UserForbidLoginParam):Observable<BaseAPIResponse<Boolean>> fun accountLogOff(param: UserForbidLoginParam):Observable<BaseAPIResponse<Boolean>>
fun modifyUserBaseInfo(param: ModifyBaseInfo): Observable<BaseAPIResponse<Boolean>>
fun getUserAuditInfo(type: BaseInfo): Observable<BaseAPIResponse<UserModifyAuditRespDto>>
fun uploadFile(file: File): Observable<BaseAPIResponse<Boolean>>
} }
\ No newline at end of file
...@@ -4,16 +4,11 @@ import android.app.Activity ...@@ -4,16 +4,11 @@ import android.app.Activity
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.internal.LinkedTreeMap import com.google.gson.internal.LinkedTreeMap
import com.umeng.socialize.bean.SHARE_MEDIA import com.umeng.socialize.bean.SHARE_MEDIA
import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.BaseCommand import com.ydl.ydlcommon.data.http.BaseCommand
import com.ydl.ydlcommon.data.http.BaseResponse import com.ydl.ydlcommon.data.http.BaseResponse
import com.ydl.ydlcommon.data.http.RxUtils import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.router.YdlCommonOut
import com.ydl.ydlnet.YDLHttpUtils import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.common.tools.RxAppTool
import com.yidianling.common.tools.RxDeviceTool
import com.yidianling.user.UserHelper
import com.yidianling.user.api.bean.UserResponseBean import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.bean.CheckPhonePassBean import com.yidianling.user.bean.CheckPhonePassBean
import com.yidianling.user.bean.CollectFocusItemBean import com.yidianling.user.bean.CollectFocusItemBean
...@@ -21,14 +16,14 @@ import com.yidianling.user.http.request.* ...@@ -21,14 +16,14 @@ import com.yidianling.user.http.request.*
import com.yidianling.user.http.response.CheckPassword import com.yidianling.user.http.response.CheckPassword
import com.yidianling.user.http.response.CountryResponse import com.yidianling.user.http.response.CountryResponse
import com.yidianling.user.http.response.ExistResponse import com.yidianling.user.http.response.ExistResponse
import com.yidianling.user.http.response.SecretResponse
import com.yidianling.user.mine.bean.RedPacketId import com.yidianling.user.mine.bean.RedPacketId
import com.yidianling.user.mine.bean.RedPacketIdCmd import com.yidianling.user.mine.bean.RedPacketIdCmd
import com.yidianling.user.rxlogin.LoginObservable import com.yidianling.user.rxlogin.LoginObservable
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.schedulers.Schedulers
import okhttp3.MediaType import okhttp3.MediaType
import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import java.io.File
/** /**
* author : Zhangwenchao * author : Zhangwenchao
...@@ -117,47 +112,38 @@ class UserHttpImpl private constructor() : UserHttp { ...@@ -117,47 +112,38 @@ class UserHttpImpl private constructor() : UserHttp {
.flatMap { getUserApi().setUserInfo(it) } .flatMap { getUserApi().setUserInfo(it) }
} }
//验证账号密码 override fun modifyUserBaseInfo(param: ModifyBaseInfo): Observable<BaseAPIResponse<Boolean>> {
override fun checkPhonePass(cmd: CheckPhonePassBean): Observable<BaseResponse<CheckPassword>> { return RxUtils.mapObservable(param)
return RxUtils.mapObservable(cmd) .flatMap { getUserApi().modifyUserBaseInfo(it) }
.flatMap { getUserApi().checkPhonePass(it) } }
override fun getUserAuditInfo(type: BaseInfo): Observable<BaseAPIResponse<UserModifyAuditRespDto>> {
return RxUtils.mapObservable(type)
.flatMap { getUserApi().getUserAuditInfo(it) }
} }
override fun uploadHead(param: HeadParam): Observable<BaseResponse<Any>> { override fun uploadFile(file: File): Observable<BaseAPIResponse<Boolean>> {
return Observable.just(param) return Observable.just(true)
.compose(RxUtils.netCheck()) .compose(RxUtils.netCheck())
.subscribeOn(Schedulers.io()) .flatMap {
.map { getUserApi().uploadFile(
val map = HashMap<String, RequestBody>() MultipartBody.Part.createFormData(
val mediaType = MediaType.parse("text/plain") "file", file.name,
map["type"] = RequestBody.create(mediaType, it.type) RequestBody.create(MediaType.parse("multipart/form-data"), file)
map["value"] = RequestBody.create(mediaType, it.value)
map["ffrom"] = RequestBody.create(mediaType, YdlCommonOut.getChannelName())
map["isFromApp"] = RequestBody.create(mediaType, "1")
map["osBuild"] = RequestBody.create(
mediaType,
"""${RxDeviceTool.getBuildBrandModel()},${RxDeviceTool.getSDKVersionName()},${
RxAppTool.getAppVersionName(
BaseApp.getApp()
) )
}"""
) )
map["ts"] = }.flatMap {
RequestBody.create(mediaType, (System.currentTimeMillis() / 1000).toString()) if (it.code == "200")
map["version"] = modifyUserBaseInfo(ModifyBaseInfo(it.data, 102))
RequestBody.create(mediaType, RxAppTool.getAppVersionName(BaseApp.getApp())) else
val userInfo = UserHelper.getUserInfo() Observable.just(BaseAPIResponse())
if (userInfo != null) {
map["uid"] = RequestBody.create(mediaType, userInfo.uid)
map["accessToken"] = RequestBody.create(mediaType, userInfo.accessToken)
}
val fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), it.file)
map.put("""head"; filename="${it.file.name}""", fileBody)
map
} }
.flatMap {
getUserApi().uploadHeadImg(it)
} }
//验证账号密码
override fun checkPhonePass(cmd: CheckPhonePassBean): Observable<BaseResponse<CheckPassword>> {
return RxUtils.mapObservable(cmd)
.flatMap { getUserApi().checkPhonePass(it) }
} }
override fun bindQQ(param: BindQQ): Observable<BaseResponse<Any>> { override fun bindQQ(param: BindQQ): Observable<BaseResponse<Any>> {
......
package com.yidianling.user.http.request
data class ModifyBaseInfo(val modifyValue: String?,
val type: Int // 101:用户昵称 102:用户头像 103:用户简介
)
data class BaseInfo(val type: Int)
\ No newline at end of file
package com.yidianling.user.http.request
import com.ydl.ydlcommon.data.http.BaseCommand
data class UserModifyAuditRespDto(
val auditReason: String?, // 审核原因
val auditStatus: Int, // 审核状态 1:审核中,2:审核失败,3:已审核 || 提交审核
val auditTime: String?, // 审核时间
val auditor: String?, // 审核人
val auditorId: String?, // 审核人id
val createTime: String?, // 申请时间
val id: Int,
val last7Day: Boolean, // 最近7天申请修改
val modifyAfter: String?, // 变更后
val modifyBefore: String?, // 变更前
val modifyField: String? // 变更字段
) : BaseCommand()
\ No newline at end of file
package com.yidianling.user.mine
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.widget.TextView
import androidx.fragment.app.DialogFragment
import com.ydl.ydlcommon.base.BaseDialogFragment
import com.yidianling.user.R
/**
* 修改头像dialog
*/
class AvaterDialog : BaseDialogFragment() {
override fun getLayoutResourceId(): Int = R.layout.dialog_album_photo
override fun setGravity(): Int = Gravity.BOTTOM
lateinit var listener: (Int, DialogFragment) -> Unit
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val tv_album = view.findViewById<TextView>(R.id.tv_album)
tv_album.setOnClickListener {
listener.invoke(0, this)
}
val tv_photo = view.findViewById<TextView>(R.id.tv_photo)
tv_photo.setOnClickListener {
listener.invoke(1, this)
}
val tv_cancel = view.findViewById<TextView>(R.id.tv_cancel)
tv_cancel.setOnClickListener {
listener.invoke(2, this)
}
}
}
\ No newline at end of file
...@@ -63,7 +63,7 @@ class ChooseAccountActivity : BaseActivity() { ...@@ -63,7 +63,7 @@ class ChooseAccountActivity : BaseActivity() {
list.add("编辑") list.add("编辑")
list.add("删除") list.add("删除")
val builder = ListNoCancelDialog.Builder(this, list, 0) val builder = ListNoCancelDialog.Builder(this, list, 0)
builder.SetOnItemClickLister(object : ListNoCancelDialog.Builder.OnItemClickLister { builder.setOnItemClickLister(object : ListNoCancelDialog.Builder.OnItemClickLister {
override fun onItemClick(dialog: Dialog?, view: View?, index: Int) { override fun onItemClick(dialog: Dialog?, view: View?, index: Int) {
val name = list[index] val name = list[index]
when (name) { when (name) {
......
...@@ -59,8 +59,8 @@ class FeedBackActivity : BaseActivity(), View.OnClickListener { ...@@ -59,8 +59,8 @@ class FeedBackActivity : BaseActivity(), View.OnClickListener {
private var isPhoneNull = true private var isPhoneNull = true
private var imgFiles: MutableList<File>? = null private var imgFiles: MutableList<File>? = null
internal var work_time = if (PlatformDataManager.getRam().getGlobalInfo() == null) "早8:30-凌晨2:00" else PlatformDataManager.getRam().getGlobalInfo()?.info?.work_time private var work_time = if (PlatformDataManager.getRam().getGlobalInfo() == null) "早8:30-凌晨2:00" else PlatformDataManager.getRam().getGlobalInfo()?.info?.work_time
internal var tel = if (PlatformDataManager.getRam().getGlobalInfo() == null) "400-765-1010" else PlatformDataManager.getRam().getGlobalInfo()?.info?.tel private var tel = if (PlatformDataManager.getRam().getGlobalInfo() == null) "400-765-1010" else PlatformDataManager.getRam().getGlobalInfo()?.info?.tel
override fun getStatusViewOptions(): StatusBarOptions { override fun getStatusViewOptions(): StatusBarOptions {
return StatusBarOptions(true, true) return StatusBarOptions(true, true)
} }
......
...@@ -29,7 +29,6 @@ import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils.Companion.count ...@@ -29,7 +29,6 @@ import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils.Companion.count
import com.ydl.ydlcommon.view.dialog.YDLShareDialog import com.ydl.ydlcommon.view.dialog.YDLShareDialog
import com.ydl.ydlcommon.view.dialog.YDLShareDialog.Companion.style4 import com.ydl.ydlcommon.view.dialog.YDLShareDialog.Companion.style4
import com.yidianling.dynamic.api.IDynamicService import com.yidianling.dynamic.api.IDynamicService
import com.yidianling.im.api.service.IImService
import com.yidianling.im.message.param.MsgListParam import com.yidianling.im.message.param.MsgListParam
import com.yidianling.user.BuildConfig import com.yidianling.user.BuildConfig
import com.yidianling.user.R import com.yidianling.user.R
...@@ -324,7 +323,7 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View. ...@@ -324,7 +323,7 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
.compose(resultJavaData()) .compose(resultJavaData())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer { response: UserResponseBean -> .subscribe({ response: UserResponseBean ->
swipe_refresh_layout.isRefreshing = false swipe_refresh_layout.isRefreshing = false
try { try {
//此处后端返回信息,只有userinfo,其它数据为空,切勿整体赋值 //此处后端返回信息,只有userinfo,其它数据为空,切勿整体赋值
...@@ -625,30 +624,14 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View. ...@@ -625,30 +624,14 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
mShareDialog?.show(activity?.fragmentManager, "lose") mShareDialog?.show(activity?.fragmentManager, "lose")
} }
/**
* 收到照片选取事件
*/
fun onEventBackgroundThread(event: UserResponseBean?) {
if (event?.userInfo != null) {
userInfoData = event.userInfo
}
}
fun onEvent(event: RefreshRecentContactListEvent?) { fun onEvent(event: RefreshRecentContactListEvent?) {
refreshCouponData() refreshCouponData()
} }
fun onEvent(event: UserChangeEvent) { fun onEvent(event: UserChangeEvent) {
val changeFlag = event.isChange_flag if (event.isChange_flag) {
if (changeFlag) {
initdata() initdata()
refreshCouponData() refreshCouponData()
try {
provide(
IImService::class.java
).updateUserHead(getUserInfo()?.userInfo?.head)
} catch (e: Exception) {
}
} }
} }
} }
\ No newline at end of file
package com.yidianling.user.mine import android.annotation.SuppressLintimport android.content.Intentimport android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.hardware.Cameraimport android.net.Uriimport android.os.Buildimport android.provider.MediaStoreimport android.text.Spannableimport android.text.SpannableStringimport android.text.style.ForegroundColorSpanimport android.widget.ImageViewimport android.widget.TextViewimport com.alibaba.android.arouter.launcher.ARouterimport com.bumptech.glide.Glideimport com.hjq.permissions.OnPermissionCallbackimport com.hjq.permissions.Permissionimport com.hjq.permissions.XXPermissionsimport com.ydl.ydlcommon.base.BaseActivityimport com.ydl.ydlcommon.bean.StatusBarOptionsimport com.ydl.ydlcommon.data.http.BaseAPIResponseimport com.ydl.ydlcommon.modular.findRouteServiceimport com.ydl.ydlcommon.utils.FileUtilsimport com.ydl.ydlcommon.utils.extend.visibleimport com.ydl.ydlcommon.view.TitleBarimport com.yidianling.common.tools.ToastUtilimport com.yidianling.im.api.service.IImServiceimport com.yidianling.user.Rimport com.yidianling.user.api.service.IUserServiceimport com.yidianling.user.http.UserHttpImplimport com.yidianling.user.http.request.BaseInfoimport com.yidianling.user.http.request.UserModifyAuditRespDtoimport de.greenrobot.event.EventBusimport io.reactivex.android.schedulers.AndroidSchedulersimport io.reactivex.schedulers.Schedulersimport java.io.Fileimport java.io.IOException class ModifyAvatarActivity : BaseActivity() { override fun getStatusViewOptions(): StatusBarOptions { return StatusBarOptions(isAddStatusView = true, statusBarDarkMode = false).apply { statusColor = "#E6000000" } } private val ALBUM = 0x0 // 相册 private val CAMERA = 0x1 // 照相 private val CROP = 0x2 // 裁剪m private val mAvatarDir = "${FileUtils.getStorageDirectory()}/img/head_img/" // 头像目录 private val mAvatarPath = "${mAvatarDir}avatar_camera.jpg" // 头像 private val mAvatarFile = File(mAvatarPath) // 头像文件 private val mUserInfo = findRouteService(IUserService::class.java).getUserInfo() override fun layoutResId(): Int = R.layout.activity_modify_avatar private lateinit var tip_bar: TitleBar private lateinit var tv_tip1: TextView private lateinit var iv_avatar: ImageView private lateinit var iv_warn: ImageView private lateinit var tv_tip2: TextView private lateinit var tv_modify: TextView private fun findView() { tip_bar = findViewById(R.id.tip_bar) tv_tip1 = findViewById(R.id.tv_tip1) iv_avatar = findViewById(R.id.iv_avatar) iv_warn = findViewById(R.id.iv_warn) tv_tip2 = findViewById(R.id.tv_tip2) tv_modify = findViewById(R.id.tv_modify) } @SuppressLint("SetTextI18n") override fun initDataAndEvent() { findView() tip_bar.setOnLeftTextClick { _, _ -> setResult(RESULT_OK) // 刷新个人资料页 finish() } mUserInfo ?: return mDisposables.add( UserHttpImpl.getInstance() .getUserAuditInfo(BaseInfo(102)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe { response: BaseAPIResponse<UserModifyAuditRespDto> -> if (response.code != "200") return@subscribe val (auditReason, auditStatus, _, _, _, _, _, last7Day, modifyAfter) = response.data when (auditStatus) { 1 -> { // 审核中 underReview() Glide.with(this) .load(modifyAfter) .into(iv_avatar) } 2 -> { // 审核失败 tv_tip1.text = "七天内可修改一次头像" Glide.with(this) .load(mUserInfo.head) .into(iv_avatar) iv_warn.visible() tv_tip2.text = SpannableString("审核失败,$auditReason。如有疑问联系客服小壹").also { it.setSpan( ForegroundColorSpan(resources.getColor(R.color.color_1DA1F2)), it.lastIndexOf("客服"), it.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) } tv_tip2.setOnClickListener { // 客服 ARouter.getInstance().navigation( IImService::class.java ).startKefuChat(this, "", 0, 0) } setModifyAvatar() } 3 -> { // 审核成功 || 提交审核 modifyAfter?.let { mUserInfo.head = it Glide.with(this) .load(it) .error(R.drawable.platform_head_place_hold_pic) .into(iv_avatar) } findRouteService(IImService::class.java).updateUserHead(modifyAfter) // 更新用户头像到云信 EventBus.getDefault().post(UserChangeEvent(true)) // 更新MineFragment if (last7Day) { tv_tip1.text = "抱歉,七天内只能修改一次头像" tv_modify.isEnabled = false tv_modify.setBackgroundResource(R.drawable.bg_c3c4ca_corner_8) } else { tv_tip1.text = "七天内可修改一次头像" setModifyAvatar() } } } }) } private fun setModifyAvatar() { tv_modify.setOnClickListener { requestPermissions { optionDialog() } } } private fun requestPermissions(block: () -> Unit) { if (XXPermissions.isGrantedPermission(this, Permission.CAMERA)) { block.invoke() } else { XXPermissions.with(this) .permission(Permission.CAMERA) .request(object : OnPermissionCallback { override fun onGranted(permissions: MutableList<String>?, all: Boolean) { block.invoke() } override fun onDenied(permissions: MutableList<String>?, never: Boolean) { ToastUtil.toastLong(this@ModifyAvatarActivity, "缺少使用相机和读取存储权限,无法获取图片") } }) } } private fun optionDialog() { showFragment(AvaterDialog().apply { listener = { position, dialog -> val file = File(mAvatarDir) if (!file.exists()) file.mkdirs() when (position) { 0 -> { // 相册 val intent = Intent(Intent.ACTION_PICK, null) intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*" ) this@ModifyAvatarActivity.startActivityForResult(intent, ALBUM) } 1 -> { // 拍照 callCamera() } } dialog.dismiss() } }, "avater") } /** * 调用相机 */ private fun callCamera() { val intent = Intent() packageManager.getLaunchIntentForPackage("com.android.camera")?.run { intent.setPackage("com.android.camera") } intent.action = MediaStore.ACTION_IMAGE_CAPTURE if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { // api 24 intent.putExtra( "android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT ) // 调用前置摄像头 intent.putExtra("autofocus", true) // 自动对焦 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mAvatarFile)) intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()) startActivityForResult(intent, CAMERA) } else { try { mAvatarFile.createNewFile() } catch (e: IOException) { e.printStackTrace() } val uri: Uri = FileUtils.getImageContentUri(this, mAvatarFile) intent.putExtra( "android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT ) // 调用前置摄像头 intent.putExtra("autofocus", true) // 自动对焦 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri) intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()) startActivityForResult(intent, CAMERA) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == RESULT_OK) { when (requestCode) { ALBUM -> { // 相册 data?.let { startPhotoZoom(it.data) } } CAMERA -> { // 拍照 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { // api 24 if (mAvatarFile.exists()) { startPhotoZoom(Uri.fromFile(mAvatarFile)) } } else { startPhotoZoom(FileUtils.getImageContentUri(this, mAvatarFile)) } } CROP -> { mUserInfo ?: return showProgressDialog("保存中...") val path = FileUtils.getPathByUri4kitkat(this, Uri.fromFile(mAvatarFile)) var bitmap = BitmapFactory.decodeFile(path) bitmap = FileUtils.getZoomImage(bitmap, 200.0) val outPutFile = FileUtils.saveBitmap(bitmap, path) mDisposables.add( UserHttpImpl.getInstance().uploadFile(outPutFile) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe { dismissProgressDialog() if (it.code != "200") { ToastUtil.toastShort(it.msg) return@subscribe } ToastUtil.toastShort("头像审核中,预计24小时内审核完成") underReview() iv_avatar.setImageBitmap(bitmap) } ) } } } } /** * 审核中 */ @SuppressLint("SetTextI18n") private fun underReview() { tv_tip1.text = "抱歉,七天内只能修改一次头像" tv_tip2.text = "审核中,预计24小时内审核完成,暂无法修改。" tv_modify.setBackgroundResource(R.drawable.bg_c3c4ca_corner_8) tv_modify.isEnabled = false } /** * 裁剪图片方法实现 */ private fun startPhotoZoom(uri: Uri?) { val intent = Intent("com.android.camera.action.CROP").apply { setDataAndType(uri, "image/*") putExtra("crop", "true") // 设置裁剪 putExtra("scaleUpIfNeeded", true) // 图片拉伸,就不会出现黑框了 //宽高的比例 putExtra("aspectX", 1) putExtra("aspectY", 1) //裁剪图片宽高 putExtra("outputX", 200) putExtra("outputY", 200) } intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mAvatarFile)) intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString())// return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败 intent.putExtra("return-data", false)// intent.putExtra("noFaceDetection", false) // 是否需要人脸识别 startActivityForResult(intent, CROP) }}
\ No newline at end of file
package com.yidianling.user.mine
import android.annotation.SuppressLint
import android.text.Editable
import android.text.Spannable
import android.text.SpannableString
import android.text.TextWatcher
import android.text.style.ForegroundColorSpan
import android.util.TypedValue.COMPLEX_UNIT_SP
import android.view.Gravity
import android.view.View
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.ImageView
import android.widget.TextView
import com.alibaba.android.arouter.launcher.ARouter
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.bean.StatusBarOptions
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.modular.findRouteService
import com.ydl.ydlcommon.utils.extend.visible
import com.ydl.ydlcommon.view.DeleteEditTextView
import com.ydl.ydlcommon.view.TitleBar
import com.yidianling.common.tools.RxImageTool
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.api.service.IImService
import com.yidianling.user.R
import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.api.service.IUserService
import com.yidianling.user.http.UserHttpImpl.Companion.getInstance
import com.yidianling.user.http.request.BaseInfo
import com.yidianling.user.http.request.ModifyBaseInfo
import com.yidianling.user.http.request.UserModifyAuditRespDto
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
/**
* 昵称修改
* 简介修改
*/
const val NICKNAME = 1
const val INTRODUCTION = 2
class ModifyInfoActivity : BaseActivity() {
override fun getStatusViewOptions(): StatusBarOptions {
return StatusBarOptions(isAddStatusView = true, statusBarDarkMode = true)
}
private val mShake: Animation by lazy {
AnimationUtils.loadAnimation(this, R.anim.user_mine_shake)
}
private lateinit var det_set_info: DeleteEditTextView
private lateinit var tv_tip1: TextView
private lateinit var tv_tip2: TextView
private lateinit var tb_title_bar: TitleBar
private lateinit var iv_warn: ImageView
override fun layoutResId(): Int = R.layout.activity_modify_info
private fun findView() {
det_set_info = findViewById(R.id.det_set_info)
tv_tip1 = findViewById(R.id.tv_tip1)
tv_tip2 = findViewById(R.id.tv_tip2)
tb_title_bar = findViewById(R.id.tb_title_bar)
iv_warn = findViewById(R.id.iv_warn)
}
@SuppressLint("SetTextI18n")
override fun initDataAndEvent() {
findView()
val from = intent.getIntExtra("from", 0)
val userInfo = findRouteService(IUserService::class.java).getUserInfo()
userInfo ?: return
if (INTRODUCTION == from) {
tb_title_bar.title = "简介"
det_set_info.layoutParams.height = RxImageTool.dp2px(180f)
det_set_info.hint = "一句话介绍下自己"
det_set_info.setShowDelete(false)
det_set_info.setTextSize(COMPLEX_UNIT_SP, 14f)
det_set_info.gravity = Gravity.START
}
tb_title_bar.setOnLeftTextClick { _, _ ->
setResult(RESULT_OK) // 刷新个人资料页
finish()
}
mDisposables.add(
getInstance().getUserAuditInfo(BaseInfo(if (NICKNAME == from) 101 else 103))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { response: BaseAPIResponse<UserModifyAuditRespDto> ->
if (response.code != "200") return@subscribe
val (auditReason, auditStatus, _, _, _, _, _, last7Day, modifyAfter) = response.data
if (NICKNAME == from) {
when (auditStatus) {
1 -> { // 审核中
tv_tip1.visible()
tv_tip1.text = "抱歉,七天内只能修改一次昵称"
setCanNotSave()
setEditText(modifyAfter, "昵称审核中,预计24小时内审核完成")
tv_tip2.visible()
tv_tip2.text = "昵称审核中,预计24小时内审核完成,暂无法修改。"
}
2 -> { // 审核失败
tv_tip1.visible()
tv_tip1.text = "七天内可修改一次昵称"
checkNickSaveButton(userInfo)
det_set_info.setText(userInfo.nick_name)
iv_warn.visible()
customerService("审核失败 ,$auditReason。如有疑问联系客服小壹")
}
3 -> { // 审核成功 || 提交审核
modifyAfter?.let { nick ->
userInfo.nick_name = nick
findRouteService(IImService::class.java).updateUserName(nick) // 更新用户昵称到云信
}
if (last7Day) {
tv_tip1.visible()
tv_tip1.text = "抱歉,七天内只能修改一次昵称"
setCanNotSave()
setEditText(modifyAfter, "抱歉,七天内只能修改一次")
} else {
tv_tip1.visible()
tv_tip1.text = "七天内可修改一次昵称"
checkNickSaveButton(userInfo)
det_set_info.setText(modifyAfter)
}
}
}
} else if (INTRODUCTION == from) {
when (auditStatus) {
1 -> { // 审核中
setCanNotSave()
setEditText(modifyAfter, "简介审核中,预计24小时内审核完成")
tv_tip2.visible()
tv_tip2.text = "审核中,预计24小时内审核完成,暂无法修改"
}
2 -> { // 审核失败
setCanSave()
det_set_info.setText(userInfo.description)
iv_warn.visible()
customerService("审核失败,$auditReason。如有疑问联系客服小壹")
}
3 -> { // 审核成功 || 提交审核
modifyAfter?.let {
det_set_info.setText(it)
userInfo.description = it
}
setCanSave()
}
}
}
})
}
/**
* 客服提示
*/
private fun customerService(tip: String) {
tv_tip2.visible()
tv_tip2.text = SpannableString(tip).also {
it.setSpan(
ForegroundColorSpan(resources.getColor(R.color.color_1DA1F2)),
it.lastIndexOf("客服"),
it.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
tv_tip2.setOnClickListener { // 客服
ARouter.getInstance().navigation(
IImService::class.java
).startKefuChat(this, "", 0, 0)
}
}
private fun setCanSave() {
tb_title_bar.setRightTextColor(resources.getColor(R.color.color_1DA1F2))
tb_title_bar.setOnRightTextClick { _, _ ->
modifyUserBaseInfo(103) {
ToastUtil.toastShort("提交成功,简介审核中,预计24小时内审核完成")
finish()
}
}
}
private fun setCanNotSave() {
tb_title_bar.setRightTextEnable(false)
tb_title_bar.setRightTextColor(resources.getColor(R.color.color_9d9ea7))
}
private fun setEditText(text: String?, tip: String) {
det_set_info.setText(text)
det_set_info.keyListener = null
det_set_info.isFocusableInTouchMode = false
det_set_info.setTextColor(resources.getColor(R.color.color_9d9ea7))
det_set_info.setOnClickListener {
ToastUtil.toastShort(tip)
}
}
private fun checkNickSaveButton(userInfo: UserResponseBean.UserInfo) {
tb_title_bar.setOnRightTextClick { _: View?, _: Boolean ->
modifyUserBaseInfo(101) {
ToastUtil.toastShort("提交成功,昵称审核中,预计24小时内审核完成")
finish()
}
}
det_set_info.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(
s: CharSequence?,
start: Int,
count: Int,
after: Int
) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
if (s?.isEmpty() == true || s?.toString() == userInfo.nick_name) {
tb_title_bar.setRightTextEnable(false)
tb_title_bar.setRightTextColor(resources.getColor(R.color.color_9d9ea7))
} else {
tb_title_bar.setRightTextEnable(true)
tb_title_bar.setRightTextColor(resources.getColor(R.color.color_1DA1F2))
}
}
override fun afterTextChanged(s: Editable?) {}
})
}
private fun modifyUserBaseInfo(type: Int, block: () -> Unit) {
mDisposables.add(
getInstance().modifyUserBaseInfo(
ModifyBaseInfo(
det_set_info.text.toString(),
type
)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
if (it.code == "200") block.invoke()
else ToastUtil.toastShort(it.msg)
}
)
}
}
\ No newline at end of file
package com.yidianling.user.mine;
import android.annotation.SuppressLint;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.ydl.ydlcommon.base.BaseActivity;
import com.ydl.ydlcommon.bean.StatusBarOptions;
import com.ydl.ydlcommon.data.http.RxUtils;
import com.ydl.ydlcommon.data.http.ThrowableConsumer;
import com.ydl.ydlcommon.modular.ModularServiceManager;
import com.ydl.ydlcommon.utils.remind.ToastHelper;
import com.yidianling.common.tools.ToastUtil;
import com.yidianling.im.api.service.IImService;
import com.yidianling.user.R;
import com.yidianling.user.UserHelper;
import com.yidianling.user.http.UserHttp;
import com.yidianling.user.http.UserHttpImpl;
import com.yidianling.user.http.request.UserInfoParam;
import org.jetbrains.annotations.NotNull;
import io.reactivex.android.schedulers.AndroidSchedulers;
/**
* 个人资料--个人简介
* Created by hgw on 2017/3/24.
*/
public class PersonalDesActivity extends BaseActivity {
ImageView imageBack;
TextView tvCenterTitle;
TextView textSave;
RelativeLayout relaToolBar;
EditText editDes;
@NotNull
@Override
public StatusBarOptions getStatusViewOptions() {
return new StatusBarOptions(true,true);
}
@Override
protected int layoutResId() {
return R.layout.user_mine_activity_personal_des;
}
@Override
protected void initDataAndEvent() {
imageBack = findViewById(R.id.image_back);
tvCenterTitle = findViewById(R.id.tv_center_title);
editDes = findViewById(R.id.edit_des);
textSave = findViewById(R.id.text_save);
imageBack.setOnClickListener(v -> {
finish();
});
textSave.setOnClickListener(v -> {
updateInfo("home_desc", editDes.getText().toString());
});
init();
}
private void init() {
String desc = "";
try {
desc = ModularServiceManager.INSTANCE.provide(IImService.class).getUserInfoDescription();
} catch (Exception e) {}
editDes.setText(desc);
}
@SuppressLint("CheckResult")
private void updateInfo(final String changType, final String value) {
showProgressDialog("保存中");
UserHttp userHttp = UserHttpImpl.Companion.getInstance();
userHttp.setUserInfo(new UserInfoParam(changType, value))
.filter(objectBaseResponse -> changType.equals("home_desc"))
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(o -> {
dismissProgressDialog();
UserHelper.INSTANCE.getUserInfo().getUserInfo().setDescription(value);
ToastUtil.toastShort("保存成功");
finish();
}, new ThrowableConsumer() {
@Override
public void accept(@NotNull String msg) {
dismissProgressDialog();
ToastHelper.Companion.show(msg);
}
});
}
}
package com.yidianling.user.mine; package com.yidianling.user.mine;
import android.Manifest; import static com.yidianling.user.mine.ModifyInfoActivityKt.NICKNAME;
import static com.yidianling.user.mine.ModifyInfoActivityKt.INTRODUCTION;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.DatePicker; import android.widget.DatePicker;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.facade.annotation.Route;
import com.tbruyelle.rxpermissions2.RxPermissions; import com.bumptech.glide.Glide;
import com.ydl.ydl_image.module.GlideApp; import com.ydl.ydl_image.module.GlideApp;
import com.ydl.ydl_image.transform.GlideCircleTransform; import com.ydl.ydl_image.transform.GlideCircleTransform;
import com.ydl.ydlcommon.base.BaseActivity; import com.ydl.ydlcommon.base.BaseActivity;
import com.ydl.ydlcommon.bean.StatusBarOptions; import com.ydl.ydlcommon.bean.StatusBarOptions;
import com.ydl.ydlcommon.data.http.RxUtils;
import com.ydl.ydlcommon.data.http.ThrowableConsumer; import com.ydl.ydlcommon.data.http.ThrowableConsumer;
import com.ydl.ydlcommon.modular.ModularServiceManager;
import com.ydl.ydlcommon.utils.FileUtils;
import com.ydl.ydlcommon.utils.PopUtils; import com.ydl.ydlcommon.utils.PopUtils;
import com.ydl.ydlcommon.utils.remind.ToastHelper; import com.ydl.ydlcommon.utils.remind.ToastHelper;
import com.ydl.ydlcommon.view.JumpTextView; import com.ydl.ydlcommon.view.JumpTextView;
...@@ -36,22 +27,17 @@ import com.ydl.ydlcommon.view.ListNoCancelDialog; ...@@ -36,22 +27,17 @@ import com.ydl.ydlcommon.view.ListNoCancelDialog;
import com.ydl.ydlcommon.view.TitleBar; import com.ydl.ydlcommon.view.TitleBar;
import com.ydl.ydlcommon.view.dialog.ListDialog; import com.ydl.ydlcommon.view.dialog.ListDialog;
import com.yidianling.common.tools.ToastUtil; import com.yidianling.common.tools.ToastUtil;
import com.yidianling.im.api.service.IImService;
import com.yidianling.user.R; import com.yidianling.user.R;
import com.yidianling.user.UserHelper; import com.yidianling.user.UserHelper;
import com.yidianling.user.api.bean.UserResponseBean; import com.yidianling.user.api.bean.UserResponseBean;
import com.yidianling.user.http.UserHttp; import com.yidianling.user.http.UserHttp;
import com.yidianling.user.http.UserHttpImpl; import com.yidianling.user.http.UserHttpImpl;
import com.yidianling.user.http.request.HeadParam;
import com.yidianling.user.http.request.UserInfoParam; import com.yidianling.user.http.request.UserInfoParam;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import de.greenrobot.event.EventBus; import de.greenrobot.event.EventBus;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
...@@ -64,13 +50,11 @@ import io.reactivex.android.schedulers.AndroidSchedulers; ...@@ -64,13 +50,11 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
@Route(path = "/user/personInfo") @Route(path = "/user/personInfo")
public class PersonalInfoActivity extends BaseActivity implements View.OnClickListener { public class PersonalInfoActivity extends BaseActivity implements View.OnClickListener {
public static final int REQUEST_NAME = 1; private final int AVATAR = 0x0; // 头像
private final int NICK = 0x1; // 昵称
UserResponseBean.UserInfo userInfoData; UserResponseBean.UserInfo userInfoData;
private static final int REQUEST_IMAGE = 2;
TitleBar tb_title; TitleBar tb_title;
ImageView persion_head_iv; ImageView persion_head_iv;
ImageView person_head_hint_iv; ImageView person_head_hint_iv;
...@@ -82,23 +66,8 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -82,23 +66,8 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
JumpTextView jtv_career; JumpTextView jtv_career;
JumpTextView jtv_jianjie; JumpTextView jtv_jianjie;
private ArrayList<String> mSelectPath = new ArrayList<>(); private final DatePickerDialogFragment datePickerDialogFragment = new DatePickerDialogFragment();
List<String> name = new ArrayList<String>();
DatePickerDialogFragment datePickerDialogFragment = new DatePickerDialogFragment();
private PopupWindow popupWindow;
private Uri imgUri;
FileUtils fileUtils;
private String head_dir;//目录
private String head_path;//路径
File head_filec;
private RxPermissions rxPermissions;
public static Intent newIntent(Activity activity) {
return new Intent(activity, PersonalInfoActivity.class);
}
@NotNull @NotNull
@Override @Override
public StatusBarOptions getStatusViewOptions() { public StatusBarOptions getStatusViewOptions() {
...@@ -135,11 +104,10 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -135,11 +104,10 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
void init() { void init() {
rxPermissions = new RxPermissions(this);
tb_title.setRightImageListener(new View.OnClickListener() { tb_title.setRightImageListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
popupWindow = PopUtils.showMoreItem(PersonalInfoActivity.this, PopUtils.showMoreItem(PersonalInfoActivity.this,
tb_title.getRootView(), tb_title.getRootView(),
0, 0,
0); 0);
...@@ -157,13 +125,10 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -157,13 +125,10 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
} }
}); });
fileUtils = new FileUtils(this);
head_dir = fileUtils.getStorageDirectory() + "/img/head_img/";
} }
private void setData() { private void setData() {
if (userInfoData == null || userInfoData == null) if (userInfoData == null) return;
return;
String head_url = UserHelper.INSTANCE.getUserInfo().getUserInfo().getHead(); String head_url = UserHelper.INSTANCE.getUserInfo().getUserInfo().getHead();
GlideApp.with(PersonalInfoActivity.this) GlideApp.with(PersonalInfoActivity.this)
...@@ -196,60 +161,18 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -196,60 +161,18 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
@Override @Override
public void onClick(View v) { public void onClick(View v) {
int id = v.getId(); int id = v.getId();
if (id == R.id.persion_head_rel) { if (id == R.id.persion_head_rel) { // 头像
rxPermissions.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) startActivityForResult(new Intent(this, ModifyAvatarActivity.class), AVATAR);
.subscribe(granted -> {
if (granted) {
List<String> name = new ArrayList<>();
name.add("相册");
name.add("拍照");
ListNoCancelDialog.Builder builders = new ListNoCancelDialog.Builder(PersonalInfoActivity.this, name, 0);
builders.SetOnItemClickLister(new ListNoCancelDialog.Builder.OnItemClickLister() {
@Override
public void onItemClick(Dialog dialog, View view, int position) {
File file_dir = new File(head_dir);
if (file_dir.exists()) {
fileUtils.deleteAllFiles(file_dir);
file_dir.mkdirs();
}
switch (position) {
case 0://相册
Intent intent1 = new Intent(Intent.ACTION_PICK, null);
intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent1, 21001);
dialog.dismiss();
break;
case 1://拍照
head_path = head_dir + System.currentTimeMillis() + "hand_carmer.jpg";
showCameraAction(21002, head_path);
dialog.dismiss();
break;
}
}
@Override
public void onItemLongClick(Dialog dialog, View view, int position) {
}
});
if (!PersonalInfoActivity.this.isFinishing()) {
builders.create().show();
}
} else {
ToastUtil.toastLong(this, "缺少使用相机和读取存储权限,无法获取图片");
}
});
} else if (id == R.id.jtv_nick) {//昵称 } else if (id == R.id.jtv_nick) {//昵称
Intent intent = new Intent(this, SetInfoActivity.class); Intent intent = new Intent(this, ModifyInfoActivity.class);
intent.putExtra("mOldString", jtv_nick.getRightText()); intent.putExtra("from", NICKNAME);
intent.putExtra("mTitle", "修改昵称"); startActivityForResult(intent, NICK);
startActivityForResult(intent, REQUEST_NAME);
} else if (id == R.id.jtv_sex) {//性别 } else if (id == R.id.jtv_sex) {//性别
List<String> sexs = new ArrayList<String>(); List<String> sexs = new ArrayList<String>();
sexs.add("男"); sexs.add("男");
sexs.add("女"); sexs.add("女");
ListNoCancelDialog.Builder builder1 = new ListNoCancelDialog.Builder(PersonalInfoActivity.this, sexs, 0); ListNoCancelDialog.Builder builder1 = new ListNoCancelDialog.Builder(PersonalInfoActivity.this, sexs, 0);
builder1.SetOnItemClickLister(new ListNoCancelDialog.Builder.OnItemClickLister() { builder1.setOnItemClickLister(new ListNoCancelDialog.Builder.OnItemClickLister() {
@Override @Override
public void onItemClick(Dialog dialog, View view, int position) { public void onItemClick(Dialog dialog, View view, int position) {
switch (position) { switch (position) {
...@@ -347,157 +270,33 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -347,157 +270,33 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
}); });
builderm.create().show(); builderm.create().show();
} else if (id == R.id.jtv_jianjie) {//个人简介 } else if (id == R.id.jtv_jianjie) {//个人简介
Intent intent1 = new Intent(this, PersonalDesActivity.class); Intent intent = new Intent(this, ModifyInfoActivity.class);
startActivity(intent1); intent.putExtra("from", INTRODUCTION);
startActivity(intent);
} }
} }
/**
* 调用系统拍照
*/
private void showCameraAction(int type_code, String file_path) {
File file_dir = new File(head_dir);
if (file_dir.exists()) {
fileUtils.deleteAllFiles(file_dir);
}
file_dir.mkdirs();
head_filec = new File(file_path);
// fileUtils.isFilleExit(head_dir);
// BigHeadFile = new File(file_path);
// try {
// if (BigHeadFile.exists()) {
// BigHeadFile.delete();
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
final Intent intent = new Intent();
final Intent intent_camera = getPackageManager()
.getLaunchIntentForPackage("com.android.camera");
if (intent_camera != null) {
intent.setPackage("com.android.camera");
}
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
// Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
/*获取当前系统的android版本号*/
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(head_filec));
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, type_code);
} else {
try {
head_filec.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri uri = fileUtils.getImageContentUri(PersonalInfoActivity.this, new File(file_path));
intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT); // 调用前置摄像头
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("autofocus", true); // 自动对焦
startActivityForResult(intent, type_code);
}
}
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
switch (requestCode) { switch (requestCode) {
case 21001: case AVATAR: {
if (data != null) { Glide.with(PersonalInfoActivity.this)
imgUri = data.getData(); .load(userInfoData.getHead())
startPhotoZoom(data.getData()); .override(100, 100)
} .transform(new GlideCircleTransform(PersonalInfoActivity.this))
break; .error(R.drawable.platform_head_place_hold_pic)
.into(persion_head_iv);
case 21002:
imgUri = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
if (head_filec.exists()) {
startPhotoZoom(Uri.fromFile(head_filec));
}
} else {
Uri uri = fileUtils.getImageContentUri(PersonalInfoActivity.this, head_filec);
if (uri != null) {
startPhotoZoom(uri);
}
}
break;
case 21003:
if (imgUri != null) {
showProgressDialog("保存中...");
String path = fileUtils.getPathByUri4kitkat(this, imgUri);
Bitmap bitmap = BitmapFactory.decodeFile(path);
bitmap = fileUtils.getZoomImage(bitmap, 200);
try {
File out_file = fileUtils.SaveBitmap(bitmap, path);
uploadImage(out_file.getAbsolutePath(), 1001);
} catch (IOException e) {
e.printStackTrace();
}
imgUri = null;
} }
case NICK: {
break; jtv_nick.setRightText(userInfoData.getNick_name());
case REQUEST_NAME: {
updateInfo("nickName", SetInfoActivity.getInput(data));
break; break;
} }
} }
} }
} }
/**
* 裁剪图片方法实现
*/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// 图片拉伸,就不会出现黑框了
intent.putExtra("scaleUpIfNeeded", true);
//宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//裁剪图片宽高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
if (imgUri != null) {
// 输出路径
fileUtils.isFilleExit(head_dir);
imgUri = Uri.fromFile(new File(head_dir + System.currentTimeMillis() + "my_head1.jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
// return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败
intent.putExtra("return-data", false);
// 是否需要人脸识别
// intent.putExtra("noFaceDetection", false);
startActivityForResult(intent, 21003);
} else {
File bigfile = new File(head_path);
imgUri = Uri.fromFile(bigfile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
// return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败
intent.putExtra("return-data", false);
// 是否需要人脸识别
intent.putExtra("noFaceDetection", false);
startActivityForResult(intent, 21003);
}
}
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
void updateInfo(final String changType, final String value) { void updateInfo(final String changType, final String value) {
showProgressDialog("保存中..."); showProgressDialog("保存中...");
...@@ -526,14 +325,6 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -526,14 +325,6 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
break; break;
} }
break; break;
case "nickName":
jtv_nick.setRightText(value);
userInfo.setNick_name(value);
//更新用户昵称到云信
try {
ModularServiceManager.INSTANCE.provide(IImService.class).updateUserName(value);
}catch (Exception e) {}
break;
case "profession": case "profession":
setCareer(Integer.valueOf(value)); setCareer(Integer.valueOf(value));
userInfo.setProfession(Integer.valueOf(value)); userInfo.setProfession(Integer.valueOf(value));
...@@ -550,75 +341,20 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi ...@@ -550,75 +341,20 @@ public class PersonalInfoActivity extends BaseActivity implements View.OnClickLi
//封面背景 //封面背景
userInfo.setHome_bg(value); userInfo.setHome_bg(value);
break; break;
case "home_desc": // case "home_desc": // 简介
//简介 // userInfo.setDescription(value);
userInfo.setDescription(value); // break;
break;
}
EventBus.getDefault().post(userInfoData);
}, new ThrowableConsumer() {
@Override
public void accept(@NotNull String msg) {
ToastHelper.Companion.show(msg);
}
});
}
/**
* 上传图片
*/
@SuppressLint("CheckResult")
void uploadImage(final String path, final int requestCode) {
UserHttp userHttp = UserHttpImpl.Companion.getInstance();
userHttp.uploadHead(new HeadParam(new File(path)))
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(o -> {
Map map = (Map) o;
String head_url = (String) map.get("url");
userInfoData.setHead(head_url);
// 跟新本地云信数据库信息
try {
ModularServiceManager.INSTANCE.provide(IImService.class).updateUserHead(userInfoData.getHead());
}catch (Exception e) {}
UserResponseBean.UserInfo userInfo = UserHelper.INSTANCE.getUserInfo().getUserInfo();
if (userInfo != null) {
userInfo.setHead(head_url);
} }
UserChangeEvent changeEvent = new UserChangeEvent(true);
EventBus.getDefault().post(changeEvent);
EventBus.getDefault().post(userInfoData); EventBus.getDefault().post(userInfoData);
if (head_url != null && !"".equals(head_url)) {
GlideApp.with(PersonalInfoActivity.this)
.load(userInfoData.getHead())
.override(100, 100)
.transform(new GlideCircleTransform(PersonalInfoActivity.this))
.error(R.drawable.platform_head_place_hold_pic)
.into(persion_head_iv);
} else {
GlideApp.with(PersonalInfoActivity.this)
.load(R.drawable.platform_head_place_hold_pic)
.transform(new GlideCircleTransform(PersonalInfoActivity.this))
.into(persion_head_iv);
}
dismissProgressDialog();
}, new ThrowableConsumer() { }, new ThrowableConsumer() {
@Override @Override
public void accept(@NotNull String msg) { public void accept(@NotNull String msg) {
ToastHelper.Companion.show(msg); ToastHelper.Companion.show(msg);
dismissProgressDialog();
} }
}); });
} }
private void setCareer(int select) { private void setCareer(int select) {
switch (select) { switch (select) {
case 0: case 0:
......
package com.yidianling.user.mine;
import android.content.Intent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import com.ydl.ydlcommon.base.BaseActivity;
import com.ydl.ydlcommon.bean.StatusBarOptions;
import com.ydl.ydlcommon.view.DeleteEditTextView;
import com.ydl.ydlcommon.view.TitleBar;
import com.yidianling.common.tools.ToastUtil;
import com.yidianling.user.R;
import org.jetbrains.annotations.NotNull;
/**
* 短信息填写
* Created by softrice on 15/9/29.
*/
public class SetInfoActivity extends BaseActivity {
public static final String INPUT = "INPUT";
@NotNull
@Override
public StatusBarOptions getStatusViewOptions() {
return new StatusBarOptions(true,true);
}
public static Intent getIntent(String input) {
Intent intent = new Intent();
intent.putExtra(INPUT, input);
return intent;
}
public static String getInput(Intent intent) {
if (intent == null) {
return null;
}
return intent.getStringExtra(INPUT);
}
String mTitle;
String mOldString;
DeleteEditTextView det_set_info;
TitleBar tb_title_bar;
Animation shake;
@Override
protected int layoutResId() {
return R.layout.user_mine_activity_set_info;
}
@Override
protected void initDataAndEvent() {
det_set_info = findViewById(R.id.det_set_info);
tb_title_bar = findViewById(R.id.tb_title_bar);
mTitle = getIntent().getStringExtra("mTitle");
mOldString = getIntent().getStringExtra("mOldString");
init();
}
void init() {
shake = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.user_mine_shake);
tb_title_bar.setTitle(mTitle);
det_set_info.setText(mOldString);
tb_title_bar.setOnRightTextClick(new TitleBar.OnTitleBarTextClick() {
@Override
public void onClick(View view, boolean isActive) {
if (checkInput()) {
ToastUtil.toastShort("保存成功");
setResult(RESULT_OK, getIntent(det_set_info.getText().toString()));
finish();
}
}
});
}
boolean checkInput() {
if (det_set_info.getText().length() == 0) {
ToastUtil.toastShort("请输入昵称");
det_set_info.startAnimation(shake);
return false;
}
if (det_set_info.getText().length() > 6) {
ToastUtil.toastShort("昵称最多6个字哦");
det_set_info.startAnimation(shake);
return false;
}
return true;
}
}
package com.yidianling.user.ui;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.listener.OnResultCallbackListener;
import com.miracle.view.imageeditor.utils.FileUtils;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.ydl.webview.RefreshWebEvent;
import com.ydl.ydl_image.module.GlideApp;
import com.ydl.ydlcommon.actions.imagepicker.YDLImagePicker;
import com.ydl.ydlcommon.base.BaseActivity;
import com.ydl.ydlcommon.bean.StatusBarOptions;
import com.ydl.ydlcommon.data.http.RxUtils;
import com.ydl.ydlcommon.data.http.ThrowableConsumer;
import com.ydl.ydlcommon.utils.ActivityManager;
import com.ydl.ydlcommon.utils.log.LogHelper;
import com.ydl.ydlcommon.utils.remind.ToastHelper;
import com.ydl.ydlcommon.view.CircleImageView;
import com.ydl.ydlcommon.view.ListNoCancelDialog;
import com.ydl.ydlcommon.view.RoundCornerButton;
import com.ydl.ydlcommon.view.TitleBar;
import com.ydl.ydlcommon.view.dialog.CommonDialog;
import com.yidianling.common.tools.RxFileTool;
import com.yidianling.common.tools.RxImageTool;
import com.yidianling.user.LoginHelper;
import com.yidianling.user.R;
import com.yidianling.user.UserConstants;
import com.yidianling.user.UserHelper;
import com.yidianling.user.api.bean.UserResponseBean;
import com.yidianling.user.http.UserHttp;
import com.yidianling.user.http.UserHttpImpl;
import com.yidianling.user.http.request.HeadParam;
import com.yidianling.user.http.request.UserInfoParam;
import com.yidianling.user.route.UserIn;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import de.greenrobot.event.EventBus;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* 完善信息
* Created by softrice on 15/12/9.
*/
public class FillInfoActivity extends BaseActivity implements View.OnClickListener {
String icon;
String name;
String sex;
int type = 0;//0 normal 1 第三方登录模式
boolean isSelected;//是否上传了头像
TitleBar tb_title;
CircleImageView sdv_head;
TextView tv_sex;
EditText et_nick;
RoundCornerButton rcb_submit;
String head = "";
private int finishNum = 0;
private int gender = -1;
String path;
private Uri imgUri;
// FileUtils fileUtils;
private String head_dir;//目录
private String head_path;//路径
File head_filec;
private RxPermissions rxPermissions;
private boolean isFromSplash;
private boolean isRegisterFromRedPacket;
@Override
protected int layoutResId() {
return R.layout.user_activity_fill_info;
}
@NotNull
@Override
public StatusBarOptions getStatusViewOptions() {
return new StatusBarOptions(true,true);
}
@Override
protected void initDataAndEvent() {
tb_title = findViewById(R.id.tb_title);
sdv_head = findViewById(R.id.sdv_head);
tv_sex = findViewById(R.id.tv_sex);
et_nick = findViewById(R.id.et_nick);
rcb_submit = findViewById(R.id.rcb_submit);
sdv_head.setOnClickListener(this);
tv_sex.setOnClickListener(this);
rcb_submit.setOnClickListener(this);
icon = getIntent().getStringExtra("icon");
name = getIntent().getStringExtra("name");
sex = getIntent().getStringExtra("sex");
type = getIntent().getIntExtra("type", 0);
isFromSplash = getIntent().getBooleanExtra("isFromSplash", false);
isRegisterFromRedPacket = getIntent().getBooleanExtra(UserConstants.IS_REGISTER_FROM_PACKET, false);
init();
}
void init() {
rxPermissions = new RxPermissions(this);
head_dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/yidianling/img/head_img/";
if (!TextUtils.isEmpty(icon)) {
GlideApp.with(FillInfoActivity.this)
.load(icon)
.fitCenter()
.error(R.drawable.user_regist_photo)
.into(sdv_head);
}
if (!TextUtils.isEmpty(name)) {
et_nick.setText(name);
}
if (!TextUtils.isEmpty(sex)) {
if (sex.equals("1")) {
tv_sex.setText("男");
gender = 1;
} else {
tv_sex.setText("女");
gender = 2;
}
}
tb_title.setOnLeftTextClick((view, isActive) -> {
showExitDialog();
});
}
@Override
public void onBackPressed() {
showExitDialog();
}
private void showExitDialog() {
CommonDialog.create(this)
.setTitle("提示")
.setMessage("确定退出完善资料?")
.setLeftOnclick("退出", (view1) -> {
if (isFromSplash) {
UserIn.INSTANCE.mainIntent(this);
ActivityManager.Companion.finishActivity(InputPhoneActivity.class);
ActivityManager.Companion.finishActivity(LoginActivity.class);
finish();
} else if (isRegisterFromRedPacket) {
EventBus.getDefault().post(new RefreshWebEvent());
UserIn.INSTANCE.mainIntent(this);
finish();
} else {
EventBus.getDefault().post(new RefreshWebEvent());
ActivityManager.Companion.finishActivity(InputPhoneActivity.class);
ActivityManager.Companion.finishActivity(LoginActivity.class);
finish();
}
ToastHelper.Companion.show(R.string.platform_register_success);
LogHelper.Companion.getInstance().writeLogSync("完善资料页退出");
})
.setRightClick("继续", (view1 -> {
}))
.show();
}
private static final int REQUEST_CODE_FILL_CAMER_HEAD = 21012;
private static final int IMAGE_PICKER=32001;
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.sdv_head) {
YDLImagePicker.INSTANCE.startPicker(FillInfoActivity.this, new OnResultCallbackListener() {
@Override
public void onResult(List<LocalMedia> list) {
if (list.isEmpty()) {
return;
}
for (int i = 0; i < list.size(); i++) {
uploadImage(list.get(0).getPath(), 1002);
}
}
@Override
public void onCancel() {
}
});
} else if (id == R.id.tv_sex) {
List<String> name = new ArrayList<String>();
name.add("男");
name.add("女");
ListNoCancelDialog.Builder builders = new ListNoCancelDialog.Builder(FillInfoActivity.this, name, 0);
builders.SetOnItemClickLister(new ListNoCancelDialog.Builder.OnItemClickLister() {
@Override
public void onItemClick(Dialog dialog, View view, int position) {
switch (position) {
case 0:
tv_sex.setText("男");
gender = 1;
dialog.dismiss();
break;
case 1:
tv_sex.setText("女");
gender = 2;
dialog.dismiss();
break;
}
}
@Override
public void onItemLongClick(Dialog dialog, View view, int position) {
}
});
builders.create().show();
} else if (id == R.id.rcb_submit) {
if (judge()) {
setInfo();
}
}
}
/**
* 调用系统拍照
*/
private void showCameraAction(int type_code, String file_path) {
File file_dir = new File(head_dir);
if (file_dir.exists()) {
RxFileTool.deleteFilesInDir(file_dir);
}
file_dir.mkdirs();
head_filec = new File(file_path);
final Intent intent = new Intent();
final Intent intent_camera = getPackageManager()
.getLaunchIntentForPackage("com.android.camera");
if (intent_camera != null) {
intent.setPackage("com.android.camera");
}
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(head_filec));
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, type_code);
} else {
try {
head_filec.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri uri = RxFileTool.getImageContentUri(FillInfoActivity.this, new File(file_path));
intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT); // 调用前置摄像头
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("autofocus", true); // 自动对焦
startActivityForResult(intent, type_code);
}
}
private void setInfo() {
showProgressDialog("");
updateInfo("gender", gender + "");
}
@Override
protected void onResume() {
super.onResume();
if (LoginHelper.isRegister) {
UserIn.INSTANCE.setChattingAccountAll();
}
}
@Override
protected void onPause() {
super.onPause();
if (LoginHelper.isRegister) {
UserIn.INSTANCE.setChattingAccountNone();
}
}
private void updateInfo(String changType, String value) {
UserHttp userHttp = UserHttpImpl.Companion.getInstance();
userHttp.setUserInfo(new UserInfoParam(changType, value))
.subscribeOn(Schedulers.io())
.compose(RxUtils.resultData())
.flatMap(o->{
return userHttp.setUserInfo(new UserInfoParam("nickName", et_nick.getText().toString()))
.compose(RxUtils.resultData());
})
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(this::dismissProgressDialog)
.subscribe(o -> {
UserResponseBean userInfo = UserHelper.INSTANCE.getUserInfo();
if (userInfo != null) {
userInfo.getUserInfo().setHead(head);
userInfo.getUserInfo().setGender(gender);
userInfo.getUserInfo().setNick_name(et_nick.getText().toString());
}
if (isFromSplash) {
UserIn.INSTANCE.mainIntent(this);
ActivityManager.Companion.finishActivity(InputPhoneActivity.class);
ActivityManager.Companion.finishActivity(LoginActivity.class);
finish();
} else if (isRegisterFromRedPacket) {
EventBus.getDefault().post(new RefreshWebEvent());
UserIn.INSTANCE.mainIntent(this);
finish();
} else {
EventBus.getDefault().post(new RefreshWebEvent());
ActivityManager.Companion.finishActivity(InputPhoneActivity.class);
ActivityManager.Companion.finishActivity(LoginActivity.class);
finish();
}
ToastHelper.Companion.show(R.string.platform_register_success);
LogHelper.Companion.getInstance().writeLogSync("完善资料成功");
}, new ThrowableConsumer() {
@Override
public void accept(@NotNull String msg) {
ToastHelper.Companion.show(msg);
LogHelper.Companion.getInstance().writeLogSync(String.format("完善资料失败%s", msg));
}
});
}
private boolean judge() {
if (!isSelected && TextUtils.isEmpty(icon)) {
ToastHelper.Companion.show("选个头像吧");
return false;
}
if (gender == -1) {
ToastHelper.Companion.show("设置下性别哦");
return false;
}
if (TextUtils.isEmpty(et_nick.getText().toString())) {
ToastHelper.Companion.show("大侠,请留个名");
return false;
}
if (TextUtils.isEmpty(et_nick.getText().toString())) {
ToastHelper.Companion.show("昵称最多5个字哦");
return false;
}
return true;
}
private static final int REQUEST_CODE_CUT = 21003;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_CODE_FILL_CAMER_HEAD:
imgUri = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
if (head_filec.exists()) {
startPhotoZoom(Uri.fromFile(head_filec));
}
} else {
Uri uri = RxFileTool.getImageContentUri(FillInfoActivity.this, head_filec);
if (uri != null) {
startPhotoZoom(uri);
}
}
break;
case REQUEST_CODE_CUT:
if (imgUri != null) {
String path = RxFileTool.getPathFromUri(this, imgUri);
Bitmap bitmap = BitmapFactory.decodeFile(path);
bitmap = RxImageTool.compressByQuality(bitmap, 200);
RxImageTool.save(bitmap, path, Bitmap.CompressFormat.PNG);
File out_file = new File(path);
uploadImage(out_file.getAbsolutePath(), 1002);
imgUri = null;
}
break;
}
}
}
/**
* 裁剪图片方法实现
*/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// 图片拉伸,就不会出现黑框了
intent.putExtra("scaleUpIfNeeded", true);
//宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//裁剪图片宽高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
if (imgUri != null) {
// 输出路径
RxFileTool.isFileExists(head_dir);
imgUri = Uri.fromFile(new File(head_dir + System.currentTimeMillis() + "my_head1.jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
// return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败
intent.putExtra("return-data", false);
// 是否需要人脸识别
// intent.putExtra("noFaceDetection", false);
startActivityForResult(intent, REQUEST_CODE_CUT);
} else {
File bigfile = new File(head_path);
imgUri = Uri.fromFile(bigfile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
// return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败
intent.putExtra("return-data", false);
// 是否需要人脸识别
intent.putExtra("noFaceDetection", false);
startActivityForResult(intent, REQUEST_CODE_CUT);
}
}
/**
* 上传图片
*/
void uploadImage(final String path, final int requestCode) {
UserHttp userHttp = UserHttpImpl.Companion.getInstance();
File outputFile = FileUtils.INSTANCE.getFileByUri(FillInfoActivity.this,path);
userHttp.uploadHead(new HeadParam(outputFile))
.compose(RxUtils.resultData())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> {
dismissProgressDialog();
GlideApp.with(FillInfoActivity.this).load(R.drawable.user_loading2).into(sdv_head);
})
.subscribe(o -> {
Map map = (Map) o;
String head_url = (String) map.get("url");
isSelected = true;
GlideApp.with(FillInfoActivity.this)
.load(path)
.fitCenter()
.error(R.drawable.user_regist_photo)
.into(sdv_head);
head = head_url;
}, new ThrowableConsumer() {
@Override
public void accept(@NotNull String msg) {
ToastHelper.Companion.show(msg);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="8dp"/>
<solid android:color="@color/color_1DA1F2"/>
</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="8dp"/>
<solid android:color="@color/color_C3C4CA"/>
</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="8dp"/>
<solid android:color="@android: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:topLeftRadius="8dp"
android:topRightRadius="8dp"/>
<solid android:color="@android:color/white"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E6000000">
<com.ydl.ydlcommon.view.TitleBar
android:id="@+id/tip_bar"
android:layout_width="match_parent"
android:layout_height="44dp"
app:layout_constraintTop_toTopOf="parent"
app:pa_divide_visibility="false"
app:pa_left_start_icon="@drawable/platform_common_back_un"
app:pa_title_bar_text_color="@android:color/white"
app:pa_title_text="头像" />
<TextView
android:id="@id/tv_tip1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:gravity="center"
android:textColor="@color/color_62636F"
android:textSize="12sp"
app:layout_constraintBottom_toTopOf="@id/iv_avatar"
tools:text="抱歉,七天内只能修改一次头像" />
<ImageView
android:id="@+id/iv_avatar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintTop_toTopOf="parent" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center_horizontal"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
app:layout_constraintTop_toBottomOf="@id/iv_avatar">
<ImageView
android:id="@+id/iv_warn"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginTop="2.5dp"
android:layout_marginEnd="3dp"
android:src="@drawable/modify_warn"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_tip2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/iv_warn"
android:gravity="center_horizontal"
android:textColor="@color/color_C3C4CA"
android:lineSpacingExtra="5dp"
android:textSize="12sp"
tools:text="审核失败,XXX先休息休息寻寻寻寻小地方付付付付。如有疑问联系客服小壹" />
</RelativeLayout>
<TextView
android:id="@+id/tv_modify"
android:layout_width="333dp"
android:layout_height="54dp"
android:layout_marginBottom="50dp"
android:background="@drawable/bg_1da1f2_corner_8"
android:gravity="center"
android:text="修改头像"
android:textColor="@android:color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_F7F7FA"
android:orientation="vertical">
<com.ydl.ydlcommon.view.TitleBar
android:id="@+id/tb_title_bar"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/platform_white"
app:pa_left_start_icon="@drawable/platform_common_back"
android:layout_marginBottom="16dp"
app:pa_right_text="保存"
app:pa_title_text="修改昵称" />
<TextView
android:id="@+id/tv_tip1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="26dp"
android:layout_marginBottom="12dp"
android:textColor="@color/color_C3C4CA"
android:textSize="14sp"
android:visibility="gone"
tools:text="七天内可修改一次昵称"
tools:visibility="visible"/>
<com.ydl.ydlcommon.view.DeleteEditTextView
android:id="@+id/det_set_info"
android:layout_width="match_parent"
android:layout_height="55dp"
android:textColorHint="@color/color_C3C4CA"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_corner_8_white"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:paddingTop="12dp"
android:gravity="center_vertical"
android:textSize="18sp"
android:textColor="@color/color_1C1F28"
android:paddingBottom="15dp" />
<LinearLayout
android:layout_marginTop="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="26dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_warn"
android:visibility="gone"
tools:visibility="visible"
android:layout_width="12dp"
android:layout_marginTop="2dp"
android:layout_height="12dp"
android:layout_marginEnd="4dp"
android:src="@drawable/modify_warn"/>
<TextView
android:id="@+id/tv_tip2"
android:layout_marginEnd="26dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="5dp"
android:textColor="@color/color_9d9ea7"
android:textSize="12sp"
android:visibility="gone"
tools:text="审核失败,简介有风险词。如有疑问联系客服小壹"
tools:visibility="visible" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:background="@drawable/bg_top_corner_8_white">
<TextView
android:id="@+id/tv_album"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="相册"
android:textColor="@color/color_1C1F28"
android:textSize="16sp"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/divide_1"
android:layout_width="match_parent"
android:layout_height="0.5dp"
app:layout_constraintTop_toBottomOf="@id/tv_album"
android:background="@color/color_EFEFF1"/>
<TextView
android:id="@+id/tv_photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="拍照"
android:textColor="@color/color_1C1F28"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/divide_1" />
<View
android:id="@+id/divide_2"
android:layout_width="match_parent"
android:layout_height="0.5dp"
app:layout_constraintTop_toBottomOf="@id/tv_photo"
android:background="@color/color_EFEFF1"/>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="取消"
android:textColor="@color/color_1C1F28"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/divide_2" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:gravity="center_horizontal"
android:orientation="vertical">
<com.ydl.ydlcommon.view.TitleBar
android:id="@+id/tb_title"
android:layout_width="match_parent"
android:layout_height="@dimen/title_bar_height"
app:pa_left_text="退出"
android:background="@color/platform_white"
app:pa_title_text="完善资料" />
<com.ydl.ydlcommon.view.CircleImageView
android:id="@+id/sdv_head"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginTop="30dp"
android:src="@drawable/user_regist_photo" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/user_divide_line_stroke_width"
android:layout_marginTop="36dp"
android:background="@color/platform_divide_color" />
<TextView
android:id="@+id/tv_sex"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/platform_white"
android:gravity="center"
android:hint="@string/platform_please_select_gender"
android:padding="@dimen/platform_default_dis_size_huge"
android:textColorHint="#777777" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/user_divide_line_stroke_width"
android:background="@color/platform_divide_color" />
<EditText
android:id="@+id/et_nick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/platform_white"
android:gravity="center"
android:hint="@string/platform_nickname_hint"
android:maxLength="10"
android:padding="@dimen/platform_default_dis_size_huge"
android:singleLine="true"
android:textColorHint="#777777" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/user_divide_line_stroke_width"
android:background="@color/platform_divide_color" />
<com.ydl.ydlcommon.view.RoundCornerButton
android:id="@+id/rcb_submit"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/platform_default_dis_size_big"
android:layout_marginRight="@dimen/platform_default_dis_size_big"
android:layout_marginTop="@dimen/platform_default_dis_size_huge"
android:text="@string/platform_finish"
android:textColor="@color/platform_white"
android:textSize="@dimen/platform_default_text_size_big"
app:pa_round_btn_active_bg="@color/platform_white"
app:pa_round_btn_bg="@color/platform_main_theme"
app:pa_round_btn_radio_size="5dp" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="#f5f5f5"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rela_toolBar"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="45dp">
<ImageView
android:id="@+id/image_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="15dp"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:src="@drawable/platform_common_back" />
<TextView
android:id="@+id/tv_center_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:ellipsize="end"
android:gravity="center"
android:maxEms="12"
android:maxLines="1"
android:text="简介"
android:textColor="#555555"
android:textSize="16sp" />
<TextView
android:id="@+id/text_save"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:paddingRight="20dp"
android:text="保存"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/divide_line_stroke_width"
android:layout_alignParentBottom="true"
android:background="#EDEDED" />
</RelativeLayout>
<EditText
android:id="@+id/edit_des"
android:layout_width="match_parent"
android:layout_height="300dp"
android:gravity="start"
android:maxLength="150"
android:padding="10dp"
android:background="@color/white"
android:textColorHint="#cbd0d8"
android:hint="一句话介绍下自己"/>
</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:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.ydl.ydlcommon.view.TitleBar
android:id="@+id/tb_title_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/title_bar_height"
app:pa_left_text="取消"
app:pa_right_text="保存"
android:background="@color/platform_white"
app:pa_title_text="title" />
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/divide_line_stroke_width"
android:layout_marginTop="14dp"
android:background="#EDEDED" />
<com.ydl.ydlcommon.view.DeleteEditTextView
android:id="@+id/det_set_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="@dimen/platform_default_dis_size"
android:singleLine="true" />
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/divide_line_stroke_width"
android:background="#EDEDED" />
</LinearLayout>
...@@ -4,7 +4,6 @@ import android.annotation.SuppressLint ...@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.app.Application import android.app.Application
import android.os.Build import android.os.Build
import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.launcher.ARouter
import com.bun.miitmdid.core.JLibrary
import com.tencent.mmkv.MMKV import com.tencent.mmkv.MMKV
import com.ydl.ydlcommon.base.BaseApp import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.data.http.UpLoadLogUtils import com.ydl.ydlcommon.data.http.UpLoadLogUtils
...@@ -28,7 +27,7 @@ object YdlRepository { ...@@ -28,7 +27,7 @@ object YdlRepository {
// 需要在主 module 的 application 的 onCreate 方法中调用此方法 // 需要在主 module 的 application 的 onCreate 方法中调用此方法
fun initApp(app: Application,isDebug:Boolean) { fun initApp(app: Application,isDebug:Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
JLibrary.InitEntry(app) System.loadLibrary("msaoaidsec")
} }
MMKV.initialize(app); MMKV.initialize(app);
LogHelper.getInstance().deleteExpireLogSync() LogHelper.getInstance().deleteExpireLogSync()
......
...@@ -20,6 +20,7 @@ import com.ydl.ydlcommon.utils.ActivityManager ...@@ -20,6 +20,7 @@ import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.AndroidSystemHelper import com.ydl.ydlcommon.utils.AndroidSystemHelper
import com.ydl.ydlcommon.utils.StatusBarUtils import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.utils.statusBar.StatusBarUtil import com.ydl.ydlcommon.utils.statusBar.StatusBarUtil
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.BehaviorSubject
import io.reactivex.subjects.Subject import io.reactivex.subjects.Subject
import kotlin.properties.Delegates import kotlin.properties.Delegates
...@@ -37,6 +38,9 @@ abstract class BaseActivity : AppCompatActivity(), IActivityLifecycleable { ...@@ -37,6 +38,9 @@ abstract class BaseActivity : AppCompatActivity(), IActivityLifecycleable {
var statusView: View? = null var statusView: View? = null
private var loadingDialogFragment: LoadingDialogFragment? = null private var loadingDialogFragment: LoadingDialogFragment? = null
@JvmField
val mDisposables = CompositeDisposable()
override fun provideLifecycleSubject(): Subject<ActivityEvent> { override fun provideLifecycleSubject(): Subject<ActivityEvent> {
return mLifecycleSubject; return mLifecycleSubject;
} }
...@@ -157,6 +161,7 @@ abstract class BaseActivity : AppCompatActivity(), IActivityLifecycleable { ...@@ -157,6 +161,7 @@ abstract class BaseActivity : AppCompatActivity(), IActivityLifecycleable {
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
mDisposables.takeIf { !it.isDisposed }?.dispose()
ActivityManager.getInstance().removeStack(this) ActivityManager.getInstance().removeStack(this)
AndroidSystemHelper.fixInputMethodManagerLeak(this) AndroidSystemHelper.fixInputMethodManagerLeak(this)
} }
......
...@@ -8,6 +8,7 @@ import android.view.ViewDebug.ExportedProperty ...@@ -8,6 +8,7 @@ import android.view.ViewDebug.ExportedProperty
import android.view.ViewDebug.IntToString import android.view.ViewDebug.IntToString
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.LayoutRes import androidx.annotation.LayoutRes
import androidx.annotation.StyleRes
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import com.ydl.ydlcommon.R import com.ydl.ydlcommon.R
...@@ -18,7 +19,7 @@ abstract class BaseDialogFragment : DialogFragment() { ...@@ -18,7 +19,7 @@ abstract class BaseDialogFragment : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.bottomUpDialog) setStyle(STYLE_NO_TITLE, setTheme())
} }
override fun onCreateView( override fun onCreateView(
...@@ -33,7 +34,7 @@ abstract class BaseDialogFragment : DialogFragment() { ...@@ -33,7 +34,7 @@ abstract class BaseDialogFragment : DialogFragment() {
super.onStart() super.onStart()
dialog?.window?.run { dialog?.window?.run {
attributes = attributes?.apply { attributes = attributes?.apply {
gravity = getGravity() gravity = setGravity()
width = getWidth() width = getWidth()
height = getHeight() height = getHeight()
} }
...@@ -42,7 +43,9 @@ abstract class BaseDialogFragment : DialogFragment() { ...@@ -42,7 +43,9 @@ abstract class BaseDialogFragment : DialogFragment() {
@LayoutRes @LayoutRes
abstract fun getLayoutResourceId(): Int abstract fun getLayoutResourceId(): Int
open fun getGravity(): Int = Gravity.NO_GRAVITY open fun setGravity(): Int = Gravity.NO_GRAVITY
@StyleRes
open fun setTheme(): Int = R.style.bottomUpDialog
@ExportedProperty( @ExportedProperty(
category = "layout", category = "layout",
......
...@@ -2,8 +2,11 @@ package com.ydl.ydlcommon.base.config ...@@ -2,8 +2,11 @@ package com.ydl.ydlcommon.base.config
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Build
import android.text.TextUtils import android.text.TextUtils
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.devicesidlib.DeviceIDHelper
import com.ydl.devicesidlib.Utils
import com.ydl.ydlcommon.app.Apm import com.ydl.ydlcommon.app.Apm
import com.ydl.ydlcommon.base.BaseApp import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.bean.AuthBean import com.ydl.ydlcommon.bean.AuthBean
...@@ -15,6 +18,7 @@ import com.ydl.ydlcommon.data.http.GsonProvider ...@@ -15,6 +18,7 @@ import com.ydl.ydlcommon.data.http.GsonProvider
import com.ydl.ydlcommon.data.http.RxUtils import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.data.http.api.ApiRequestUtil import com.ydl.ydlcommon.data.http.api.ApiRequestUtil
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.utils.DeviceTool
import com.ydl.ydlcommon.utils.LogUtil import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.YDLCacheUtils import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
...@@ -53,6 +57,7 @@ class HttpConfig { ...@@ -53,6 +57,7 @@ class HttpConfig {
private const val YDL = "Ydl" private const val YDL = "Ydl"
private const val UID = "uid" private const val UID = "uid"
private const val FFROM = "ffrom" private const val FFROM = "ffrom"
private const val FID = "fid"
private const val IS_FROM_APP = "isFromApp" private const val IS_FROM_APP = "isFromApp"
private const val OS_BUILD = "osBuild" private const val OS_BUILD = "osBuild"
private const val TS = "ts" private const val TS = "ts"
...@@ -470,6 +475,17 @@ class HttpConfig { ...@@ -470,6 +475,17 @@ class HttpConfig {
builder.addHeader(TOKEN, loginBean.token) builder.addHeader(TOKEN, loginBean.token)
.addHeader(UID, loginBean.userId) .addHeader(UID, loginBean.userId)
} }
// 请求头添加fid参数
if (DeviceTool.checkHasAgreeSecret()) {
val deviceId = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
//获取imei
Utils.getIMEI(BaseApp.getApp())
} else {
//android Q及以上取oaid
DeviceIDHelper.getInstance().deviceId
}
builder.addHeader(FID, deviceId)
}
it.proceed(builder.build()) it.proceed(builder.build())
} }
} }
......
...@@ -2,7 +2,6 @@ package com.ydl.ydlcommon.utils; ...@@ -2,7 +2,6 @@ package com.ydl.ydlcommon.utils;
import static com.umeng.socialize.utils.ContextUtil.getPackageName; import static com.umeng.socialize.utils.ContextUtil.getPackageName;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.ComponentName; import android.content.ComponentName;
...@@ -21,7 +20,6 @@ import android.telephony.TelephonyManager; ...@@ -21,7 +20,6 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.ydl.ydlcommon.BuildConfig; import com.ydl.ydlcommon.BuildConfig;
import com.yidianling.common.tools.RxTool; import com.yidianling.common.tools.RxTool;
...@@ -108,41 +106,6 @@ public class DeviceTool { ...@@ -108,41 +106,6 @@ public class DeviceTool {
} }
/** /**
* 获取手机IMEI
*
* @return
*/
@SuppressLint("MissingPermission")
public static final String getIMEI() {
Activity topTaskActivity = ActivityManager.Companion.getInstance().getTopTaskActivity();
if (checkHasAgreeSecret()) {
try {
String imei = "";
RxPermissions rxPermissions = new RxPermissions(topTaskActivity);
if (rxPermissions.isGranted(Manifest.permission.READ_PHONE_STATE)) {
//实例化TelephonyManager对象
TelephonyManager telephonyManager = (TelephonyManager) topTaskActivity.getSystemService(Context.TELEPHONY_SERVICE);
if (null == telephonyManager) {
return "";
}
//获取IMEI号
imei = telephonyManager.getDeviceId();
if (imei == null) {
return "";
}
}
return RxTool.Md5(imei);
} catch (Exception e) {
e.printStackTrace();
return "";
}
} else {
return "";
}
}
/**
* 检查是否同意隐私协议 * 检查是否同意隐私协议
* */ * */
public static boolean checkHasAgreeSecret() { public static boolean checkHasAgreeSecret() {
......
...@@ -13,7 +13,6 @@ import android.net.Uri ...@@ -13,7 +13,6 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Environment import android.os.Environment
import android.os.PowerManager import android.os.PowerManager
import android.telephony.TelephonyManager
import android.text.TextUtils import android.text.TextUtils
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.util.Log import android.util.Log
...@@ -22,10 +21,10 @@ import android.view.View ...@@ -22,10 +21,10 @@ import android.view.View
import android.view.ViewConfiguration import android.view.ViewConfiguration
import android.view.WindowManager import android.view.WindowManager
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import java.io.File import java.io.File
import java.lang.reflect.Field import java.lang.reflect.Field
import java.text.NumberFormat import java.text.NumberFormat
/** /**
* Created by haorui on 2019-08-22 . * Created by haorui on 2019-08-22 .
* Des: 设备信息工具类 * Des: 设备信息工具类
...@@ -567,10 +566,6 @@ class DeviceUtils private constructor() { ...@@ -567,10 +566,6 @@ class DeviceUtils private constructor() {
context.startActivity(intent) context.startActivity(intent)
} }
fun getIMEI(context: Context): String {
val tel = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
return tel.deviceId
}
val phoneType: String val phoneType: String
get() = Build.MODEL get() = Build.MODEL
......
...@@ -38,7 +38,7 @@ public class FileUtils { ...@@ -38,7 +38,7 @@ public class FileUtils {
/** /**
* sd卡的根目录 * sd卡的根目录
*/ */
private static String mSdRootPath = Environment.getExternalStorageDirectory().getPath(); private static final String mSdRootPath = Environment.getExternalStorageDirectory().getPath();
/** /**
* 手机的缓存根目录 * 手机的缓存根目录
*/ */
...@@ -48,12 +48,8 @@ public class FileUtils { ...@@ -48,12 +48,8 @@ public class FileUtils {
*/ */
private final static String FOLDER_NAME = "/yidianling"; private final static String FOLDER_NAME = "/yidianling";
private static Context mContext;
public FileUtils(Context context) { public FileUtils(Context context) {
mDataRootPath = context.getCacheDir().getPath(); mDataRootPath = context.getCacheDir().getPath();
mContext = context;
} }
...@@ -77,9 +73,9 @@ public class FileUtils { ...@@ -77,9 +73,9 @@ public class FileUtils {
mSdRootPath : mDataRootPath; mSdRootPath : mDataRootPath;
} }
public File SaveBitmap(Bitmap mBitmap, String path) throws IOException { public static File saveBitmap(Bitmap mBitmap, String path) throws IOException {
File file; File file;
isFilleExit(path); isFileExit(path);
File f = new File(path); File f = new File(path);
try { try {
f.createNewFile(); f.createNewFile();
...@@ -100,7 +96,7 @@ public class FileUtils { ...@@ -100,7 +96,7 @@ public class FileUtils {
} }
public void SaveBitmap(Bitmap mBitmap, String path, String filen_name) throws IOException { public void SaveBitmap(Bitmap mBitmap, String path, String filen_name) throws IOException {
isFilleExit(path); isFileExit(path);
File f = new File(path + filen_name); File f = new File(path + filen_name);
try { try {
f.createNewFile(); f.createNewFile();
...@@ -174,13 +170,12 @@ public class FileUtils { ...@@ -174,13 +170,12 @@ public class FileUtils {
* @param path * @param path
* @return * @return
*/ */
public static boolean isFilleExit(String path) { public static boolean isFileExit(String path) {
Boolean isexit = false; boolean isexit = false;
File f = new File(path); File f = new File(path);
if (f.exists()) { if (f.exists()) {
isexit = true; isexit = true;
} else { } else {
isexit = false;
if (!f.exists()) { if (!f.exists()) {
try { try {
f.mkdirs(); f.mkdirs();
...@@ -196,7 +191,7 @@ public class FileUtils { ...@@ -196,7 +191,7 @@ public class FileUtils {
* 删除该目录下所有文件 * 删除该目录下所有文件
* @param root * @param root
*/ */
public void deleteAllFiles(File root) { public static void deleteAllFiles(File root) {
File files[] = root.listFiles(); File files[] = root.listFiles();
if (files != null) if (files != null)
for (File f : files) { for (File f : files) {
...@@ -224,7 +219,7 @@ public class FileUtils { ...@@ -224,7 +219,7 @@ public class FileUtils {
* @param imageFile * @param imageFile
* @return * @return
*/ */
public Uri getImageContentUri(Context context, File imageFile) { public static Uri getImageContentUri(Context context, File imageFile) {
String filePath = imageFile.getAbsolutePath(); String filePath = imageFile.getAbsolutePath();
Cursor cursor = context.getContentResolver().query( Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
...@@ -235,9 +230,11 @@ public class FileUtils { ...@@ -235,9 +230,11 @@ public class FileUtils {
if (cursor != null && cursor.moveToFirst()) { if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor int id = cursor.getInt(cursor
.getColumnIndex(MediaStore.MediaColumns._ID)); .getColumnIndex(MediaStore.MediaColumns._ID));
cursor.close();
Uri baseUri = Uri.parse("content://media/external/images/media"); Uri baseUri = Uri.parse("content://media/external/images/media");
return Uri.withAppendedPath(baseUri, "" + id); return Uri.withAppendedPath(baseUri, "" + id);
} else { } else {
if (cursor != null) cursor.close();
if (imageFile.exists()) { if (imageFile.exists()) {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, filePath); values.put(MediaStore.Images.Media.DATA, filePath);
......
...@@ -11,14 +11,12 @@ import android.text.TextUtils ...@@ -11,14 +11,12 @@ import android.text.TextUtils
import android.util.Log import android.util.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.devicesidlib.DeviceIDHelper import com.ydl.devicesidlib.DeviceIDHelper
import com.ydl.devicesidlib.Utils
import com.ydl.ydlcommon.base.BaseApp import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.data.http.api.ApiRequestUtil import com.ydl.ydlcommon.data.http.api.ApiRequestUtil
import com.ydl.ydlcommon.data.http.params.ActionDataBean import com.ydl.ydlcommon.data.http.params.ActionDataBean
import com.ydl.ydlcommon.data.http.params.BaiduActionDataBean import com.ydl.ydlcommon.data.http.params.BaiduActionDataBean
import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.router.YdlCommonOut import com.ydl.ydlcommon.router.YdlCommonOut
import com.ydl.ydlcommon.utils.ActivityManager
import com.ydl.ydlcommon.utils.DeviceTool import com.ydl.ydlcommon.utils.DeviceTool
import com.yidianling.common.tools.LogUtil import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxDeviceTool import com.yidianling.common.tools.RxDeviceTool
...@@ -145,21 +143,8 @@ class ActionCountUtils { ...@@ -145,21 +143,8 @@ class ActionCountUtils {
actionDataParams.osVersion(Build.VERSION.RELEASE) actionDataParams.osVersion(Build.VERSION.RELEASE)
actionDataParams.wifi(if (isWifi()) 0 else 1) actionDataParams.wifi(if (isWifi()) 0 else 1)
var deviceId = "" var deviceId = ""
/* if (DeviceTool.checkHasAgreeSecret()) {
* 因为DeviceIDHelper.getInstance().deviceId对于imei deviceId = DeviceIDHelper.getInstance().deviceId
* 序列号对于小米手机Utils.getIMEI(context)
* 第一次安装获取失败,第二次打开就能成功
* 所以Utils.getIMEI(topTaskActivity)传入activity解决这个问题
* */
if (DeviceTool.checkHasAgreeSecret()){
deviceId = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
val topTaskActivity = ActivityManager.getInstance().getTopTaskActivity()
//获取imei
Utils.getIMEI(topTaskActivity)
} else {
//android Q及以上取oaid
DeviceIDHelper.getInstance().deviceId
}
} }
actionDataParams.deviceId(deviceId) actionDataParams.deviceId(deviceId)
...@@ -263,22 +248,8 @@ class ActionCountUtils { ...@@ -263,22 +248,8 @@ class ActionCountUtils {
baiduActionDataParams.pkname = packageName baiduActionDataParams.pkname = packageName
baiduActionDataParams.deviceType = 2 baiduActionDataParams.deviceType = 2
var deviceId = "" var deviceId = ""
/*
* 因为DeviceIDHelper.getInstance().deviceId对于imei
* 序列号对于小米手机Utils.getIMEI(context)
* 第一次安装获取失败,第二次打开就能成功
* 所以Utils.getIMEI(topTaskActivity)传入activity解决这个问题
* */
if (DeviceTool.checkHasAgreeSecret()) { if (DeviceTool.checkHasAgreeSecret()) {
deviceId = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { deviceId = DeviceIDHelper.getInstance().deviceId
val topTaskActivity = ActivityManager.getInstance().getTopTaskActivity()
//获取imei
Utils.getIMEI(topTaskActivity)
} else {
//android Q及以上取oaid
DeviceIDHelper.getInstance().deviceId
}
} }
//外部参数添加deviceid //外部参数添加deviceid
actionDataParams.deviceId(deviceId) actionDataParams.deviceId(deviceId)
...@@ -355,18 +326,11 @@ class ActionCountUtils { ...@@ -355,18 +326,11 @@ class ActionCountUtils {
actionDataParams.api = api actionDataParams.api = api
actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp())) actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp()))
var deviceId = "" var deviceId = ""
if (DeviceTool.checkHasAgreeSecret()){ if (DeviceTool.checkHasAgreeSecret()) {
deviceId = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { deviceId = DeviceIDHelper.getInstance().deviceId
val topTaskActivity = ActivityManager.getInstance().getTopTaskActivity()
//获取imei
Utils.getIMEI(topTaskActivity)
} else {
//android Q及以上取oaid
DeviceIDHelper.getInstance().deviceId
}
} }
actionDataParams.deviceId=deviceId actionDataParams.deviceId = deviceId
actionDataParams.time(System.currentTimeMillis()) actionDataParams.time(System.currentTimeMillis())
actionDataParams.appId(appId) actionDataParams.appId(appId)
...@@ -406,14 +370,7 @@ class ActionCountUtils { ...@@ -406,14 +370,7 @@ class ActionCountUtils {
actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp())) actionDataParams.appVersion(RxDeviceTool.getAppVersionName(BaseApp.getApp()))
var deviceId = "" var deviceId = ""
if (DeviceTool.checkHasAgreeSecret()) { if (DeviceTool.checkHasAgreeSecret()) {
deviceId = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { deviceId = DeviceIDHelper.getInstance().deviceId
val topTaskActivity = ActivityManager.getInstance().getTopTaskActivity()
//获取imei
Utils.getIMEI(topTaskActivity)
} else {
//android Q及以上取oaid
DeviceIDHelper.getInstance().deviceId
}
} }
actionDataParams.deviceId = deviceId actionDataParams.deviceId = deviceId
......
...@@ -21,6 +21,7 @@ import com.ydl.ydlcommon.R; ...@@ -21,6 +21,7 @@ import com.ydl.ydlcommon.R;
public class DeleteEditTextView extends EditText { public class DeleteEditTextView extends EditText {
int mCloseAreaSize; int mCloseAreaSize;
private boolean mShowDelete = true;
public DeleteEditTextView(Context context) { public DeleteEditTextView(Context context) {
super(context); super(context);
...@@ -43,6 +44,10 @@ public class DeleteEditTextView extends EditText { ...@@ -43,6 +44,10 @@ public class DeleteEditTextView extends EditText {
setSelection(text.length()); setSelection(text.length());
} }
public void setShowDelete(boolean showDelete) {
this.mShowDelete = showDelete;
}
/** /**
* 初始化视图 * 初始化视图
*/ */
...@@ -77,6 +82,7 @@ public class DeleteEditTextView extends EditText { ...@@ -77,6 +82,7 @@ public class DeleteEditTextView extends EditText {
} }
void setEditTextDrawable() { void setEditTextDrawable() {
if (!mShowDelete) return;
if (getText().length() == 0 || !isFocused()) { if (getText().length() == 0 || !isFocused()) {
setCompoundDrawablesWithIntrinsicBounds(getCompoundDrawables()[0], null, null, null); setCompoundDrawablesWithIntrinsicBounds(getCompoundDrawables()[0], null, null, null);
} else { } else {
...@@ -87,7 +93,7 @@ public class DeleteEditTextView extends EditText { ...@@ -87,7 +93,7 @@ public class DeleteEditTextView extends EditText {
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
if ((event.getAction() == 1) && isFocused()) { if (mShowDelete && (event.getAction() == 1) && isFocused()) {
int i = (int) event.getRawX(); int i = (int) event.getRawX();
if (i > getRight() - mCloseAreaSize) { if (i > getRight() - mCloseAreaSize) {
setText(""); setText("");
......
...@@ -63,15 +63,11 @@ public class ListNoCancelDialog extends Dialog { ...@@ -63,15 +63,11 @@ public class ListNoCancelDialog extends Dialog {
return this; return this;
} }
public ListNoCancelDialog.Builder SetOnItemClickLister(ListNoCancelDialog.Builder.OnItemClickLister lister) { public ListNoCancelDialog.Builder setOnItemClickLister(ListNoCancelDialog.Builder.OnItemClickLister lister) {
this.mOnItemClickLister = lister; this.mOnItemClickLister = lister;
return this; return this;
} }
public ListNoCancelDialog create() { public ListNoCancelDialog create() {
LayoutInflater inflater = (LayoutInflater) context LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
......
...@@ -38,6 +38,8 @@ public class TitleBar extends RelativeLayout { ...@@ -38,6 +38,8 @@ public class TitleBar extends RelativeLayout {
int buttom_color; int buttom_color;
//左侧图标颜色 //左侧图标颜色
int mLeftStartIconColor ; int mLeftStartIconColor ;
//下划线是否可见
private boolean mDividerVisibility;
//文字内容 //文字内容
String mLeftText, mTitle, mRightText; String mLeftText, mTitle, mRightText;
...@@ -196,26 +198,27 @@ public class TitleBar extends RelativeLayout { ...@@ -196,26 +198,27 @@ public class TitleBar extends RelativeLayout {
void initRoot(AttributeSet attrs, int defStyleAttr) { void initRoot(AttributeSet attrs, int defStyleAttr) {
final TypedArray a = getContext().obtainStyledAttributes( final TypedArray a = getContext().obtainStyledAttributes(
attrs, R.styleable.Platform_TitleBar, defStyleAttr, 0); attrs, R.styleable.TitleBar, defStyleAttr, 0);
mLeftText = a.getString(R.styleable.Platform_TitleBar_pa_left_text); mLeftText = a.getString(R.styleable.TitleBar_pa_left_text);
mLeftStartIcon = a.getDrawable(R.styleable.Platform_TitleBar_pa_left_start_icon); mLeftStartIcon = a.getDrawable(R.styleable.TitleBar_pa_left_start_icon);
mLeftEndIcon = a.getDrawable(R.styleable.Platform_TitleBar_pa_left_end_icon); mLeftEndIcon = a.getDrawable(R.styleable.TitleBar_pa_left_end_icon);
mRight = a.getDrawable(R.styleable.Platform_TitleBar_pa_right_iv); mRight = a.getDrawable(R.styleable.TitleBar_pa_right_iv);
mTitle = a.getString(R.styleable.Platform_TitleBar_pa_title_text); mTitle = a.getString(R.styleable.TitleBar_pa_title_text);
mRightText = a.getString(R.styleable.Platform_TitleBar_pa_right_text); mRightText = a.getString(R.styleable.TitleBar_pa_right_text);
mRightStartIcon = a.getDrawable(R.styleable.Platform_TitleBar_pa_right_start_icon); mRightStartIcon = a.getDrawable(R.styleable.TitleBar_pa_right_start_icon);
mRightEndIcon = a.getDrawable(R.styleable.Platform_TitleBar_pa_right_end_icon); mRightEndIcon = a.getDrawable(R.styleable.TitleBar_pa_right_end_icon);
mTextColor = a.getColor(R.styleable.Platform_TitleBar_pa_title_bar_text_color, 0xff3c3c3c); mTextColor = a.getColor(R.styleable.TitleBar_pa_title_bar_text_color, 0xff3c3c3c);
mSideTextColor = a.getColor(R.styleable.Platform_TitleBar_pa_side_text_color, 0xff3c3c3c); mSideTextColor = a.getColor(R.styleable.TitleBar_pa_side_text_color, 0xff3c3c3c);
//底部线颜色 //底部线颜色
buttom_color = a.getColor(R.styleable.Platform_TitleBar_pa_bm_line_color, getResources().getColor(R.color.platform_divide_color)); buttom_color = a.getColor(R.styleable.TitleBar_pa_bm_line_color, getResources().getColor(R.color.platform_divide_color));
//左侧图标颜色 //左侧图标颜色
mLeftStartIconColor = a.getColor(R.styleable.Platform_TitleBar_pa_left_start_icon_color, 0xffffff); mLeftStartIconColor = a.getColor(R.styleable.TitleBar_pa_left_start_icon_color, 0xffffff);
mDividerVisibility = a.getBoolean(R.styleable.TitleBar_pa_divide_visibility, true);
a.recycle(); a.recycle();
setGravity(Gravity.CENTER_VERTICAL); setGravity(Gravity.CENTER_VERTICAL);
...@@ -256,6 +259,7 @@ public class TitleBar extends RelativeLayout { ...@@ -256,6 +259,7 @@ public class TitleBar extends RelativeLayout {
//底部线 //底部线
iv_title_divide.setBackgroundColor(buttom_color); iv_title_divide.setBackgroundColor(buttom_color);
iv_title_divide.setVisibility(mDividerVisibility ? View.VISIBLE : View.GONE);
//设置点击事件 //设置点击事件
setupTextClick(); setupTextClick();
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<resources> <resources>
<!--头部bar--> <!--头部bar-->
<declare-styleable name="Platform_TitleBar"> <declare-styleable name="TitleBar">
<attr name="pa_left_text" /> <attr name="pa_left_text" />
<attr name="pa_left_start_icon" format="reference" /> <attr name="pa_left_start_icon" format="reference" />
<attr name="pa_left_end_icon" format="reference" /> <attr name="pa_left_end_icon" format="reference" />
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
<attr name="pa_bm_line_color" format="color" /> <attr name="pa_bm_line_color" format="color" />
<attr name="pa_right_iv" format="reference" /> <attr name="pa_right_iv" format="reference" />
<attr name="pa_left_start_icon_color" format="color" /> <attr name="pa_left_start_icon_color" format="color" />
<attr name="pa_divide_visibility" format="boolean" />
</declare-styleable> </declare-styleable>
<attr name="pa_left_text" format="string" /> <attr name="pa_left_text" format="string" />
<attr name="pa_right_text" format="string" /> <attr name="pa_right_text" format="string" />
......
...@@ -127,9 +127,14 @@ ...@@ -127,9 +127,14 @@
<color name="color_1C1F28">#1C1F28</color> <color name="color_1C1F28">#1C1F28</color>
<color name="color_1DA1F2">#1DA1F2</color> <color name="color_1DA1F2">#1DA1F2</color>
<color name="color_EB892C">#EB892C</color> <color name="color_EB892C">#EB892C</color>
<color name="color_9D9EA7">#9D9EA7</color>
<color name="color_EFEFF1">#EFEFF1</color> <color name="color_EFEFF1">#EFEFF1</color>
<color name="color_FAFAFF">#FAFAFF</color> <color name="color_FAFAFF">#FAFAFF</color>
<color name="color_242424">#242424</color> <color name="color_242424">#242424</color>
<color name="color_9d9ea7">#9D9EA7</color>
<color name="color_C3C4CA">#C3C4CA</color>
<color name="color_2E2E30">#2E2E30</color>
<color name="color_191919">#191919</color>
<color name="color_E5E5E5">#E5E5E5</color>
<color name="color_F7F7FA">#F7F7FA</color>
<color name="color_62636F">#62636F</color>
</resources> </resources>
package com.ydl.utils;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.PopupWindow;
import com.ydl.view.MoreClickView;
import com.ydl.webview.IJavascriptHandler;
/**
* Created by Wi1ls on 2016/10/17;
*/
public class PopUtils {
public static PopupWindow showMoreItem(Context context, View view, IJavascriptHandler jtoJHandle){
MoreClickView v= new MoreClickView(context,jtoJHandle);
WindowManager windowManager= (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
final PopupWindow popupWindow=new PopupWindow(v, windowManager.getDefaultDisplay().getWidth(),
windowManager.getDefaultDisplay().getHeight());
v.setPopupWindow(popupWindow);
popupWindow.setFocusable(false);
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.showAtLocation(view, Gravity.CENTER,0,0);
return popupWindow;
}
}
...@@ -7,6 +7,7 @@ import android.text.TextUtils ...@@ -7,6 +7,7 @@ import android.text.TextUtils
import android.view.View import android.view.View
import android.widget.PopupWindow import android.widget.PopupWindow
import android.widget.RelativeLayout import android.widget.RelativeLayout
import com.alibaba.android.arouter.launcher.ARouter
import com.ydl.webview.IJavascriptHandler import com.ydl.webview.IJavascriptHandler
import com.ydl.webview.R import com.ydl.webview.R
import com.ydl.ydlcommon.base.config.ChannelConfig import com.ydl.ydlcommon.base.config.ChannelConfig
...@@ -20,12 +21,17 @@ import kotlinx.android.synthetic.main.web_ui_new_more.view.* ...@@ -20,12 +21,17 @@ import kotlinx.android.synthetic.main.web_ui_new_more.view.*
/** /**
* Created by Wi1ls on 2016/10/17; * Created by Wi1ls on 2016/10/17;
*/ */
class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : RelativeLayout(context), View.OnClickListener { class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : RelativeLayout(context),
private var mJtoJHandle: IJavascriptHandler?= jtoJHandle View.OnClickListener {
private var mJtoJHandle: IJavascriptHandler? = jtoJHandle
private var mPopupWindow: PopupWindow? = null private var mPopupWindow: PopupWindow? = null
private val work_time = if (PlatformDataManager.getRam().getGlobalInfo() == null) "早8:30-凌晨2:00" else PlatformDataManager.getRam().getGlobalInfo()?.info?.work_time private val work_time = if (PlatformDataManager.getRam()
private val tel = if (PlatformDataManager.getRam().getGlobalInfo() == null) "400-765-1010" else PlatformDataManager.getRam().getGlobalInfo()?.info?.tel .getGlobalInfo() == null
) "早8:30-凌晨2:00" else PlatformDataManager.getRam().getGlobalInfo()?.info?.work_time
private val tel = if (PlatformDataManager.getRam()
.getGlobalInfo() == null
) "400-765-1010" else PlatformDataManager.getRam().getGlobalInfo()?.info?.tel
init { init {
View.inflate(context, R.layout.web_ui_new_more, this) View.inflate(context, R.layout.web_ui_new_more, this)
...@@ -33,38 +39,37 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative ...@@ -33,38 +39,37 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative
} }
internal fun init() { internal fun init() {
fl_main.setOnClickListener(this) if (mJtoJHandle?.setMoreMsg() != null) {
if(mJtoJHandle?.setMoreMsg()!=null){
more_msg.setOnClickListener(mJtoJHandle?.setMoreMsg()) more_msg.setOnClickListener(mJtoJHandle?.setMoreMsg())
}else{ } else {
more_msg.setOnClickListener(this) more_msg.setOnClickListener(this)
} }
if(mJtoJHandle?.setMoreHomePage()!=null){ if (mJtoJHandle?.setMoreHomePage() != null) {
more_homepage.setOnClickListener(mJtoJHandle?.setMoreHomePage()) more_homepage.setOnClickListener(mJtoJHandle?.setMoreHomePage())
}else{ } else {
more_homepage.setOnClickListener(this) more_homepage.setOnClickListener(this)
} }
if(mJtoJHandle?.setMoreService()!=null){ if (mJtoJHandle?.setMoreService() != null) {
more_service.setOnClickListener(mJtoJHandle?.setMoreService()) more_service.setOnClickListener(mJtoJHandle?.setMoreService())
}else{ } else {
more_service.setOnClickListener(this) more_service.setOnClickListener(this)
} }
if(mJtoJHandle?.setMoreCall()!=null){ if (mJtoJHandle?.setMoreCall() != null) {
more_ray.setOnClickListener(mJtoJHandle?.setMoreCall()) more_ray.setOnClickListener(mJtoJHandle?.setMoreCall())
}else{ } else {
more_ray.setOnClickListener(this) more_ray.setOnClickListener(this)
} }
more_feed.setOnClickListener(this)
/* if (YdlCommonRouterManager.getYdlCommonRoute().isHasUnread()) { /* if (YdlCommonRouterManager.getYdlCommonRoute().isHasUnread()) {
msg_new.setVisibility(View.VISIBLE) msg_new.setVisibility(View.VISIBLE)
} else { } else {
msg_new.setVisibility(View.INVISIBLE) msg_new.setVisibility(View.INVISIBLE)
}*/ }*/
var unreadNum = ModularServiceManager.provide(IImService::class.java).getAllUnReadNum() val unreadNum = ModularServiceManager.provide(IImService::class.java).getAllUnReadNum()
if (unreadNum <= 0) { if (unreadNum <= 0) {
un_read_num.visibility = View.GONE un_read_num.visibility = View.GONE
} } else {
else {
if (unreadNum > 99) { if (unreadNum > 99) {
un_read_num.text = "${unreadNum}+" un_read_num.text = "${unreadNum}+"
} else { } else {
...@@ -80,8 +85,6 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative ...@@ -80,8 +85,6 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative
mPopupWindow!!.dismiss() mPopupWindow!!.dismiss()
} }
when (view.id) { when (view.id) {
R.id.fl_main -> {
}
R.id.more_msg -> { R.id.more_msg -> {
setMoreMsg() setMoreMsg()
} }
...@@ -94,6 +97,9 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative ...@@ -94,6 +97,9 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative
R.id.more_ray -> { R.id.more_ray -> {
setMoreRay() setMoreRay()
} }
R.id.more_feed -> {
ARouter.getInstance().build("/mine/FeedBackActivity").navigation()
}
} }
} }
...@@ -126,16 +132,6 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative ...@@ -126,16 +132,6 @@ class MoreClickView(context: Context, jtoJHandle: IJavascriptHandler) : Relative
}.show() }.show()
} }
private var callBack: CallPhoneCallBack? = null
fun setCallPhoneCallBack(callBack: CallPhoneCallBack) {
this.callBack = callBack
}
interface CallPhoneCallBack {
fun call(tel: String, action: String)
}
fun setPopupWindow(popupWindow: PopupWindow) { fun setPopupWindow(popupWindow: PopupWindow) {
mPopupWindow = popupWindow mPopupWindow = popupWindow
} }
......
...@@ -18,8 +18,10 @@ import android.os.Bundle; ...@@ -18,8 +18,10 @@ import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.PopupWindow; import android.widget.PopupWindow;
...@@ -37,10 +39,10 @@ import com.tencent.smtt.sdk.WebView; ...@@ -37,10 +39,10 @@ import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient; import com.tencent.smtt.sdk.WebViewClient;
import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.bean.SHARE_MEDIA;
import com.ydl.utils.PopUtils;
import com.ydl.utils.ProxyCheckUtils; import com.ydl.utils.ProxyCheckUtils;
import com.ydl.utils.WebUrlParamsUtils; import com.ydl.utils.WebUrlParamsUtils;
import com.ydl.view.ArticleDialogFragment; import com.ydl.view.ArticleDialogFragment;
import com.ydl.view.MoreClickView;
import com.ydl.view.ShareMeditationDialog; import com.ydl.view.ShareMeditationDialog;
import com.ydl.ydl_router.manager.YDLRouterManager; import com.ydl.ydl_router.manager.YDLRouterManager;
import com.ydl.ydlcommon.base.BaseActivity; import com.ydl.ydlcommon.base.BaseActivity;
...@@ -131,8 +133,6 @@ public class NewH5Activity extends BaseActivity implements PtrHandler { ...@@ -131,8 +133,6 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
private ShareMeditationDialog shareMeditationDialog; private ShareMeditationDialog shareMeditationDialog;
private ArticleDialogFragment commentArticleDialog; private ArticleDialogFragment commentArticleDialog;
protected PopupWindow popupWindow;
protected ValueCallback<Uri> uploadMessage; protected ValueCallback<Uri> uploadMessage;
protected ValueCallback<Uri[]> uploadMessageAboveL; protected ValueCallback<Uri[]> uploadMessageAboveL;
private boolean shouldClearHistory = false; private boolean shouldClearHistory = false;
...@@ -536,8 +536,12 @@ public class NewH5Activity extends BaseActivity implements PtrHandler { ...@@ -536,8 +536,12 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
} }
public void openRightTopMenu() { public void openRightTopMenu() {
popupWindow = PopUtils.showMoreItem(this, MoreClickView moreView = new MoreClickView(this, jtoJHandle);
tb_title.getRootView(), jtoJHandle); PopupWindow popupWindow = new PopupWindow(moreView, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
moreView.setPopupWindow(popupWindow);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true); // 防止外部点击事件穿透
popupWindow.showAtLocation(tb_title, Gravity.TOP | Gravity.END, 0, 0);
} }
public void openShareMenu(H5JsBean.H5JsCmd.Params params) { public void openShareMenu(H5JsBean.H5JsCmd.Params params) {
...@@ -641,8 +645,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler { ...@@ -641,8 +645,7 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
purl = intent.getStringExtra("purl"); purl = intent.getStringExtra("purl");
//要加"more"按钮 //要加"more"按钮
if (h5Params.isShowMenu()) { if (h5Params.isShowMenu()) {
tb_title.setRightImageListener(v -> popupWindow = PopUtils.showMoreItem(this, tb_title.setRightImageListener(v -> openRightTopMenu());
tb_title.getRootView(), jtoJHandle));
tb_title.setRightImageIfShouldSee(); tb_title.setRightImageIfShouldSee();
} else { } else {
tb_title.setRightImageIfNoSee(); tb_title.setRightImageIfNoSee();
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="8dp"/>
<solid android:color="@android:color/white"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fl_main" android:layout_width="145dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="150dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:layout_marginTop="44dp"
android:layout_gravity="right" android:layout_marginEnd="10dp"
android:background="@drawable/bg_corner_8_white"
android:elevation="4dp" android:elevation="4dp"
android:background="@color/platform_white" android:orientation="vertical">
android:layout_marginTop="55dp"
android:layout_marginRight="5dp">
<LinearLayout <LinearLayout
android:id="@+id/more_msg" android:id="@+id/more_msg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="48dp"
android:orientation="horizontal" android:paddingStart="20dp"
android:gravity="center_vertical"> android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="19dp" android:layout_marginEnd="17dp"
android:layout_marginRight="15dp" android:src="@drawable/platform_ic_pop_news" />
android:src="@drawable/platform_ic_pop_news"/>
<TextView <TextView
android:id="@+id/tv_msg" android:id="@+id/tv_msg"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="17sp"
android:text="消息" android:text="消息"
android:textColor="#333333"/> android:textColor="@color/platform_color_333333"
android:textSize="14sp" />
<TextView <TextView
android:id="@+id/un_read_num" android:id="@+id/un_read_num"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="14dp" android:layout_height="14dp"
android:layout_marginStart="5dp"
android:background="@drawable/web_message_num_bg"
android:gravity="center"
android:minWidth="14dp" android:minWidth="14dp"
android:textSize="10dp"
tools:text="10"
android:textColor="#ffffff"
android:paddingLeft="3dp" android:paddingLeft="3dp"
android:paddingRight="3dp" android:paddingRight="3dp"
android:gravity="center" android:textColor="#ffffff"
android:background="@drawable/web_message_num_bg" android:textSize="11sp"
android:layout_marginLeft="5dp"/> tools:text="10" />
</LinearLayout> </LinearLayout>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="0.5dp"
android:background="#e5e5e5" android:background="@color/color_E5E5E5" />
android:layout_marginRight="2dp"/>
<LinearLayout <LinearLayout
android:id="@+id/more_homepage" android:id="@+id/more_homepage"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="48dp"
android:orientation="horizontal" android:paddingStart="20dp"
android:gravity="center_vertical"> android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="19dp" android:layout_marginEnd="17dp"
android:layout_marginRight="15dp" android:src="@drawable/platform_ic_pop_home" />
android:src="@drawable/platform_ic_pop_home"/>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="17sp"
android:text="首页" android:text="首页"
android:textColor="#333333"/> android:textColor="@color/platform_color_333333"
android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="0.5dp"
android:background="#e5e5e5" android:background="@color/color_E5E5E5" />
android:layout_marginRight="2dp"/>
<LinearLayout <LinearLayout
android:id="@+id/more_service" android:id="@+id/more_service"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="48dp"
android:orientation="horizontal" android:paddingStart="20dp"
android:gravity="center_vertical"> android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="19dp" android:layout_marginEnd="17dp"
android:layout_marginRight="15dp" android:src="@drawable/platform_ic_pop_kefu" />
android:src="@drawable/platform_ic_pop_kefu"/>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="17sp"
android:text="在线客服" android:text="在线客服"
android:textColor="#333333"/> android:textColor="@color/platform_color_333333"
android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="0.5dp"
android:background="#e5e5e5" android:background="@color/color_E5E5E5" />
android:layout_marginRight="2dp"/>
<LinearLayout <LinearLayout
android:id="@+id/more_ray" android:id="@+id/more_ray"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="48dp"
android:orientation="horizontal" android:paddingStart="20dp"
android:gravity="center_vertical"> android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="24dp"
android:layout_height="wrap_content" android:layout_height="24dp"
android:layout_marginLeft="19dp" android:layout_marginEnd="17dp"
android:layout_marginRight="15dp" android:src="@drawable/platform_ic_pop_phone" />
android:src="@drawable/platform_ic_pop_phone"/>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="17sp"
android:text="免费热线" android:text="免费热线"
android:textColor="#333333"/> android:textColor="@color/platform_color_333333"
android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/color_E5E5E5" />
<LinearLayout
android:id="@+id/more_feed"
android:layout_width="match_parent"
android:layout_height="48dp"
android:paddingStart="20dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginEnd="19dp"
android:src="@drawable/platform_ic_pop_feed" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="投诉与反馈"
android:textColor="@color/platform_color_333333"
android:textSize="14sp" />
</LinearLayout> </LinearLayout>
</FrameLayout> </LinearLayout>
\ No newline at end of file
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