package com.weikou.beibeivideo.ui.main;
|
|
import android.content.Context;
|
import android.content.DialogInterface;
|
import android.content.SharedPreferences;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.graphics.Bitmap;
|
import android.graphics.drawable.Drawable;
|
import android.os.Bundle;
|
import android.support.annotation.NonNull;
|
import android.support.annotation.Nullable;
|
import android.support.v4.app.Fragment;
|
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentStatePagerAdapter;
|
import android.support.v4.view.ViewPager;
|
import android.view.View;
|
import android.widget.FrameLayout;
|
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.request.target.SimpleTarget;
|
import com.bumptech.glide.request.transition.Transition;
|
import com.google.gson.FieldNamingPolicy;
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.lcjian.library.util.common.StorageUtils;
|
import com.lcjian.library.util.common.StringUtils;
|
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
|
import com.viewpagerindicator.IconPagerAdapter;
|
import com.viewpagerindicator.MainTabPageIndicator;
|
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
|
import com.weikou.beibeivideo.BeibeiVideoAPI;
|
import com.weikou.beibeivideo.BeibeiVideoApplication;
|
import com.weikou.beibeivideo.R;
|
import com.weikou.beibeivideo.entity.JumpDetail;
|
import com.weikou.beibeivideo.entity.VideoType;
|
import com.weikou.beibeivideo.entity.recommend.HomeClass;
|
import com.weikou.beibeivideo.ui.MyRetainViewFragment;
|
import com.weikou.beibeivideo.ui.dialog.FloatADDialog;
|
import com.weikou.beibeivideo.ui.dialog.UserProtocolDialog;
|
import com.weikou.beibeivideo.ui.recommend.NovelJNZFragment;
|
import com.weikou.beibeivideo.ui.recommend.RecommendFragment;
|
import com.weikou.beibeivideo.util.BeibeiConstant;
|
import com.weikou.beibeivideo.util.UserUtil;
|
import com.weikou.beibeivideo.util.cache.DiskLruCacheManager;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import de.greenrobot.event.EventBus;
|
|
/**
|
* Created by weikou2015 on 2017/9/14.
|
*/
|
|
public class HomeFragment extends MyRetainViewFragment {
|
|
private final String TAG = HomeFragment.class.getName();
|
/*
|
* viewpager定义
|
*/
|
HomePageAdapter adapter;
|
ViewPager pager;
|
MainTabPageIndicator indicator;
|
|
FrameLayout fl_indicator;
|
|
|
public HomeFragment() {
|
super(HomeFragment.class.getClass().getName());
|
}
|
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
if (!BeibeiConstant.IS_TEST)
|
showProtocol();
|
}
|
|
|
private void showProtocol() {
|
String data = "感谢您对" + getResources().getString(R.string.app_name) + "一直以来的信任!<br>";
|
data += "我们依照新的监管要求条例更新了";
|
data += String.format("<a href='%s'>《隐私政策》</a>和", BeibeiConstant.PRIVACY_POLICY);
|
data += String.format("<a href='%s'>《用户协议》</a>", BeibeiConstant.USER_AGREEMENT);
|
data += "为采取相应安全保护措施,尽力保护您的个人信息安全可控,特向你说明如下:<br>" +
|
"1、您在使用" + getResources().getString(R.string.app_name) + "各项产品或服务时,将会提供与具体功能相关的个人信息(可能涉及帐号、位置、存储等信息)。<br>" +
|
"2、您可以随时查询、更正、删除您的个人信息,我们也提供账户注销的渠道。<br>" +
|
"3、未经您的再次同意,我们不会将上述信息用于您未授权的其他用途或目的。<br>" +
|
"4、未经监护人同意,我们不会收集使用14周岁以下(含14周岁)未成年人个人信息,且不会利用其信息推送新闻、时政信息、广告等定向推送活动。";
|
|
if (!UserUtil.isAgreeUserProtocol(getContext())) {
|
new UserProtocolDialog.Builder(getActivity()).setNegativeButton("不同意", new DialogInterface.OnClickListener() {
|
@Override
|
public void onClick(DialogInterface dialog, int which) {
|
getActivity().finish();
|
}
|
}).setPositiveButton("同意", new DialogInterface.OnClickListener() {
|
@Override
|
public void onClick(DialogInterface dialog, int which) {
|
dialog.dismiss();
|
UserUtil.agreeUserProtocol(getContext());
|
showFloatImgAd();
|
}
|
}).setData(data).create().show();
|
} else {
|
showFloatImgAd();
|
}
|
}
|
|
/**
|
* 展示悬浮广告
|
*/
|
private void showFloatImgAd() {
|
BeibeiVideoAPI.getHomeConfig(getContext(), new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optBoolean("IsPost")) {
|
JSONObject data = jsonObject.optJSONObject("Data");
|
if (data != null) {
|
|
JSONObject ad = data.optJSONObject("floatAD");
|
if (ad != null) {
|
String id = ad.optString("id");
|
if (FloatADDialog.Builder.canShow(getContext(), id)) {
|
String picture = ad.optString("picture");
|
Glide.with(getContext()).load(picture).into(new SimpleTarget<Drawable>() {
|
@Override
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
JSONObject jumpDetailJSON = ad.optJSONObject("jumpDetail");
|
JSONObject params = ad.optJSONObject("params");
|
JumpDetail jumpDetail = new Gson().fromJson(jumpDetailJSON.toString(), JumpDetail.class);
|
final FloatADDialog.Builder builder = new FloatADDialog.Builder(getActivity())
|
.setId(id).setImage(resource);
|
if (params != null) {
|
builder.setJump(jumpDetail, com.alibaba.fastjson.JSONObject.parseObject(params.toString()));
|
}
|
|
fl_indicator.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
builder.create().show();
|
}
|
}, 2000);
|
|
|
}
|
|
@Override
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
|
}
|
|
});
|
}
|
}
|
}
|
}
|
|
}
|
});
|
}
|
|
|
public static 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_recommend_category;
|
}
|
|
@Override
|
public void onCreateView(View contentView, Bundle savedInstanceState) {
|
pager = contentView.findViewById(R.id.pager_recomend_category);
|
fl_indicator = contentView.findViewById(R.id.fl_indicator);
|
if (fl_indicator.getChildCount() > 0) {
|
fl_indicator.removeAllViews();
|
}
|
|
String cacheValue = DiskLruCacheManager.getInstance(BeibeiVideoApplication.application).getCache(getKey("getCategories"));
|
if (!StringUtils.isBlank(cacheValue)) {
|
Gson gson = new GsonBuilder().setFieldNamingPolicy(
|
FieldNamingPolicy.UPPER_CAMEL_CASE).create();
|
List<HomeClass> list = gson.fromJson(
|
cacheValue,
|
new TypeToken<List<HomeClass>>() {
|
}.getType());
|
categories.addAll(list);
|
}
|
|
adapter = new HomePageAdapter(
|
getChildFragmentManager(), categories);
|
pager.setAdapter(adapter);
|
indicator = new MainTabPageIndicator(
|
pager.getContext());
|
indicator.setViewPager(pager, 0);
|
fl_indicator.addView(indicator);
|
|
getCategories();
|
}
|
|
private String getKey(String method) {
|
return new Md5FileNameGenerator().generate(method);
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
EventBus.getDefault().register(this);
|
}
|
|
@Override
|
public void onSaveInstanceState(Bundle outState) {
|
outState.putString("flash back", "show");
|
super.onSaveInstanceState(outState);
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
EventBus.getDefault().unregister(this);
|
}
|
|
public void onEventMainThread(VideoType type) {
|
getCategories();
|
}
|
|
List<HomeClass> categories = new ArrayList<>();
|
|
|
int count = 1;
|
|
private void getCategories() {
|
SharedPreferences preferences = pager.getContext().getSharedPreferences(
|
"user", Context.MODE_PRIVATE);
|
String uid = preferences.getString("uid", "");
|
BeibeiVideoAPI.getChoiceClass(pager.getContext(), uid,
|
new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode,
|
Header[] headers, JSONObject jsonObject)
|
throws Exception {
|
if (jsonObject.getBoolean("IsPost")) {
|
Gson gson = new GsonBuilder().setFieldNamingPolicy(
|
FieldNamingPolicy.UPPER_CAMEL_CASE)
|
.create();
|
categories.clear();
|
|
List<HomeClass> list = gson.fromJson(
|
jsonObject.getJSONObject("Data")
|
.getJSONArray("data").toString(),
|
new TypeToken<List<HomeClass>>() {
|
}.getType());
|
|
categories.addAll(list);
|
adapter.notifyDataSetChanged();
|
indicator.notifyDataSetChanged();
|
|
pager.setCurrentItem(0);
|
|
|
count++;
|
DiskLruCacheManager.getInstance(BeibeiVideoApplication.application).cache(getKey("getCategories"), gson.toJson(categories));
|
}
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
}
|
});
|
}
|
|
class HomePageAdapter extends FragmentStatePagerAdapter implements IconPagerAdapter {
|
private FragmentManager fm;
|
|
private List<HomeClass> mlist;
|
|
private Map<String, Fragment> fragments = new HashMap<>();
|
|
public HomePageAdapter(FragmentManager fm, List<HomeClass> list) {
|
super(fm);
|
this.fm = fm;
|
this.mlist = list;
|
}
|
|
@Override
|
public Fragment getItem(int position) {
|
if ("novel".equalsIgnoreCase(mlist.get(position).getDataType())) {
|
return NovelJNZFragment.newInstance();
|
} else {
|
Fragment fragment = RecommendFragment.newInstance(mlist.get(position), position + "");
|
return fragment;
|
}
|
}
|
|
@Override
|
public int getIconResId(int index) {
|
if ("novel".equalsIgnoreCase(mlist.get(index).getDataType()))
|
return R.drawable.ic_tab_xiaoshuo;
|
else
|
return 0;
|
}
|
|
@Override
|
public int getCount() {
|
return mlist.size();
|
}
|
|
// @Override
|
// public Object instantiateItem(ViewGroup container, int position) {
|
// Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
// fm.beginTransaction().show(fragment).commit();
|
// return fragment;
|
// }
|
//
|
// @Override
|
// public void destroyItem(ViewGroup container, int position, Object object) {
|
// Fragment fragment = fragments.get(position);
|
// try {
|
// fm.beginTransaction().hide(fragment).commit();
|
// } catch (Exception e) {
|
//
|
// }
|
// }
|
|
@Nullable
|
@Override
|
public CharSequence getPageTitle(int position) {
|
if ("novel".equalsIgnoreCase(mlist.get(position).getDataType()))
|
return "";
|
else
|
return mlist.get(position).getName();
|
}
|
}
|
}
|