/* * Copyright (c) 2020 WildFireChat. All rights reserved. */ package cn.wildfire.chat.kit.user; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModelProviders; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import cn.wildfire.chat.kit.*; import cn.wildfire.chat.kit.common.OperateResult; import cn.wildfire.chat.kit.contact.ContactViewModel; import cn.wildfire.chat.kit.contact.newfriend.InviteFriendActivity; import cn.wildfire.chat.kit.conversation.ConversationActivity; import cn.wildfire.chat.kit.qrcode.QRCodeActivity; import cn.wildfire.chat.kit.third.utils.ImageUtils; import cn.wildfire.chat.kit.third.utils.UIUtils; import cn.wildfire.chat.kit.widget.OptionItemView; import cn.wildfire.chat.moment.feed.NewFeedListActivity; import cn.wildfirechat.model.Conversation; import cn.wildfirechat.model.UserInfo; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.lqr.imagepicker.ImagePicker; import com.lqr.imagepicker.bean.ImageItem; import java.io.File; import java.util.ArrayList; public class UserInfoFragment extends Fragment { @BindView(R2.id.portraitImageView) ImageView portraitImageView; @BindView(R2.id.nameTextView) TextView nameTextView; @BindView(R2.id.accountTextView) TextView accountTextView; @BindView(R2.id.chatButton) View chatButton; @BindView(R2.id.voipChatButton) View voipChatButton; @BindView(R2.id.inviteButton) Button inviteButton; @BindView(R2.id.aliasOptionItemView) OptionItemView aliasOptionItemView; @BindView(R2.id.qrCodeOptionItemView) OptionItemView qrCodeOptionItemView; @BindView(R2.id.momentButton) View momentButton; @BindView(R2.id.favContactTextView) TextView favContactTextView; private UserInfo userInfo; private UserViewModel userViewModel; private ContactViewModel contactViewModel; public static UserInfoFragment newInstance(UserInfo userInfo) { UserInfoFragment fragment = new UserInfoFragment(); Bundle args = new Bundle(); args.putParcelable("userInfo", userInfo); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); assert args != null; userInfo = args.getParcelable("userInfo"); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.user_info_fragment, container, false); ButterKnife.bind(this, view); init(); return view; } private void init() { userViewModel = ViewModelProviders.of(this).get(UserViewModel.class); contactViewModel = ViewModelProviders.of(this).get(ContactViewModel.class); String selfUid = userViewModel.getUserId(); if (selfUid.equals(userInfo.uid)) { // self chatButton.setVisibility(View.GONE); voipChatButton.setVisibility(View.GONE); inviteButton.setVisibility(View.GONE); qrCodeOptionItemView.setVisibility(View.VISIBLE); aliasOptionItemView.setVisibility(View.VISIBLE); } else if (contactViewModel.isFriend(userInfo.uid)) { // friend chatButton.setVisibility(View.VISIBLE); voipChatButton.setVisibility(View.VISIBLE); inviteButton.setVisibility(View.GONE); } else { // stranger momentButton.setVisibility(View.GONE); chatButton.setVisibility(View.GONE); voipChatButton.setVisibility(View.GONE); inviteButton.setVisibility(View.VISIBLE); aliasOptionItemView.setVisibility(View.GONE); } if (userInfo.type == 1) { voipChatButton.setVisibility(View.GONE); } if (userInfo.uid.equals(Config.FILE_TRANSFER_ID)) { chatButton.setVisibility(View.VISIBLE); inviteButton.setVisibility(View.GONE); } setUserInfo(userInfo); userViewModel.userInfoLiveData().observe(getViewLifecycleOwner(), userInfos -> { for (UserInfo info : userInfos) { if (userInfo.uid.equals(info.uid)) { userInfo = info; setUserInfo(info); break; } } }); userViewModel.getUserInfo(userInfo.uid, true); favContactTextView.setVisibility(contactViewModel.isFav(userInfo.uid) ? View.VISIBLE : View.GONE); if (!WfcUIKit.getWfcUIKit().isSupportMoment()) { momentButton.setVisibility(View.GONE); } } private void setUserInfo(UserInfo userInfo) { RequestOptions requestOptions = new RequestOptions() .placeholder(R.mipmap.avatar_def) .transforms(new CenterCrop(), new RoundedCorners(UIUtils.dip2Px(getContext(), 10))); Glide.with(this) .load(userInfo.portrait) .apply(requestOptions) .into(portraitImageView); nameTextView.setText(userViewModel.getUserDisplayName(userInfo)); accountTextView.setText("ID:" + userInfo.name); } @OnClick(R2.id.chatButton) void chat() { Intent intent = new Intent(getActivity(), ConversationActivity.class); Conversation conversation = new Conversation(Conversation.ConversationType.Single, userInfo.uid, 0); intent.putExtra("conversation", conversation); startActivity(intent); getActivity().finish(); } @OnClick(R2.id.momentButton) void moment() { //跳转朋友圈 Intent intent = new Intent(getActivity(), NewFeedListActivity.class); // Intent intent = new Intent(WfcIntent.ACTION_MOMENT); intent.putExtra("userInfo", userInfo); startActivity(intent); } @OnClick(R2.id.voipChatButton) void voipChat() { WfcUIKit.singleCall(getActivity(), userInfo.uid, false); } @OnClick(R2.id.aliasOptionItemView) void alias() { String selfUid = userViewModel.getUserId(); if (selfUid.equals(userInfo.uid)) { Intent intent = new Intent(getActivity(), ChangeMyNameActivity.class); startActivity(intent); } else { Intent intent = new Intent(getActivity(), SetAliasActivity.class); intent.putExtra("userId", userInfo.uid); startActivity(intent); } } private static final int REQUEST_CODE_PICK_IMAGE = 100; @OnClick(R2.id.portraitImageView) void portrait() { if (userInfo.uid.equals(userViewModel.getUserId())) { updatePortrait(); } else { // TODO show big portrait } } private void updatePortrait() { ImagePicker.picker().pick(this, REQUEST_CODE_PICK_IMAGE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_PICK_IMAGE && resultCode == Activity.RESULT_OK) { ArrayList images = (ArrayList) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS); if (images == null || images.isEmpty()) { Toast.makeText(getActivity(), "更新头像失败: 选取文件失败 ", Toast.LENGTH_SHORT).show(); return; } File thumbImgFile = ImageUtils.genThumbImgFile(images.get(0).path); if (thumbImgFile == null) { Toast.makeText(getActivity(), "更新头像失败: 生成缩略图失败", Toast.LENGTH_SHORT).show(); return; } String imagePath = thumbImgFile.getAbsolutePath(); MutableLiveData> result = userViewModel.updateUserPortrait(imagePath); result.observe(this, booleanOperateResult -> { if (booleanOperateResult.isSuccess()) { Toast.makeText(getActivity(), "更新头像成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), "更新头像失败: " + booleanOperateResult.getErrorCode(), Toast.LENGTH_SHORT).show(); } }); } else { super.onActivityResult(requestCode, resultCode, data); } } @OnClick(R2.id.inviteButton) void invite() { Intent intent = new Intent(getActivity(), InviteFriendActivity.class); intent.putExtra("userInfo", userInfo); startActivity(intent); getActivity().finish(); } @OnClick(R2.id.qrCodeOptionItemView) void showMyQRCode() { UserInfo userInfo = userViewModel.getUserInfo(userViewModel.getUserId(), false); String qrCodeValue = WfcScheme.QR_CODE_PREFIX_USER + userInfo.uid; startActivity(QRCodeActivity.buildQRCodeIntent(getActivity(), "二维码", userInfo.portrait, qrCodeValue)); } }