diff -r 0a494f951dcf -r 2e31f114f57e project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MainActivity.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MainActivity.java Thu Jul 26 11:10:56 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MainActivity.java Fri Jul 27 01:38:24 2012 +0200 @@ -34,66 +34,35 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; import android.support.v4.content.LocalBroadcastManager; -import android.text.InputType; -import android.text.method.PasswordTransformationMethod; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; -import android.widget.EditText; import android.widget.Toast; public class MainActivity extends FragmentActivity { private static final int DIALOG_NO_SDCARD = 0; - private static final int DIALOG_START_NETGAME = 1; - private static final int DIALOG_CONNECTING = 2; - private static final int DIALOG_PASSWORD = 3; - - private static final String PREF_PLAYERNAME = "playerName"; private LocalBroadcastManager broadcastManager; - - private Button downloader, startGame; private ProgressDialog assetsDialog; - private String passwordedUsername; // TODO ugly - move dialogs to fragments to get rid of e.g. this public void onCreate(Bundle sis){ super.onCreate(sis); - if(sis != null) { - passwordedUsername = sis.getString(PREF_PLAYERNAME); - } setContentView(R.layout.main); broadcastManager = LocalBroadcastManager.getInstance(getApplicationContext()); - downloader = (Button)findViewById(R.id.downloader); - startGame = (Button)findViewById(R.id.startGame); - Button joinLobby = (Button)findViewById(R.id.joinLobby); + Button startLocalGame = (Button)findViewById(R.id.startGame); + Button startNetGame = (Button)findViewById(R.id.joinLobby); - downloader.setOnClickListener(downloadClicker); - startGame.setOnClickListener(startGameClicker); - joinLobby.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - State state = Netplay.getAppInstance(getApplicationContext()).getState(); - switch(state) { - case NOT_CONNECTED: - showDialog(DIALOG_START_NETGAME); - break; - case CONNECTING: - startWaitingForConnection(); - break; - default: - startActivity(new Intent(getApplicationContext(), LobbyActivity.class)); - break; - } - } - }); + startLocalGame.setOnClickListener(startGameListener); + startNetGame.setOnClickListener(startNetGameListener); if(!Utils.isDataPathAvailable()){ showDialog(DIALOG_NO_SDCARD); @@ -120,15 +89,44 @@ } @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString(PREF_PLAYERNAME, passwordedUsername); + protected void onResume() { + super.onResume(); + broadcastManager.registerReceiver(connectedReceiver, new IntentFilter(Netplay.ACTION_CONNECTED)); + broadcastManager.registerReceiver(connectionFailedReceiver, new IntentFilter(Netplay.ACTION_DISCONNECTED)); + broadcastManager.registerReceiver(passwordRequestedReceiver, new IntentFilter(Netplay.ACTION_PASSWORD_REQUESTED)); } @Override - protected void onDestroy() { - super.onDestroy(); - stopWaitingForConnection(); + protected void onPause() { + super.onPause(); + broadcastManager.unregisterReceiver(connectedReceiver); + broadcastManager.unregisterReceiver(connectionFailedReceiver); + broadcastManager.unregisterReceiver(passwordRequestedReceiver); + Netplay netplay = Netplay.getAppInstance(getApplicationContext()); + if(netplay.getState() == State.CONNECTING) { + netplay.disconnect(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.main_options, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.download: + startActivityForResult(new Intent(getApplicationContext(), DownloadListActivity.class), 0); + return true; + case R.id.preferences: + Toast.makeText(this, R.string.not_implemented_yet, Toast.LENGTH_SHORT).show(); + return true; + default: + return super.onOptionsItemSelected(item); + } } @Override @@ -140,23 +138,13 @@ @Override protected void onStop() { super.onStop(); - Netplay netplay = Netplay.getAppInstance(getApplicationContext()); - netplay.unrequestFastTicks(); - if(netplay.getState() == State.CONNECTING) { - netplay.disconnect(); - } + Netplay.getAppInstance(getApplicationContext()).unrequestFastTicks(); } public Dialog onCreateDialog(int id, Bundle args){ switch(id) { case DIALOG_NO_SDCARD: return createNoSdcardDialog(); - case DIALOG_START_NETGAME: - return createStartNetgameDialog(); - case DIALOG_CONNECTING: - return createConnectingDialog(); - case DIALOG_PASSWORD: - return createPasswordDialog(); default: throw new IndexOutOfBoundsException(); } @@ -174,81 +162,6 @@ return builder.create(); } - - private Dialog createStartNetgameDialog() { - final SharedPreferences prefs = getPreferences(MODE_PRIVATE); - final String playerName = prefs.getString(PREF_PLAYERNAME, "Player"); - final EditText editText = new EditText(this); - final AlertDialog.Builder builder = new AlertDialog.Builder(this); - - editText.setText(playerName); - editText.setHint(R.string.start_netgame_dialog_playername_hint); - editText.setId(android.R.id.text1); - - builder.setTitle(R.string.start_netgame_dialog_title); - builder.setMessage(R.string.start_netgame_dialog_message); - builder.setView(editText); - builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - editText.setText(playerName); - } - }); - builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - String playerName = editText.getText().toString(); - if(playerName.length() > 0) { - Editor edit = prefs.edit(); - edit.putString(PREF_PLAYERNAME, playerName); - edit.commit(); - - startWaitingForConnection(); - Netplay.getAppInstance(getApplicationContext()).connectToDefaultServer(playerName); - } - } - }); - - return builder.create(); - } - - private Dialog createConnectingDialog() { - ProgressDialog dialog = new ProgressDialog(this); - dialog.setOnCancelListener(new OnCancelListener() { - public void onCancel(DialogInterface dialog) { - Netplay.getAppInstance(getApplicationContext()).disconnect(); - } - }); - dialog.setIndeterminate(true); - dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); - dialog.setTitle(R.string.dialog_connecting_title); - dialog.setMessage(getString(R.string.dialog_connecting_message)); - return dialog; - } - - private Dialog createPasswordDialog() { - final AlertDialog.Builder builder = new AlertDialog.Builder(this); - final EditText editText = new EditText(this); - editText.setHint(R.string.dialog_password_hint); - editText.setFreezesText(true); - editText.setId(android.R.id.text1); - editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); - editText.setTransformationMethod(PasswordTransformationMethod.getInstance()); - builder.setView(editText); - builder.setTitle(R.string.dialog_password_title); - builder.setMessage(getString(R.string.dialog_password_message, passwordedUsername)); - builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - String password = editText.getText().toString(); - editText.setText(""); - Netplay.getAppInstance(getApplicationContext()).sendPassword(password); - } - }); - builder.setOnCancelListener(new OnCancelListener() { - public void onCancel(DialogInterface dialog) { - Netplay.getAppInstance(getApplicationContext()).disconnect(); - } - }); - return builder.create(); - } public void onAssetsDownloaded(boolean result){ if(!result){ @@ -257,36 +170,34 @@ assetsDialog.dismiss(); } - private OnClickListener downloadClicker = new OnClickListener(){ - public void onClick(View v){ - startActivityForResult(new Intent(getApplicationContext(), DownloadListActivity.class), 0); - } - }; - - private OnClickListener startGameClicker = new OnClickListener(){ + private final OnClickListener startGameListener = new OnClickListener(){ public void onClick(View v){ startActivity(new Intent(getApplicationContext(), StartGameActivity.class)); } }; - private void startWaitingForConnection() { - broadcastManager.registerReceiver(connectedReceiver, new IntentFilter(Netplay.ACTION_CONNECTED)); - broadcastManager.registerReceiver(connectionFailedReceiver, new IntentFilter(Netplay.ACTION_DISCONNECTED)); - broadcastManager.registerReceiver(passwordRequestedReceiver, new IntentFilter(Netplay.ACTION_PASSWORD_REQUESTED)); - showDialog(DIALOG_CONNECTING); - } - - private void stopWaitingForConnection() { - broadcastManager.unregisterReceiver(connectedReceiver); - broadcastManager.unregisterReceiver(connectionFailedReceiver); - broadcastManager.unregisterReceiver(passwordRequestedReceiver); - } + private final OnClickListener startNetGameListener = new OnClickListener() { + public void onClick(View v) { + State state = Netplay.getAppInstance(getApplicationContext()).getState(); + switch(state) { + case NOT_CONNECTED: + FragmentManager fm = getSupportFragmentManager(); + StartNetgameDialog startNetgameDialog = new StartNetgameDialog(); + startNetgameDialog.show(fm, "start_netgame_dialog"); + break; + case CONNECTING: + onNetConnectingStarted(); + break; + default: + startActivity(new Intent(getApplicationContext(), LobbyActivity.class)); + break; + } + } + }; private BroadcastReceiver connectedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - stopWaitingForConnection(); - dismissDialog(DIALOG_CONNECTING); startActivity(new Intent(getApplicationContext(), LobbyActivity.class)); } }; @@ -294,8 +205,6 @@ private BroadcastReceiver connectionFailedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - stopWaitingForConnection(); - dismissDialog(DIALOG_CONNECTING); if(intent.getBooleanExtra(Netplay.EXTRA_HAS_ERROR, true)) { Toast.makeText(getApplicationContext(), intent.getStringExtra(Netplay.EXTRA_MESSAGE), Toast.LENGTH_LONG).show(); } @@ -305,8 +214,15 @@ private BroadcastReceiver passwordRequestedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - passwordedUsername = intent.getStringExtra(Netplay.EXTRA_PLAYERNAME); - showDialog(DIALOG_PASSWORD); + FragmentManager fm = getSupportFragmentManager(); + PasswordDialog passwordDialog = new PasswordDialog(intent.getStringExtra(Netplay.EXTRA_PLAYERNAME)); + passwordDialog.show(fm, "fragment_password_dialog"); } }; + + public void onNetConnectingStarted() { + FragmentManager fm = getSupportFragmentManager(); + ConnectingDialog connectingDialog = new ConnectingDialog(); + connectingDialog.show(fm, "fragment_connecting_dialog"); + } }