Add screencap command
[fonbot.git] / src / ro / ieval / fonbot / Heavy.java
index 3af6bc463e6da2b1e236048c7a67ba4360213ff3..c5c6de7462450b04f5529aaf38dc6621216e7991 100644 (file)
@@ -323,6 +323,42 @@ final class Heavy {
                }
        }
 
+       /**
+        * Runnable that takes a screen capture and stores it in a file.
+        */
+       private static final class ScreencapRunnable implements Runnable{
+               private final Context context;
+               private final Address replyTo;
+               private final String filename;
+
+               ScreencapRunnable(final Context context, final Address replyTo, final String filename){
+                       this.context=context;
+                       this.replyTo=replyTo;
+                       this.filename=filename;
+               }
+
+               @Override
+               public void run(){
+                       final int exitCode;
+                       try {
+                               exitCode=Runtime.getRuntime().exec(new String[]{
+                                               "su",
+                                               "-c",
+                                               "screencap -p \"" + filename + "\""
+                                       }).waitFor();
+                       } catch (final Exception e){
+                               e.printStackTrace();
+                               Utils.sendMessage(toNonNull(context), toNonNull(replyTo), screencap_failed);
+                               return;
+                       }
+
+                       if(exitCode == 0 && new File(filename).exists())
+                               Utils.sendMessage(toNonNull(context), toNonNull(replyTo), screencap_successful);
+                       else
+                               Utils.sendMessage(toNonNull(context), toNonNull(replyTo), screencap_failed);
+               }
+       }
+
        /**
         * Get help for a particular command
         *
@@ -463,6 +499,10 @@ final class Heavy {
                        break;
                case NOTIFY:
                        Utils.sendMessage(context, replyTo, notify_help);
+                       break;
+               case SCREENCAP:
+                       Utils.sendMessage(context, replyTo, screencap_help);
+                       break;
                }
        }
 
@@ -1740,4 +1780,15 @@ final class Heavy {
                                build());
                Utils.sendMessage(context, replyTo, notification_shown);
        }
+
+       /**
+        * Take a screen capture. Uses the screencap utility and requires root.
+        *
+        * @param context Context instance
+        * @param replyTo reply Address
+        * @param filename capture file location
+        */
+       public static void screencap(final Context context, final Address replyTo, final String filename){
+               new Thread(new ScreencapRunnable(context, replyTo, filename)).start();
+       }
 }
This page took 0.010007 seconds and 4 git commands to generate.