package com.latest.share.chat.fragments;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.latest.share.chat.MyApplication;
import com.latest.share.chat.R;
import com.latest.share.chat.activities.SearchActivity;
import com.latest.share.chat.adapters.PostViewAdapter;
import com.latest.share.chat.adapters.viewholders.Item;
import com.latest.share.chat.adapters.viewholders.MusicViewHolder;
import com.latest.share.chat.models.Footer;
import com.latest.share.chat.models.PostViewModel;
import com.latest.share.chat.utils.Config;
import com.latest.share.chat.utils.UtilMethods;
import com.volokh.danylo.visibility_utils.calculator.DefaultSingleItemCalculatorCallback;
import com.volokh.danylo.visibility_utils.calculator.ListItemsVisibilityCalculator;
import com.volokh.danylo.visibility_utils.calculator.SingleListViewItemActiveCalculator;
import com.volokh.danylo.visibility_utils.scroll_utils.RecyclerViewItemPositionGetter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import static android.app.Activity.RESULT_OK;
/**
* A simple {@link Fragment} subclass.
*/
public class PostViewFragment extends Fragment {
private Context mContext;
private ArrayList<Item> list;
private ArrayList<Item> list1;
private ArrayList<Item> final_list;
private RecyclerView recyclerView;
private ProgressBar progressBar;
LinearLayoutManager mLayoutManager;
ListItemsVisibilityCalculator mVideoVisibilityCalculator;
private RecyclerViewItemPositionGetter mItemsPositionGetter;
private int mScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE;
boolean has_next_page = false;
int next_page_no = 1;
PostViewAdapter adapter;
public static final int POST_COMMENT_REQUEST = 201;
private String tag_name;
private String fragment_type;
private String fragment_extra;
private LinearLayout linear_search;
private SwipeRefreshLayout swipeContainer;
private TextView text_retry;
private LinearLayout linear_no_internet;
private TextView text_no_data;
private String following_id = "";
public PostViewFragment() {
// Required empty public constructor
}
public static Fragment Instance(String fragment_type, String fragment_extra) {
PostViewFragment fragment = new PostViewFragment();
Bundle bundle = new Bundle();
bundle.putString("fragment_extra", fragment_extra);
bundle.putString("fragment_type", fragment_type);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragment_extra = getArguments().getString("fragment_extra");
fragment_type = getArguments().getString("fragment_type");
assert fragment_type != null;
if (fragment_type.equalsIgnoreCase(Config.FRAGEMNT_TYPE_FAMOUS)) {
tag_name = "get_post_by_famous";
} else if (fragment_type.equalsIgnoreCase(Config.FRAGMENT_TYPE_FOLLOWERS)) {
tag_name = "get_posts_by_followers";
} else if (fragment_type.equalsIgnoreCase(Config.FRAGMENT_TYPE_SELF)) {
tag_name = "get_post_by_user";
following_id = fragment_extra;
} else if (fragment_type.equalsIgnoreCase(Config.FRAGMENT_TYPE_TAG)) {
tag_name = "get_post_by_tags";
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_post_view, container, false);
mContext = getActivity();
recyclerView = (RecyclerView) v.findViewById(R.id.recycler_post);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
linear_search = (LinearLayout) v.findViewById(R.id.linear_search);
text_retry = (TextView) v.findViewById(R.id.text_retry);
linear_no_internet = (LinearLayout) v.findViewById(R.id.no_internet);
text_no_data = (TextView) v.findViewById(R.id.no_data_text);
if (tag_name.equalsIgnoreCase("get_post_by_famous")) {
linear_search.setVisibility(View.VISIBLE);
linear_search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(mContext, SearchActivity.class);
startActivity(i);
}
});
} else {
linear_search.setVisibility(View.GONE);
}
swipeContainer = (SwipeRefreshLayout) v.findViewById(R.id.swipeContainer);
swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new PostTask(String.valueOf(1)).execute(Config.POST_URL);
}
});
final_list = new ArrayList<>();
new PostTask(String.valueOf(next_page_no)).execute(Config.POST_URL);
mLayoutManager = new LinearLayoutManager(mContext);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
mScrollState = newState;
Log.d("scrolling1233_onScrollStateChanged", String.valueOf(newState));
if (list != null) {
if (newState == RecyclerView.SCROLL_STATE_IDLE && !list.isEmpty()) {
Log.d("scrolling1233_onScrollStateChanged", "onScrollStateChanged");
Log.d("scrolling1233_findFirstVisibleItemPosition",
String.valueOf(mLayoutManager.findFirstVisibleItemPosition()));
Log.d("scrolling1233_findLastVisibleItemPosition",
String.valueOf(mLayoutManager.findLastVisibleItemPosition()));
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//super.onScrolled(recyclerView, dx, dy);
Log.d("scroll123_onScrolled", "onScrolled");
UtilMethods.LogMethod("scroll123_has_next_page", String.valueOf(has_next_page));
UtilMethods.LogMethod("scroll123_hasFooter", String.valueOf(hasFooter()));
if (has_next_page && !(hasFooter())) {
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
UtilMethods.LogMethod("scroll123_findLastCompletelyVisibleItemPosition",
String.valueOf(manager.findLastVisibleItemPosition()));
UtilMethods.LogMethod("scroll123_getItemCount",
String.valueOf(manager.getItemCount()));
if (manager.findLastVisibleItemPosition() == manager.getItemCount() - 2) {
UtilMethods.LogMethod("scroll1235_next_page_no",
String.valueOf(next_page_no));
UtilMethods.LogMethod("scroll1235_has_nextPage",
String.valueOf(has_next_page));
UtilMethods.LogMethod("scroll123_findLastCompletelyVisibleItemPosition",
String.valueOf(manager.findLastVisibleItemPosition()));
new PostTask(String.valueOf(next_page_no)).execute(Config.POST_URL);
}
}
}
});
return v;
}
@Override
public void onResume() {
super.onResume();
if (adapter != null)
adapter.notifyDataSetChanged();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
UtilMethods.LogMethod("kljlkc1234_", "djhjhkhkd");
if (resultCode == RESULT_OK) {
if (requestCode == POST_COMMENT_REQUEST) {
UtilMethods.LogMethod("kljlkc1234_", "djhjhkhkd");
}
}
}
@SuppressLint("StaticFieldLeak")
public class PostTask extends AsyncTask<String, Void, Integer> {
int result = 0;
boolean jerror;
String jmsg;
private String page_no;
public PostTask(String page_no) {
this.page_no = page_no;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (page_no.equalsIgnoreCase("1")) {
swipeContainer.setRefreshing(true);
} else {
list.add(new Footer());
final_list = list;
recyclerView.getAdapter().notifyItemInserted(final_list.size());
}
}
@Override
protected Integer doInBackground(String... params) {
RequestBody requestBody = null;
if (tag_name.equalsIgnoreCase("get_post_by_user")) {
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("tag", "get_post_by_user")
.addFormDataPart("self_user_id", Config.SelfId)
.addFormDataPart("to_see_user_id", following_id)
.addFormDataPart("page_no", page_no)
.build();
UtilMethods.LogMethod("text3434_tag", "get_post_by_user");
UtilMethods.LogMethod("text3434_self_user_id", Config.SelfId);
UtilMethods.LogMethod("text3434_to_see_user_id", following_id);
} else if (tag_name.equalsIgnoreCase("get_posts_by_followers")) {
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("tag", "get_posts_by_followers")
.addFormDataPart("user_id", Config.SelfId)
.addFormDataPart("page_no", page_no)
.build();
} else if (tag_name.equalsIgnoreCase("get_post_by_famous")) {
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("tag", "get_post_by_famous")
.addFormDataPart("self_user_id", Config.SelfId)
.addFormDataPart("page_no", page_no)
.build();
} else if (tag_name.equalsIgnoreCase("get_post_by_tags")) {
requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("tag", "get_post_by_tags")
.addFormDataPart("self_user_id", Config.SelfId)
.addFormDataPart("page_no", page_no)
.addFormDataPart("post_tag", fragment_extra)
.build();
}
Request request = new Request.Builder()
.url(params[0])
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
try {
Response response = client.newCall(request).execute();
int status = response.networkResponse().code();
UtilMethods.LogMethod("response_status", String.valueOf(status));
if (status == 200) {
String json_string = response.body().string();
UtilMethods.LogMethod("response_res", json_string);
parseJson(json_string);
result = 1;
} else {
result = 0;
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
if (mContext != null) {
swipeContainer.setRefreshing(false);
if (result == 1) {
if (!jerror) {
if (page_no.equalsIgnoreCase("1")) {
recyclerView.setVisibility(View.VISIBLE);
linear_no_internet.setVisibility(View.GONE);
text_no_data.setVisibility(View.GONE);
final_list = list;
adapter = new PostViewAdapter(mContext, final_list, following_id);
// recyclerView.getItemAnimator().setChangeDuration(0);
recyclerView.setAdapter(adapter);
if (list != null) {
if (!list.isEmpty()) {
// need to call this method from list view handler in order to have filled list
if (recyclerView != null) {
// recyclerView.post(new Runnable() {
// @Override
// public void run() {
// if (mContext != null) {
// mVideoVisibilityCalculator.onScrollStateIdle(
// mItemsPositionGetter,
// mLayoutManager.findFirstVisibleItemPosition(),
// mLayoutManager.findLastVisibleItemPosition());
// }
//
// }
// });
}
} else {
text_no_data.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
linear_no_internet.setVisibility(View.GONE);
if (tag_name.equalsIgnoreCase("get_post_by_user")) {
text_no_data.setText("No Post Found.");
} else if (tag_name.equalsIgnoreCase("get_posts_by_followers")) {
text_no_data.setText("No Post Found.\n Follow more user to watch more media.");
} else if (tag_name.equalsIgnoreCase("get_post_by_famous")) {
text_no_data.setText("No Post Found.");
} else if (tag_name.equalsIgnoreCase("get_post_by_tags")) {
text_no_data.setText("No Post Found.");
}
}
}
} else {
int size = list.size();
list.remove(size - 1);
list.addAll(list1);
final_list = list;
// recyclerView.getAdapter().notifyItemRangeChanged(size - 1,
// list.size() - size);
recyclerView.getAdapter().notifyDataSetChanged();
}
} else {
Toast.makeText(mContext, jmsg, Toast.LENGTH_LONG).show();
}
} else {
if (page_no.equalsIgnoreCase("1")) {
recyclerView.setVisibility(View.GONE);
linear_no_internet.setVisibility(View.VISIBLE);
text_no_data.setVisibility(View.GONE);
text_retry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
linear_no_internet.setVisibility(View.GONE);
new PostTask(String.valueOf(1)).execute(Config.POST_URL);
}
});
} else {
Toast.makeText(mContext, "No internet connection", Toast.LENGTH_LONG).show();
}
}
}
}
public void parseJson(String s) {
if (page_no.equalsIgnoreCase("1")) {
list = new ArrayList<>();
} else {
list1 = new ArrayList<>();
}
try {
JSONObject startingObject = new JSONObject(s);
jerror = startingObject.getBoolean("error");
if (!jerror) {
page_no = startingObject.getString("page_number");
has_next_page = startingObject.getBoolean("has_next_page");
if (has_next_page)
next_page_no = startingObject.getInt("next_page_no");
JSONArray allDataArray = startingObject.getJSONArray("all_data");
if (allDataArray.length() > 0) {
for (int i = 0; i < allDataArray.length(); i++) {
PostViewModel model = new PostViewModel();
JSONObject object = allDataArray.getJSONObject(i);
JSONObject userObject = object.getJSONObject("user_data");
model.setUser_id(userObject.getString("user_id"));
model.setUser_name(userObject.getString("user_name"));
model.setUser_gcm_id(userObject.getString("user_gcm_id"));
model.setProfile_pic(userObject.getString("profile_pic"));
model.setTotal_posts(userObject.getString("total_posts"));
model.setTotal_followers(userObject.getString("total_followers"));
model.setTotal_followings(userObject.getString("total_followings"));
model.setStatus(userObject.getString("status"));
Object a = userObject.get("following");
if (a instanceof String) {
model.setFollowing_type("Str");
model.setFollowing_string(userObject.getString("following"));
model.setFollowing(Boolean.parseBoolean(model.getFollowing_string()));
} else {
model.setFollowing_type("Bool");
model.setFollowing(userObject.getBoolean("following"));
model.setFollowing_string(String.valueOf(userObject.getBoolean("following")));
}
// model.setFollowing(userObject.getBoolean("following"));
model.setPoster_pic(userObject.getString("poster_pic"));
model.setShow_profile(userObject.getBoolean("show_profile"));
model.setBirth_date(userObject.getString("birth_date"));
model.setMobile_number(userObject.getString("mobile_number"));
model.setPrivacy_policy(userObject.getString("privacy_policy"));
model.setBlockedUser(userObject.getBoolean("is_blocked"));
JSONObject postObject = object.getJSONObject("post_data");
model.setPost_id(postObject.getString("post_id"));
model.setPost_message(postObject.getString("post_message"));
model.setPost_type(postObject.getString("post_type"));
model.setPost_path(postObject.getString("post_path"));
model.setPost_thumbnail(postObject.getString("post_thumbnail"));
model.setPost_tag(postObject.getString("post_tag"));
model.setCreated_at(postObject.getString("created_at"));
model.setTotal_likes(postObject.getString("total_likes"));
model.setTotal_comments(postObject.getString("total_comments"));
model.setPost_back_color_code(postObject.getString("post_back_color_code"));
model.setPost_back_image_id(postObject.getString("post_back_image_id"));
model.setIsSharingOn(postObject.getString("isSharingOn"));
model.setIsCommentsOn(postObject.getString("isCommentsOn"));
model.setPost_width(postObject.getString("post_width"));
model.setPost_height(postObject.getString("post_height"));
model.setIs_liked(postObject.getBoolean("is_liked"));
model.setLanguage(postObject.getString("post_language"));
model.setIs_notification_on(postObject.getBoolean("is_notification_on"));
if (model.getPost_tag().contains("18")) {
UtilMethods.LogMethod("post738239_18888", "ifff");
if (MyApplication.getInstance().
getPrefManager().getEighteenPlus()) {
if (page_no.equalsIgnoreCase("1")) {
list.add(model);
} else {
list1.add(model);
}
}
} else {
if (page_no.equalsIgnoreCase("1")) {
list.add(model);
} else {
list1.add(model);
}
}
}
} else {
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onPause() {
super.onPause();
UtilMethods.LogMethod("recyclerView1234_music123", "pause");
if (MusicViewHolder.mp != null)
MusicViewHolder.mp.pause();
// UtilMethods.stopMediaPlayer();
}
@Override
public void onDetach() {
super.onDetach();
UtilMethods.LogMethod("recyclerView1234_onDetach", "onDetach");
}
private boolean hasFooter() {
if (list.size() > 0) {
return list.get(list.size() - 1) instanceof Footer;
} else {
return true;
}
}
}