TubeLab-App-Android/app/src/main/java/app/fedilab/fedilabtube/SepiaSearchActivity.java

386 lines
15 KiB
Java
Raw Normal View History

2020-10-09 10:19:46 +02:00
package app.fedilab.fedilabtube;
/* Copyright 2020 Thomas Schneider
*
* This file is a part of TubeLab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */
2022-05-04 09:43:54 +02:00
import static app.fedilab.fedilabtube.PeertubeActivity.hideKeyboard;
import static app.fedilab.fedilabtube.helper.Helper.peertubeInformation;
2020-10-09 18:22:05 +02:00
import android.content.Context;
import android.content.SharedPreferences;
2020-10-09 10:19:46 +02:00
import android.os.Bundle;
import android.view.MenuItem;
2020-10-09 14:54:01 +02:00
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
2020-10-09 10:19:46 +02:00
import androidx.appcompat.app.AppCompatActivity;
2020-10-10 09:25:00 +02:00
import androidx.fragment.app.Fragment;
2020-10-09 18:22:05 +02:00
import androidx.fragment.app.FragmentTransaction;
import com.mancj.materialsearchbar.MaterialSearchBar;
2020-10-09 10:19:46 +02:00
2020-10-09 14:54:01 +02:00
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import app.fedilab.fedilabtube.client.entities.SepiaSearch;
2020-11-27 18:56:37 +01:00
import app.fedilab.fedilabtube.databinding.ActivitySepiaSearchBinding;
2020-10-09 18:22:05 +02:00
import app.fedilab.fedilabtube.fragment.DisplaySepiaSearchFragment;
2020-10-09 10:19:46 +02:00
import app.fedilab.fedilabtube.helper.Helper;
public class SepiaSearchActivity extends AppCompatActivity {
2020-10-09 18:22:05 +02:00
private SepiaSearch sepiaSearchVideo, sepiaSearchChannel;
2020-11-27 18:56:37 +01:00
private ActivitySepiaSearchBinding binding;
2020-10-09 14:54:01 +02:00
2020-10-09 10:19:46 +02:00
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
2020-11-27 18:56:37 +01:00
binding = ActivitySepiaSearchBinding.inflate(getLayoutInflater());
View rootView = binding.getRoot();
setContentView(rootView);
2020-10-09 10:19:46 +02:00
2020-10-09 14:54:01 +02:00
sepiaSearchVideo = new SepiaSearch();
sepiaSearchChannel = new SepiaSearch();
2020-10-09 18:22:05 +02:00
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
sepiaSearchVideo.setCount(String.valueOf(sharedpreferences.getInt(Helper.SET_VIDEOS_PER_PAGE, Helper.VIDEOS_PER_PAGE)));
sepiaSearchVideo.setDurationMin(0);
sepiaSearchVideo.setDurationMax(9999999);
2020-10-10 09:37:44 +02:00
sepiaSearchVideo.setStart("0");
2020-10-09 18:22:05 +02:00
sepiaSearchVideo.setSort("-match");
2020-10-09 10:19:46 +02:00
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
2020-11-27 18:56:37 +01:00
binding.filter.setOnClickListener(view -> {
if (binding.filterElements.getVisibility() == View.VISIBLE) {
binding.filterElements.setVisibility(View.GONE);
2020-10-17 18:50:20 +02:00
} else {
2020-11-27 18:56:37 +01:00
binding.filterElements.setVisibility(View.VISIBLE);
2020-10-09 14:54:01 +02:00
}
});
2020-11-27 18:56:37 +01:00
binding.sepiaElementNsfw.setOnCheckedChangeListener((group, checkedId) -> sepiaSearchVideo.setNsfw(checkedId != R.id.sepia_element_nsfw_no));
binding.radioDate.setOnCheckedChangeListener((group, checkedId) -> {
2020-10-14 10:31:02 +02:00
if (checkedId == R.id.sepia_element_published_date_today) {
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
sepiaSearchVideo.setStartDate(cal.getTime());
} else if (checkedId == R.id.sepia_element_published_date_last_7_days) {
Calendar cal;
cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -7);
sepiaSearchVideo.setStartDate(cal.getTime());
} else if (checkedId == R.id.sepia_element_published_date_last_30_days) {
Calendar cal;
cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -30);
sepiaSearchVideo.setStartDate(cal.getTime());
} else if (checkedId == R.id.sepia_element_published_date_last_365_days) {
Calendar cal;
cal = GregorianCalendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -365);
sepiaSearchVideo.setStartDate(cal.getTime());
} else {
sepiaSearchVideo.setStartDate(null);
2020-10-09 14:54:01 +02:00
}
});
2020-11-27 18:56:37 +01:00
binding.duration.setOnCheckedChangeListener((group, checkedId) -> {
2020-10-14 10:31:02 +02:00
if (checkedId == R.id.sepia_element_duration_short) {
sepiaSearchVideo.setDurationMin(0);
sepiaSearchVideo.setDurationMax(240);
} else if (checkedId == R.id.sepia_element_duration_medium) {
sepiaSearchVideo.setDurationMin(240);
sepiaSearchVideo.setDurationMax(600);
} else if (checkedId == R.id.sepia_element_duration_long) {
sepiaSearchVideo.setDurationMin(600);
sepiaSearchVideo.setDurationMax(999999999);
} else {
sepiaSearchVideo.setDurationMin(0);
sepiaSearchVideo.setDurationMax(999999999);
2020-10-09 14:54:01 +02:00
}
});
ArrayAdapter<String> adapterSortBy = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.sort_by_array));
2020-11-27 18:56:37 +01:00
binding.sortBy.setAdapter(adapterSortBy);
binding.sortBy.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
2020-10-09 14:54:01 +02:00
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String orderby, channelOrderBy;
2020-10-17 18:50:20 +02:00
switch (position) {
2020-10-09 14:54:01 +02:00
case 1:
orderby = "-publishedAt";
channelOrderBy = "-createdAt";
break;
case 2:
orderby = "publishedAt";
channelOrderBy = "createdAt";
break;
default:
orderby = "-match";
channelOrderBy = null;
}
sepiaSearchVideo.setSort(orderby);
sepiaSearchChannel.setSort(channelOrderBy);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
LinkedHashMap<Integer, String> categories = new LinkedHashMap<>(peertubeInformation.getCategories());
LinkedHashMap<Integer, String> licences = new LinkedHashMap<>(peertubeInformation.getLicences());
LinkedHashMap<String, String> languages = new LinkedHashMap<>(peertubeInformation.getLanguages());
2020-10-17 10:52:56 +02:00
LinkedHashMap<String, String> translations = null;
2020-10-17 18:50:20 +02:00
if (peertubeInformation.getTranslations() != null) {
2020-10-17 10:52:56 +02:00
translations = new LinkedHashMap<>(peertubeInformation.getTranslations());
}
2020-10-09 14:54:01 +02:00
//Populate catgories
2020-10-17 18:50:20 +02:00
String[] categoriesA = new String[categories.size() + 1];
2020-10-09 14:54:01 +02:00
categoriesA[0] = getString(R.string.display_all_categories);
Iterator<Map.Entry<Integer, String>> it = categories.entrySet().iterator();
int i = 1;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
2020-10-17 10:52:56 +02:00
if (translations == null || translations.size() == 0 || !translations.containsKey(pair.getValue()))
2020-10-09 14:54:01 +02:00
categoriesA[i] = pair.getValue();
else
categoriesA[i] = translations.get(pair.getValue());
it.remove();
i++;
}
ArrayAdapter<String> adapterCatgories = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, categoriesA);
2020-11-27 18:56:37 +01:00
binding.sepiaElementCategory.setAdapter(adapterCatgories);
2020-10-09 14:54:01 +02:00
//Populate licenses
2020-10-17 18:50:20 +02:00
String[] licensesA = new String[licences.size() + 1];
2020-10-09 14:54:01 +02:00
licensesA[0] = getString(R.string.display_all_licenses);
it = licences.entrySet().iterator();
i = 1;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
2020-10-17 10:52:56 +02:00
if (translations == null || translations.size() == 0 || !translations.containsKey(pair.getValue()))
2020-10-09 14:54:01 +02:00
licensesA[i] = pair.getValue();
else
licensesA[i] = translations.get(pair.getValue());
it.remove();
i++;
}
ArrayAdapter<String> adapterLicenses = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, licensesA);
2020-11-27 18:56:37 +01:00
binding.sepiaElementLicense.setAdapter(adapterLicenses);
2020-10-09 14:54:01 +02:00
//Populate languages
2020-10-17 18:50:20 +02:00
String[] languagesA = new String[languages.size() + 1];
2020-10-09 14:54:01 +02:00
languagesA[0] = getString(R.string.display_all_languages);
Iterator<Map.Entry<String, String>> itl = languages.entrySet().iterator();
i = 1;
while (itl.hasNext()) {
Map.Entry<String, String> pair = itl.next();
2020-10-17 10:52:56 +02:00
if (translations == null || translations.size() == 0 || !translations.containsKey(pair.getValue()))
2020-10-09 14:54:01 +02:00
languagesA[i] = pair.getValue();
else
languagesA[i] = translations.get(pair.getValue());
itl.remove();
i++;
}
ArrayAdapter<String> adapterLanguages = new ArrayAdapter<>(SepiaSearchActivity.this,
android.R.layout.simple_spinner_dropdown_item, languagesA);
2020-11-27 18:56:37 +01:00
binding.sepiaElementLanguage.setAdapter(adapterLanguages);
2020-10-09 14:54:01 +02:00
2020-11-27 18:56:37 +01:00
binding.sepiaElementLicense.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
2020-10-09 14:54:01 +02:00
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateLicensePosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//Manage categories
2020-11-27 18:56:37 +01:00
binding.sepiaElementCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
2020-10-09 14:54:01 +02:00
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateCategoryPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
2020-10-09 10:19:46 +02:00
2020-10-09 14:54:01 +02:00
//Manage languages
2020-11-27 18:56:37 +01:00
binding.sepiaElementLanguage.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
2020-10-09 14:54:01 +02:00
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
updateLanguagesPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
2020-11-27 18:56:37 +01:00
binding.searchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
2020-10-09 18:22:05 +02:00
@Override
public void onSearchStateChanged(boolean enabled) {
2020-10-09 14:54:01 +02:00
}
2020-10-09 18:22:05 +02:00
@Override
public void onSearchConfirmed(CharSequence text) {
makeSearch();
}
@Override
public void onButtonClicked(int buttonCode) {
makeSearch();
2020-10-09 14:54:01 +02:00
}
});
2020-11-27 18:56:37 +01:00
binding.applyFilter.setOnClickListener(v -> makeSearch());
2020-10-09 18:37:54 +02:00
2020-11-27 18:56:37 +01:00
binding.searchBar.openSearch();
2020-10-09 10:19:46 +02:00
}
2020-10-17 18:50:20 +02:00
private void makeSearch() {
2020-10-09 18:37:54 +02:00
hideKeyboard(SepiaSearchActivity.this);
2020-10-10 09:37:44 +02:00
sepiaSearchVideo.setStart("0");
2020-11-27 18:56:37 +01:00
if (binding.sepiaElementOneOfTags.getTags().size() > 0) {
sepiaSearchVideo.setTagsOneOf(binding.sepiaElementOneOfTags.getTags());
2020-10-17 18:50:20 +02:00
} else {
2020-10-09 18:22:05 +02:00
sepiaSearchVideo.setTagsOneOf(null);
}
2020-11-27 18:56:37 +01:00
if (binding.sepiaElementAllOfTags.getTags().size() > 0) {
sepiaSearchVideo.setTagsAllOf(binding.sepiaElementAllOfTags.getTags());
2020-10-17 18:50:20 +02:00
} else {
2020-10-09 18:22:05 +02:00
sepiaSearchVideo.setTagsAllOf(null);
}
2020-10-10 09:25:00 +02:00
Fragment fragment = getSupportFragmentManager().findFragmentByTag("SEPIA_SEARCH");
2020-10-17 18:50:20 +02:00
if (fragment != null)
2020-10-10 09:25:00 +02:00
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
2020-11-27 18:56:37 +01:00
binding.filterElements.setVisibility(View.GONE);
sepiaSearchVideo.setSearch(binding.searchBar.getText());
2020-10-09 18:22:05 +02:00
DisplaySepiaSearchFragment displaySepiaSearchFragment = new DisplaySepiaSearchFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("sepiaSearchVideo", sepiaSearchVideo);
displaySepiaSearchFragment.setArguments(bundle);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
2020-10-17 18:50:20 +02:00
ft.add(R.id.container, displaySepiaSearchFragment, "SEPIA_SEARCH").commit();
2020-10-09 18:22:05 +02:00
}
2020-10-09 10:19:46 +02:00
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
2020-10-09 14:54:01 +02:00
private void updateLanguagesPosition(int position) {
LinkedHashMap<String, String> languagesCheck = new LinkedHashMap<>(peertubeInformation.getLanguages());
Iterator<Map.Entry<String, String>> it = languagesCheck.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<String, String> pair = it.next();
if (i == position && position > 0) {
List<String> languages = new ArrayList<>();
languages.add(pair.getKey());
sepiaSearchVideo.setBoostLanguages(languages);
break;
2020-10-17 18:50:20 +02:00
} else {
2020-10-09 14:54:01 +02:00
sepiaSearchVideo.setBoostLanguages(null);
}
it.remove();
i++;
}
}
private void updateCategoryPosition(int position) {
LinkedHashMap<Integer, String> categoriesCheck = new LinkedHashMap<>(peertubeInformation.getCategories());
Iterator<Map.Entry<Integer, String>> it = categoriesCheck.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
2020-10-17 18:50:20 +02:00
if (i == position && position > 0) {
2020-10-09 14:54:01 +02:00
List<Integer> categories = new ArrayList<>();
categories.add(pair.getKey());
sepiaSearchVideo.setCategoryOneOf(categories);
break;
2020-10-17 18:50:20 +02:00
} else {
2020-10-09 14:54:01 +02:00
sepiaSearchVideo.setCategoryOneOf(null);
}
it.remove();
i++;
}
}
private void updateLicensePosition(int position) {
LinkedHashMap<Integer, String> licensesCheck = new LinkedHashMap<>(peertubeInformation.getLicences());
Iterator<Map.Entry<Integer, String>> it = licensesCheck.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<Integer, String> pair = it.next();
if (i == position && position > 0) {
List<Integer> licenses = new ArrayList<>();
licenses.add(pair.getKey());
sepiaSearchVideo.setLicenceOneOf(licenses);
break;
2020-10-17 18:50:20 +02:00
} else {
2020-10-09 14:54:01 +02:00
sepiaSearchVideo.setLicenceOneOf(null);
}
it.remove();
i++;
}
}
2020-10-09 10:19:46 +02:00
}