浏览代码

可以选中分享联系人

liuzhenxing1118 2 年之前
父节点
当前提交
108aa4c878

+ 12 - 4
app/src/main/java/com/xplora/xpchat/activity/MemberShareActivity.java

@@ -1,5 +1,7 @@
 package com.xplora.xpchat.activity;
 
+import android.annotation.SuppressLint;
+import android.content.Intent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.RelativeLayout;
@@ -40,13 +42,13 @@ public class MemberShareActivity extends BaseActivity {
     protected void initView() {
         super.initView();
 
-        XPRecyclerView mRecyclerView = findViewById(R.id.recyclerView);
+        RecyclerView mRecyclerView = findViewById(R.id.recyclerView);
         RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
         mRecyclerView.setHasFixedSize(true);
         mRecyclerView.setLayoutManager(mLayoutManager);
 
-        View footerView = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.chat_list_footer, null);
-        mRecyclerView.addFooterView(footerView);
+//        View footerView = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.chat_list_footer, null);
+//        mRecyclerView.addFooterView(footerView);
 
         mRecyclerAdapter = new RecyclerAdapter(this, mDataList, Constant.E_PAGER.CONTACT, 0);
         mRecyclerAdapter.setListOnClickListener(mGridItemOnClickListener);
@@ -54,15 +56,21 @@ public class MemberShareActivity extends BaseActivity {
     }
 
     RecyclerAdapter.GridItemOnClickListener mGridItemOnClickListener = new RecyclerAdapter.GridItemOnClickListener() {
+        @SuppressLint("NotifyDataSetChanged")
         @Override
         public void onClick(Constant.E_PAGER pagerType, int mViewIndex, int itemIndex, GridModel gridModel) {
             for (int i = 0; i < mDataList.size(); i++) {
-                GridModel model = mDataList.get(itemIndex);
+                GridModel model = mDataList.get(i);
                 model.isSelected = i == itemIndex;
             }
             if (mRecyclerAdapter != null) {
+                //mRecyclerAdapter.setDataList(mDataList);
                 mRecyclerAdapter.notifyDataSetChanged();
             }
         }
     };
+
+    private void onPrivateChat(GridModel gridModel) {
+        finish();
+    }
 }

+ 10 - 0
app/src/main/java/com/xplora/xpchat/activity/PagerActivity.java

@@ -82,6 +82,7 @@ public class PagerActivity extends BaseActivity implements Listener.PlayListener
     private String mChatUserId = "0";
     private int mShareType = 0; //102: 图片  105: 视频
     private String mShareFilePath = "";
+    private MessageBean mShareMemberBean = null;
     private String mCaptureFilePath = ""; //相机拍照需要用到,所拍摄的照片保存位置
 
     private int mPageIndex = 0;
@@ -325,6 +326,8 @@ public class PagerActivity extends BaseActivity implements Listener.PlayListener
             onAlbumCallback(data);
         } else if (requestCode == Constant.REQUEST_CODE_VIDEO) {
             onVideoCallback(data);
+        } else if (requestCode == Constant.REQUEST_CODE_SHARE) {
+            onShareFileCallback(data);
         }
     }
 
@@ -901,10 +904,17 @@ public class PagerActivity extends BaseActivity implements Listener.PlayListener
 
     @Override
     public void onShareFile(int position, MessageBean bean) {
+        mShareMemberBean = bean;
         Intent intent = new Intent(this, MemberShareActivity.class);
         startActivityForResult(intent, Constant.REQUEST_CODE_SHARE);
     }
 
