Let users disable command confirmations over SMS
[fonbot.git] / src / ro / ieval / fonbot / Heavy.java
index 4dcd0fc4317723b6cc1740bb05bb1416f677d891..f87f3f5457e69aa4ac0357b2a60ebb23a319e1bb 100644 (file)
@@ -3,11 +3,13 @@ package ro.ieval.fonbot;
 import static ro.ieval.fonbot.R.string.*;
 import static ro.ieval.fonbot.Utils.toNonNull;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.reflect.InvocationTargetException;
@@ -288,7 +290,7 @@ final class Heavy {
                                Utils.sendMessage(toNonNull(context), toNonNull(replyTo), cannot_connect_to_host_on_port, hostname, Integer.valueOf(port));
                                return null;
                        }
-                       Utils.sendMessage(toNonNull(context), toNonNull(replyTo), photo_sent);
+                       Utils.sendConfirmMessage(toNonNull(context), toNonNull(replyTo), photo_sent);
                        return null;
                }
        }
@@ -335,7 +337,7 @@ final class Heavy {
                        try{
                                sock = SocketChannel.open(new InetSocketAddress(hostname, port));
                        } catch (final IOException e){
-                               Utils.sendMessage(context, replyTo, toNonNull(context.getString(cannot_connect_to_host_on_port, hostname, Integer.valueOf(port))));
+                               Utils.sendMessage(context, replyTo, cannot_connect_to_host_on_port, hostname, Integer.valueOf(port));
                                try {
                                        in.close();
                                } catch (IOException ex) {
@@ -347,7 +349,7 @@ final class Heavy {
                        try{
                                in.transferTo(0, in.size(), sock);
                        } catch (final IOException e){
-                               Utils.sendMessage(context, replyTo, toNonNull(context.getString(io_error, e.getMessage())));
+                               Utils.sendMessage(context, replyTo, io_error, e.getMessage());
                        } finally {
                                try{
                                        in.close();
@@ -360,7 +362,7 @@ final class Heavy {
                                        //ignored
                                }
                        }
-                       Utils.sendMessage(context, replyTo, file_sent);
+                       Utils.sendConfirmMessage(context, replyTo, file_sent);
                }
        }
 
@@ -408,7 +410,7 @@ final class Heavy {
                                sock = new Socket(hostname, port);
                                in = sock.getInputStream();
                        } catch (final IOException e){
-                               Utils.sendMessage(context, replyTo, toNonNull(context.getString(cannot_connect_to_host_on_port, hostname, Integer.valueOf(port))));
+                               Utils.sendMessage(context, replyTo, cannot_connect_to_host_on_port, hostname, Integer.valueOf(port));
                                try {
                                        out.close();
                                } catch (IOException ex) {
@@ -423,7 +425,7 @@ final class Heavy {
                                while((nread = in.read(buffer)) > 0)
                                        out.write(buffer, 0, nread);
                        } catch (final IOException e){
-                               Utils.sendMessage(context, replyTo, toNonNull(context.getString(io_error, e.getMessage())));
+                               Utils.sendMessage(context, replyTo, io_error, e.getMessage());
                        } finally {
                                try{
                                        out.close();
@@ -436,7 +438,7 @@ final class Heavy {
                                        //ignored
                                }
                        }
-                       Utils.sendMessage(context, replyTo, file_received);
+                       Utils.sendConfirmMessage(context, replyTo, file_received);
                }
        }
 
@@ -477,7 +479,7 @@ final class Heavy {
                                return;
                        camera.stopPreview();
                        stopCamera();
-                       Utils.sendMessage(toNonNull(context), toNonNull(replyTo), sending_photo);
+                       Utils.sendConfirmMessage(toNonNull(context), toNonNull(replyTo), sending_photo);
                        new SendDataAsyncTask(toNonNull(context), toNonNull(replyTo), toNonNull(hostname), port, data).execute();
                }
        }
@@ -512,7 +514,7 @@ final class Heavy {
                        }
 
                        if(exitCode == 0 && new File(filename).exists())
-                               Utils.sendMessage(toNonNull(context), toNonNull(replyTo), screencap_successful);
+                               Utils.sendConfirmMessage(toNonNull(context), toNonNull(replyTo), screencap_successful);
                        else
                                Utils.sendMessage(toNonNull(context), toNonNull(replyTo), screencap_failed);
                }
@@ -632,6 +634,9 @@ final class Heavy {
                case SMS:
                        Utils.sendMessage(context, replyTo, sms_help);
                        break;
+               case SMSQ:
+                       Utils.sendMessage(context, replyTo, smsq_help);
+                       break;
                case SMSLOG:
                        Utils.sendMessage(context, replyTo, smslog_help);
                        break;
@@ -665,6 +670,17 @@ final class Heavy {
                case TORCH:
                        Utils.sendMessage(context, replyTo, torch_help);
                        break;
+               case GETFILE:
+                       Utils.sendMessage(context, replyTo, getfile_help);
+                       break;
+               case SH:
+                       Utils.sendMessage(context, replyTo, sh_help);
+                       break;
+               case ROOTSH:
+                       Utils.sendMessage(context, replyTo, rootsh_help);
+                       break;
+               default:
+                       Utils.sendMessage(context, replyTo, command_not_documented);
                }
        }
 
@@ -783,7 +799,7 @@ final class Heavy {
                man.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                savedRingVolume=man.getStreamVolume(AudioManager.STREAM_RING);
                man.setStreamVolume(AudioManager.STREAM_RING, man.getStreamMaxVolume(AudioManager.STREAM_RING), 0);
-               Utils.sendMessage(context, replyTo, ringing);
+               Utils.sendConfirmMessage(context, replyTo, ringing);
                ringtone.play();
        }
 
@@ -816,7 +832,7 @@ final class Heavy {
        private static void stopAlarm(final Context context, final Address replyTo){
                Utils.unregisterOngoing(context, toNonNull(OngoingEvent.RING));
                final AudioManager man=(AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
-               Utils.sendMessage(context, replyTo, no_longer_ringing);
+               Utils.sendConfirmMessage(context, replyTo, no_longer_ringing);
                ringtone.stop();
                man.setStreamVolume(AudioManager.STREAM_RING, savedRingVolume, 0);
                man.setRingerMode(savedRingerMode);
@@ -881,11 +897,11 @@ final class Heavy {
 
                if(on) {
                        adapter.enable();
-                       Utils.sendMessage(context, replyTo, enabling_bluetooth);
+                       Utils.sendConfirmMessage(context, replyTo, enabling_bluetooth);
                }
                else {
                        adapter.disable();
-                       Utils.sendMessage(context, replyTo, disabling_bluetooth);
+                       Utils.sendConfirmMessage(context, replyTo, disabling_bluetooth);
                }
        }
 
@@ -989,10 +1005,10 @@ final class Heavy {
                                        CommonDataKinds.Phone.LABEL);
 
                        while(inCursor.moveToNext())
-                               Utils.sendMessage(context, replyTo, toNonNull(context.getString(contact_info,
+                               Utils.sendMessage(context, replyTo, contact_info,
                                                cursor.getString(0),
                                                inCursor.getString(0),
-                                               phoneNumberType(context, inCursor.getInt(1), inCursor.getString(2)))));
+                                               phoneNumberType(context, inCursor.getInt(1), inCursor.getString(2)));
 
                        inCursor.close();
                }
@@ -1077,9 +1093,9 @@ final class Heavy {
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                final String name=Utils.callerId(context, nr);
                if(name==null)
-                       Utils.sendMessage(context, replyTo, dialing, nr);
+                       Utils.sendConfirmMessage(context, replyTo, dialing, nr);
                else
-                       Utils.sendMessage(context, replyTo, dialing, nr+" ("+name+")");
+                       Utils.sendConfirmMessage(context, replyTo, dialing, nr+" ("+name+")");
                context.startActivity(intent);
        }
 
@@ -1101,7 +1117,7 @@ final class Heavy {
                                Intent.FLAG_ACTIVITY_NEW_TASK|
                                Intent.FLAG_ACTIVITY_NO_USER_ACTION|
                                Intent.FLAG_FROM_BACKGROUND);
-               Utils.sendMessage(context, toNonNull(replyTo), showing_dialog);
+               Utils.sendConfirmMessage(context, toNonNull(replyTo), showing_dialog);
                context.startActivity(intent);
        }
 
@@ -1150,7 +1166,7 @@ final class Heavy {
                        Utils.sendMessage(context, replyTo, last_known_location);
                        locationListener.onLocationChanged(lastKnownLocation);
                }
-               Utils.sendMessage(context, replyTo, listening_for_location_updates);
+               Utils.sendConfirmMessage(context, replyTo, listening_for_location_updates);
                man.requestLocationUpdates(provider, minTime, minDistance, locationListener);
        }
 
@@ -1163,7 +1179,7 @@ final class Heavy {
        public static void lock(final Context context, final Address replyTo) {
                final DevicePolicyManager dpm=(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
                dpm.lockNow();
-               Utils.sendMessage(context, replyTo, device_locked);
+               Utils.sendConfirmMessage(context, replyTo, device_locked);
        }
 
        /**
@@ -1177,7 +1193,7 @@ final class Heavy {
                final Intent intent=new Intent("com.android.music.musicservicecommand");
                intent.putExtra("command", command);
                context.sendBroadcast(intent);
-               Utils.sendMessage(context, replyTo, command_sent);
+               Utils.sendConfirmMessage(context, replyTo, command_sent);
        }
 
        /**
@@ -1204,7 +1220,7 @@ final class Heavy {
                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);
+               Utils.sendConfirmMessage(context, replyTo, no_longer_listening_for_location_updates);
        }
 
        /**
@@ -1363,7 +1379,7 @@ final class Heavy {
         */
        public static void rm(final Context context, final Address replyTo, final String filename){
                if(new File(filename).delete())
-                       Utils.sendMessage(context, replyTo, file_deleted);
+                       Utils.sendConfirmMessage(context, replyTo, file_deleted);
                else
                        Utils.sendMessage(context, replyTo, error_while_deleting_file);
        }
@@ -1379,7 +1395,7 @@ final class Heavy {
                final DevicePolicyManager dpm=(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
 
                dpm.resetPassword("", 0);
-               Utils.sendMessage(context, replyTo, password_cleared);
+               Utils.sendConfirmMessage(context, replyTo, password_cleared);
        }
 
        /**
@@ -1394,7 +1410,7 @@ final class Heavy {
                final DevicePolicyManager dpm=(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
 
                dpm.resetPassword(password, 0);
-               Utils.sendMessage(context, replyTo, password_set);
+               Utils.sendConfirmMessage(context, replyTo, password_set);
        }
 
        /**
@@ -1405,11 +1421,11 @@ final class Heavy {
         * @param destination destination phone number
         * @param text text message contents
         */
-       public static void sms(final Context context, final Address replyTo, final String destination, final String text){
+       public static void sms(final Context context, final Address replyTo, final String destination, final String text, final boolean quiet){
                final SmsManager manager=SmsManager.getDefault();
                final ArrayList<String> messages=manager.divideMessage(text);
                if(messages.size() > 1)
-                       Utils.sendMessage(context, replyTo, message_was_split_into_parts, Integer.valueOf(messages.size()));
+                       Utils.sendConfirmMessage(context, replyTo, message_was_split_into_parts, Integer.valueOf(messages.size()));
 
                final ArrayList<PendingIntent> sents=new ArrayList<PendingIntent>(messages.size());
                final ArrayList<PendingIntent> delivereds=new ArrayList<PendingIntent>(messages.size());
@@ -1440,7 +1456,7 @@ final class Heavy {
                }
 
                Log.d(Heavy.class.getName(), "Sending sms to "+destination);
-               manager.sendMultipartTextMessage(destination, null, messages, sents, delivereds);
+               manager.sendMultipartTextMessage(destination, null, messages, sents, quiet ? null : delivereds);
        }
 
        /**
@@ -1503,7 +1519,7 @@ final class Heavy {
                        @Override
                        public void onInit(final int status) {
                                if(status==TextToSpeech.SUCCESS){
-                                       Utils.sendMessage(context, replyTo, speaking);
+                                       Utils.sendConfirmMessage(context, replyTo, speaking);
                                        tts.speak(text, TextToSpeech.QUEUE_ADD, null);
                                } else
                                        Utils.sendMessage(context, replyTo, tts_engine_not_available);
@@ -1532,7 +1548,7 @@ final class Heavy {
         */
        public static void toast(final Context context, final Address replyTo, final String text, final int duration){
                Toast.makeText(context,text,duration).show();
-               Utils.sendMessage(context, replyTo, toast_shown);
+               Utils.sendConfirmMessage(context, replyTo, toast_shown);
        }
 
        /**
@@ -1544,7 +1560,7 @@ final class Heavy {
         */
        public static void vibrate(final Context context, final Address replyTo, final long ms){
                final Vibrator v=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-               Utils.sendMessage(context, replyTo, vibrating);
+               Utils.sendConfirmMessage(context, replyTo, vibrating);
                v.vibrate(ms);
        }
 
@@ -1561,7 +1577,7 @@ final class Heavy {
                        intent.setData(uri);
                        intent.setFlags(Intent.FLAG_FROM_BACKGROUND|Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);
-                       Utils.sendMessage(context, replyTo, url_opened);
+                       Utils.sendConfirmMessage(context, replyTo, url_opened);
                } catch(ActivityNotFoundException e){
                        Utils.sendMessage(context, replyTo, no_activity_found_for_this_url);
                } catch(Exception e){
@@ -1594,9 +1610,9 @@ final class Heavy {
                final WifiManager man=(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                man.setWifiEnabled(on);
                if(on)
-                       Utils.sendMessage(context, replyTo, enabling_wifi);
+                       Utils.sendConfirmMessage(context, replyTo, enabling_wifi);
                else
-                       Utils.sendMessage(context, replyTo, disabling_wifi);
+                       Utils.sendConfirmMessage(context, replyTo, disabling_wifi);
        }
 
        /**
@@ -1630,7 +1646,7 @@ final class Heavy {
        public static void disable(final Context context, final Address replyTo, final Command command){
                PreferenceManager.getDefaultSharedPreferences(context).edit()
                .putBoolean(command+"disabled", true).commit();
-               Utils.sendMessage(context, replyTo, command_disabled, command);
+               Utils.sendConfirmMessage(context, replyTo, command_disabled, command);
        }
 
        /**
@@ -1643,7 +1659,7 @@ final class Heavy {
        public static void enable(final Context context, final Address replyTo, final Command command){
                PreferenceManager.getDefaultSharedPreferences(context).edit()
                .remove(command+"disabled").commit();
-               Utils.sendMessage(context, replyTo, command_enabled, command);
+               Utils.sendConfirmMessage(context, replyTo, command_enabled, command);
 
        }
 
@@ -1665,7 +1681,7 @@ final class Heavy {
         * @param replyTo reply Address
         */
        public static void poll(final Context context, final Address replyTo) {
-               Utils.sendMessage(context, replyTo, starting_long_polling_if_stopped);
+               Utils.sendConfirmMessage(context, replyTo, starting_long_polling_if_stopped);
                context.startService(new Intent(context, FonBotMainService.class));
        }
 
@@ -1730,7 +1746,7 @@ final class Heavy {
                        return;
                }
                context.startActivity(intent);
-               Utils.sendMessage(context, replyTo, app_launched);
+               Utils.sendConfirmMessage(context, replyTo, app_launched);
        }
 
        /**
@@ -1765,10 +1781,10 @@ final class Heavy {
                try{
                        if(enable){
                                getITelephony(context).enableDataConnectivity();
-                               Utils.sendMessage(context, replyTo, enabling_data);
+                               Utils.sendConfirmMessage(context, replyTo, enabling_data);
                        } else {
                                getITelephony(context).disableDataConnectivity();
-                               Utils.sendMessage(context, replyTo, disabling_data);
+                               Utils.sendConfirmMessage(context, replyTo, disabling_data);
                        }
                } catch(Exception e){
                        Utils.sendMessage(context, replyTo, exception_while_getting_itelephony,
@@ -1799,9 +1815,9 @@ final class Heavy {
        public static void gps(final Context context, final Address replyTo, final boolean enabled) {
                Secure.setLocationProviderEnabled(context.getContentResolver(), LocationManager.GPS_PROVIDER, enabled);
                if(enabled)
-                       Utils.sendMessage(context, replyTo, enabling_gps);
+                       Utils.sendConfirmMessage(context, replyTo, enabling_gps);
                else
-                       Utils.sendMessage(context, replyTo, disabling_gps);
+                       Utils.sendConfirmMessage(context, replyTo, disabling_gps);
        }
 
        /**
@@ -1827,9 +1843,9 @@ final class Heavy {
        public static void glocation(final Context context, final Address replyTo, final boolean enabled) {
                Secure.setLocationProviderEnabled(context.getContentResolver(), LocationManager.NETWORK_PROVIDER, enabled);
                if(enabled)
-                       Utils.sendMessage(context, replyTo, enabling_network_location);
+                       Utils.sendConfirmMessage(context, replyTo, enabling_network_location);
                else
-                       Utils.sendMessage(context, replyTo, disabling_network_location);
+                       Utils.sendConfirmMessage(context, replyTo, disabling_network_location);
        }
 
        /**
@@ -1843,7 +1859,7 @@ final class Heavy {
         */
        public static void reboot(final Context context, final Address replyTo, final @Nullable String reason) {
                final PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);
-               Utils.sendMessage(context, replyTo, rebooting);
+               Utils.sendConfirmMessage(context, replyTo, rebooting);
                try {
                        pm.reboot(reason);
                } catch (final Exception e){
@@ -1871,7 +1887,7 @@ final class Heavy {
        public static void notify(final Context context, final Address replyTo, final int id) {
                final NotificationManager man=(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                man.cancel(id);
-               Utils.sendMessage(context, replyTo, notification_canceled);
+               Utils.sendConfirmMessage(context, replyTo, notification_canceled);
        }
 
        /**
@@ -1890,7 +1906,7 @@ final class Heavy {
                                setContentText(text).
                                setSmallIcon(android.R.drawable.stat_notify_sync_noanim).
                                build());
-               Utils.sendMessage(context, replyTo, notification_shown);
+               Utils.sendConfirmMessage(context, replyTo, notification_shown);
        }
 
        /**
@@ -1912,7 +1928,7 @@ final class Heavy {
         */
        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);
+               Utils.sendConfirmMessage(context, replyTo, toggling_torch_state);
        }
 
        /**
@@ -1927,4 +1943,30 @@ final class Heavy {
        public static void getfile(final Context context, final Address replyTo, final String filename, final String hostname, final int port){
                new GetfileExecutableRunnable(context, replyTo, filename, hostname, port).execute();
        }
+
+       /**
+        * Execute a command using a given shell and reply with the output.
+        *
+        * @param context Context instance
+        * @param replyTo reply Address
+        * @param shell The shell to execute with. Usually sh or su.
+        * @param command The command to pass to the shell.
+        */
+       public static void execute(final Context context, final Address replyTo, final String shell, final String command) {
+               try {
+                       final Process proc = Runtime.getRuntime().exec(new String[]{
+                                       shell,
+                                       "-c",
+                                       command
+                               });
+                       final BufferedReader br = new BufferedReader (new InputStreamReader(proc.getInputStream()));
+                       String line;
+                       while((line = br.readLine()) != null)
+                               Utils.sendMessage(context, replyTo, line);
+                       proc.waitFor();
+               } catch (final Exception e){
+                       Utils.sendMessage(context, replyTo, error_while_processing_command, e.getClass().getName(), e.getMessage());
+                       Log.w(Heavy.class.getName(), "Error while processing command", e);
+               }
+       }
 }
This page took 0.02264 seconds and 4 git commands to generate.