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 . */ import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.RadioGroup; import android.widget.Spinner; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.FragmentTransaction; import com.mancj.materialsearchbar.MaterialSearchBar; 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; import app.fedilab.fedilabtube.fragment.DisplaySepiaSearchFragment; import app.fedilab.fedilabtube.helper.Helper; import mabbas007.tagsedittext.TagsEditText; import static app.fedilab.fedilabtube.MainActivity.peertubeInformation; public class SepiaSearchActivity extends AppCompatActivity { private SepiaSearch sepiaSearchVideo, sepiaSearchChannel; private TagsEditText sepia_element_all_of_tags, sepia_element_one_of_tags; private MaterialSearchBar searchBar; private ConstraintLayout filter_elements; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sepia_search); sepiaSearchVideo = new SepiaSearch(); sepiaSearchChannel = new SepiaSearch(); 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); sepiaSearchVideo.setSort("-match"); if (getSupportActionBar() != null) getSupportActionBar().setDisplayHomeAsUpEnabled(true); Button filter = findViewById(R.id.filter); filter_elements = findViewById(R.id.filter_elements); filter.setOnClickListener(view -> { if( filter_elements.getVisibility() == View.VISIBLE) { filter_elements.setVisibility(View.GONE); }else{ filter_elements.setVisibility(View.VISIBLE); } }); RadioGroup sepia_element_nsfw = findViewById(R.id.sepia_element_nsfw); sepia_element_nsfw.setOnCheckedChangeListener((group, checkedId) -> { if (checkedId == R.id.sepia_element_nsfw_no) { sepiaSearchVideo.setNsfw(false); } else { sepiaSearchVideo.setNsfw(true); } }); RadioGroup radio_date = findViewById(R.id.radio_date); radio_date.setOnCheckedChangeListener((group, checkedId) -> { switch(checkedId){ case 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()); break; case R.id.sepia_element_published_date_last_7_days: cal = GregorianCalendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.DAY_OF_YEAR, -7); sepiaSearchVideo.setStartDate(cal.getTime()); break; case R.id.sepia_element_published_date_last_30_days: cal = GregorianCalendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.DAY_OF_YEAR, -30); sepiaSearchVideo.setStartDate(cal.getTime()); break; case R.id.sepia_element_published_date_last_365_days: cal = GregorianCalendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.DAY_OF_YEAR, -365); sepiaSearchVideo.setStartDate(cal.getTime()); break; default: sepiaSearchVideo.setStartDate(null); } }); RadioGroup duration = findViewById(R.id.duration); duration.setOnCheckedChangeListener((group, checkedId) -> { switch(checkedId){ case R.id.sepia_element_duration_short: sepiaSearchVideo.setDurationMin(0); sepiaSearchVideo.setDurationMax(240); break; case R.id.sepia_element_duration_medium: sepiaSearchVideo.setDurationMin(240); sepiaSearchVideo.setDurationMax(600); break; case R.id.sepia_element_duration_long: sepiaSearchVideo.setDurationMin(600); sepiaSearchVideo.setDurationMax(999999999); break; default: sepiaSearchVideo.setDurationMin(0); sepiaSearchVideo.setDurationMax(999999999); break; } }); Spinner sort_by = findViewById(R.id.sort_by); ArrayAdapter adapterSortBy = new ArrayAdapter<>(SepiaSearchActivity.this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.sort_by_array)); sort_by.setAdapter(adapterSortBy); sort_by.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { String orderby, channelOrderBy; switch (position){ 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) { } }); Spinner sepia_element_category = findViewById(R.id.sepia_element_category); Spinner sepia_element_license = findViewById(R.id.sepia_element_license); Spinner sepia_element_language = findViewById(R.id.sepia_element_language); sepia_element_all_of_tags = findViewById(R.id.sepia_element_all_of_tags); sepia_element_one_of_tags = findViewById(R.id.sepia_element_one_of_tags); LinkedHashMap categories = new LinkedHashMap<>(peertubeInformation.getCategories()); LinkedHashMap licences = new LinkedHashMap<>(peertubeInformation.getLicences()); LinkedHashMap languages = new LinkedHashMap<>(peertubeInformation.getLanguages()); LinkedHashMap translations = new LinkedHashMap<>(peertubeInformation.getTranslations()); //Populate catgories String[] categoriesA = new String[categories.size()+1]; categoriesA[0] = getString(R.string.display_all_categories); Iterator> it = categories.entrySet().iterator(); int i = 1; while (it.hasNext()) { Map.Entry pair = it.next(); if (translations.size() == 0 || !translations.containsKey(pair.getValue())) categoriesA[i] = pair.getValue(); else categoriesA[i] = translations.get(pair.getValue()); it.remove(); i++; } ArrayAdapter adapterCatgories = new ArrayAdapter<>(SepiaSearchActivity.this, android.R.layout.simple_spinner_dropdown_item, categoriesA); sepia_element_category.setAdapter(adapterCatgories); //Populate licenses String[] licensesA = new String[licences.size()+1]; licensesA[0] = getString(R.string.display_all_licenses); it = licences.entrySet().iterator(); i = 1; while (it.hasNext()) { Map.Entry pair = it.next(); if (translations.size() == 0 || !translations.containsKey(pair.getValue())) licensesA[i] = pair.getValue(); else licensesA[i] = translations.get(pair.getValue()); it.remove(); i++; } ArrayAdapter adapterLicenses = new ArrayAdapter<>(SepiaSearchActivity.this, android.R.layout.simple_spinner_dropdown_item, licensesA); sepia_element_license.setAdapter(adapterLicenses); //Populate languages String[] languagesA = new String[languages.size()+1]; languagesA[0] = getString(R.string.display_all_languages); Iterator> itl = languages.entrySet().iterator(); i = 1; while (itl.hasNext()) { Map.Entry pair = itl.next(); if (translations.size() == 0 || !translations.containsKey(pair.getValue())) languagesA[i] = pair.getValue(); else languagesA[i] = translations.get(pair.getValue()); itl.remove(); i++; } ArrayAdapter adapterLanguages = new ArrayAdapter<>(SepiaSearchActivity.this, android.R.layout.simple_spinner_dropdown_item, languagesA); sepia_element_language.setAdapter(adapterLanguages); sepia_element_license.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { updateLicensePosition(position); } @Override public void onNothingSelected(AdapterView parent) { } }); //Manage categories sepia_element_category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { updateCategoryPosition(position); } @Override public void onNothingSelected(AdapterView parent) { } }); //Manage languages sepia_element_language.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { updateLanguagesPosition(position); } @Override public void onNothingSelected(AdapterView parent) { } }); searchBar = findViewById(R.id.searchBar); searchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() { @Override public void onSearchStateChanged(boolean enabled) { } @Override public void onSearchConfirmed(CharSequence text) { makeSearch(); } @Override public void onButtonClicked(int buttonCode) { makeSearch(); } }); Button apply_filter = findViewById(R.id.apply_filter); apply_filter.setOnClickListener(v-> makeSearch()); } private void makeSearch(){ if( sepia_element_one_of_tags.getTags().size() > 0 ) { sepiaSearchVideo.setTagsOneOf(sepia_element_one_of_tags.getTags()); }else{ sepiaSearchVideo.setTagsOneOf(null); } if( sepia_element_all_of_tags.getTags().size() > 0 ) { sepiaSearchVideo.setTagsAllOf(sepia_element_all_of_tags.getTags()); }else{ sepiaSearchVideo.setTagsAllOf(null); } filter_elements.setVisibility(View.GONE); sepiaSearchVideo.setSearch(searchBar.getText()); DisplaySepiaSearchFragment displaySepiaSearchFragment = new DisplaySepiaSearchFragment(); Bundle bundle = new Bundle(); bundle.putParcelable("sepiaSearchVideo", sepiaSearchVideo); displaySepiaSearchFragment.setArguments(bundle); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(R.id.container, displaySepiaSearchFragment).commit(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } private void updateLanguagesPosition(int position) { LinkedHashMap languagesCheck = new LinkedHashMap<>(peertubeInformation.getLanguages()); Iterator> it = languagesCheck.entrySet().iterator(); int i = 0; while (it.hasNext()) { Map.Entry pair = it.next(); if (i == position && position > 0) { List languages = new ArrayList<>(); languages.add(pair.getKey()); sepiaSearchVideo.setBoostLanguages(languages); break; }else { sepiaSearchVideo.setBoostLanguages(null); } it.remove(); i++; } } private void updateCategoryPosition(int position) { LinkedHashMap categoriesCheck = new LinkedHashMap<>(peertubeInformation.getCategories()); Iterator> it = categoriesCheck.entrySet().iterator(); int i = 0; while (it.hasNext()) { Map.Entry pair = it.next(); if (i == position && position > 0 ) { List categories = new ArrayList<>(); categories.add(pair.getKey()); sepiaSearchVideo.setCategoryOneOf(categories); break; }else { sepiaSearchVideo.setCategoryOneOf(null); } it.remove(); i++; } } private void updateLicensePosition(int position) { LinkedHashMap licensesCheck = new LinkedHashMap<>(peertubeInformation.getLicences()); Iterator> it = licensesCheck.entrySet().iterator(); int i = 0; while (it.hasNext()) { Map.Entry pair = it.next(); if (i == position && position > 0) { List licenses = new ArrayList<>(); licenses.add(pair.getKey()); sepiaSearchVideo.setLicenceOneOf(licenses); break; }else { sepiaSearchVideo.setLicenceOneOf(null); } it.remove(); i++; } } }