commit a03cfc9171e7fed9ed0f2a2b7f3cba347ba933a1 Author: Ian Adam Naval Date: Thu May 22 04:07:32 2014 -0700 Initial commit diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..6aed2eb --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7792e06 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/ +gen/ diff --git a/.project b/.project new file mode 100644 index 0000000..af83ebf --- /dev/null +++ b/.project @@ -0,0 +1,33 @@ + + + SMSpammer + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..07f1a76 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..3eaf8b1 --- /dev/null +++ b/project.properties @@ -0,0 +1,13 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Indicates whether an apk should be generated for each density. +split.density=false +# Project target. +target=android-3 diff --git a/res/drawable/icon.png b/res/drawable/icon.png new file mode 100644 index 0000000..b54954b Binary files /dev/null and b/res/drawable/icon.png differ diff --git a/res/layout/main.xml b/res/layout/main.xml new file mode 100644 index 0000000..673d27f --- /dev/null +++ b/res/layout/main.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..8876885 --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,26 @@ + + + Spammer + + Enter the phone number of the recipient, the message, and + the number of times you want to send it. Press the SPAM button to send the default + spam message.\n + SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM + + Victim\'s Phone # + Message + + Times + Please fill out all of the fields. + messages sent. + + 0/160 + 10 + 0 messages sent.\\n + + SPAM + Send + Sending... + Clear + Created by Ian Naval. + diff --git a/src/com/ianonavy/smspammer/GhostActivity.java b/src/com/ianonavy/smspammer/GhostActivity.java new file mode 100644 index 0000000..d1eca7f --- /dev/null +++ b/src/com/ianonavy/smspammer/GhostActivity.java @@ -0,0 +1,5 @@ +package com.ianonavy.smspammer; + +public class GhostActivity { + +} diff --git a/src/com/ianonavy/smspammer/SMSHandler.java b/src/com/ianonavy/smspammer/SMSHandler.java new file mode 100644 index 0000000..fc5c4bc --- /dev/null +++ b/src/com/ianonavy/smspammer/SMSHandler.java @@ -0,0 +1,52 @@ +package com.ianonavy.smspammer; + +import android.app.Activity; +import android.app.PendingIntent; +import android.content.Intent; +import android.telephony.gsm.SmsManager; + +public class SMSHandler { + + Activity activity; + Thread spamThread; + String number; + String message; + int numTimes; + + public SMSHandler(Activity activity) { + this.activity = activity; + + number = ""; + message = ""; + numTimes = 0; + + spamThread = new Thread() { + public void run() { + while (true) { + if (numTimes > 0) { + sendSMS(number, message); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + numTimes--; + } + } + } + }; + spamThread.start(); + } + + private void sendSMS(String number, String message) { + PendingIntent pi = PendingIntent.getActivity(activity, 0, new Intent(activity, GhostActivity.class), 0); + SmsManager sms = SmsManager.getDefault(); + sms.sendTextMessage(number, null, message, pi, null); + } + + public void spam(String number, String message, int numTimes) { + this.number = number; + this.message = message; + this.numTimes = numTimes; + } +} diff --git a/src/com/ianonavy/smspammer/SMSpammer.java b/src/com/ianonavy/smspammer/SMSpammer.java new file mode 100644 index 0000000..d68334e --- /dev/null +++ b/src/com/ianonavy/smspammer/SMSpammer.java @@ -0,0 +1,114 @@ +package com.ianonavy.smspammer; + +import android.app.Activity; +import android.app.PendingIntent; +import android.content.Intent; +import android.os.Bundle; +import android.telephony.gsm.SmsManager; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.ianonavy.spammer.R; + +public class SMSpammer extends Activity implements TextWatcher { + EditText txtNumber; + EditText txtMessage; + EditText txtNumberOfTimes; + TextView txtCounter; + TextView txtSentCounter; + Button btnSend; + Button btnSpam; + Button btnClear; + + int numberSent = 0; + int numberOfTimes = 0; + + SMSHandler handler; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + txtNumber = (EditText) findViewById(R.id.txtNumber); + txtMessage = (EditText) findViewById(R.id.txtMessage); + txtNumberOfTimes = (EditText) findViewById(R.id.txtNumberOfTimes); + txtCounter = (TextView) findViewById(R.id.txtCounter); + txtSentCounter = (TextView) findViewById(R.id.txtSentCounter); + btnSend = (Button) findViewById(R.id.btnSend); + btnSpam = (Button) findViewById(R.id.btnSpam); + btnClear = (Button) findViewById(R.id.btnClear); + + handler = new SMSHandler(this); + txtMessage.addTextChangedListener(this); + + btnSend.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + String number = txtNumber.getText().toString(); + String message = txtMessage.getText().toString(); + numberOfTimes = Integer.valueOf(txtNumberOfTimes.getText().toString()).intValue(); + + if (txtMessage.length() > 0 && txtNumber.length() > 0 && txtNumberOfTimes.length() > 0) { + + txtMessage.setEnabled(false); + txtNumber.setEnabled(false); + txtNumberOfTimes.setEnabled(false); + btnSpam.setEnabled(false); + + handler.spam(number, message, numberOfTimes); + + numberSent += numberOfTimes; + updateCounters(); + + btnSend.setText(getString(R.string.sending)); + + txtMessage.setEnabled(true); + txtNumber.setEnabled(true); + txtNumberOfTimes.setEnabled(true); + btnSpam.setEnabled(true); + + btnSend.setText(getString(R.string.send)); + } else { + Toast toast = Toast.makeText(getApplicationContext(), getString(R.string.required_toast), Toast.LENGTH_SHORT); + toast.show(); + } + } + }); + + btnSpam.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + txtMessage.setText(R.string.spam_message); + } + }); + + btnClear.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + txtMessage.setText(""); + } + }); + + updateCounters(); + + } + + @Override + public void afterTextChanged(Editable arg0) {} + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {} + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {updateCounters();} + + private void updateCounters() { + String length = Integer.toString(txtMessage.length()); + txtCounter.setText(length + "/160"); + txtSentCounter.setText(numberSent + " " + getString(R.string.messages_sent) + "\n"); + } + +} \ No newline at end of file