plectrum

Plectrum: instrument tuner for Android
Log | Files | Refs | README | LICENSE

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 }