package br.com.nglauber.livrosfirebase; import android.content.Intent; import android.databinding.DataBindingUtil; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.firebase.ui.database.FirebaseRecyclerAdapter; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import br.com.nglauber.livrosfirebase.adapter.BookViewHolder; import br.com.nglauber.livrosfirebase.adapter.BoookAdapter; import br.com.nglauber.livrosfirebase.databinding.ActivityMainBinding; import br.com.nglauber.livrosfirebase.model.Book; import br.com.nglauber.livrosfirebase.utils.Constants; import br.com.nglauber.livrosfirebase.utils.SimpleItemTouch; public class MainActivity extends BaseActivity { private DatabaseReference mBooksNodeRef; private StorageReference mStorage; private FirebaseRecyclerAdapter<Book, BookViewHolder> mAdapter; private ActivityMainBinding mBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_signout){ FirebaseAuth.getInstance().signOut(); } return super.onOptionsItemSelected(item); } @Override protected void init() { FirebaseDatabase mDatabase = FirebaseDatabase.getInstance(); mBooksNodeRef = mDatabase .getReference(Constants.BOOK_REFERENCE) .child(getAuth().getCurrentUser().getUid()); FirebaseStorage storage = FirebaseStorage.getInstance(); mStorage = storage.getReferenceFromUrl(Constants.STORAGE_REFERENCE_URL); mBinding.recyclerView.setHasFixedSize(true); mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new BoookAdapter(mBooksNodeRef, new BoookAdapter.BookClickListener() { @Override public void onBookClicked(Book book) { Intent it = new Intent(MainActivity.this, DetailViewActivity.class); it.putExtra(DetailViewActivity.EXTRA_BOOK, book); startActivity(it); } }); mBinding.recyclerView.setAdapter(mAdapter); attachSwipeToRecyclerView(); } public void clickNewBook(View view) { startActivity(new Intent(this, DetailEditActivity.class)); } private void attachSwipeToRecyclerView() { ItemTouchHelper.SimpleCallback swipe = new SimpleItemTouch(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { @Override public void onSwiped( RecyclerView.ViewHolder viewHolder, int swipeDir) { final int position = viewHolder.getAdapterPosition(); deleteBookFromPosition(position); } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(swipe); itemTouchHelper.attachToRecyclerView(mBinding.recyclerView); } private void deleteBookFromPosition(int position) { final String bookId = mAdapter.getRef(position).getKey(); Book book = mAdapter.getItem(position); if (book.getCoverUrl() != null){ Uri uri = Uri.parse(book.getCoverUrl()); String fileName = uri.getLastPathSegment(); StorageReference imageCapa = mStorage.child(fileName); imageCapa.delete().addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { mBooksNodeRef.child(bookId).removeValue(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Uh-oh, an error occurred! } }); } else { mBooksNodeRef.child(bookId).removeValue(); } } }