That fuck shit the fascists are using
1package org.tm.archive.components;
2
3
4import android.animation.Animator;
5import android.content.Context;
6import android.graphics.drawable.Drawable;
7import android.os.Build;
8import android.util.AttributeSet;
9import android.view.MenuItem;
10import android.view.View;
11import android.view.ViewAnimationUtils;
12import android.widget.EditText;
13import android.widget.LinearLayout;
14
15import androidx.annotation.MainThread;
16import androidx.annotation.Nullable;
17import androidx.appcompat.widget.SearchView;
18import androidx.appcompat.widget.Toolbar;
19import androidx.core.content.ContextCompat;
20
21import org.tm.archive.R;
22import org.tm.archive.animation.AnimationCompleteListener;
23import org.tm.archive.util.EditTextExtensionsKt;
24import org.tm.archive.util.TextSecurePreferences;
25
26public class SearchToolbar extends LinearLayout {
27
28 private float x, y;
29 private MenuItem searchItem;
30 private SearchListener listener;
31
32 public SearchToolbar(Context context) {
33 super(context);
34 initialize();
35 }
36
37 public SearchToolbar(Context context, @Nullable AttributeSet attrs) {
38 super(context, attrs);
39 initialize();
40 }
41
42 public SearchToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
43 super(context, attrs, defStyleAttr);
44 initialize();
45 }
46
47 private void initialize() {
48 inflate(getContext(), R.layout.search_toolbar, this);
49 setOrientation(VERTICAL);
50
51 Toolbar toolbar = findViewById(R.id.toolbar);
52
53 Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_arrow_left_24);
54 toolbar.setNavigationIcon(drawable);
55 toolbar.setCollapseIcon(drawable);
56 toolbar.inflateMenu(R.menu.conversation_list_search);
57
58 this.searchItem = toolbar.getMenu().findItem(R.id.action_filter_search);
59 SearchView searchView = (SearchView) searchItem.getActionView();
60 EditText searchText = searchView.findViewById(R.id.search_src_text);
61
62 EditTextExtensionsKt.setIncognitoKeyboardEnabled(searchText, TextSecurePreferences.isIncognitoKeyboardEnabled(getContext()));
63
64 searchView.setSubmitButtonEnabled(false);
65 searchView.setMaxWidth(Integer.MAX_VALUE);
66
67 if (searchText != null) searchText.setHint(R.string.SearchToolbar_search);
68 else searchView.setQueryHint(getResources().getString(R.string.SearchToolbar_search));
69
70 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
71 @Override
72 public boolean onQueryTextSubmit(String query) {
73 if (listener != null) {
74 listener.onSearchTextChange(query);
75 }
76 return true;
77 }
78
79 @Override
80 public boolean onQueryTextChange(String newText) {
81 return onQueryTextSubmit(newText);
82 }
83 });
84
85 searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
86 @Override
87 public boolean onMenuItemActionExpand(MenuItem item) {
88 return true;
89 }
90
91 @Override
92 public boolean onMenuItemActionCollapse(MenuItem item) {
93 hide();
94 return true;
95 }
96 });
97
98 toolbar.setNavigationOnClickListener(v -> hide());
99 }
100
101 @MainThread
102 public void display(float x, float y) {
103 if (getVisibility() != View.VISIBLE) {
104 this.x = x;
105 this.y = y;
106
107 searchItem.expandActionView();
108
109 Animator animator = ViewAnimationUtils.createCircularReveal(this, (int)x, (int)y, 0, getWidth());
110 animator.setDuration(400);
111
112 setVisibility(View.VISIBLE);
113 animator.start();
114 }
115 }
116
117 public void collapse() {
118 searchItem.collapseActionView();
119 }
120
121 @MainThread
122 private void hide() {
123 if (getVisibility() == View.VISIBLE) {
124
125
126 if (listener != null) listener.onSearchClosed();
127
128 Animator animator = ViewAnimationUtils.createCircularReveal(this, (int)x, (int)y, getWidth(), 0);
129 animator.setDuration(400);
130 animator.addListener(new AnimationCompleteListener() {
131 @Override
132 public void onAnimationEnd(Animator animation) {
133 setVisibility(View.INVISIBLE);
134 }
135 });
136 animator.start();
137 }
138 }
139
140 public boolean isVisible() {
141 return getVisibility() == View.VISIBLE;
142 }
143
144 @MainThread
145 public void setListener(SearchListener listener) {
146 this.listener = listener;
147 }
148
149 public interface SearchListener {
150 void onSearchTextChange(String text);
151 void onSearchClosed();
152 }
153
154}