28package com.jogamp.openal.test.android;
30import java.util.ArrayList;
31import java.util.HashMap;
32import java.util.Iterator;
36import android.app.Activity;
37import android.content.Intent;
38import android.net.Uri;
39import android.os.Bundle;
40import android.util.Log;
57 public static final String
LAUNCH_MAIN =
"org.jogamp.launcher.action.LAUNCH_MAIN";
60 public static final String
LAUNCH_JUNIT =
"org.jogamp.launcher.action.LAUNCH_JUNIT";
63 public static final String
SCHEME =
"launch";
66 public static final String
HOST =
"jogamp.org";
68 static final String SYS_PKG =
"sys";
70 static final String USR_PKG =
"pkg";
72 static final String ARG =
"arg";
76 final ArrayList<String> args =
new ArrayList<String>();
117 public void onCreate(
final Bundle savedInstanceState) {
118 super.onCreate(savedInstanceState);
130 Log.d(getClass().getSimpleName(),
"Launching Activity: "+intent);
131 startActivity (intent);
140 HashMap<String, String> map =
new HashMap<String, String>();
141 ArrayList<String> keyList =
new ArrayList<String>();
143 public final void setProperty(
final String key,
final String value) {
144 if(key.equals(SYS_PKG)) {
145 throw new IllegalArgumentException(
"Illegal property key, '"+SYS_PKG+
"' is reserved");
147 if(key.equals(USR_PKG)) {
148 throw new IllegalArgumentException(
"Illegal property key, '"+USR_PKG+
"' is reserved");
150 if(key.equals(ARG)) {
151 throw new IllegalArgumentException(
"Illegal property key, '"+ARG+
"' is reserved");
153 final String oval = map.put(key, value);
156 throw new IllegalArgumentException(
"Property overwriting not allowed: "+key+
": "+oval+
" -> "+value);
162 final Iterator<String> argKeys = props.keyList.iterator();
163 while(argKeys.hasNext()) {
164 final String key = argKeys.next();
170 final Iterator<String> argKeys = keyList.iterator();
171 while(argKeys.hasNext()) {
172 final String key = argKeys.next();
173 System.setProperty(key, map.get(key));
177 final Iterator<String> argKeys = keyList.iterator();
178 while(argKeys.hasNext()) {
179 System.clearProperty(argKeys.next());
183 public final String
getProperty(
final String key) {
return map.get(key); }
202 static final char SLASH =
'/';
203 static final char QMARK =
'?';
204 static final char AMPER =
'&';
205 static final char ASSIG =
'=';
206 static final String COLSLASH2 =
"://";
207 static final String EMPTY =
"";
209 String activityName =
null;
210 ArrayList<String> sysPackages =
new ArrayList<String>();
211 ArrayList<String> usrPackages =
new ArrayList<String>();
213 ArrayList<String> arguments =
new ArrayList<String>();
222 sysPackages.addAll(plist);
230 usrPackages.addAll(plist);
234 public final void setProperty(
final String key,
final String value) {
250 public final void addArgument(
final String arg) { arguments.add(arg); }
252 arguments.addAll(args);
257 final StringBuilder sb =
new StringBuilder();
259 boolean needsQMark =
true;
260 boolean needsSep =
false;
261 if(sysPackages.size()>0) {
266 for(
int i=0; i<sysPackages.size(); i++) {
270 sb.append(SYS_PKG).append(ASSIG).append(sysPackages.get(i));
274 if(usrPackages.size()>0) {
279 for(
int i=0; i<usrPackages.size(); i++) {
283 sb.append(USR_PKG).append(ASSIG).append(usrPackages.get(i));
287 final Iterator<String> propKeys = properties.keyList.iterator();
288 while(propKeys.hasNext()) {
296 final String key = propKeys.next();
297 sb.append(key).append(ASSIG).append(properties.map.get(key));
300 final Iterator<String> args = arguments.iterator();
301 while(args.hasNext()) {
309 sb.append(ARG).append(ASSIG).append(args.next());
312 return Uri.parse(sb.toString());
316 if(!uri.getScheme().equals(
SCHEME)) {
319 if(!uri.getHost().equals(
HOST)) {
324 String an = uri.getPath();
325 if(SLASH == an.charAt(0)) {
326 an = an.substring(1);
328 if(SLASH == an.charAt(an.length()-1)) {
329 an = an.substring(0, an.length()-1);
334 final String q = uri.getQuery();
335 final int q_l =
null != q ? q.length() : -1;
338 final int q_b = q_e + 1;
339 q_e = q.indexOf(AMPER, q_b);
349 final String part = q.substring(q_b, q_e);
350 final int assignment = part.indexOf(ASSIG);
353 final String k = part.substring(0, assignment);
354 final String v = part.substring(assignment+1);
355 if(k.equals(SYS_PKG)) {
357 throw new IllegalArgumentException(
"Empty package name: part <"+part+
">, query <"+q+
"> of "+uri);
360 }
else if(k.equals(USR_PKG)) {
362 throw new IllegalArgumentException(
"Empty package name: part <"+part+
">, query <"+q+
"> of "+uri);
365 }
else if(k.equals(ARG)) {
367 throw new IllegalArgumentException(
"Empty argument name: part <"+part+
">, query <"+q+
"> of "+uri);
375 if( part.equals(USR_PKG) || part.equals(ARG) ) {
376 throw new IllegalArgumentException(
"Reserved key <"+part+
"> in query <"+q+
"> of "+uri);
386 if(
null == activityName) {
387 throw new RuntimeException(
"Activity is not NULL");
394 return new Intent(action, data.
getUri());
397 public static void main(String[] args) {
399 args =
new String[] {
400 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+SYS_PKG+
"=jogamp.pack1&"+SYS_PKG+
"=javax.pack2&"+USR_PKG+
"=com.jogamp.pack3&"+USR_PKG+
"=com.jogamp.pack4&jogamp.common.debug=true&com.jogamp.test=false",
401 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+SYS_PKG+
"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false",
402 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+USR_PKG+
"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false",
403 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+USR_PKG+
"=jogamp.pack1&"+USR_PKG+
"=com.jogamp.pack2",
404 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+USR_PKG+
"=jogamp.pack1&"+USR_PKG+
"=javax.pack2&"+USR_PKG+
"=com.jogamp.pack3&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+
"=arg1&"+ARG+
"=arg2=arg2value&"+ARG+
"=arg3",
405 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+USR_PKG+
"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+
"=arg1&"+ARG+
"=arg2=arg2value&"+ARG+
"=arg3",
406 SCHEME+
"://"+
HOST+
"/com.jogamp.TestActivity?"+USR_PKG+
"=jogamp.pack1&"+ARG+
"=arg1&"+ARG+
"=arg2=arg2value&"+ARG+
"=arg3"
410 for(
int i=0; i<args.length; i++) {
411 final String uri_s = args[i];
412 final Uri uri0 = Uri.parse(uri_s);
416 System.err.println(
"Error: NULL JogAmpLauncherUtil: <"+uri_s+
"> -> "+uri0+
" -> NULL");
418 final Uri uri1 = data.
getUri();
419 if(!uri0.equals(uri1)) {
421 System.err.println(
"Error: Not equal: <"+uri_s+
"> -> "+uri0+
" -> "+uri1);
423 System.err.println(
"OK: "+uri1);
427 System.err.println(
"LauncherUtil Self Test: Errors: "+errors);
abstract List< String > getUsrPackages()
Must return a list of required user packages, at least one containing the activity.
boolean finishAfterDelegate()
Returns true if this launcher activity shall end after starting the downstream activity.
void onCreate(final Bundle savedInstanceState)
String getAction()
Returns the default LauncherUtil#LAUNCH_ACTIVITY_NORMAL action.
void init()
Custom initialization hook which can be overriden to setup data, e.g.
abstract List< String > getSysPackages()
Return a list of required system packages w/ native libraries, may return null or a zero sized list.
final ArrayList< String > getArguments()
Returns the commandline arguments, which are being propagated to the target activity.
abstract String getActivityName()
Must return the downstream Activity class name.
final OrderedProperties getProperties()
Returns the properties, which are being propagated to the target activity.
Data set to transfer from and to launch URI consisting out of:
final String getActivityName()
final List< String > getPropertyKeys()
final String getProperty(final String key)
final void clearSystemProperties()
final OrderedProperties getProperties()
final void addUsrPackage(final String p)
final void addAllSysPackages(final List< String > plist)
final void addAllProperties(final OrderedProperties props)
final ArrayList< String > getArguments()
final List< String > getSysPackages()
final void setActivityName(final String name)
final void setProperty(final String key, final String value)
final void addAllUsrPackages(final List< String > plist)
final void addArgument(final String arg)
final void addSysPackage(final String p)
final List< String > getUsrPackages()
static final DataSet create(final Uri uri)
final void setSystemProperties()
final void addAllArguments(final List< String > args)
final List< String > getPropertyKeys()
Returns the list of property keys in the order, as they were added.
final void setSystemProperties()
final void addAll(final OrderedProperties props)
final void setProperty(final String key, final String value)
final void clearSystemProperties()
final Map< String, String > getProperties()
final String getProperty(final String key)
Helper class to parse Uri's and programmatically add package names and properties to create an Uri or...
static final String SCHEME
The protocol launch
static final String LAUNCH_JUNIT
FIXME: TODO.
static void main(String[] args)
static final String LAUNCH_MAIN
FIXME: TODO.
static final String HOST
The host jogamp.org
static final String LAUNCH_ACTIVITY_NORMAL
Default launch mode.
static final String LAUNCH_ACTIVITY_TRANSPARENT
Transparent launch mode.
static final Intent getIntent(final String action, final DataSet data)