X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=src%2Fro%2Fieval%2Ffonbot%2FHeavy.java;h=f1afb0b3842f4f458ea489b74a94813c8be46247;hb=d87d24ba0dcb4a7c215252622cfd2bbb0f140175;hp=df48722ea5b6dacb9cd65102165b54945481d1a2;hpb=8dfb76c9431dbf8401412cb92c7512e7dc3081a2;p=fonbot.git diff --git a/src/ro/ieval/fonbot/Heavy.java b/src/ro/ieval/fonbot/Heavy.java index df48722..f1afb0b 100644 --- a/src/ro/ieval/fonbot/Heavy.java +++ b/src/ro/ieval/fonbot/Heavy.java @@ -166,6 +166,7 @@ final class Heavy { final Date locationDate=new Date(loc.getTime()); sb.append(" "); sb.append(toNonNull(context.getString(at))); + sb.append(" "); sb.append(locationDate.toString()); Utils.sendMessage(toNonNull(context), toNonNull(replyTo), toNonNull(sb.toString())); } @@ -322,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 * @@ -460,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; } } @@ -938,7 +979,7 @@ final class Heavy { * @see LocationManager#requestLocationUpdates(String, long, float, LocationListener) */ public static void location(final Context context, final Address replyTo, final String provider,final long minTime,final float minDistance){ - final LocationManager man=(LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + final LocationManager man=(LocationManager) context.getApplicationContext().getSystemService(Context.LOCATION_SERVICE); if(locationListener!=null) nolocation(context, toNonNull(Address.BLACKHOLE)); Utils.registerOngoing(context, toNonNull(OngoingEvent.LOCATION)); @@ -1048,7 +1089,7 @@ final class Heavy { */ public static void nolocation(final Context context, final Address replyTo){ Utils.unregisterOngoing(context, toNonNull(OngoingEvent.LOCATION)); - final LocationManager man=(LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + final LocationManager man=(LocationManager) context.getApplicationContext().getSystemService(Context.LOCATION_SERVICE); man.removeUpdates(locationListener); locationListener=null; Utils.sendMessage(context, replyTo, no_longer_listening_for_location_updates); @@ -1507,7 +1548,7 @@ final class Heavy { */ public static void poll(final Context context, final Address replyTo) { Utils.sendMessage(context, replyTo, polling_server); - new PollServerAsyncTask().execute(); + Utils.pollServer(context); } /** @@ -1519,9 +1560,9 @@ final class Heavy { */ public static void poll(final Context context, final Address replyTo, final long ms){ final AlarmManager man=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - final Intent pollAlarm=new Intent(context, LocalBroadcastReceiver.class); - pollAlarm.setAction(LocalBroadcastReceiver.ACTION_POLL_ALARM); - final PendingIntent intent=PendingIntent.getBroadcast(context, 0, pollAlarm, 0); + final Intent pollAlarm=new Intent(context, FonBotMainService.class); + pollAlarm.setAction(FonBotMainService.ACTION_TRIGGER_POLL); + final PendingIntent intent=PendingIntent.getService(context, 0, pollAlarm, 0); if(ms==0){ Utils.unregisterOngoing(context, toNonNull(OngoingEvent.POLL)); man.cancel(intent); @@ -1742,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); + } }