NotePickerDialog.java (3019B)
1 package com.github.cythara; 2 3 import android.app.Dialog; 4 import android.os.Bundle; 5 import android.view.ContextThemeWrapper; 6 7 import androidx.appcompat.app.AlertDialog; 8 import androidx.fragment.app.DialogFragment; 9 10 import com.shawnlin.numberpicker.NumberPicker; 11 12 public class NotePickerDialog extends DialogFragment { 13 14 private NumberPicker.OnValueChangeListener valueChangeListener; 15 16 @Override 17 public Dialog onCreateDialog(Bundle savedInstanceState) { 18 final NumberPicker numberPicker = new NumberPicker(getActivity()); 19 numberPicker.setTag("note_picker"); 20 21 Bundle arguments = getArguments(); 22 boolean useScientificNotation = arguments.getBoolean("use_scientific_notation", true); 23 int currentValue = arguments.getInt("current_value", 0); 24 25 Note[] notes = MainActivity.getCurrentTuning().getNotes(); 26 27 numberPicker.setMinValue(0); 28 numberPicker.setMaxValue(notes.length); 29 if (currentValue < notes.length) { 30 numberPicker.setValue(currentValue); 31 } else { 32 numberPicker.setValue(0); 33 } 34 35 String[] displayedValues = new String[notes.length + 1]; 36 37 displayedValues[0] = "Auto"; 38 for (int i = 0; i < notes.length; i++) { 39 Note note = notes[i]; 40 NoteName name = note.getName(); 41 String noteName = name.getScientific(); 42 int octave = note.getOctave(); 43 if (!useScientificNotation) { 44 noteName = name.getSol(); 45 46 //TODO Extract method 47 if (octave <= 1) { 48 octave = octave - 2; 49 } 50 51 octave = octave - 1; 52 } 53 displayedValues[i + 1] = noteName + note.getSign() + octave; 54 } 55 56 numberPicker.setDisplayedValues(displayedValues); 57 58 if (MainActivity.isDarkModeEnabled()) { 59 int color = getResources().getColor(R.color.colorTextDark); 60 numberPicker.setTextColor(color); 61 numberPicker.setDividerColor(color); 62 numberPicker.setSelectedTextColor(color); 63 } 64 65 AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), 66 R.style.AppTheme)); 67 68 builder.setPositiveButton("OK", 69 (dialog, which) -> valueChangeListener.onValueChange(numberPicker, 70 numberPicker.getValue(), numberPicker.getValue())); 71 72 builder.setNegativeButton("CANCEL", (dialog, which) -> { 73 }); 74 75 builder.setNeutralButton("AUTO", 76 (dialog, which) -> valueChangeListener.onValueChange(numberPicker, 77 0, 0)); 78 79 builder.setView(numberPicker); 80 return builder.create(); 81 } 82 83 @Override 84 public void onPause() { 85 super.onPause(); 86 87 this.dismiss(); 88 } 89 90 void setValueChangeListener(NumberPicker.OnValueChangeListener valueChangeListener) { 91 this.valueChangeListener = valueChangeListener; 92 } 93 }