Skip to content

Commit 08597c8

Browse files
committed
main: use spinner for profile selection instead of an input box
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
1 parent 8336358 commit 08597c8

4 files changed

Lines changed: 39 additions & 57 deletions

File tree

app/src/main/java/io/github/muntashirakon/AppManager/filters/EditFilterOptionFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
162162
ArrayAdapter<CharSequence> filters = SelectedArrayAdapter.createFromResource(activity, R.array.finder_filters, io.github.muntashirakon.ui.R.layout.auto_complete_dropdown_item);
163163
filterSpinner.setAdapter(filters);
164164
mKeySpinner = view.findViewById(R.id.type_selector_spinner);
165-
mKeyAdapter = new ArrayAdapter<>(requireActivity(), io.github.muntashirakon.ui.R.layout.auto_complete_dropdown_item);
165+
mKeyAdapter = new SelectedArrayAdapter<>(requireActivity(), io.github.muntashirakon.ui.R.layout.auto_complete_dropdown_item);
166166
mKeySpinner.setAdapter(mKeyAdapter);
167167
mGenericEditText = view.findViewById(R.id.input_string);
168168
mGenericEditText.addTextChangedListener(mGenericEditTextWatcher);

app/src/main/java/io/github/muntashirakon/AppManager/main/MainListOptions.java

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
package io.github.muntashirakon.AppManager.main;
44

55
import android.os.Bundle;
6-
import android.text.Editable;
7-
import android.text.TextWatcher;
6+
import android.text.TextUtils;
87
import android.view.View;
98

109
import androidx.annotation.IntDef;
@@ -34,8 +33,8 @@
3433
import io.github.muntashirakon.AppManager.users.Users;
3534
import io.github.muntashirakon.AppManager.utils.ArrayUtils;
3635
import io.github.muntashirakon.AppManager.utils.ThreadUtils;
36+
import io.github.muntashirakon.adapters.SelectedArrayAdapter;
3737
import io.github.muntashirakon.dialog.SearchableMultiChoiceDialogBuilder;
38-
import io.github.muntashirakon.adapters.AnyFilterArrayAdapter;
3938

4039
public class MainListOptions extends ListOptions {
4140
public static final String TAG = MainListOptions.class.getSimpleName();
@@ -203,47 +202,46 @@ public static FilterItem getFilterItemFromFlags(int flags) {
203202
}
204203

205204
private final List<String> mProfileNames = new ArrayList<>();
206-
private final TextWatcher mProfileInputWatcher = new TextWatcher() {
207-
@Override
208-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
209-
}
210-
211-
@Override
212-
public void onTextChanged(CharSequence s, int start, int before, int count) {
213-
}
214-
215-
@Override
216-
public void afterTextChanged(Editable s) {
217-
MainActivity activity = (MainActivity) requireActivity();
218-
if (activity.viewModel == null) {
219-
return;
220-
}
221-
if (s != null) {
222-
String profileName = s.toString().trim();
223-
if (mProfileNames.contains(profileName)) {
224-
activity.viewModel.setFilterProfileName(profileName);
225-
return;
226-
}
227-
}
228-
activity.viewModel.setFilterProfileName(null);
229-
}
230-
};
231205
private Future<?> mProfileSuggestionsResult;
206+
@Nullable
207+
private SelectedArrayAdapter<String> mAdapter;
232208

233209
@Override
234210
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
235211
super.onViewCreated(view, savedInstanceState);
236212
MainActivity activity = (MainActivity) requireActivity();
237-
profileNameInput.addTextChangedListener(mProfileInputWatcher);
213+
profileNameSpinner.setOnItemClickListener((parent, view1, position, id) -> {
214+
if (mAdapter == null || activity.viewModel == null) {
215+
return;
216+
}
217+
if (position == 0) {
218+
// No profiles
219+
activity.viewModel.setFilterProfileName(null);
220+
} else {
221+
activity.viewModel.setFilterProfileName(mAdapter.getItem(position));
222+
}
223+
});
238224
mProfileSuggestionsResult = ThreadUtils.postOnBackgroundThread(() -> {
239225
mProfileNames.clear();
226+
mProfileNames.add(getString(R.string.no_profiles));
240227
mProfileNames.addAll(ProfileManager.getProfileNames());
228+
mAdapter = new SelectedArrayAdapter<>(activity,
229+
io.github.muntashirakon.ui.R.layout.auto_complete_dropdown_item_small,
230+
mProfileNames);
241231
if (isDetached() || ThreadUtils.isInterrupted()) return;
242232
activity.runOnUiThread(() -> {
243-
profileNameInput.setAdapter(new AnyFilterArrayAdapter<>(activity,
244-
io.github.muntashirakon.ui.R.layout.auto_complete_dropdown_item_small, mProfileNames));
233+
profileNameSpinner.setAdapter(mAdapter);
245234
if (activity.viewModel != null) {
246-
profileNameInput.setText(activity.viewModel.getFilterProfileName());
235+
String selectedProfile = activity.viewModel.getFilterProfileName();
236+
if (TextUtils.isEmpty(selectedProfile)) {
237+
profileNameSpinner.setSelection(0);
238+
} else {
239+
int i = mProfileNames.indexOf(selectedProfile);
240+
if (i < 0) {
241+
i = 0;
242+
}
243+
profileNameSpinner.setSelection(i);
244+
}
247245
}
248246
});
249247
});

