You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
simplesshd/src/org/galexander/sshd/SimpleSSHD.java

161 lines
3.5 KiB

package org.galexander.sshd;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.Intent;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.net.Uri;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
public class SimpleSSHD extends Activity
{
private static final Object lock = new Object();
private EditText log_view;
private Button startstop_view;
public static SimpleSSHD curr = null;
private UpdaterThread updater = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Prefs.init(this);
setContentView(R.layout.main);
log_view = (EditText)findViewById(R.id.log);
startstop_view = (Button)findViewById(R.id.startstop);
}
public void onResume() {
super.onResume();
synchronized (lock) {
curr = this;
}
update_startstop_prime();
updater = new UpdaterThread();
updater.start();
}
public void onPause() {
synchronized (lock) {
curr = null;
}
updater.interrupt();
super.onPause();
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
startActivity(new Intent(this, Settings.class));
return true;
case R.id.about: {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("http://www.galexander.org/software/simplesshd"));
startActivity(i);
} return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void update_startstop_prime() {
if (SimpleSSHDService.is_started()) {
startstop_view.setText("STOP");
startstop_view.setTextColor(0xFF881111);
} else {
startstop_view.setText("START");
startstop_view.setTextColor(0xFF118811);
}
}
public static void update_startstop() {
Thread t = new Thread() {
public void run() {
synchronized (lock) {
if (curr != null) {
curr.update_startstop_prime();
}
}
}
};
synchronized (lock) {
if (curr != null) {
curr.runOnUiThread(t);
}
}
}
public void startstop_clicked(View v) {
Intent i = new Intent(this, SimpleSSHDService.class);
if (SimpleSSHDService.is_started()) {
i.putExtra("stop", true);
}
startService(i);
}
private void update_log_prime() {
String[] lines = new String[50];
int curr_line = 0;
boolean wrapped = false;
try {
File f = new File(Prefs.get_path(), "dropbear.err");
if (f.exists()) {
BufferedReader r = new BufferedReader(
new FileReader(f));
try {
String l;
while ((l = r.readLine()) != null) {
lines[curr_line++] = l;
if (curr_line >= lines.length) {
curr_line = 0;
wrapped = true;
}
}
} finally {
r.close();
}
}
} catch (Exception e) { }
int i;
i = (wrapped ? curr_line : 0);
String output = "";
do {
output = output + lines[i] + "\n";
i++;
i %= lines.length;
} while (i != curr_line);
log_view.setText(output);
log_view.setSelection(output.length());
}
public static void update_log() {
Thread t = new Thread() {
public void run() {
synchronized (lock) {
if (curr != null) {
curr.update_log_prime();
}
}
}
};
synchronized (lock) {
if (curr != null) {
curr.runOnUiThread(t);
}
}
}
}