package com.weikou.beibeivideo.ui.main;
|
|
import android.content.Context;
|
import android.content.SharedPreferences;
|
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageManager;
|
import android.graphics.Color;
|
import android.graphics.drawable.Drawable;
|
import android.os.Bundle;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentStatePagerAdapter;
|
import androidx.viewpager.widget.ViewPager;
|
|
import android.os.Parcelable;
|
import android.view.View;
|
import android.widget.FrameLayout;
|
import android.widget.LinearLayout;
|
|
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.StringUtils;
|
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
|
import com.video.youth.entity.YouthModeChange;
|
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.ad.SplashAdLoadInfo;
|
import com.weikou.beibeivideo.entity.recommend.HomeClass;
|
import com.weikou.beibeivideo.entity.recommend.HomeTabChangeInfo;
|
import com.weikou.beibeivideo.ui.MyRetainViewFragment;
|
import com.weikou.beibeivideo.ui.dialog.FloatADDialog;
|
import com.weikou.beibeivideo.ui.recommend.RecommendFragment;
|
import com.weikou.beibeivideo.util.BeibeiConstant;
|
import com.weikou.beibeivideo.util.JsonUtil;
|
import com.weikou.beibeivideo.util.UmengEventUtil;
|
import com.weikou.beibeivideo.util.cache.DiskLruCacheManager;
|
|
import org.apache.http.Header;
|
import org.greenrobot.eventbus.Subscribe;
|
import org.json.JSONObject;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.greenrobot.eventbus.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();
|
setName(HomeFragment.class.getClass().getName());
|
}
|
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
if (!BeibeiConstant.IS_TEST)
|
showFloatImgAd();
|
EventBus.getDefault().register(this);
|
}
|
|
|
/**
|
* 展示悬浮广告
|
*/
|
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() {
|
try {
|
builder.create().show();
|
} catch (Exception e) {
|
|
}
|
}
|
}, 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"));
|
|
indicator = new MainTabPageIndicator(
|
pager.getContext());
|
|
if (!StringUtils.isBlank(cacheValue)) {
|
|
List<HomeClass> list = JsonUtil.videoGson.fromJson(
|
cacheValue,
|
new TypeToken<List<HomeClass>>() {
|
}.getType());
|
if (list != null)
|
for (int i = 0; i < list.size(); i++) {
|
if (list.get(i).getDataType().equalsIgnoreCase("novel")) {
|
list.remove(i--);
|
}
|
if (!StringUtils.isEmpty(list.get(i).getColor())) {
|
indicator.setTextSpecialColor(i, Color.parseColor(list.get(i).getColor()));
|
}
|
}
|
|
categories.addAll(list);
|
}
|
|
adapter = new HomePageAdapter(
|
getChildFragmentManager(), categories);
|
pager.setAdapter(adapter);
|
|
indicator.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
|
indicator.setTextColor(getResources().getColor(R.color.nav_text_color), getResources().getColor(R.color.nav_highloght_text_color));
|
indicator.setViewPager(pager, 0);
|
fl_indicator.addView(indicator);
|
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
@Override
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
|
}
|
|
@Override
|
public void onPageSelected(int position) {
|
UmengEventUtil.recommendNav(getContext(), position, categories.size() > position ? categories.get(position).getName() : "");
|
}
|
|
@Override
|
public void onPageScrollStateChanged(int state) {
|
|
}
|
});
|
|
getCategories();
|
}
|
|
private String getKey(String method) {
|
return new Md5FileNameGenerator().generate(method);
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
if (needRefresh) {
|
needRefresh = false;
|
getCategories();
|
}
|
}
|
|
private static boolean needRefresh = false;
|
|
@Subscribe
|
public void onEventMainThread(YouthModeChange change) {
|
needRefresh = true;
|
|
}
|
|
@Override
|
public void onSaveInstanceState(Bundle outState) {
|
outState.putString("flash back", "show");
|
super.onSaveInstanceState(outState);
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
}
|
|
@Subscribe
|
public void onEventMainThread(VideoType type) {
|
getCategories();
|
}
|
|
@Subscribe
|
public void onEventMainThread(HomeTabChangeInfo changeInfo) {
|
if (changeInfo == null)
|
return;
|
if (pager == null)
|
return;
|
if (pager.getAdapter() == null)
|
return;
|
if (pager.getAdapter().getCount() < changeInfo.getPosition() + 1)
|
return;
|
pager.setCurrentItem(changeInfo.getPosition());
|
}
|
|
|
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")) {
|
|
categories.clear();
|
|
List<HomeClass> list = JsonUtil.videoGson.fromJson(
|
jsonObject.getJSONObject("Data")
|
.getJSONArray("data").toString(),
|
new TypeToken<List<HomeClass>>() {
|
}.getType());
|
|
categories.addAll(list);
|
if (categories.size() > 0) {
|
HomeClass feedVideos = new HomeClass();
|
feedVideos.setDataType("feedVideos");
|
feedVideos.setName("刷一刷");
|
categories.add(1, feedVideos);
|
}
|
|
if (categories != null)
|
for (int i = 0; i < categories.size(); i++) {
|
if (categories.get(i).getDataType().equalsIgnoreCase("novel")) {
|
categories.remove(i--);
|
}
|
if (!StringUtils.isEmpty(categories.get(i).getColor())) {
|
indicator.setTextSpecialColor(i, Color.parseColor(categories.get(i).getColor()));
|
}
|
}
|
|
adapter.notifyDataSetChanged();
|
indicator.notifyDataSetChanged();
|
|
pager.setCurrentItem(0);
|
|
|
count++;
|
DiskLruCacheManager.getInstance(BeibeiVideoApplication.application).cache(getKey("getCategories"), JsonUtil.videoGson.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) {
|
|
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();
|
}
|
|
@Override
|
public Parcelable saveState() {
|
return null;
|
}
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
EventBus.getDefault().unregister(this);
|
}
|
}
|