package com.haicaojie.android.ui.main;
|
|
import android.animation.Animator;
|
import android.animation.AnimatorListenerAdapter;
|
import android.animation.ObjectAnimator;
|
import android.app.ProgressDialog;
|
import android.content.ClipData;
|
import android.content.ClipboardManager;
|
import android.content.Context;
|
import android.content.DialogInterface;
|
import android.content.Intent;
|
import android.content.SharedPreferences;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.provider.Settings;
|
import android.support.annotation.Nullable;
|
import android.support.v4.widget.SwipeRefreshLayout;
|
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.RecyclerView;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.view.Window;
|
import android.view.WindowManager;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.haicaojie.android.entity.TaoBaoGoodsBrief;
|
import com.haicaojie.android.util.CustomShareNativeDialog;
|
import com.haicaojie.android.util.ShareFriendsDialog;
|
import com.lcjian.library.RetainViewFragment;
|
import com.lcjian.library.content.ConnectivityChangeHelper;
|
import com.lcjian.library.recyclerview.DividerItemDecoration;
|
import com.lcjian.library.util.NetUtils;
|
import com.lcjian.library.util.RefreshLayout;
|
import com.lcjian.library.util.SingleToast;
|
import com.lcjian.library.util.cache.DiskLruCache;
|
import com.lcjian.library.util.common.DimenUtils;
|
import com.lcjian.library.util.common.StorageUtils;
|
import com.lcjian.library.widget.ResizableImageView;
|
import com.haicaojie.android.BasicTextHttpResponseHandler;
|
import com.haicaojie.android.R;
|
import com.haicaojie.android.ShoppingApi;
|
import com.haicaojie.android.entity.TrendsInfo;
|
import com.haicaojie.android.ui.invite.ShareBrowserActivity;
|
import com.haicaojie.android.ui.trends.TrendsAdapter;
|
import com.haicaojie.android.util.MyDividerItemDecoration;
|
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
|
import com.umeng.analytics.MobclickAgent;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import static android.content.Context.CLIPBOARD_SERVICE;
|
|
/**
|
* Created by weikou2015 on 2017/2/20.
|
* 主页--动态
|
*/
|
|
public class TrendsFragmet extends RetainViewFragment {
|
public RefreshLayout srl_trends;
|
private RecyclerView rv_trends;
|
private List<TrendsInfo> mList = new ArrayList<>();
|
private int page = 1;
|
private TrendsAdapter adapter;
|
private TextView tv_middle;
|
private View v_status_bar;
|
private ImageView iv_slid_top;
|
private int count = 0;
|
private boolean isLoad = false;
|
private boolean haveCache = false;
|
View bottom;
|
TextView tv_loading;
|
private ConnectivityChangeHelper mChangeHelper;
|
private LinearLayout ll_no_net, ll_no_data, ll_request_failture;
|
|
private boolean upLoad = false;
|
private DiskLruCache cache;
|
public View v_cover;
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
try {
|
cache = DiskLruCache.open(
|
new File(StorageUtils.getCacheDirectory(getContext())
|
.toString(), "http"), getVersionNum(getContext()),
|
1, 1024 * 1024);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
private int getVersionNum(Context context) {
|
try {
|
PackageInfo pi = context.getPackageManager().getPackageInfo(
|
context.getPackageName(), 0);
|
return pi.versionCode;
|
} catch (PackageManager.NameNotFoundException e) {
|
e.printStackTrace();
|
return 1;
|
}
|
}
|
|
@Override
|
public int getContentResource() {
|
return R.layout.fragment_trends;
|
}
|
|
@Override
|
public void onCreateView(View contentView, Bundle savedInstanceState) {
|
contentView.findViewById(R.id.tv_top_bar_left).setVisibility(View.INVISIBLE);
|
v_status_bar = contentView.findViewById(R.id.v_status_bar);
|
/*
|
* 计算状态栏高度并设置
|
*/
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
Window window = getActivity().getWindow();
|
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
|
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
int result = 0;
|
int resourceId = getResources().getIdentifier("status_bar_height",
|
"dimen", "android");
|
if (resourceId > 0) {
|
result = getResources().getDimensionPixelSize(resourceId);
|
}
|
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
|
result);
|
v_status_bar.setLayoutParams(params);
|
} else {
|
v_status_bar.setVisibility(View.GONE);
|
}
|
tv_middle = (TextView) contentView.findViewById(R.id.tv_top_bar_middle);
|
tv_middle.setText("动态");
|
ll_no_net = (LinearLayout) contentView.findViewById(R.id.ll_no_net);
|
ll_no_data = (LinearLayout) contentView.findViewById(R.id.ll_no_data);
|
ll_request_failture = (LinearLayout) contentView.findViewById(R.id.ll_request_failture);
|
v_cover = contentView.findViewById(R.id.v_cover);
|
|
srl_trends = (RefreshLayout) contentView.findViewById(R.id.srl_trends);
|
rv_trends = (RecyclerView) contentView.findViewById(R.id.lv_trends);
|
iv_slid_top = (ImageView) contentView.findViewById(R.id.iv_slid_top);
|
iv_slid_top.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
rv_trends.getLayoutManager().scrollToPosition(0);
|
}
|
});
|
contentView.findViewById(R.id.tv_refresh).setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
// requestState(0);
|
// getTrendsList();
|
rv_trends.getContext().startActivity(new Intent(Settings.ACTION_SETTINGS));
|
}
|
});
|
rv_trends.setLayoutManager(new LinearLayoutManager(getContext()));
|
DividerItemDecoration vDivider = new DividerItemDecoration(DividerItemDecoration.VERTICAL);
|
vDivider.setColor(0xffeeeeee);
|
vDivider.setSize(DimenUtils.dip2px(getContext(), 20));
|
|
MyDividerItemDecoration decoration = new MyDividerItemDecoration(getContext(), MyDividerItemDecoration.VERTICAL_LIST, R.drawable.shape_divider_trends, 0);
|
|
rv_trends.addItemDecoration(decoration);
|
rv_trends.setAdapter(adapter);
|
bottom = LayoutInflater.from(getContext()).inflate(R.layout.item_recommend_bottom, null);
|
adapter = new TrendsAdapter(v_cover, getActivity(), mList);
|
|
ResizableImageView iv_top = new ResizableImageView(getContext());
|
// iv_top.setImageDrawable(getResources().getDrawable(R.drawable.ic_trends_header));
|
// iv_top.setOnClickListener(new View.OnClickListener() {
|
// @Override
|
// public void onClick(View view) {
|
// Intent intent = new Intent(getContext(), ShareBrowserActivity.class);
|
// intent.putExtra("url", getContext().getSharedPreferences("user", Context.MODE_PRIVATE).getString("invite_url", "http"));
|
// startActivity(intent);
|
// }
|
// });
|
iv_top.setVisibility(View.GONE);
|
adapter.addHeaderView(iv_top);
|
adapter.addFooterView(bottom);
|
bottom.setVisibility(View.GONE);
|
tv_loading = (TextView) bottom.findViewById(R.id.tv_loading);
|
bottom.setVisibility(View.GONE);
|
contentView.findViewById(R.id.iv_net_setting).setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
srl_trends.getContext().startActivity(new Intent(Settings.ACTION_SETTINGS));
|
}
|
});
|
|
mChangeHelper = new ConnectivityChangeHelper(tv_middle.getContext(),
|
new ConnectivityChangeHelper.OnConnectivityChangeListener() {
|
|
@Override
|
public void onNetworkUnAvailable() {
|
}
|
|
@Override
|
public void onNetworkAvailable() {
|
if (mList.size() == 0 || haveCache) {
|
getTrendsList();
|
}
|
}
|
});
|
rv_trends.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
@Override
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
super.onScrollStateChanged(recyclerView, newState);
|
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
int first = manager.findFirstVisibleItemPosition();
|
int last = manager.findLastVisibleItemPosition();
|
int total = manager.getItemCount();
|
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
if (first == 0) {
|
iv_slid_top.setVisibility(View.GONE);
|
}
|
if (last == total - 1 && mList.size() < count && isLoad) {
|
page++;
|
getTrendsList();
|
} else if (mList.size() >= count && last >= mList.size() - 1 && upLoad) {
|
if (NetUtils.getNetworkState(getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
SingleToast.showToast(getContext(), "网络未连接,请检测网络设置");
|
} else {
|
SingleToast.showToast(getContext(), "没有更多了");
|
}
|
}
|
} else {
|
iv_slid_top.setVisibility(View.GONE);
|
}
|
}
|
|
@Override
|
public void onScrolled(RecyclerView recyclerView, int dx, final int dy) {
|
super.onScrolled(recyclerView, dx, dy);
|
if (Math.abs(dy) > 10) {
|
if (dy > 0) {
|
upLoad = true;
|
iv_slid_top.setVisibility(View.GONE);
|
} else {
|
upLoad = false;
|
iv_slid_top.setVisibility(View.VISIBLE);
|
}
|
}
|
}
|
});
|
srl_trends.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
@Override
|
public void onRefresh() {
|
page = 1;
|
tv_loading.setText("加载中...");
|
getTrendsList();
|
}
|
});
|
rv_trends.setAdapter(adapter);
|
|
if (cache != null) {
|
DiskLruCache.Snapshot snapshot = null;
|
try {
|
snapshot = cache.get(getKey("getTrendsList"));
|
if (snapshot != null) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<TrendsInfo> list = gson.fromJson(
|
snapshot.getString(0),
|
new TypeToken<List<TrendsInfo>>() {
|
}.getType());
|
mList.addAll(list);
|
adapter.notifyDataSetChanged();
|
requestState(0);
|
haveCache = true;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
if (snapshot != null) {
|
snapshot.close();
|
}
|
}
|
}
|
|
srl_trends.setRefreshing(true);
|
getTrendsList();
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
mChangeHelper.registerReceiver();
|
MobclickAgent.onPageStart("动态");
|
//设置状态栏文字颜色及图标为深色
|
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
boolean isLogin = getContext().getSharedPreferences("user", Context.MODE_PRIVATE).getBoolean("isLogin", false);
|
adapter.setLogin(isLogin);
|
if (isLogin && adapter.shareInfo != null) {
|
TrendsInfo info = adapter.shareInfo;
|
onShareInfo(info);
|
adapter.shareInfo = null;
|
}
|
if (mList.size() == 0) {
|
getTrendsList();
|
}
|
}
|
|
private void onShareInfo(TrendsInfo info) {
|
if (info.getType() == 1) {
|
ClipboardManager manager = (ClipboardManager) getContext().getSystemService(CLIPBOARD_SERVICE);
|
ClipData myClip = ClipData.newPlainText("text", info.getTitle());
|
manager.setPrimaryClip(myClip);
|
SingleToast.showToast(getContext(), "文本内容复制成功!");
|
shareGoods(info.getId() + "");
|
} else if (info.getType() == 2) {
|
ClipboardManager manager = (ClipboardManager) getContext()
|
.getSystemService(CLIPBOARD_SERVICE);
|
ClipData myClip = ClipData.newPlainText("text", info.getTitle());
|
manager.setPrimaryClip(myClip);
|
SingleToast.showToast(getContext(), "文本内容复制成功!");
|
getInviteImg(info.getId() + "");
|
}
|
}
|
|
private boolean isPause = false;
|
|
private void shareGoods(final String activityId) {
|
isPause = false;
|
final ProgressDialog pd = new ProgressDialog(getContext());
|
pd.setMessage("请稍候...");
|
pd.show();
|
pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
@Override
|
public void onCancel(DialogInterface dialogInterface) {
|
isPause = true;
|
}
|
});
|
String uid = getContext().getSharedPreferences("user", Context.MODE_PRIVATE).getString("uid", "100553");
|
ShoppingApi.shareGoods(getContext(), uid, activityId, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<String> imgs = gson.fromJson(jsonObject.optJSONObject("data").optJSONArray("shareImgs").toString(), new TypeToken<List<String>>() {
|
}.getType());
|
if (!isPause) {
|
CustomShareNativeDialog.Builder builder = new CustomShareNativeDialog.Builder(getActivity());
|
builder.setId(activityId).isTrendGoods(true).setTitle(jsonObject.optString("shareTitle"))
|
.setGoodsImgs(imgs).create().show();
|
}
|
} else {
|
SingleToast.showToast(getContext(), jsonObject.optString("msg"));
|
}
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
pd.dismiss();
|
pd.cancel();
|
}
|
});
|
}
|
|
private void getInviteImg(final String activityId) {
|
String uid = getContext().getSharedPreferences("user", Context.MODE_PRIVATE).getString("uid", "0");
|
ShoppingApi.getInviteImg(getContext(), uid, activityId, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<String> imgs = gson.fromJson(jsonObject.optJSONObject("data").optJSONArray("shareImgs").toString(), new TypeToken<List<String>>() {
|
}.getType());
|
ShareFriendsDialog.Builder builder = new ShareFriendsDialog.Builder(getActivity());
|
builder.setId(activityId).setImgs(imgs.get(0))
|
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
|
@Override
|
public void onClick(DialogInterface dialogInterface, int i) {
|
dialogInterface.dismiss();
|
}
|
}).create().show();
|
} else {
|
SingleToast.showToast(getContext(), jsonObject.optString("msg"));
|
}
|
}
|
});
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
mChangeHelper.unregisterReceiver();
|
MobclickAgent.onPageEnd("动态");
|
}
|
|
private void getTrendsList() {
|
isLoad = false;
|
ShoppingApi.getRecommendActivity(srl_trends.getContext(), page + "", new BasicTextHttpResponseHandler() {
|
@Override
|
public void onStart() {
|
super.onStart();
|
if (page > 0) {
|
bottom.setVisibility(View.VISIBLE);
|
} else {
|
bottom.setVisibility(View.GONE);
|
}
|
}
|
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
haveCache = false;
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<TrendsInfo> list = gson.fromJson(
|
jsonObject.optJSONObject("data").optJSONArray("data").toString(),
|
new TypeToken<List<TrendsInfo>>() {
|
}.getType());
|
if (page == 1)
|
mList.clear();
|
mList.addAll(list);
|
adapter.notifyDataSetChanged();
|
count = Integer.parseInt(jsonObject.optJSONObject("data").optString("count"));
|
|
if (page == 1) {
|
DiskLruCache.Editor editor = cache
|
.edit(getKey("getTrendsList"));
|
editor.set(0, jsonObject.optJSONObject("data").optJSONArray("data").toString());
|
editor.commit();
|
}
|
rv_trends.getLayoutManager().scrollToPosition(0);
|
requestState(mList.size() == 0 ? 1 : 0);
|
} else {
|
if (mList.size() == 0)
|
requestState(2);
|
}
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
srl_trends.setRefreshing(false);
|
isLoad = true;
|
bottom.setVisibility(View.GONE);
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
if (cache != null) {
|
DiskLruCache.Snapshot snapshot = null;
|
try {
|
snapshot = cache.get(getKey("getTrendsList"));
|
} catch (Exception e) {
|
|
}
|
if (snapshot == null && mList.size() == 0) {
|
if (NetUtils.getNetworkState(getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
requestState(3);
|
SingleToast.showToast(getContext(), "网络未连接,请检测网络设置");
|
} else {
|
requestState(2);
|
SingleToast.showToast(getContext(), "网络连接异常,请检测网络设置");
|
}
|
} else {
|
if (NetUtils.getNetworkState(getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
SingleToast.showToast(getContext(), "网络未连接,请检测网络设置");
|
} else {
|
SingleToast.showToast(getContext(), "网络连接异常,请检测网络设置");
|
}
|
}
|
} else {
|
if (NetUtils.getNetworkState(getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
requestState(3);
|
SingleToast.showToast(getContext(), "网络未连接,请检测网络设置");
|
} else {
|
requestState(2);
|
SingleToast.showToast(getContext(), "网络连接异常,请检测网络设置");
|
}
|
}
|
}
|
});
|
}
|
|
private String getKey(String method) {
|
return new Md5FileNameGenerator().generate(method);
|
}
|
|
/**
|
* 请求状态 0 数据正常展示;1 返回数据为空;2 网络请求失败;3 没有连接网络
|
*
|
* @param state
|
*/
|
private void requestState(int state) {
|
srl_trends.setVisibility(state == 0 ? View.VISIBLE : View.GONE);
|
rv_trends.setVisibility(state == 0 ? View.VISIBLE : View.GONE);
|
ll_no_data.setVisibility(state == 1 ? View.VISIBLE : View.GONE);
|
ll_request_failture.setVisibility(state == 2 ? View.VISIBLE : View.GONE);
|
ll_no_net.setVisibility(state == 3 ? View.VISIBLE : View.GONE);
|
}
|
|
@Override
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
super.onActivityResult(requestCode, resultCode, data);
|
if (requestCode == 2) {
|
v_cover.setVisibility(View.VISIBLE);
|
//透明动画
|
ObjectAnimator animator = ObjectAnimator.ofFloat(v_cover, "alpha", 1f, 0f);
|
animator.setDuration(400);
|
//为动画设置监听
|
animator.addListener(new AnimatorListenerAdapter() {
|
@Override
|
public void onAnimationEnd(Animator animation) {
|
super.onAnimationEnd(animation);
|
v_cover.setVisibility(View.GONE);
|
}
|
});
|
animator.start();
|
}
|
}
|
}
|