From 036f27a415fb43f186c9f6bade482f8d2a63763d Mon Sep 17 00:00:00 2001 From: 18142669586 <1669783059@qq.com> Date: Fri, 26 Aug 2022 13:00:45 +0800 Subject: [PATCH] 111 --- app/agconnect-services.json | 92 ++++++ app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 42 ++- .../java/com/shayu/phonelive/AppContext.java | 6 +- .../phonelive/activity/LauncherActivity.java | 29 +- .../utils/CustomMessageReceiver.java | 282 ++++++++++++++++++ .../utils/MyNotificationService.java | 92 ++++-- app/src/main/res/drawable/small_icons.png | Bin 0 -> 1582 bytes app/src/main/res/raw/pdlive_sound.mp3 | Bin 0 -> 73949 bytes common/build.gradle | 2 +- .../com/yunbao/common/CommonAppContext.java | 17 ++ .../common/bean/MsgSwitchDetailModel.java | 60 ++++ .../common/bean/MsgSwitchFollowlModel.java | 46 +++ .../common/bean/NotificationMsgBean.java | 58 ++++ .../com/yunbao/common/http/PDLiveApi.java | 21 ++ .../common/http/main/MainNetManager.java | 63 ++++ .../imrongcloud/RongcloudIMManager.java | 1 + .../main/res/layout/notification_message.xml | 17 +- .../yunbao/live/activity/LiveActivity.java | 1 - .../live/activity/LiveAudienceActivity.java | 1 - .../yunbao/live/socket/SocketChatUtil.java | 20 +- .../yunbao/live/socket/SocketRyChatUtil.java | 4 +- .../live/views/LivePlayRyViewHolder.java | 1 + .../yunbao/main/activity/GoogleFragment.java | 5 +- .../yunbao/main/activity/MainActivity.java | 72 +++++ .../yunbao/main/activity/MsgSettActivity.java | 213 +++++++++++++ .../yunbao/main/adapter/MsgFollowAdapter.java | 124 ++++++++ .../src/main/res/layout/activity_msg_sett.xml | 31 +- main/src/main/res/layout/item_msg_follow.xml | 40 +++ 29 files changed, 1262 insertions(+), 80 deletions(-) create mode 100644 app/agconnect-services.json create mode 100644 app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java create mode 100644 app/src/main/res/drawable/small_icons.png create mode 100644 app/src/main/res/raw/pdlive_sound.mp3 create mode 100644 common/src/main/java/com/yunbao/common/bean/MsgSwitchDetailModel.java create mode 100644 common/src/main/java/com/yunbao/common/bean/MsgSwitchFollowlModel.java create mode 100644 common/src/main/java/com/yunbao/common/bean/NotificationMsgBean.java create mode 100644 main/src/main/java/com/yunbao/main/adapter/MsgFollowAdapter.java create mode 100644 main/src/main/res/layout/item_msg_follow.xml diff --git a/app/agconnect-services.json b/app/agconnect-services.json new file mode 100644 index 000000000..34dcec94e --- /dev/null +++ b/app/agconnect-services.json @@ -0,0 +1,92 @@ +{ + "agcgw":{ + "backurl":"connect-drcn.hispace.hicloud.com", + "url":"connect-drcn.dbankcloud.cn", + "websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com", + "websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn" + }, + "agcgw_all":{ + "CN":"connect-drcn.dbankcloud.cn", + "CN_back":"connect-drcn.hispace.hicloud.com", + "DE":"connect-dre.dbankcloud.cn", + "DE_back":"connect-dre.hispace.hicloud.com", + "RU":"connect-drru.hispace.dbankcloud.ru", + "RU_back":"connect-drru.hispace.dbankcloud.cn", + "SG":"connect-dra.dbankcloud.cn", + "SG_back":"connect-dra.hispace.hicloud.com" + }, + "websocketgw_all":{ + "CN":"connect-ws-drcn.hispace.dbankcloud.cn", + "CN_back":"connect-ws-drcn.hispace.dbankcloud.com", + "DE":"connect-ws-dre.hispace.dbankcloud.cn", + "DE_back":"connect-ws-dre.hispace.dbankcloud.com", + "RU":"connect-ws-drru.hispace.dbankcloud.ru", + "RU_back":"connect-ws-drru.hispace.dbankcloud.cn", + "SG":"connect-ws-dra.hispace.dbankcloud.cn", + "SG_back":"connect-ws-dra.hispace.dbankcloud.com" + }, + "client":{ + "cp_id":"30086000612391734", + "product_id":"99536292102564216", + "client_id":"964994320723627840", + "client_secret":"6D5FE29D85B967D3A66BDCD473641E4C7B5524F7F4935CA0EF4A842730C3402D", + "project_id":"99536292102564216", + "app_id":"106936673", + "api_key":"DAEDADYGta/0O4ZSdrnug52NgC67/w/RIyTq9A8LyAY0+mp6g6XeJDbxugpluFPLAhaqjaMs5c0PLnRx14UzWbPPADgi1EqihbWLoA==", + "package_name":"com.pdlive.shayu" + }, + "oauth_client":{ + "client_id":"106936673", + "client_type":1 + }, + "app_info":{ + "app_id":"106936673", + "package_name":"com.pdlive.shayu" + }, + "service":{ + "analytics":{ + "collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn", + "collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com", + "collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn", + "collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn", + "collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn", + "resource_id":"p1", + "channel_id":"" + }, + "search":{ + "url":"https://search-drcn.cloud.huawei.com" + }, + "cloudstorage":{ + "storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia", + "storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru", + "storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru", + "storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu", + "storage_url_de":"https://ops-dre.agcstorage.link", + "storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn", + "storage_url_sg":"https://ops-dra.agcstorage.link", + "storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn", + "storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn" + }, + "ml":{ + "mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn" + } + }, + "region":"CN", + "configuration_version":"3.0", + "appInfos":[ + { + "package_name":"com.pdlive.shayu", + "client":{ + "app_id":"106936673" + }, + "app_info":{ + "package_name":"com.pdlive.shayu", + "app_id":"106936673" + }, + "oauth_client":{ + "client_type":1, + "client_id":"106936673" + } + } + ] +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 59eb31b94..2896af99a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -110,4 +110,6 @@ dependencies { //短视频 api project(':video') annotationProcessor rootProject.ext.dependencies["arouter-compiler"] + + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fa8da8be4..f11913b70 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -91,20 +91,20 @@ android:theme="@style/AppTheme" android:usesCleartextTraffic="true" tools:replace="theme,label,icon,allowBackup"> - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/shayu/phonelive/AppContext.java b/app/src/main/java/com/shayu/phonelive/AppContext.java index 9e8a813e1..b0082ba72 100644 --- a/app/src/main/java/com/shayu/phonelive/AppContext.java +++ b/app/src/main/java/com/shayu/phonelive/AppContext.java @@ -120,11 +120,6 @@ public class AppContext extends CommonAppContext { } ARouter.init(this); - //谷歌推送 - PushConfig gconfig = new PushConfig.Builder() - .enableFCM(true) - .build(); - RongPushClient.setPushConfig(gconfig); //初始化 邀请码库 if (isMainProcess()) { @@ -194,6 +189,7 @@ public class AppContext extends CommonAppContext { } }); + //监听im消息 V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() { @Override diff --git a/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java b/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java index aa2fd57ee..f04f54a46 100644 --- a/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java +++ b/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java @@ -31,6 +31,8 @@ import com.tencent.rtmp.TXLivePlayer; import com.tencent.rtmp.ui.TXCloudVideoView; import com.tencent.ugc.TXUGCBase; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; +import com.yunbao.common.activity.WebViewActivity; import com.yunbao.common.bean.AdBean; import com.yunbao.common.bean.ConfigBean; import com.yunbao.common.bean.IMLoginModel; @@ -40,6 +42,7 @@ import com.yunbao.common.event.DataUserInfoEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.CommonHttpUtil; +import com.yunbao.common.http.HttpCallback; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; @@ -50,11 +53,17 @@ import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; +import com.yunbao.live.activity.LiveAudienceActivity; +import com.yunbao.live.bean.LiveBean; +import com.yunbao.live.http.LiveHttpUtil; +import com.yunbao.live.presenter.LiveRoomCheckLivePresenter; import com.yunbao.live.views.LauncherAdViewHolder; import com.yunbao.main.activity.EntryActivity; import com.yunbao.main.activity.MainActivity; +import com.yunbao.main.activity.PDLiveConversationListActivity; import com.yunbao.main.http.MainHttpConsts; import com.yunbao.main.http.MainHttpUtil; +import com.yunbao.main.manager.imrongcloud.ConversationIMListManager; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -78,8 +87,8 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL private static final String TAG = "LauncherActivity"; private static final int WHAT_GET_CONFIG = 0; private static final int WHAT_COUNT_DOWN = 1; - private Handler mHandler; protected Context mContext; + private Handler mHandler; private ViewGroup mRoot; private ImageView mCover; private ViewGroup mContainer; @@ -261,11 +270,25 @@ public class LauncherActivity extends AppCompatActivity implements View.OnClickL */ private void forwardMainActivity() { releaseVideo(); - MainActivity.forward(mContext); + Intent intent = new Intent( + LauncherActivity.this, MainActivity.class); + intent.putExtra(Constants.SHOW_INVITE, false); + + if (getIntent().getStringExtra("liveid") != null) { + intent.putExtra("liveid", getIntent().getStringExtra("liveid")); + } + if (getIntent().getStringExtra("type") != null) { + intent.putExtra("type", getIntent().getStringExtra("type")); + } + + if (getIntent().getStringExtra("activityUrl") != null) { + intent.putExtra("activityUrl", getIntent().getStringExtra("activityUrl")); + } + + LauncherActivity.this.startActivity(intent); finish(); } - @Override protected void onDestroy() { EventBus.getDefault().unregister(this); diff --git a/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java b/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java new file mode 100644 index 000000000..7da523062 --- /dev/null +++ b/app/src/main/java/com/shayu/phonelive/utils/CustomMessageReceiver.java @@ -0,0 +1,282 @@ +package com.shayu.phonelive.utils; + +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.RectF; +import android.net.Uri; +import android.util.Log; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RemoteViews; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.target.Target; +import com.bumptech.glide.request.transition.Transition; +import com.makeramen.roundedimageview.RoundedImageView; +import com.shayu.phonelive.activity.LauncherActivity; +import com.yunbao.common.bean.NotificationMsgBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.main.activity.MainActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +import io.rong.imlib.ConnectChangeReceiver; +import io.rong.push.PushType; +import io.rong.push.notification.PushMessageReceiver; +import io.rong.push.notification.PushNotificationMessage; +import myname.pdlive.shayu.R; + +public class CustomMessageReceiver extends PushMessageReceiver { + + + private String createNotificationChannel(Context context, String channelID, String channelNAME, int level) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + NotificationManager manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); + NotificationChannel channel = new NotificationChannel(channelID, channelNAME, level); + channel.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/raw/pdlive_sound"),null); + manager.createNotificationChannel(channel); + return channelID; + } else { + return null; + } + } + + @Override + public boolean onNotificationMessageClicked( + Context context, PushType pushType, PushNotificationMessage message) { + if (pushType.equals(PushType.GOOGLE_FCM)) { + + Log.i("gmc", "gmc"); + + // TODO + } else { + Log.i("gmc", "gmc1111"); + } + // 返回 true 表示拦截,false 为不拦截 + return true; + } + + + NotificationMsgBean msg = new NotificationMsgBean(); + + @Override + public boolean onNotificationMessageArrived(Context context, PushType pushType, PushNotificationMessage notificationMessage) { + Log.i("gmc", notificationMessage.getPushContent() + "VVV" + notificationMessage.getPushTitle() + "gmc11112222" + notificationMessage.getExtra()); + if (notificationMessage.getExtra() == null) { + msg.setImg("" + notificationMessage.getSenderPortrait()); + msg.setTitle(notificationMessage.getPushTitle()); + msg.setContent(notificationMessage.getPushContent()); + msg.setType("-1"); + sendNotification(context, msg); + } else { + try { + JSONObject obj = new JSONObject(notificationMessage.getExtra()); + Log.i("gmc", "1111222"); + //开播 + if (obj.getString("type").equals("1") || obj.getString("type").equals("9")) { + Log.i("gmc", "1111"); + msg.setImg("" + obj.getString("avatar")); + msg.setTitle(notificationMessage.getPushTitle()); + msg.setContent(notificationMessage.getPushContent()); + msg.setLiveuid(obj.getString("liveuid")); + msg.setType("1"); + liveNotification(context, msg); + //发布动态 2 + //点赞 3 + //评论 4 + //鼓励 5 + } else if (obj.getString("type").equals("2") || obj.getString("type").equals("3") || obj.getString("type").equals("4") || obj.getString("type").equals("5")) { + msg.setImg("" + obj.getString("avatar")); + msg.setTitle(notificationMessage.getPushTitle()); + msg.setContent(notificationMessage.getPushContent()); + msg.setType("2"); + dynamicNotification(context, msg); + } else if (obj.getString("type").equals("8") || obj.getString("type").equals("7")) { + msg.setImg("" + obj.getString("avatar")); + msg.setTitle(notificationMessage.getPushTitle()); + msg.setContent(notificationMessage.getPushContent()); + msg.setType(obj.getString("type")); + msg.setActivityurl(obj.getString("activityUrl")); + serviceNotification(context, msg); + } + + } catch (JSONException e) { + Log.i("gmc", "1111" + e.getMessage()); + e.printStackTrace(); + } + } + return true; + } + + public static Bitmap makeRoundCorner(Bitmap bitmap, float roundPx) { + try { + Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), + bitmap.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(output); + final int color = 0xff424242;// 颜色值(0xff---alpha) + final Paint paint = new Paint(); + final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); + final RectF rectF = new RectF(rect);// Rect是使用int类型作为数值,RectF是使用float类型作为数值 + // --------抗锯齿-------// + paint.setAntiAlias(true); + canvas.drawARGB(0, 0, 0, 0); + paint.setColor(color); + canvas.drawRoundRect(rectF, roundPx, roundPx, paint); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + final Rect src = new Rect(0, 0, bitmap.getWidth(), + bitmap.getHeight()); + canvas.drawBitmap(bitmap, null, rect, paint); + return output; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + //私聊 + private void sendNotification(Context context, NotificationMsgBean message) { + // 设置通知的点击行为:这里启动一个 Activity + Intent intent = new Intent(context, MainActivity.class); + intent.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); + String channelId = createNotificationChannel(context, "my_channel_ID", "my_channel_NAME", NotificationManager.IMPORTANCE_HIGH); + // 构建 remoteView + RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.notification_message); + remoteView.setTextViewText(R.id.title, message.getTitle()); + remoteView.setTextViewText(R.id.content, message.getContent()); + Glide.with(context).asBitmap().load(message.getImg()).into(new SimpleTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + remoteView.setImageViewBitmap(R.id.img, makeRoundCorner(resource, 50)); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId); + // 设置自定义 RemoteViews + builder.setContent(remoteView).setSmallIcon(R.drawable.small_icons); + // 设置通知的优先级(悬浮通知) + builder.setPriority(NotificationCompat.PRIORITY_MAX); + builder.setContentIntent(pendingIntent); + builder.setAutoCancel(true); + Notification notification = builder.build(); + NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + manager.notify(0, notification); + } + }); + + } + + int id = 1; + + //动态 + private void dynamicNotification(Context context, NotificationMsgBean message) { + // 设置通知的点击行为:这里启动一个 Activity + Intent intent = new Intent(context, MainActivity.class); + intent.putExtra("type", "2"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + String channelId = createNotificationChannel(context, "my_channel_ID", "my_channel_NAME", NotificationManager.IMPORTANCE_HIGH); + // 构建 remoteView + RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.notification_message); + remoteView.setTextViewText(R.id.title, message.getTitle()); + remoteView.setTextViewText(R.id.content, message.getContent()); + remoteView.setImageViewResource(R.id.img, R.mipmap.ic_launcher); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId); + // 设置自定义 RemoteViews + builder.setContent(remoteView).setSmallIcon(R.drawable.small_icons); + // 设置通知的优先级(悬浮通知) + builder.setPriority(NotificationCompat.PRIORITY_MAX); + builder.setContentIntent(pendingIntent); + builder.setAutoCancel(true); + Notification notification = builder.build(); + NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + id = (int) (id + System.currentTimeMillis()); + manager.notify(id, notification); + + } + + //开播 + private void liveNotification(Context context, NotificationMsgBean message) { + // 设置通知的点击行为:这里启动一个 Activity + Intent intent = new Intent(context, LauncherActivity.class); + intent.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("liveid", message.getLiveuid()); + Log.e("gmc", message.getLiveuid() + "21121"); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + String channelId = createNotificationChannel(context, "my_channel_ID", "my_channel_NAME", NotificationManager.IMPORTANCE_HIGH); + // 构建 remoteView + RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.notification_message); + remoteView.setTextViewText(R.id.title, message.getTitle()); + remoteView.setTextViewText(R.id.content, message.getContent()); + Glide.with(context).asBitmap().load(message.getImg()).into(new SimpleTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + remoteView.setImageViewBitmap(R.id.img, makeRoundCorner(resource, 50)); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId); + // 设置自定义 RemoteViews + builder.setContent(remoteView).setSmallIcon(R.drawable.small_icons); + // 设置通知的优先级(悬浮通知) + builder.setPriority(NotificationCompat.PRIORITY_MAX); + builder.setContentIntent(pendingIntent); + builder.setAutoCancel(true); + Notification notification = builder.build(); + NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + id = (int) (id + System.currentTimeMillis()); + manager.notify(id, notification); + } + }); + + Log.i("gmc", "11123231"); + + } + + //后台 + private void serviceNotification(Context context, NotificationMsgBean message) { + // 设置通知的点击行为:这里启动一个 Activity + Intent intent = new Intent(context, MainActivity.class); + intent.putExtra("type", message.getType()); + if (message.getType().equals("8")) { + intent.putExtra("activityUrl", message.getActivityurl()); + } + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + String channelId = createNotificationChannel(context, "my_channel_ID", "my_channel_NAME", NotificationManager.IMPORTANCE_HIGH); + // 构建 remoteView + RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.notification_message); + remoteView.setTextViewText(R.id.title, message.getTitle()); + remoteView.setTextViewText(R.id.content, message.getContent()); + remoteView.setImageViewResource(R.id.img, R.mipmap.ic_launcher); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId); + // 设置自定义 RemoteViews + builder.setContent(remoteView).setSmallIcon(R.drawable.small_icons); + // 设置通知的优先级(悬浮通知) + builder.setPriority(NotificationCompat.PRIORITY_MAX); + builder.setContentIntent(pendingIntent); + builder.setAutoCancel(true); + Notification notification = builder.build(); + NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + id = (int) (id + System.currentTimeMillis()); + manager.notify(id, notification); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/shayu/phonelive/utils/MyNotificationService.java b/app/src/main/java/com/shayu/phonelive/utils/MyNotificationService.java index c8d229464..7f01161ff 100644 --- a/app/src/main/java/com/shayu/phonelive/utils/MyNotificationService.java +++ b/app/src/main/java/com/shayu/phonelive/utils/MyNotificationService.java @@ -22,9 +22,15 @@ import com.google.firebase.messaging.RemoteMessage; import com.yunbao.common.utils.ToastUtil; import com.yunbao.main.activity.MainActivity; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Map; + import myname.pdlive.shayu.R; public class MyNotificationService extends FirebaseMessagingService { + private String createNotificationChannel(String channelID, String channelNAME, int level) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); @@ -35,36 +41,70 @@ public class MyNotificationService extends FirebaseMessagingService { return null; } } - public void onMessageReceived(RemoteMessage remoteMessage) { - Log.e("gmc","remoteMessage"); + + public void onMessageReceived(RemoteMessage message) { // do nothing - sendNotification("remoteMessage"); + Map params = message.getData(); + JSONObject object = new JSONObject(params); + Log.e("JSON_OBJECT", object.toString()); + JSONObject remoteMessage = null; + try { + remoteMessage = new JSONObject(object.getString("message")); + Log.e("gmc","remoteMessage1"+remoteMessage.toString()); + Log.e("gmc","remoteMessage"+remoteMessage.getString("fromUserName")); + } catch (JSONException e) { + e.printStackTrace(); + } +// if(remoteMessage!=null && remoteMessage.isNull("fcm_token")) { +// String title = remoteMessage.getData().get("title"); +// String message = remoteMessage.getData().get("text"); +// String username = remoteMessage.getData().get("username"); +// String uid = remoteMessage.getData().get("uid"); +// String fcmToken = remoteMessage.getData().get("fcm_token"); +// Log.e("gmc","remoteMessage"+remoteMessage.getData().get("username")); +// +// //Muestro la notifiación +//// sendNotification(title, message, username, uid, fcmToken); +// }else { +// /// Si es de tipo inserción la muestro sino no. +// //Es una nueva notificación de que alguien ha creado algo +// if(remoteMessage.getData().get("accion")!=null && +// remoteMessage.getData().get("accion").compareTo("insert")==0) +//// displayNotification(remoteMessage.getNotification(), remoteMessage.getData()); +//// //Envío los datos al RecyclerView correspondiente para que se actualice +//// addNotificacion(remoteMessage); +// Log.e("gmc","remoteMessage"+remoteMessage.getData().get("username")); +// +// } + +// sendNotification("remoteMessage"); } - private void sendNotification(String messageBody) { - - // 设置通知的点击行为:这里启动一个 Activity - Intent intent = new Intent(this, MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); - String channelId = createNotificationChannel("my_channel_ID", "my_channel_NAME", NotificationManager.IMPORTANCE_HIGH); - // 构建 remoteView - RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.notification_message); -// remoteView.setTextViewText(R.id.tvMsg, "RemoteViews"); -// remoteView.setImageViewResource(R.id.ivIcon, R.mipmap.ic_launcher_round); - NotificationCompat.Builder builder = new NotificationCompat.Builder(this,channelId); - // 设置自定义 RemoteViews - builder.setContent(remoteView).setSmallIcon(R.mipmap.ic_launcher); - // 设置通知的优先级(悬浮通知) - builder.setPriority(NotificationCompat.PRIORITY_MAX); - builder.setContentIntent(pendingIntent); - builder.setAutoCancel(true); - Notification notification = builder.build(); - NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); - manager.notify(0, notification); - - } +// private void sendNotification(String messageBody) { +// +// // 设置通知的点击行为:这里启动一个 Activity +// Intent intent = new Intent(this, MainActivity.class); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); +// PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); +// String channelId = createNotificationChannel("my_channel_ID", "my_channel_NAME", NotificationManager.IMPORTANCE_HIGH); +// // 构建 remoteView +//// RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.notification_message); +// +//// remoteView.setTextViewText(R.id.tvMsg, "RemoteViews"); +//// remoteView.setImageViewResource(R.id.ivIcon, R.mipmap.ic_launcher_round); +// NotificationCompat.Builder builder = new NotificationCompat.Builder(this,channelId); +// // 设置自定义 RemoteViews +// builder.setContent(remoteView).setSmallIcon(R.mipmap.ic_launcher); +// // 设置通知的优先级(悬浮通知) +// builder.setPriority(NotificationCompat.PRIORITY_MAX); +// builder.setContentIntent(pendingIntent); +// builder.setAutoCancel(true); +// Notification notification = builder.build(); +// NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); +// manager.notify(0, notification); +// +// } } diff --git a/app/src/main/res/drawable/small_icons.png b/app/src/main/res/drawable/small_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..2c58682a4a5f1ac39e77a7ec0d269d786173e68a GIT binary patch literal 1582 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|RWm~(N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|nVx}evVnn_g1M!hp_z%f zsj-fNk%5t+zJZaxp{cH+p_QqTm7%c$6et00D@sYT3UYCS+6CmKL-|y0U7xv`NbLe1qwz+dd3PGzKO}1c_0x@ zuohomE6=>*lEl2^R8JRMC7>aCnVBh8=B~~rMy8IIhK|OLhK8;#mM*3SuEuW076umP zP8J3RFugAM$)&lec_lEtDG0reIQ4>3Lv8`kW|!2W%(B!Jx1#)91+cHJGI6`b9H)6u zy(zfeVu4eyKF~4xptwbfYnTu)0fCtClndm*(|&3mFu@lAQ#O15bzp{Jn(yi27*cWT z&1`><5J#Eg-(NO)MJ#Dd$gJp8at`2^Wny*|aQvtx!r@f%@{#5TiA5J2SzLvcB3=kA zT0TL+P;koL6&vIZDcw=f@!=HJ`M>slldo~L@@rP{<-Li0W<%=YCfDG;xF zFgeGp_(9+OLv?2l_cNbZ&VNwr1#|12O(j|lg6EzIKjkn}uCaV@b2F!kW9}3$Z^Iz_ z46Pzz^8+?J#6=(GS-s3&Fr{lUh??LEx6T1^7ptW_+NT1rg3rV($tT^8*7`4K2P(Np2&S`hnlYW%u30U ziy6v=|f4IoC%jXX& zwCm0*(Yc{JPj>gNnU5bG^zQhyDK04Knd{Q8(q9_HHarYpUf8yXeahPS2K&15bDlr+ zRkzmNdc&<^!O`vdk41uQf73ssxre$-Ui8jlYyDRxAK>N1DE_BPzmno>gTe~DWM4fCShEw literal 0 HcmV?d00001 diff --git a/app/src/main/res/raw/pdlive_sound.mp3 b/app/src/main/res/raw/pdlive_sound.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bddcd1d39ea0ce1289fe529e2e58eea41accb0f8 GIT binary patch literal 73949 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

|%+?htLzyQ8rF2c)*!6K)}HZ{v<7^ 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 VL3;I+UA followList = new ArrayList<>(); + + public String getDynamic_msg_switch() { + return dynamic_msg_switch; + } + + public void setDynamic_msg_switch(String dynamic_msg_switch) { + this.dynamic_msg_switch = dynamic_msg_switch; + } + + public String getInteraction_show_msg_switch() { + return interaction_show_msg_switch; + } + + public void setInteraction_show_msg_switch(String interaction_show_msg_switch) { + this.interaction_show_msg_switch = interaction_show_msg_switch; + } + + public String getChat_msg_switch() { + return chat_msg_switch; + } + + public void setChat_msg_switch(String chat_msg_switch) { + this.chat_msg_switch = chat_msg_switch; + } + + public String getSystem_msg_switch() { + return system_msg_switch; + } + + public void setSystem_msg_switch(String system_msg_switch) { + this.system_msg_switch = system_msg_switch; + } + + public List getFollowList() { + return followList; + } + + public void setFollowList(List followList) { + this.followList = followList; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/MsgSwitchFollowlModel.java b/common/src/main/java/com/yunbao/common/bean/MsgSwitchFollowlModel.java new file mode 100644 index 000000000..d69f074be --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/MsgSwitchFollowlModel.java @@ -0,0 +1,46 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +public class MsgSwitchFollowlModel extends BaseModel{ + @SerializedName("status") + String status; + @SerializedName("user_nicename") + String user_nicename; + @SerializedName("avatar") + String avatar; + @SerializedName("liveuid") + String liveuid; + + public String getLiveuid() { + return liveuid; + } + + public void setLiveuid(String liveuid) { + this.liveuid = liveuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getUser_nicename() { + return user_nicename; + } + + public void setUser_nicename(String user_nicename) { + this.user_nicename = user_nicename; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/NotificationMsgBean.java b/common/src/main/java/com/yunbao/common/bean/NotificationMsgBean.java new file mode 100644 index 000000000..0493d2d37 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/NotificationMsgBean.java @@ -0,0 +1,58 @@ +package com.yunbao.common.bean; + +public class NotificationMsgBean { + String img; + String title; + String content; + String type; + String liveuid; + String activityurl; + + public String getActivityurl() { + return activityurl; + } + + public void setActivityurl(String activityurl) { + this.activityurl = activityurl; + } + + public String getLiveuid() { + return liveuid; + } + + public void setLiveuid(String liveuid) { + this.liveuid = liveuid; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 77a7fe126..abb5122a5 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -7,6 +7,7 @@ import com.yunbao.common.bean.ContributeModel; import com.yunbao.common.bean.FaceBookUpModel; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.LiveInfoModel; +import com.yunbao.common.bean.MsgSwitchDetailModel; import com.yunbao.common.bean.NewPeopleInfo; import com.yunbao.common.bean.NobleTrumpetModel; import com.yunbao.common.bean.SearchModel; @@ -184,4 +185,24 @@ public interface PDLiveApi { */ @GET("/api/public/?service=Live.newUserPreferential") Observable> getNewPeopleInfo(); + + /** + * 获取推送关注的开关和关注列表 + * + */ + @GET("/api/public/?service=Tx.offlineMsgSwitchDetail") + Observable> getMsgSwitchDetail(); + + /** + * 推送关注的开关设置 + */ + @GET("/api/public/?service=Tx.setMsgMasterSwitch") + Observable> setMsgMasterSwitch(@Query("status") String status,@Query("type") String type); + + /** + *开播推送设置开关 + */ + @GET("/api/public/?service=Tx.setBeginShowMsgSwitch") + Observable>> setBeginShowMsgSwitch(@Query("status") String status,@Query("isAll") String isAll,@Query("liveuid") String liveuid); + } diff --git a/common/src/main/java/com/yunbao/common/http/main/MainNetManager.java b/common/src/main/java/com/yunbao/common/http/main/MainNetManager.java index 3dd5ca9b3..970872ac1 100644 --- a/common/src/main/java/com/yunbao/common/http/main/MainNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/main/MainNetManager.java @@ -3,11 +3,14 @@ package com.yunbao.common.http.main; import android.app.Activity; import com.yunbao.common.bean.AnchorRecommendModel; +import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.FaceBookUpModel; import com.yunbao.common.bean.IMLoginModel; +import com.yunbao.common.bean.MsgSwitchDetailModel; import com.yunbao.common.bean.SearchModel; import com.yunbao.common.bean.SlideInfoModel; import com.yunbao.common.http.API; +import com.yunbao.common.http.ResponseData; import com.yunbao.common.http.ResponseModel; import com.yunbao.common.http.base.HttpCallback; @@ -201,4 +204,64 @@ public class MainNetManager { }).isDisposed(); } + /** + * 获取推送关注的设置和关注列表 + * @param callback + */ + public void getMsgSwitchDetail(HttpCallback callback) { + API.get().pdLiveApi(mContext).getMsgSwitchDetail() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(msgSwitchDetailModelResponseModel -> { + if (!mContext.isFinishing() && callback != null) { + MsgSwitchDetailModel msgSwitchDetailModel = msgSwitchDetailModelResponseModel.getData().getInfo(); + callback.onSuccess(msgSwitchDetailModel); + } + }, throwable -> { + if (!mContext.isFinishing() && callback != null) { + callback.onError(throwable.getMessage()); + } + }).isDisposed(); + } + + /** + * 推送开关设置 + * @param callback + */ + public void setMsgMasterSwitch(String status,String type,HttpCallback callback) { + API.get().pdLiveApi(mContext).setMsgMasterSwitch(status,type) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseModel -> { + if (!mContext.isFinishing() && callback != null) { + ResponseData responseData = BaseModel.getData(); + callback.onSuccess(responseData); + } + }, throwable -> { + if (!mContext.isFinishing() && callback != null) { + callback.onError(throwable.getMessage()); + } + }).isDisposed(); + } + + /** + * 主播开播推送开关设置 + * @param callback + */ + public void setBeginShowMsgSwitch(String status,String isAll,String liveuid,HttpCallback callback) { + API.get().pdLiveApi(mContext).setBeginShowMsgSwitch(status,isAll,liveuid) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseModel -> { + if (!mContext.isFinishing() && callback != null) { + ResponseData responseData = BaseModel.getData(); + callback.onSuccess(responseData); + } + }, throwable -> { + if (!mContext.isFinishing() && callback != null) { + callback.onError(throwable.getMessage()); + } + }).isDisposed(); + } + } diff --git a/common/src/main/java/com/yunbao/common/manager/imrongcloud/RongcloudIMManager.java b/common/src/main/java/com/yunbao/common/manager/imrongcloud/RongcloudIMManager.java index 06a13aee5..4494d6149 100644 --- a/common/src/main/java/com/yunbao/common/manager/imrongcloud/RongcloudIMManager.java +++ b/common/src/main/java/com/yunbao/common/manager/imrongcloud/RongcloudIMManager.java @@ -53,6 +53,7 @@ public class RongcloudIMManager { private static RongIMClient.OnReceiveMessageWrapperListener mListener; /** + * * 设置消息接受监听器 */ public static void addRongcloudIMOnReceiveMessageListener(RongIMClient.OnReceiveMessageWrapperListener listener) { diff --git a/common/src/main/res/layout/notification_message.xml b/common/src/main/res/layout/notification_message.xml index 0939da377..fdf5411d5 100644 --- a/common/src/main/res/layout/notification_message.xml +++ b/common/src/main/res/layout/notification_message.xml @@ -2,6 +2,7 @@ + + android:layout_width="60dp" + android:layout_height="60dp"/> - - + + \ No newline at end of file diff --git a/live/src/main/java/com/yunbao/live/activity/LiveActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveActivity.java index 7c0dfa344..82c0bba20 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveActivity.java @@ -144,7 +144,6 @@ public abstract class LiveActivity extends AbsActivity implements SocketMessageL EventBus.getDefault().register(this); mImageUtil = new ProcessImageUtil(this); mDialogFragmentSet = new HashSet<>(); - //解压 美颜模型 try { CommonAppConfig.VIDEO_TIE_MODEl_PATH = getFilesDir().getAbsolutePath() + "/model";//app安装路径 diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java index 9775e9119..f55482dac 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -238,7 +238,6 @@ public class LiveAudienceActivity extends LiveActivity { // 满足此种条件,表明需要加载直播视频,以及聊天室了 if (viewGroup.getId() == mCurrentItem && (position == 0) && mCurrentItem != mLastPosition) { - loadData(viewGroup, mCurrentItem); } } diff --git a/live/src/main/java/com/yunbao/live/socket/SocketChatUtil.java b/live/src/main/java/com/yunbao/live/socket/SocketChatUtil.java index ae2c06b6c..c7990935d 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketChatUtil.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketChatUtil.java @@ -61,7 +61,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败1" + desc); } }); @@ -114,7 +114,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败2" + desc); } }); @@ -170,7 +170,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败3" + desc); } }); @@ -210,7 +210,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败4" + desc); } }); @@ -339,7 +339,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败5" + desc); } }); @@ -381,7 +381,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败6" + desc); } }); @@ -423,7 +423,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败7" + desc); } }); @@ -456,7 +456,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败7" + desc); } }); @@ -493,7 +493,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败9" + desc); } }); @@ -528,7 +528,7 @@ public class SocketChatUtil { @Override public void onError(int code, String desc) { - Log.i("tx", code + "发送失败" + desc); + Log.i("tx", code + "发送失败10" + desc); } }); diff --git a/live/src/main/java/com/yunbao/live/socket/SocketRyChatUtil.java b/live/src/main/java/com/yunbao/live/socket/SocketRyChatUtil.java index 78a5ba87e..6fa41d05a 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyChatUtil.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyChatUtil.java @@ -118,7 +118,7 @@ public class SocketRyChatUtil { @Override public void onSuccess(Message message) { - Log.i("tx", "发送成功" + mLiveUid); + Log.i("tx", "ssss"+"发送成功" + mLiveUid); //首发言成功 AdjustEvent adjustEvent1 = new AdjustEvent("j7isvr"); Adjust.trackEvent(adjustEvent1); @@ -141,7 +141,7 @@ public class SocketRyChatUtil { @Override public void onError(Message message, RongIMClient.ErrorCode errorCode) { - + Log.e("tx","aaa"+errorCode.toString()); } }); diff --git a/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java index 50fbf8d0a..5b03ccc87 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java @@ -415,6 +415,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { @Subscribe(threadMode = ThreadMode.MAIN) public void onUpdata(String str) { + ToastUtil.show("121212"); if ("UsertoRY".equals(str)) { DialogUitl.showSimpleDialog(mContext, WordUtil.getString(R.string.mic_tag), new DialogUitl.SimpleCallback() { @Override diff --git a/main/src/main/java/com/yunbao/main/activity/GoogleFragment.java b/main/src/main/java/com/yunbao/main/activity/GoogleFragment.java index 01d34f8a7..0efe1940d 100644 --- a/main/src/main/java/com/yunbao/main/activity/GoogleFragment.java +++ b/main/src/main/java/com/yunbao/main/activity/GoogleFragment.java @@ -62,7 +62,7 @@ public class GoogleFragment extends Fragment { private View view; - private static String mOrderid,mProductId,MoneyUsds; + private String mOrderid,mProductId,MoneyUsds; private WebView rlWebview; private String url; @@ -84,9 +84,6 @@ public class GoogleFragment extends Fragment { new Thread(new Runnable() { public void run() { try { - - - try { adid = AdvertisingIdClient.getAdvertisingIdInfo(getActivity()).getId(); Log.e("vssss",adid); diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index 6ff5f2677..4a5648ee9 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -46,8 +46,10 @@ import com.tencent.imsdk.v2.V2TIMSDKConfig; import com.tencent.imsdk.v2.V2TIMSDKListener; import com.tencent.imsdk.v2.V2TIMUserFullInfo; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; import com.yunbao.common.activity.AbsActivity; +import com.yunbao.common.activity.WebViewActivity; import com.yunbao.common.adapter.ViewPagerAdapter; import com.yunbao.common.bean.AnchorRecommendModel; import com.yunbao.common.bean.ChatRemarksBean; @@ -133,6 +135,7 @@ import io.rong.imlib.RongIMClient; import kotlin.Unit; import static com.yunbao.common.CommonAppContext.isReady; +import static com.yunbao.live.activity.SystemMessageActivity.type; import io.rong.imlib.model.Message; import io.rong.push.PushManager; @@ -267,6 +270,37 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene }; +// private void getToken() { +// // 创建一个新线程 +// new Thread() { +// @Override +// public void run() { +// try { +// // 从agconnect-service.json文件中读取appId +// String appId = "106936673"; +// +// // 输入token标识"HCM" +// String tokenScope = "HCM"; +// String token = HmsInstanceId.getInstance(MainActivity.this).getToken(appId, tokenScope); +// Log.i("hw", "get token: " + token); +// +// // 判断token是否为空 +// if(!TextUtils.isEmpty(token)) { +// sendRegTokenToServer(token); +// } +// } catch (Exception e) { +// Log.e("hw","get token failed, " + e); +// } +// } +// }.start(); +// } +// private void sendRegTokenToServer(String token) { +// PushManager.getInstance() +// .onReceiveToken(MainActivity.this, PushType.HUAWEI, token); +// Log.i("hw", "sending token to server. token:" + token); +// } + + @Override protected void main() { ConversationIMListManager.get(this); @@ -287,6 +321,40 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene // RTCLib 初始化 RCRTCConfig.Builder config = RCRTCConfig.Builder.create(); RCRTCEngine.getInstance().init(MainActivity.this, config.build()); + //推送跳直播间 + if(getIntent().getStringExtra("liveid")!=null){ + LiveHttpUtil.getLiveInfo(getIntent().getStringExtra("liveid") + "", new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class); + + LiveRoomCheckLivePresenter mCheckLivePresenter = new LiveRoomCheckLivePresenter(mContext, new LiveRoomCheckLivePresenter.ActionListener() { + @Override + public void onLiveRoomChanged(LiveBean liveBean, int liveType, int liveTypeVal, int liveSdk) { + if (liveBean == null) { + return; + } + LiveAudienceActivity.forward(mContext, liveBean, liveType, liveTypeVal, "", 0, liveSdk); + + } + }); + + mCheckLivePresenter.checkLive(liveBean); + } else { + ToastUtil.show("直播已结束"); + } + } + }); + }else if(getIntent().getStringExtra("type")!=null&&getIntent().getStringExtra("type").equals("2")){ + //跳转消息列表 + Bundle bundle = new Bundle(); + bundle.putInt(PDLiveConversationListActivity.MESSAGENUMBER, messageNumber); + bundle.putInt(PDLiveConversationListActivity.NUMBERME, numberMe); + ConversationIMListManager.get(this).jumpConversationList(bundle); + }else if(getIntent().getStringExtra("type")!=null&&getIntent().getStringExtra("type").equals("8")){ + WebViewActivity.forward(mContext, getIntent().getStringExtra("activityUrl"), true); + } FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(new OnCompleteListener() { @Override @@ -306,6 +374,10 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene // Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show(); } }); + + //华为推送 +// getToken(); + boolean showInvite = getIntent().getBooleanExtra(Constants.SHOW_INVITE, false); mRootView = (ViewGroup) findViewById(R.id.rootView); floatBanner = findViewById(R.id.float_banner_home); diff --git a/main/src/main/java/com/yunbao/main/activity/MsgSettActivity.java b/main/src/main/java/com/yunbao/main/activity/MsgSettActivity.java index d33226cb4..8e9230b92 100644 --- a/main/src/main/java/com/yunbao/main/activity/MsgSettActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MsgSettActivity.java @@ -1,15 +1,33 @@ package com.yunbao.main.activity; import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; import com.yunbao.common.activity.AbsActivity; +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.MsgSwitchDetailModel; +import com.yunbao.common.bean.SlideInfoModel; +import com.yunbao.common.http.ResponseData; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.main.MainNetManager; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.main.R; +import com.yunbao.main.adapter.MainHomeLivesClassAdapter; +import com.yunbao.main.adapter.MsgFollowAdapter; + +import java.util.List; public class MsgSettActivity extends AbsActivity { + ImageView dt_switch,hdd_switch,lt_switch,xt_switch,kb_switch; + RecyclerView follow_list; @Override protected int getLayoutId() { return R.layout.activity_msg_sett; @@ -19,5 +37,200 @@ public class MsgSettActivity extends AbsActivity { protected void main() { super.main(); setTitle("消息通知"); + follow_list = (RecyclerView) findViewById(R.id.follow_list); + dt_switch = (ImageView) findViewById(R.id.dt_switch); + hdd_switch= (ImageView) findViewById(R.id.hdd_switch); + lt_switch = (ImageView) findViewById(R.id.lt_switch); + xt_switch= (ImageView) findViewById(R.id.xt_switch); + kb_switch= (ImageView) findViewById(R.id.kb_switch); + + dt_switch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //打开的 + if (dt_switch.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.mipmap.special_icon_on).getConstantState())){ + if(setMsgMasterSwitch("2","1")){ + dt_switch.setImageResource(R.mipmap.special_icon_off); + }; + }else{ + if(setMsgMasterSwitch("1","1")){ + dt_switch.setImageResource(R.mipmap.special_icon_on); + }; + } + } + }); + + hdd_switch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //打开的 + if (hdd_switch.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.mipmap.special_icon_on).getConstantState())){ + if(setMsgMasterSwitch("2","2")){ + hdd_switch.setImageResource(R.mipmap.special_icon_off); + }; + }else{ + if(setMsgMasterSwitch("1","2")){ + hdd_switch.setImageResource(R.mipmap.special_icon_on); + }; + } + } + }); + + lt_switch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //打开的 + if (lt_switch.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.mipmap.special_icon_on).getConstantState())){ + if(setMsgMasterSwitch("2","3")){ + lt_switch.setImageResource(R.mipmap.special_icon_off); + }; + }else{ + if(setMsgMasterSwitch("1","3")){ + lt_switch.setImageResource(R.mipmap.special_icon_on); + }; + } + } + }); + + xt_switch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //打开的 + if (xt_switch.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.mipmap.special_icon_on).getConstantState())){ + if(setMsgMasterSwitch("2","4")){ + xt_switch.setImageResource(R.mipmap.special_icon_off); + }; + }else{ + if(setMsgMasterSwitch("1","4")){ + xt_switch.setImageResource(R.mipmap.special_icon_on); + }; + } + } + }); + + follow_list.setVisibility(View.GONE); + kb_switch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int is =1; + //打开的 + if (kb_switch.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.mipmap.special_icon_on).getConstantState())){ + is = 2; + }else{ + is = 1; + } + MainNetManager.get(mContext).setBeginShowMsgSwitch(is+"", "1","", new HttpCallback() { + @Override + public void onSuccess(ResponseData data) { + + Log.e("ds",data.getCode()+""); + if(data.getCode() == 200 ){ + Log.e("ds",kb_switch.getDrawable().getCurrent().getConstantState()+""); + if (kb_switch.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.mipmap.special_icon_on).getConstantState())){ + kb_switch.setImageResource(R.mipmap.special_icon_off); + follow_list.setVisibility(View.GONE); + }else{ + getData(); + } + } + + } + + @Override + public void onError(String error) { + Log.e("ds",kb_switch.getDrawable().getCurrent().getConstantState()+"11"+error); + + } + }); + } + }); + + follow_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)); + follow_list.setHasFixedSize(true); + follow_list.setNestedScrollingEnabled(true); + getData(); + } + + public void getData(){ + MainNetManager.get(mContext) + .getMsgSwitchDetail(new HttpCallback() { + @Override + public void onSuccess(MsgSwitchDetailModel data) { + if(data.getDynamic_msg_switch().equals("2")){ + dt_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + dt_switch.setImageResource(R.mipmap.special_icon_on); + } + + if(data.getInteraction_show_msg_switch().equals("2")){ + hdd_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + hdd_switch.setImageResource(R.mipmap.special_icon_on); + } + + if(data.getChat_msg_switch().equals("2")){ + lt_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + lt_switch.setImageResource(R.mipmap.special_icon_on); + } + + if(data.getChat_msg_switch().equals("2")){ + lt_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + lt_switch.setImageResource(R.mipmap.special_icon_on); + } + + if(data.getSystem_msg_switch().equals("2")){ + xt_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + xt_switch.setImageResource(R.mipmap.special_icon_on); + } + + if(data.getSystem_msg_switch().equals("2")){ + xt_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + xt_switch.setImageResource(R.mipmap.special_icon_on); + } + + for(int i = 0; i < data.getFollowList().size();i++) { + if(!data.getFollowList().get(i).getStatus().equals("2")){ + kb_switch.setImageResource(R.mipmap.special_icon_on); + follow_list.setVisibility(View.VISIBLE); + break; + } + + } + MsgFollowAdapter topAdapter = new MsgFollowAdapter(MsgSettActivity.this, data.getFollowList()); + follow_list.setAdapter(topAdapter); + follow_list.setVisibility(View.VISIBLE); + kb_switch.setImageResource(R.mipmap.special_icon_on); + } + + @Override + public void onError(String error) { + + } + }); + } + boolean ret = false; + public boolean setMsgMasterSwitch(String status,String type){ + ret =false; + MainNetManager.get(mContext).setMsgMasterSwitch(status, type, new HttpCallback() { + @Override + public void onSuccess(ResponseData data) { + + if(data.getCode() == 200 ){ + ret = true; + } + + } + + @Override + public void onError(String error) { + + } + }); + + return true; } } \ No newline at end of file diff --git a/main/src/main/java/com/yunbao/main/adapter/MsgFollowAdapter.java b/main/src/main/java/com/yunbao/main/adapter/MsgFollowAdapter.java new file mode 100644 index 000000000..21574f708 --- /dev/null +++ b/main/src/main/java/com/yunbao/main/adapter/MsgFollowAdapter.java @@ -0,0 +1,124 @@ +package com.yunbao.main.adapter; + +import android.app.Activity; +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.makeramen.roundedimageview.RoundedImageView; +import com.yunbao.common.bean.MsgSwitchDetailModel; +import com.yunbao.common.bean.MsgSwitchFollowlModel; +import com.yunbao.common.bean.UserItemBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.http.ResponseData; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.main.MainNetManager; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.views.weight.ViewClicksAntiShake; +import com.yunbao.main.R; + +import java.util.List; + +public class MsgFollowAdapter extends RecyclerView.Adapter { + + private Activity mContext; + private List mList; + private LayoutInflater mInflater; + private OnItemClickListener mOnItemClickListener; + public MsgFollowAdapter(Activity context, List list) { + mContext = context; + mList = list; + mInflater = LayoutInflater.from(context); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + mOnItemClickListener = onItemClickListener; + } + + + + + + @NonNull + @Override + public Vh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + + return new Vh(mInflater.inflate( R.layout.item_msg_follow, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull Vh holder, int position) { + holder.setData(mList.get(position),position); + } + + + + @Override + public int getItemCount() { + return mList.size(); + } + + class Vh extends RecyclerView.ViewHolder { + + RoundedImageView avatar; + TextView anchor_name; + ImageView sb_switch; + + public Vh(View itemView) { + super(itemView); + avatar = (RoundedImageView) itemView.findViewById(R.id.avatar); + anchor_name = (TextView) itemView.findViewById(R.id.anchor_name); + sb_switch = (ImageView) itemView.findViewById(R.id.sb_switch); + ViewClicksAntiShake.clicksAntiShake(itemView, () -> { + Object tag = itemView.getTag(); + if (tag != null) { + MsgSwitchFollowlModel bean = (MsgSwitchFollowlModel) tag; + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(bean, 0); + } + } + }); + } + String is = "1"; + void setData(MsgSwitchFollowlModel bean,int position) { + itemView.setTag(bean); + ImgLoader.display(mContext, bean.getAvatar(), avatar); + anchor_name.setText(bean.getUser_nicename()); + if(bean.getStatus().equals("2")) { + is = "1"; + sb_switch.setImageResource(R.mipmap.special_icon_off); + }else{ + is = "2"; + sb_switch.setImageResource(R.mipmap.special_icon_on); + } + sb_switch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MainNetManager.get(mContext).setBeginShowMsgSwitch(is + "", "", bean.getLiveuid(), new HttpCallback() { + @Override + public void onSuccess(ResponseData data) { + if(data.getCode() == 200){ + mList.get(position).setStatus(is); + notifyDataSetChanged(); + } + + } + + @Override + public void onError(String error) { + + } + }); + } + }); + } + } +} + diff --git a/main/src/main/res/layout/activity_msg_sett.xml b/main/src/main/res/layout/activity_msg_sett.xml index 794671e14..fb9409119 100644 --- a/main/src/main/res/layout/activity_msg_sett.xml +++ b/main/src/main/res/layout/activity_msg_sett.xml @@ -8,7 +8,7 @@ - @@ -47,7 +47,7 @@ @@ -81,12 +81,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:text="主播發佈新動態通知" + android:text="點讚、評論、鼓勵送禮" android:textColor="#ffc7c8c9" android:textSize="12sp" /> - @@ -120,12 +120,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:text="主播發佈新動態通知" + android:text="用戶聊天訊息" android:textColor="#ffc7c8c9" android:textSize="12sp" /> @@ -159,12 +160,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:text="主播發佈新動態通知" + android:text="新活動、系統消息" android:textColor="#ffc7c8c9" android:textSize="12sp" /> @@ -200,12 +202,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:text="主播發佈新動態通知" + android:text="開啟後獲得直播通知" android:textColor="#ffc7c8c9" android:textSize="12sp" /> + - + \ No newline at end of file diff --git a/main/src/main/res/layout/item_msg_follow.xml b/main/src/main/res/layout/item_msg_follow.xml new file mode 100644 index 000000000..b3713d601 --- /dev/null +++ b/main/src/main/res/layout/item_msg_follow.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + \ No newline at end of file