package com.droidwatcher.activity; import java.util.regex.Pattern; import org.json.JSONException; import org.json.JSONObject; import com.droidwatcher.Debug; import com.droidwatcher.R; import com.droidwatcher.ServerMessanger; import com.droidwatcher.SettingsManager; import com.droidwatcher.lib.MessageType; import com.droidwatcher.lib.ServerConst; import com.droidwatcher.variables.ServerMessage; import com.droidwatcher.variables.SimpleServerMessage; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class StartupActivity extends Activity { private SettingsManager settings; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_startup); settings = new SettingsManager(this); if (settings.isConnected()) { startActivity(new Intent(this, MainMenuActivity.class)); finish(); return; } settings.remove(SettingsManager.KEY_IMEI); findViewById(R.id.startup_btn_enter).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { enter(); } }); findViewById(R.id.startup_btn_register).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { register(); } }); } private void enter(){ if (!networkAvailable()) { Toast.makeText(this, R.string.connUnavailable, Toast.LENGTH_LONG).show(); return; } LayoutInflater lInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = lInflater.inflate(R.layout.dialog_email, null); final EditText input = (EditText) view.findViewById(R.id.dialog_input_email); final AlertDialog dialog = new AlertDialog.Builder(this) .setView(view) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { connectionRequset(input.getText().toString()); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); } }) .setTitle(R.string.enterYourLogin) .create(); dialog.show(); } private void register(){ if (!networkAvailable()) { Toast.makeText(this, R.string.connUnavailable, Toast.LENGTH_LONG).show(); return; } LayoutInflater lInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = lInflater.inflate(R.layout.dialog_registration, null); final EditText emailInput = (EditText) view.findViewById(R.id.dialog_input_email); final EditText pwdInput = (EditText) view.findViewById(R.id.dialog_input_pwd); final AlertDialog dialog = new AlertDialog.Builder(this) .setView(view) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); } }) .setTitle(R.string.registration) .create(); dialog.show(); Button dialogBtn = dialog.getButton(DialogInterface.BUTTON_POSITIVE); dialogBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String email = emailInput.getText().toString(); String pwd = pwdInput.getText().toString(); if (!isEmailCorrect(email)) { Toast.makeText(StartupActivity.this, R.string.mailNotMatch, Toast.LENGTH_SHORT).show(); return; } if (pwd.length() < 6){ Toast.makeText(StartupActivity.this, R.string.shortPwd, Toast.LENGTH_SHORT).show(); return; } registrationRequest(email, pwd, dialog); } }); } private void registrationRequest(final String login, String pwd, final AlertDialog dialog){ final ProgressDialog wait = ProgressDialog.show(this, "Registration", "Please wait...", false, false); new ServerMessanger(this, new SimpleServerMessage(MessageType.REGISTER) .addParam("login", login) .addParam("pwd", pwd), new ServerMessanger.ICallBack() { @Override public boolean onFinished(String response) { wait.dismiss(); final VSResponse r = new VSResponse(response); StartupActivity.this.runOnUiThread(new Runnable() { public void run() { if (r.status()){ Toast.makeText(StartupActivity.this, R.string.registrationSuccess, Toast.LENGTH_LONG).show(); dialog.dismiss(); connectionRequset(login); } else{ Toast.makeText(StartupActivity.this, r.message(), Toast.LENGTH_LONG).show(); } } }); return true; } @Override public void onError() { } @Override public void onSuccess() { } }).start(); } private void connectionRequset(String login){ settings.login(login); final ProgressDialog wait = ProgressDialog.show(this, "Connecting", "Please wait...", false, false); new ServerMessanger(this, new ServerMessage(MessageType.CONNECT, settings.imei(), login), new ServerMessanger.ICallBack() { @Override public boolean onFinished(String response) { wait.dismiss(); return false; } @Override public void onError() { StartupActivity.this.runOnUiThread(new Runnable() { public void run() { Toast.makeText(StartupActivity.this, R.string.connLogin, Toast.LENGTH_LONG).show(); } }); } @Override public void onSuccess() { StartupActivity.this.runOnUiThread(new Runnable() { public void run() { startActivity(new Intent(StartupActivity.this, StartupFinalActivity.class)); StartupActivity.this.finish(); } }); } }).start(); } private Boolean networkAvailable(){ ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); return (info != null && info.isConnectedOrConnecting()); } private Boolean isEmailCorrect(String email){ Pattern pattern = Pattern.compile( "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + "\\@" + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + "(" + "\\." + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + ")+" ); return pattern.matcher(email).matches(); } private class VSResponse { private JSONObject jObj; public VSResponse(String response) { try { jObj = new JSONObject(response); } catch (JSONException e) { jObj = new JSONObject(); } } public Boolean status() { if (!jObj.isNull("status")) { try { return jObj.getString("status").equals(ServerConst.OK); } catch (JSONException e) { return false; } } else { return false; } } public String message() { if (!jObj.isNull("message")) { try { return jObj.getString("message"); } catch (Exception e) { return ""; } } else { return ""; } } } }