Last active
September 20, 2017 10:03
-
-
Save chnouman/f16a59daa577d84a2c1967fdcba2dc60 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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