Guest User

Untitled

a guest
Dec 4th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.66 KB | None | 0 0
  1. public class MainActivity extends BaseActivity implements RecyclerViewOnClickListenerHack {
  2.  
  3. public static String IDENTIFIER = "MainActivity";
  4.  
  5. private Locale myLocale;
  6. private List<Post> mList = null;
  7. private RecyclerView mRecyclerView;
  8. private PostAdapter mAdapter;
  9.  
  10. private FrameLayout mProgress;
  11. private LinearLayout mSlowConnection;
  12. private LinearLayout mNotFound;
  13.  
  14. private boolean mInRequest = false;
  15. private Integer mOffset = 0;
  16. private Integer mLimit = 50;
  17.  
  18. private Button mBtnReload;
  19.  
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23.  
  24. setContentView(R.layout.activity_main);
  25. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  26. toolbar.setTitle(getString(R.string.general));
  27. setSupportActionBar(toolbar);
  28.  
  29. super.setDrawer(MainActivity.this, toolbar);
  30.  
  31. mRecyclerView = (RecyclerView) findViewById(R.id.rvPostList);
  32. mRecyclerView.setHasFixedSize(true);
  33.  
  34. final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
  35. linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  36. mRecyclerView.setLayoutManager(linearLayoutManager);
  37. mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
  38. @Override
  39. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  40. super.onScrolled(recyclerView, dx, dy);
  41. if(mList.size() == linearLayoutManager.findLastCompletelyVisibleItemPosition() + 1){
  42. if(!mInRequest){
  43. getMorePosts();
  44. }
  45. }
  46. }
  47. });
  48.  
  49. mProgress = (FrameLayout) findViewById(R.id.fl_progress);
  50. mSlowConnection = (LinearLayout) findViewById(R.id.ll_slow_connection);
  51. mNotFound = (LinearLayout) findViewById(R.id.ll_not_found);
  52.  
  53. mBtnReload = (Button) findViewById(R.id.btn_reload);
  54. mBtnReload.setOnClickListener(new View.OnClickListener() {
  55. @Override
  56. public void onClick(View v) {
  57. mProgress.setVisibility(View.VISIBLE);
  58. mSlowConnection.setVisibility(View.GONE);
  59. getPosts();
  60. }
  61. });
  62.  
  63. getPosts();
  64.  
  65. setImgProfile();
  66.  
  67. }
  68.  
  69. public void getPosts(){
  70. Call<List<Post>> call = mService.getPostsPaginated(MonitorSettings.ALL, mLimit, mOffset);
  71. call.enqueue(new Callback<List<Post>>() {
  72. @Override
  73. public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
  74. mProgress.setVisibility(View.GONE);
  75. mSlowConnection.setVisibility(View.GONE);
  76.  
  77. if(response.isSuccessful()){
  78. mList = response.body();
  79. if(!mList.isEmpty()){
  80. mOffset++;
  81. mAdapter = new PostAdapter(MainActivity.this, mList);
  82. mAdapter.setRecyclerViewOnClickListenerHack(MainActivity.this);
  83. mRecyclerView.setAdapter(mAdapter);
  84. }
  85. else{
  86. mNotFound.setVisibility(View.VISIBLE);
  87. }
  88. }
  89. else{
  90. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
  91. builder.setTitle(getString(R.string.oops));
  92. builder.setMessage(getString(R.string.login_again));
  93. builder.setCancelable(false);
  94. builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
  95. @Override
  96. public void onClick(DialogInterface dialog, int which) {
  97. logout();
  98. }
  99. });
  100. builder.show();
  101. }
  102. }
  103.  
  104. @Override
  105. public void onFailure(Call<List<Post>> call, Throwable t) {
  106. mProgress.setVisibility(View.GONE);
  107. mSlowConnection.setVisibility(View.VISIBLE);
  108. }
  109. });
  110. }
  111.  
  112. public void getMorePosts(){
  113. mInRequest = true;
  114. mAdapter.addProgressBar();
  115. mRecyclerView.scrollToPosition(mList.size() - 1);
  116. Call<List<Post>> call = mService.getPostsPaginated(MonitorSettings.ALL, mLimit, mOffset);
  117. call.enqueue(new Callback<List<Post>>() {
  118. @Override
  119. public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
  120. mAdapter.removeProgressBar();
  121.  
  122. if(response.isSuccessful()){
  123. if(!mList.isEmpty()){
  124. mOffset++;
  125. mInRequest = false;
  126.  
  127. List<Post> posts = response.body();
  128. for(Post post : posts){
  129. mAdapter.addListItem(post, mList.size());
  130. }
  131. }
  132. else{
  133. Snackbar.make(mRecyclerView, "Todas as publicações já foram carregadas", Snackbar.LENGTH_INDEFINITE)
  134. .setAction("Ok", new View.OnClickListener() {
  135. @Override
  136. public void onClick(View v) {
  137.  
  138. }
  139. }).show();
  140. }
  141. }
  142. else{
  143. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
  144. builder.setTitle(getString(R.string.oops));
  145. builder.setMessage(getString(R.string.login_again));
  146. builder.setCancelable(false);
  147. builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
  148. @Override
  149. public void onClick(DialogInterface dialog, int which) {
  150. logout();
  151. }
  152. });
  153. builder.show();
  154. }
  155. }
  156.  
  157. @Override
  158. public void onFailure(Call<List<Post>> call, Throwable t) {
  159. Snackbar.make(mRecyclerView, "Não foi possível carregar mais publicações. Tente novamente", Snackbar.LENGTH_INDEFINITE)
  160. .setAction("Ok", new View.OnClickListener() {
  161. @Override
  162. public void onClick(View v) {
  163. getMorePosts();
  164. }
  165. }).show();
  166. }
  167. });
  168. }
  169.  
  170. public void setLocale(String lang) {
  171. myLocale = new Locale(lang);
  172. Resources res = getResources();
  173. DisplayMetrics dm = res.getDisplayMetrics();
  174. Configuration conf = res.getConfiguration();
  175. conf.locale = myLocale;
  176. res.updateConfiguration(conf, dm);
  177. Intent refresh = new Intent(this, MainActivity.class);
  178. refresh.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  179. startActivity(refresh);
  180. }
  181.  
  182. @Override
  183. public void startActivity(Intent intent) {
  184. if(Intent.ACTION_SEARCH.equalsIgnoreCase(intent.getAction())){
  185. intent.putExtra("page", MonitorSettings.ALL);
  186. }
  187. super.startActivity(intent);
  188. }
  189.  
  190. @Override
  191. public void onClickListener(View view, int position) {
  192. Intent intent = new Intent(MainActivity.this, PostDetailsActivity.class);
  193. intent.putExtra("title", mList.get(position).getStatus());
  194. intent.putExtra("page", MonitorSettings.ALL);
  195. intent.putExtra("postId", mList.get(position).getId());
  196. intent.putExtra("postType", mList.get(position).getPostType());
  197. startActivity(intent);
  198. }
  199. }
  200.  
  201. public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
  202.  
  203. private Context mCtx;
  204.  
  205. private LayoutInflater mLayoutInflater;
  206. private List<Post> mList;
  207. private RecyclerViewOnClickListenerHack mRecyclerViewOnClickListenerHack;
  208.  
  209. private Integer mProgressPosition = -1;
  210. private Integer mLastPosition = -1;
  211.  
  212. public PostAdapter(Context ctx, List<Post> postList){
  213. this.mCtx = ctx;
  214. mList = postList;
  215. mLayoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  216. }
  217.  
  218. @Override
  219. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  220. RecyclerView.ViewHolder mvh;
  221. if(viewType == 0) {
  222. View v = mLayoutInflater.inflate(R.layout.post_item_main, parent, false);
  223. mvh = new PostViewHolder(v);
  224. }else {
  225. View v = mLayoutInflater.inflate(R.layout.ll_progress_item, parent, false);
  226. mvh = new ProgressViewHolder(v);
  227. }
  228. return mvh;
  229. }
  230.  
  231. @Override
  232. public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
  233. if(viewHolder instanceof ProgressViewHolder) {
  234. ((ProgressViewHolder) viewHolder).progressBar.setIndeterminate(true);
  235. }
  236. else if(viewHolder instanceof PostViewHolder){
  237. PostViewHolder holder = ((PostViewHolder) viewHolder);
  238. holder.txtStatus.setText(mList.get(position).getStatus());
  239. holder.txtId.setText(String.format(mCtx.getString(R.string.post_id), mList.get(position).getId().toString()));
  240. try {
  241. holder.txtDate.setText(MonitorApplication.getConvertedDate(mList.get(position).getCreated_at(), MonitorSettings.SMALL_DATE_FORMAT, MonitorSettings.OUTPUT_DATE_FORMAT));
  242. } catch (ParseException e) {
  243. e.printStackTrace();
  244. }
  245. String name = mList.get(position).getAssignee();
  246. if (name != null && !name.isEmpty()) {
  247. holder.txtName.setText(mList.get(position).getAssignee());
  248. } else {
  249. holder.txtName.setText(mCtx.getString(R.string.user_unidentified));
  250. }
  251. if (mList.get(position).getAssignee() == null) {
  252. // holder.txtName.setVisibility(View.GONE);
  253. holder.txtName.setText(mCtx.getString(R.string.responsible_unidentified));
  254. }
  255. holder.txtSubject.setText(mList.get(position).getCategory());
  256. holder.txtLocale.setText(mList.get(position).getNeighborhood());
  257.  
  258. setAnimation(holder.llContent, position);
  259. }
  260. }
  261.  
  262. @Override
  263. public int getItemCount() {
  264. return mList.isEmpty() ? 0 : mList.size();
  265. }
  266.  
  267. public void addListItem(Post post, int position){
  268. mList.add(post);
  269. notifyItemInserted(position);
  270. }
  271.  
  272. public void addProgressBar(){
  273. mList.add(null);
  274. notifyItemInserted(mList.size());
  275. mProgressPosition = mList.size()-1;
  276. }
  277.  
  278. public void removeProgressBar(){
  279. mList.remove(mList.size() - 1);
  280. notifyItemRemoved(mList.size() - 1);
  281. mProgressPosition = -1;
  282. }
  283.  
  284. @Override
  285. public int getItemViewType(int position) {
  286. Log.d("Thiago", "position: " + position);
  287. Log.d("Thiago", "mProgressPosition: " + mProgressPosition);
  288. Log.d("Thiago", "position == mProgressPosition: " + (position == mProgressPosition));
  289. return position == mProgressPosition ? 1 : 0;
  290. }
  291.  
  292. public void setRecyclerViewOnClickListenerHack(RecyclerViewOnClickListenerHack r){
  293. mRecyclerViewOnClickListenerHack = r;
  294. }
  295.  
  296. public class PostViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  297.  
  298. public TextView txtStatus;
  299. public TextView txtId;
  300. public TextView txtDate;
  301. public TextView txtName;
  302. public TextView txtSubject;
  303. public TextView txtLocale;
  304. public LinearLayout llContent;
  305.  
  306. public PostViewHolder(View itemView) {
  307. super(itemView);
  308.  
  309. llContent = (LinearLayout) itemView.findViewById(R.id.ll_content);
  310. txtStatus = (TextView) itemView.findViewById(R.id.txtStatus);
  311. txtId = (TextView) itemView.findViewById(R.id.txtId);
  312. txtDate = (TextView) itemView.findViewById(R.id.txtDate);
  313. txtName = (TextView) itemView.findViewById(R.id.txtName);
  314. txtSubject = (TextView) itemView.findViewById(R.id.txtSubject);
  315. txtLocale = (TextView) itemView.findViewById(R.id.txtLocale);
  316.  
  317. itemView.setOnClickListener(this);
  318. }
  319.  
  320. @Override
  321. public void onClick(View v) {
  322. if(mRecyclerViewOnClickListenerHack != null){
  323. mRecyclerViewOnClickListenerHack.onClickListener(v, getAdapterPosition());
  324. }
  325. }
  326.  
  327. public void clearAnimation(){
  328. llContent.clearAnimation();
  329. }
  330. }
  331.  
  332. public static class ProgressViewHolder extends RecyclerView.ViewHolder {
  333. public ProgressBar progressBar;
  334. public ProgressViewHolder(View v) {
  335. super(v);
  336. progressBar = (ProgressBar)v.findViewById(R.id.progress);
  337. }
  338. }
  339.  
  340. private void setAnimation(View viewToAnimate, int position)
  341. {
  342. // If the bound view wasn't previously displayed on screen, it's animated
  343. Animation animation;
  344.  
  345. if (position > mLastPosition){
  346. // Animation animation = AnimationUtils.loadAnimation(mCtx, android.R.anim.slide_in_left);
  347. animation = AnimationUtils.loadAnimation(mCtx, R.anim.slide_in_bottom);
  348. }
  349. else{
  350. animation = AnimationUtils.loadAnimation(mCtx, R.anim.slide_in_top);
  351. }
  352.  
  353. mLastPosition = position;
  354. viewToAnimate.startAnimation(animation);
  355. }
  356.  
  357. @Override
  358. public void onViewDetachedFromWindow(final RecyclerView.ViewHolder holder)
  359. {
  360. if(holder instanceof PostViewHolder){
  361. ((PostViewHolder)holder).clearAnimation();
  362. }
  363. }
  364. }
Add Comment
Please, Sign In to add comment