project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MainActivity.java
changeset 7444 2e31f114f57e
parent 7358 57a508884052
child 7485 0481bd74267c
--- 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");
+	}
 }