Skip to content

Instantly share code, notes, and snippets.

@eltonjhony
Created March 21, 2018 16:35
Show Gist options
  • Save eltonjhony/02084f60a61a5e118d75be7d81247571 to your computer and use it in GitHub Desktop.
Save eltonjhony/02084f60a61a5e118d75be7d81247571 to your computer and use it in GitHub Desktop.
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
private static final String API_KEY = "PUT YOUR KEY HERE"; //put here your own api key
private static final String LANGUAGE = "en-US";
private static final String PAGE = "1";
private List<MoviesResult> moviesResults = new ArrayList<>();
private RestAdapter restAdapter;
private Toolbar toolbar;
private RecyclerView recyclerView;
private MoviesAdapter moviesAdapter;
private ProgressBar progressBar;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
moviesAdapter = new MoviesAdapter(getApplicationContext(), moviesResults);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setVisibility(View.VISIBLE);
recyclerView = (RecyclerView) findViewById(R.id.rv_movies);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
recyclerView.setAdapter(moviesAdapter);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
moviesResults.clear();
fetchData();
moviesAdapter.notifyDataSetChanged();
}
});
}
@Override
protected void onResume() {
super.onResume();
restAdapter = new RestAdapter();
fetchData();
}
private void fetchData() {
showMoviesDataView();
// get shared preference value
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String orderBy = sharedPrefs.getString(
getString(R.string.settings_order_by_key),
getString(R.string.settings_order_by_default));
if (orderBy.equals(getString(R.string.settings_order_by_most_popular))) {
restAdapter.getEndpoint().callPopular(API_KEY, LANGUAGE, PAGE).enqueue(new Callback<Movies>() {
@Override
public void onResponse(Call<Movies> call, Response<Movies> response) {
progressBar.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
if (response.isSuccessful()) {
moviesResults.clear();
moviesResults.addAll(response.body().getResults());
moviesAdapter.notifyDataSetChanged();
}
}
@Override
public void onFailure(Call<Movies> call, Throwable t) {
progressBar.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(MainActivity.this, "Load data error!", Toast.LENGTH_SHORT).show();
Log.e("MainActivity", "LOAD ERROR : " + t.getMessage());
}
});
} else if (orderBy.equals(getString(R.string.settings_order_by_top_rated))) {
restAdapter.getEndpoint().callTopRated(API_KEY, LANGUAGE, PAGE).enqueue(new Callback<Movies>() {
@Override
public void onResponse(Call<Movies> call, Response<Movies> response) {
progressBar.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
if (response.isSuccessful()) {
moviesResults.clear();
moviesResults.addAll(response.body().getResults());
moviesAdapter.notifyDataSetChanged();
}
}
@Override
public void onFailure(Call<Movies> call, Throwable t) {
progressBar.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(MainActivity.this, "Load data error!", Toast.LENGTH_SHORT).show();
Log.e("MainActivity", "LOAD ERROR : " + t.getMessage());
}
});
}
}
private void showMoviesDataView() {
// movies are visible, error message is hidden
recyclerView.setVisibility(View.VISIBLE);
}
private boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
try {
NetworkInfo netInfo = cm != null ? cm.getActiveNetworkInfo() : null;
return netInfo != null && netInfo.isConnectedOrConnecting();
} catch (NullPointerException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.settings) {
// go to settings
Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(intent);
return true;
} else if (item.getItemId() == R.id.refresh) {
fetchData();
return true;
}
return super.onOptionsItemSelected(item);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment