From 4474ee26b3eee38d1ad33bb3d771d6f804fedfcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Fri, 2 Mar 2012 16:04:55 +0100 Subject: Move all Android cleasses to com.orbekk.same.android package. --- .../same/android/SameControllerActivity.java | 177 +++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 same-android/src/main/java/com/orbekk/same/android/SameControllerActivity.java (limited to 'same-android/src/main/java/com/orbekk/same/android/SameControllerActivity.java') diff --git a/same-android/src/main/java/com/orbekk/same/android/SameControllerActivity.java b/same-android/src/main/java/com/orbekk/same/android/SameControllerActivity.java new file mode 100644 index 0000000..7700e2f --- /dev/null +++ b/same-android/src/main/java/com/orbekk/same/android/SameControllerActivity.java @@ -0,0 +1,177 @@ +package com.orbekk.same.android; + +import java.util.List; +import java.util.ArrayList; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.orbekk.same.android.R; +import com.orbekk.same.android.net.Broadcaster; + +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.IBinder; +import android.os.Message; +import android.os.Messenger; +import android.os.RemoteException; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +public class SameControllerActivity extends Activity { + private Logger logger = LoggerFactory.getLogger(getClass()); + private Messenger sameService = null; + private List networkNames = new ArrayList(); + private List networkUrls = new ArrayList(); + + private ServiceConnection sameConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + sameService = new Messenger(service); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + sameService = null; + } + }; + + private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public synchronized void onReceive(Context context, Intent intent) { + if (SameService.AVAILABLE_NETWORKS_UPDATE.equals(intent.getAction())) { + networkNames = intent.getStringArrayListExtra( + SameService.AVAILABLE_NETWORKS); + networkUrls = intent.getStringArrayListExtra( + SameService.NETWORK_URLS); + updateNetworkList(); + } + } + }; + + private AdapterView.OnItemClickListener networkListClickListener = + new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + String networkName = networkNames.get(position); + int networkIndex = networkNames.indexOf(networkName); + String masterUrl = networkUrls.get(networkIndex); + joinNetwork(masterUrl); + } + }; + + private void updateNetworkList() { + ListView list = (ListView)findViewById(R.id.network_list); + list.setAdapter(new ArrayAdapter( + SameControllerActivity.this, + R.layout.list_text_item, networkNames)); + } + + + public void createNetwork(View unused) { + Message message = Message.obtain(null, SameService.CREATE_NETWORK); + try { + sameService.send(message); + } catch (RemoteException e) { + logger.error("Failed to create network", e); + throw new RuntimeException(e); + } + } + + public void joinNetworkUrl(View unused) { + String masterUrl = ""; + Intent intent = new Intent(this, SameService.class); + intent.setAction("join"); + EditText t = (EditText)findViewById(R.id.master_service_url); + masterUrl = t.getText().toString(); + if (!masterUrl.startsWith("http://")) { + masterUrl = "http://" + masterUrl; + } + if (!masterUrl.endsWith("/MasterService.json")) { + masterUrl += "/MasterService.json"; + } + joinNetwork(masterUrl); + } + + private void joinNetwork(String masterUrl) { + logger.info("joinNetwork({})", masterUrl); + Message message = Message.obtain(null, SameService.JOIN_NETWORK); + message.getData().putString("masterUrl", masterUrl); + try { + sameService.send(message); + } catch (RemoteException e) { + logger.error("Failed to send message", e); + throw new RuntimeException(e); + } + } + + private void showIpAddress() { + TextView t = (TextView)findViewById(R.id.ipAddress); + t.setText("My IP: "); + t.append(new Broadcaster(this).getWlanAddress().getHostAddress()); + } + + public void doneClicked(View unused) { + finish(); + } + + public void searchNetworks(View unused) { + logger.info("SearchNetworks()"); + Message searchMessage = Message.obtain(null, SameService.SEARCH_NETWORKS); + try { + sameService.send(searchMessage); + } catch (RemoteException e) { + logger.error("Failed to send message", e); + } + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + System.setProperty("java.net.preferIPv4Stack", "true"); + System.setProperty("java.net.preferIPv6Addresses", "false"); + + setContentView(R.layout.controller); + showIpAddress(); + + ListView networkList = (ListView)findViewById(R.id.network_list); + networkList.setOnItemClickListener(networkListClickListener); + } + + @Override public void onResume() { + super.onResume(); + + Intent intent = new Intent(this, SameService.class); + bindService(intent, sameConnection, Context.BIND_AUTO_CREATE); + + IntentFilter sameServiceUpdates = new IntentFilter( + SameService.AVAILABLE_NETWORKS_UPDATE); + registerReceiver(broadcastReceiver, sameServiceUpdates); + } + + @Override public void onStop() { + super.onStop(); + if (sameService != null) { + unbindService(sameConnection); + } + unregisterReceiver(broadcastReceiver); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } +} + -- cgit v1.2.3