PostFragment.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package club.thepenguins.android.fragments;
  2. import android.content.Context;
  3. import android.os.Bundle;
  4. import androidx.fragment.app.Fragment;
  5. import androidx.recyclerview.widget.LinearLayoutManager;
  6. import androidx.recyclerview.widget.RecyclerView;
  7. import android.os.Handler;
  8. import android.util.Log;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.webkit.WebView;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. import com.facebook.shimmer.ShimmerFrameLayout;
  16. import org.jsoup.Jsoup;
  17. import org.jsoup.nodes.Document;
  18. import org.jsoup.nodes.Element;
  19. import org.jsoup.select.Elements;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import club.thepenguins.android.R;
  23. import club.thepenguins.android.adapters.CommentAdapter;
  24. import club.thepenguins.android.api.APIService;
  25. import club.thepenguins.android.data.CommentModel;
  26. import club.thepenguins.android.data.Comments;
  27. import club.thepenguins.android.data.IndividualPost;
  28. import club.thepenguins.android.data.PostContent;
  29. import club.thepenguins.android.utils.Constants;
  30. import es.dmoral.toasty.Toasty;
  31. import retrofit2.Call;
  32. import retrofit2.Response;
  33. import retrofit2.Retrofit;
  34. import retrofit2.converter.gson.GsonConverterFactory;
  35. import static club.thepenguins.android.utils.Constants.noInternet;
  36. public class PostFragment extends Fragment {
  37. private static final String ARG_PARAM1 = "param1";
  38. private static final String ARG_PARAM2 = "param2";
  39. private static final String ARG_PARAM3 = "param3";
  40. private static final String ARG_PARAM4 = "param4";
  41. private String mParam1;
  42. private String mParam2;
  43. private String mParam3;
  44. private String mParam4;
  45. private ArrayList<PostContent> postData;
  46. private ArrayList<CommentModel> comments;
  47. private RecyclerView recyclerView;
  48. private CommentAdapter commentAdapter;
  49. private LinearLayoutManager layoutManager;
  50. private TextView textView;
  51. private ShimmerFrameLayout loader;
  52. public PostFragment() {
  53. // Required empty public constructor
  54. }
  55. public static PostFragment newInstance(String param1, String param2, String param3, String param4) {
  56. PostFragment fragment = new PostFragment();
  57. Bundle args = new Bundle();
  58. args.putString(ARG_PARAM1, param1);
  59. args.putString(ARG_PARAM2, param2);
  60. args.putString(ARG_PARAM3, param3);
  61. args.putString(ARG_PARAM4, param4);
  62. fragment.setArguments(args);
  63. return fragment;
  64. }
  65. @Override
  66. public void onCreate(Bundle savedInstanceState) {
  67. super.onCreate(savedInstanceState);
  68. if (getArguments() != null) {
  69. mParam1 = getArguments().getString(ARG_PARAM1);
  70. mParam2 = getArguments().getString(ARG_PARAM2);
  71. mParam3 = getArguments().getString(ARG_PARAM3);
  72. mParam4 = getArguments().getString(ARG_PARAM4);
  73. }
  74. }
  75. @Override
  76. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  77. Bundle savedInstanceState) {
  78. View rootView = inflater.inflate(R.layout.fragment_post, container, false);
  79. loader = (ShimmerFrameLayout) rootView.findViewById(R.id.shimmer_view_container);
  80. postData = new ArrayList<>();
  81. comments = new ArrayList<>();
  82. postData.clear();
  83. getRetrofit(mParam1, rootView.getContext());
  84. Log.d("TAG", "onCreateView: " + mParam1);
  85. final Handler handler = new Handler();
  86. handler.postDelayed(new Runnable() {
  87. @Override
  88. public void run() {
  89. try {
  90. Document doc = Jsoup.parseBodyFragment(postData.get(0).getContent());
  91. doc.outputSettings().prettyPrint(false);
  92. Elements images = doc.select("img");
  93. Elements iframes = doc.select("iframe");
  94. for (Element image : images) {
  95. image.attr("width", "100%");
  96. image.attr("height", "240px");
  97. }
  98. for (Element iframe : iframes) {
  99. if (iframe.attr("width").isEmpty()) {
  100. iframe.attr("width", "100%");
  101. }
  102. }
  103. String htmlString = doc.select("body").html();
  104. char quotes = '"';
  105. String postTitle = "<h2>" + mParam3 + "</h2>" + "\n";
  106. String postAuthor = "<p>" + "Author: " + mParam4 + "</p>" + "\n";
  107. String postImage = "<img src= " + quotes + mParam2 + quotes + " width =" + quotes + "100%" + quotes + "/>" + "\n";
  108. String newHtmlString = postImage + postTitle + postAuthor + htmlString;
  109. WebView myWebView = rootView.findViewById(R.id.webview);
  110. myWebView.loadDataWithBaseURL(null, newHtmlString, "text/html", "UTF-8", null);
  111. myWebView.getSettings().setJavaScriptEnabled(true);
  112. loader.setVisibility(View.GONE);
  113. textView.setVisibility(View.VISIBLE);
  114. recyclerView.setVisibility(View.VISIBLE);
  115. } catch (Exception e) {
  116. Toasty.error(rootView.getContext(), noInternet, Toast.LENGTH_LONG, true).show();
  117. Log.d("PostFragment", "run: " + e);
  118. }
  119. }
  120. }, 3000);
  121. textView = rootView.findViewById(R.id.txtview);
  122. recyclerView = rootView.findViewById(R.id.recyclerComment);
  123. layoutManager = new LinearLayoutManager(rootView.getContext(), LinearLayoutManager.VERTICAL, false);
  124. recyclerView.setLayoutManager(layoutManager);
  125. handler.postDelayed(new Runnable() {
  126. @Override
  127. public void run() {
  128. commentAdapter = new CommentAdapter(comments, rootView.getContext());
  129. recyclerView.setAdapter(commentAdapter);
  130. String intValue = mParam1.replaceAll("[^0-9]", "").substring(1);
  131. getComments(intValue);
  132. }
  133. }, 5000);
  134. return rootView;
  135. }
  136. private void getRetrofit(String postUrl, Context context) {
  137. loader.startShimmer();
  138. Retrofit retrofit = new Retrofit.Builder()
  139. .baseUrl(postUrl + "/")
  140. .addConverterFactory(GsonConverterFactory.create())
  141. .build();
  142. APIService service = retrofit.create(APIService.class);
  143. Call<IndividualPost> call = service.getPostContent();
  144. call.enqueue(new retrofit2.Callback<IndividualPost>() {
  145. @Override
  146. public void onResponse(Call<IndividualPost> call, Response<IndividualPost> response) {
  147. if (postData.size() > 1) {
  148. postData.clear();
  149. }
  150. postData.add(new PostContent(response.body().getContent().getRendered()));
  151. }
  152. @Override
  153. public void onFailure(Call<IndividualPost> call, Throwable t) {
  154. Toasty.error(context, noInternet, Toast.LENGTH_LONG, true).show();
  155. }
  156. });
  157. }
  158. public void getComments(String id) {
  159. Retrofit retrofit = new Retrofit.Builder()
  160. .baseUrl(Constants.BaseUrl)
  161. .addConverterFactory(GsonConverterFactory.create())
  162. .build();
  163. APIService service = retrofit.create(APIService.class);
  164. Call<List<Comments>> call = service.getPostComments(id);
  165. call.enqueue(new retrofit2.Callback<List<Comments>>() {
  166. @Override
  167. public void onResponse(Call<List<Comments>> call, Response<List<Comments>> response) {
  168. for (int i = 0; i < response.body().size(); i++) {
  169. comments.add(new CommentModel(response.body().get(i).getAuthorAvatarUrls().get96(), response.body().get(i).getAuthorName(), response.body().get(i).getDate(), response.body().get(i).getContent().getRendered()));
  170. System.out.println(response.body().get(i).getContent());
  171. }
  172. commentAdapter.notifyDataSetChanged();
  173. if (comments.size() != 0) {
  174. textView.setText("Comments:");
  175. } else {
  176. textView.setText("No Comments");
  177. }
  178. }
  179. @Override
  180. public void onFailure(Call<List<Comments>> call, Throwable t) {
  181. Log.d("PostRecyclerAdapter", "onFailure: ", t);
  182. }
  183. });
  184. }
  185. }