Skip to content

Commit 466ddb6

Browse files
committed
searchfilters: 2nd Ui: Action menu feel alike dialog
Dialog looks similar to a action menu based approach but is faster.
1 parent 05ffe27 commit 466ddb6

3 files changed

Lines changed: 464 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
2+
3+
package org.schabi.newpipe.fragments.list.search.filter;
4+
5+
import android.app.Dialog;
6+
import android.os.Bundle;
7+
import android.view.Gravity;
8+
import android.view.LayoutInflater;
9+
import android.view.View;
10+
import android.view.ViewGroup;
11+
import android.view.Window;
12+
import android.view.WindowManager;
13+
14+
import org.schabi.newpipe.databinding.SearchFilterOptionMenuAlikeDialogFragmentBinding;
15+
16+
import androidx.annotation.NonNull;
17+
import androidx.annotation.Nullable;
18+
import androidx.appcompat.widget.Toolbar;
19+
20+
/**
21+
* A search filter dialog that looks like a action menu aka. 'action menu style'.
22+
*/
23+
public class SearchFilterOptionMenuAlikeDialogFragment extends BaseSearchFilterDialogFragment {
24+
25+
private SearchFilterOptionMenuAlikeDialogFragmentBinding binding;
26+
27+
@Override
28+
protected BaseSearchFilterUiGenerator createSearchFilterDialogGenerator() {
29+
return new SearchFilterOptionMenuAlikeDialogGenerator(
30+
searchViewModel.getSearchFilterLogic(), binding.verticalScroll, requireContext());
31+
}
32+
33+
@Override
34+
@Nullable
35+
protected Toolbar getToolbar() {
36+
return binding.toolbarLayout.toolbar;
37+
}
38+
39+
@Override
40+
protected View getRootView(@NonNull final LayoutInflater inflater,
41+
final ViewGroup container) {
42+
binding = SearchFilterOptionMenuAlikeDialogFragmentBinding
43+
.inflate(inflater, container, false);
44+
return binding.getRoot();
45+
}
46+
47+
@Override
48+
public void onViewCreated(@NonNull final View view, final Bundle savedInstanceState) {
49+
super.onViewCreated(view, savedInstanceState);
50+
// place the dialog in the 'action menu position'
51+
setDialogGravity(Gravity.END | Gravity.TOP);
52+
}
53+
54+
private void setDialogGravity(final int gravity) {
55+
final Dialog dialog = getDialog();
56+
if (dialog != null) {
57+
final Window window = dialog.getWindow();
58+
if (window != null) {
59+
final WindowManager.LayoutParams layoutParams = window.getAttributes();
60+
layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
61+
layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
62+
layoutParams.horizontalMargin = 0;
63+
layoutParams.gravity = gravity;
64+
layoutParams.dimAmount = 0;
65+
layoutParams.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
66+
window.setAttributes(layoutParams);
67+
}
68+
}
69+
}
70+
71+
@Override
72+
protected void initToolbar(final @NonNull Toolbar toolbar) {
73+
super.initToolbar(toolbar);
74+
// no room for a title
75+
toolbar.setTitle("");
76+
}
77+
}

0 commit comments

Comments
 (0)