Skip to content

Commit a0c34be

Browse files
committed
Improve dialog new file
1 parent fb4e6c3 commit a0c34be

File tree

6 files changed

+158
-67
lines changed

6 files changed

+158
-67
lines changed

libeditor/src/main/java/com/duy/file/explorer/FileExplorerActivity.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import android.os.Bundle;
2424
import android.os.Environment;
2525
import android.support.annotation.Nullable;
26+
import android.support.v4.app.Fragment;
2627
import android.support.v7.app.AlertDialog;
2728
import android.support.v7.widget.SearchView;
2829
import android.support.v7.widget.Toolbar;
@@ -55,10 +56,11 @@ public class FileExplorerActivity extends ThemeSupportActivity implements View.O
5556
public static final String EXTRA_HOME_PATH = "home_path";
5657
public static final String EXTRA_INIT_PATH = "dest_file";
5758
public static final String EXTRA_MODE = "mode";
58-
private static final String EXTRA_ENCODING = "encoding";
59+
public static final String EXTRA_ENCODING = "encoding";
60+
61+
public static final int MODE_PICK_FILE = 1;
62+
public static final int MODE_PICK_PATH = 2;
5963

60-
private static final int MODE_PICK_FILE = 1;
61-
private static final int MODE_PICK_PATH = 2;
6264
private FileListPagerFragment mFileListPagerFragment;
6365
private ActivityFileExplorerBinding binding;
6466
private int mMode;
@@ -88,6 +90,14 @@ public static void startPickPathActivity(Activity activity, String destFile, Str
8890
activity.startActivityForResult(it, requestCode);
8991
}
9092

93+
public static void startPickPathActivity(Fragment fragment, String destFile, String encoding, int requestCode) {
94+
Intent it = new Intent(fragment.getContext(), FileExplorerActivity.class);
95+
it.putExtra(EXTRA_MODE, MODE_PICK_PATH);
96+
it.putExtra(EXTRA_INIT_PATH, destFile);
97+
it.putExtra(EXTRA_ENCODING, encoding);
98+
fragment.startActivityForResult(it, requestCode);
99+
}
100+
91101
@Nullable
92102
public static String getFile(Intent it) {
93103
return it.getStringExtra("file");
@@ -257,13 +267,11 @@ boolean onSelectFile(JecFile file) {
257267
it.putExtra("encoding", fileEncoding);
258268
setResult(RESULT_OK, it);
259269
finish();
260-
} else {
261-
binding.filenameEditText.setText(file.getName());
262270
}
263-
264271
return true;
265272
} else if (file.isDirectory()) {
266273
mLastPath = file.getPath();
274+
binding.filenameEditText.setText(file.getPath());
267275
}
268276

269277
return false;

libeditor/src/main/java/com/duy/ide/core/SimpleEditorActivity.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -500,20 +500,22 @@ public void createNewFile() {
500500

501501
String[] fileExtensions = getSupportedFileExtensions();
502502
EditorDelegate currentEditorDelegate = getCurrentEditorDelegate();
503-
String path = null;
503+
String path;
504504
if (currentEditorDelegate != null) {
505505
path = currentEditorDelegate.getPath();
506+
if (new File(path).isFile()) {
507+
path = new File(path).getParent();
508+
}
506509
} else {
507510
path = Environment.getExternalStorageDirectory().getPath();
508511
}
509-
DialogNewFile dialog = new DialogNewFile(this, fileExtensions, path,
510-
new DialogNewFile.OnCreateFileListener() {
511-
@Override
512-
public void onFileCreated(@NonNull File file) {
513-
mTabManager.newTab(file);
514-
}
515-
});
516-
dialog.show();
512+
DialogNewFile dialog = DialogNewFile.newInstance(fileExtensions, path, new DialogNewFile.OnCreateFileListener() {
513+
@Override
514+
public void onFileCreated(@NonNull File file) {
515+
mTabManager.newTab(file);
516+
}
517+
});
518+
dialog.show(getSupportFragmentManager(), DialogNewFile.class.getSimpleName());
517519
}
518520