app/src/main/java/io/github/muntashirakon/AppManager/misc/ListOptions.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@
2222
import com.google.android.material.chip.Chip;
2323
import com.google.android.material.chip.ChipGroup;
2424
import com.google.android.material.materialswitch.MaterialSwitch;
25-
import com.google.android.material.textfield.TextInputLayout;
2625

2726
import java.util.LinkedHashMap;
2827
import java.util.Objects;
2928

3029
import io.github.muntashirakon.AppManager.R;
3130
import io.github.muntashirakon.dialog.CapsuleBottomSheetDialogFragment;
32-
import io.github.muntashirakon.widget.MaterialAutoCompleteTextView;
31+
import io.github.muntashirakon.widget.MaterialSpinner;
3332

3433
public abstract class ListOptions extends CapsuleBottomSheetDialogFragment {
3534
public static final String TAG = ListOptions.class.getSimpleName();
@@ -79,8 +78,7 @@ default void onOptionSelected(int option, boolean selected) {
7978
@Nullable
8079
private ListOptionsViewModel mListOptionsViewModel;
8180

82-
protected TextInputLayout profileNameText;
83-
protected MaterialAutoCompleteTextView profileNameInput;
81+
protected MaterialSpinner profileNameSpinner;
8482
protected MaterialButton selectUserView;
8583

8684
public void setListOptionActions(@Nullable ListOptionActions listOptionActions) {
@@ -108,8 +106,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
108106
mFilterOptions = view.findViewById(R.id.filter_options);
109107
mOptionsText = view.findViewById(R.id.options_text);
110108
mOptionsView = view.findViewById(R.id.options);
111-
profileNameText = view.findViewById(android.R.id.text1);
112-
profileNameInput = view.findViewById(android.R.id.input);
109+
profileNameSpinner = view.findViewById(R.id.spinner);
113110
selectUserView = view.findViewById(R.id.user);
114111

115112
init(false);
@@ -204,8 +201,7 @@ private void init(boolean reinit) {
204201

205202
// Profile
206203
boolean profileEnabled = enableProfileNameInput();
207-
profileNameText.setVisibility(profileEnabled ? View.VISIBLE : View.GONE);
208-
profileNameInput.setVisibility(profileEnabled ? View.VISIBLE : View.GONE);
204+
profileNameSpinner.setVisibility(profileEnabled ? View.VISIBLE : View.GONE);
209205

210206
// User
211207
boolean selectUserEnabled = enableSelectUser();

app/src/main/res/layout/dialog_list_options.xml

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,24 +108,12 @@
108108
android:layout_height="wrap_content"
109109
android:orientation="vertical" />
110110

111-
<com.google.android.material.textfield.TextInputLayout
112-
android:id="@android:id/text1"
113-
style="@style/Widget.AppTheme.TextInputLayout.ExposedDropdownMenu.Small"
111+
<io.github.muntashirakon.widget.MaterialSpinner
112+
style="@style/Widget.AppTheme.MaterialSpinner.Small"
113+
android:id="@+id/spinner"
114114
android:layout_width="match_parent"
115115
android:layout_height="wrap_content"
116-
android:focusable="true"
117-
android:focusableInTouchMode="true"
118-
android:hint="@string/input_profile_name"
119-
app:hintAnimationEnabled="true"
120-
app:hintEnabled="true">
121-
122-
<io.github.muntashirakon.widget.MaterialAutoCompleteTextView
123-
android:id="@android:id/input"
124-
android:layout_width="match_parent"
125-
android:layout_height="34dp"
126-
android:singleLine="true" />
127-
128-
</com.google.android.material.textfield.TextInputLayout>
116+
android:hint="@string/input_profile_name" />
129117

130118
</androidx.appcompat.widget.LinearLayoutCompat>
131119

0 commit comments

Comments
 (0)