Delete Image Permanently from Trashbin in Phimpme App
In the Phimpme Android application, users can perform various operations on the images including renaming an image, sharing images, deleting images from the storage etc. However, with the implementation of the Trash Bin feature in the app, the user is now provided with the option to restore back the deleted images. Whenever the delete operation is performed, the selected images are moved to the Trash Bin and the user has the option to either delete the photos permanently or restoring back the deleted photos by navigating to the Trash bin section. So in this post, I’d be discussing the implementation of permanently deleting image/images from the Trashbin.
Step 1
Firstly, we need to add permanent delete option in the popup menu provided in the itemview in the TrashView section. Every item in the Trashbin section displays a popup menu with two options-restore and delete permanently. The permanent delete option has been implemented in the itemview by adding the following lines of code.
<?xml version=“1.0” encoding=“utf-8”?> <menu xmlns:android=“http://schemas.android.com/apk/res/android” xmlns:app=“http://schemas.android.com/apk/res-auto”> <item android:id=“@+id/delete_permanently” android:title=“@string/delete_permanently” app:showAsAction=“never” /> </menu> |
Step 2
Now when the user opts to permanently delete any photo from the bin, a function deletePermanent would be invoked passing-in the trashbin object corresponding to the selected item as the parameter. Inside the deletePermanent method, a check is performed to determine whether the corresponding image file exists or not using the .exists method of the File class and if the result is true the file is deleted permanently using the .delete method of the File class. The method deletePermanent returns a boolean value depending on whether the image file is deleted permanently from the storage or not. The code snippets used to implement the deletePermanent method is provided below.
private boolean deletePermanent(TrashBinRealmModel trashBinRealmModel){ boolean succ = false; String path = trashBinRealmModel.getTrashbinpath(); File file = new File(Environment.getExternalStorageDirectory() + “/” + “.nomedia”); //File file = new File(Environment.getExternalStorageDirectory() + “/” + “TrashBin”); if(file.exists()){ File file1 = new File(path); if(file1.exists()){ succ = file1.delete(); } } return succ; } |
Step 3
The function deletePermanent used implemented in the previous step returns a boolean value which will be used in this step. So if the deletePermanent method returns true indicating that the image has been deleted from the trashbin, first a method deleteFromRealm is invoked passing-in the path of the image in the Trashbin to delete the corresponding image’s record from the realm database. Thereafter, that particular trashbin item is removed from the ArrayList<TrashbinRealmModel> populating the TrashBin adapter to display the items in the TrashBin Activity and the adapter is notified of this change by the use of NotifyItemRemoved and NotifyItemRangeChanged methods of the RecyclerView adapter class passing-in the position of the item as parameter to the former and position along with the size of the updated list as parameters to the latter function. After the adapter is updated about the change in the dataset, the adapter re-populates the recyclerview thus displaying the remaining items in the trashbin section. The code snippets implementing the above-mentioned operations are provided below.
if(deletePermanent(trashBinRealmModel)){ deleteFromRealm(trashItemsList.get(position).getTrashbinpath()); trashItemsList.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, trashItemsList.size()); } |
private void deleteFromRealm(final String path){ Realm realm = Realm.getDefaultInstance(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { RealmResults<TrashBinRealmModel> trashBinRealmModels = realm.where(TrashBinRealmModel.class).equalTo (“trashbinpath”, path).findAll(); trashBinRealmModels.deleteAllFromRealm(); } }); } |
This is how we have implemented the functionality to permanently delete an image from the Trashbin section in the Phimpme Android application. To get the full source code, please refer to the Phimpme Android Github repository listed in the resource section below.
Resources
- Android Developer documentation –https://developer.android.com/reference/java/io/File
- Github-Phimpme Android Repository – https://github.com/fossasia/phimpme-android/
- Realm database operations Android – https://www.androidhive.info/2016/05/android-working-with-realm-database-replacing-sqlite-core-data/