package org.aisen.weibo.sina.ui.fragment.profile; import android.app.Activity; import android.app.Fragment; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import org.aisen.android.component.bitmaploader.BitmapLoader; import org.aisen.android.component.bitmaploader.core.ImageConfig; import org.aisen.android.component.bitmaploader.display.DefaultDisplayer; import org.aisen.android.component.bitmaploader.download.DownloadProcess; import org.aisen.android.network.task.TaskException; import org.aisen.android.network.task.WorkTask; import org.aisen.android.support.bean.TabItem; import org.aisen.android.support.inject.InjectUtility; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.ui.activity.basic.BaseActivity; import org.aisen.android.ui.activity.container.FragmentArgs; import org.aisen.android.ui.fragment.ATabsTabLayoutFragment; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.base.AppContext; import org.aisen.weibo.sina.base.AppSettings; import org.aisen.weibo.sina.sinasdk.SinaSDK; import org.aisen.weibo.sina.sinasdk.bean.FriendshipShow; import org.aisen.weibo.sina.sinasdk.bean.Token; import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser; import org.aisen.weibo.sina.support.utils.AccountUtils; import org.aisen.weibo.sina.support.utils.AisenUtils; import org.aisen.weibo.sina.support.utils.ThemeUtils; import org.aisen.weibo.sina.support.utils.UMengUtil; import org.aisen.weibo.sina.ui.activity.base.SinaCommonActivity; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import org.aisen.weibo.sina.ui.fragment.friendship.FriendshipPagerFragment; import org.aisen.weibo.sina.ui.widget.ProfileCollapsingToolbarLayout; import java.io.File; import java.util.ArrayList; import java.util.Set; /** * Created by wangdan on 16/1/12. */ public class ProfilePagerFragment extends ATabsTabLayoutFragment<TabItem> implements View.OnClickListener, BizFragment.OnCreateFriendshipCallback, BizFragment.OnDestoryFriendshipCallback, BizFragment.OnDestoryFollowerCallback { public static void launch(Activity from, WeiBoUser user) { FragmentArgs args = new FragmentArgs(); args.add("mUser", user); args.add(SET_INDEX, String.valueOf(1)); SinaCommonActivity.launch(from, ProfilePagerFragment.class, args); } public static ProfilePagerFragment newInstance() { ProfilePagerFragment fragment = new ProfilePagerFragment(); Bundle args = new Bundle(); args.putString(SET_INDEX, String.valueOf(1)); fragment.setArguments(args); return fragment; } @ViewInject(id = R.id.collapsingToolbar) ProfileCollapsingToolbarLayout collapsingToolbarLayout; // 封面 @ViewInject(id = R.id.imgCover) ImageView imgCover; // 名字 @ViewInject(id = R.id.txtName) TextView txtName; // 头像 @ViewInject(id = R.id.imgAvatar) ImageView imgAvatar; // 认证类别 @ViewInject(id = R.id.imgVerified) ImageView imgVerified; // 性别 @ViewInject(id = R.id.imgGender) ImageView imgGender; // 粉丝数 @ViewInject(id = R.id.txtFollowersCounter, click = "onClick") TextView txtFollowersCounter; // 关注数 @ViewInject(id = R.id.txtFriendsCounter, click = "onClick") TextView txtFriendsCounter; // 简介 @ViewInject(id = R.id.txtDesc) TextView txtDesc; private WeiBoUser mUser; private FriendshipShow mFriendship; private int lastPosition = 1; @Override public int inflateContentView() { return -1; } @Override public int inflateActivityContentView() { return R.layout.ui_profile_pager; } public int setActivityTheme() { return ThemeUtils.themeArr[AppSettings.getThemeColor()][2]; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { InjectUtility.initInjectedView(getActivity(), this, ((BaseActivity) getActivity()).getRootView()); layoutInit(inflater, savedInstanceState); return null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mUser = savedInstanceState == null ? (WeiBoUser) getArguments().getSerializable("mUser") : (WeiBoUser) savedInstanceState.getSerializable("mUser"); } @Override protected void setupTabLayout(Bundle savedInstanceSate, TabLayout tabLayout) { super.setupTabLayout(savedInstanceSate, tabLayout); tabLayout.setTabTextColors(getResources().getColor(R.color.text_87_inverse), Color.WHITE); tabLayout.setSelectedTabIndicatorColor(Color.WHITE); } public void setUser(WeiBoUser user) { mUser = user; layoutInit(LayoutInflater.from(getActivity()), null); collapsingToolbarLayout.resetNameBitmap(); } @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) { if (mUser == null) { return; } super.layoutInit(inflater, savedInstanceSate); if (savedInstanceSate == null) new RefreshProfileTask().execute(); setProfile(); BaseActivity activity = (BaseActivity) getActivity(); // activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); activity.getSupportActionBar().setDisplayShowHomeEnabled(false); activity.getSupportActionBar().setTitle(""); // activity.getToolbar().setBackgroundColor(Color.TRANSPARENT); setHasOptionsMenu(true); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("mUser", mUser); } @Override protected ArrayList<TabItem> generateTabs() { ArrayList<TabItem> tabItems = new ArrayList<>(); tabItems.add(new TabItem("1", getString(R.string.profile_tab1))); tabItems.add(new TabItem("2", String.format("%s(%s)", getString(R.string.profile_tab2), AisenUtils.getCounter(mUser.getStatuses_count())))); tabItems.add(new TabItem("3", getString(R.string.profile_tab3))); if (mUser.getIdstr().equalsIgnoreCase(AppContext.getAccount().getUser().getIdstr())) { tabItems.add(new TabItem("4", getString(R.string.profile_tab4))); } return tabItems; } @Override protected Fragment newFragment(TabItem bean) { int type = Integer.parseInt(bean.getType()); // 关于 if (type == 1) { return ProfileAboutFragment.newInstance(mUser); } // 用户微博 else if (type == 2) { return ProfileTimelineFragment.newInstance(mUser); } // 相册 else if (type == 3) { return PhotosFragment.newInstance(mUser); } // 收藏 else if (type == 4) { return TimelineFavoritesFragment.newInstance(); } return null; } private void setProfile() { // 封面 ImageConfig coverConfig = new ImageConfig(); coverConfig.setLoadfaildRes(R.drawable.bg_banner_dialog); coverConfig.setLoadingRes(R.drawable.bg_banner_dialog); coverConfig.setDisplayer(new DefaultDisplayer()); BitmapLoader.getInstance().display(this, mUser.getCover_image_phone(), imgCover, coverConfig); // 名字 // fuck 2014-09-04 当名字过长大于10个字时,截取部分文字 // int maxLength = AisenUtils.getStrLength("一二三四五六七八九十"); int maxLength = AisenUtils.getStrLength("一二三四五"); if (AisenUtils.getStrLength(mUser.getName()) > maxLength) { StringBuffer sb = new StringBuffer(); int index = 0; while (AisenUtils.getStrLength(sb.toString()) < maxLength) { if (index >= mUser.getName().length()) break; sb.append(mUser.getName().charAt(index)); index++; } sb.append("..."); txtName.setText(sb.toString()); } else { txtName.setText(mUser.getScreen_name()); } // 头像 File avatarFile = BitmapLoader.getInstance().getCacheFile(AisenUtils.getUserPhoto(mUser)); if (avatarFile.exists()) { Bitmap bitmap = BitmapFactory.decodeFile(avatarFile.getAbsolutePath()); imgAvatar.setImageBitmap(bitmap); collapsingToolbarLayout.setAvatarBitmap(bitmap); } else { ImageConfig config = new ImageConfig(); config.setId("large"); config.setDisplayer(new DefaultDisplayer()); config.setLoadingRes(R.drawable.user_placeholder); config.setLoadfaildRes(R.drawable.user_placeholder); config.setProgress(new DownloadProcess() { @Override public void finishedDownload(byte[] bytes) { super.finishedDownload(bytes); collapsingToolbarLayout.setAvatarBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length)); } }); BitmapLoader.getInstance().display(this, AisenUtils.getUserPhoto(mUser), imgAvatar, config); } // 性别 imgGender.setVisibility(View.VISIBLE); if ("m".equals(mUser.getGender())) imgGender.setImageResource(R.drawable.list_male); else if ("f".equals(mUser.getGender())) imgGender.setImageResource(R.drawable.list_female); else imgGender.setVisibility(View.GONE); // 认证 AisenUtils.setImageVerified(imgVerified, mUser); // 关注数 txtFriendsCounter.setText(String.format(getString(R.string.profile_friends), AisenUtils.getCounter(mUser.getFriends_count()))); // 粉丝数 txtFollowersCounter.setText(String.format(getString(R.string.profile_followers), AisenUtils.getCounter(mUser.getFollowers_count()))); // 简介 txtDesc.setText(mUser.getDescription()); // 简介 if (!TextUtils.isEmpty(mUser.getDescription())) txtDesc.setText(mUser.getDescription()); else txtDesc.setText(getString(R.string.profile_des_none)); } @Override public void onClick(View v) { // 关注 if (v.getId() == R.id.txtFriendsCounter) { FriendshipPagerFragment.launch(getActivity(), mUser, 0); } // 粉丝 else if (v.getId() == R.id.txtFollowersCounter) { FriendshipPagerFragment.launch(getActivity(), mUser, 1); } } // @Override // public void onRefresh() { // Fragment fragment = getCurrentFragment(); // if (fragment instanceof IUserProfileRefresh) { // // 刷新用户关系 // ((IUserProfileRefresh) fragment).refreshProfile(); // // // 刷新用户详情资料 // new RefreshProfileTask().execute(); // } // } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_profile_pager, menu); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); MenuItem createItem = menu.findItem(R.id.create); MenuItem destoryItem = menu.findItem(R.id.destory); MenuItem followerDestoryItem = menu.findItem(R.id.followDestory); if (mUser == null || AppContext.getAccount().getUser().getIdstr().equals(mUser.getIdstr())) { createItem.setVisible(false); destoryItem.setVisible(false); followerDestoryItem.setVisible(false); } else { createItem.setVisible(mFriendship != null && !mFriendship.getSource().getFollowing()); destoryItem.setVisible(mFriendship != null && mFriendship.getSource().getFollowing()); followerDestoryItem.setVisible(mFriendship != null && mFriendship.getTarget().getFollowing()); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // 关注 if (item.getItemId() == R.id.create) { BizFragment.createBizFragment(this).createFriendship(mUser, this); } // 取消关注 else if (item.getItemId() == R.id.destory) { BizFragment.createBizFragment(this).destoryFriendship(mUser, this); } // 移除粉丝 else if (item.getItemId() == R.id.followDestory) { BizFragment.createBizFragment(this).destoryFollower(mUser, this); } return super.onOptionsItemSelected(item); } @Override public void onFriendshipCreated(WeiBoUser targetUser) { ProfileAboutFragment fragment = getProfileFragment(); if (fragment != null) { fragment.onFriendshipCreated(targetUser); } } @Override public void onFriendshipDestoryed(WeiBoUser targetUser) { ProfileAboutFragment fragment = getProfileFragment(); if (fragment != null) { fragment.onFriendshipDestoryed(targetUser); } } @Override public void onDestoryFollower(WeiBoUser user) { ProfileAboutFragment fragment = getProfileFragment(); if (fragment != null) { fragment.onDestoryFollower(user); } } private ProfileAboutFragment getProfileFragment() { if (getFragments() == null) return null; Set<String> keyset = getFragments().keySet(); for (String key : keyset) { Fragment fragment = getFragments().get(key); if (fragment instanceof ProfileAboutFragment) { ProfileAboutFragment tab1Fragment = (ProfileAboutFragment) fragment; return tab1Fragment; } } return null; } // 刷新用户信息 class RefreshProfileTask extends WorkTask<Void, Void, WeiBoUser> { @Override public WeiBoUser workInBackground(Void... params) throws TaskException { Token token = AppContext.getAccount().getAdvancedToken(); WeiBoUser userInfo = SinaSDK.getInstance(token).userShow(mUser.getIdstr(), null); if (AppContext.isLoggedIn() && userInfo.getIdstr().equals(AppContext.getAccount().getUser().getIdstr())) { // 更新内存 AppContext.getAccount().setUser(userInfo); AccountUtils.newAccount(AppContext.getAccount()); } return userInfo; } @Override protected void onSuccess(WeiBoUser result) { super.onSuccess(result); if (getActivity() == null || result == null) return; // 有些时候获取不到用户信息了 // 艹他妈的新浪,remark都不让获取了 if (!TextUtils.isEmpty(result.getRemark())) mUser.setRemark(result.getRemark()); if (result.getFollowers_count() > 0) mUser.setFollowers_count(result.getFollowers_count()); if (result.getFriends_count() > 0) mUser.setFriends_count(result.getFriends_count()); if (!TextUtils.isEmpty(result.getCover_image_phone())) mUser.setCover_image_phone(result.getCover_image_phone()); if (!TextUtils.isEmpty(result.getDescription())) mUser.setDescription(result.getDescription()); if (!TextUtils.isEmpty(result.getVerified_reason())) mUser.setVerified_reason(result.getVerified_reason()); setProfile(); ProfileAboutFragment fragment = getProfileFragment(); if (fragment != null) fragment.setUser(mUser); } @Override protected void onFailure(TaskException exception) { super.onFailure(exception); showMessage(exception.getMessage()); } } public void setFriendshipShow(FriendshipShow friendship) { this.mFriendship = friendship; getActivity().invalidateOptionsMenu(); } @Override public void onPageSelected(int position) { super.onPageSelected(position); endPage(); lastPosition = position; startPage(); } @Override public void onResume() { super.onResume(); startPage(); } @Override public void onPause() { super.onPause(); endPage(); } private void startPage() { String[] pageNameArr = new String[]{ "个人关于", "个人微博", "个人相册", "个人收藏" }; UMengUtil.onPageStart(getActivity(), pageNameArr[lastPosition] + "页"); } private void endPage() { String[] pageNameArr = new String[]{ "个人关于", "个人微博", "个人相册", "个人收藏" }; UMengUtil.onPageEnd(getActivity(), pageNameArr[lastPosition] + "页"); } public interface IUserProfileRefresh { public void refreshProfile(); } }