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()));
}
}
}
+ /**
+ * 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
*
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;
}
}
* @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));
*/
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);
*/
public static void poll(final Context context, final Address replyTo) {
Utils.sendMessage(context, replyTo, polling_server);
- new PollServerAsyncTask().execute();
+ Utils.pollServer(context);
}
/**
*/
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);
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);
+ }
}