package org.maepaysoh.maepaysoh.ui; import android.content.Intent; import android.database.SQLException; import android.graphics.PorterDuff; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import java.util.List; import org.maepaysoh.maepaysoh.MaePaySoh; import org.maepaysoh.maepaysoh.R; import org.maepaysoh.maepaysoh.adapters.EndlessRecyclerViewAdapter; import org.maepaysoh.maepaysoh.adapters.FaqAdapter; import org.maepaysoh.maepaysoh.utils.InternetUtils; import org.maepaysoh.maepaysoh.utils.ViewUtils; import org.maepaysoh.maepaysohsdk.FAQAPIHelper; import org.maepaysoh.maepaysohsdk.MaePaySohApiWrapper; import org.maepaysoh.maepaysohsdk.models.FAQ; import org.maepaysoh.maepaysohsdk.utils.FaqAPIProperties; import org.maepaysoh.maepaysohsdk.utils.FaqAPIPropertiesMap; import static org.maepaysoh.maepaysoh.utils.Logger.LOGD; import static org.maepaysoh.maepaysoh.utils.Logger.makeLogTag; /** * Created by Ye Lin Aung on 15/08/06. */ public class FaqListActivity extends BaseActivity implements FaqAdapter.ClickInterface, android.support.v7.widget.SearchView.OnQueryTextListener { private static String TAG = makeLogTag(FaqListActivity.class); private RecyclerView mFaqListRecyclerView; private ProgressBar mProgressView; private View mErrorView; private Button mRetryBtn; private ViewUtils viewUtils; private LinearLayoutManager mLayoutManager; private FaqAdapter mFaqAdapter; private EndlessRecyclerViewAdapter mEndlessRecyclerViewAdapter; private int mCurrentPage = 1; private List<FAQ> mFaqDatas; private android.support.v7.widget.SearchView mSearchView; private MenuItem mSearchMenu; private FAQAPIHelper mFAQAPIHelper; private MaePaySohApiWrapper mMaePaySohApiWrapper; private DownFaqListAsync mDownFaqListAsync; private SearchFAQAsync mSearchFAQAsync; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_faq_list); Toolbar mToolbar = (Toolbar) findViewById(R.id.faq_list_toolbar); View mToolbarShadow = findViewById(R.id.faq_list_toolbar_shadow); mErrorView = findViewById(R.id.faq_list_error_view); mFaqListRecyclerView = (RecyclerView) findViewById(R.id.faq_list_recycler_view); mProgressView = (ProgressBar) findViewById(R.id.faq_list_progress_bar); mRetryBtn = (Button) mErrorView.findViewById(R.id.error_view_retry_btn); mProgressView.getIndeterminateDrawable() .setColorFilter(getResources().getColor(R.color.primary), PorterDuff.Mode.SRC_ATOP); mToolbar.setTitle(getString(R.string.FaqList)); hideToolBarShadowForLollipop(mToolbar, mToolbarShadow); setSupportActionBar(mToolbar); ActionBar mActionBar = getSupportActionBar(); if (mActionBar != null) { // Showing Back Arrow <- mActionBar.setDisplayHomeAsUpEnabled(true); } viewUtils = new ViewUtils(this); mLayoutManager = new LinearLayoutManager(this); mFaqListRecyclerView.setLayoutManager(mLayoutManager); mFaqAdapter = new FaqAdapter(); mFaqAdapter.setOnItemClickListener(this); mMaePaySohApiWrapper = MaePaySoh.getMaePaySohWrapper(); mFAQAPIHelper = mMaePaySohApiWrapper.getFaqApiHelper(); mEndlessRecyclerViewAdapter = new EndlessRecyclerViewAdapter(FaqListActivity.this, mFaqAdapter, new EndlessRecyclerViewAdapter.RequestToLoadMoreListener() { @Override public void onLoadMoreRequested() { loadFaqData(null); } }); mFaqListRecyclerView.setAdapter(mEndlessRecyclerViewAdapter); if (InternetUtils.isNetworkAvailable(this)) { loadFaqData(null); } else { loadFromCache(); } mRetryBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loadFaqData(null); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_faq, menu); mSearchMenu = menu.findItem(R.id.menu_search); mSearchView = (android.support.v7.widget.SearchView) mSearchMenu.getActionView(); mSearchView.setOnQueryTextListener(this); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); } return super.onOptionsItemSelected(item); } private void loadFaqData(@Nullable String query) { TextView errorText = (TextView) mErrorView.findViewById(R.id.error_view_error_text); errorText.setText(getString(R.string.PleaseCheckNetworkAndTryAgain)); mRetryBtn.setVisibility(View.VISIBLE); if (mErrorView.getVisibility() == View.VISIBLE) { mErrorView.setVisibility(View.GONE); } if (mCurrentPage == 1) { viewUtils.showProgress(mFaqListRecyclerView, mProgressView, true); } if (query != null && query.length() > 0) { mSearchFAQAsync = new SearchFAQAsync(); mSearchFAQAsync.execute(query); } else { mDownFaqListAsync = new DownFaqListAsync(); mDownFaqListAsync.execute(mCurrentPage); } } @Override public void onItemClick(View view, int position) { Intent goToFaqDetailIntent = new Intent(); goToFaqDetailIntent.setClass(FaqListActivity.this, FaqDetailActivity.class); goToFaqDetailIntent.putExtra(FaqDetailActivity.FAQ_CONSTANT, mFaqDatas.get(position)); startActivity(goToFaqDetailIntent); } @Override public boolean onQueryTextSubmit(String query) { return true; } @Override public boolean onQueryTextChange(String newText) { mCurrentPage = 1; if (InternetUtils.isNetworkAvailable(this)) { loadFaqData(newText); } else { searchFaqFromCache(newText); } LOGD(TAG, "searching"); return true; } private void loadFromCache() { //Disable pagination in cache mEndlessRecyclerViewAdapter.onDataReady(false); try { mFaqDatas = mFAQAPIHelper.getFaqsFromCache(); if (mFaqDatas != null && mFaqDatas.size() > 0) { viewUtils.showProgress(mFaqListRecyclerView, mProgressView, false); mFaqAdapter.setFaqs(mFaqDatas); mFaqAdapter.setOnItemClickListener(FaqListActivity.this); } else { viewUtils.showProgress(mFaqListRecyclerView, mProgressView, false); mErrorView.setVisibility(View.VISIBLE); } } catch (SQLException e) { viewUtils.showProgress(mFaqListRecyclerView, mProgressView, false); mErrorView.setVisibility(View.VISIBLE); e.printStackTrace(); } } private void searchFaqFromCache(String keyword) { TextView errorText = (TextView) mErrorView.findViewById(R.id.error_view_error_text); errorText.setText(getString(R.string.PleaseCheckNetworkAndTryAgain)); mRetryBtn.setVisibility(View.VISIBLE); if (mErrorView.getVisibility() == View.VISIBLE) { mErrorView.setVisibility(View.GONE); } if (keyword.length() > 0) { mFaqDatas = mFAQAPIHelper.searchFaqFromCache(keyword); if (mFaqDatas != null && mFaqDatas.size() > 0) { mFaqListRecyclerView.setVisibility(View.VISIBLE); mErrorView.setVisibility(View.GONE); mFaqAdapter.setFaqs(mFaqDatas); mFaqAdapter.setOnItemClickListener(FaqListActivity.this); } else { mFaqListRecyclerView.setVisibility(View.GONE); mErrorView.setVisibility(View.VISIBLE); mRetryBtn.setVisibility(View.GONE); errorText.setText(R.string.search_not_found); } } else { loadFromCache(); } } @Override protected void onPause() { super.onPause(); if (mDownFaqListAsync != null) { mDownFaqListAsync.cancel(true); } if (mSearchFAQAsync != null) { mSearchFAQAsync.cancel(true); } } class DownFaqListAsync extends AsyncTask<Integer, Void, List<FAQ>> { @Override protected List<FAQ> doInBackground(Integer... integer) { mCurrentPage = integer[0]; FaqAPIPropertiesMap faqAPIPropertiesMap = new FaqAPIPropertiesMap(); faqAPIPropertiesMap.put(FaqAPIProperties.FIRST_PAGE, mCurrentPage); return mFAQAPIHelper.getFaqs(faqAPIPropertiesMap); } @Override protected void onPostExecute(List<FAQ> faqs) { super.onPostExecute(faqs); TextView errorText = (TextView) mErrorView.findViewById(R.id.error_view_error_text); errorText.setText(getString(R.string.PleaseCheckNetworkAndTryAgain)); mRetryBtn.setVisibility(View.VISIBLE); if (mErrorView.getVisibility() == View.VISIBLE) { mErrorView.setVisibility(View.GONE); } if (faqs.size() > 0) { if (mCurrentPage == 1) { viewUtils.showProgress(mFaqListRecyclerView, mProgressView, false); mFaqDatas = faqs; } else { mFaqDatas.addAll(faqs); } mFaqAdapter.setFaqs(mFaqDatas); mEndlessRecyclerViewAdapter.onDataReady(true); mCurrentPage++; } else { if (mCurrentPage == 1) { loadFromCache(); } mEndlessRecyclerViewAdapter.onDataReady(false); } } } class SearchFAQAsync extends AsyncTask<String, Void, List<FAQ>> { @Override protected List<FAQ> doInBackground(String... strings) { return mFAQAPIHelper.searchFaq(strings[0]); } @Override protected void onPostExecute(List<FAQ> faqs) { super.onPostExecute(faqs); //Hide Progress on success viewUtils.showProgress(mFaqListRecyclerView, mProgressView, false); if (faqs.size() > 0) { mFaqListRecyclerView.setVisibility(View.VISIBLE); if (mCurrentPage == 1) { mFaqDatas = faqs; } else { mFaqDatas.addAll(faqs); } mFaqAdapter.setFaqs(mFaqDatas); mEndlessRecyclerViewAdapter.onDataReady(true); mCurrentPage++; } else { mFaqListRecyclerView.setVisibility(View.GONE); mErrorView.setVisibility(View.VISIBLE); TextView errorText = (TextView) mErrorView.findViewById(R.id.error_view_error_text); errorText.setText(R.string.search_not_found); mRetryBtn.setVisibility(View.GONE); } } } }