]> iEval git - fonbot.git/blobdiff - src/ro/ieval/fonbot/Heavy.java
Add torch command
[fonbot.git] / src / ro / ieval / fonbot / Heavy.java
index df48722ea5b6dacb9cd65102165b54945481d1a2..f1afb0b3842f4f458ea489b74a94813c8be46247 100644 (file)
@@ -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);
+       }
 }
This page took 0.027535 seconds and 4 git commands to generate.