jixionghui преди 5 години
родител
ревизия
2aef849c6b

+ 1 - 0
skWeiChatBaidu/build.gradle

@@ -299,6 +299,7 @@ dependencies {
     implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-28'
 
     implementation 'com.google.code.gson:gson:2.8.4'
+    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50'
 }
 
 configurations {

+ 38 - 2
skWeiChatBaidu/src/main/java/com/liaobo/im/ui/me/SettingActivity.java

@@ -7,12 +7,14 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.AsyncTask;
+import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
 
+
 import com.liaobo.im.AppConfig;
 import com.liaobo.im.MyApplication;
 import com.liaobo.im.R;
@@ -36,6 +38,7 @@ import com.liaobo.im.util.Md5Util;
 import com.liaobo.im.util.PreferenceUtils;
 import com.liaobo.im.util.ToastUtil;
 import com.liaobo.im.util.UiUtils;
+import com.liaobo.im.view.RedPacketGrabDialog;
 import com.liaobo.im.view.SelectionFrame;
 import com.liaobo.im.xmpp.helloDemon.IntentWrapper;
 import com.liaobo.im.xuan.xuanhttplibrary.okhttp.HttpUtils;
@@ -43,9 +46,11 @@ import com.liaobo.im.xuan.xuanhttplibrary.okhttp.callback.BaseCallback;
 import com.liaobo.im.xuan.xuanhttplibrary.okhttp.result.ObjectResult;
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import okhttp3.Call;
 
@@ -54,9 +59,10 @@ import okhttp3.Call;
  */
 public class SettingActivity extends BaseActivity implements View.OnClickListener {
     private TextView mCacheTv;
-    private TextView cacheTv, clearRecordsTv, changeTv, privateTv, aboutTv;
+    private TextView cacheTv, clearRecordsTv, changeTv, privateTv, aboutTv,tvSecond;
     private Button mExitBtn;
     private String mLoginUserId;
+    private List<String> mGrabTimeList;
     private My_BroadcastReceiver mMyBroadcastReceiver = new My_BroadcastReceiver();
 
     @Override
@@ -72,7 +78,8 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
         });
         TextView tvTitle = (TextView) findViewById(R.id.tv_title_center);
         tvTitle.setText(InternationalizationHelper.getString("JXSettingVC_Set"));
-
+        String[] grabTimes = getResources().getStringArray(R.array.red_packet_grab);
+        mGrabTimeList = Arrays.asList(grabTimes);
         mLoginUserId = coreManager.getSelf().getUserId();
         initView();
         IntentFilter intentFilter = new IntentFilter();
@@ -97,6 +104,9 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
         privateTv = (TextView) findViewById(R.id.privacySetting_text);
         aboutTv = (TextView) findViewById(R.id.aboutUs_text);
         mExitBtn = (Button) findViewById(R.id.exit_btn);
+        tvSecond = findViewById(R.id.tv_second);
+        int second = PreferenceUtils.getInt(MyApplication.getContext(), Constants.GRAB_RED_PACKET + mLoginUserId, -1);
+        setSecondText(second);
 //        mExitBtn.setBackground(new ColorDrawable(MyApplication.getContext().getResources().getColor(R.color.redpacket_bg)));
         mExitBtn.setText(InternationalizationHelper.getString("JXSettingVC_LogOut"));
 
@@ -121,6 +131,7 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
         findViewById(R.id.send_gMessage_rl).setOnClickListener(this);
         findViewById(R.id.privacy_settting_rl).setOnClickListener(this);
         findViewById(R.id.secure_setting_rl).setOnClickListener(this);
+        findViewById(R.id.rlt_grab).setOnClickListener(this);
         if (coreManager.getConfig().thirdLogin) {
             findViewById(R.id.bind_account_rl).setOnClickListener(this);
         } else {
@@ -214,9 +225,34 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene
                 // 关于我们
                 startActivity(new Intent(mContext, AboutActivity.class));
                 break;
+            case R.id.rlt_grab:
+                showRedPackGrab();
+                break;
         }
     }
 
