Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.yusriyusron.favoriteapp.view;
- import android.content.Context;
- import android.database.ContentObserver;
- import android.database.Cursor;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.HandlerThread;
- import android.view.View;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.recyclerview.widget.LinearLayoutManager;
- import androidx.recyclerview.widget.RecyclerView;
- import com.yusriyusron.favoriteapp.R;
- import com.yusriyusron.favoriteapp.controller.FavoriteAdapter;
- import com.yusriyusron.favoriteapp.model.Movie;
- import com.yusriyusron.favoriteapp.model.database.DbHelper;
- import com.yusriyusron.favoriteapp.utils.MappingHelper;
- import java.lang.ref.WeakReference;
- import java.util.ArrayList;
- public class MainActivity extends AppCompatActivity implements LoadMovieCallback{
- public static final String TAG_ID = "id";
- public static final String TAG_POSTER = "poster";
- public static final String TAG_TITLE = "title";
- public static final String TAG_OVERVIEW = "overview";
- private static final String EXTRA_STATE = "EXTRA_STATE";
- private RecyclerView recyclerView;
- private ProgressBar progressBar;
- private TextView textViewNotAvailable;
- private FavoriteAdapter adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- recyclerView = findViewById(R.id.recycler_view);
- textViewNotAvailable = findViewById(R.id.text_view_not_available);
- progressBar = findViewById(R.id.progress_bar);
- adapter = new FavoriteAdapter(this);
- HandlerThread handlerThread = new HandlerThread("Data Observer");
- handlerThread.start();
- Handler handler = new Handler(handlerThread.getLooper());
- DataObserver dataObserver = new DataObserver(handler, this);
- getContentResolver().registerContentObserver(DbHelper.CONTENT_URI, true, dataObserver);
- if (savedInstanceState == null) {
- new LoadMovieAsync(this, this).execute();
- } else {
- progressBar.setVisibility(View.GONE);
- ArrayList<Movie> list = savedInstanceState.getParcelableArrayList(EXTRA_STATE);
- if (list != null) {
- adapter.setListMovie(list);
- }
- }
- }
- @Override
- public void postExecute(Cursor cursor) {
- ArrayList<Movie> listMovie = MappingHelper.mapCursorMovieToArrayList(cursor);
- if (listMovie != null) {
- if (listMovie.size() > 0) {
- adapter.setListMovie(listMovie);
- textViewNotAvailable.setVisibility(View.VISIBLE);
- progressBar.setVisibility(View.GONE);
- recyclerView.setAdapter(adapter);
- recyclerView.setLayoutManager(new LinearLayoutManager(this));
- textViewNotAvailable.setText(adapter.getListMovie().get(0).getTitleMovie());
- } else {
- textViewNotAvailable.setVisibility(View.VISIBLE);
- progressBar.setVisibility(View.GONE);
- }
- } else {
- textViewNotAvailable.setVisibility(View.VISIBLE);
- progressBar.setVisibility(View.GONE);
- }
- }
- private static class LoadMovieAsync extends AsyncTask<Void, Void, Cursor> {
- private final WeakReference<Context> weakContext;
- private final WeakReference<LoadMovieCallback> weakCallback;
- private LoadMovieAsync(Context context, LoadMovieCallback callback) {
- weakContext = new WeakReference<>(context);
- weakCallback = new WeakReference<>(callback);
- }
- @Override
- protected Cursor doInBackground(Void... voids) {
- Context context = weakContext.get();
- return context.getContentResolver().query(DbHelper.CONTENT_URI, null, null, null, null);
- }
- @Override
- protected void onPostExecute(Cursor cursor) {
- super.onPostExecute(cursor);
- weakCallback.get().postExecute(cursor);
- }
- }
- public static class DataObserver extends ContentObserver {
- final Context context;
- DataObserver(Handler handler, Context context) {
- super(handler);
- this.context = context;
- }
- @Override
- public void onChange(boolean selfChange) {
- super.onChange(selfChange);
- }
- }
- }
- interface LoadMovieCallback {
- void postExecute(Cursor cursor);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement