summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/.idea/modules.xml1
-rw-r--r--android/demo/chat/build.gradle7
-rw-r--r--android/demo/chat/chat.iml3
-rw-r--r--android/demo/chat/src/main/java/com/zeroc/chat/ChatActivity.java37
-rw-r--r--android/demo/chat/src/main/java/com/zeroc/chat/ChatUtils.java14
-rw-r--r--android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java120
-rw-r--r--android/demo/chat/src/main/java/com/zeroc/chat/SessionActivity.java72
-rw-r--r--android/demo/chat/src/main/java/com/zeroc/chat/UserViewActivity.java4
-rw-r--r--android/demo/chat/src/main/java/com/zeroc/chat/service/ChatService.java15
-rw-r--r--android/demo/hello/build.gradle7
-rw-r--r--android/demo/hello/hello.iml3
-rw-r--r--android/demo/hello/src/main/java/com/zeroc/hello/DeliveryMode.java58
-rw-r--r--android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java346
-rw-r--r--android/demo/hello/src/main/java/com/zeroc/hello/HelloWorld.java743
-rw-r--r--android/demo/library/build.gradle7
-rw-r--r--android/demo/library/library.iml3
-rw-r--r--android/demo/library/src/main/java/com/zeroc/library/EditActivity.java81
-rw-r--r--android/demo/library/src/main/java/com/zeroc/library/LibraryActivity.java4
-rw-r--r--android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java83
-rw-r--r--android/demo/library/src/main/java/com/zeroc/library/SessionActivity.java130
-rw-r--r--android/demo/library/src/main/java/com/zeroc/library/ViewActivity.java150
-rw-r--r--android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java8
-rw-r--r--android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java68
-rw-r--r--android/test/android/testApp.iml1
-rw-r--r--android/test/plugins/testPlugins.iml1
25 files changed, 1012 insertions, 954 deletions
diff --git a/android/.idea/modules.xml b/android/.idea/modules.xml
index 90e9d3fc59f..2f31308dd93 100644
--- a/android/.idea/modules.xml
+++ b/android/.idea/modules.xml
@@ -17,7 +17,6 @@
<module fileurl="file://$PROJECT_DIR$/test/test.iml" filepath="$PROJECT_DIR$/test/test.iml" />
<module fileurl="file://$PROJECT_DIR$/test/android/testApp.iml" filepath="$PROJECT_DIR$/test/android/testApp.iml" />
<module fileurl="file://$PROJECT_DIR$/test/plugins/testPlugins.iml" filepath="$PROJECT_DIR$/test/plugins/testPlugins.iml" />
- <module fileurl="file://$PROJECT_DIR$/test/src/test_Ice_acm/test_Ice_acm.iml" filepath="$PROJECT_DIR$/test/src/test_Ice_acm/test_Ice_acm.iml" />
</modules>
</component>
</project>
diff --git a/android/demo/chat/build.gradle b/android/demo/chat/build.gradle
index acd32e1f7eb..2e7bed06d67 100644
--- a/android/demo/chat/build.gradle
+++ b/android/demo/chat/build.gradle
@@ -11,6 +11,8 @@ apply plugin: 'com.android.application'
apply from: "$rootProject.projectDir/../java/gradle/ice.gradle"
apply plugin: 'slice'
+project.slice.output = project.file("${project.buildDir}/generated/source/ice")
+
slice {
java {
set1 {
@@ -60,11 +62,6 @@ clean {
delete("src/main/res/raw/client.bks")
}
-idea.module {
- excludeDirs -= file(buildDir)
- buildDir.listFiles({d, f ->f != 'generated-src'} as FilenameFilter).each { excludeDirs += it }
-}
-
dependencies {
compile localDependency('ice')
compile localDependency('glacier2')
diff --git a/android/demo/chat/chat.iml b/android/demo/chat/chat.iml
index 568a2dbfd66..71b061541f7 100644
--- a/android/demo/chat/chat.iml
+++ b/android/demo/chat/chat.iml
@@ -50,7 +50,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated-src" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/ice" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
@@ -60,7 +60,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/build/generated-src" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/ChatActivity.java b/android/demo/chat/src/main/java/com/zeroc/chat/ChatActivity.java
index 68684261cd5..5067ff8fab1 100644
--- a/android/demo/chat/src/main/java/com/zeroc/chat/ChatActivity.java
+++ b/android/demo/chat/src/main/java/com/zeroc/chat/ChatActivity.java
@@ -14,6 +14,7 @@ import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
@@ -31,11 +32,10 @@ import com.zeroc.chat.service.ChatRoomListener;
public class ChatActivity extends SessionActivity
{
- private static final int DIALOG_MESSAGE_TOO_LONG = 2;
-
private static final int USERS_ID = Menu.FIRST;
private static final int LOGOUT_ID = Menu.FIRST + 1;
private static final int MAX_MESSAGE_SIZE = 1024;
+ public static final String MESSAGE_TOO_LONG_TAG = "mtl";
private EditText _text;
private ArrayAdapter<String> _adapter;
@@ -65,12 +65,12 @@ public class ChatActivity extends SessionActivity
public void error()
{
- showDialog(DIALOG_FATAL);
+ showDialogFatal();
}
public void inactivity()
{
- showDialog(DIALOG_FATAL);
+ showDialogFatal();
}
private void add(final String msg)
@@ -84,6 +84,18 @@ public class ChatActivity extends SessionActivity
}
};
+ public static class MessageTooLongDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage("Message length exceeded, maximum length is " + MAX_MESSAGE_SIZE + " characters.");
+ return builder.create();
+ }
+ }
+
@Override
ChatRoomListener getChatRoomListener()
{
@@ -173,20 +185,6 @@ public class ChatActivity extends SessionActivity
return super.onOptionsItemSelected(item);
}
- @Override
- protected Dialog onCreateDialog(final int id)
- {
- if(id == DIALOG_MESSAGE_TOO_LONG)
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage("Message length exceeded, maximum length is " + MAX_MESSAGE_SIZE + " characters.");
- return builder.create();
- }
-
- return super.onCreateDialog(id);
- }
-
private void sendText()
{
String t = _text.getText().toString().trim();
@@ -196,7 +194,8 @@ public class ChatActivity extends SessionActivity
}
if(t.length() > MAX_MESSAGE_SIZE)
{
- showDialog(DIALOG_MESSAGE_TOO_LONG);
+ DialogFragment dialog = new MessageTooLongDialogFragment();
+ dialog.show(getFragmentManager(), MESSAGE_TOO_LONG_TAG);
return;
}
_text.setText("");
diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/ChatUtils.java b/android/demo/chat/src/main/java/com/zeroc/chat/ChatUtils.java
index cbeaac3c5f6..93a6b7130b4 100644
--- a/android/demo/chat/src/main/java/com/zeroc/chat/ChatUtils.java
+++ b/android/demo/chat/src/main/java/com/zeroc/chat/ChatUtils.java
@@ -36,17 +36,5 @@ public class ChatUtils
dtf.setTimeZone(TimeZone.getDefault());
return dtf.format(new Date(timestamp));
}
-
- public static String formatUsername(String in)
- {
- try
- {
- in = in.substring(0, 1).toUpperCase() + in.substring(1, in.length()).toLowerCase();
- }
- catch(IndexOutOfBoundsException ex)
- {
- }
- return in;
- }
-};
+}
diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java b/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java
index e2ad3c64eff..571bda90060 100644
--- a/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java
+++ b/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java
@@ -12,6 +12,7 @@ package com.zeroc.chat;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
@@ -24,7 +25,6 @@ import android.text.TextWatcher;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
-import android.os.Build.VERSION;
import com.zeroc.chat.service.ChatService;
import com.zeroc.chat.service.Service;
@@ -32,16 +32,14 @@ import com.zeroc.chat.service.SessionListener;
public class LoginActivity extends Activity
{
- private static final int DIALOG_ERROR = 1;
- private static final int DIALOG_CONFIRM = 2;
- private static final int DIALOG_INVALID_HOST = 3;
-
private static final String DEFAULT_HOST = "demo.zeroc.com";
private static final boolean DEFAULT_SECURE = false;
private static final String HOSTNAME_KEY = "host";
private static final String USERNAME_KEY = "username";
private static final String PASSWORD_KEY = "password";
private static final String SECURE_KEY = "secure";
+ public static final String LOGIN_ERROR_TAG = "loginerror";
+ public static final String INVALID_HOST_TAG = "invalidhost";
private Button _login;
private EditText _hostname;
@@ -54,6 +52,51 @@ public class LoginActivity extends Activity
private Service _service;
private Intent _chatServiceIntent;
+ public static class LoginErrorDialogFragment extends DialogFragment
+ {
+ public static LoginErrorDialogFragment newInstance(String message)
+ {
+ LoginErrorDialogFragment frag = new LoginErrorDialogFragment();
+ Bundle args = new Bundle();
+ args.putString("message", message);
+ frag.setArguments(args);
+ return frag;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(getArguments().getString("message"))
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((LoginActivity) getActivity()).loginErrorOk();
+ }
+ });
+ return builder.create();
+ }
+ }
+
+ public static class InvalidHostDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage("The hostname is invalid.")
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ }
+ });
+ return builder.create();
+ }
+ }
+
private SessionListener _listener = new SessionListener()
{
public void onLoginInProgress()
@@ -64,7 +107,6 @@ public class LoginActivity extends Activity
public void onConnectConfirm()
{
- showDialog(DIALOG_CONFIRM);
}
public void onLogin()
@@ -75,7 +117,9 @@ public class LoginActivity extends Activity
public void onLoginError()
{
setLoginState();
- showDialog(DIALOG_ERROR);
+ DialogFragment dialog = LoginErrorDialogFragment.newInstance(
+ (_service != null) ? _service.getLoginError() : "");
+ dialog.show(getFragmentManager(), LOGIN_ERROR_TAG);
}
};
@@ -99,6 +143,12 @@ public class LoginActivity extends Activity
}
};
+ private void loginErrorOk()
+ {
+ _loginInProgress = false;
+ setLoginState();
+ }
+
private void setLoginState()
{
if(_loginInProgress)
@@ -128,7 +178,8 @@ public class LoginActivity extends Activity
final String ipre = "^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
if(!hostname.matches(hostre) && !hostname.matches(ipre))
{
- showDialog(DIALOG_INVALID_HOST);
+ DialogFragment dialog = new InvalidHostDialogFragment();
+ dialog.show(getFragmentManager(), INVALID_HOST_TAG);
return;
}
@@ -150,7 +201,7 @@ public class LoginActivity extends Activity
{
edit.putBoolean(SECURE_KEY, secure);
}
- edit.commit();
+ edit.apply();
_login.setEnabled(false);
@@ -248,55 +299,4 @@ public class LoginActivity extends Activity
_chatServiceIntent = new Intent(LoginActivity.this, ChatService.class);
startService(_chatServiceIntent);
}
-
- @Override
- protected Dialog onCreateDialog(int id)
- {
- switch (id)
- {
- case DIALOG_ERROR:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage(""); // Details provided in onPrepareDialog
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- _loginInProgress = false;
- setLoginState();
- }
- });
- return builder.create();
- }
-
- case DIALOG_INVALID_HOST:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage("The hostname is invalid.");
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- }
- });
- return builder.create();
- }
-
- }
-
- return null;
- }
-
- @Override
- protected void onPrepareDialog(int id, Dialog dialog)
- {
- super.onPrepareDialog(id, dialog);
- if(id == DIALOG_ERROR)
- {
- AlertDialog alert = (AlertDialog)dialog;
- alert.setMessage(_service.getLoginError());
- }
- }
}
diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/SessionActivity.java b/android/demo/chat/src/main/java/com/zeroc/chat/SessionActivity.java
index 04346df8d53..32182db6f51 100644
--- a/android/demo/chat/src/main/java/com/zeroc/chat/SessionActivity.java
+++ b/android/demo/chat/src/main/java/com/zeroc/chat/SessionActivity.java
@@ -9,6 +9,8 @@
package com.zeroc.chat;
+import android.app.DialogFragment;
+import android.os.Bundle;
import com.zeroc.chat.service.ChatRoomListener;
import com.zeroc.chat.service.ChatService;
import com.zeroc.chat.service.NoSessionException;
@@ -26,12 +28,41 @@ import android.os.IBinder;
// Base of any activities that use the chat session.
public abstract class SessionActivity extends Activity
{
- protected static final int DIALOG_FATAL = 1;
+ private static final String FATAL_TAG = "fatal";
protected Service _service;
abstract ChatRoomListener getChatRoomListener();
abstract boolean replayEvents();
+ public static class FatalDialogFragment extends DialogFragment
+ {
+ public static FatalDialogFragment newInstance(String message)
+ {
+ FatalDialogFragment frag = new FatalDialogFragment();
+ Bundle args = new Bundle();
+ args.putString("message", message);
+ frag.setArguments(args);
+ return frag;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage(getArguments().getString("message"))
+ .setCancelable(false)
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((SessionActivity) getActivity()).fatalOk();
+ }
+ });
+ return builder.create();
+ }
+ }
+
final private ServiceConnection _connection = new ServiceConnection()
{
public void onServiceConnected(ComponentName name, IBinder service)
@@ -77,41 +108,16 @@ public abstract class SessionActivity extends Activity
}
}
- @Override
- protected Dialog onCreateDialog(final int id)
+ void showDialogFatal()
{
- switch(id)
- {
- case DIALOG_FATAL:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage(""); // Details provided in onPrepareDialog
- builder.setCancelable(false);
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- _service.logout();
- finish();
- }
- });
- return builder.create();
- }
-
- }
-
- return null;
+ DialogFragment dialog = FatalDialogFragment.newInstance(
+ (_service != null) ? _service.getSessionError() : "");
+ dialog.show(getFragmentManager(), FATAL_TAG);
}
- @Override
- protected void onPrepareDialog(int id, Dialog dialog)
+ private void fatalOk()
{
- super.onPrepareDialog(id, dialog);
- if(id == DIALOG_FATAL)
- {
- AlertDialog alert = (AlertDialog)dialog;
- alert.setMessage(_service.getSessionError());
- }
+ _service.logout();
+ finish();
}
}
diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/UserViewActivity.java b/android/demo/chat/src/main/java/com/zeroc/chat/UserViewActivity.java
index 05c1eb5e476..2dde575de64 100644
--- a/android/demo/chat/src/main/java/com/zeroc/chat/UserViewActivity.java
+++ b/android/demo/chat/src/main/java/com/zeroc/chat/UserViewActivity.java
@@ -48,12 +48,12 @@ public class UserViewActivity extends SessionActivity
public void error()
{
- showDialog(DIALOG_FATAL);
+ showDialogFatal();
}
public void inactivity()
{
- showDialog(DIALOG_FATAL);
+ showDialogFatal();
}
};
diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/service/ChatService.java b/android/demo/chat/src/main/java/com/zeroc/chat/service/ChatService.java
index d13df3cc7aa..2714e04d9b1 100644
--- a/android/demo/chat/src/main/java/com/zeroc/chat/service/ChatService.java
+++ b/android/demo/chat/src/main/java/com/zeroc/chat/service/ChatService.java
@@ -62,11 +62,11 @@ public class ChatService extends Service implements com.zeroc.chat.service.Servi
}
@Override
- synchronized public void onStart(Intent intent, int startId)
+ synchronized public int onStartCommand(Intent intent, int flags, int startId)
{
// Find out if we were started by the alarm manager
// to refresh the current session.
- if(intent.hasExtra(REFRESH_EXTRA))
+ if(intent != null && intent.hasExtra(REFRESH_EXTRA))
{
// If there is no associated session, or the refresh failed then
// mark the session as destroyed.
@@ -75,6 +75,7 @@ public class ChatService extends Service implements com.zeroc.chat.service.Servi
sessionDestroyed();
}
}
+ return START_STICKY;
}
// Called only from the UI thread.
@@ -229,9 +230,13 @@ public class ChatService extends Service implements com.zeroc.chat.service.Servi
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, refreshTimeout, sender);
// Display a notification that the user is logged in.
- Notification notification = new Notification(R.drawable.stat_notify, "Logged In", System.currentTimeMillis());
- PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, ChatActivity.class), 0);
- notification.setLatestEventInfo(this, "Chat Demo", "You are logged into " + hostname, contentIntent);
+ Notification notification = new Notification.Builder(this)
+ .setSmallIcon(R.drawable.stat_notify)
+ .setContentText("Logged In")
+ .setWhen(System.currentTimeMillis())
+ .setContentTitle("You are logged into " + hostname)
+ .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, ChatActivity.class), 0))
+ .build();
NotificationManager n = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
n.notify(CHATACTIVE_NOTIFICATION, notification);
diff --git a/android/demo/hello/build.gradle b/android/demo/hello/build.gradle
index b2c081c0d47..bae1e12a763 100644
--- a/android/demo/hello/build.gradle
+++ b/android/demo/hello/build.gradle
@@ -11,6 +11,8 @@ apply plugin: 'com.android.application'
apply from: "$rootProject.projectDir/../java/gradle/ice.gradle"
apply plugin: 'slice'
+project.slice.output = project.file("${project.buildDir}/generated/source/ice")
+
slice {
java {
set1 {
@@ -59,11 +61,6 @@ clean {
delete("src/main/res/raw/client.bks")
}
-idea.module {
- excludeDirs -= file(buildDir)
- buildDir.listFiles({d, f ->f != 'generated-src'} as FilenameFilter).each { excludeDirs += it }
-}
-
dependencies {
compile localDependency('ice')
}
diff --git a/android/demo/hello/hello.iml b/android/demo/hello/hello.iml
index 699fa69f35f..1f729233340 100644
--- a/android/demo/hello/hello.iml
+++ b/android/demo/hello/hello.iml
@@ -50,7 +50,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated-src" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/ice" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
@@ -60,7 +60,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/build/generated-src" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
diff --git a/android/demo/hello/src/main/java/com/zeroc/hello/DeliveryMode.java b/android/demo/hello/src/main/java/com/zeroc/hello/DeliveryMode.java
new file mode 100644
index 00000000000..aa48fb7155c
--- /dev/null
+++ b/android/demo/hello/src/main/java/com/zeroc/hello/DeliveryMode.java
@@ -0,0 +1,58 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+package com.zeroc.hello;
+
+enum DeliveryMode
+{
+ TWOWAY,
+ TWOWAY_SECURE,
+ ONEWAY,
+ ONEWAY_BATCH,
+ ONEWAY_SECURE,
+ ONEWAY_SECURE_BATCH,
+ DATAGRAM,
+ DATAGRAM_BATCH;
+
+ Ice.ObjectPrx apply(Ice.ObjectPrx prx)
+ {
+ switch (this)
+ {
+ case TWOWAY:
+ prx = prx.ice_twoway();
+ break;
+ case TWOWAY_SECURE:
+ prx = prx.ice_twoway().ice_secure(true);
+ break;
+ case ONEWAY:
+ prx = prx.ice_oneway();
+ break;
+ case ONEWAY_BATCH:
+ prx = prx.ice_batchOneway();
+ break;
+ case ONEWAY_SECURE:
+ prx = prx.ice_oneway().ice_secure(true);
+ break;
+ case ONEWAY_SECURE_BATCH:
+ prx = prx.ice_batchOneway().ice_secure(true);
+ break;
+ case DATAGRAM:
+ prx = prx.ice_datagram();
+ break;
+ case DATAGRAM_BATCH:
+ prx = prx.ice_batchDatagram();
+ break;
+ }
+ return prx;
+ }
+
+ public boolean isBatch()
+ {
+ return this == ONEWAY_BATCH || this == DATAGRAM_BATCH || this == ONEWAY_SECURE_BATCH;
+ }
+}
diff --git a/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java b/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java
index f4887ec0030..506ac464f50 100644
--- a/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java
+++ b/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java
@@ -9,23 +9,64 @@
package com.zeroc.hello;
+import Ice.Communicator;
import android.app.Application;
import android.os.Build.VERSION;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+import java.util.LinkedList;
+import java.util.List;
public class HelloApp extends Application
{
- interface CommunicatorCallback
+ static class MessageReady
{
- void onWait();
- void onCreate(Ice.Communicator communicator);
- void onError(Ice.LocalException ex);
+ MessageReady(Communicator c, Ice.LocalException e)
+ {
+ communicator = c;
+ ex = e;
+ }
+
+ Communicator communicator;
+ Ice.LocalException ex;
}
- /** Called when the application is starting, before any other application objects have been created. */
@Override
public void onCreate()
{
super.onCreate();
+ _uiHandler = new Handler(Looper.getMainLooper())
+ {
+ @Override
+ public void handleMessage(Message m)
+ {
+ if(m.what == MSG_READY)
+ {
+ MessageReady ready = (MessageReady)m.obj;
+ _initialized = true;
+ _communicator = ready.communicator;
+ _ex = ready.ex;
+ }
+ else if(m.what == MSG_EXCEPTION || m.what == MSG_RESPONSE)
+ {
+ _result = null;
+ }
+
+ Message copy = new Message();
+ copy.copyFrom(m);
+
+ if(_handler != null)
+ {
+ _handler.sendMessage(copy);
+ }
+ else
+ {
+ _queue.add(copy);
+ }
+ }
+ };
// SSL initialization can take some time. To avoid blocking the
// calling thread, we perform the initialization in a separate thread.
@@ -33,7 +74,44 @@ public class HelloApp extends Application
{
public void run()
{
- initializeCommunicator();
+ try
+ {
+ Ice.InitializationData initData = new Ice.InitializationData();
+ initData.properties = Ice.Util.createProperties();
+ initData.properties.setProperty("Ice.Trace.Network", "3");
+
+ initData.properties.setProperty("IceSSL.Trace.Security", "3");
+ initData.properties.setProperty("IceSSL.KeystoreType", "BKS");
+ initData.properties.setProperty("IceSSL.TruststoreType", "BKS");
+ initData.properties.setProperty("IceSSL.Password", "password");
+ initData.properties.setProperty("Ice.InitPlugins", "0");
+ initData.properties.setProperty("Ice.Plugin.IceSSL", "IceSSL.PluginFactory");
+
+ // SDK versions < 21 only support TLSv1 with SSLEngine.
+ if(VERSION.SDK_INT < 21)
+ {
+ initData.properties.setProperty("IceSSL.Protocols", "tls1_0");
+ }
+
+ Ice.Communicator c = Ice.Util.initialize(initData);
+ IceSSL.Plugin plugin = (IceSSL.Plugin)c.getPluginManager().getPlugin("IceSSL");
+ //
+ // Be sure to pass the same input stream to the SSL plug-in for
+ // both the keystore and the truststore. This makes startup a
+ // little faster since the plugin will not initialize
+ // two keystores.
+ //
+ java.io.InputStream certs = getResources().openRawResource(R.raw.client);
+ plugin.setKeystoreStream(certs);
+ plugin.setTruststoreStream(certs);
+ c.getPluginManager().initializePlugins();
+
+ _uiHandler.sendMessage(Message.obtain(_uiHandler, MSG_READY, new MessageReady(c, null)));
+ }
+ catch(Ice.LocalException e)
+ {
+ _uiHandler.sendMessage(Message.obtain(_uiHandler, MSG_READY, new MessageReady(null, e)));
+ }
}
}).start();
}
@@ -55,89 +133,237 @@ public class HelloApp extends Application
}
}
- public void
- setCommunicatorCallback(CommunicatorCallback cb)
+ void setHandler(Handler handler)
{
- if(_initialized)
+ // Nothing to do in this case.
+ if(_handler != handler)
{
- if(_ex != null)
- {
- cb.onError(_ex);
- }
- else
+ _handler = handler;
+
+ if(_handler != null)
{
- cb.onCreate(_communicator);
+ if(!_initialized)
+ {
+ _handler.sendMessage(_handler.obtainMessage(MSG_WAIT));
+ }
+ else
+ {
+ // Send all the queued messages.
+ while(!_queue.isEmpty())
+ {
+ _handler.sendMessage(_queue.remove(0));
+ }
+ }
}
}
- else
+ }
+
+ void setHost(String host)
+ {
+ _host = host;
+ _proxy = null;
+ }
+
+ void setTimeout(int timeout)
+ {
+ _timeout = timeout;
+ _proxy = null;
+ }
+
+ void setDeliveryMode(DeliveryMode mode)
+ {
+ _mode = mode;
+ _proxy = null;
+ }
+
+ void flush()
+ {
+ try
{
- _cb = cb;
- _cb.onWait();
+ _communicator.begin_flushBatchRequests();
+ }
+ catch(final Ice.LocalException ex)
+ {
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
}
}
- private void initializeCommunicator()
+ void shutdown()
{
try
{
- Ice.Communicator communicator;
- Ice.InitializationData initData = new Ice.InitializationData();
- initData.properties = Ice.Util.createProperties();
- initData.properties.setProperty("Ice.Trace.Network", "3");
+ updateProxy();
+ if(_proxy == null)
+ {
+ return;
+ }
+ _proxy.shutdown();
+ }
+ catch(Ice.LocalException ex)
+ {
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
+ }
- initData.properties.setProperty("IceSSL.Trace.Security", "3");
- initData.properties.setProperty("IceSSL.KeystoreType", "BKS");
- initData.properties.setProperty("IceSSL.TruststoreType", "BKS");
- initData.properties.setProperty("IceSSL.Password", "password");
- initData.properties.setProperty("Ice.InitPlugins", "0");
- initData.properties.setProperty("Ice.Plugin.IceSSL", "IceSSL.PluginFactory");
+ }
- // SDK versions < 21 only support TLSv1 with SSLEngine.
- if(VERSION.SDK_INT < 21)
+ void shutdownAsync()
+ {
+ try
+ {
+ updateProxy();
+ if(_proxy == null || _result != null)
{
- initData.properties.setProperty("IceSSL.Protocols", "tls1_0");
+ return;
}
- communicator = Ice.Util.initialize(initData);
-
- IceSSL.Plugin plugin = (IceSSL.Plugin)communicator.getPluginManager().getPlugin("IceSSL");
- //
- // Be sure to pass the same input stream to the SSL plug-in for
- // both the keystore and the truststore. This makes startup a
- // little faster since the plugin will not initialize
- // two keystores.
- //
- java.io.InputStream certs = getResources().openRawResource(R.raw.client);
- plugin.setKeystoreStream(certs);
- plugin.setTruststoreStream(certs);
- communicator.getPluginManager().initializePlugins();
-
- synchronized(this)
+ _resultMode = _mode;
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_SENDING));
+ _result = _proxy.begin_shutdown(new Demo.Callback_Hello_shutdown()
{
- _communicator = communicator;
- if(_cb != null)
+ @Override
+ synchronized public void exception(final Ice.LocalException ex)
+ {
+ _response = true;
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
+ }
+
+ @Override
+ synchronized public void response()
+ {
+ _response = true;
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_RESPONSE));
+ }
+
+ @Override
+ synchronized public void sent(boolean sentSynchronously)
{
- _cb.onCreate(_communicator);
+ if(!_response)
+ {
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_SENT, _resultMode));
+ }
}
- _initialized = true;
+ // There is no ordering guarantee between sent, response/exception.
+ private boolean _response = false;
+ });
+ }
+ catch(Ice.LocalException ex)
+ {
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
+ }
+ }
+
+ void sayHello(int delay)
+ {
+ try
+ {
+ updateProxy();
+ if(_proxy == null || _result != null)
+ {
+ return;
}
+
+ _proxy.begin_sayHello(delay);
}
catch(Ice.LocalException ex)
{
- synchronized(this)
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
+ }
+ }
+
+ void sayHelloAsync(int delay)
+ {
+ try
+ {
+ updateProxy();
+ if(_proxy == null || _result != null)
{
- if(_cb != null)
- {
- _cb.onError(ex);
- }
- _ex = ex;
- _initialized = true;
+ return;
}
+
+ _resultMode = _mode;
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_SENDING));
+ _result = _proxy.begin_sayHello(delay,
+ new Demo.Callback_Hello_sayHello()
+ {
+ @Override
+ synchronized public void exception(final Ice.LocalException ex)
+ {
+ _response = true;
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
+ }
+
+ @Override
+ synchronized public void response()
+ {
+ _response = true;
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_RESPONSE));
+ }
+
+ @Override
+ synchronized public void sent(boolean sentSynchronously)
+ {
+ if(!_response)
+ {
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_SENT, _resultMode));
+ }
+ }
+ // There is no ordering guarantee between sent, response/exception.
+ private boolean _response = false;
+ });
+ }
+ catch(Ice.LocalException ex)
+ {
+ _uiHandler.sendMessage(_uiHandler.obtainMessage(MSG_EXCEPTION, ex));
}
}
- private Ice.Communicator _communicator;
+ private void updateProxy()
+ {
+ if(_proxy != null)
+ {
+ return;
+ }
+
+ String s = "hello:tcp -h " + _host + " -p 10000:ssl -h " + _host + " -p 10001:udp -h " + _host + " -p 10000";
+ Ice.ObjectPrx prx = _communicator.stringToProxy(s);
+ prx = _mode.apply(prx);
+ if(_timeout != 0)
+ {
+ prx = prx.ice_invocationTimeout(_timeout);
+ }
+
+ _proxy = Demo.HelloPrxHelper.uncheckedCast(prx);
+ }
+
+ DeliveryMode getDeliveryMode()
+ {
+ return _mode;
+ }
+
+ public static final int MSG_WAIT = 0;
+ public static final int MSG_READY = 1;
+ public static final int MSG_EXCEPTION = 2;
+ public static final int MSG_RESPONSE = 3;
+ public static final int MSG_SENDING = 4;
+ public static final int MSG_SENT = 5;
+
+ private List<Message> _queue = new LinkedList<Message>();
+ private Handler _uiHandler;
+
private boolean _initialized;
+ private Ice.Communicator _communicator;
+ private Demo.HelloPrx _proxy = null;
+
+ // The current request if any.
+ private Ice.AsyncResult _result;
+ // The mode of the current request.
+ private DeliveryMode _resultMode;
+
private Ice.LocalException _ex;
- private CommunicatorCallback _cb;
+ private Handler _handler;
+
+ // Proxy settings.
+ private String _host;
+ private int _timeout;
+ private DeliveryMode _mode;
}
diff --git a/android/demo/hello/src/main/java/com/zeroc/hello/HelloWorld.java b/android/demo/hello/src/main/java/com/zeroc/hello/HelloWorld.java
index 0f6f0aa04c7..7a9878526d3 100644
--- a/android/demo/hello/src/main/java/com/zeroc/hello/HelloWorld.java
+++ b/android/demo/hello/src/main/java/com/zeroc/hello/HelloWorld.java
@@ -9,13 +9,14 @@
package com.zeroc.hello;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.ProgressDialog;
+import Ice.LocalException;
+import android.app.*;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
@@ -32,433 +33,207 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
public class HelloWorld extends Activity
{
- enum DeliveryMode
+ public static class ErrorDialogFragment extends DialogFragment
{
- TWOWAY,
- TWOWAY_SECURE,
- ONEWAY,
- ONEWAY_BATCH,
- ONEWAY_SECURE,
- ONEWAY_SECURE_BATCH,
- DATAGRAM,
- DATAGRAM_BATCH;
-
- Ice.ObjectPrx apply(Ice.ObjectPrx prx)
- {
- switch (this)
- {
- case TWOWAY:
- prx = prx.ice_twoway();
- break;
- case TWOWAY_SECURE:
- prx = prx.ice_twoway().ice_secure(true);
- break;
- case ONEWAY:
- prx = prx.ice_oneway();
- break;
- case ONEWAY_BATCH:
- prx = prx.ice_batchOneway();
- break;
- case ONEWAY_SECURE:
- prx = prx.ice_oneway().ice_secure(true);
- break;
- case ONEWAY_SECURE_BATCH:
- prx = prx.ice_batchOneway().ice_secure(true);
- break;
- case DATAGRAM:
- prx = prx.ice_datagram();
- break;
- case DATAGRAM_BATCH:
- prx = prx.ice_batchDatagram();
- break;
- }
- return prx;
- }
-
- public boolean isBatch()
- {
- return this == ONEWAY_BATCH || this == DATAGRAM_BATCH || this == ONEWAY_SECURE_BATCH;
- }
- }
-
- private void updateProxy()
- {
- if(_communicator == null)
- {
- return;
- }
-
- String host = _host.getText().toString().trim();
- assert (!host.isEmpty());
-
- // Change the preferences if necessary.
- if(!_prefs.getString(HOSTNAME_KEY, DEFAULT_HOST).equals(host))
- {
- SharedPreferences.Editor edit = _prefs.edit();
- edit.putString(HOSTNAME_KEY, host);
- edit.commit();
- }
-
- String s = "hello:tcp -h " + host + " -p 10000:ssl -h " + host + " -p 10001:udp -h " + host + " -p 10000";
- Ice.ObjectPrx prx = _communicator.stringToProxy(s);
- prx = _deliveryMode.apply(prx);
- int timeout = _timeout.getProgress();
- if(timeout != 0)
- {
- prx = prx.ice_timeout(timeout);
+ public static ErrorDialogFragment newInstance(String message, boolean fatal)
+ {
+ ErrorDialogFragment frag = new ErrorDialogFragment();
+ Bundle args = new Bundle();
+ args.putString("message", message);
+ args.putBoolean("fatal", fatal);
+ frag.setArguments(args);
+ return frag;
}
- _helloPrx = Demo.HelloPrxHelper.uncheckedCast(prx);
- }
-
- class SayHelloI extends Demo.Callback_Hello_sayHello
- {
- private boolean _response = false;
@Override
- synchronized public void exception(final Ice.LocalException ex)
+ public Dialog onCreateDialog(Bundle savedInstanceState)
{
- assert (!_response);
- _response = true;
-
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- handleException(ex);
- }
- });
- }
-
- @Override
- synchronized public void sent(boolean sentSynchronously)
- {
- if(_response)
- {
- return;
- }
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- if(isFinishing())
- {
- return;
- }
-
- if(_deliveryMode == DeliveryMode.TWOWAY || _deliveryMode == DeliveryMode.TWOWAY_SECURE)
- {
- _status.setText("Waiting for response");
- }
- else
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage(getArguments().getString("message"))
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
{
- _status.setText("Ready");
- _activity.setVisibility(View.INVISIBLE);
- }
- }
- });
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ if(getArguments().getBoolean("fatal"))
+ {
+ ((HelloWorld) getActivity()).finish();
+ }
+ }
+ });
+ return builder.create();
}
+ }
+ public static class InitializeDialogFragment extends DialogFragment
+ {
@Override
- synchronized public void response()
+ public Dialog onCreateDialog(Bundle savedInstanceState)
{
- assert (!_response);
- _response = true;
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- if(isFinishing())
- {
- return;
- }
+ ProgressDialog dialog = new ProgressDialog(getActivity());
+ dialog.setTitle("Initializing");
+ dialog.setMessage("Please wait while loading...");
+ dialog.setIndeterminate(true);
+ dialog.setCanceledOnTouchOutside(false);
- _activity.setVisibility(View.INVISIBLE);
- _status.setText("Ready");
- }
- });
+ setCancelable(false);
+ return dialog;
}
}
- private void sayHello()
- {
- if(_helloPrx == null)
- {
- try
- {
- updateProxy();
- }
- catch(Ice.LocalException e)
- {
- handleException(e);
- return;
- }
- }
- try
- {
- if(!_deliveryMode.isBatch())
- {
- Ice.AsyncResult r = _helloPrx.begin_sayHello(_delay.getProgress(), new SayHelloI());
- if(r.sentSynchronously())
- {
- if(_deliveryMode == DeliveryMode.TWOWAY || _deliveryMode == DeliveryMode.TWOWAY_SECURE)
- {
- _activity.setVisibility(View.VISIBLE);
- _status.setText("Waiting for response");
- }
- }
- else
- {
- _activity.setVisibility(View.VISIBLE);
- _status.setText("Sending request");
- }
- }
- else
- {
- _flushButton.setEnabled(true);
- _helloPrx.sayHello(_delay.getProgress());
- _status.setText("Queued hello request");
- }
- }
- catch(Ice.LocalException ex)
- {
- handleException(ex);
- }
- }
+ // These two arrays match.
+ private final static DeliveryMode DELIVERY_MODES[] = {
+ DeliveryMode.TWOWAY,
+ DeliveryMode.TWOWAY_SECURE,
+ DeliveryMode.ONEWAY,
+ DeliveryMode.ONEWAY_BATCH,
+ DeliveryMode.ONEWAY_SECURE,
+ DeliveryMode.ONEWAY_SECURE_BATCH,
+ DeliveryMode.DATAGRAM,
+ DeliveryMode.DATAGRAM_BATCH,
+ };
+
+ private final static String DELIVERY_MODE_DESC[] = new String[] {
+ "Twoway",
+ "Twoway Secure",
+ "Oneway",
+ "Oneway Batch",
+ "Oneway Secure",
+ "Oneway Secure Batch",
+ "Datagram",
+ "Datagram Batch"
+ };
- private void handleException(Ice.LocalException ex)
+ @Override
+ public void onCreate(Bundle savedInstanceState)
{
- if(isFinishing())
- {
- return;
- }
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
- _status.setText("Ready");
- _activity.setVisibility(View.INVISIBLE);
+ final Button sayHelloButton = (Button)findViewById(R.id.sayHello);
+ final SeekBar delaySeekBar = (SeekBar)findViewById(R.id.delay);
+ final ProgressBar activityProgressBar = (ProgressBar)findViewById(R.id.activity);
+ final Button shutdownButton = (Button)findViewById(R.id.shutdown);
+ final EditText hostEditText = (EditText)findViewById(R.id.host);
+ final Button flushButton = (Button)findViewById(R.id.flush);
+ final TextView statusTextView = (TextView)findViewById(R.id.status);
+ final Spinner modeSpinner = (Spinner)findViewById(R.id.mode);
+ final TextView delayTextView = (TextView)findViewById(R.id.delayView);
+ final TextView timeoutTextView = (TextView)findViewById(R.id.timeoutView);
+ final SeekBar timeoutSeekBar = (SeekBar)findViewById(R.id.timeout);
+ final SharedPreferences prefs = getPreferences(MODE_PRIVATE);
- _lastError = ex.toString();
- showDialog(DIALOG_ERROR);
- ex.printStackTrace();
- }
+ _app = (HelloApp)getApplication();
- private void shutdown()
- {
- if(_helloPrx == null)
- {
- try
- {
- updateProxy();
- }
- catch(Ice.LocalException e)
- {
- handleException(e);
- return;
- }
- }
- try
+ sayHelloButton.setOnClickListener(new OnClickListener()
{
- if(!_deliveryMode.isBatch())
+ public void onClick(android.view.View v)
{
- _helloPrx.begin_shutdown(new Demo.Callback_Hello_shutdown()
+ if(_app.getDeliveryMode().isBatch())
{
- @Override
- public void exception(final Ice.LocalException ex)
- {
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- handleException(ex);
- }
- });
- }
+ flushButton.setEnabled(true);
+ _app.sayHello(delaySeekBar.getProgress());
+ statusTextView.setText("Queued hello request");
- @Override
- public void response()
- {
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- if(isFinishing())
- {
- return;
- }
-
- _activity.setVisibility(View.INVISIBLE);
- _status.setText("Ready");
- }
- });
- }
- });
- if(_deliveryMode == DeliveryMode.TWOWAY || _deliveryMode == DeliveryMode.TWOWAY_SECURE)
+ }
+ else
{
- _activity.setVisibility(View.VISIBLE);
- _status.setText("Waiting for response");
+ _app.sayHelloAsync(delaySeekBar.getProgress());
}
}
- else
- {
- _flushButton.setEnabled(true);
- _helloPrx.shutdown();
- _status.setText("Queued shutdown request");
- }
- }
- catch(Ice.LocalException ex)
- {
- handleException(ex);
- }
- }
+ });
- private void flush()
- {
- new Thread(new Runnable()
+ shutdownButton.setOnClickListener(new OnClickListener()
{
- public void run()
+ public void onClick(android.view.View v)
{
- try
+ if(_app.getDeliveryMode().isBatch())
{
- _communicator.flushBatchRequests();
+ flushButton.setEnabled(true);
+ _app.shutdown();
+ statusTextView.setText("Queued shutdown request");
}
- catch(final Ice.LocalException ex)
+ else
{
- runOnUiThread(new Runnable()
- {
- public void run()
- {
- handleException(ex);
- }
- });
+ _app.shutdownAsync();
}
}
- }).start();
-
- _flushButton.setEnabled(false);
- _status.setText("Flushed batch requests");
- }
-
- private void changeDeliveryMode(long id)
- {
- switch ((int)id)
- {
- case 0:
- _deliveryMode = DeliveryMode.TWOWAY;
- break;
- case 1:
- _deliveryMode = DeliveryMode.TWOWAY_SECURE;
- break;
- case 2:
- _deliveryMode = DeliveryMode.ONEWAY;
- break;
- case 3:
- _deliveryMode = DeliveryMode.ONEWAY_BATCH;
- break;
- case 4:
- _deliveryMode = DeliveryMode.ONEWAY_SECURE;
- break;
- case 5:
- _deliveryMode = DeliveryMode.ONEWAY_SECURE_BATCH;
- break;
- case 6:
- _deliveryMode = DeliveryMode.DATAGRAM;
- break;
- case 7:
- _deliveryMode = DeliveryMode.DATAGRAM_BATCH;
- break;
- }
- }
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- _sayHelloButton = (Button)findViewById(R.id.sayHello);
- _sayHelloButton.setOnClickListener(new OnClickListener()
- {
- public void onClick(android.view.View v)
- {
- sayHello();
- }
- });
- _shutdownButton = (Button)findViewById(R.id.shutdown);
- _shutdownButton.setOnClickListener(new OnClickListener()
- {
- public void onClick(android.view.View v)
- {
- shutdown();
- }
});
- _host = (EditText)findViewById(R.id.host);
- _host.addTextChangedListener(new TextWatcher()
+
+ hostEditText.addTextChangedListener(new TextWatcher()
{
+ @Override
public void afterTextChanged(Editable s)
{
- String host = _host.getText().toString().trim();
+ String host = hostEditText.getText().toString().trim();
if(host.isEmpty())
{
- _sayHelloButton.setEnabled(false);
- _shutdownButton.setEnabled(false);
+ sayHelloButton.setEnabled(false);
+ shutdownButton.setEnabled(false);
}
else
{
- _sayHelloButton.setEnabled(true);
- _shutdownButton.setEnabled(true);
+ sayHelloButton.setEnabled(true);
+ shutdownButton.setEnabled(true);
+ }
+
+ _app.setHost(host);
+
+ // Change the preferences if necessary.
+ if(!prefs.getString(HOSTNAME_KEY, DEFAULT_HOST).equals(host))
+ {
+ SharedPreferences.Editor edit = prefs.edit();
+ edit.putString(HOSTNAME_KEY, host);
+ edit.apply();
}
- _helloPrx = null;
}
+ @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
+ @Override
public void onTextChanged(CharSequence s, int start, int count, int after)
{
}
});
- _flushButton = (Button)findViewById(R.id.flush);
- _flushButton.setOnClickListener(new OnClickListener()
+ flushButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
- flush();
+ _app.flush();
+ flushButton.setEnabled(false);
+ statusTextView.setText("Flushed batch requests");
}
});
- Spinner mode = (Spinner)findViewById(R.id.mode);
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,
- new String[] { "Twoway", "Twoway Secure", "Oneway", "Oneway Batch", "Oneway Secure",
- "Oneway Secure Batch", "Datagram", "Datagram Batch" });
- mode.setAdapter(modeAdapter);
- mode.setOnItemSelectedListener(new android.widget.AdapterView.OnItemSelectedListener()
+ DELIVERY_MODE_DESC);
+ modeSpinner.setAdapter(modeAdapter);
+ modeSpinner.setOnItemSelectedListener(new android.widget.AdapterView.OnItemSelectedListener()
{
+ @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
- changeDeliveryMode(id);
- _helloPrx = null;
+ _app.setDeliveryMode(DELIVERY_MODES[(int) id]);
}
-
+ @Override
public void onNothingSelected(AdapterView<?> arg0)
{
}
});
- if(savedInstanceState == null)
- {
- mode.setSelection(0);
- }
- changeDeliveryMode(mode.getSelectedItemId());
+ modeSpinner.setSelection(0);
+ _app.setDeliveryMode(DELIVERY_MODES[(int)modeSpinner.getSelectedItemId()]);
- final TextView delayView = (TextView)findViewById(R.id.delayView);
- _delay = (SeekBar)findViewById(R.id.delay);
- _delay.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
+ delaySeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromThumb)
{
- delayView.setText(String.format("%.1f", progress / 1000.0));
+ delayTextView.setText(String.format("%.1f", progress / 1000.0));
}
public void onStartTrackingTouch(SeekBar seekBar)
@@ -469,20 +244,13 @@ public class HelloWorld extends Activity
{
}
});
- // BUGFIX: Android doesn't save/restore SeekBar state.
- if(savedInstanceState != null)
- {
- _delay.setProgress(savedInstanceState.getInt(BUNDLE_KEY_DELAY));
- }
- final TextView timeoutView = (TextView)findViewById(R.id.timeoutView);
- _timeout = (SeekBar)findViewById(R.id.timeout);
- _timeout.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
+ timeoutSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromThumb)
{
- timeoutView.setText(String.format("%.1f", progress / 1000.0));
- _helloPrx = null;
+ timeoutTextView.setText(String.format("%.1f", progress / 1000.0));
+ _app.setTimeout(progress);
}
public void onStartTrackingTouch(SeekBar seekBar)
@@ -493,167 +261,168 @@ public class HelloWorld extends Activity
{
}
});
- // BUGFIX: Android doesn't save/restore SeekBar state.
- if(savedInstanceState != null)
- {
- _timeout.setProgress(savedInstanceState.getInt(BUNDLE_KEY_TIMEOUT));
- }
-
- _activity = (ProgressBar)findViewById(R.id.activity);
- _activity.setVisibility(View.INVISIBLE);
- _status = (TextView)findViewById(R.id.status);
+ activityProgressBar.setVisibility(View.GONE);
// Setup the defaults.
- _prefs = getPreferences(MODE_PRIVATE);
- if(savedInstanceState == null)
- {
- _host.setText(_prefs.getString(HOSTNAME_KEY, DEFAULT_HOST));
- _flushButton.setEnabled(false);
- }
- else
- {
- _flushButton.setEnabled(savedInstanceState.getBoolean(BUNDLE_KEY_FLUSH_ENABLED));
- _lastError = savedInstanceState.getString(BUNDLE_KEY_LAST_ERROR);
- }
+ hostEditText.setText(prefs.getString(HOSTNAME_KEY, DEFAULT_HOST));
+ flushButton.setEnabled(false);
- HelloApp app = (HelloApp)getApplication();
- app.setCommunicatorCallback(new HelloApp.CommunicatorCallback()
- {
- private boolean dismiss = false;
+ statusTextView.setText("Ready");
- public void onCreate(final Ice.Communicator communicator)
+ _handler = new Handler(Looper.getMainLooper()) {
+ @Override
+ public void handleMessage(Message m)
{
- runOnUiThread(new Runnable()
+ switch(m.what)
{
- public void run()
+ case HelloApp.MSG_WAIT:
{
- if(dismiss)
+ // Show the initializing dialog if it isn't already on the stack.
+ if(getFragmentManager().findFragmentByTag(INITIALIZE_TAG) == null)
{
- dismissDialog(DIALOG_INITIALIZING);
+ DialogFragment dialog = new InitializeDialogFragment();
+ dialog.show(getFragmentManager(), INITIALIZE_TAG);
}
- _status.setText("Ready");
- _communicator = communicator;
+ break;
}
- });
- }
- public void onError(final Ice.LocalException ex)
- {
- runOnUiThread(new Runnable()
- {
- public void run()
+ case HelloApp.MSG_READY:
{
- if(dismiss)
+ // Hide the initializing dialog if it is on the stack.
+ DialogFragment initDialog = (DialogFragment) getFragmentManager().findFragmentByTag(INITIALIZE_TAG);
+ if(initDialog != null)
{
- dismissDialog(DIALOG_INITIALIZING);
+ initDialog.dismiss();
}
- _lastError = ex.toString();
- showDialog(DIALOG_FATAL);
+ HelloApp.MessageReady ready = (HelloApp.MessageReady) m.obj;
+ if(ready.ex != null)
+ {
+ LocalException ex = (LocalException) m.obj;
+ DialogFragment dialog = ErrorDialogFragment.newInstance(ex.toString(), true);
+ dialog.show(getFragmentManager(), ERROR_TAG);
+ }
+ statusTextView.setText("Ready");
+ break;
}
- });
- }
- public void onWait()
- {
- // Show the initializing dialog.
- dismiss = true;
- showDialog(DIALOG_INITIALIZING);
+ case HelloApp.MSG_EXCEPTION:
+ {
+ statusTextView.setText("Ready");
+ activityProgressBar.setVisibility(View.GONE);
+
+ LocalException ex = (LocalException) m.obj;
+ DialogFragment dialog = ErrorDialogFragment.newInstance(ex.toString(), false);
+ dialog.show(getFragmentManager(), ERROR_TAG);
+ break;
+ }
+
+ case HelloApp.MSG_RESPONSE:
+ {
+ activityProgressBar.setVisibility(View.GONE);
+ statusTextView.setText("Ready");
+ break;
+ }
+ case HelloApp.MSG_SENT:
+ {
+ DeliveryMode mode = (DeliveryMode) m.obj;
+ if(mode == DeliveryMode.TWOWAY || mode == DeliveryMode.TWOWAY_SECURE)
+ {
+ activityProgressBar.setVisibility(View.VISIBLE);
+ statusTextView.setText("Waiting for response");
+ }
+ else
+ {
+ statusTextView.setText("Ready");
+ activityProgressBar.setVisibility(View.GONE);
+ }
+ break;
+ }
+
+ case HelloApp.MSG_SENDING:
+ {
+ activityProgressBar.setVisibility(View.VISIBLE);
+ statusTextView.setText("Sending request");
+ break;
+ }
+ }
}
- });
+ };
}
@Override
- protected void onSaveInstanceState(Bundle outState)
+ protected void onResume()
{
- super.onSaveInstanceState(outState);
- // BUGFIX: The SeekBar doesn't save/restore state automatically.
- outState.putInt(BUNDLE_KEY_DELAY, _delay.getProgress());
- outState.putInt(BUNDLE_KEY_TIMEOUT, _timeout.getProgress());
- outState.putBoolean(BUNDLE_KEY_FLUSH_ENABLED, _flushButton.isEnabled());
- outState.putString(BUNDLE_KEY_LAST_ERROR, _lastError);
+ super.onResume();
+ _app.setHandler(_handler);
}
@Override
- protected Dialog onCreateDialog(int id)
+ protected void onRestoreInstanceState(Bundle savedInstanceState)
{
- switch (id)
- {
- case DIALOG_INITIALIZING:
- {
- ProgressDialog dialog = new ProgressDialog(this);
- dialog.setTitle("Initializing");
- dialog.setMessage("Please wait while loading...");
- dialog.setIndeterminate(true);
- dialog.setCancelable(false);
- return dialog;
- }
-
- case DIALOG_ERROR:
- case DIALOG_FATAL:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage(""); // Initialize to empty string so that we can modify during onPrepareDialog
- if(id == DIALOG_FATAL)
- {
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- finish();
- }
- });
- }
- return builder.create();
- }
+ super.onRestoreInstanceState(savedInstanceState);
+
+ final SeekBar delaySeekBar = (SeekBar)findViewById(R.id.delay);
+ final Button flushButton = (Button)findViewById(R.id.flush);
+ final Spinner modeSpinner = (Spinner)findViewById(R.id.mode);
+ final SeekBar timeoutSeekBar = (SeekBar)findViewById(R.id.timeout);
+ final TextView statusTextView = (TextView)findViewById(R.id.status);
+ final ProgressBar activityProgressBar = (ProgressBar)findViewById(R.id.activity);
+
+ modeSpinner.setSelection(savedInstanceState.getInt(BUNDLE_KEY_MODE));
+ flushButton.setEnabled(savedInstanceState.getBoolean(BUNDLE_KEY_FLUSH_ENABLED));
+ delaySeekBar.setProgress(savedInstanceState.getInt(BUNDLE_KEY_DELAY));
+ timeoutSeekBar.setProgress(savedInstanceState.getInt(BUNDLE_KEY_TIMEOUT));
+ statusTextView.setText(savedInstanceState.getString(BUNDLE_KEY_STATUS));
+ activityProgressBar.setVisibility(
+ savedInstanceState.getBoolean(BUNDLE_KEY_PROGRESS) ? View.VISIBLE : View.GONE);
+ }
- }
+ @Override
+ protected void onSaveInstanceState(Bundle outState)
+ {
+ super.onSaveInstanceState(outState);
- return null;
+ final SeekBar delaySeekBar = (SeekBar)findViewById(R.id.delay);
+ final Button flushButton = (Button)findViewById(R.id.flush);
+ final Spinner modeSpinner = (Spinner)findViewById(R.id.mode);
+ final SeekBar timeoutSeekBar = (SeekBar)findViewById(R.id.timeout);
+ final TextView statusTextView = (TextView)findViewById(R.id.status);
+ final ProgressBar activityProgressBar = (ProgressBar)findViewById(R.id.activity);
+
+ outState.putInt(BUNDLE_KEY_MODE, (int)modeSpinner.getSelectedItemId());
+ outState.putInt(BUNDLE_KEY_DELAY, delaySeekBar.getProgress());
+ outState.putInt(BUNDLE_KEY_TIMEOUT, timeoutSeekBar.getProgress());
+ outState.putBoolean(BUNDLE_KEY_FLUSH_ENABLED, flushButton.isEnabled());
+ outState.putString(BUNDLE_KEY_STATUS, statusTextView.getText().toString());
+ outState.putBoolean(BUNDLE_KEY_PROGRESS, activityProgressBar.getVisibility() == View.VISIBLE);
+
+ // Clear the application handler. We don't want any further messages while
+ // in the background.
+ _app.setHandler(null);
}
- protected void onPrepareDialog(int id, Dialog dialog)
+ @Override
+ protected void onDestroy()
{
- switch (id)
- {
- case DIALOG_INITIALIZING:
- break;
- case DIALOG_ERROR:
- case DIALOG_FATAL:
- {
- ((AlertDialog)dialog).setMessage(_lastError);
- }
-
- }
+ super.onDestroy();
+ _app.setHandler(null);
}
- private static final int DIALOG_INITIALIZING = 1;
- private static final int DIALOG_ERROR = 2;
- private static final int DIALOG_FATAL = 3;
+ public static final String INITIALIZE_TAG = "initialize";
+ public static final String ERROR_TAG = "error";
private static final String DEFAULT_HOST = "";
private static final String HOSTNAME_KEY = "host";
+ private static final String BUNDLE_KEY_PROGRESS = "zeroc:progress";
+ private static final String BUNDLE_KEY_STATUS = "zeroc:status";
+ private static final String BUNDLE_KEY_MODE = "zeroc:mode";
private static final String BUNDLE_KEY_TIMEOUT = "zeroc:timeout";
private static final String BUNDLE_KEY_DELAY = "zeroc:delay";
private static final String BUNDLE_KEY_FLUSH_ENABLED = "zeroc:flush";
- private static final String BUNDLE_KEY_LAST_ERROR = "zeroc:lastError";
-
- private Ice.Communicator _communicator = null;
- private DeliveryMode _deliveryMode;
- private Demo.HelloPrx _helloPrx = null;
-
- private Button _sayHelloButton;
- private Button _shutdownButton;
- private EditText _host;
- private TextView _status;
- private SeekBar _delay;
- private SeekBar _timeout;
- private ProgressBar _activity;
- private SharedPreferences _prefs;
- private Button _flushButton;
-
- private String _lastError = "";
+
+ private HelloApp _app;
+ private Handler _handler;
}
diff --git a/android/demo/library/build.gradle b/android/demo/library/build.gradle
index 97742903cab..b2af86aaf21 100644
--- a/android/demo/library/build.gradle
+++ b/android/demo/library/build.gradle
@@ -11,6 +11,8 @@ apply plugin: 'com.android.application'
apply from: "$rootProject.projectDir/../java/gradle/ice.gradle"
apply plugin: 'slice'
+project.slice.output = project.file("${project.buildDir}/generated/source/ice")
+
slice {
java {
set1 {
@@ -60,11 +62,6 @@ clean {
delete("src/main/res/raw/client.bks")
}
-idea.module {
- excludeDirs -= file(buildDir)
- buildDir.listFiles({d, f ->f != 'generated-src'} as FilenameFilter).each { excludeDirs += it }
-}
-
dependencies {
compile localDependency('ice')
compile localDependency('glacier2')
diff --git a/android/demo/library/library.iml b/android/demo/library/library.iml
index 75eeb0736cb..500cfd8119d 100644
--- a/android/demo/library/library.iml
+++ b/android/demo/library/library.iml
@@ -50,7 +50,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated-src" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/ice" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
@@ -60,7 +60,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/build/generated-src" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
diff --git a/android/demo/library/src/main/java/com/zeroc/library/EditActivity.java b/android/demo/library/src/main/java/com/zeroc/library/EditActivity.java
index de1b0ace7d2..cdd12d02400 100644
--- a/android/demo/library/src/main/java/com/zeroc/library/EditActivity.java
+++ b/android/demo/library/src/main/java/com/zeroc/library/EditActivity.java
@@ -14,6 +14,7 @@ import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
@@ -33,10 +34,9 @@ import com.zeroc.library.controller.QueryModel;
public class EditActivity extends SessionActivity
{
- private static final int DIALOG_DISCARD = DIALOG_NEXT;
-
private static final int SAVE_ID = Menu.FIRST;
private static final int DISCARD_ID = Menu.FIRST + 1;
+ public static final String DISCARD_TAG = "discard";
private Demo.BookDescription _desc;
@@ -47,6 +47,39 @@ public class EditActivity extends SessionActivity
private LayoutInflater _inflater;
private Button _save;
+ public static class DiscardDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Discard changes")
+ .setMessage("Your changes will be discarded.")
+ .setPositiveButton("OK", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((EditActivity) getActivity()).discardOk();
+
+ }
+ })
+ .setNegativeButton("Cancel", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ }
+ });
+ return builder.create();
+ }
+ }
+
+ private void
+ discardOk()
+ {
+ setResult(RESULT_CANCELED);
+ finish();
+ }
+
private void addAuthorView(String author)
{
final View authorView = _inflater.inflate(R.layout.author, _authorsLayout, false);
@@ -131,7 +164,8 @@ public class EditActivity extends SessionActivity
{
public void onClick(View v)
{
- showDialog(DIALOG_DISCARD);
+ DialogFragment dialog = new DiscardDialogFragment();
+ dialog.show(getFragmentManager(), DISCARD_TAG);
}
});
}
@@ -170,7 +204,7 @@ public class EditActivity extends SessionActivity
public void onError()
{
- showDialog(DIALOG_ERROR);
+ showDialogError();
}
});
}
@@ -202,7 +236,8 @@ public class EditActivity extends SessionActivity
return true;
case DISCARD_ID:
- showDialog(DIALOG_DISCARD);
+ DialogFragment dialog = new DiscardDialogFragment();
+ dialog.show(getFragmentManager(), DISCARD_TAG);
return true;
}
@@ -251,41 +286,5 @@ public class EditActivity extends SessionActivity
}
}
- @Override
- protected Dialog onCreateDialog(final int id)
- {
- Dialog d = super.onCreateDialog(id);
- if(d != null)
- {
- return d;
- }
-
- switch(id)
- {
- case DIALOG_DISCARD:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Discard changes");
- builder.setMessage("Your changes will be discarded.");
- builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- setResult(RESULT_CANCELED);
- finish();
- }
- });
- builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- }
- });
- return builder.create();
- }
- }
-
- return null;
- }
}
diff --git a/android/demo/library/src/main/java/com/zeroc/library/LibraryActivity.java b/android/demo/library/src/main/java/com/zeroc/library/LibraryActivity.java
index 7349747b058..381444365b8 100644
--- a/android/demo/library/src/main/java/com/zeroc/library/LibraryActivity.java
+++ b/android/demo/library/src/main/java/com/zeroc/library/LibraryActivity.java
@@ -96,7 +96,7 @@ public class LibraryActivity extends SessionActivity
}
return text;
}
- };
+ }
private LibraryListAdapter _adapter;
@@ -111,7 +111,7 @@ public class LibraryActivity extends SessionActivity
public void onError()
{
- showDialog(DIALOG_ERROR);
+ showDialogError();
}
};
diff --git a/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java b/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java
index 3e4c7b32cc9..764f8a15a3f 100644
--- a/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java
+++ b/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java
@@ -12,10 +12,10 @@ package com.zeroc.library;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.os.Build.VERSION;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
@@ -34,9 +34,7 @@ public class LoginActivity extends Activity
private static final String HOSTNAME_KEY = "host";
private static final String SECURE_KEY = "secure";
private static final String GLACIER2_KEY = "glacier2";
-
- private static final int DIALOG_ERROR = 1;
- private static final int DIALOG_INVALID_HOST = 2;
+ private static final String ERROR_TAG = "error";
private Button _login;
private EditText _hostname;
@@ -71,7 +69,8 @@ public class LoginActivity extends Activity
_loginInProgress = false;
setLoginState();
- showDialog(DIALOG_ERROR);
+ DialogFragment dialog = ErrorDialogFragment.newInstance(_loginController.getLoginError());
+ dialog.show(getFragmentManager(), ERROR_TAG);
}
};
@@ -102,7 +101,8 @@ public class LoginActivity extends Activity
final String ipre = "^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
if(!hostname.matches(hostre) && !hostname.matches(ipre))
{
- showDialog(DIALOG_INVALID_HOST);
+ DialogFragment dialog = new InvalidHostDialogFragment();
+ dialog.show(getFragmentManager(), "invalid");
return;
}
@@ -121,7 +121,7 @@ public class LoginActivity extends Activity
edit.putBoolean(GLACIER2_KEY, glacier2);
}
- edit.commit();
+ edit.apply();
LibraryApp app = (LibraryApp)getApplication();
_loginController = app.login(hostname, secure, glacier2, _listener);
@@ -203,52 +203,53 @@ public class LoginActivity extends Activity
}
}
- @Override
- protected Dialog onCreateDialog(int id)
+ public static class InvalidHostDialogFragment extends DialogFragment
{
- switch(id)
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
{
- case DIALOG_ERROR:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage(""); // The message is filled in onPrepareDialog.
- builder.setCancelable(false);
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- // Clean up the login controller upon login failure.
- if(_loginController != null)
- {
- LibraryApp app = (LibraryApp)getApplication();
- app.loginFailure();
- }
- }
- });
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage("The hostname is invalid");
return builder.create();
}
+ }
+ public static class ErrorDialogFragment extends DialogFragment
+ {
+ public static ErrorDialogFragment newInstance(String message)
+ {
+ ErrorDialogFragment frag = new ErrorDialogFragment();
+ Bundle args = new Bundle();
+ args.putString("message", message);
+ frag.setArguments(args);
+ return frag;
+ }
- case DIALOG_INVALID_HOST:
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
{
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage("The hostname is invalid");
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder .setTitle("Error")
+ .setMessage(getArguments().getString("message"))
+ .setCancelable(false)
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((LoginActivity) getActivity()).errorOk();
+ }
+ });
return builder.create();
}
- }
-
- return null;
}
- @Override
- protected void onPrepareDialog(int id, Dialog dialog)
+ private void errorOk()
{
- super.onPrepareDialog(id, dialog);
- if(id == DIALOG_ERROR)
+ // Clean up the login controller upon login failure.
+ if(_loginController != null)
{
- AlertDialog alert = (AlertDialog)dialog;
- alert.setMessage(_loginController.getLoginError());
+ LibraryApp app = (LibraryApp)getApplication();
+ app.loginFailure();
}
}
}
diff --git a/android/demo/library/src/main/java/com/zeroc/library/SessionActivity.java b/android/demo/library/src/main/java/com/zeroc/library/SessionActivity.java
index e89363afb90..e0c3930e665 100644
--- a/android/demo/library/src/main/java/com/zeroc/library/SessionActivity.java
+++ b/android/demo/library/src/main/java/com/zeroc/library/SessionActivity.java
@@ -9,6 +9,8 @@
package com.zeroc.library;
+import android.app.DialogFragment;
+import android.os.Bundle;
import com.zeroc.library.controller.QueryController;
import com.zeroc.library.controller.SessionController;
@@ -20,13 +22,77 @@ import android.content.DialogInterface;
// The base class of any activity created after a session has been established.
public class SessionActivity extends Activity
{
- protected static final int DIALOG_ERROR = 0;
- protected static final int DIALOG_FATAL = 1;
- protected static final int DIALOG_NEXT = 2;
-
+ public static final String ERROR_TAG = "error";
+ public static final String FATAL_TAG = "fatal";
protected SessionController _sessionController;
protected QueryController _queryController;
+ public static class FatalDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage("The session was lost. Please login again.")
+ .setCancelable(false)
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((SessionActivity) getActivity()).fatalOk();
+ }
+ });
+ return builder.create();
+ }
+ }
+ public static class ErrorDialogFragment extends DialogFragment
+ {
+ public static ErrorDialogFragment newInstance(String message)
+ {
+ ErrorDialogFragment frag = new ErrorDialogFragment();
+ Bundle args = new Bundle();
+ args.putString("message", message);
+ frag.setArguments(args);
+ return frag;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage(getArguments().getString("message"))
+ .setCancelable(false)
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((SessionActivity) getActivity()).errorOk();
+ }
+ });
+ return builder.create();
+ }
+ }
+
+ private void errorOk()
+ {
+ _queryController.clearLastError();
+ }
+
+ private void fatalOk()
+ {
+ LibraryApp app = (LibraryApp)getApplication();
+ app.logout();
+ finish();
+ }
+
+ void showDialogError()
+ {
+ DialogFragment dialog = ErrorDialogFragment.newInstance(_queryController.getLastError());
+ dialog.show(getFragmentManager(), SessionActivity.ERROR_TAG);
+ }
+
@Override
public void onResume()
{
@@ -44,64 +110,12 @@ public class SessionActivity extends Activity
{
public void onDestroy()
{
- showDialog(DIALOG_FATAL);
+ DialogFragment dialog = new FatalDialogFragment();
+ dialog.show(getFragmentManager(), FATAL_TAG);
}
});
_queryController = _sessionController.getCurrentQuery();
}
- @Override
- protected Dialog onCreateDialog(final int id)
- {
- switch (id)
- {
- case DIALOG_ERROR:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage(""); // Filled in onPrepareDialog.
- builder.setCancelable(false);
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- _queryController.clearLastError();
- }
- });
- return builder.create();
- }
-
- case DIALOG_FATAL:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage("The session was lost. Please login again.");
- builder.setCancelable(false);
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- LibraryApp app = (LibraryApp)getApplication();
- app.logout();
- finish();
- }
- });
- return builder.create();
- }
- }
-
- return null;
- }
-
- @Override
- protected void onPrepareDialog(int id, Dialog dialog)
- {
- super.onPrepareDialog(id, dialog);
- if(id == DIALOG_ERROR)
- {
- AlertDialog alert = (AlertDialog)dialog;
- alert.setMessage(_queryController.getLastError());
- }
- }
}
diff --git a/android/demo/library/src/main/java/com/zeroc/library/ViewActivity.java b/android/demo/library/src/main/java/com/zeroc/library/ViewActivity.java
index 07af0205135..0c1ee8379ee 100644
--- a/android/demo/library/src/main/java/com/zeroc/library/ViewActivity.java
+++ b/android/demo/library/src/main/java/com/zeroc/library/ViewActivity.java
@@ -11,6 +11,7 @@ package com.zeroc.library;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@@ -31,12 +32,8 @@ public class ViewActivity extends SessionActivity
{
private static final int EDIT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;
-
- public static final int BOOK_DELETED = RESULT_FIRST_USER;
- public static final int BOOK_CHANGED = RESULT_FIRST_USER+1;
-
- private static final int DIALOG_DELETE = DIALOG_NEXT;
- private static final int DIALOG_RENT_BOOK = DIALOG_NEXT+1;
+ public static final String RENT_TAG = "rent";
+ public static final String DELETE_TAG = "delete";
private Demo.BookDescription _desc;
private TextView _isbn;
@@ -46,6 +43,64 @@ public class ViewActivity extends SessionActivity
private TextView _rentedBy;
private Button _rent;
+ public static class RentBookDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ // This example shows how to add a custom layout to an AlertDialog
+ LayoutInflater factory = LayoutInflater.from(getActivity());
+ final View entryView = factory.inflate(R.layout.rentername, null);
+ final EditText renter = (EditText)entryView.findViewById(R.id.renter);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Enter Renter")
+ .setView(entryView)
+ .setPositiveButton("OK", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ final String r = renter.getText().toString().trim();
+ if(r.length() > 0)
+ {
+ ((ViewActivity)getActivity()).rentBook(r);
+ }
+ }
+ })
+ .setNegativeButton("Cancel", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ }
+ });
+ return builder.create();
+ }
+ }
+
+ public static class DeleteBookDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder .setTitle("Delete")
+ .setMessage("This book will be deleted.")
+ .setPositiveButton("OK", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ ((ViewActivity)getActivity()).deleteBook();
+ }
+ })
+ .setNegativeButton("Cancel", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ }
+ });
+ return builder.create();
+ }
+ }
+
private void updateBookDescription()
{
// Update the fields.
@@ -75,6 +130,17 @@ public class ViewActivity extends SessionActivity
}
}
+ private void deleteBook()
+ {
+ _queryController.deleteBook();
+ }
+
+ private void rentBook(String renter)
+ {
+ _rent.setEnabled(false);
+ _queryController.rentBook(renter);
+ }
+
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
@@ -96,7 +162,8 @@ public class ViewActivity extends SessionActivity
{
if(_desc.rentedBy.length() == 0)
{
- showDialog(DIALOG_RENT_BOOK);
+ DialogFragment dialog = new RentBookDialogFragment();
+ dialog.show(getFragmentManager(), RENT_TAG);
}
else
{
@@ -132,7 +199,7 @@ public class ViewActivity extends SessionActivity
public void onError()
{
_rent.setEnabled(true);
- showDialog(DIALOG_ERROR);
+ showDialogError();
}
});
}
@@ -156,74 +223,11 @@ public class ViewActivity extends SessionActivity
return true;
case DELETE_ID:
- showDialog(DIALOG_DELETE);
+ DialogFragment dialog = new DeleteBookDialogFragment();
+ dialog.show(getFragmentManager(), DELETE_TAG);
return true;
}
return super.onOptionsItemSelected(item);
}
-
- @Override
- protected Dialog onCreateDialog(final int id)
- {
- Dialog d = super.onCreateDialog(id);
- if(d != null)
- {
- return d;
- }
- switch (id)
- {
- case DIALOG_DELETE:
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Delete");
- builder.setMessage("This book will be deleted.");
- builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- _queryController.deleteBook();
- }
- });
- builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- }
- });
- return builder.create();
- }
-
- case DIALOG_RENT_BOOK:
- {
- // This example shows how to add a custom layout to an AlertDialog
- LayoutInflater factory = LayoutInflater.from(this);
- final View entryView = factory.inflate(R.layout.rentername, null);
- final EditText renter = (EditText)entryView.findViewById(R.id.renter);
- AlertDialog.Builder builder = new AlertDialog.Builder(ViewActivity.this);
- builder.setTitle("Enter Renter");
- builder.setView(entryView);
- builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- final String r = renter.getText().toString().trim();
- if(r.length() > 0)
- {
- _rent.setEnabled(false);
- _queryController.rentBook(r);
- }
- }
- });
- builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- }
- });
- return builder.create();
- }
- }
- return null;
- }
}
diff --git a/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java b/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java
index 41fbcc6a55f..3c878151d74 100644
--- a/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java
+++ b/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java
@@ -588,7 +588,7 @@ public class TestApp extends Application
setupAddress(args, _ipv6);
- if(_testName == "plugin")
+ if(_testName.equals("plugin"))
{
try
{
@@ -862,10 +862,6 @@ public class TestApp extends Application
synchronized public void startTest(int position)
{
- assert !_mode.isSSL() || (_mode.isSSL() && _sslInitialized);
-
- PrintWriter pw = new PrintWriter(new MyWriter());
-
_currentTest = position;
_complete = false;
_strings.clear();
@@ -987,7 +983,7 @@ public class TestApp extends Application
{
private SSLContext initializeContext(java.io.InputStream cert)
throws NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException,
- FileNotFoundException, UnrecoverableKeyException, KeyManagementException
+ UnrecoverableKeyException, KeyManagementException
{
SSLContext context = SSLContext.getInstance("TLS");
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
diff --git a/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java b/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java
index a2154c35742..7787c3ed497 100644
--- a/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java
+++ b/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java
@@ -12,10 +12,7 @@ package com.zeroc.testsuite;
import java.util.ArrayList;
import java.util.List;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.ListActivity;
-import android.app.ProgressDialog;
+import android.app.*;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@@ -25,8 +22,9 @@ import android.widget.CompoundButton.OnCheckedChangeListener;
public class TestSuite extends ListActivity
{
- private static final int DIALOG_INITIALIZING = 1;
- private static final int DIALOG_SSL_FAILED = 2;
+ public static final String INITIALIZE_TAG = "initialize";
+ public static final String FAILED_TAG = "failed";
+
private List<String> _tests = new ArrayList<String>();
@Override
@@ -48,7 +46,11 @@ public class TestSuite extends ListActivity
{
if(dismiss)
{
- dismissDialog(DIALOG_INITIALIZING);
+ DialogFragment f= (DialogFragment)getFragmentManager().findFragmentByTag(INITIALIZE_TAG);
+ if(f != null)
+ {
+ f.dismiss();
+ }
}
}
@@ -56,16 +58,22 @@ public class TestSuite extends ListActivity
{
if(dismiss)
{
- dismissDialog(DIALOG_INITIALIZING);
+ DialogFragment f= (DialogFragment)getFragmentManager().findFragmentByTag(INITIALIZE_TAG);
+ if(f != null)
+ {
+ f.dismiss();
+ }
}
- showDialog(DIALOG_SSL_FAILED);
+ DialogFragment dialog = new SSLFailedDialogFragment();
+ dialog.show(getFragmentManager(), FAILED_TAG);
}
public void onWait()
{
// Show the initializing dialog.
dismiss = true;
- showDialog(DIALOG_INITIALIZING);
+ DialogFragment dialog = new InitializeDialogFragment();
+ dialog.show(getFragmentManager(), INITIALIZE_TAG);
}
});
Spinner mode = (Spinner)findViewById(R.id.mode);
@@ -109,37 +117,37 @@ public class TestSuite extends ListActivity
startActivity(new Intent(this, TestContainer.class));
}
- @Override
- protected Dialog onCreateDialog(int id)
+ public static class InitializeDialogFragment extends DialogFragment
{
- switch (id)
- {
- case DIALOG_INITIALIZING:
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
{
- ProgressDialog dialog = new ProgressDialog(this);
+ ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setTitle("Initializing");
dialog.setMessage("Please wait while initializing SSL...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
return dialog;
}
+ }
- case DIALOG_SSL_FAILED:
+ public static class SSLFailedDialogFragment extends DialogFragment
+ {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState)
{
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Error");
- builder.setMessage("SSL Initialization failed");
- builder.setCancelable(false);
- builder.setPositiveButton("Ok", new DialogInterface.OnClickListener()
- {
- public void onClick(DialogInterface dialog, int whichButton)
- {
- finish();
- }
- });
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle("Error")
+ .setMessage("SSL Initialization failed")
+ .setCancelable(false)
+ .setPositiveButton("Ok", new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int whichButton)
+ {
+ getActivity().finish();
+ }
+ });
return builder.create();
}
- }
- return null;
}
}
diff --git a/android/test/android/testApp.iml b/android/test/android/testApp.iml
index 299ec77ac2d..981662e19b1 100644
--- a/android/test/android/testApp.iml
+++ b/android/test/android/testApp.iml
@@ -80,7 +80,6 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
- <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 17 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
diff --git a/android/test/plugins/testPlugins.iml b/android/test/plugins/testPlugins.iml
index f6fbd6b7fec..916e385fd3b 100644
--- a/android/test/plugins/testPlugins.iml
+++ b/android/test/plugins/testPlugins.iml
@@ -25,7 +25,6 @@
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/build/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" />
- <excludeFolder url="file://$MODULE_DIR$/build/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<content url="file://$MODULE_DIR$/../../../java/test/plugins/src/main/java">