+    public void onShareFileCallback(Intent data) {
+        if (mShareMemberBean == null)
+            return;
+
+    }
+
     @Override
     public void onDeleteMessage(int position, MessageBean bean) {
         Log.d(TAG, "onDeleteMessage:" + bean._id);

+ 1 - 0
app/src/main/java/com/xplora/xpchat/adapter/RecyclerAdapter.java

@@ -52,6 +52,7 @@ public class RecyclerAdapter extends RecyclerView.Adapter<GridView> {
     public void setAppViewHolder(@NonNull GridView viewHolder, int index, GridModel gridModel) {
         String s = gridModel.title.length() <= 7 ? gridModel.title : gridModel.title.substring(0, 7) + "...";
         viewHolder.mTitle.setText(s);
+        viewHolder.mSelectImage.setVisibility(gridModel.isSelected ? View.VISIBLE : View.GONE);
 
         if (viewHolder.mCountButton != null) {
             if (gridModel.count <= 0) {

+ 49 - 13
app/src/main/java/com/xplora/xpchat/fragment/BaseActionFragment.java

@@ -1,23 +1,36 @@
 package com.xplora.xpchat.fragment;
 
+import android.annotation.SuppressLint;
 import android.app.DialogFragment;
 import android.content.Context;
 import android.net.Uri;
 import android.os.Bundle;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
+import android.widget.ImageButton;
 import android.widget.ImageView;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.xplora.xpchat.R;
 import com.xplora.xpchat.model.MessageBean;
+import com.xplora.xpchat.observer.Listener;
+import com.xplora.xpchat.utils.Constant;
 
-public class BaseActionFragment extends DialogFragment {
-    private Context mContext = null;
-    private int position;
-    private MessageBean bean;
+public class BaseActionFragment extends DialogFragment implements View.OnClickListener, View.OnTouchListener {
+    public String TAG = "losion / xpchat :" +  getClass().getSimpleName();
+    public Context mContext = null;
+    public int position;
+    public MessageBean bean;
+
+    public RelativeLayout mButtonLayout = null;
+    public ImageButton mPlayPauseBtn = null;
+    public ImageButton mShareBtn = null;
+    public ImageButton mSaveFileBtn = null;
+    public ImageButton mCloseBtn = null;
 
     public static BaseActionFragment newInstance(Context context) {
         BaseActionFragment fragment = new BaseActionFragment();
@@ -31,20 +44,30 @@ public class BaseActionFragment extends DialogFragment {
         setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
     }
 
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+    public void onCreateViewEx(View rootView) {
         getDialog().getWindow().requestFeature(Window.FEATURE_SWIPE_TO_DISMISS);
-        View rootView = inflater.inflate(R.layout.chat_fragment_photo, container, false);
-        ImageView imageView = (ImageView)rootView.findViewById(R.id.mItemPhoto);
-        TextView noFileText = (TextView)rootView.findViewById(R.id.mNoFileText);
 
-        Uri uri = Uri.parse(bean.filePath);
-        imageView.setImageURI(uri);
+        rootView.setOnTouchListener(this);
+
+        mButtonLayout = (RelativeLayout) rootView.findViewById(R.id.mButtonLayout);
+        mPlayPauseBtn = (ImageButton) rootView.findViewById(R.id.mPlayPauseBtn);
+        mShareBtn = (ImageButton)rootView.findViewById(R.id.mShareBtn);
+        mSaveFileBtn = (ImageButton)rootView.findViewById(R.id.mSaveFileBtn);
+        mCloseBtn = (ImageButton)rootView.findViewById(R.id.mCloseBtn);
+
+        if (mPlayPauseBtn != null) {
+            mPlayPauseBtn.setOnClickListener(this);
+        }
+        mShareBtn.setOnClickListener(this);
+        mSaveFileBtn.setOnClickListener(this);
+        mCloseBtn.setOnClickListener(this);
+
+        TextView noFileText = (TextView)rootView.findViewById(R.id.mNoFileText);
+        String filePath = bean.type == Constant.MESSAGE_TYPE_PHOTO ? bean.filePath : bean.videoPath;
+        Uri uri = Uri.parse(filePath);
         if (noFileText != null) {
             noFileText.setVisibility(uri == null ? View.VISIBLE : View.GONE);
         }
-
-        return rootView;
     }
 
     public void setItemInfo(int position, MessageBean bean) {
@@ -55,4 +78,17 @@ public class BaseActionFragment extends DialogFragment {
     private void remove() {
         dismissAllowingStateLoss();
     }
+
+    @Override
+    public void onClick(View v) {
+
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    @Override
+    public boolean onTouch(View v, MotionEvent event) {
+        int status = mButtonLayout.getVisibility();
+        mButtonLayout.setVisibility(status == View.GONE ? View.VISIBLE : View.GONE);
+        return false;
+    }
 }

+ 15 - 24
app/src/main/java/com/xplora/xpchat/fragment/PhotoFragment.java

@@ -13,11 +13,9 @@ import android.widget.TextView;
 
 import com.xplora.xpchat.R;
 import com.xplora.xpchat.model.MessageBean;
+import com.xplora.xpchat.observer.Listener;
 
-public class PhotoFragment extends DialogFragment {
-    private Context mContext = null;
-    private int position;
-    private MessageBean bean;
+public class PhotoFragment extends BaseActionFragment {
 
     public static PhotoFragment newInstance(Context context) {
         PhotoFragment fragment = new PhotoFragment();
@@ -25,34 +23,27 @@ public class PhotoFragment extends DialogFragment {
         return fragment;
     }
 
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
-    }
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-        getDialog().getWindow().requestFeature(Window.FEATURE_SWIPE_TO_DISMISS);
         View rootView = inflater.inflate(R.layout.chat_fragment_photo, container, false);
-        ImageView imageView = (ImageView)rootView.findViewById(R.id.mItemPhoto);
-        TextView noFileText = (TextView)rootView.findViewById(R.id.mNoFileText);
+        onCreateViewEx(rootView);
+        ImageView imageView = (ImageView) rootView.findViewById(R.id.mItemPhoto);
 
         Uri uri = Uri.parse(bean.filePath);
         imageView.setImageURI(uri);
-        if (noFileText != null) {
-            noFileText.setVisibility(uri == null ? View.VISIBLE : View.GONE);
-        }
-
         return rootView;
     }
 
-    public void setItemInfo(int position, MessageBean bean) {
-        this.position = position;
-        this.bean = bean;
-    }
-
-    private void remove() {
-        dismissAllowingStateLoss();
+    @Override
+    public void onClick(View v) {
+        if (v == mCloseBtn) {
+            dismissAllowingStateLoss();
+        } else if (v == mShareBtn) {
+            Listener.ClickButtonListener listener = (Listener.ClickButtonListener)mContext;
+            listener.onShareFile(position, bean);
+        } else if (v == mSaveFileBtn) {
+            Listener.ClickButtonListener listener = (Listener.ClickButtonListener)mContext;
+            listener.onSaveFile(position, bean);
+        }
     }
 }

+ 10 - 48
app/src/main/java/com/xplora/xpchat/fragment/VideoFragment.java

@@ -24,17 +24,9 @@ import com.xplora.xpchat.observer.Listener;
 
 import java.io.IOException;
 
-public class VideoFragment extends DialogFragment implements Listener.PlayListener, View.OnClickListener {
-    public String TAG = "losion / xpchat :" +  getClass().getSimpleName();
-    private Context mContext = null;
-    private int position;
-    private MessageBean bean;
+public class VideoFragment extends BaseActionFragment implements Listener.PlayListener {
     private MediaPlayerUtils mMediaPlayerUtils = null;
     private SurfaceHolder mSurfaceHolder = null;
-    private ImageButton mPlayPauseBtn = null;
-    private ImageButton mShareBtn = null;
-    private ImageButton mSaveFileBtn = null;
-    private ImageButton mCloseBtn = null;
 
     public static VideoFragment newInstance(Context context) {
         VideoFragment fragment = new VideoFragment();
@@ -42,35 +34,14 @@ public class VideoFragment extends DialogFragment implements Listener.PlayListen
         return fragment;
     }
 
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
-    }
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-        getDialog().getWindow().requestFeature(Window.FEATURE_SWIPE_TO_DISMISS);
         View rootView = inflater.inflate(R.layout.chat_fragment_video, container, false);
         SurfaceView surfaceView = (SurfaceView) rootView.findViewById(R.id.surfaceView);
         mSurfaceHolder = surfaceView.getHolder();
+        onCreateViewEx(rootView);
 
-        mPlayPauseBtn = (ImageButton) rootView.findViewById(R.id.mPlayPauseBtn);
-        mShareBtn = (ImageButton)rootView.findViewById(R.id.mShareBtn);
-        mSaveFileBtn = (ImageButton)rootView.findViewById(R.id.mSaveFileBtn);
-        mCloseBtn = (ImageButton)rootView.findViewById(R.id.mCloseBtn);
-
-        mPlayPauseBtn.setOnClickListener(this);
-        mShareBtn.setOnClickListener(this);
-        mSaveFileBtn.setOnClickListener(this);
-        mCloseBtn.setOnClickListener(this);
         initVideo();
-
-        TextView noFileText = (TextView)rootView.findViewById(R.id.mNoFileText);
-        Uri uri = Uri.parse(bean.videoPath);
-        if (noFileText != null) {
-            noFileText.setVisibility(uri == null ? View.VISIBLE : View.GONE);
-        }
         return rootView;
     }
 
@@ -100,10 +71,10 @@ public class VideoFragment extends DialogFragment implements Listener.PlayListen
         } else if (v == mPlayPauseBtn) {
             if (mMediaPlayerUtils.getIsPlaying()) {
                 mMediaPlayerUtils.mediaPause();
-                setButtonStatus(false);
+                setPlayStatus(false);
             } else {
                 mMediaPlayerUtils.mediaStart();
-                setButtonStatus(true);
+                setPlayStatus(true);
             }
         }
     }
@@ -112,24 +83,15 @@ public class VideoFragment extends DialogFragment implements Listener.PlayListen
         @Override
         public void onCompletion(MediaPlayer mMediaPlayer) {
             mMediaPlayer.seekTo(0);
-            setButtonStatus(false);
+            setPlayStatus(false);
         }
     };
 
-    private void setButtonStatus(boolean isPlaying) {
+    private void setPlayStatus(boolean isPlaying) {
         int resId = isPlaying ? R.drawable.action_pause : R.drawable.action_play;
         mPlayPauseBtn.setBackgroundResource(resId);
     }
 
-    public void setItemInfo(int position, MessageBean bean) {
-        this.position = position;
-        this.bean = bean;
-    }
-
-    private void remove() {
-        dismissAllowingStateLoss();
-    }
-
     @Override
     public void onDestroy() {
         Log.d(TAG, "onDestroy: ");
@@ -139,22 +101,22 @@ public class VideoFragment extends DialogFragment implements Listener.PlayListen
 
     @Override
     public void onPlayStart(MessageBean bean) {
-        setButtonStatus(true);
+        setPlayStatus(true);
     }
 
     @Override
     public void onPlayFinish(MessageBean bean) {
         mMediaPlayerUtils.mediaSeekTo(0);
-        setButtonStatus(false);
+        setPlayStatus(false);
     }
 
     @Override
     public void onPlayCancel(MessageBean bean) {
-        setButtonStatus(false);
+        setPlayStatus(false);
     }
 
     @Override
     public void onPlayException(String exMessage) {
-        setButtonStatus(false);
+        setPlayStatus(false);
     }
 }

+ 2 - 0
app/src/main/java/com/xplora/xpchat/view/GridView.java

@@ -19,10 +19,12 @@ public class GridView extends RecyclerView.ViewHolder{
     public ImageView mIcon;
     public TextView mTitle;
     public Button mCountButton;
+    public ImageView mSelectImage;
     public GridView(@NonNull View itemView) {
         super(itemView);
         mIcon = itemView.findViewById(R.id.icon);
         mTitle = itemView.findViewById(R.id.title);
         mCountButton = itemView.findViewById(R.id.btn_count);
+        mSelectImage = itemView.findViewById(R.id.mSelectImage);
     }
 }

+ 1 - 1
app/src/main/res/layout/activity_itemlist_share.xml

@@ -5,7 +5,7 @@
     android:background="@color/black"
     >
 
-    <com.xplora.xpchat.view.XPRecyclerView
+    <androidx.recyclerview.widget.RecyclerView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginStart="15dp"

+ 0 - 1
app/src/main/res/layout/item_contacts.xml

@@ -40,7 +40,6 @@
         android:layout_marginEnd="7dp"
         android:layout_marginBottom="15dp"
         android:src="@drawable/icon_select_member"
-        android:visibility="gone"
         />
 
     <Button