package org.maepaysoh.maepaysoh.ui;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.os.AsyncTask;
import android.os.Bundle;
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.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import java.util.ArrayList;
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.LocationAdapter;
import org.maepaysoh.maepaysoh.utils.InternetUtils;
import org.maepaysoh.maepaysoh.utils.ViewUtils;
import org.maepaysoh.maepaysohsdk.GeoAPIHelper;
import org.maepaysoh.maepaysohsdk.MaePaySohApiWrapper;
import org.maepaysoh.maepaysohsdk.models.Geo;
import org.maepaysoh.maepaysohsdk.utils.GeoAPIProperties;
import org.maepaysoh.maepaysohsdk.utils.GeoAPIPropertiesMap;
public class LocationListActivity extends BaseActivity implements LocationAdapter.ClickInterface {
private Button ygnWestBtn;
private ViewUtils viewUtils;
private LinearLayoutManager mLayoutManager;
private RecyclerView mLocationListRecyclerView;
private LocationAdapter mLocationAdapter;
private MaePaySohApiWrapper mMaePaySohApiWrapper;
private GeoAPIHelper mGeoAPIHelper;
private View mRetryBtn;
private List<Geo> mGeos = new ArrayList<>();
private ProgressBar mProgressView;
private EndlessRecyclerViewAdapter mEndlessRecyclerViewAdapter;
private int mCurrentPage = 1;
private GeoAPIPropertiesMap mGeoAPIPropertiesMap;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
Toolbar mToolbar = (Toolbar) findViewById(R.id.location_list_toolbar);
View mToolbarShadow = findViewById(R.id.location_list_toolbar_shadow);
mProgressView = (ProgressBar) findViewById(R.id.location_list_progress_bar);
mProgressView.getIndeterminateDrawable()
.setColorFilter(getResources().getColor(R.color.primary), PorterDuff.Mode.SRC_ATOP);
mToolbar.setTitle(getString(R.string.LocationList));
hideToolBarShadowForLollipop(mToolbar, mToolbarShadow);
setSupportActionBar(mToolbar);
mGeoAPIPropertiesMap = new GeoAPIPropertiesMap();
ActionBar mActionBar = getSupportActionBar();
if (mActionBar != null) {
// Showing Back Arrow <-
mActionBar.setDisplayHomeAsUpEnabled(true);
}
mLocationListRecyclerView = (RecyclerView) findViewById(R.id.location_list_recycler_view);
mRetryBtn = findViewById(R.id.location_list_error_view);
viewUtils = new ViewUtils(this);
viewUtils.showProgress(mLocationListRecyclerView, mProgressView, true);
mLayoutManager = new LinearLayoutManager(this);
mLocationListRecyclerView.setLayoutManager(mLayoutManager);
mLocationAdapter = new LocationAdapter();
mLocationAdapter.setOnItemClickListener(this);
mMaePaySohApiWrapper = MaePaySoh.getMaePaySohWrapper();
mGeoAPIHelper = mMaePaySohApiWrapper.getGeoApiHelper();
mEndlessRecyclerViewAdapter =
new EndlessRecyclerViewAdapter(LocationListActivity.this, mLocationAdapter,
new EndlessRecyclerViewAdapter.RequestToLoadMoreListener() {
@Override public void onLoadMoreRequested() {
loadLocationData();
}
});
mLocationListRecyclerView.setAdapter(mEndlessRecyclerViewAdapter);
if (InternetUtils.isNetworkAvailable(this)) {
loadLocationData();
} else {
}
mRetryBtn.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
loadLocationData();
}
});
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
private void loadLocationData() {
new LocationDownloadAsync().execute(mCurrentPage);
}
@Override public void onItemClick(View view, int position) {
Intent locationDetailIntent =
new Intent(LocationListActivity.this, LocationDetailActivity.class);
locationDetailIntent.putExtra("GEO_OBJECT_ID",
mGeos.get(position).getProperties().getDTPCODE());
startActivity(locationDetailIntent);
}
class LocationDownloadAsync extends AsyncTask<Integer, Void, List<Geo>> {
@Override protected List<Geo> doInBackground(Integer... integers) {
mCurrentPage = integers[0];
mGeoAPIPropertiesMap.put(GeoAPIProperties.PER_PAGE, 15);
mGeoAPIPropertiesMap.put(GeoAPIProperties.NO_GEO, true);
mGeoAPIPropertiesMap.put(GeoAPIProperties.FIRST_PAGE, mCurrentPage);
List<Geo> geos = mGeoAPIHelper.getLocationList(mGeoAPIPropertiesMap);
return geos;
}
@Override protected void onPostExecute(List<Geo> geos) {
super.onPostExecute(geos);
viewUtils.showProgress(mLocationListRecyclerView, mProgressView, false);
if (geos.size() > 0) {
if (mCurrentPage == 1) {
mGeos = geos;
} else {
mGeos.addAll(geos);
}
mLocationAdapter.setGeos(geos);
mCurrentPage++;
mEndlessRecyclerViewAdapter.onDataReady(true);
} else {
mEndlessRecyclerViewAdapter.onDataReady(false);
}
}
}
}