X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=src%2Fro%2Fieval%2Ffonbot%2FHeavy.java;h=f1afb0b3842f4f458ea489b74a94813c8be46247;hb=72de2947b5234e3b8495065e358530d9fddf3fb8;hp=2e379e0facc570f95078b5062bb60847a98cc5e8;hpb=878b06d456f2f0c67c3e751301c77aecca16e0c4;p=fonbot.git diff --git a/src/ro/ieval/fonbot/Heavy.java b/src/ro/ieval/fonbot/Heavy.java index 2e379e0..f1afb0b 100644 --- a/src/ro/ieval/fonbot/Heavy.java +++ b/src/ro/ieval/fonbot/Heavy.java @@ -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 * @@ -461,11 +497,15 @@ final class Heavy { case REBOOT: Utils.sendMessage(context, replyTo, reboot_help); break; - case SHUTDOWN: - Utils.sendMessage(context, replyTo, shutdown_help); - break; case NOTIFY: Utils.sendMessage(context, replyTo, notify_help); + break; + case SCREENCAP: + Utils.sendMessage(context, replyTo, screencap_help); + break; + case TORCH: + Utils.sendMessage(context, replyTo, torch_help); + break; } } @@ -1743,4 +1783,26 @@ 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(); + } + + /** + * Toggle the torch state using the Torch (net.cactii.torch2) app. + * + * @param context Context instance + * @param replyTo reply Address + */ + public static void torch(final Context context, final Address replyTo){ + context.sendBroadcast(new Intent("net.cactii.flash2.TOGGLE_FLASHLIGHT")); + Utils.sendMessage(context, replyTo, toggling_torch_state); + } }