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.AndroidManifestUtil; 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.ad.AdUtil; 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() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition 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 list = JsonUtil.videoGson.fromJson( cacheValue, new TypeToken>() { }.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 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 list = JsonUtil.videoGson.fromJson( jsonObject.getJSONObject("Data") .getJSONArray("data").toString(), new TypeToken>() { }.getType()); categories.addAll(list); if (categories.size() > 0) { if(AdUtil.isCanInitCSJ()) { HomeClass feedVideos = new HomeClass(); feedVideos.setDataType("shortVideos"); feedVideos.setName("热门"); categories.add(1, feedVideos); //抖音短剧 // if(!AndroidManifestUtil.isHuaWeiChannel(getContext())) { feedVideos = new HomeClass(); feedVideos.setDataType("dyDrama"); 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 mlist; private Map fragments = new HashMap<>(); public HomePageAdapter(FragmentManager fm, List 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); } }