package app.create.rpg; import android.app.*; import android.content.*; import android.os.*; import android.text.*; import android.util.Log; import android.view.*; import android.view.View.*; import android.widget.*; import app.create.rpg.task.*; import java.io.*; import java.util.*; public class ActivityNewProject extends Activity implements OnClickListener, TextWatcher { public static final String invalidChars = "/\\:*?\"<>|.%"; public static final String[] invalidFileNames = new String[] {"CON", "PRN", "AUX", "CLOCK$", "NUL"}; public static final boolean DEBUG = false; @Override public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.dialog_project); getWindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); final EditText et = ((EditText) findViewById(R.id.editGameTitle)); et.addTextChangedListener(this); findViewById(android.R.id.button1).setOnClickListener(this); findViewById(android.R.id.button2).setOnClickListener(this); findViewById(R.id.btnChooseDir).setOnClickListener(this); setHint(et.getText().toString()); } @Override public void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); setHint (((EditText) findViewById(R.id.editGameTitle)).getText().toString()); } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (resultCode == RESULT_OK) { try { if (Class.forName(intent.getComponent().getClassName()).equals(ActivityFileDialog.class)) { ((EditText) findViewById(R.id.editDirPath)).setText(intent.getStringExtra(ActivityFileDialog.FILE_PATH)); } } catch (ClassNotFoundException e) {} } } @Override public void onClick(View view) { String dirPath, projName; switch (view.getId()) { case R.id.btnChooseDir: projName = ((EditText) findViewById(R.id.editGameTitle)).getText().toString(); dirPath = ((EditText) findViewById(R.id.editDirPath)).getText().toString(); if (dirPath.equals("")) dirPath = Environment.getExternalStorageDirectory().getAbsolutePath(); startActivityForResult(new Intent(this, ActivityFileDialog.class) .putExtra(ActivityFileDialog.FILE_PATH, dirPath) .putExtra(ActivityFileDialog.SELECTION_MODE_FLAGS, SelectionFlags.FLAG_DIR), 0); break; case android.R.id.button1: finish(); break; case android.R.id.button2: { long time = 0; if (DEBUG) { Log.d("CreateRPG", "Starting..."); time = System.currentTimeMillis(); } String rtp1 = ((EditText) findViewById(R.id.editRTP1)).getText().toString(), rtp2 = ((EditText) findViewById(R.id.editRTP2)).getText().toString(), rtp3 = ((EditText) findViewById(R.id.editRTP3)).getText().toString(); projName = ((EditText) findViewById(R.id.editGameTitle)).getText().toString(); dirPath = ((EditText) findViewById(R.id.editDirPath)).getText().toString(); if (dirPath.length() < 1) dirPath = getProjectDir(projName).getAbsolutePath(); Task[] tasks = new Task[] { new TaskProject(true, projName, new String[]{rtp1, rtp2, rtp3}, dirPath), new TaskIntent(PendingIntent.getActivity(this, 0, new Intent(this, ActivityProject.class).putExtra(ActivityFileDialog.FILE_PATH, dirPath), 0)) }; if (DEBUG) { Log.d("CreateRPG", "Finished init. Took " + (System.currentTimeMillis() - time) / 1000.0f + " sec"); Log.d("CreateRPG", "Start service"); time = System.currentTimeMillis(); } startService(new Intent(ServiceFileTask.ACTION_PUSH_TASK).putExtra("queueid", -1).putExtra("tasks", tasks)); if (DEBUG) { Log.d("CreateRPG", "Finished start service. Took " + (System.currentTimeMillis() - time) / 1000.0f + " sec"); Log.d("CreateRPG", "Finishing Activity.."); } finish(); if (DEBUG) Log.d("CreateRPG", "Finished activity. Took " + (System.currentTimeMillis() - time) / 1000.0f + " sec"); } } } /** * Check DOS devices plus invalid chars and convert it to be valid. * @param name * @return */ public File getProjectDir(String name) { StringBuilder sb = new StringBuilder(); String upcase = name.toUpperCase(Locale.ENGLISH); char c; int i; if (upcase.length() == 4 && (upcase.startsWith("COM") || upcase.startsWith("LPT"))) { c = name.charAt(3); if ('0' <= c && c <= '9') sb.append('p'); } else { for (i = 0; i < invalidFileNames.length; ++i) { if (invalidFileNames[i].equals(upcase)) { sb.append('p'); break; } } } for (i = 0; i < name.length(); ++i) { c = name.charAt(i); sb.append((invalidChars.indexOf(c) == -1) ? c : '_'); } return new File(Environment.getExternalStorageDirectory(), sb.toString()); } public void setHint(String s) { ((EditText) findViewById(R.id.editDirPath)).setHint(getProjectDir(s).getAbsolutePath()); } @Override public void afterTextChanged(Editable s) { setHint(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } }