diff options
Diffstat (limited to 'android')
4 files changed, 143 insertions, 25 deletions
diff --git a/android/BuildInstructions.md b/android/BuildInstructions.md index 294af561dc8..8b4acec1b1e 100644 --- a/android/BuildInstructions.md +++ b/android/BuildInstructions.md @@ -17,7 +17,7 @@ include pre-compiled JAR files. Building any Ice application for Android requires Android Studio and the Android SDK build tools. We tested with the following components: -- Android Studio 2.4 preview +- Android Studio 3.0 preview - Android SDK 25 - Android Build Tools 26.0.0 rc1 diff --git a/android/controller/src/main/java/com/zeroc/testcontroller/ControllerActivity.java b/android/controller/src/main/java/com/zeroc/testcontroller/ControllerActivity.java index 0dd93d55933..e7001f6f156 100644 --- a/android/controller/src/main/java/com/zeroc/testcontroller/ControllerActivity.java +++ b/android/controller/src/main/java/com/zeroc/testcontroller/ControllerActivity.java @@ -15,13 +15,16 @@ import android.content.Context; import android.net.wifi.WifiManager; import android.os.Bundle; import android.widget.*; +import android.view.View; public class ControllerActivity extends ListActivity { private WifiManager _wifiManager; private WifiManager.MulticastLock _lock; - private LinkedList<String> _strings = new LinkedList<String>(); - private ArrayAdapter<String> _adapter; + private LinkedList<String> _output = new LinkedList<String>(); + private ArrayAdapter<String> _outputAdapter; + private ArrayAdapter<String> _ipv4Adapter; + private ArrayAdapter<String> _ipv6Adapter; @Override public void onCreate(Bundle savedInstanceState) @@ -33,15 +36,52 @@ public class ControllerActivity extends ListActivity _lock = _wifiManager.createMulticastLock("com.zeroc.testcontroller"); _lock.acquire(); - _adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, _strings); - setListAdapter(_adapter); + _outputAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, _output); + setListAdapter(_outputAdapter); final ControllerApp app = (ControllerApp)getApplication(); + final java.util.List<String> ipv4Addresses = app.getAddresses(false); + _ipv4Adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, ipv4Addresses); + Spinner s = (Spinner)findViewById(R.id.ipv4); + s.setAdapter(_ipv4Adapter); + s.setOnItemSelectedListener(new android.widget.AdapterView.OnItemSelectedListener() + { + @Override + public void onItemSelected(AdapterView<?> parent, View view, int position, long id) + { + app.setIpv4Address(ipv4Addresses.get((int)id)); + } + + @Override + public void onNothingSelected(AdapterView<?> arg0) + { + } + }); + s.setSelection(0); + + final java.util.List<String> ipv6Addresses = app.getAddresses(true); + _ipv6Adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, ipv6Addresses); + s = (Spinner)findViewById(R.id.ipv6); + s.setAdapter(_ipv6Adapter); + s.setOnItemSelectedListener(new android.widget.AdapterView.OnItemSelectedListener() + { + @Override + public void onItemSelected(AdapterView<?> parent, View view, int position, long id) + { + app.setIpv6Address(ipv6Addresses.get((int)id)); + } + + @Override + public void onNothingSelected(AdapterView<?> arg0) + { + } + }); + s.setSelection(0); app.startController(this); } public synchronized void println(String data) { - _strings.add(data); - _adapter.notifyDataSetChanged(); + _output.add(data); + _outputAdapter.notifyDataSetChanged(); } } diff --git a/android/controller/src/main/java/com/zeroc/testcontroller/ControllerApp.java b/android/controller/src/main/java/com/zeroc/testcontroller/ControllerApp.java index df3bff2bedb..3c43d86416b 100644 --- a/android/controller/src/main/java/com/zeroc/testcontroller/ControllerApp.java +++ b/android/controller/src/main/java/com/zeroc/testcontroller/ControllerApp.java @@ -10,16 +10,12 @@ package com.zeroc.testcontroller; import java.io.*; -import java.util.Optional; -import java.util.OptionalInt; +import java.util.*; import com.zeroc.Ice.Logger; import com.zeroc.Ice.Communicator; import com.zeroc.IceInternal.Time; -import dalvik.system.DexClassLoader; - -import android.content.Context; import android.os.Build; import android.util.Log; import android.app.Application; @@ -33,6 +29,8 @@ public class ControllerApp extends Application private final String TAG = "ControllerApp"; private ControllerHelper _helper; private ControllerActivity _controller; + private String _ipv4Address; + private String _ipv6Address; static private class TestSuiteBundle { @@ -116,6 +114,44 @@ public class ControllerApp extends Application com.zeroc.Ice.Util.setProcessLogger(new AndroidLogger("")); } + synchronized public void setIpv4Address(String address) + { + _ipv4Address = address; + } + + synchronized public void setIpv6Address(String address) + { + int i = address.indexOf("%"); + _ipv6Address = i == -1 ? address : address.substring(i); + } + + public List<String> getAddresses(boolean ipv6) + { + List<String> addresses = new java.util.ArrayList<String>(); + try + { + java.util.Enumeration<java.net.NetworkInterface> ifaces = java.net.NetworkInterface.getNetworkInterfaces(); + while(ifaces.hasMoreElements()) + { + java.net.NetworkInterface iface = ifaces.nextElement(); + java.util.Enumeration<java.net.InetAddress> addrs = iface.getInetAddresses(); + while (addrs.hasMoreElements()) + { + java.net.InetAddress addr = addrs.nextElement(); + if((ipv6 && addr instanceof java.net.Inet6Address) || + (!ipv6 && !(addr instanceof java.net.Inet6Address))) + { + addresses.add(addr.getHostAddress()); + } + } + } + } + catch(java.net.SocketException ex) + { + } + return addresses; + } + public synchronized void startController(ControllerActivity controller) { if(_helper == null) @@ -166,8 +202,8 @@ public class ControllerApp extends Application initData.properties.setProperty("ControllerAdapter.Endpoints", "tcp"); initData.properties.setProperty("Ice.Trace.Network", "3"); initData.properties.setProperty("Ice.Trace.Protocol", "1"); - initData.properties.setProperty("ControllerAdapter.AdapterId", java.util.UUID.randomUUID().toString()); + initData.properties.setProperty("Ice.Override.ConnectTimeout", "1000"); if(!isEmulator()) { initData.properties.setProperty("Ice.Plugin.IceDiscovery", "IceDiscovery.PluginFactory"); @@ -176,13 +212,13 @@ public class ControllerApp extends Application _communicator = com.zeroc.Ice.Util.initialize(initData); com.zeroc.Ice.ObjectAdapter adapter = _communicator.createObjectAdapter("ControllerAdapter"); ProcessControllerPrx processController = ProcessControllerPrx.uncheckedCast( - adapter.add(new ProcessControllerI("localhost"), + adapter.add(new ProcessControllerI(), com.zeroc.Ice.Util.stringToIdentity("Android/ProcessController"))); adapter.activate(); if(isEmulator()) { ProcessControllerRegistryPrx registry = ProcessControllerRegistryPrx.uncheckedCast( - _communicator.stringToProxy("Util/ProcessControllerRegistry:tcp -h 10.0.2.2 -p 15001").ice_invocationTimeout(300)); + _communicator.stringToProxy("Util/ProcessControllerRegistry:tcp -h 10.0.2.2 -p 15001")); registerProcessController(adapter, registry, processController); } println("Android/ProcessController"); @@ -427,11 +463,6 @@ public class ControllerApp extends Application class ProcessControllerI implements Test.Common.ProcessController { - public ProcessControllerI(String hostname) - { - _hostname = hostname; - } - public Test.Common.ProcessPrx start(final String testsuite, final String exe, String[] args, com.zeroc.Ice.Current current) throws Test.Common.ProcessFailedException @@ -453,13 +484,20 @@ public class ControllerApp extends Application } } - public String getHost(String protocol, boolean ipv6, - com.zeroc.Ice.Current current) + public String getHost(String protocol, boolean ipv6, com.zeroc.Ice.Current current) { - return _hostname; + if(isEmulator()) + { + return "127.0.0.1"; + } + else + { + synchronized(ControllerApp.this) + { + return ipv6 ? _ipv6Address : _ipv4Address; + } + } } - - private String _hostname; } class ProcessI implements Test.Common.Process diff --git a/android/controller/src/main/res/layout/main.xml b/android/controller/src/main/res/layout/main.xml index dbc955a25d5..df4c8db98c7 100644 --- a/android/controller/src/main/res/layout/main.xml +++ b/android/controller/src/main/res/layout/main.xml @@ -5,6 +5,46 @@ android:layout_width="fill_parent" android:layout_height="fill_parent"> + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingBottom="5dip"> + <TextView + android:layout_width="5dip" + android:layout_weight="25" + android:layout_height="wrap_content" + android:text="IPv4" + android:layout_gravity="center_vertical"/> + + <Spinner + android:id="@+id/ipv4" + android:layout_width="5dip" + android:layout_weight="75" + android:layout_height="wrap_content" + android:drawSelectorOnTop="false"/> + </LinearLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingBottom="5dip"> + <TextView + android:layout_width="0dip" + android:layout_weight="25" + android:layout_height="wrap_content" + android:text="IPv6" + android:layout_gravity="center_vertical"/> + + <Spinner + android:id="@+id/ipv6" + android:layout_width="0dip" + android:layout_weight="75" + android:layout_height="wrap_content" + android:drawSelectorOnTop="false"/> + </LinearLayout> + <ListView android:id="@android:id/list" android:layout_width="fill_parent" |