diff --git a/README.md b/README.md
new file mode 100644
index 0000000..14ac111
--- /dev/null
+++ b/README.md
@@ -0,0 +1,46 @@
+# ⚡ Spark Women - A Women Safety Application
+## _Feel Safe Everywhere_
+
+
+Women Safety App is user friendly application built in Android Studio,
+it is simple to implement,easy to understand.
+
+Demo Download App : [Click Here](https://drive.google.com/file/d/1ZWB_HUyxm86T6GtpMhTWbOwuw6i7G4Wp/view?usp=sharing)
+
+[](https://t.me/vinayak_09)
+
+
+
+
+## Features
+
+- Easy to implement
+- Easy to understand
+- Shake detector
+- Siren sound
+- Call to registered mobile
+- Shake device to send SOS to registered mobile and play siren
+- Sends Last Known Location to registered mobile
+- Now we can add multiple contacts to send SOS
+
+#### Prerequisites :
+- Android Studio
+- Basic knowledge about Firebase Authentication and Realtime database.
+## Build and Run Application
+
+###### SparkWomen A Women Safety Application requires Android Oreo or newer version to run.
+Follow this steps to get Working Project!
+```
+Clone this repository or download file
+Extract zip if downloaded code
+Open project in Android Studio
+Wait while Android Studio Download gradle or required files
+Hit Run Button !
+```
+
+------------
+
+Full Project demonstration Youtube :
+Link - https://youtu.be/E0WLnlkPDJY
+
+**Free Software, Hell Yeah!**
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..839b2df
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,48 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+
+ defaultConfig {
+ applicationId "com.darkness.sparkwomen"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+
+
+ implementation 'com.google.android.gms:play-services-maps:18.0.2'
+ implementation 'com.google.android.gms:play-services-location:19.0.1'
+ implementation 'com.github.tbouron.shakedetector:library:1.0.0@aar'
+
+ implementation 'com.karumi:dexter:6.2.3'
+
+
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/darkness/sparkwomen/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/darkness/sparkwomen/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..d6b7e2f
--- /dev/null
+++ b/app/src/androidTest/java/com/darkness/sparkwomen/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.darkness.sparkwomen;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.darkness.sparkwomen", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..748e0f8
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/ContactActivity.java b/app/src/main/java/com/darkness/sparkwomen/ContactActivity.java
new file mode 100644
index 0000000..2fa2a74
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/ContactActivity.java
@@ -0,0 +1,190 @@
+package com.darkness.sparkwomen;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.app.Dialog;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+public class ContactActivity extends AppCompatActivity {
+
+
+ EditText contact;
+ Button addContact;
+
+ RecyclerView recyclerView;
+
+ HashMap contacts;
+
+ ArrayList send;
+
+ ContactsAdapter adapter;
+ MyOnClickListener onClickListener;
+
+ ImageView edit;
+
+ TextView callerInfo;
+
+
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();
+ startActivity(new Intent(this,MainActivity.class));
+ this.finish();
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_contact);
+
+
+
+ edit = findViewById(R.id.editCallButton);
+
+
+ edit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Dialog dialog = new Dialog(ContactActivity.this);
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setCancelable(false);
+ dialog.setContentView(R.layout.dialog);
+
+ Button close,save;
+ close = dialog.findViewById(R.id.dialogCancel);
+ save = dialog.findViewById(R.id.dialogSave);
+ EditText number = dialog.findViewById(R.id.dialogEditText);
+
+ save.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ String numberText = number.getText().toString();
+ if(numberText.length() == 10){
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString("firstNumber",numberText);
+ editor.apply();
+ setCallingInformation();
+ dialog.dismiss();
+ }else {
+ Toast.makeText(ContactActivity.this, "Enter valid number!", Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+
+ close.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ dialog.dismiss();
+ }
+ });
+
+
+ dialog.show();
+ }
+ });
+
+
+
+
+ callerInfo = findViewById(R.id.callText);
+
+
+ setCallingInformation();
+
+
+ contacts = new HashMap<>();
+ send = new ArrayList<>();
+
+ adapter = new ContactsAdapter(this, send, new MyOnClickListener() {
+ @Override
+ public void onItemClicked(int position) {
+ deleteItemFromDatabase(position);
+ }
+ });
+
+ recyclerView = findViewById(R.id.contacts);
+ recyclerView.setAdapter(adapter);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+
+ getData();
+
+ contact = findViewById(R.id.contactGet);
+ addContact = findViewById(R.id.addContact);
+
+ addContact.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ createContact(contact.getText().toString());
+ }
+ });
+ }
+
+ private void createContact(String contactString) {
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ Set oldNumbers = sharedPreferences.getStringSet("enumbers", new LinkedHashSet<>());
+ oldNumbers.add(contactString);
+ editor.remove("enumbers");
+ editor.putStringSet("enumbers",oldNumbers);
+ editor.apply();
+
+ contact.setText("");
+ editor.apply();
+ getData();
+
+ }
+
+
+ private void setCallingInformation(){
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ String firstNumber = sharedPreferences.getString("firstNumber","null");
+
+ if (firstNumber.isEmpty()||firstNumber.equalsIgnoreCase("null")){
+ callerInfo.setText("Please add number.");
+ }else {
+ callerInfo.setText(firstNumber);
+ }
+
+ }
+
+
+
+
+ private void deleteItemFromDatabase(int position) {
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ Set oldNumbers = sharedPreferences.getStringSet("enumbers", new LinkedHashSet<>());
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.remove("enumbers");
+ oldNumbers.remove(send.get(position));
+ editor.putStringSet("enumbers",oldNumbers);
+ editor.apply();
+ getData();
+ }
+
+
+
+ private void getData() {
+ send.clear();
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ Set oldNumbers = sharedPreferences.getStringSet("enumbers", new LinkedHashSet<>());
+ send.addAll(oldNumbers);
+ adapter.notifyDataSetChanged();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/ContactsAdapter.java b/app/src/main/java/com/darkness/sparkwomen/ContactsAdapter.java
new file mode 100644
index 0000000..77b89ff
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/ContactsAdapter.java
@@ -0,0 +1,58 @@
+package com.darkness.sparkwomen;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class ContactsAdapter extends RecyclerView.Adapter {
+
+ HashMap contacts;
+ Context context;
+ ArrayList send;
+ MyOnClickListener myOnClickListener;
+
+ ContactsAdapter(Context context, ArrayList send,MyOnClickListener myOnClickListener){
+ this.send = send;
+ this.context = context;
+ this.myOnClickListener = myOnClickListener;
+ }
+
+ @NonNull
+ @Override
+ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.contact_item,parent,false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
+ holder.contact.setText(send.get(position));
+ holder.delete.setOnClickListener(view -> myOnClickListener.onItemClicked(position));
+ }
+
+ @Override
+ public int getItemCount() {
+ return send.size();
+ }
+
+ class MyViewHolder extends RecyclerView.ViewHolder{
+
+ TextView name,contact;
+ ImageView delete;
+
+ public MyViewHolder(@NonNull View itemView) {
+ super(itemView);
+ contact = itemView.findViewById(R.id.contactItem);
+ delete = itemView.findViewById(R.id.deleteIcon);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/darkness/sparkwomen/LawDisplayerActivity.java b/app/src/main/java/com/darkness/sparkwomen/LawDisplayerActivity.java
new file mode 100644
index 0000000..3519954
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/LawDisplayerActivity.java
@@ -0,0 +1,64 @@
+package com.darkness.sparkwomen;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+public class LawDisplayerActivity extends AppCompatActivity implements View.OnClickListener {
+
+ TextView big,oneLine;
+ String[] laws, lawsContent;
+ int counter;
+ Button back, next;
+ View closeBtn;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_law_displayer);
+
+ big = findViewById(R.id.bigLaws);
+ oneLine = findViewById(R.id.lawString);
+ counter = getIntent().getIntExtra("position",0);
+ laws = new String[]{"The Prohibition of Child Marriage Act, 2006","Special Marriage Act, 1954","Dowry Prohibition Act, 1961","Indian Divorce Act, 1969","Maternity Benefit Act,1861","Medical Termination of Pregnancy Act,1971","Sexual Harassment of Women at Workplace (Prevention, Prohibition and Redress) Act, 2013","Indecent Representation of Women(Prevention) Act,1986","National Commission for Women Act, 1990","Equal Remuneration Act, 1976"};
+ lawsContent = this.getResources().getStringArray(R.array.lawsBig);
+
+ closeBtn = findViewById(R.id.closeBtn);
+ closeBtn.setOnClickListener(view -> {
+ onBackPressed();
+ LawDisplayerActivity.this.finish();
+ });
+
+ back = findViewById(R.id.backBtn);
+ next = findViewById(R.id.nextBtn);
+ next.setOnClickListener(this);
+ back.setOnClickListener(this);
+ setData();
+ }
+
+ public void setData(){
+ oneLine.setText(laws[counter]);
+ big.setText(lawsContent[counter]);
+ }
+
+ @Override
+ public void onClick(View view) {
+ if(view.getId() == R.id.nextBtn){
+ if(counter<9){
+ counter++;
+ }else {
+ counter = 0;
+ }
+ } else if (view.getId() == R.id.backBtn) {
+ if(counter == 0){
+ counter = (laws.length-1);
+ }else {
+ counter--;
+ }
+ }
+
+ setData();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/LawModel.java b/app/src/main/java/com/darkness/sparkwomen/LawModel.java
new file mode 100644
index 0000000..8ec8771
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/LawModel.java
@@ -0,0 +1,29 @@
+package com.darkness.sparkwomen;
+
+public class LawModel {
+ String lawString, lawDescription;
+
+ public LawModel(String lawString, String lawDescription) {
+ this.lawString = lawString;
+ this.lawDescription = lawDescription;
+ }
+
+ public LawModel() {
+ }
+
+ public String getLawString() {
+ return lawString;
+ }
+
+ public void setLawString(String lawString) {
+ this.lawString = lawString;
+ }
+
+ public String getLawDescription() {
+ return lawDescription;
+ }
+
+ public void setLawDescription(String lawDescription) {
+ this.lawDescription = lawDescription;
+ }
+}
diff --git a/app/src/main/java/com/darkness/sparkwomen/LawsActivity.java b/app/src/main/java/com/darkness/sparkwomen/LawsActivity.java
new file mode 100644
index 0000000..1f5c247
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/LawsActivity.java
@@ -0,0 +1,42 @@
+package com.darkness.sparkwomen;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+public class LawsActivity extends AppCompatActivity {
+
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();
+ startActivity(new Intent(LawsActivity.this,MainActivity.class));
+ LawsActivity.this.finish();
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_laws);
+ RecyclerView recyclerView = findViewById(R.id.recycleLaws);
+ String[] laws = new String[]{"The Prohibition of Child Marriage Act, 2006","Special Marriage Act, 1954","Dowry Prohibition Act, 1961","Indian Divorce Act, 1969","Maternity Benefit Act,1861","Medical Termination of Pregnancy Act,1971","Sexual Harassment of Women at Workplace (Prevention, Prohibition and Redress) Act, 2013","Indecent Representation of Women(Prevention) Act,1986","National Commission for Women Act, 1990","Equal Remuneration Act, 1976"};
+
+ MyAdapter adapter = new MyAdapter(this, laws, position -> {
+ Intent intent = new Intent(LawsActivity.this,LawDisplayerActivity.class);
+ intent.putExtra("position",position);
+ startActivity(intent);
+ });
+
+ recyclerView.setAdapter(adapter);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+
+
+
+ findViewById(R.id.backBtn).setOnClickListener(view -> {
+ startActivity(new Intent(LawsActivity.this,MainActivity.class));
+ LawsActivity.this.finish();
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/MainActivity.java b/app/src/main/java/com/darkness/sparkwomen/MainActivity.java
new file mode 100644
index 0000000..ea4dae0
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/MainActivity.java
@@ -0,0 +1,89 @@
+package com.darkness.sparkwomen;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.telephony.SmsManager;
+import android.view.View;
+import com.google.android.gms.location.FusedLocationProviderClient;
+import com.google.android.gms.location.LocationServices;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class MainActivity extends AppCompatActivity implements View.OnClickListener {
+
+ FusedLocationProviderClient fusedLocationClient;
+ String myLocation = "", numberCall;
+ SmsManager manager = SmsManager.getDefault();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
+ findViewById(R.id.panicBtn).setOnClickListener(this);
+ findViewById(R.id.fourth).setOnClickListener(this);
+ findViewById(R.id.first).setOnClickListener(this);
+ findViewById(R.id.second).setOnClickListener(this);
+ findViewById(R.id.fifth).setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ int id = view.getId();
+ if (id == R.id.fourth) {
+ startActivity(new Intent(MainActivity.this, LawsActivity.class));
+ MainActivity.this.finish();
+ }else if(id == R.id.first){
+ startActivity(new Intent(MainActivity.this, ContactActivity.class));
+ MainActivity.this.finish();
+ }else if(id == R.id.fifth){
+ startActivity(new Intent(MainActivity.this, SelfDefenseActivity.class));
+ } else if(id == R.id.second){
+ startActivity(new Intent(MainActivity.this, SmsActivity.class));
+ MainActivity.this.finish();
+ } else if (id == R.id.panicBtn) {
+
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ fusedLocationClient.getLastLocation()
+ .addOnSuccessListener(location -> {
+ if (location != null) {
+ location.getAltitude();
+ location.getLongitude();
+ myLocation = "http://maps.google.com/maps?q=loc:"+location.getLatitude()+","+location.getLongitude();
+ }else {
+ myLocation = "Unable to Find Location :(";
+ }
+ sendMsg();
+ });
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ numberCall = sharedPreferences.getString("firstNumber","None");
+ if(!numberCall.equalsIgnoreCase("None")){
+ Intent intent = new Intent(Intent.ACTION_CALL);
+ intent.setData(Uri.parse("tel:"+numberCall));
+ startActivity(intent);
+ }
+
+ }
+
+
+ }
+ void sendMsg(){
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ Set oldNumbers = sharedPreferences.getStringSet("enumbers", new HashSet<>());
+ if(!oldNumbers.isEmpty()){
+ for(String ENUM : oldNumbers)
+ manager.sendTextMessage(ENUM,null,"Im in Trouble!\nSending My Location :\n"+myLocation,null,null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/MyAdapter.java b/app/src/main/java/com/darkness/sparkwomen/MyAdapter.java
new file mode 100644
index 0000000..a9ad794
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/MyAdapter.java
@@ -0,0 +1,55 @@
+package com.darkness.sparkwomen;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class MyAdapter extends RecyclerView.Adapter{
+
+
+ String[] laws;
+ Context context;
+ MyOnClickListener myOnClickListener;
+
+ public MyAdapter(Context context, String[] laws,MyOnClickListener onClickListener){
+ this.laws = laws;
+ this.context = context;
+ this.myOnClickListener = onClickListener;
+ }
+
+ @NonNull
+ @Override
+ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.law_item,parent,false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
+ int newPosition = position + 1;
+ String displayString = newPosition + " " + laws[position];
+ holder.law.setText(displayString);
+ holder.law.setOnClickListener(view -> myOnClickListener.onItemClicked(position));
+ }
+
+ @Override
+ public int getItemCount() {
+ return laws.length;
+ }
+
+ static class MyViewHolder extends RecyclerView.ViewHolder{
+
+ TextView law;
+
+ public MyViewHolder(@NonNull View itemView) {
+ super(itemView);
+ law = itemView.findViewById(R.id.lawItem);
+
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/darkness/sparkwomen/MyOnClickListener.java b/app/src/main/java/com/darkness/sparkwomen/MyOnClickListener.java
new file mode 100644
index 0000000..8681349
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/MyOnClickListener.java
@@ -0,0 +1,5 @@
+package com.darkness.sparkwomen;
+
+public interface MyOnClickListener {
+ void onItemClicked(int position);
+}
diff --git a/app/src/main/java/com/darkness/sparkwomen/SelfDefenseActivity.java b/app/src/main/java/com/darkness/sparkwomen/SelfDefenseActivity.java
new file mode 100644
index 0000000..f38c0bc
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/SelfDefenseActivity.java
@@ -0,0 +1,27 @@
+package com.darkness.sparkwomen;
+
+import android.os.Bundle;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class SelfDefenseActivity extends AppCompatActivity {
+
+ WebView webView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_self_defense);
+
+ webView = findViewById(R.id.webView);
+
+ webView.setWebChromeClient(new WebChromeClient());
+ webView.getSettings().setLoadsImagesAutomatically(true);
+ webView.getSettings().setJavaScriptEnabled(true);
+ webView.loadUrl("https://www.youtube.com/embed/T7aNSRoDCmg");
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/ServiceMine.java b/app/src/main/java/com/darkness/sparkwomen/ServiceMine.java
new file mode 100644
index 0000000..4c85713
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/ServiceMine.java
@@ -0,0 +1,185 @@
+
+package com.darkness.sparkwomen;
+
+import android.Manifest;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.location.Location;
+import android.media.MediaPlayer;
+import android.os.Build;
+import android.os.IBinder;
+import android.telephony.SmsManager;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.core.app.ActivityCompat;
+
+import com.github.tbouron.shakedetector.library.ShakeDetector;
+import com.google.android.gms.location.FusedLocationProviderClient;
+import com.google.android.gms.location.LocationServices;
+import com.google.android.gms.tasks.OnSuccessListener;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class ServiceMine extends Service {
+
+ static boolean isRunning = false;
+
+ static MediaPlayer mediaPlayer;
+
+ FusedLocationProviderClient fusedLocationClient;
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ SmsManager manager = SmsManager.getDefault();
+// WindowManager windowManager;
+ String myLocation;
+ View view;
+ @Override
+ public void onCreate() {
+
+ super.onCreate();
+
+ mediaPlayer = MediaPlayer.create(getBaseContext(),R.raw.siren);
+ mediaPlayer.setLooping(true);
+
+
+
+ fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ fusedLocationClient.getLastLocation()
+ .addOnSuccessListener(new OnSuccessListener() {
+ @Override
+ public void onSuccess(Location location) {
+ if (location != null) {
+ // Logic to handle location object
+ location.getAltitude();
+ location.getLongitude();
+ myLocation = "http://maps.google.com/maps?q=loc:"+location.getLatitude()+","+location.getLongitude();
+ }else {
+ myLocation = "Unable to Find Location :(";
+ }
+ }
+ });
+
+
+
+// windowManager= (WindowManager) getSystemService(WINDOW_SERVICE);
+//
+// WindowManager.LayoutParams params= null;
+// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
+// params = new WindowManager.LayoutParams(
+// WindowManager.LayoutParams.WRAP_CONTENT,
+// WindowManager.LayoutParams.WRAP_CONTENT,
+// WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
+// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+// PixelFormat.TRANSLUCENT);
+// }
+//
+// params.gravity = Gravity.START;
+// params.x = 0;
+// params.y = 100;
+//
+// LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+// view = inflater.inflate(R.layout.floating_menu, null);
+// Button panic = view.findViewById(R.id.panicService);
+// panic.setOnClickListener(new View.OnClickListener() {
+// @Override
+// public void onClick(View view) {
+// mediaPlayer.start();
+//
+//
+// SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+// Set oldNumbers = sharedPreferences.getStringSet("enumbers", new HashSet<>());
+// if(!oldNumbers.isEmpty()){
+// for(String ENUM : oldNumbers)
+// manager.sendTextMessage(ENUM,null,"Im in Trouble!\nSending My Location :\n"+myLocation,null,null);
+// }
+//
+// }
+// });
+//
+// windowManager.addView(view,params);
+
+
+
+ ShakeDetector.create(this, () -> {
+
+ mediaPlayer.start();
+
+
+ SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
+ Set oldNumbers = sharedPreferences.getStringSet("enumbers", new HashSet<>());
+ if(!oldNumbers.isEmpty()){
+ for(String ENUM : oldNumbers)
+ manager.sendTextMessage(ENUM,null,"Im in Trouble!\nSending My Location :\n"+myLocation,null,null);
+ }
+
+ });
+
+ }
+
+
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+
+ if (intent.getAction().equalsIgnoreCase("STOP")) {
+ if(isRunning){
+ mediaPlayer.stop();
+ this.stopForeground(true);
+ this.stopSelf();
+// windowManager.removeView(view);
+ isRunning = false;
+ }
+ } else {
+ Intent notificationIntent = new Intent(this, SmsActivity.class);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_MUTABLE);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ NotificationChannel channel = new NotificationChannel("MYID", "CHANNELFOREGROUND", NotificationManager.IMPORTANCE_DEFAULT);
+
+ NotificationManager m = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ m.createNotificationChannel(channel);
+
+ Notification notification = new Notification.Builder(this, "MYID")
+ .setContentTitle("Women Safety")
+ .setContentText("Shake Device to Send SOS")
+ .setSmallIcon(R.drawable.girlpower)
+ .setContentIntent(pendingIntent)
+ .build();
+ this.startForeground(115, notification);
+ isRunning = true;
+ return START_NOT_STICKY;
+ }
+ if (intent.getAction().equalsIgnoreCase("PLAY")) {
+ mediaPlayer.start();
+ }
+ }
+
+ return super.onStartCommand(intent,flags,startId);
+
+
+ }
+
+ @Override
+ public void onDestroy() {
+ mediaPlayer.stop();
+ mediaPlayer.release();
+ super.onDestroy();
+ }
+}
diff --git a/app/src/main/java/com/darkness/sparkwomen/SmsActivity.java b/app/src/main/java/com/darkness/sparkwomen/SmsActivity.java
new file mode 100644
index 0000000..d9d1f09
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/SmsActivity.java
@@ -0,0 +1,87 @@
+package com.darkness.sparkwomen;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.view.View;
+import android.widget.Button;
+
+import com.google.android.material.snackbar.Snackbar;
+
+public class SmsActivity extends AppCompatActivity {
+
+
+
+ Button start,stop;
+
+
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();
+ startActivity(new Intent(SmsActivity.this,MainActivity.class));
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_sms);
+ stop = findViewById(R.id.stopService);
+ start = findViewById(R.id.startService);
+
+ start.setOnClickListener(this::startServiceV);
+
+ stop.setOnClickListener(this::stopService);
+
+ }
+
+
+ public void stopService(View view) {
+
+ Intent notificationIntent = new Intent(this,ServiceMine.class);
+ notificationIntent.setAction("stop");
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ if(ServiceMine.isRunning){
+ getApplicationContext().startForegroundService(notificationIntent);
+ Snackbar.make(findViewById(android.R.id.content),"Service Stopped!", Snackbar.LENGTH_LONG).show();
+ }
+ }else {
+ if(ServiceMine.isRunning){
+// getApplicationContext().startService(notificationIntent);
+ getApplicationContext().startService(notificationIntent);
+ Snackbar.make(findViewById(android.R.id.content),"Service Stopped!", Snackbar.LENGTH_LONG).show();
+ }
+ }
+ }
+
+ public void startServiceV(View view) {
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ if (!Settings.canDrawOverlays(this)) {
+ Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
+ Uri.parse("package:" + getPackageName()));
+ startActivity(intent);
+ }
+ }
+
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ) {
+ Intent notificationIntent = new Intent(this,ServiceMine.class);
+ notificationIntent.setAction("Start");
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ getApplicationContext().startForegroundService(notificationIntent);
+ Snackbar.make(findViewById(android.R.id.content),"Service Started!", Snackbar.LENGTH_LONG).show();
+ }else {
+ getApplicationContext().startService(notificationIntent);
+ Snackbar.make(findViewById(android.R.id.content),"Service Started!", Snackbar.LENGTH_LONG).show();
+ }
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darkness/sparkwomen/SplashActivity.java b/app/src/main/java/com/darkness/sparkwomen/SplashActivity.java
new file mode 100644
index 0000000..abb7f1a
--- /dev/null
+++ b/app/src/main/java/com/darkness/sparkwomen/SplashActivity.java
@@ -0,0 +1,96 @@
+package com.darkness.sparkwomen;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.location.Location;
+import android.os.Bundle;
+import android.widget.Toast;
+
+import com.google.android.gms.location.LocationCallback;
+import com.google.android.gms.location.LocationRequest;
+import com.google.android.gms.location.LocationResult;
+import com.google.android.gms.location.LocationServices;
+import com.karumi.dexter.Dexter;
+import com.karumi.dexter.MultiplePermissionsReport;
+import com.karumi.dexter.PermissionToken;
+import com.karumi.dexter.listener.PermissionRequest;
+import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
+
+import java.util.List;
+
+public class SplashActivity extends AppCompatActivity {
+
+ boolean isAllPermissionsGranted = false;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_splash);
+ requestPermission();
+ findViewById(R.id.btnGetStarted).setOnClickListener(view -> {
+ if(isAllPermissionsGranted){
+ startActivity(new Intent(SplashActivity.this,MainActivity.class));
+ SplashActivity.this.finish();
+ }else {
+ Toast.makeText(this, "Please grant required permissions!", Toast.LENGTH_SHORT).show();
+ requestPermission();
+ }
+ });
+ }
+
+
+
+
+ private void requestPermission() {
+ Dexter.withContext(this)
+ .withPermissions(
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.CALL_PHONE,
+ Manifest.permission.SEND_SMS
+ ).withListener(new MultiplePermissionsListener() {
+ @Override public void onPermissionsChecked(MultiplePermissionsReport report) {
+ if(report.areAllPermissionsGranted()){
+ isAllPermissionsGranted = true;
+ requestLocation();
+ }
+ }
+ @Override public void onPermissionRationaleShouldBeShown(List permissions, PermissionToken token) {
+ token.continuePermissionRequest();
+ }
+ }).check();
+ }
+
+
+
+
+ void requestLocation(){
+ LocationRequest mLocationRequest = com.google.android.gms.location.LocationRequest.create();
+ mLocationRequest.setInterval(60000);
+ mLocationRequest.setFastestInterval(5000);
+ mLocationRequest.setPriority(com.google.android.gms.location.LocationRequest.PRIORITY_HIGH_ACCURACY);
+ LocationCallback mLocationCallback = new LocationCallback() {
+ @Override
+ public void onLocationResult(LocationResult locationResult) {
+ if (locationResult == null) {
+ return;
+ }
+ for (Location location : locationResult.getLocations()) {
+ if (location != null) {
+ //TODO: UI updates.
+ }
+ }
+ }
+ };
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ LocationServices.getFusedLocationProviderClient(SplashActivity.this).requestLocationUpdates(mLocationRequest, mLocationCallback, null);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v24/law_image.xml b/app/src/main/res/drawable-v24/law_image.xml
new file mode 100644
index 0000000..43ec7f7
--- /dev/null
+++ b/app/src/main/res/drawable-v24/law_image.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/contact.xml b/app/src/main/res/drawable/contact.xml
new file mode 100644
index 0000000..96393e8
--- /dev/null
+++ b/app/src/main/res/drawable/contact.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/girl.jpg b/app/src/main/res/drawable/girl.jpg
new file mode 100644
index 0000000..10957c6
Binary files /dev/null and b/app/src/main/res/drawable/girl.jpg differ
diff --git a/app/src/main/res/drawable/girlpower.png b/app/src/main/res/drawable/girlpower.png
new file mode 100644
index 0000000..7435b19
Binary files /dev/null and b/app/src/main/res/drawable/girlpower.png differ
diff --git a/app/src/main/res/drawable/ic_baseline_account_circle_24.xml b/app/src/main/res/drawable/ic_baseline_account_circle_24.xml
new file mode 100644
index 0000000..873b40c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_account_circle_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_close_24.xml b/app/src/main/res/drawable/ic_baseline_close_24.xml
new file mode 100644
index 0000000..4223ae5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_close_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_delete_24.xml b/app/src/main/res/drawable/ic_baseline_delete_24.xml
new file mode 100644
index 0000000..91d0651
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_delete_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_edit_24.xml b/app/src/main/res/drawable/ic_baseline_edit_24.xml
new file mode 100644
index 0000000..12388c1
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_edit_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_logout_24.xml b/app/src/main/res/drawable/ic_baseline_logout_24.xml
new file mode 100644
index 0000000..17f6ac0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_logout_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_message_24.xml b/app/src/main/res/drawable/ic_baseline_message_24.xml
new file mode 100644
index 0000000..9e8a1ce
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_message_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/laws.png b/app/src/main/res/drawable/laws.png
new file mode 100644
index 0000000..bd2764d
Binary files /dev/null and b/app/src/main/res/drawable/laws.png differ
diff --git a/app/src/main/res/drawable/oval_purple_full.xml b/app/src/main/res/drawable/oval_purple_full.xml
new file mode 100644
index 0000000..e602c20
--- /dev/null
+++ b/app/src/main/res/drawable/oval_purple_full.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/purple_background.xml b/app/src/main/res/drawable/purple_background.xml
new file mode 100644
index 0000000..5ce947f
--- /dev/null
+++ b/app/src/main/res/drawable/purple_background.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rectangle_border.xml b/app/src/main/res/drawable/rectangle_border.xml
new file mode 100644
index 0000000..9057a66
--- /dev/null
+++ b/app/src/main/res/drawable/rectangle_border.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/self_defence.xml b/app/src/main/res/drawable/self_defence.xml
new file mode 100644
index 0000000..2b12445
--- /dev/null
+++ b/app/src/main/res/drawable/self_defence.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/settings.xml b/app/src/main/res/drawable/settings.xml
new file mode 100644
index 0000000..89b4a0f
--- /dev/null
+++ b/app/src/main/res/drawable/settings.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/sitting_girl.png b/app/src/main/res/drawable/sitting_girl.png
new file mode 100644
index 0000000..dac74ce
Binary files /dev/null and b/app/src/main/res/drawable/sitting_girl.png differ
diff --git a/app/src/main/res/drawable/top_left_corner_oval.xml b/app/src/main/res/drawable/top_left_corner_oval.xml
new file mode 100644
index 0000000..01f4a5c
--- /dev/null
+++ b/app/src/main/res/drawable/top_left_corner_oval.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_contact.xml b/app/src/main/res/layout/activity_contact.xml
new file mode 100644
index 0000000..1e39817
--- /dev/null
+++ b/app/src/main/res/layout/activity_contact.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_law_displayer.xml b/app/src/main/res/layout/activity_law_displayer.xml
new file mode 100644
index 0000000..e235fcf
--- /dev/null
+++ b/app/src/main/res/layout/activity_law_displayer.xml
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_laws.xml b/app/src/main/res/layout/activity_laws.xml
new file mode 100644
index 0000000..4aafa90
--- /dev/null
+++ b/app/src/main/res/layout/activity_laws.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..22e15dd
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_self_defense.xml b/app/src/main/res/layout/activity_self_defense.xml
new file mode 100644
index 0000000..531ac7f
--- /dev/null
+++ b/app/src/main/res/layout/activity_self_defense.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_sms.xml b/app/src/main/res/layout/activity_sms.xml
new file mode 100644
index 0000000..7fa73ca
--- /dev/null
+++ b/app/src/main/res/layout/activity_sms.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml
new file mode 100644
index 0000000..ddafd48
--- /dev/null
+++ b/app/src/main/res/layout/activity_splash.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/contact_item.xml b/app/src/main/res/layout/contact_item.xml
new file mode 100644
index 0000000..c4e2f66
--- /dev/null
+++ b/app/src/main/res/layout/contact_item.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog.xml b/app/src/main/res/layout/dialog.xml
new file mode 100644
index 0000000..7a13d73
--- /dev/null
+++ b/app/src/main/res/layout/dialog.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/floating_menu.xml b/app/src/main/res/layout/floating_menu.xml
new file mode 100644
index 0000000..8396050
--- /dev/null
+++ b/app/src/main/res/layout/floating_menu.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/law_item.xml b/app/src/main/res/layout/law_item.xml
new file mode 100644
index 0000000..f477c56
--- /dev/null
+++ b/app/src/main/res/layout/law_item.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a571e60
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61da551
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c41dd28
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db5080a
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6dba46d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..da31a87
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..15ac681
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b216f2d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f25a419
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..e96783c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/raw/siren.wav b/app/src/main/res/raw/siren.wav
new file mode 100644
index 0000000..a5fa6df
Binary files /dev/null and b/app/src/main/res/raw/siren.wav differ
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..7274a36
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..bfa48dc
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,85 @@
+
+ SparkWomen
+
+
+
+ - According to the International Research Centre for Women, almost 47 percent of girls
+ are married before the age of 18. Currently, India ranks 13 in the world when it comes
+ to child marriages. Since child marriage has been steeped into the Indian culture and
+ tradition since centuries, it has been tough eliminating it.
+
+ The Prohibition of Child Marriage Act was made effective in 2007. This act defines child
+ marriage as a marriage where the groom or the bride are underage, that is, the bride is
+ under 18 years of age or the boy is younger than 21 years.
+
+ Parents trying to marry underage girls are subject to action under this law. Since the
+ law makes these marriages illegal, it acts as a major deterrent.
+
+
+ - The objectives of this act is to provide – a special form of marriage in certain
+ cases, provide for registration of certain marriages and, to provide for divorce. In a
+ country like India and with the diverse religions and cast, when people from different
+ faiths and caste chose to get married they do it under the Special Marriage Act.
+
+ It is not applicable to the state of Jammu and Kashmir and also extends to intending
+ spouses who are Indian nationals and living abroad.
+
+ - According to this act, taking or giving of dowry at the time of the marriage to the
+ bride or the bridegroom and their family is to be penalised. Dowry system, giving and
+ taking of dowry, is a norm in India. Dowry is often asked of the bride and her family by
+ the groom and his family. The system has taken strong roots because women after marriage
+ move in with their spouse and in-laws. Also, over the centuries, the lack for economic
+ independence of women and the taboo towards divorce has resulted in bride burning. When
+ demands for dowry even after marriage are not met by the girl’s families, many women are
+ tortured, beaten and even burnt.
+ It is one of the major challenges that our society is grappling with. Women openly
+ complaining about it has helped to spread the word and encourage other women to take a
+ stand.
+
+ - The Indian Divorce Act allows the dissolution of marriage, mutual consent, nullity of
+ marriage, judicial separation and restitution of conjugal rights.
+
+ Family Courts are established to file, hear, and dispose of such cases.
+
+ - This act regulates the employment of women and maternity benefits mandated by law. It
+ states that a woman employee who has worked in an organisation for a period of at least
+ 80 days during the 12 months preceding the date of her expected delivery is entitled to
+ receive maternity benefits, which includes maternity leave, nursing breaks, medical
+ allowance, etc.
+
+ - The Act came into effect into 1972, was amended in 1975 and 2002. The aim of the Act
+ is to reduce the occurrence of illegal abortion and consequent maternal mortality and
+ morbidity.
+
+ It clearly states the conditions under which a pregnancy can be ended or aborted and
+ specifies the persons qualified to conduct the same.
+
+ - To ensure women’s safety at workplace, this Act seeks to protect them from sexual
+ harassment at their place of work. Thirty-six percent of Indian companies and 25 percent
+ among MNC’s are not complaint with the Sexual Harassment Act according to a FICCI-EY
+ November 2015 report.
+
+ Sexual harassment at workplace also includes – the use of language with sexual
+ overtones, invasion of private space with a male colleague hovering too close for
+ comfort, subtle touches and innuendoes.
+
+ - This Act prohibits indecent representation of women through advertisement or in
+ publications, writings, paintings, figures or in any other manner.
+
+ - The National Commission for Women (NCW) is a statutory body of the Government of
+ India, established in January 1992. Lalitha Kumara mangalam was appointed its
+ Chairperson in 2014.
+
+ The NCW represents the rights of women in India and provides a voice for their issues
+ and concerns. The National Commission for Women Act aims to improve the status of women
+ and worked for their economic empowerment.
+
+ - This Act prevents discrimination in terms of remuneration. It provides for payment of
+ equal recompense to men and women workers.
+
+ It is necessary to know these and other laws in place to protect the interests of women.
+ Only if you are aware of your rights can you fight against any injustice meted out to
+ you at home, at the workplace, or in the society.
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..7274a36
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/darkness/sparkwomen/ExampleUnitTest.java b/app/src/test/java/com/darkness/sparkwomen/ExampleUnitTest.java
new file mode 100644
index 0000000..abb04f5
--- /dev/null
+++ b/app/src/test/java/com/darkness/sparkwomen/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.darkness.sparkwomen;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..9b826b6
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,24 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:7.1.3'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..52f5917
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,19 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..f6b961f
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..b1cccae
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue Apr 12 20:47:13 IST 2022
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/local.properties b/local.properties
new file mode 100644
index 0000000..d98cd8e
--- /dev/null
+++ b/local.properties
@@ -0,0 +1,10 @@
+## This file is automatically generated by Android Studio.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file should *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+sdk.dir=/home/vinayak/Android/Sdk
\ No newline at end of file
diff --git a/media/SPARKWOMEN.png b/media/SPARKWOMEN.png
new file mode 100644
index 0000000..ec274d0
Binary files /dev/null and b/media/SPARKWOMEN.png differ
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..a237ada
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,2 @@
+include ':app'
+rootProject.name = "SparkWomen"
\ No newline at end of file