summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchTagsFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchTagsFragment.java')
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchTagsFragment.java199
1 files changed, 199 insertions, 0 deletions
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchTagsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchTagsFragment.java
new file mode 100644
index 000000000..9080ad25c
--- /dev/null
+++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchTagsFragment.java
@@ -0,0 +1,199 @@
+package fr.gouv.etalab.mastodon.fragments;
+/* Copyright 2019 Thomas Schneider
+ *
+ * This file is a part of Mastalab
+ *
+ * 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.
+ *
+ * Mastalab 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 Mastalab; if not,
+ * see <http://www.gnu.org/licenses>. */
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+import android.widget.Toast;
+import java.util.ArrayList;
+import java.util.List;
+import es.dmoral.toasty.Toasty;
+import fr.gouv.etalab.mastodon.R;
+import fr.gouv.etalab.mastodon.asynctasks.RetrieveSearchAsyncTask;
+import fr.gouv.etalab.mastodon.client.API;
+import fr.gouv.etalab.mastodon.client.APIResponse;
+import fr.gouv.etalab.mastodon.drawers.SearchTagsAdapter;
+import fr.gouv.etalab.mastodon.helper.Helper;
+import fr.gouv.etalab.mastodon.interfaces.OnRetrieveSearchInterface;
+
+
+
+/**
+ * Created by Thomas on 31/03/2019.
+ * Fragment to display tags
+ */
+public class DisplaySearchTagsFragment extends Fragment implements OnRetrieveSearchInterface {
+
+
+ private Context context;
+ private SearchTagsAdapter searchTagsAdapter;
+ private List<String> tags;
+ private String search;
+ private RecyclerView lv_search_tags;
+ private RelativeLayout loader;
+ private RelativeLayout textviewNoAction;
+ private RelativeLayout loading_next_tags;
+ private LinearLayoutManager mLayoutManager;
+ private boolean flag_loading;
+ private SwipeRefreshLayout swipeRefreshLayout;
+ private String max_id;
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
+
+ View rootView = inflater.inflate(R.layout.fragment_search_tag, container, false);
+ context = getContext();
+
+ lv_search_tags = rootView.findViewById(R.id.lv_search_tags);
+ loader = rootView.findViewById(R.id.loader);
+ textviewNoAction = rootView.findViewById(R.id.no_action);
+ loader.setVisibility(View.VISIBLE);
+ loading_next_tags = rootView.findViewById(R.id.loading_next_tags);
+ swipeRefreshLayout = rootView.findViewById(R.id.swipeContainer);
+ flag_loading = true;
+ if (tags == null)
+ tags = new ArrayList<>();
+ max_id = null;
+
+ Bundle bundle = this.getArguments();
+ if (bundle != null) {
+ search = bundle.getString("search");
+ if (search != null)
+ new RetrieveSearchAsyncTask(context, search.trim(), DisplaySearchTagsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ else
+ Toasty.error(context, getString(R.string.toast_error_search), Toast.LENGTH_LONG).show();
+ } else {
+ Toasty.error(context, getString(R.string.toast_error_search), Toast.LENGTH_LONG).show();
+ }
+
+ mLayoutManager = new LinearLayoutManager(context);
+ lv_search_tags.setLayoutManager(mLayoutManager);
+ SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
+ int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
+ switch (theme){
+ case Helper.THEME_LIGHT:
+ swipeRefreshLayout.setColorSchemeResources(R.color.mastodonC4,
+ R.color.mastodonC2,
+ R.color.mastodonC3);
+ swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ContextCompat.getColor(context, R.color.white));
+ break;
+ case Helper.THEME_DARK:
+ swipeRefreshLayout.setColorSchemeResources(R.color.mastodonC4__,
+ R.color.mastodonC4,
+ R.color.mastodonC4);
+ swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ContextCompat.getColor(context, R.color.mastodonC1_));
+ break;
+ case Helper.THEME_BLACK:
+ swipeRefreshLayout.setColorSchemeResources(R.color.dark_icon,
+ R.color.mastodonC2,
+ R.color.mastodonC3);
+ swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ContextCompat.getColor(context, R.color.black_3));
+ break;
+ }
+ swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ int size = tags.size();
+ tags.clear();
+ tags = new ArrayList<>();
+ max_id = "0";
+ searchTagsAdapter.notifyItemRangeRemoved(0, size);
+ new RetrieveSearchAsyncTask(context, search, API.searchType.TAGS, null,DisplaySearchTagsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ });
+ lv_search_tags.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy)
+ {
+ int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition();
+ if(dy > 0){
+ int visibleItemCount = mLayoutManager.getChildCount();
+ int totalItemCount = mLayoutManager.getItemCount();
+ if(firstVisibleItem + visibleItemCount == totalItemCount && context != null) {
+ if(!flag_loading ) {
+ flag_loading = true;
+ new RetrieveSearchAsyncTask(context, search, API.searchType.TAGS, max_id, DisplaySearchTagsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ loading_next_tags.setVisibility(View.VISIBLE);
+ }
+ } else {
+ loading_next_tags.setVisibility(View.GONE);
+ }
+ }
+ }
+ });
+ new RetrieveSearchAsyncTask(context, search, API.searchType.TAGS, null,DisplaySearchTagsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ return rootView;
+ }
+
+
+ public void scrollToTop(){
+ if( lv_search_tags != null) {
+ lv_search_tags.setAdapter(searchTagsAdapter);
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle saveInstance) {
+ super.onCreate(saveInstance);
+ }
+
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ this.context = context;
+ }
+
+
+ @Override
+ public void onRetrieveSearch(APIResponse apiResponse) {
+
+ searchTagsAdapter = new SearchTagsAdapter(context, tags);
+ loader.setVisibility(View.GONE);
+ swipeRefreshLayout.setRefreshing(false);
+ if (apiResponse.getError() != null) {
+ if( apiResponse.getError().getError() != null)
+ Toasty.error(context, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
+ else
+ Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show();
+ return;
+ }
+ if(max_id == null)
+ max_id = "0";
+ max_id = String.valueOf(Integer.valueOf(max_id) + 20);
+ lv_search_tags.setVisibility(View.VISIBLE);
+ List<String> newTags = apiResponse.getResults().getHashtags();
+ tags.addAll(newTags);
+ SearchTagsAdapter searchTagsAdapter = new SearchTagsAdapter(context, tags);
+ lv_search_tags.setAdapter(searchTagsAdapter);
+ searchTagsAdapter.notifyDataSetChanged();
+ if( newTags.size() == 0 && tags.size() == 0 )
+ textviewNoAction.setVisibility(View.VISIBLE);
+ else
+ textviewNoAction.setVisibility(View.GONE);
+ }
+
+}