package org.aisen.weibo.sina.ui.fragment.profile;
import android.app.Dialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import com.umeng.analytics.MobclickAgent;
import org.aisen.android.common.utils.ViewUtils;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.network.task.WorkTask;
import org.aisen.android.support.inject.ViewInject;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.fragment.ABaseFragment;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.sinasdk.SinaSDK;
import org.aisen.weibo.sina.sinasdk.bean.FriendshipShow;
import org.aisen.weibo.sina.sinasdk.bean.Group;
import org.aisen.weibo.sina.sinasdk.bean.GroupListed;
import org.aisen.weibo.sina.sinasdk.bean.GroupMemberListed;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.support.utils.ThemeUtils;
import org.aisen.weibo.sina.ui.activity.base.SinaCommonActivity;
import org.aisen.weibo.sina.ui.activity.profile.WeiboClientActivity;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import java.util.ArrayList;
/**
* Created by wangdan on 16/1/12.
*/
public class ProfileAboutFragment extends ABaseFragment
implements BizFragment.OnModifyUserRemarkCallback,
View.OnClickListener,
ProfilePagerFragment.IUserProfileRefresh,
BizFragment.OnCreateFriendshipCallback,
BizFragment.OnDestoryFriendshipCallback,
BizFragment.OnDestoryFollowerCallback {
public static ProfileAboutFragment newInstance(WeiBoUser user) {
Bundle args = new Bundle();
args.putSerializable("mUser", user);
ProfileAboutFragment fragment = new ProfileAboutFragment();
fragment.setArguments(args);
return fragment;
}
@ViewInject(id = R.id.item01)
View item01;
@ViewInject(id = R.id.item02)
View item02;
@ViewInject(id = R.id.item03)
View item03;
@ViewInject(id = R.id.item04)
View item04;
@ViewInject(id = R.id.item05)
View item05;
@ViewInject(id = R.id.scrollView)
ScrollView scrollView;
@ViewInject(id = R.id.btnMention, click = "onClick")
TextView btnMention;
@ViewInject(id = R.id.btnDM, click = "onClick")
TextView btnDM;
@ViewInject(id = R.id.btnDetail, click = "onClick")
TextView btnDetail;
private WeiBoUser mUser;
private FriendshipShow mFriendship;
private GroupMemberListed mGroupMemberListed;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUser = savedInstanceState == null ? (WeiBoUser) getArguments().getSerializable("mUser")
: (WeiBoUser) savedInstanceState.getSerializable("mUser");
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("mUser", mUser);
outState.putSerializable("friendship", mFriendship);
outState.putSerializable("groupListed", mGroupMemberListed);
}
@Override
public int inflateContentView() {
return R.layout.ui_profile_about;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
if (savedInstanceSate == null) {
loadFriendship();
}
}
void setProfile() {
View reasonView = item03;
View locationView = item04;
View descView = item05;
View remarkView = item01;
View groupsView = item02;
// 认证原因
if (!TextUtils.isEmpty(mUser.getVerified_reason())) {
reasonView.setVisibility(View.VISIBLE);
setItemTitle(reasonView, getString(R.string.profile_ver_reason_hint));
setItemBody(reasonView, mUser.getVerified_reason() + "");
} else {
reasonView.setVisibility(View.GONE);
}
// 所在地
setItemTitle(locationView, getString(R.string.profile_location_hint));
setItemBody(locationView, mUser.getLocation() + "");
// 简介
setItemTitle(descView, getString(R.string.profile_des_hint02));
if (!TextUtils.isEmpty(mUser.getDescription())) {
setItemBody(descView, mUser.getDescription());
} else {
setItemBody(descView, getString(R.string.profile_des_none));
}
// 备注
setItemTitle(remarkView, getString(R.string.profile_remark_hint));
remarkView.setVisibility(mFriendship == null || !mFriendship.getSource().getFollowing() ? View.GONE : View.VISIBLE);
if (mFriendship != null) {
TextView txtRemark = (TextView) remarkView.findViewById(R.id.txtBody);
try {
BizFragment.createBizFragment(this).modifyUserMark(remarkView.findViewById(R.id.btnItem), mUser, this);
} catch (Exception e) {
}
if (!TextUtils.isEmpty(mUser.getRemark()))
txtRemark.setText(mUser.getRemark());
else
txtRemark.setText(R.string.profile_remark_none02);
}
// 分组
TextView txtGroups = (TextView) groupsView.findViewById(R.id.txtBody);
groupsView.setVisibility(mGroupMemberListed == null ? View.GONE : View.VISIBLE);
groupsView.findViewById(R.id.btnItem).setTag("groups");
groupsView.findViewById(R.id.btnItem).setOnClickListener(this);
if (mGroupMemberListed != null) {
if (mGroupMemberListed.getLists().size() == 0) {
txtGroups.setText(R.string.profile_group_none);
} else {
StringBuffer sb = new StringBuffer();
for (GroupListed groupListed : mGroupMemberListed.getLists())
sb.append(groupListed.getName()).append(" ");
txtGroups.setText(sb.toString().trim());
}
}
// 最后一个Divider不显示
if (item05.getVisibility() == View.VISIBLE) {
item05.findViewById(R.id.viewDivider).setVisibility(View.GONE);
} else if (item04.getVisibility() == View.VISIBLE) {
if (item04.getVisibility() == View.VISIBLE) {
item04.findViewById(R.id.viewDivider).setVisibility(View.GONE);
}
}
}
private void setItemTitle(View view, String text) {
((TextView) view.findViewById(R.id.txtTitle)).setText(text);
}
private void setItemBody(View view, String text) {
((TextView) view.findViewById(R.id.txtBody)).setText(text);
}
private void loadFriendship() {
// 加载用户关系
if (mUser != null && !mUser.getIdstr().equals(AppContext.getAccount().getUser().getIdstr())) {
new FriendshipTask().execute();
}
}
public View getScrollView() {
return scrollView;
}
@Override
public void onModifyUserRemark(String remark) {
mUser.setRemark(remark);
setProfile();
}
@Override
public void onFriendshipCreated(WeiBoUser targetUser) {
if (mFriendship != null)
mFriendship.getSource().setFollowing(true);
mUser.setRecentStatusId(targetUser.getRecentStatusId());
mGroupMemberListed = new GroupMemberListed();
mGroupMemberListed.setLists(new ArrayList<GroupListed>());
mGroupMemberListed.setUid(mUser.getIdstr());
setProfile();
setGroupList();
// 设置Pager的菜单显示
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(SinaCommonActivity.FRAGMENT_TAG);
((ProfilePagerFragment) fragment).setFriendshipShow(mFriendship);
}
@Override
public void onFriendshipDestoryed(WeiBoUser targetUser) {
if (mFriendship != null)
mFriendship.getSource().setFollowing(false);
mGroupMemberListed = null;
mUser.setRemark("");
setProfile();
// 设置Pager的菜单显示
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(SinaCommonActivity.FRAGMENT_TAG);
((ProfilePagerFragment) fragment).setFriendshipShow(mFriendship);
}
@Override
public void onDestoryFollower(WeiBoUser user) {
if (mFriendship != null)
mFriendship.getTarget().setFollowing(false);
// 设置Pager的菜单显示
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(SinaCommonActivity.FRAGMENT_TAG);
((ProfilePagerFragment) fragment).setFriendshipShow(mFriendship);
}
@Override
public void onClick(View v) {
String tag = v.getTag() == null ? null : v.getTag().toString();
// 分组管理
if ("groups".equalsIgnoreCase(tag)) {
setGroupList();
}
// @Ta
else if (v == btnMention) {
MobclickAgent.onEvent(getActivity(), "mention_ta");
BizFragment.createBizFragment(this).mentionUser(getActivity(), mUser);
}
// 私信
else if (v == btnDM) {
MobclickAgent.onEvent(getActivity(), "dm_ta");
WeiboClientActivity.launchChat(getActivity(), mUser.getIdstr());
}
// 详细信息
else if (v == btnDetail) {
MobclickAgent.onEvent(getActivity(), "more_ta");
WeiboClientActivity.launchProfile(getActivity(), mUser.getIdstr());
}
}
/**
* 设置分组信息
*/
Dialog groupDialog;
public void setGroupList() {
if (mGroupMemberListed == null)
return;
if (groupDialog != null && groupDialog.isShowing())
groupDialog.dismiss();
String[] items = new String[AppContext.getAccount().getGroups().getLists().size()];
final boolean[] checkedItems = new boolean[AppContext.getAccount().getGroups().getLists().size()];
final boolean[] editCheckedItems = new boolean[AppContext.getAccount().getGroups().getLists().size()];
for (int i = 0; i < AppContext.getAccount().getGroups().getLists().size(); i++) {
Group group = AppContext.getAccount().getGroups().getLists().get(i);
items[i] = group.getName();
checkedItems[i] = false;
editCheckedItems[i] = false;
for (GroupListed groupListed : mGroupMemberListed.getLists()) {
if (groupListed.getIdstr().equals(group.getIdstr())) {
checkedItems[i] = true;
editCheckedItems[i] = true;
break;
}
}
}
// View customTitle = View.inflate(getActivity(), R.layout.lay_group_dialogtitle, null);
// customTitle.findViewById(R.id.btnSettings).setOnClickListener(new View.OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // 设置分组
// GroupSortFragment.lanuch(getActivity());
// }
// });
AlertDialogWrapper.Builder dialogBuilder = new AlertDialogWrapper.Builder(getActivity())
.setTitle(R.string.profile_group_setting)
.setMultiChoiceItems(items, editCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
editCheckedItems[which] = isChecked;
}
});
try {
try {
// 解决有些设备版本较低的BUG,没查这个方法的最低版本要求
dialogBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
groupDialog = null;
}
});
} catch (NoSuchMethodError e) {
e.printStackTrace();
}
} catch (Exception e) {
}
groupDialog = dialogBuilder.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new SetGroupTask().execute(checkedItems, editCheckedItems);
}
})
.show();
}
public void setUser(WeiBoUser user) {
this.mUser = user;
setProfile();
}
// 设置分组
class SetGroupTask extends WorkTask<boolean[], String, Boolean> {
@Override
protected void onPrepare() {
super.onPrepare();
ViewUtils.createProgressDialog(getActivity(), getString(R.string.profile_group_update_loading), ThemeUtils.getThemeColor()).show();
}
@Override
public Boolean workInBackground(boolean[]... params) throws TaskException {
final boolean[] checkedItems = params[0];
final boolean[] editCheckedItems = params[1];
mGroupMemberListed = new GroupMemberListed();
mGroupMemberListed.setLists(new ArrayList<GroupListed>());
for (int i = 0; i < editCheckedItems.length; i++) {
Group group = AppContext.getAccount().getGroups().getLists().get(i);
GroupListed groupListed = new GroupListed();
groupListed.setIdstr(group.getIdstr());
groupListed.setName(group.getName());
// 这个分组没有选中
if (editCheckedItems[i]) {
// 如果这个分组原来也是选中的,则不需要编辑
if (checkedItems[i]) {
mGroupMemberListed.getLists().add(groupListed);
}
// 如果这个分组原来没有选中,则添加
else {
// 添加好友到分组
SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).friendshipsGroupdMembersAdd(mUser.getIdstr(), group.getIdstr());
publishProgress(String.format(getString(R.string.profile_add_to_group), group.getName()));
mGroupMemberListed.getLists().add(groupListed);
}
} else {
// 如果原来有这个分组,现在没有勾选,则删除
if (checkedItems[i]) {
// 从分组中删除好友
SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).friendshipsGroupdMembersDestory(mUser.getIdstr(), group.getIdstr());
publishProgress(String.format(getString(R.string.profile_group_remvoe_friend), group.getName()));
}
// 原来没有勾选,现在也没有勾选,不做处理
}
}
return true;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
if (getActivity() != null && values != null && values.length > 0)
ViewUtils.updateProgressDialog(values[0]);
}
@Override
protected void onFinished() {
super.onFinished();
ViewUtils.dismissProgressDialog();
setProfile();
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(R.string.profile_edit_group_faild);
}
@Override
protected void onSuccess(Boolean result) {
super.onSuccess(result);
showMessage(R.string.profile_edit_group_success);
}
}
// 获取用户关系
class FriendshipTask extends WorkTask<Void, Void, FriendshipShow> {
@Override
public FriendshipShow workInBackground(Void... params) throws TaskException {
FriendshipShow friendshipShow = SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).friendshipsShow(AppContext.getAccount().getUser().getIdstr(), mUser.getIdstr());
if (friendshipShow.getSource().getFollowing()) {
GroupMemberListed[] result = SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).friendshipGroupsListed(mUser.getIdstr());
if (result != null && result.length > 0) {
mGroupMemberListed = result[0];
} else {
mGroupMemberListed = new GroupMemberListed();
mGroupMemberListed.setLists(new ArrayList<GroupListed>());
mGroupMemberListed.setUid(mUser.getId());
}
}
return friendshipShow;
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
// 如果界面没有被销毁,就加载
if (getActivity() != null) {
BaseActivity baseActivity = (BaseActivity) getActivity();
if (!baseActivity.isDestory()) {
new FriendshipTask().execute();
}
}
}
@Override
protected void onSuccess(FriendshipShow result) {
super.onSuccess(result);
if (getActivity() != null) {
mFriendship = result;
// 设置Pager的菜单显示
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(SinaCommonActivity.FRAGMENT_TAG);
((ProfilePagerFragment) fragment).setFriendshipShow(mFriendship);
getActivity().invalidateOptionsMenu();
setProfile();
}
}
}
@Override
public void refreshProfile() {
loadFriendship();
}
}