+    private void showRedPackGrab(){
+        RedPacketGrabDialog dialog = new RedPacketGrabDialog(this);
+        dialog.setSecondCallback(second -> {
+            PreferenceUtils.putInt(MyApplication.getContext(), Constants.GRAB_RED_PACKET + mLoginUserId, second);
+            setSecondText(second);
+        });
+
+        dialog.show();
+    }
+
+    private void setSecondText(int second){
+        if (second==-1){
+            tvSecond.setText(R.string.packet_grab_cancel);
+        }else if (second==0){
+            tvSecond.setText(R.string.second_0);
+        }else {
+            String content = String.format(getString(R.string.second_num),second);
+            tvSecond.setText(content);
+        }
+
+    }
+
     /**
      * 清楚缓存
      */

+ 0 - 3
skWeiChatBaidu/src/main/java/com/liaobo/im/ui/message/MucChatActivity.java

@@ -782,9 +782,6 @@ public class MucChatActivity extends BaseActivity implements
      ***************************************/
     @Override
     public void onMyAvatarClick() {
-        if ((mucRoom==null || mucRoom.getAllowSendCard()==0) && mucRoom.getMember()!=null && mucRoom.getMember().getRole()==3 ){
-            return;
-        }
         mChatBottomView.reset();
         mChatBottomView.postDelayed(new Runnable() {
             @Override

+ 1 - 0
skWeiChatBaidu/src/main/java/com/liaobo/im/util/Constants.java

@@ -20,6 +20,7 @@ public class Constants {
     public static final String LOGIN_CONFLICT = "login_conflict";
     // 当前设备离线时间
     public static final String OFFLINE_TIME = "offline_time";
+    public static final String GRAB_RED_PACKET = "grab_red_packet"; //自动抢红包
     // App启动次数
     public static final String APP_LAUNCH_COUNT = "app_launch_count";
     public static final String IS_AUDIO_CONFERENCE = "is_audio_conference";

+ 95 - 0
skWeiChatBaidu/src/main/java/com/liaobo/im/view/RedPacketGrabDialog.java

@@ -0,0 +1,95 @@
+package com.liaobo.im.view;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.liaobo.im.R;
+import com.liaobo.im.util.ScreenUtil;
+
+public class RedPacketGrabDialog extends Dialog implements View.OnClickListener {
+    private ISecondCallback secondCallback;
+
+    public RedPacketGrabDialog(@NonNull Context context) {
+        super(context, R.style.BottomDialog);
+
+    }
+
+    public void setSecondCallback(ISecondCallback secondCallback) {
+        this.secondCallback = secondCallback;
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialog_grab_packet);
+        setCanceledOnTouchOutside(true);
+        initView();
+    }
+
+    private void initView() {
+        findViewById(R.id.tv1).setOnClickListener(this);
+        findViewById(R.id.tv2).setOnClickListener(this);
+        findViewById(R.id.tv3).setOnClickListener(this);
+        findViewById(R.id.tv4).setOnClickListener(this);
+        findViewById(R.id.tv5).setOnClickListener(this);
+        findViewById(R.id.tv6).setOnClickListener(this);
+        findViewById(R.id.tv6).setOnClickListener(this);
+        findViewById(R.id.tv7).setOnClickListener(this);
+
+
+        Window o = getWindow();
+        WindowManager.LayoutParams lp = o.getAttributes();
+        lp.width = ScreenUtil.getScreenWidth(getContext());
+        o.setAttributes(lp);
+        this.getWindow().setGravity(Gravity.BOTTOM);
+        this.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
+    }
+
+    @Override
+    public void onClick(View v) {
+        int secondTime ;
+        dismiss();
+        switch (v.getId()) {
+            case R.id.tv1:
+                secondTime = -1;
+                break;
+            case R.id.tv2:
+                secondTime =0;
+
+                break;
+            case R.id.tv3:
+                secondTime= 5;
+
+                break;
+            case R.id.tv4:
+                secondTime= 10;
+
+                break;
+            case R.id.tv5:
+                secondTime= 15;
+                break;
+            case R.id.tv6:
+                secondTime= 30;
+                break;
+            case R.id.tv7:
+                secondTime= 60;
+                break;
+            default:
+                secondTime=-1;
+                break;
+        }
+        if (secondCallback!=null){
+            secondCallback.callback(secondTime);
+        }
+    }
+    public interface ISecondCallback{
+        void callback(int second);
+
+    }
+}

+ 135 - 3
skWeiChatBaidu/src/main/java/com/liaobo/im/xmpp/CoreService.java

@@ -13,7 +13,10 @@ import android.content.IntentFilter;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Message;
 import android.support.annotation.WorkerThread;
 import android.support.v4.app.NotificationCompat;
 import android.text.TextUtils;
@@ -35,6 +38,9 @@ import com.liaobo.im.bean.message.ChatMessage;
 import com.liaobo.im.bean.message.LastChatHistoryList;
 import com.liaobo.im.bean.message.NewFriendMessage;
 import com.liaobo.im.bean.message.XmppMessage;
+import com.liaobo.im.bean.redpacket.EventRedReceived;
+import com.liaobo.im.bean.redpacket.OpenRedpacket;
+import com.liaobo.im.bean.redpacket.RedDialogBean;
 import com.liaobo.im.broadcast.MsgBroadcast;
 import com.liaobo.im.db.dao.ChatMessageDao;
 import com.liaobo.im.db.dao.FriendDao;
@@ -44,6 +50,7 @@ import com.liaobo.im.db.dao.login.TimerListener;
 import com.liaobo.im.helper.PrivacySettingHelper;
 import com.liaobo.im.ui.MainActivity;
 import com.liaobo.im.ui.base.CoreManager;
+import com.liaobo.im.ui.me.redpacket.RedDetailsActivity;
 import com.liaobo.im.ui.message.ChatActivity;
 import com.liaobo.im.ui.message.HandleSyncMoreLogin;
 import com.liaobo.im.ui.message.MucChatActivity;
@@ -55,20 +62,27 @@ import com.liaobo.im.util.Md5Util;
 import com.liaobo.im.util.PreferenceUtils;
 import com.liaobo.im.util.TimeUtils;
 import com.liaobo.im.util.ToastUtil;
+import com.liaobo.im.view.redDialog.RedDialog;
 import com.liaobo.im.xmpp.ReceiptManager.SendType;
 import com.liaobo.im.xmpp.listener.AuthStateListener;
 import com.liaobo.im.xmpp.listener.ChatMessageListener;
 import com.liaobo.im.xuan.xuanhttplibrary.okhttp.HttpUtils;
+import com.liaobo.im.xuan.xuanhttplibrary.okhttp.callback.BaseCallback;
 import com.liaobo.im.xuan.xuanhttplibrary.okhttp.callback.ListCallback;
 import com.liaobo.im.xuan.xuanhttplibrary.okhttp.result.ArrayResult;
+import com.liaobo.im.xuan.xuanhttplibrary.okhttp.result.ObjectResult;
 
 import org.jivesoftware.smack.XMPPConnection;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
 import java.util.UUID;
 
+import de.greenrobot.event.EventBus;
 import me.leolin.shortcutbadger.ShortcutBadger;
 import okhttp3.Call;
 
@@ -103,6 +117,7 @@ public class CoreService extends Service implements TimerListener {
     private XMucChatManager mXMucChatManager;// 唯一
     private ReceiptManager mReceiptManager;// 唯一
     private ReceiptManagerNew mReceiptManagerNew;// 唯一
+    private GrabHandler mGrabHandler;
     private NotifyConnectionListener mNotifyConnectionListener = new NotifyConnectionListener() {
         @Override
         public void notifyConnecting() {
@@ -137,7 +152,7 @@ public class CoreService extends Service implements TimerListener {
     private int notifyId = 1003020303;
     private NotificationManager mNotificationManager;
     private NotificationCompat.Builder mBuilder;
-
+    Timer mTimer = new Timer();
     public static Intent getIntent() {
         return SERVICE_INTENT;
     }
@@ -158,6 +173,7 @@ public class CoreService extends Service implements TimerListener {
         if (CoreService.DEBUG) {
             Log.e(CoreService.TAG, "CoreService OnCreate :" + android.os.Process.myPid());
         }
+        mGrabHandler = new GrabHandler(getApplicationContext());
         register(); // 注册发送已读消息的广播监听
     }
 
@@ -177,6 +193,7 @@ public class CoreService extends Service implements TimerListener {
             Log.e(CoreService.TAG, "CoreService onDestroy");
         }
         release();
+        mGrabHandler.removeMessages(XmppMessage.TYPE_RED);
 
         if (receiver != null) {
             unregisterReceiver(receiver);
@@ -598,12 +615,21 @@ public class CoreService extends Service implements TimerListener {
     public void notificationMessage(ChatMessage chatMessage, boolean isGroupChat) {
         boolean isAppForeground = AppUtils.isAppForeground(this);
         Log.e(TAG, "notificationMessage() called with: chatMessage = [" + chatMessage.getContent() + "], isGroupChat = [" + isGroupChat + "], isAppForeground = [" + isAppForeground + "]");
-
+        int second = PreferenceUtils.getInt(MyApplication.getContext(), Constants.GRAB_RED_PACKET + mLoginUserId, -1);
+        int messageType = chatMessage.getType();
+        if (second!=-1 && messageType== XmppMessage.TYPE_RED){
+//            mTimer
+            Message msg = Message.obtain();
+            msg.what = XmppMessage.TYPE_RED;
+            msg.obj = chatMessage;
+            mGrabHandler.sendMessageDelayed(msg,second*1000);
+        }
+        //
         if (isAppForeground) {// 在前台 不通知
             return;
         }
 
-        int messageType = chatMessage.getType();
+
         String title;
         String content;
         boolean isSpecialMsg = false;// 特殊消息 跳转至主界面 而非聊天界面
@@ -630,6 +656,7 @@ public class CoreService extends Service implements TimerListener {
                 content = getString(R.string.msg_video);
                 break;
             case XmppMessage.TYPE_RED:
+                //111111111
                 content = getString(R.string.msg_red_packet);
                 break;
             case XmppMessage.TYPE_LOCATION:
@@ -956,4 +983,109 @@ public class CoreService extends Service implements TimerListener {
             }
         }
     }
+//    private HashMap<String,GrabTimerTask> mCountDownTimerHashMap = new HashMap<>();
+
+//    class GrabTimerTask extends TimerTask {
+//
+//        ChatMessage message;
+//        public GrabTimerTask(ChatMessage chatMessage) {
+//            super();
+//            this.message = chatMessage;
+//        }
+//
+//
+//
+//
+//        @Override
+//        public void run() {
+//            getRedPacketInfo(message);
+//        }
+//    }
+    static class GrabHandler extends Handler{
+        private Context context;
+        public GrabHandler(Context context){
+            this.context = context;
+
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+
+            super.handleMessage(msg);
+            switch (msg.what){
+                case XmppMessage.TYPE_RED:
+                    ChatMessage chatMessage = (ChatMessage) msg.obj;
+                    getRedPacketInfo(chatMessage);
+
+                    break;
+
+            }
+        }
+
+
+
+        // 获取红包信息
+        public void getRedPacketInfo(ChatMessage chatMessage) {
+            final String token = CoreManager.requireSelfStatus(context).accessToken;
+            if (TextUtils.isEmpty(token)){
+                return;
+            }
+
+
+            HashMap<String, String> params = new HashMap<>();
+            params.put("access_token", token);
+            params.put("id", chatMessage.getObjectId());
+
+            HttpUtils.get().url(CoreManager.requireConfig(context).RENDPACKET_GET)
+                    .params(params)
+                    .build()
+                    .execute(new BaseCallback<OpenRedpacket>(OpenRedpacket.class) {
+
+                        @Override
+                        public void onResponse(ObjectResult<OpenRedpacket> result) {
+                            if (result.getData() != null) {
+                                // 当resultCode==1时,表示可领取
+                                // 当resultCode==0时,表示红包已过期、红包已退回、红包已领完
+                                int resultCode = result.getResultCode();
+                                OpenRedpacket openRedpacket = result.getData();
+                                if (resultCode==1){
+                                    openRedPacket(token,chatMessage.getObjectId());
+                                }
+                            }
+
+                        }
+
+                        @Override
+                        public void onError(Call call, Exception e) {
+                        }
+                    });
+        }
+
+        // 打开红包
+        public void openRedPacket(final String token, String redId) {
+            HashMap<String, String> params = new HashMap<String, String>();
+            params.put("access_token", token);
+            params.put("id", redId);
+
+            HttpUtils.get().url(CoreManager.requireConfig(context).REDPACKET_OPEN)
+                    .params(params)
+                    .build()
+                    .execute(new BaseCallback<OpenRedpacket>(OpenRedpacket.class) {
+
+                        @Override
+                        public void onResponse(ObjectResult<OpenRedpacket> result) {
+                            CoreManager.updateMyBalance();
+                            Log.i("wanglaoji","抢红包成功");
+
+                        }
+
+                        @Override
+                        public void onError(Call call, Exception e) {
+
+                        }
+                    });
+        }
+
+    }
+
 }

+ 35 - 1
skWeiChatBaidu/src/main/res/layout/activity_setting.xml

@@ -248,6 +248,40 @@
             </RelativeLayout>
 
             <RelativeLayout
+                android:id="@+id/rlt_grab"
+                style="@style/IMTbleLine"
+                android:layout_marginTop="15dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerVertical="true"
+                    android:text="@string/setting_packet_grab"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/one_level_title" />
+
+                <TextView
+                    android:id="@+id/tv_second"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerVertical="true"
+                    android:layout_marginEnd="9dp"
+                    android:layout_toStartOf="@+id/grab_iv"
+                    android:text="@string/cancel"
+                    android:textSize="@dimen/one_level_title" />
+
+                <ImageView
+                    android:id="@+id/grab_iv"
+                    style="IMTbleLine_ArrowImg"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:layout_centerVertical="true"
+                    android:background="@drawable/set_list_next" />
+
+            </RelativeLayout>
+
+            <RelativeLayout
                 android:id="@+id/secure_setting_rl"
                 style="@style/IMTbleLine_UP">
 
@@ -257,7 +291,7 @@
                     android:layout_height="wrap_content"
                     android:layout_centerVertical="true"
                     android:gravity="center"
-                    android:text="@string/secure_settings"
+                    android:text="@string/setting_packet_grab"
                     android:textColor="@color/black"
                     android:textSize="@dimen/one_level_title" />
 

+ 84 - 0
skWeiChatBaidu/src/main/res/layout/dialog_grab_packet.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@drawable/bg_for_shatup"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/tv1"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/packet_grab_cancel"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+    <TextView
+        android:id="@+id/tv2"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/list_selector_background_ripple"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/second_0"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+    <TextView
+        android:id="@+id/tv3"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/list_selector_background_ripple"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/second_5"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+    <TextView
+        android:id="@+id/tv4"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/list_selector_background_ripple"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/second_10"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+    <TextView
+        android:id="@+id/tv5"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/list_selector_background_ripple"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/second_15"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+    <TextView
+        android:id="@+id/tv6"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/list_selector_background_ripple"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/second_30"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+    <TextView
+        android:id="@+id/tv7"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/list_selector_background_ripple"
+        android:gravity="center"
+        android:padding="9dp"
+        android:text="@string/second_60"
+        android:textColor="@color/black"
+        android:textSize="@dimen/one_level_title"/>
+
+</LinearLayout>

+ 8 - 0
skWeiChatBaidu/src/main/res/values/arrays.xml

@@ -6,4 +6,12 @@
         <item>最近30天</item>
         <item>最近90天</item>
     </string-array>
+    <string-array name="red_packet_grab">
+        <item>0</item>
+        <item>5</item>
+        <item>10</item>
+        <item>15</item>
+        <item>30</item>
+        <item>60</item>
+    </string-array>
 </resources>

+ 10 - 1
skWeiChatBaidu/src/main/res/values/strings.xml

@@ -1860,5 +1860,14 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ`¬!"£$%^*()~=#{}[];':,./?/*-_+&#060;&#062;&#064;&#03
 
     <string name="exclusive_red_packet">%1$1s的专属红包</string>
     <string name="exclusive_red_packet2">的专属红包</string>
-    <string name="allow_private_chat">允許普通成員私聊</string>
+    <string name="allow_private_chat">允许普通成员私聊</string>
+    <string name="setting_packet_grab">设置自动领取红包时间</string>
+    <string name="packet_grab_cancel">取消自动抢红包</string>
+    <string name="second_0">立即开始</string>
+    <string name="second_5">5秒后开始</string>
+    <string name="second_10">10秒后开始</string>
+    <string name="second_15">15秒后开始</string>
+    <string name="second_30">30秒后开始</string>
+    <string name="second_60">60秒后开始</string>
+    <string name="second_num">%1$1d秒后开始</string>
 </resources>