Skip to content

Commit 5fddf25

Browse files
committed
Show keyboard on entry creation, continue on ok
Displays dialog with keyboard, hides keyboard on exit Also shows a new entry dialog on ok. Closes #57 Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>
1 parent 50f2d3d commit 5fddf25

File tree

4 files changed

+50
-16
lines changed

4 files changed

+50
-16
lines changed

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package vocabletrainer.heinecke.aron.vocabletrainer.activity;
22

3+
import android.content.Context;
34
import android.content.Intent;
45
import android.content.SharedPreferences;
56
import android.os.Bundle;
@@ -13,6 +14,7 @@
1314
import android.util.Log;
1415
import android.view.Menu;
1516
import android.view.MenuItem;
17+
import android.view.inputmethod.InputMethodManager;
1618
import android.widget.ListView;
1719
import android.widget.Toast;
1820

@@ -238,12 +240,18 @@ public boolean onOptionsItemSelected(MenuItem item) {
238240
private void saveEdit() {
239241
ArrayList<VEntry> lst = new ArrayList<>(1);
240242
lst.add(editorEntry);
241-
242-
if (!editorEntry.isExisting()) {
243+
boolean isExisting = editorEntry.isExisting();
244+
if (!isExisting) {
243245
adapter.addEntryUnrendered(editorEntry);
244246
}
245247
db.upsertEntries(lst);
246248
adapter.notifyDataSetChanged();
249+
if(!isExisting) {
250+
addEntry();
251+
} else {
252+
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
253+
inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
254+
}
247255
}
248256

249257
/**
@@ -266,7 +274,7 @@ private void initListView() {
266274

267275
listView.setAdapter(adapter);
268276

269-
listView.setOnItemClickListener((parent, view, pos, id) -> showEntryEditDialog((VEntry) adapter.getItem(pos), pos));
277+
listView.setOnItemClickListener((parent, view, pos, id) -> showEntryEditDialog((VEntry) adapter.getItem(pos), pos,false));
270278

271279
listView.setOnItemLongClickListener((arg0, arg1, pos, id) -> {
272280
showEntryDeleteDialog((VEntry) adapter.getItem(pos), pos);
@@ -339,7 +347,7 @@ public void onDismissed(Snackbar transientBottomBar, int event) {
339347
* @param entry
340348
*/
341349
private void showEntryEditDialog(final VEntry entry) {
342-
showEntryEditDialog(entry,MIN_ID_TRESHOLD-1);
350+
showEntryEditDialog(entry,MIN_ID_TRESHOLD-1, true);
343351
}
344352

345353
/**
@@ -348,12 +356,12 @@ private void showEntryEditDialog(final VEntry entry) {
348356
* @param entry VEntry to edit/create
349357
* @param position edit position in list, if existing
350358
*/
351-
private synchronized void showEntryEditDialog(final VEntry entry, final int position) {
359+
private synchronized void showEntryEditDialog(final VEntry entry, final int position, final boolean forceDialog) {
352360
if (entry.getId() == ID_RESERVED_SKIP) {
353361
showTableInfoDialog();
354362
return;
355363
}
356-
if(editorDialog != null && editorDialog.isAdded()) {
364+
if(!forceDialog && editorDialog != null && editorDialog.isAdded()) {
357365
return;
358366
}
359367

app/src/main/java/vocabletrainer/heinecke/aron/vocabletrainer/dialog/VEntryEditorDialog.java

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,31 @@
11
package vocabletrainer.heinecke.aron.vocabletrainer.dialog;
22

33
import android.app.Dialog;
4+
import android.content.Context;
45
import android.content.DialogInterface;
56
import android.os.Bundle;
6-
import androidx.annotation.NonNull;
7-
import androidx.annotation.Nullable;
8-
import com.google.android.material.textfield.TextInputEditText;
9-
import com.google.android.material.textfield.TextInputLayout;
10-
import androidx.fragment.app.DialogFragment;
11-
import androidx.appcompat.app.AlertDialog;
127
import android.util.Log;
13-
import android.view.KeyEvent;
148
import android.view.View;
159
import android.view.ViewGroup;
10+
import android.view.WindowManager;
1611
import android.view.inputmethod.EditorInfo;
12+
import android.view.inputmethod.InputMethodManager;
13+
import android.widget.EditText;
1714
import android.widget.ImageButton;
1815
import android.widget.LinearLayout;
1916
import android.widget.RelativeLayout;
20-
import android.widget.TextView;
17+
18+
import androidx.annotation.NonNull;
19+
import androidx.annotation.Nullable;
20+
import androidx.appcompat.app.AlertDialog;
21+
import androidx.fragment.app.DialogFragment;
22+
23+
import com.google.android.material.textfield.TextInputEditText;
24+
import com.google.android.material.textfield.TextInputLayout;
2125

2226
import java.util.ArrayList;
2327
import java.util.List;
28+
import java.util.Objects;
2429

2530
import vocabletrainer.heinecke.aron.vocabletrainer.R;
2631
import vocabletrainer.heinecke.aron.vocabletrainer.lib.Function;
@@ -40,6 +45,7 @@ public class VEntryEditorDialog extends DialogFragment {
4045
private final static String KEY_INPUT_B_COUNT = "inputBCount";
4146
private final static String KEY_INPUT_HINT = "inputH";
4247
private final static String KEY_INPUT_ADDITION = "inputAd";
48+
private EditText focusableEditText = null;
4349
private Function<Void,VEntry> okAction;
4450
private Function<Void,VEntry> cancelAction;
4551
private VEntry entry;
@@ -74,6 +80,18 @@ public void setCancelAction(Function<Void,VEntry> cancelAction) {
7480
this.cancelAction = cancelAction;
7581
}
7682

83+
@Override
84+
public void onResume() {
85+
super.onResume();
86+
if(focusableEditText != null) {
87+
focusableEditText.requestFocus();
88+
InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
89+
imm.showSoftInput(focusableEditText, InputMethodManager.SHOW_FORCED);
90+
InputMethodManager inputMethodManager = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
91+
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
92+
}
93+
}
94+
7795
@Override
7896
public void onCreate(@Nullable Bundle savedInstanceState) {
7997
super.onCreate(savedInstanceState);
@@ -154,6 +172,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
154172
okAction();
155173
});
156174
builder.setNegativeButton(R.string.Editor_Diag_edit_btn_CANCEL, (dialog, which) -> callCancelAction());
175+
157176
return builder.create();
158177
}
159178

@@ -274,8 +293,14 @@ private View generateMeaning(final String meaning, final String hint,int image,
274293
ImageButton btn = container.findViewById(R.id.btnMeaning);
275294
text.setSingleLine();
276295

277-
if(focus)
296+
if(focus) {
297+
Log.d(TAG,"requesting focus");
278298
layout.requestFocus();
299+
InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
300+
imm.showSoftInput(text, InputMethodManager.SHOW_FORCED);
301+
InputMethodManager inputMethodManager = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
302+
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
303+
}
279304

280305
layout.setHint(hint);
281306
text.setText(meaning);

app/src/main/java/vocabletrainer/heinecke/aron/vocabletrainer/lib/Storage/VEntry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ public boolean equals(Object obj) {
256256

257257
/**
258258
* Check whether this entry is existing, according to it's ID<br>
259-
* <b>Note:</b> this is not a check whether this entity exists in the Database
259+
* <b>Note:</b> this is not a check whether this entity exists in the Database or a "special" placeholder
260260
* @return true if the ID is valid
261261
*/
262262
public boolean isExisting(){

fastlane/metadata/android/en-US/changelogs/21.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
- Add dark mode, requires android 8.1 or newer
2+
- Display keyboard on new entry & allow continuous entry of vocables
23
- Fix a bug where file chooser text jumps around
34
- Fix ui feedback when missing times-to-solve
45
- Fix broken list creation button on old systems

0 commit comments

Comments
 (0)