Java tutorial
/** * This file is part of FileSpace for Android, an app for managing your server (files, talks...). * <p> * Copyright (c) 2014-2015 FileSpace for Android contributors (http://mercandalli.com) * <p> * LICENSE: * <p> * FileSpace for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any * later version. * <p> * FileSpace for Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * @author Jonathan Mercandalli * @license http://www.gnu.org/licenses/gpl.html * @copyright 2014-2015 FileSpace for Android contributors (http://mercandalli.com) */ package com.mercandalli.android.apps.files.user; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.mercandalli.android.apps.files.R; import com.mercandalli.android.apps.files.common.listener.IPostExecuteListener; import com.mercandalli.android.apps.files.common.net.TaskGet; import com.mercandalli.android.apps.files.common.net.TaskPost; import com.mercandalli.android.apps.files.common.util.StringPair; import com.mercandalli.android.apps.files.common.view.divider.DividerItemDecoration; import com.mercandalli.android.apps.files.main.ApplicationActivity; import com.mercandalli.android.apps.files.main.Config; import com.mercandalli.android.apps.files.main.Constants; import com.mercandalli.android.apps.files.main.network.NetUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** * Created by Jonathan on 14/12/2014. */ public class ConversationActivity extends ApplicationActivity { private String mUrl; private String mIdConversation; private RecyclerView mRecyclerView; private AdapterModelConversationMessage mAdapterModelConversationMessage; private final List<UserConversationMessageModel> mUserConversationMessageModels = new ArrayList<>(); private ProgressBar mProgressBar; private TextView mMessageTextView; private SwipeRefreshLayout mSwipeRefreshLayout; private EditText mInputEditText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversation); Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } Bundle extras = getIntent().getExtras(); if (extras == null) { Log.e("" + getClass().getName(), "extras == null"); this.finish(); this.overridePendingTransition(R.anim.right_in, R.anim.right_out); return; } mInputEditText = (EditText) findViewById(R.id.input); mIdConversation = extras.getString("ID_CONVERSATION"); mUrl = Constants.URL_DOMAIN + Config.ROUTE_USER_MESSAGE + "/" + mIdConversation; mProgressBar = (ProgressBar) findViewById(R.id.circularProgressBar); mMessageTextView = (TextView) findViewById(R.id.message); mRecyclerView = (RecyclerView) findViewById(R.id.listView); mRecyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setStackFromEnd(true); mRecyclerView.setLayoutManager(linearLayoutManager); mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); this.mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { refreshList(); } }); mAdapterModelConversationMessage = new AdapterModelConversationMessage(mUserConversationMessageModels); mRecyclerView.setAdapter(mAdapterModelConversationMessage); mRecyclerView.setItemAnimator(/*new SlideInFromLeftItemAnimator(mRecyclerView)*/new DefaultItemAnimator()); mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); mAdapterModelConversationMessage .setOnItemClickListener(new AdapterModelConversationMessage.OnItemClickListener() { @Override public void onItemClick(View view, int position) { } }); mAdapterModelConversationMessage .setOnItemLongClickListener(new AdapterModelConversationMessage.OnItemLongClickListener() { @Override public boolean onItemLongClick(View view, int position) { return true; } }); mInputEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) { String url = Constants.URL_DOMAIN + Config.ROUTE_USER_MESSAGE + "/" + mIdConversation; List<StringPair> parameters = new ArrayList<>(); parameters.add(new StringPair("message", "" + mInputEditText.getText().toString())); mInputEditText.setText(""); new TaskPost(ConversationActivity.this, url, new IPostExecuteListener() { @Override public void onPostExecute(JSONObject json, String body) { refreshList(); } }, parameters).execute(); return true; } return false; } }); refreshList(); } public void updateAdapters() { if (mRecyclerView != null) { if (mUserConversationMessageModels.size() == 0) { if (mUrl == null) { mMessageTextView.setText(getString(R.string.no_file_server)); } else if (mUrl.equals("")) { mMessageTextView.setText(getString(R.string.no_file_server)); } else { mMessageTextView.setText(getString(R.string.no_file_directory)); } mMessageTextView.setVisibility(View.VISIBLE); } else { mMessageTextView.setVisibility(View.GONE); } mAdapterModelConversationMessage.replaceList(mUserConversationMessageModels); mRecyclerView.scrollToPosition(mUserConversationMessageModels.size() - 1); mProgressBar.setVisibility(View.GONE); mSwipeRefreshLayout.setRefreshing(false); } } public void refreshList() { refreshList(null); } public void refreshList(String search) { if (mUrl == null) { finish(); overridePendingTransition(R.anim.right_in, R.anim.right_out); return; } List<StringPair> parameters = null; if (NetUtils.isInternetConnection(this)) { new TaskGet(this, this.mUrl, new IPostExecuteListener() { @Override public void onPostExecute(JSONObject json, String body) { mUserConversationMessageModels.clear(); try { if (json != null) { if (json.has("result")) { JSONArray array = json.getJSONArray("result"); for (int i = 0; i < array.length(); i++) { UserConversationMessageModel modelFile = new UserConversationMessageModel( ConversationActivity.this, array.getJSONObject(i)); mUserConversationMessageModels.add(modelFile); } } } else { Toast.makeText(ConversationActivity.this, ConversationActivity.this.getString(R.string.action_failed), Toast.LENGTH_SHORT) .show(); } } catch (JSONException e) { Log.e(getClass().getName(), "Failed to convert Json", e); } updateAdapters(); } }, parameters).execute(); } else { mProgressBar.setVisibility(View.GONE); mMessageTextView.setText(getString(R.string.no_internet_connection)); mMessageTextView.setVisibility(View.VISIBLE); mSwipeRefreshLayout.setRefreshing(false); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); overridePendingTransition(R.anim.right_in, R.anim.right_out); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { finish(); overridePendingTransition(R.anim.right_in, R.anim.right_out); } return super.onKeyDown(keyCode, event); } }