Skip to content

Commit 8275160

Browse files
committed
Move sorting options & training modes to dialog
Closes #44 Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>
1 parent baaf0e2 commit 8275160

File tree

10 files changed

+227
-87
lines changed

10 files changed

+227
-87
lines changed

app/src/main/java/vocabletrainer/heinecke/aron/vocabletrainer/activity/EditorActivity.java

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020

2121
import vocabletrainer.heinecke.aron.vocabletrainer.R;
22+
import vocabletrainer.heinecke.aron.vocabletrainer.dialog.ItemPickerDialog;
2223
import vocabletrainer.heinecke.aron.vocabletrainer.dialog.VEntryEditorDialog;
2324
import vocabletrainer.heinecke.aron.vocabletrainer.dialog.VListEditorDialog;
2425
import vocabletrainer.heinecke.aron.vocabletrainer.lib.Adapter.EntryListAdapter;
@@ -36,7 +37,7 @@
3637
/**
3738
* List editor activity
3839
*/
39-
public class EditorActivity extends AppCompatActivity implements VEntryEditorDialog.EditorDialogDataProvider, VListEditorDialog.ListEditorDataProvider {
40+
public class EditorActivity extends AppCompatActivity implements VEntryEditorDialog.EditorDialogDataProvider, VListEditorDialog.ListEditorDataProvider, ItemPickerDialog.ItemPickerHandler {
4041
/**
4142
* Param key for new list, default is false
4243
*/
@@ -47,24 +48,22 @@ public class EditorActivity extends AppCompatActivity implements VEntryEditorDia
4748
public static final String PARAM_TABLE = "list";
4849
public static final String TAG = "EditorActivity";
4950
private static final String P_KEY_EA_SORT = "EA_sorting";
51+
private static final String P_KEY_SORTING_DIALOG = "sorting_dialog_editor";
5052
private static final String KEY_EDITOR_POSITION = "editorPosition";
5153
private static final String KEY_EDITOR_ENTRY = "editorEntry";
5254
private VList list;
5355
private ArrayList<VEntry> entries;
5456
private EntryListAdapter adapter;
5557
private ListView listView;
5658
private Database db;
57-
private VEntry lastDeleted;
58-
private int deletedPosition;
5959
private int sortSetting;
6060
private GenEntryComparator cComp;
6161
private GenEntryComparator compA;
6262
private GenEntryComparator compB;
6363
private GenEntryComparator compTip;
64-
private MenuItem mSort_ColA;
65-
private MenuItem mSort_ColB;
66-
VEntryEditorDialog editorDialog;
67-
VListEditorDialog listEditorDialog;
64+
private ItemPickerDialog sortingDialog;
65+
private VEntryEditorDialog editorDialog;
66+
private VListEditorDialog listEditorDialog;
6867

6968
// current edit
7069
private int editPosition = MIN_ID_TRESHOLD -1; // store position for viewport change, shared object
@@ -108,7 +107,7 @@ protected void onCreate(Bundle savedInstanceState) {
108107

109108

110109
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
111-
sortSetting = settings.getInt(P_KEY_EA_SORT, R.id.eMenu_sort_A);
110+
sortSetting = settings.getInt(P_KEY_EA_SORT, 0);
112111
updateComp();
113112

114113
// handle passed params
@@ -152,11 +151,24 @@ protected void onCreate(Bundle savedInstanceState) {
152151
editorEntry = savedInstanceState.getParcelable(KEY_EDITOR_ENTRY);
153152
setEditorDialogActions();
154153
}
154+
sortingDialog = (ItemPickerDialog) getSupportFragmentManager().getFragment(savedInstanceState,P_KEY_SORTING_DIALOG);
155+
if(sortingDialog != null) {
156+
setSortingDialogParams();
157+
}
155158
}
156159

157160
this.setTitle(list.getName());
158161
}
159162

163+
/**
164+
* Set handlers & overrides for sortingDialog
165+
*/
166+
private void setSortingDialogParams(){
167+
sortingDialog.setItemPickerHandler(this);
168+
sortingDialog.overrideEntry(0,list.getNameA());
169+
sortingDialog.overrideEntry(1,list.getNameB());
170+
}
171+
160172
/**
161173
* Clear current edit state
162174
*/
@@ -169,8 +181,6 @@ private void clearEdit() {
169181
* Handles list column name changes
170182
*/
171183
private void updateColumnNames(){
172-
mSort_ColB.setTitle(list.getNameB());
173-
mSort_ColA.setTitle(list.getNameA());
174184
adapter.setTableData(list);
175185
}
176186

@@ -179,18 +189,18 @@ private void updateColumnNames(){
179189
*/
180190
private void updateComp(){
181191
switch(sortSetting){
182-
case R.id.eMenu_sort_A:
192+
case 0:
183193
cComp = compA;
184194
break;
185-
case R.id.eMenu_sort_B:
195+
case 1:
186196
cComp = compB;
187197
break;
188-
case R.id.eMenu_sort_Tip:
198+
case 2:
189199
cComp = compTip;
190200
break;
191201
default:
192202
cComp = compA;
193-
sortSetting = R.id.eMenu_sort_A;
203+
sortSetting = 0;
194204
break;
195205
}
196206
adapter.updateSorting(cComp);
@@ -199,8 +209,6 @@ private void updateComp(){
199209
@Override
200210
public boolean onCreateOptionsMenu(Menu menu) {
201211
getMenuInflater().inflate(R.menu.editor, menu);
202-
mSort_ColA = menu.findItem(R.id.eMenu_sort_A);
203-
mSort_ColB = menu.findItem(R.id.eMenu_sort_B);
204212
updateColumnNames();
205213
return true;
206214
}
@@ -214,11 +222,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
214222
case R.id.tEditorListEdit:
215223
showTableInfoDialog();
216224
return true;
217-
case R.id.eMenu_sort_A:
218-
case R.id.eMenu_sort_B:
219-
case R.id.eMenu_sort_Tip:
220-
sortSetting = item.getItemId();
221-
updateComp();
225+
case R.id.eMenu_sort:
226+
sortingDialog = ItemPickerDialog.newInstance(R.array.sort_entries,R.string.GEN_Sort);
227+
setSortingDialogParams();
228+
sortingDialog.show(getSupportFragmentManager(),P_KEY_SORTING_DIALOG);
222229
return true;
223230
}
224231

@@ -417,6 +424,8 @@ protected void onSaveInstanceState(Bundle outState) {
417424
outState.putBoolean(PARAM_NEW_TABLE,true);
418425
outState.putParcelable(PARAM_TABLE,list);
419426
}
427+
if(sortingDialog != null && sortingDialog.isAdded())
428+
getSupportFragmentManager().putFragment(outState,P_KEY_SORTING_DIALOG,sortingDialog);
420429
}
421430

422431
@Override
@@ -439,4 +448,10 @@ public VEntry getEditVEntry() {
439448
public VList getList() {
440449
return list;
441450
}
451+
452+
@Override
453+
public void onItemPickerSelected(int position) {
454+
sortSetting = position;
455+
updateComp();
456+
}
442457
}

app/src/main/java/vocabletrainer/heinecke/aron/vocabletrainer/activity/TrainerActivity.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.concurrent.Callable;
1616

1717
import vocabletrainer.heinecke.aron.vocabletrainer.R;
18+
import vocabletrainer.heinecke.aron.vocabletrainer.dialog.ItemPickerDialog;
1819
import vocabletrainer.heinecke.aron.vocabletrainer.dialog.TrainerResultDialog;
1920
import vocabletrainer.heinecke.aron.vocabletrainer.fragment.TrainerClassicFragment;
2021
import vocabletrainer.heinecke.aron.vocabletrainer.fragment.TrainerClassicMMFragment;
@@ -31,10 +32,11 @@
3132
/**
3233
* Trainer activity
3334
*/
34-
public class TrainerActivity extends FragmentActivity implements TrainerModeFragment.TrainingFragmentHolder {
35+
public class TrainerActivity extends FragmentActivity implements TrainerModeFragment.TrainingFragmentHolder, ItemPickerDialog.ItemPickerHandler {
3536
public static final String PARAM_RESUME_SESSION_FLAG = "resume_session";
3637
public static final String PARAM_TRAINER_SETTINGS = "trainer_settings";
3738
private static final String KEY_TRAINER_MODE = "trainer_mode";
39+
private static final String P_KEY_MODE_DIALOG = "mode_dialog";
3840
public static final String PARAM_TABLES = "lists";
3941
private static final String TAG = "TrainerActivity";
4042
private static final String KEY_TRAINER = "trainer";
@@ -53,6 +55,7 @@ public class TrainerActivity extends FragmentActivity implements TrainerModeFrag
5355
private TrainerModeFragment cTrainingFragment;
5456
private int trainingMode = -1;
5557
private TrainerModeFragment[] modeStorage = new TrainerModeFragment[3];
58+
private ItemPickerDialog modeDialog;
5659

5760
private static final int modeClassicID = 0;
5861
private static final int modeQuickID = 1;
@@ -73,6 +76,12 @@ protected void onCreate(Bundle savedInstanceState) {
7376
ab.setDisplayHomeAsUpEnabled(true);
7477
}
7578

79+
if(savedInstanceState != null){
80+
modeDialog = (ItemPickerDialog) getSupportFragmentManager().getFragment(savedInstanceState,P_KEY_MODE_DIALOG);
81+
if(modeDialog != null)
82+
modeDialog.setItemPickerHandler(this);
83+
}
84+
7685
tExercise = findViewById(R.id.tTrainerExercise);
7786
tColumnQuestion = findViewById(R.id.tTrainerExColumn);
7887

@@ -217,6 +226,8 @@ protected void onSaveInstanceState(Bundle outState) {
217226
outState.putParcelable(KEY_TRAINER,trainer);
218227
outState.putInt(KEY_FRAGMENT_NR,trainingMode);
219228
getSupportFragmentManager().putFragment(outState,KEY_FRAGMENT,cTrainingFragment);
229+
if(modeDialog != null && modeDialog.isAdded())
230+
getSupportFragmentManager().putFragment(outState,P_KEY_MODE_DIALOG,modeDialog);
220231
}
221232

222233
@Override
@@ -242,14 +253,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
242253
case R.id.tMenu_Tip:
243254
cTrainingFragment.showTip(trainer.getTip());
244255
return true;
245-
case R.id.tMenu_Classic:
246-
setTrainingMode(modeClassicID);
247-
break;
248-
case R.id.tMenu_Quick:
249-
setTrainingMode(modeQuickID);
250-
break;
251-
case R.id.tMenu_ClassicMM:
252-
setTrainingMode(modeClassicMMID);
256+
case R.id.tMenu_Mode:
257+
modeDialog = ItemPickerDialog.newInstance(R.array.training_modes,R.string.Trainer_Menu_Mode);
258+
modeDialog.setItemPickerHandler(this);
259+
modeDialog.show(getSupportFragmentManager(),P_KEY_MODE_DIALOG);
253260
break;
254261
}
255262

@@ -290,4 +297,20 @@ public Trainer getTrainer() {
290297
public TrainerSettings getTrainerSettings() {
291298
return settings;
292299
}
300+
301+
@Override
302+
public void onItemPickerSelected(int position) {
303+
switch(position){
304+
default:
305+
case 0:
306+
setTrainingMode(modeClassicID);
307+
break;
308+
case 2:
309+
setTrainingMode(modeQuickID);
310+
break;
311+
case 1:
312+
setTrainingMode(modeClassicMMID);
313+
break;
314+
}
315+
}
293316
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package vocabletrainer.heinecke.aron.vocabletrainer.dialog;
2+
3+
import android.app.Dialog;
4+
import android.os.Bundle;
5+
import android.support.annotation.ArrayRes;
6+
import android.support.annotation.NonNull;
7+
import android.support.annotation.Nullable;
8+
import android.support.annotation.StringRes;
9+
import android.support.v4.app.DialogFragment;
10+
import android.support.v7.app.AlertDialog;
11+
import android.util.SparseArray;
12+
13+
import java.util.HashMap;
14+
15+
import vocabletrainer.heinecke.aron.vocabletrainer.R;
16+
17+
/**
18+
* Item picker dialog for Array Resources<br>
19+
* Allows override of specific values for dynamic entries
20+
*/
21+
public class ItemPickerDialog extends DialogFragment {
22+
private static final String K_OVERRIDES = "overrides";
23+
private static final String P_TITLE = "title";
24+
private static final String P_ITEMS = "items";
25+
private ItemPickerHandler handler;
26+
private SparseArray<String> overrides;
27+
28+
/**
29+
* Interface for handlers of ItemPickerDialog on select
30+
*/
31+
public interface ItemPickerHandler {
32+
void onItemPickerSelected(int position);
33+
}
34+
35+
/**
36+
* Set handler for selection
37+
* @param handler
38+
*/
39+
public void setItemPickerHandler(ItemPickerHandler handler){
40+
this.handler = handler;
41+
}
42+
43+
@Override
44+
public void onCreate(@Nullable Bundle savedInstanceState) {
45+
super.onCreate(savedInstanceState);
46+
setStyle(DialogFragment.STYLE_NORMAL, R.style.CustomDialog);
47+
}
48+
49+
/**
50+
* Creates a new instance
51+
*/
52+
public static ItemPickerDialog newInstance(@ArrayRes int itemArray, @StringRes int title){
53+
ItemPickerDialog dialog = new ItemPickerDialog();
54+
Bundle args = new Bundle();
55+
args.putInt(P_ITEMS,itemArray);
56+
args.putInt(P_TITLE,title);
57+
dialog.setArguments(args);
58+
return dialog;
59+
}
60+
61+
/**
62+
* Allows to override certain values<br>
63+
* Has to be called <b></b>before showing the dialog</b>!
64+
* @param id
65+
* @param value
66+
*/
67+
public void overrideEntry(int id, String value){
68+
if(overrides == null)
69+
overrides = new SparseArray<>();
70+
overrides.put(id,value);
71+
}
72+
73+
@NonNull
74+
@Override
75+
public Dialog onCreateDialog(Bundle savedInstanceState) {
76+
int itemArray = getArguments().getInt(P_ITEMS);
77+
78+
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
79+
dialog.setTitle(getArguments().getInt(P_TITLE));
80+
String[] values = getResources().getStringArray(itemArray);
81+
if(overrides != null) {
82+
for(int i = 0; i < values.length; i++){
83+
String override = overrides.get(i);
84+
if(override != null)
85+
values[i] = override;
86+
}
87+
}
88+
dialog.setItems(values, (dialog1, which) -> {
89+
dialog1.dismiss();
90+
handler.onItemPickerSelected(which);
91+
});
92+
return dialog.create();
93+
}
94+
95+
}

0 commit comments

Comments
 (0)