From 2cd076bfb8cd4a6643fbf595d11fca69c301ebe6 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 15 Nov 2020 11:27:38 +0100 Subject: [PATCH] Comment issue #46 - Allow to delete history --- app/src/acad/res/values/strings.xml | 2 + app/src/full/res/values/strings.xml | 3 ++ .../fedilabtube/VideosTimelineActivity.java | 43 +++++++++++++++++++ .../fedilabtube/client/PeertubeService.java | 4 ++ .../client/RetrofitPeertubeAPI.java | 23 ++++++++++ .../fedilabtube/viewmodel/TimelineVM.java | 22 ++++++++++ app/src/main/res/menu/main_history.xml | 9 ++++ 7 files changed, 106 insertions(+) create mode 100644 app/src/main/res/menu/main_history.xml diff --git a/app/src/acad/res/values/strings.xml b/app/src/acad/res/values/strings.xml index a55fb56..4d22804 100644 --- a/app/src/acad/res/values/strings.xml +++ b/app/src/acad/res/values/strings.xml @@ -21,6 +21,8 @@ Exporter Importer + Supprimer l\'historique de vidéos + Êtes vous sur de vouloir supprimer toutes les vidéos de votre historique ? Exportation réussie ! Cliquer ici pour envoyer l\'exportation par mèl. Nouvelle liste de lecture diff --git a/app/src/full/res/values/strings.xml b/app/src/full/res/values/strings.xml index ec5dc08..5ffe68b 100644 --- a/app/src/full/res/values/strings.xml +++ b/app/src/full/res/values/strings.xml @@ -284,6 +284,9 @@ + Delete videos history + Are you sure you want to delete all your videos history? + Export Import Successful export! diff --git a/app/src/main/java/app/fedilab/fedilabtube/VideosTimelineActivity.java b/app/src/main/java/app/fedilab/fedilabtube/VideosTimelineActivity.java index e6768f5..211b336 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/VideosTimelineActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/VideosTimelineActivity.java @@ -14,12 +14,17 @@ package app.fedilab.fedilabtube; * You should have received a copy of the GNU General Public License along with TubeLab; if not, * see . */ +import android.app.AlertDialog; import android.os.Bundle; +import android.view.Menu; import android.view.MenuItem; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentTransaction; +import androidx.lifecycle.ViewModelProvider; + +import org.jetbrains.annotations.NotNull; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -27,6 +32,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; +import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.databinding.ActivitySearchResultBinding; import app.fedilab.fedilabtube.fragment.DisplayVideosFragment; import app.fedilab.fedilabtube.helper.Helper; @@ -114,14 +120,51 @@ public class VideosTimelineActivity extends AppCompatActivity { } } + @Override + public boolean onCreateOptionsMenu(@NotNull Menu menu) { + if (type == HISTORY) { + getMenuInflater().inflate(R.menu.main_history, menu); + return true; + } else { + return super.onCreateOptionsMenu(menu); + } + + } + @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; + } else if (item.getItemId() == R.id.action_delete) { + AlertDialog.Builder builder = new AlertDialog.Builder(VideosTimelineActivity.this); + builder.setTitle(R.string.delete_history); + builder.setMessage(R.string.delete_history_confirm); + builder.setIcon(android.R.drawable.ic_dialog_alert) + .setPositiveButton(R.string.delete, (dialog, which) -> { + TimelineVM viewModelFeeds = new ViewModelProvider(VideosTimelineActivity.this).get(TimelineVM.class); + viewModelFeeds.deleterHistory().observe(VideosTimelineActivity.this, this::manageVIewVideos); + + dialog.dismiss(); + }) + .setNegativeButton(R.string.no, (dialog, which) -> dialog.dismiss()) + .show(); + return true; } return super.onOptionsItemSelected(item); } + private void manageVIewVideos(APIResponse apiResponse) { + if (type == HISTORY) { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + displayVideosFragment = new DisplayVideosFragment(); + Bundle bundle = new Bundle(); + bundle.putSerializable(Helper.TIMELINE_TYPE, HISTORY); + displayVideosFragment.setArguments(bundle); + ft.replace(R.id.container, displayVideosFragment); + ft.addToBackStack(null); + ft.commit(); + } + } } diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java b/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java index 711800f..7592ad8 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java @@ -183,6 +183,10 @@ public interface PeertubeService { @Query("endDate") String endDate ); + @POST("users/me/history/videos/remove") + Call deleteHistory( + @Header("Authorization") String credentials); + //Search @GET("search/videos") Call searchVideos( diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java b/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java index 308dc53..1e4f41b 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java @@ -347,6 +347,29 @@ public class RetrofitPeertubeAPI { return apiResponse; } + + public APIResponse deleteHistory() { + APIResponse apiResponse = new APIResponse(); + PeertubeService peertubeService = init(); + Call stringCall = peertubeService.deleteHistory(getToken()); + if (stringCall != null) { + try { + Response response = stringCall.execute(); + if (response.isSuccessful() && response.body() != null) { + apiResponse.setActionReturn(response.body()); + } else { + setError(apiResponse, response.code(), response.errorBody()); + } + } catch (IOException e) { + Error error = new Error(); + error.setError(_context.getString(R.string.toast_error)); + apiResponse.setError(error); + e.printStackTrace(); + } + } + return apiResponse; + } + public APIResponse getHistory(String max_id, String startDate, String endDate) { APIResponse apiResponse = new APIResponse(); PeertubeService peertubeService = init(); diff --git a/app/src/main/java/app/fedilab/fedilabtube/viewmodel/TimelineVM.java b/app/src/main/java/app/fedilab/fedilabtube/viewmodel/TimelineVM.java index fd702cc..1606d66 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/viewmodel/TimelineVM.java +++ b/app/src/main/java/app/fedilab/fedilabtube/viewmodel/TimelineVM.java @@ -64,6 +64,12 @@ public class TimelineVM extends AndroidViewModel { return apiResponseMutableLiveData; } + public LiveData deleterHistory() { + apiResponseMutableLiveData = new MutableLiveData<>(); + deleteHistory(); + return apiResponseMutableLiveData; + } + public LiveData getVideo(String instance, String videoId, boolean isMyVideo) { apiResponseMutableLiveData = new MutableLiveData<>(); getSingle(instance, videoId, isMyVideo); @@ -212,6 +218,22 @@ public class TimelineVM extends AndroidViewModel { }).start(); } + private void deleteHistory() { + + Context _mContext = getApplication().getApplicationContext(); + new Thread(() -> { + try { + RetrofitPeertubeAPI retrofitPeertubeAPI = new RetrofitPeertubeAPI(_mContext); + APIResponse apiResponse = retrofitPeertubeAPI.deleteHistory(); + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> apiResponseMutableLiveData.setValue(apiResponse); + mainHandler.post(myRunnable); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + private void loadOverviewVideos(String page) { Context _mContext = getApplication().getApplicationContext(); diff --git a/app/src/main/res/menu/main_history.xml b/app/src/main/res/menu/main_history.xml new file mode 100644 index 0000000..0262912 --- /dev/null +++ b/app/src/main/res/menu/main_history.xml @@ -0,0 +1,9 @@ + + + +