Warning: session_start(): open(/var/lib/php/sessions/sess_aed0e2e5s9ppvmg44ds8sscdic, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!752
import java.util.*;
import java.util.zip.*;
import java.util.List;
import java.util.regex.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import java.lang.management.*;
import java.security.*;
import java.security.spec.*;
import java.math.*;
import android.widget.*;
import android.view.*;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.content.Context;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.inputmethod.*;
import android.content.*;
import android.text.*;
public class main {
static String awarenessID = "#1004078";
static Class x30;
static List programsStarted = new ArrayList();
static File defSnip, defargs;
static class Prog {
String snippetID;
Thread thread;
}
static class Lg {
static int maxBufferLength = 2048;
Activity context;
ScrollView sv;
TextView tv;
EditText inputView;
LinearLayout ll;
StringBuffer buf = new StringBuffer();
Lg(Activity context) {
this.context = context;
sv = new ScrollView(context);
tv = new TextView(context);
tv.setText(buf.toString());
sv.addView(tv);
sv.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT,
1.0f));
inputView = new EditText(context);
inputView.setInputType(InputType.TYPE_CLASS_TEXT); // turn off multiline
inputView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
String line = inputView.getText().toString();
try {
pout3.write((line + "\n").getBytes("UTF-8"));
pout3.flush();
} catch (Exception e) {}
inputView.selectAll();
}
return false;
}
});
ll = new LinearLayout(context);
ll.setOrientation(ll.VERTICAL);
ll.addView(sv);
ll.addView(inputView);
}
View getView() {
return ll;
}
void shortenBuffer() {
while (buf.length() > maxBufferLength) {
String s = buf.toString();
int i = s.indexOf('\n');
if (i < 0) return;
buf = new StringBuilder(s.substring(i+1));
}
}
void print(final String s) {
context.runOnUiThread(new Runnable() {
public void run() {
buf.append(s);
shortenBuffer();
tv.setText(buf.toString());
sv.post(new Runnable() {
public void run() {
// This method works but animates the scrolling
// which looks weird on first load
sv.fullScroll(View.FOCUS_DOWN);
// This method works even better because there are no animations.
//sv.scrollTo(0, sv.getBottom());
}
});
}
});
}
void println(String s) {
print(s + "\n");
}
}
public static String snippetToRun;
static Context androidContext;
public static View main(final Context _context) throws Exception {
final Activity context = _context instanceof Activity ? (Activity) _context : null;
System.out.println("676 context: " + _context);
androidContext = _context;
if (context == null) {
if (snippetToRun != null) {
new Thread() {
public void run() {
String[] a = { snippetToRun };
callx30(a);
}
}.start();
}
return null;
}
defSnip = new File(userHome(), ".javax/defsnip");
String id = loadTextFile(defSnip.getPath(), "636");
defargs = new File(userHome(), ".javax/defargs");
String arg = loadTextFile(defargs.getPath(), "");
ScrollView sv = new ScrollView(context);
LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.VERTICAL);
LinearLayout line1 = new LinearLayout(context);
TextView label = new TextView(context);
label.setText("Run which snippet ID?");
line1.addView(label);
final EditText tv = new EditText(context);
// BAD - tv.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
tv.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);
tv.setText(id);
line1.addView(tv);
Button btnGo = new Button(context);
btnGo.setText("Go");
line1.addView(btnGo);
ll.addView(line1);
LinearLayout line2 = new LinearLayout(context);
label = new TextView(context);
label.setText("Program arguments:");
line2.addView(label);
final EditText tvArgs = new EditText(context);
tvArgs.setText(arg);
line2.addView(tvArgs);
ll.addView(line2);
LinearLayout line3 = new LinearLayout(context);
/*Button btnLeo = new Button(context);
btnLeo.setText("Sprechen mit Leo");
line3.addView(btnLeo);*/
Button btn = new Button(context);
btn.setText("Start Awareness [" + awarenessID + "]");
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
saveDef(awarenessID, "");
run(context, awarenessID, new String[0]);
}
});
line3.addView(btn);
ll.addView(line3);
btnGo.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
hideKeyboard(context);
String snippetID = tv.getText().toString();
String text = "Running: " + snippetID;
Toast.makeText(context, text, 2000).show();
saveDef(snippetID, tvArgs.getText().toString());
// TODO: quoted args
run(context, snippetID, tvArgs.getText().toString().split(" +"));
}
});
sv.addView(ll);
return sv;
}
static void saveDef(String snippetID, String args) {
try {
saveTextFile(defSnip.getPath(), snippetID);
saveTextFile(defargs.getPath(), args);
} catch (IOException e) {
}
}
static Lg lg;
static int systemInPipeSize = 4*1024; // 4 K
static PipedInputStream pin3;
static PipedOutputStream pout3;
public static void run(final Activity context, final String mainSnippet, final String[] args) {
try {
pin3 = new PipedInputStream(systemInPipeSize);
pout3 = new PipedOutputStream(pin3);
} catch (IOException e) {}
lg = new Lg(context);
OutputStream outputStream = new OutputStream() {
public void write(int b) {
try {
lg.print(new String(new byte[] {(byte) b}, "UTF-8")); // This is crap
} catch (UnsupportedEncodingException e) {}
}
@Override
public void write(byte[] b, int off, int len) {
try {
lg.print(new String(b, off, len, "UTF-8")); // This is crap
} catch (UnsupportedEncodingException e) {}
}
};
PrintStream ps = new PrintStream(outputStream, true);
System.setOut(ps);
System.setErr(ps);
System.setIn(pin3);
Prog prog = new Prog();
prog.snippetID = mainSnippet;
prog.thread = new Thread() {
public void run() {
try {
String[] a = new String[args.length+1];
System.arraycopy(args, 0, a, 1, args.length);
a[0] = mainSnippet;
callx30(a);
} catch (Throwable e) {
System.out.println("Whoa!");
e.printStackTrace();
}
}
};
programsStarted.add(prog);
prog.thread.start();
context.setContentView(lg.getView());
}
static void setContentViewInUIThread(final View view) {
((Activity) androidContext).runOnUiThread(new Runnable() {
public void run() {
((Activity) androidContext).setContentView(view);
}
});
}
public static void hideKeyboard(Activity context) {
View view = context.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
static void onActivityResult(int requestCode, int resultCode, Intent data) {
/* TODO?
if (x30.mainClass != null)
x30.call(x30.mainClass, "onActivityResult", requestCode, resultCode, data);*/
}
static void onPrepareOptionsPanel(View view, Menu menu) {
/* TODO
if (x30.mainClass != null)
x30.call(x30.mainClass, "onPrepareOptionsPanel", view, menu);*/
}
static boolean onOptionsItemSelected(MenuItem item) {
/* TODO
if (x30.mainClass != null)
return (boolean) x30.call(x30.mainClass, "onOptionsItemSelected", item);*/
return true;
}
static void callx30(S[] args) {
getx30();
print("Calling x30 " + join(" ", args));
pcall {
set(x30, "androidContext", androidContext);
callMain(x30, args);
//print("x30 done");
}
}
static synchronized void getx30() {
if (x30 == null) {
O dataStore = null;
pcall {
dataStore = Class.forName("de.tinybrain.javax_allperms.DataStore");
}
if (dataStore != null)
x30 = (Class) call(dataStore, "get", "x30");
if (x30 == null) {
x30 = loadx30("#1004182");
callOpt(dataStore, "put", "x30", x30);
setOpt(x30, "bootUpClass", main.class);
}
}
}
static Class> loadx30(String programID) ctex {
System.out.println("Program ID: " + programID);
S url = "http://tinybrain.de:8080/dexcompile.php?id=" + parseSnippetID(programID);
byte[] dexData = loadBinaryPage(url);
if (!isDex(dexData))
throw new RuntimeException("Dex generation error");
System.out.println("Dex loaded: " + dexData.length + "b");
File dexDir = makeAndroidTempDir();
File dexFile = new File(dexDir, System.currentTimeMillis() + ".dex");
File dexOutputDir = makeAndroidTempDir();
System.out.println("Saving dex to: " + dexDir.getAbsolutePath());
try {
saveBinaryFile(dexFile.getPath(), dexData);
} catch (Throwable e) {
System.out.println("Whoa!");
throw new RuntimeException(e);
}
System.out.println("Getting parent class loader.");
ClassLoader parentClassLoader =
main.class.getClassLoader().getParent();
//System.out.println("Making DexClassLoader.");
//DexClassLoader classLoader = new DexClassLoader(dexFile.getAbsolutePath(), dexOutputDir.getAbsolutePath(), null,
// parentClassLoader);
Class dcl = Class.forName("dalvik.system.DexClassLoader");
Object classLoader = dcl.getConstructors()[0].newInstance(dexFile.getAbsolutePath(), dexOutputDir.getAbsolutePath(), null,
parentClassLoader);
System.out.println("Loading main class.");
Class> theClass = (Class>) call(classLoader, "loadClass", "x30");
System.out.println("Main class loaded.");
try {
set(theClass, "androidContext", androidContext);
} catch (Throwable e) {}
setVars(theClass, programID);
hotwire_copyOver(theClass);
return theClass;
}
static void setVars(Class> theClass, String programID) {
try {
set(theClass, "programID", programID);
} catch (Throwable e) {}
try {
set(theClass, "__javax", x30);
} catch (Throwable e) {}
}
static String getConsoleOutput() {
ret lg.buf.toString();
}
}