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 @@
+
+