519521
protected String[] getSupportedFileExtensions() {

libeditor/src/main/java/com/duy/ide/file/dialogs/DialogNewFile.java

Lines changed: 84 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,103 +16,145 @@
1616

1717
package com.duy.ide.file.dialogs;
1818

19-
import android.content.Context;
20-
import android.content.DialogInterface;
19+
import android.app.Activity;
20+
import android.content.Intent;
21+
import android.os.Bundle;
2122
import android.support.annotation.NonNull;
2223
import android.support.annotation.Nullable;
23-
import android.support.v7.app.AlertDialog;
24+
import android.support.v7.app.AppCompatDialogFragment;
2425
import android.view.LayoutInflater;
2526
import android.view.View;
27+
import android.view.ViewGroup;
2628
import android.widget.ArrayAdapter;
2729
import android.widget.EditText;
2830
import android.widget.Spinner;
2931

30-
import com.duy.ide.editor.editor.R;
3132
import com.duy.common.utils.IOUtils;
32-
import com.jecelyin.editor.v2.dialog.AbstractDialog;
33+
import com.duy.file.explorer.FileExplorerActivity;
34+
import com.duy.ide.editor.editor.R;
3335

3436
import java.io.File;
3537

3638
/**
3739
* Created by Duy on 30-Apr-18.
3840
*/
3941

40-
public class DialogNewFile extends AbstractDialog {
41-
private final Context context;
42+
public class DialogNewFile extends AppCompatDialogFragment {
43+
private static final String KEY_FILE_EXTENSIONS = "fileExtensions";
44+
private static final String KEY_CURRENT_DIR = "currentDir";
45+
private static final int RC_SELECT_PATH = 991;
46+
4247
@Nullable
43-
private final OnCreateFileListener mListener;
44-
private final String[] fileExtensions;
45-
private String dir;
48+
private OnCreateFileListener mListener;
49+
private String[] fileExtensions;
50+
private String mCurrentDir;
4651
private EditText mPathExitText, mNameEditText;
4752
private Spinner mSpinnerExt;
4853

49-
// TODO: 19-May-18 create new file and callback
50-
public DialogNewFile(@NonNull Context context, @NonNull String[] fileExtensions,
51-
@NonNull String dir,
52-
@Nullable final OnCreateFileListener listener) {
53-
super(context);
54-
this.context = context;
55-
this.fileExtensions = fileExtensions;
56-
this.dir = dir;
57-
this.mListener = listener;
54+
public static DialogNewFile newInstance(@NonNull String[] fileExtensions,
55+
@NonNull String dir, OnCreateFileListener onCreateFileListener) {
56+
57+
Bundle args = new Bundle();
58+
59+
DialogNewFile fragment = new DialogNewFile();
60+
fragment.setArguments(args);
61+
args.putStringArray(KEY_FILE_EXTENSIONS, fileExtensions);
62+
args.putString(KEY_CURRENT_DIR, dir);
63+
fragment.mListener = onCreateFileListener;
64+
return fragment;
5865
}
5966

67+
@Nullable
6068
@Override
61-
public void show() {
62-
AlertDialog.Builder builder = getBuilder();
63-
LayoutInflater inflater = LayoutInflater.from(context);
64-
View view = inflater.inflate(R.layout.dialog_new_file, null);
65-
builder.setView(view);
69+
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
70+
View view = inflater.inflate(R.layout.dialog_new_file, container, false);
71+
return view;
72+
}
73+
74+
@Override
75+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
76+
super.onViewCreated(view, savedInstanceState);
77+
if (mCurrentDir == null) {
78+
mCurrentDir = getArguments().getString(KEY_CURRENT_DIR);
79+
}
80+
if (fileExtensions == null) {
81+
fileExtensions = getArguments().getStringArray(KEY_FILE_EXTENSIONS);
82+
}
83+
6684
mPathExitText = view.findViewById(R.id.edit_path);
67-
mPathExitText.setText(dir);
85+
mPathExitText.setText(mCurrentDir);
6886
mNameEditText = view.findViewById(R.id.edit_input);
6987
mSpinnerExt = view.findViewById(R.id.spinner_exts);
70-
ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, fileExtensions);
88+
ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, fileExtensions);
7189
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
7290
mSpinnerExt.setAdapter(adapter);
7391

74-
builder.setTitle(R.string.create_new_file);
75-
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
92+
// setTitle(R.string.create_new_file);
93+
view.findViewById(R.id.btn_create).setOnClickListener(new View.OnClickListener() {
94+
@Override
95+
public void onClick(View v) {
96+
if (createNewFile()) {
97+
dismiss();
98+
}
99+
}
100+
});
101+
view.findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() {
76102
@Override
77-
public void onClick(DialogInterface dialog, int which) {
78-
createNewFile();
79-
dialog.dismiss();
103+
public void onClick(View v) {
104+
dismiss();
80105
}
81106
});
82-
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
107+
view.findViewById(R.id.btn_select_path).setOnClickListener(new View.OnClickListener() {
83108
@Override
84-
public void onClick(DialogInterface dialog, int which) {
85-
dialog.cancel();
109+
public void onClick(View v) {
110+
selectPath();
86111
}
87112
});
88-
builder.create().show();
89113
}
90114

91-
private void createNewFile() {
115+
private void selectPath() {
116+
FileExplorerActivity.startPickPathActivity(this, mCurrentDir, "UTF-8", RC_SELECT_PATH);
117+
}
118+
119+
@Override
120+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
121+
super.onActivityResult(requestCode, resultCode, data);
122+
if (requestCode == RC_SELECT_PATH && resultCode == Activity.RESULT_OK) {
123+
String file = FileExplorerActivity.getFile(data);
124+
if (file != null) {
125+
mCurrentDir = file;
126+
mPathExitText.setText(file);
127+
}
128+
}
129+
}
130+
131+
private boolean createNewFile() {
92132
String name = mNameEditText.getText().toString();
93133
if (mNameEditText.length() == 0 ||
94134
!name.matches("[A-Za-z0-9_./ ]+")) {
95-
mNameEditText.setText(R.string.invalid_name);
96-
return;
135+
mNameEditText.setError(getContext().getString(R.string.invalid_name));
136+
return false;
97137
}
98138
String path = mPathExitText.getText().toString();
99139
if (mPathExitText.length() == 0 ||
100140
!path.matches("[A-Za-z0-9_./ ]+")) {
101141

102-
mNameEditText.setText(R.string.invalid_name);
103-
return;
142+
mNameEditText.setError(getContext().getString(R.string.invalid_name));
143+
return false;
104144
}
105-
if (!name.contains(".")){
145+
if (!name.contains(".")) {
106146
name += mSpinnerExt.getSelectedItem().toString();
107147
}
108148
File file = new File(path, name);
109149
if (IOUtils.createNewFile(file)) {
110150
if (mListener != null) {
111151
mListener.onFileCreated(file);
112152
}
153+
return true;
113154
} else {
114-
mNameEditText.setText(R.string.cannot_create_new_file);
155+
mNameEditText.setError(getContext().getString(R.string.cannot_create_new_file));
115156
}
157+
return false;
116158
}
117159

118160
public interface OnCreateFileListener {

libeditor/src/main/res-file-expoler/layout/activity_file_explorer.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@
5151
android:paddingRight="5dp"
5252
android:textColor="#333" />
5353

54-
<android.support.v7.widget.AppCompatTextView
54+
<android.support.v7.widget.AppCompatButton
5555
android:id="@+id/save_btn"
56+
style="@style/Base.Widget.AppCompat.Button.Colored"
5657
android:layout_width="wrap_content"
5758
android:layout_height="match_parent"
5859
android:gravity="center"
@@ -67,10 +68,10 @@
6768
android:layout_marginBottom="8dp"
6869
android:layout_marginTop="8dp"
6970
android:gravity="top"
70-
android:visibility="gone"
7171
android:orientation="horizontal"
7272
android:paddingLeft="8dp"
73-
android:paddingRight="8dp">
73+
android:paddingRight="8dp"
74+
android:visibility="gone">
7475

7576
<android.support.v7.widget.AppCompatTextView
7677
android:layout_width="wrap_content"

libeditor/src/main/res/layout/dialog_new_file.xml

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,33 @@
3232

3333
</android.support.design.widget.TextInputLayout>
3434

35-
<android.support.design.widget.TextInputLayout
35+
<LinearLayout
3636
android:layout_width="match_parent"
3737
android:layout_height="wrap_content"
38-
android:hint="@string/path">
38+
android:gravity="center_vertical"
39+
android:orientation="horizontal">
3940

40-
<android.support.design.widget.TextInputEditText
41-
android:id="@+id/edit_path"
42-
android:layout_width="match_parent"
43-
android:layout_height="wrap_content" />
41+
<android.support.design.widget.TextInputLayout
42+
android:layout_width="0dp"
43+
android:layout_height="wrap_content"
44+
android:layout_weight="1"
45+
android:hint="@string/path">
4446

45-
</android.support.design.widget.TextInputLayout>
47+
<android.support.design.widget.TextInputEditText
48+
android:id="@+id/edit_path"
49+
android:layout_width="match_parent"
50+
android:layout_height="wrap_content"
51+
android:singleLine="true" />
52+
53+
</android.support.design.widget.TextInputLayout>
54+
55+
<android.support.v7.widget.AppCompatButton
56+
android:id="@+id/btn_select_path"
57+
style="@style/Base.Widget.AppCompat.Button.Borderless.Colored"
58+
android:layout_width="wrap_content"
59+
android:layout_height="wrap_content"
60+
android:text="@string/select" />
61+
</LinearLayout>
4662

4763
<android.support.v7.widget.AppCompatSpinner
4864
android:id="@+id/spinner_exts"
@@ -51,4 +67,25 @@
5167

5268
</android.support.v7.widget.AppCompatSpinner>
5369

70+
<LinearLayout
71+
android:layout_width="match_parent"
72+
android:layout_height="wrap_content"
73+
android:gravity="end"
74+
android:orientation="horizontal">
75+
76+
77+
<android.support.v7.widget.AppCompatButton
78+
android:id="@+id/btn_cancel"
79+
style="@style/Base.Widget.AppCompat.Button.Borderless.Colored"
80+
android:layout_width="wrap_content"
81+
android:layout_height="wrap_content"
82+
android:text="@string/cancel" />
83+
84+
<android.support.v7.widget.AppCompatButton
85+
android:id="@+id/btn_create"
86+
style="@style/Base.Widget.AppCompat.Button.Borderless.Colored"
87+
android:layout_width="wrap_content"
88+
android:layout_height="wrap_content"
89+
android:text="@string/ok" />
90+
</LinearLayout>
5491
</LinearLayout>

libeditor/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,5 +230,6 @@
230230
<string name="unsupported_format_source">Unsupported format source for current file</string>
231231
<string name="format_source">Format source</string>
232232
<string name="formated_source">Source is formatted</string>
233+
<string name="select">Select</string>
233234

234235
</resources>

0 commit comments

Comments
 (0)