Skip to content

Instantly share code, notes, and snippets.

@chnouman
Last active September 20, 2017 10:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chnouman/f16a59daa577d84a2c1967fdcba2dc60 to your computer and use it in GitHub Desktop.
Save chnouman/f16a59daa577d84a2c1967fdcba2dc60 to your computer and use it in GitHub Desktop.
package com.dixeam.millionarequotes.Fragments;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.CardView;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.dixeam.millionarequotes.Activities.DetailView;
import com.dixeam.millionarequotes.R;
import com.dixeam.millionarequotes.listeners.RecentCallback;
import com.dixeam.millionarequotes.model.ModelForDailyandRecent;
import com.dixeam.millionarequotes.utils.DataProvidre;
import com.dixeam.millionarequotes.utils.StaticVariables;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.NativeExpressAdView;
import com.google.android.gms.ads.formats.NativeAdView;
import com.google.firebase.crash.FirebaseCrash;
import com.squareup.picasso.Callback;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import me.zhanghai.android.materialprogressbar.MaterialProgressBar;
import static android.content.Context.LAUNCHER_APPS_SERVICE;
import static com.dixeam.millionarequotes.MyApplication.context;
public class LatestFragment extends Fragment implements RecentCallback{
public static int nmrOfP = 0;
public int pageNmr = 0;
public static ArrayList<Object> dataList;
private LinearLayoutManager mLinearLayoutManager;
private boolean userScrolled = true;
int pastVisiblesItems, visibleItemCount, totalItemCount;
private View rv;
private RecyclerView recyclerView;
private SwipeRefreshLayout swipeview;
SimpleStringRecyclerViewAdapter adapter;
private MaterialProgressBar materialProgressBar,centralProgressBar;
FloatingActionButton fab;
public static final int ITEMS_PER_AD= 10;
public static final int HEIGHT= 300;
public static final String NATIVE_ADS_ID= "ca-app-pub-9091771467773180/7135688337";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
/** hide the fab button*/
// fab = (FloatingActionButton) getActivity().findViewById(R.id.fab);
rv = inflater.inflate(
R.layout.fragment_cheese_list, container, false);
recyclerView = (RecyclerView) rv.findViewById(R.id.recyclerview);
swipeview = (SwipeRefreshLayout) rv.findViewById(R.id.swipeview);
materialProgressBar = (MaterialProgressBar) rv.findViewById(R.id.progress);
centralProgressBar = (MaterialProgressBar) rv.findViewById(R.id.progressx);
dataList = new ArrayList<>();
swipeview.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (!StaticVariables.isNetworkAvailable(getActivity())){
swipeview.setRefreshing(false);
Snackbar.make(swipeview,"Internet is not connected",Snackbar.LENGTH_SHORT).show();
}
if (dataList.size()>0){
if (materialProgressBar.getVisibility()==View.VISIBLE){
return;
}
pageNmr = 0;
new DataProvidre.GetLatest(getActivity(),adapter,recyclerView,pageNmr,LatestFragment.this,true,centralProgressBar).execute();
pageNmr+=10;
}
}
});
setupRecyclerView( recyclerView);
return rv;
}
private void setupRecyclerView(RecyclerView recyclerView) {
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(),2);
// Create a custom SpanSizeLookup where the first item spans both columns
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (position ==0){
return 1;
}
if (LatestFragment.dataList.get(position) instanceof NativeAdView)
return 2;
else if (LatestFragment.dataList.get(position) instanceof ModelForDailyandRecent)
return 1;
return 2;
}
});
recyclerView.setLayoutManager(layoutManager);
adapter = new SimpleStringRecyclerViewAdapter(getActivity(),dataList,recyclerView);
this.mLinearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
recyclerView.setAdapter(adapter);
new DataProvidre.GetLatest(getActivity(),adapter,recyclerView,pageNmr,LatestFragment.this,false,centralProgressBar).execute();
pageNmr+=10;
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// Here get the child count, item count and visibleitems
// from layout manager
visibleItemCount = mLinearLayoutManager.getChildCount();
totalItemCount = mLinearLayoutManager.getItemCount();
pastVisiblesItems = mLinearLayoutManager
.findFirstVisibleItemPosition();
// Now check if userScrolled is true and also check if
// the item is end then update recycler view and set
// userScrolled to false
if (userScrolled
&& (visibleItemCount + pastVisiblesItems) == totalItemCount) {
userScrolled = false;
if (nmrOfP<pageNmr){
Snackbar.make(swipeview, "Latest Category has "+getString(R.string.no_more_images), Snackbar.LENGTH_SHORT).show();
return;
}
if (!StaticVariables.isNetworkAvailable(getActivity())){
Snackbar.make(swipeview,"Internet is Connected",Snackbar.LENGTH_SHORT).show();
return;
}
if (materialProgressBar.getVisibility()==View.VISIBLE){
return;
}
// updateRecyclerView();
materialProgressBar.setVisibility(View.VISIBLE);
new DataProvidre.GetLatest(getActivity(),adapter,recyclerView,pageNmr,LatestFragment.this,false,centralProgressBar).execute();
pageNmr+= 10;
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
// If scroll state is touch scroll then set userScrolled
// true
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
userScrolled = true;
}
}
});
}
@Override
public void onSwipeSucess() {
stopSwipe();
}
@Override
public void onLimited() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Snackbar.make(swipeview,"Internet is not working correctly",Snackbar.LENGTH_SHORT).show();
centralProgressBar.setVisibility(View.GONE);
materialProgressBar.setVisibility(View.GONE);
}
});
}
public void stopSwipe(){
getActivity().runOnUiThread(new Runnable() {
public void run() {
if (swipeview.isRefreshing())
swipeview.setRefreshing(false);
materialProgressBar.setVisibility(View.GONE);
centralProgressBar.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
final NativeExpressAdView adView = new NativeExpressAdView(getActivity());
Log.e("Info","sizeo fo datalist before is "+LatestFragment.dataList.size());
LatestFragment.dataList.add(LatestFragment.dataList.size(),adView);
Log.e("Info","sizeo fo datalist after is "+LatestFragment.dataList.size());
adapter.notifyDataSetChanged();
}
});
}
public static class SimpleStringRecyclerViewAdapter
extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final TypedValue mTypedValue = new TypedValue();
private int mBackground;
static public ArrayList<Object> mValues;
private static final int MENU_ITEM_VIEW_TYPE= 0;
private static final int NATIVE_ITEM_VIEW_TYPE= 2;
public static class NativeExpressViewHolder extends RecyclerView.ViewHolder{
public final NativeExpressAdView nativeExpressAdView;
NativeExpressViewHolder(View view){
super(view);
nativeExpressAdView = (NativeExpressAdView) view.findViewById(R.id.native_ad);
}
}
@Override
public int getItemViewType(int position) {
if (mValues.get(position) instanceof NativeExpressAdView){
return NATIVE_ITEM_VIEW_TYPE;
}else if(mValues.get(position) instanceof ModelForDailyandRecent){
return MENU_ITEM_VIEW_TYPE;
}
return position;
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final ImageView mImageView1 ;
public final TextView motivation_tv;
public final ProgressBar progressBar1;
public ItemViewHolder(View view) {
super(view);
mView = view;
mImageView1 = (ImageView) view.findViewById(R.id.image_of_todays_picutures1);
motivation_tv = (TextView) view.findViewById(R.id.motivation_tv);
progressBar1 = (ProgressBar) view.findViewById(R.id.progress_bar1);
}
}
public SimpleStringRecyclerViewAdapter(Context context, ArrayList<Object> items,RecyclerView vr) {
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true);
mBackground = mTypedValue.resourceId;
mValues = items;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == MENU_ITEM_VIEW_TYPE){
Log.e("Info","view type is menu" );
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_todays_pictures, parent, false);
return new ItemViewHolder(view);
}
if (viewType == NATIVE_ITEM_VIEW_TYPE){
Log.e("Info","view type is native" );
// Toast.makeText(context, "inflating native", Toast.LENGTH_SHORT).show();
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.native_ads_container, parent, false);
view.setBackgroundResource(mBackground);
return new NativeExpressViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder.getItemViewType() == NATIVE_ITEM_VIEW_TYPE){
NativeExpressViewHolder holderNative = (NativeExpressViewHolder) holder;
Log.e("Info","onbindFor Ntive");
holderNative.nativeExpressAdView.setVisibility(View.GONE);
holderNative.nativeExpressAdView.setAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
((NativeExpressViewHolder) holder).nativeExpressAdView.setVisibility(View.GONE);
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
holderNative.nativeExpressAdView.setVisibility(View.VISIBLE);
}
});
Log.e("Info","before loading"+holderNative.nativeExpressAdView.getAdSize()+"");
Log.e("Info","before loading"+holderNative.nativeExpressAdView.getAdUnitId()+"");
holderNative.nativeExpressAdView.loadAd(new AdRequest.Builder().addTestDevice("1DBE6FC4FFA487016C29B62841C66CE2").build());
}
if (holder.getItemViewType()==MENU_ITEM_VIEW_TYPE){
ItemViewHolder itemViewHolder =(ItemViewHolder) holder;
Log.e("Info","onbindFor menu");
itemViewHolder.motivation_tv.setText(((ModelForDailyandRecent)mValues.get(position)).getViews());
Log.i("ImageTestDaily",itemViewHolder.mImageView1.getContext().getResources().getString(R.string.base_url_image)+((ModelForDailyandRecent)mValues.get(position)).getPhotoUrl());
try{
Glide.with(itemViewHolder.mImageView1.getContext())
.load(itemViewHolder.mImageView1.getContext().getResources().getString(R.string.base_url_image)+((ModelForDailyandRecent)mValues.get(position)).getPhotoUrl())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.override(200,200)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
itemViewHolder.progressBar1.setVisibility(View.GONE);
return false;
}
})
.into(itemViewHolder.mImageView1);
}catch (Exception e){
FirebaseCrash.report(e);
e.printStackTrace();
}
itemViewHolder.mImageView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(itemViewHolder.mImageView1.getContext(),DetailView.class);
intent.putExtra("position",position);
intent.putExtra("comeFrom","Lat");
itemViewHolder.mImageView1.getContext().startActivity(intent);
}
});
}
}
@Override
public int getItemCount() {
return mValues.size();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment