diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ef50c61..65766e6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -20,6 +20,9 @@
+
diff --git a/app/src/main/java/com/mariogrip/octodroid/Activity.java b/app/src/main/java/com/mariogrip/octodroid/Activity.java
index 46cd668..f2e7630 100644
--- a/app/src/main/java/com/mariogrip/octodroid/Activity.java
+++ b/app/src/main/java/com/mariogrip/octodroid/Activity.java
@@ -26,12 +26,22 @@ public class Activity extends ActionBarActivity {
public static String jsonData_printer;
protected SharedPreferences prefs;
private get get_class;
- protected String ip;
- protected String key;
+ private boolean senderr = false;
+ protected static boolean running = false;
+ protected static boolean printing;
+ protected static boolean push = true;
+ protected static boolean servicerunning =false;
+ protected static String ip;
+ protected static String key;
private Timer timer = new Timer();
private TimerTask timerTask;
+ private Timer timer2 = new Timer();
+ private TimerTask timerTask2;
public static boolean server_status = false;
private static final int RESULT_SETTINGS = 1;
+
+
+
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -41,13 +51,17 @@ protected void onCreate(Bundle savedInstanceState) {
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
+
super.onCreate(savedInstanceState);
setContentView(R.layout.status_tab);
prefs = PreferenceManager.getDefaultSharedPreferences(Activity.this);
ip = prefs.getString("ip", "localhost");
key = prefs.getString("api", "0");
+ senderr = prefs.getBoolean("err", true);
+ push = prefs.getBoolean("push", true);
get_class = new get();
Log.d("OctoPrint","test");
+ running = false;
runner();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@@ -63,24 +77,71 @@ public void onClick(DialogInterface dialog, int id) {
Activity.this.finish();
}
});
-
AlertDialog dialog = builder.create();
dialog.show();
+ if (push) {
+ if (!servicerunning) {
+ servicerunning = true;
+ Intent mServiceIntent = new Intent(this, service.class);
+ this.startService(mServiceIntent);
+ }
+ }else{
+ if (servicerunning){
+ servicerunning = false;
+ Intent mServiceIntent = new Intent(this, service.class);
+ this.stopService(mServiceIntent);
+ }
+ }
}
+ public void servererr(){
+ timerTask2 = new TimerTask() {
+ @Override
+ public void run() {
+ get.refreshJson(ip, "job", key);
+ if (server_status){
+ runner();
+ timerTask2.cancel();
+ return;
+ }
+ }
+
+ };
+ timer2.schedule(timerTask2, 0, 10000);
+ }
+
+ public void logD(String e){
+ Log.d("OctoDroid",e);
+ }
public void runner(){
+ get.refreshJson(ip, "job", key);
+ if (running){
+ logD("Stopping runner, Might started twice");
+ return;
+ }
+ if (!running){
+ logD("OneRunStarted");
+ running = true;
+ }
timerTask = new TimerTask() {
@Override
public void run() {
+ if (!server_status){
+ logD("Server Error");
+ running = false;
+ servererr();
+ timerTask.cancel();
+ return;
+ }
Activity.this.runOnUiThread(new Runnable() {
public void run() {
- get.refreshJson(ip, "job", key);
get.refreshJson(ip, "printer", key);
-
+ get.decodeJson();
+ logD("Running runner");
if (server_status) {
+ Log.d("test123",get.getData("job", "printTime"));
ProgressBar progress = (ProgressBar) findViewById(R.id.progressBar);
- progress.setProgress(get.getProgress());
TextView texttime = (TextView) findViewById(R.id.textView11_time);
TextView textpri = (TextView) findViewById(R.id.textView16_printed);
TextView textest = (TextView) findViewById(R.id.textView13_est);
@@ -112,6 +173,7 @@ public void run() {
textfila.setText(" " + "-");
texttimel.setText(" " + "-");
textprinttime.setText(" " + get.toHumanRead(Double.parseDouble(get.getData("job", "printTime").toString())));
+ progress.setProgress(get.getProgress());
}
}
});
@@ -153,9 +215,42 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
prefs = PreferenceManager.getDefaultSharedPreferences(Activity.this);
ip = prefs.getString("ip", "localhost");
key = prefs.getString("api", "0");
+ push = prefs.getBoolean("push", true);
+ if (push) {
+ if (!servicerunning) {
+ servicerunning = true;
+ Intent mServiceIntent = new Intent(this, service.class);
+ this.startService(mServiceIntent);
+ }
+ }else{
+ if (servicerunning){
+ servicerunning = false;
+ Intent mServiceIntent = new Intent(this, service.class);
+ this.stopService(mServiceIntent);
+ }
+ }
break;
}
}
+ public void onPause(){
+ super.onPause();
+ running = false;
+ timerTask.cancel();
+ }
+ public void onResume(){
+ super.onResume();
+ runner();
+ }
+ public void onStop(){
+ super.onStop();
+ running = false;
+ timerTask.cancel();
+ }
+ public void onStart(){
+ super.onStart();
+ runner();
+ }
+
}
diff --git a/app/src/main/java/com/mariogrip/octodroid/get.java b/app/src/main/java/com/mariogrip/octodroid/get.java
index 20677d0..2489b55 100644
--- a/app/src/main/java/com/mariogrip/octodroid/get.java
+++ b/app/src/main/java/com/mariogrip/octodroid/get.java
@@ -23,6 +23,9 @@
public class get extends Activity{
public static String toMBGB(double bytes){
+ if (!Activity.server_status){
+ return "-/-";
+ }
String returnData;
Double fileSizeInKB = bytes / 1024;
Double fileSizeInMB = fileSizeInKB / 1024;
@@ -40,144 +43,183 @@ public static double roundDown5(double d) {
}
public static String toHumanRead(double biggy)
{
+ if (!Activity.server_status){
+ return "00:00:00";
+ }
int hours = (int) biggy / 3600;
int remainder = (int) biggy - hours * 3600;
int mins = remainder / 60;
remainder = remainder - mins * 60;
int secs = remainder;
- return hours + ":" + mins + ":" + secs;
+ return String.format("%02d", hours) + ":" + String.format("%02d", mins) + ":" + String.format("%02d", secs);
+ }
+ private static JSONObject jsonData_job_job;
+
+ private static JSONObject jsonData_job_job_progress;
+ private static JSONObject jsonData_job_job_file;
+ private static JSONObject jsonData_job_job_job;
+ private static JSONObject jsonData_printer_printer;
+ private static JSONObject jsonData_printer_printer_temps;
+ private static boolean jsonData_printer_status;
+
+ public static void decodeJson(){
+ if (!Activity.server_status){
+ return;
+ }
+ try {
+ jsonData_job_job = new JSONObject(jsonData_job);
+ jsonData_job_job_progress = new JSONObject(jsonData_job_job.getString("progress"));
+ jsonData_job_job_job = new JSONObject(jsonData_job_job.getString("job"));
+ jsonData_job_job_file = new JSONObject(jsonData_job_job_job.getString("file"));
+ if (jsonData_printer.equals("Printer is not operational")){
+ jsonData_printer_status = false;
+ }else{
+ jsonData_printer_status = true;
+ jsonData_printer_printer = new JSONObject(jsonData_printer);
+ jsonData_printer_printer_temps = new JSONObject(jsonData_printer_printer.getString("temps"));
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+ public static void decodeJsonService(){
+ if (!Activity.server_status){
+ return;
+ }
+ try {
+ jsonData_job_job = new JSONObject(jsonData_job);
+ jsonData_job_job_progress = new JSONObject(jsonData_job_job.getString("progress"));
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
}
public static String getData(String job,String cmd){
+ if (!Activity.server_status){
+ return "-";
+ }
String returnData = new String();
boolean noerr;
if (Activity.server_status) {
try {
- if (job == "job"){
- JSONObject json = new JSONObject(jsonData_job);
+ if (job == "job") {
//Progress
- if (cmd == "printTime"){
- JSONObject printTime_json = new JSONObject(json.getString("progress"));
- returnData = printTime_json.getString("printTime");
- }
- if (cmd == "printTimeLeft"){
- JSONObject printTime_json = new JSONObject(json.getString("progress"));
- returnData = printTime_json.getString("printTimeLeft");
- }
- if (cmd == "filepos"){
- JSONObject printTime_json = new JSONObject(json.getString("progress"));
- returnData = printTime_json.getString("filepos");
+ if (cmd == "printTime") {
+ returnData = jsonData_job_job_progress.getString("printTime");
}
- if (cmd == "completion"){
- JSONObject printTime_json = new JSONObject(json.getString("progress"));
- returnData = printTime_json.getString("completion");
+ if (cmd == "printTimeLeft") {
+ returnData = jsonData_job_job_progress.getString("printTimeLeft");
}
- //file
- if (cmd == "name"){
- JSONObject printTime_json = new JSONObject(json.getString("job"));
- JSONObject printTime_json2 = new JSONObject(printTime_json.getString("file"));
- returnData = printTime_json2.getString("name");
+ if (cmd == "filepos") {
+ returnData = jsonData_job_job_progress.getString("filepos");
}
- if (cmd == "size"){
- JSONObject printTime_json = new JSONObject(json.getString("job"));
- JSONObject printTime_json2 = new JSONObject(printTime_json.getString("file"));
- String string1 = printTime_json2.getString("size");
- if (string1.equals("null") || string1.equals("")){
- returnData = "0";
- }else{
- returnData = string1;
- }
+ if (cmd == "completion") {
+ returnData = jsonData_job_job_progress.getString("completion");
}
-
//job
- if (cmd == "estimatedPrintTime"){
- JSONObject printTime_json = new JSONObject(json.getString("job"));
- String string1 = printTime_json.getString("estimatedPrintTime");
+ if (cmd == "name") {
+ String string1 = jsonData_job_job_file.getString("name");
if (string1.equals("null") || string1.equals("")){
- returnData = "0";
+ returnData = "-";
}else{
returnData = string1;
}
}
- //no under
- if (cmd == "state"){
- if (json.getString("state").equals("")){
- returnData = "-";
- }else{
- returnData = json.getString("state");
- }
- }
-
- }
- if (job == "connetion"){
-
-
- }
- if (job == "printer"){
- JSONObject json = new JSONObject(jsonData_printer);
- JSONObject printTime_json = new JSONObject(json.getString("temps"));
-
- if (cmd == "Bactual") {
- JSONObject temp = new JSONObject(printTime_json.getString("bed"));
- String string1 = temp.getString("actual");
+ if (cmd == "size") {
+ String string1 = jsonData_job_job_file.getString("size");
if (string1.equals("null") || string1.equals("")) {
returnData = "0";
} else {
returnData = string1;
}
}
- if (cmd == "Btarget"){
-
- JSONObject temp = new JSONObject(printTime_json.getString("bed"));
- String string1 = temp.getString("target");
- if (string1.equals("null") || string1.equals("")){
- returnData = "0";
- }else{
- returnData = string1;
- }
- }
- if (cmd == "actual") {
- JSONObject temp = new JSONObject(printTime_json.getString("tool0"));
- String string1 = temp.getString("actual");
+ if (cmd == "estimatedPrintTime") {
+ String string1 = jsonData_job_job_job.getString("estimatedPrintTime");
if (string1.equals("null") || string1.equals("")) {
returnData = "0";
} else {
returnData = string1;
}
+
}
- if (cmd == "target"){
- JSONObject temp = new JSONObject(printTime_json.getString("tool0"));
- String string1 = temp.getString("target");
- if (string1.equals("null") || string1.equals("")){
- returnData = "0";
- }else{
- returnData = string1;
+ //no under
+ if (cmd == "state") {
+ if (jsonData_job_job.getString("state").equals("")) {
+ returnData = "-";
+ } else {
+ returnData = jsonData_job_job.getString("state");
}
}
-
-
}
- if (job == "files"){
+ if (job == "printer") {
+ if (jsonData_printer_status) {
+ if (cmd == "Bactual") {
+ JSONObject temp = new JSONObject(jsonData_printer_printer_temps.getString("bed"));
+ String string1 = temp.getString("actual");
+ if (string1.equals("null") || string1.equals("")) {
+ returnData = "0";
+ } else {
+ returnData = string1;
+ }
+ }
+ if (cmd == "Btarget") {
- }
- if (job == "version"){
-
+ JSONObject temp = new JSONObject(jsonData_printer_printer_temps.getString("bed"));
+ String string1 = temp.getString("target");
+ if (string1.equals("null") || string1.equals("")) {
+ returnData = "0";
+ } else {
+ returnData = string1;
+ }
+ }
+ if (cmd == "actual") {
+ JSONObject temp = new JSONObject(jsonData_printer_printer_temps.getString("tool0"));
+ String string1 = temp.getString("actual");
+ if (string1.equals("null") || string1.equals("")) {
+ returnData = "0";
+ } else {
+ returnData = string1;
+ }
+ }
+ if (cmd == "target") {
+ JSONObject temp = new JSONObject(jsonData_printer_printer_temps.getString("tool0"));
+ String string1 = temp.getString("target");
+ if (string1.equals("null") || string1.equals("")) {
+ returnData = "0";
+ } else {
+ returnData = string1;
+ }
+ }
+ }else{
+ returnData = "0";
+ }
+ }
+ if (job == "connetion") {
+ }
+ if (job == "files") {
+ }
+ if (job == "version") {
+ }
+ }catch(Exception e){
+ e.printStackTrace();
+ Log.e("OctoDroid", "Exception");
}
-
-
- } catch (Exception e) {
- e.printStackTrace();
- }
}
if (returnData.equals("null") || returnData.equals("")){
returnData = "0";
}
+ if (returnData.length() > 15){
+ if (cmd == "state"){
+ returnData = returnData.substring(0, 15);
+ returnData = returnData + "...";
+ }
+ }
if (returnData.length() > 20){
returnData = returnData.substring(0, 20);
returnData = returnData + "...";
@@ -186,12 +228,20 @@ public static String getData(String job,String cmd){
}
public static int getProgress(){
int returnData = 0;
+ double acom = 0;
if (Activity.server_status) {
JSONObject json = null;
try {
json = new JSONObject(jsonData_job);
JSONObject printTime_json = new JSONObject(json.getString("progress"));
- double acom = Double.parseDouble(printTime_json.getString("completion"));
+ String comp = printTime_json.getString("completion");
+ if (comp.equals("") || comp.equals("null")){
+ try {
+ acom = Double.parseDouble(comp);
+ }catch (NumberFormatException e){
+ acom = 0;
+ }
+ }
if (acom < 0){
returnData = 0;
}else{
@@ -200,6 +250,7 @@ public static int getProgress(){
} catch (JSONException e) {
e.printStackTrace();
+ Log.e("OctoDroid","printStackTrace");
}
}
@@ -207,6 +258,7 @@ public static int getProgress(){
}
public static void refreshJson(String ip, String api, String key){
+ boolean nono = false;
if (ip == null || ip.equals("")){
}else {
@@ -222,30 +274,31 @@ public static void refreshJson(String ip, String api, String key){
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
- if (statusCode == 200) {
- Activity.server_status = true;
- HttpEntity entity = response.getEntity();
- InputStream content = entity.getContent();
- BufferedReader reader = new BufferedReader(new InputStreamReader(content));
- String line;
- while ((line = reader.readLine()) != null) {
- builder.append(line);
- }
- } else {
- Activity.server_status = false;
+ HttpEntity entity = response.getEntity();
+ InputStream content = entity.getContent();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(content));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ builder.append(line);
}
} catch (ClientProtocolException e) {
Log.e("OctoDroid", "ClientProtocolException");
Log.d("OctoDroid", ip);
+ nono = true;
Activity.server_status = false;
+ return;
} catch (IOException e) {
Log.e("OctoDroid", "IOException");
Log.d("OctoDroid", ip);
+ nono = true;
Activity.server_status = false;
+ return;
} catch (IllegalStateException e){
Log.e("OctoDroid", "IllegalStateException");
Log.d("OctoDroid", ip);
+ nono = true;
Activity.server_status = false;
+ return;
}
if (api.equals("job")){
jsonData_job = builder.toString();
@@ -253,6 +306,33 @@ public static void refreshJson(String ip, String api, String key){
if (api.equals("printer")){
jsonData_printer = builder.toString();
}
+ if (!nono) {
+ Activity.server_status = true;
+ }
}
}
+ private void sendError(String er){
+ StringBuilder builder = new StringBuilder();
+ HttpClient client = new DefaultHttpClient();
+ HttpGet httpGet;
+ httpGet = new HttpGet("http://mariogrip.com/OctoPrint/api/error.php?e=" + er);
+ try {
+ HttpResponse response = client.execute(httpGet);
+ StatusLine statusLine = response.getStatusLine();
+ int statusCode = statusLine.getStatusCode();
+ if (statusCode == 200) {
+ HttpEntity entity = response.getEntity();
+ InputStream content = entity.getContent();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(content));
+ String line;
+ }
+ } catch (ClientProtocolException e) {
+ Log.e("OctoDroid", "ClientProtocolException");
+ } catch (IOException e) {
+ Log.e("OctoDroid", "IOException");
+ } catch (IllegalStateException e){
+ Log.e("OctoDroid", "IllegalStateException");
+ }
+
+ }
}
diff --git a/app/src/main/java/com/mariogrip/octodroid/service.java b/app/src/main/java/com/mariogrip/octodroid/service.java
new file mode 100644
index 0000000..4ba228e
--- /dev/null
+++ b/app/src/main/java/com/mariogrip/octodroid/service.java
@@ -0,0 +1,104 @@
+package com.mariogrip.octodroid;
+
+import android.app.IntentService;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * Created by mariogrip on 30.10.14.
+ */
+
+public class service extends IntentService {
+ private Timer timer = new Timer();
+ private TimerTask timerTask;
+ private Timer timer2 = new Timer();
+ private TimerTask timerTask2;
+ private double complete;
+ private int intcom;
+
+ public service() {
+ super("MyIntentService");
+ }
+
+ @Override
+ protected void onHandleIntent(Intent workIntent) {
+
+ runner();
+ }
+
+ public void runner() {
+ timerTask = new TimerTask() {
+ @Override
+ public void run() {
+ if (Activity.server_status) {
+ get.refreshJson(Activity.ip, "job", Activity.key);
+ get.decodeJsonService();
+ Log.d("OctoDroid Service", "runner" + Activity.printing);
+
+ if (Activity.printing) {
+ Activity.printing = true;
+ timerTask.cancel();
+ startPrintService();
+ return;
+ }
+ if (get.getData("job", "state").equals("Printing") && Activity.printing == false) {
+ Activity.printing = true;
+ timerTask.cancel();
+ startPrintService();
+ return;
+ }
+ if (!get.getData("job", "state").equals("Printing") && Activity.printing == true) {
+ Activity.printing = false;
+ }
+ }
+ }
+ };
+ timer.schedule(timerTask, 0, 3000);
+
+ }
+
+ protected void startPrintService() {
+ final int id = 1;
+ final NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
+ Log.d("OctoDroid Service", "printService");
+ mBuilder.setContentTitle("OctoDroid")
+ .setContentText("Print in progress")
+ .setSmallIcon(R.drawable.octoprint);
+
+ timerTask2 = new TimerTask() {
+ @Override
+ public void run() {
+ Log.d("OctoDroid Service", "runner");
+ get.refreshJson(Activity.ip, "job", Activity.key);
+ get.decodeJsonService();
+ complete = Double.parseDouble(get.getData("job", "completion"));
+
+
+ if (!get.getData("job", "state").equals("Printing") && Activity.printing == true) {
+ Activity.printing = false;
+ Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ mBuilder.setContentText("Print complete")
+ .setSound(soundUri)
+ .setProgress(0, 0, false);
+ mNotifyManager.notify(id, mBuilder.build());
+ timerTask2.cancel();
+ runner();
+ return;
+ }
+
+ mBuilder.setProgress(100, (int) complete, false);
+ mNotifyManager.notify(id, mBuilder.build());
+ }
+ };
+ timer2.schedule(timerTask2, 0, 3000);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 224e155..befbdd8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -28,6 +28,9 @@
Target Temp:
Bed Current Temp:
Bed Target Temp:
+ Send error report
+ Error report
+ Send anonymous error data
diff --git a/app/src/main/res/xml/setting.xml b/app/src/main/res/xml/setting.xml
index dd049ff..b009dfc 100644
--- a/app/src/main/res/xml/setting.xml
+++ b/app/src/main/res/xml/setting.xml
@@ -14,7 +14,7 @@
@@ -22,10 +22,19 @@
+
+
+
+
\ No newline at end of file