diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39fb081 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000..704a5ef Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..2c7f2f9 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..c0f68ed --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..dc52ff4 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..2f57171 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,48 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 26 + defaultConfig { + applicationId "com.womensafety.shajt3ch" + minSdkVersion 16 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + //noinspection GradleCompatible + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.codemybrainsout.rating:ratingdialog:1.0.8' + implementation 'com.android.support:design:26.1.0' + implementation 'com.google.android.gms:play-services-location:11.8.0' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.google.android.gms:play-services-maps:11.8.0' + implementation 'cn.hugeterry.coordinatortablayout:coordinatortablayout:1.2.2' + implementation 'com.android.support:cardview-v7:26.1.0' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar' + implementation 'io.reactivex:rxandroid:1.2.1' + implementation 'com.afollestad.material-dialogs:core:0.9.4.2' + implementation project(':speech') + implementation 'io.reactivex:rxjava:1.1.6' + testImplementation 'junit:junit:4.12' + /* testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + */ +} + diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /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 diff --git a/app/src/androidTest/java/com/womensafety/shajt3ch/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/womensafety/shajt3ch/ExampleInstrumentedTest.java new file mode 100644 index 0000000..94d6402 --- /dev/null +++ b/app/src/androidTest/java/com/womensafety/shajt3ch/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.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() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.apkglobal.suraksha", appContext.getPackageName()); + } +} diff --git a/app/src/debug/res/values/google_maps_api.xml b/app/src/debug/res/values/google_maps_api.xml new file mode 100644 index 0000000..6ff3c6d --- /dev/null +++ b/app/src/debug/res/values/google_maps_api.xml @@ -0,0 +1,24 @@ + + + AIzaSyDxRfxqFdgUlccCFu65mDq2C9Ao33G9q4A + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9fea3e3 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000..bf1cde6 Binary files /dev/null and b/app/src/main/ic_launcher-web.png differ diff --git a/app/src/main/java/com/womensafety/shajt3ch/AccelerometerListener.java b/app/src/main/java/com/womensafety/shajt3ch/AccelerometerListener.java new file mode 100644 index 0000000..87ca3e9 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/AccelerometerListener.java @@ -0,0 +1,11 @@ +package com.womensafety.shajt3ch; + + + +interface AccelerometerListener { + + public void onAccelerationChanged(float x, float y, float z); + + public void onShake(float force); + +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/AccelerometerManager.java b/app/src/main/java/com/womensafety/shajt3ch/AccelerometerManager.java new file mode 100644 index 0000000..d317d6d --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/AccelerometerManager.java @@ -0,0 +1,229 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.widget.Toast; + +import java.util.List; + + + +class AccelerometerManager{ + + private static Context aContext=null; + + + /** Accuracy configuration */ + private static float threshold = 15.0f; + private static int interval = 200; + + private static Sensor sensor; + private static SensorManager sensorManager; + // you could use an OrientationListener array instead + // if you plans to use more than one listener + private static AccelerometerListener listener; + + /** indicates whether or not Accelerometer Sensor is supported */ + private static Boolean supported; + /** indicates whether or not Accelerometer Sensor is running */ + private static boolean running = false; + + /** + * Returns true if the manager is listening to orientation changes + */ + public static boolean isListening() { + return running; + } + + /** + * Unregisters listeners + */ + public static void stopListening() { + running = false; + try { + if (sensorManager != null && sensorEventListener != null) { + sensorManager.unregisterListener(sensorEventListener); + } + } catch (Exception e) {} + } + + /** + * Returns true if at least one Accelerometer sensor is available + * @param context + */ + public static boolean isSupported(Context context) { + aContext = context; + if (supported == null) { + if (aContext != null) { + + + sensorManager = (SensorManager) aContext. + getSystemService(Context.SENSOR_SERVICE); + + // Get all sensors in device + List sensors = sensorManager.getSensorList( + Sensor.TYPE_ACCELEROMETER); + + supported = new Boolean(sensors.size() > 0); + + + + } else { + supported = Boolean.FALSE; + } + } + return supported; + } + + /** + * Configure the listener for shaking + * @param threshold + * minimum acceleration variation for considering shaking + * @param interval + * minimum interval between to shake events + */ + public static void configure(int threshold, int interval) { + AccelerometerManager.threshold = threshold; + AccelerometerManager.interval = interval; + } + + /** + * Registers a listener and start listening + * @param accelerometerListener + * callback for accelerometer events + */ + public static void startListening( AccelerometerListener accelerometerListener ) + { + + sensorManager = (SensorManager) aContext. + getSystemService(Context.SENSOR_SERVICE); + + // Take all sensors in device + List sensors = sensorManager.getSensorList( + Sensor.TYPE_ACCELEROMETER); + + if (sensors.size() > 0) { + + sensor = sensors.get(0); + + // Register Accelerometer Listener + running = sensorManager.registerListener( + sensorEventListener, sensor, + SensorManager.SENSOR_DELAY_GAME); + + listener = accelerometerListener; + } + + + } + + /** + * Configures threshold and interval + * And registers a listener and start listening + * @param accelerometerListener + * callback for accelerometer events + * @param threshold + * minimum acceleration variation for considering shaking + * @param interval + * minimum interval between to shake events + */ + public static void startListening( + AccelerometerListener accelerometerListener, + int threshold, int interval) { + configure(threshold, interval); + startListening(accelerometerListener); + } + + /** + * The listener that listen to events from the accelerometer listener + */ + private static SensorEventListener sensorEventListener = + new SensorEventListener() { + + private long now = 0; + private long timeDiff = 0; + private long lastUpdate = 0; + private long lastShake = 0; + + private float x = 0; + private float y = 0; + private float z = 0; + private float lastX = 0; + private float lastY = 0; + private float lastZ = 0; + private float force = 0; + + + + + public void onAccuracyChanged(Sensor sensor, int accuracy) {} + + public void onSensorChanged(SensorEvent event) { + // use the event timestamp as reference + // so the manager precision won't depends + // on the AccelerometerListener implementation + // processing time + now = event.timestamp; + + x = event.values[0]; + y = event.values[1]; + z = event.values[2]; + + // if not interesting in shake events + // just remove the whole if then else block + if (lastUpdate == 0) { + lastUpdate = now; + lastShake = now; + lastX = x; + lastY = y; + lastZ = z; + Toast.makeText(aContext,"No Motion detected", + Toast.LENGTH_SHORT).show(); + + } else { + timeDiff = now - lastUpdate; + + if (timeDiff > 0) { + + /*force = Math.abs(x + y + z - lastX - lastY - lastZ) + / timeDiff;*/ + force = Math.abs(x + y + z - lastX - lastY - lastZ); + + if (Float.compare(force, threshold) >0 ) { + //Toast.makeText(Accelerometer.getContext(), + //(now-lastShake)+" >= "+interval, 1000).show(); + + if (now - lastShake >= interval) { + + // trigger shake event + listener.onShake(force); + } + else + { + Toast.makeText(aContext,"No Motion detected", + Toast.LENGTH_SHORT).show(); + + } + lastShake = now; + } + lastX = x; + lastY = y; + lastZ = z; + lastUpdate = now; + } + else + { + Toast.makeText(aContext,"No Motion detected", Toast.LENGTH_SHORT).show(); + + } + } + // trigger change event + listener.onAccelerationChanged(x, y, z); + } + + }; + +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/BackgrndServices.java b/app/src/main/java/com/womensafety/shajt3ch/BackgrndServices.java new file mode 100644 index 0000000..c832efd --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/BackgrndServices.java @@ -0,0 +1,192 @@ +package com.womensafety.shajt3ch; + +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.support.annotation.Nullable; +import android.telephony.SmsManager; +import android.util.Log; +import android.widget.Toast; + + + +public class BackgrndServices extends Service implements AccelerometerListener { + String str_address; + + + private Looper mServiceLooper; + private ServiceHandler mServiceHandler; + // Handler that receives messages from the thread. + private final class ServiceHandler extends Handler { + + public ServiceHandler(Looper looper) { + + super(looper); + } + @Override + public void handleMessage(Message msg) { + + // REPLACE THIS CODE WITH YOUR APP CODE + // Wait before Toasting Service Message + // to give the Service Started message time to display. + + // Toast Service Message. + /* Context context = getApplicationContext(); + CharSequence text = "Service Message"; + int duration = Toast.LENGTH_LONG; + Toast toast = Toast.makeText(context, text, duration); + toast.show(); + */ + + // Service can stop itself using the stopSelf() method. + // Not using in this app. Example statement shown below. + //stopSelf(msg.arg1); + } + } + + + @Override + public void onCreate() { + super.onCreate(); + + + if (AccelerometerManager.isSupported(this)) { + + AccelerometerManager.startListening(this); + } + HandlerThread thread = new HandlerThread("ServiceStartArguments",android.os.Process.THREAD_PRIORITY_BACKGROUND); + thread.start(); + + mServiceLooper = thread.getLooper(); + + mServiceHandler = new ServiceHandler(mServiceLooper); + } + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + + // Get message from message pool using handler. + Message msg = mServiceHandler.obtainMessage(); + + // Set start ID (unique to the specific start) in message. + msg.arg1 = startId; + + // Send message to start job. + mServiceHandler.sendMessage(msg); + + // Toast Service Started message. + // Context context = getApplicationContext(); + + + + + /* CharSequence text = "Service Started"; + int duration = Toast.LENGTH_SHORT; + Toast toast = Toast.makeText(context, text, duration); + toast.show(); + */ + + // Start a sticky. + return START_STICKY; + } + public class GeocoderHandler extends Handler { + @Override + public void handleMessage(Message message) { + + Toast.makeText(getApplicationContext(), "geocoderhandler started", Toast.LENGTH_SHORT).show(); + + + switch (message.what) { + case 1: + Bundle bundle = message.getData(); + str_address = bundle.getString("address"); + // TelephonyManager tmgr=(TelephonyManager)BgService.this.getSystemService(Context.TELEPHONY_SERVICE); + // String ph_number=tmgr.getLine1Number(); + SQLiteDatabase db; + db=openOrCreateDatabase("NumDB", Context.MODE_PRIVATE, null); + Cursor c=db.rawQuery("SELECT * FROM details", null); + Cursor c1=db.rawQuery("SELECT * FROM SOURCE", null); + + String source_ph_number=c1.getString(0); + while(c.moveToNext()) + { + String target_ph_number=c.getString(1); + SmsManager smsManager=SmsManager.getDefault(); + smsManager.sendTextMessage(target_ph_number, source_ph_number, "Please help me. I need help immediately. This is where i am now:"+str_address, null, null); + + Toast.makeText(getApplicationContext(), "Source:"+source_ph_number+"Target:"+target_ph_number, Toast.LENGTH_SHORT).show(); + + } + db.close(); + + break; + default: + str_address = null; + } + Toast.makeText(getApplicationContext(), str_address, Toast.LENGTH_SHORT).show(); + + } + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onAccelerationChanged(float x, float y, float z) { + + } + + @Override + public void onShake(float force) { + GPSTracker gps; + gps = new GPSTracker(BackgrndServices.this); + if(gps.canGetLocation()){ + + double latitude = gps.getLatitude(); + double longitude = gps.getLongitude(); + + RGeocoder RGeocoder = new RGeocoder(); + RGeocoder.getAddressFromLocation(latitude, longitude,getApplicationContext(), new GeocoderHandler()); + Toast.makeText(getApplicationContext(), "onShake", Toast.LENGTH_SHORT).show(); + + } + else{ + gps.showSettingsAlert(); + } + } + + + // onDestroy method. Display toast that service has stopped. + @Override + public void onDestroy() { + super.onDestroy(); + + // Toast Service Stopped. + Context context = getApplicationContext(); + + Log.i("Sensor", "Service distroy"); + + if (AccelerometerManager.isListening()) { + + AccelerometerManager.stopListening(); + + } + + CharSequence text = "App Service Stopped"; + int duration = Toast.LENGTH_SHORT; + Toast toast = Toast.makeText(context, text, duration); + toast.show(); + + + } +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/Constants.java b/app/src/main/java/com/womensafety/shajt3ch/Constants.java new file mode 100644 index 0000000..09d6032 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Constants.java @@ -0,0 +1,35 @@ +package com.womensafety.shajt3ch; + +import android.content.ComponentName; +import android.content.Intent; +import android.net.Uri; + +public class Constants { + + public static final Intent[] AUTO_START_INTENTS = { + new Intent().setComponent(new ComponentName("com.samsung.android.lool", + "com.samsung.android.sm.ui.battery.BatteryActivity")), + new Intent("miui.intent.action.OP_AUTO_START").addCategory(Intent.CATEGORY_DEFAULT), + new Intent().setComponent(new ComponentName("com.miui.securitycenter", + "com.miui.permcenter.autostart.AutoStartManagementActivity")), new Intent().setComponent( + new ComponentName("com.letv.android.letvsafe", + "com.letv.android.letvsafe.AutobootManageActivity")), new Intent().setComponent( + new ComponentName("com.huawei.systemmanager", + "com.huawei.systemmanager.optimize.process.ProtectActivity")), new Intent().setComponent( + new ComponentName("com.coloros.safecenter", + "com.coloros.safecenter.permission.startup.StartupAppListActivity")), + new Intent().setComponent(new ComponentName("com.coloros.safecenter", + "com.coloros.safecenter.startupapp.StartupAppListActivity")), new Intent().setComponent( + new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity")), + new Intent().setComponent(new ComponentName("com.iqoo.secure", + "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity")), new Intent().setComponent( + new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager")), + new Intent().setComponent(new ComponentName("com.vivo.permissionmanager", + "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")), new Intent().setComponent( + new ComponentName("com.asus.mobilemanager", + "com.asus.mobilemanager.entry.FunctionActivity")).setData( + Uri.parse("mobilemanager://function/entry/AutoStart")) + }; + + +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/DataHolder.java b/app/src/main/java/com/womensafety/shajt3ch/DataHolder.java new file mode 100644 index 0000000..1d304c0 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/DataHolder.java @@ -0,0 +1,77 @@ +package com.womensafety.shajt3ch; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.util.ArrayList; + + + +public class DataHolder extends Fragment { + private RecyclerView mRecyclerView; + + private ArrayList mDatas; + private static final String ARG_TITLE = "title"; + private String mTitle; + /* Configure configure=new Configure();*/ + private final String[] First_Aid={"choking", "bleeding heavily" ,"burns" ,"a broken bone" ,"heart attack" ,"stroke" ,"seizures (epilepsy)" + ,"diabetic emergency" ,"asthma attack"}; + private final String[] Self_Defence={"1","2","3"}; + + public static DataHolder getInstance(String title) { + DataHolder fra = new DataHolder(); + Bundle bundle = new Bundle(); + bundle.putString(ARG_TITLE, title); + fra.setArguments(bundle); + return fra; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle bundle = getArguments(); + mTitle = bundle.getString(ARG_TITLE); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.main_fragment, container, false); + + initData(); + mRecyclerView = (RecyclerView) v.findViewById(R.id.recyclerview); + mRecyclerView.setLayoutManager(new LinearLayoutManager(mRecyclerView.getContext())); + mRecyclerView.setAdapter(new RecyclerAdapter(mRecyclerView.getContext(), mDatas)); + + return v; + } + + /* private void initData() { + mDatas = new ArrayList<>(); + for (int i = 'A'; i < 'z'; i++) { + mDatas.add(mTitle + (char) i); + } + }*/ + private void initData() { + mDatas = new ArrayList<>(); + if (mTitle.equals("First_Aid")) { + for (int i = 0; i < First_Aid.length; i++) { + + mDatas.add(new Model(First_Aid[i])); + } + } + + else if (mTitle.equals("Self_defence")) { + for (int i = 0; i < Self_Defence.length; i++) { + + mDatas.add(new Model(Self_Defence[i])); + } + } + + } +} + diff --git a/app/src/main/java/com/womensafety/shajt3ch/DataParser.java b/app/src/main/java/com/womensafety/shajt3ch/DataParser.java new file mode 100644 index 0000000..2c4ff7a --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/DataParser.java @@ -0,0 +1,82 @@ +package com.womensafety.shajt3ch; + +import android.util.Log; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + + +public class DataParser { + public List> parse(String jsonData) { + JSONArray jsonArray = null; + JSONObject jsonObject; + + try { + Log.d("Places", "parse"); + jsonObject = new JSONObject((String) jsonData); + jsonArray = jsonObject.getJSONArray("results"); + } catch (JSONException e) { + Log.d("Places", "parse error"); + e.printStackTrace(); + } + return getPlaces(jsonArray); + } + + private List> getPlaces(JSONArray jsonArray) { + int placesCount = jsonArray.length(); + List> placesList = new ArrayList<>(); + HashMap placeMap = null; + Log.d("Places", "getPlaces"); + + for (int i = 0; i < placesCount; i++) { + try { + placeMap = getPlace((JSONObject) jsonArray.get(i)); + placesList.add(placeMap); + Log.d("Places", "Adding places"); + + } catch (JSONException e) { + Log.d("Places", "Error in Adding places"); + e.printStackTrace(); + } + } + return placesList; + } + + private HashMap getPlace(JSONObject googlePlaceJson) { + HashMap googlePlaceMap = new HashMap(); + String placeName = "-NA-"; + String vicinity = "-NA-"; + String latitude = ""; + String longitude = ""; + String reference = ""; + + Log.d("getPlace", "Entered"); + + try { + if (!googlePlaceJson.isNull("name")) { + placeName = googlePlaceJson.getString("name"); + } + if (!googlePlaceJson.isNull("vicinity")) { + vicinity = googlePlaceJson.getString("vicinity"); + } + latitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lat"); + longitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lng"); + reference = googlePlaceJson.getString("reference"); + googlePlaceMap.put("place_name", placeName); + googlePlaceMap.put("vicinity", vicinity); + googlePlaceMap.put("lat", latitude); + googlePlaceMap.put("lng", longitude); + googlePlaceMap.put("reference", reference); + Log.d("getPlace", "Putting Places"); + } catch (JSONException e) { + Log.d("getPlace", "Error"); + e.printStackTrace(); + } + return googlePlaceMap; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/womensafety/shajt3ch/Display.java b/app/src/main/java/com/womensafety/shajt3ch/Display.java new file mode 100644 index 0000000..cd03048 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Display.java @@ -0,0 +1,68 @@ +package com.womensafety.shajt3ch; + +import android.app.AlertDialog; +import android.support.v4.app.Fragment; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + + + +public class Display extends Fragment { + Cursor c; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //returning our layout file + //change R.layout.yourlayoutfilename for each of your fragments + /*return inflater.inflate(R.layout.display, container, false);*/ + View view = inflater.inflate(R.layout.display, container, false); + + SQLiteDatabase db; + db = getActivity().openOrCreateDatabase("NumberDB",Context.MODE_PRIVATE, null); + + c = db.rawQuery("SELECT * FROM details", null); + if (c.getCount() == 0) { + showMessage("Error", "No records found."); + return inflater.inflate(R.layout.display, container, false); + } + StringBuffer buffer = new StringBuffer(); + while (c.moveToNext()) { + buffer.append("Name: " + c.getString(0) + "\n"); + buffer.append("Number: " + c.getString(1) + "\n"); + } + showMessage("Details", buffer.toString()); + /*Intent i_startservice=new Intent(Display.this,BgService.class); + startService(i_startservice); +*/ return view; + + } + + + + public void showMessage(String title,String message) + { + AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); + builder.setCancelable(true); + builder.setTitle(title); + builder.setMessage(message); + builder.show(); + } + + + + + /*public void back(View v) { + Intent i_back=new Intent(Display.this,MainActivity.class); + startActivity(i_back); + + } +*/ + + +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/DownloadUrl.java b/app/src/main/java/com/womensafety/shajt3ch/DownloadUrl.java new file mode 100644 index 0000000..0287b6b --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/DownloadUrl.java @@ -0,0 +1,53 @@ +package com.womensafety.shajt3ch; + +import android.util.Log; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + + + +public class DownloadUrl { + + public String readUrl(String strUrl) throws IOException { + String data = ""; + InputStream iStream = null; + HttpURLConnection urlConnection = null; + try { + URL url = new URL(strUrl); + + // Creating an http connection to communicate with url + urlConnection = (HttpURLConnection) url.openConnection(); + + // Connecting to url + urlConnection.connect(); + + // Reading data from url + iStream = urlConnection.getInputStream(); + + BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); + + StringBuffer sb = new StringBuffer(); + + String line = ""; + while ((line = br.readLine()) != null) { + sb.append(line); + } + + data = sb.toString(); + Log.d("downloadUrl", data.toString()); + br.close(); + + } catch (Exception e) { + Log.d("Exception", e.toString()); + } finally { + iStream.close(); + urlConnection.disconnect(); + } + return data; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/womensafety/shajt3ch/GPSTracker.java b/app/src/main/java/com/womensafety/shajt3ch/GPSTracker.java new file mode 100644 index 0000000..0a7cbb9 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/GPSTracker.java @@ -0,0 +1,206 @@ +package com.womensafety.shajt3ch; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Service; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Bundle; +import android.os.IBinder; +import android.provider.Settings; +import android.util.Log; + + + +public class GPSTracker extends Service implements LocationListener { + + private final Context mContext; + + // flag for GPS status + boolean isGPSEnabled = false; + + // flag for network status + boolean isNetworkEnabled = false; + + // flag for GPS status + boolean canGetLocation = false; + + Location location; // location + double latitude; // latitude + double longitude; // longitude + + // The minimum distance to change Updates in meters + private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters + + // The minimum time between updates in milliseconds + private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute + + // Declaring a Location Manager + protected LocationManager locationManager; + + public GPSTracker(Context context) { + this.mContext = context; + getLocation(); + } + + @SuppressLint("MissingPermission") + public Location getLocation() { + try { + locationManager = (LocationManager) mContext + .getSystemService(LOCATION_SERVICE); + + // getting GPS status + isGPSEnabled = locationManager + .isProviderEnabled(LocationManager.GPS_PROVIDER); + + // getting network status + isNetworkEnabled = locationManager + .isProviderEnabled(LocationManager.NETWORK_PROVIDER); + + if (!isGPSEnabled && !isNetworkEnabled) { + // no network provider is enabled + } else { + this.canGetLocation = true; + if (isNetworkEnabled) { + locationManager.requestLocationUpdates( + LocationManager.NETWORK_PROVIDER, + MIN_TIME_BW_UPDATES, + MIN_DISTANCE_CHANGE_FOR_UPDATES, this); + Log.d("Network", "Network"); + if (locationManager != null) { + location = locationManager + .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + if (location != null) { + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + } + } + // if GPS Enabled get lat/long using GPS Services + if (isGPSEnabled) { + if (location == null) { + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, + MIN_TIME_BW_UPDATES, + MIN_DISTANCE_CHANGE_FOR_UPDATES, this); + Log.d("GPS Enabled", "GPS Enabled"); + if (locationManager != null) { + location = locationManager + .getLastKnownLocation(LocationManager.GPS_PROVIDER); + if (location != null) { + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + } + } + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return location; + } + + /** + * Stop using GPS listener + * Calling this function will stop using GPS in your app + * */ + public void stopUsingGPS(){ + if(locationManager != null){ + locationManager.removeUpdates(GPSTracker.this); + } + } + + /** + * Function to get latitude + * */ + public double getLatitude(){ + if(location != null){ + latitude = location.getLatitude(); + } + + // return latitude + return latitude; + } + + /** + * Function to get longitude + * */ + public double getLongitude(){ + if(location != null){ + longitude = location.getLongitude(); + } + + // return longitude + return longitude; + } + + /** + * Function to check GPS/wifi enabled + * @return boolean + * */ + public boolean canGetLocation() { + return this.canGetLocation; + } + + /** + * Function to show settings alert dialog + * On pressing Settings button will lauch Settings Options + * */ + public void showSettingsAlert(){ + AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); + + // Setting Dialog Title + alertDialog.setTitle("GPS is settings"); + + // Setting Dialog Message + alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); + + // On pressing Settings button + alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog,int which) { + Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + mContext.startActivity(intent); + } + }); + + // on pressing cancel button + alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + + // Showing Alert Message + alertDialog.show(); + } + + @Override + public void onLocationChanged(Location location) { + } + + @Override + public void onProviderDisabled(String provider) { + } + + @Override + public void onProviderEnabled(String provider) { + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + } + + @Override + public IBinder onBind(Intent arg0) { + return null; + } + +} + diff --git a/app/src/main/java/com/womensafety/shajt3ch/GetNearbyPlacesData.java b/app/src/main/java/com/womensafety/shajt3ch/GetNearbyPlacesData.java new file mode 100644 index 0000000..93c6461 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/GetNearbyPlacesData.java @@ -0,0 +1,67 @@ +package com.womensafety.shajt3ch; + +import android.os.AsyncTask; +import android.util.Log; + +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.MarkerOptions; + +import java.util.HashMap; +import java.util.List; + + + +public class GetNearbyPlacesData extends AsyncTask { + + String googlePlacesData; + GoogleMap mMap; + String url; + + @Override + protected String doInBackground(Object... params) { + try { + Log.d("GetNearbyPlacesData", "doInBackground entered"); + mMap = (GoogleMap) params[0]; + url = (String) params[1]; + DownloadUrl downloadUrl = new DownloadUrl(); + googlePlacesData = downloadUrl.readUrl(url); + Log.d("GooglePlacesReadTask", "doInBackground Exit"); + } catch (Exception e) { + Log.d("GooglePlacesReadTask", e.toString()); + } + return googlePlacesData; + } + + @Override + protected void onPostExecute(String result) { + Log.d("GooglePlacesReadTask", "onPostExecute Entered"); + List> nearbyPlacesList = null; + DataParser dataParser = new DataParser(); + nearbyPlacesList = dataParser.parse(result); + ShowNearbyPlaces(nearbyPlacesList); + Log.d("GooglePlacesReadTask", "onPostExecute Exit"); + } + + private void ShowNearbyPlaces(List> nearbyPlacesList) { + for (int i = 0; i < nearbyPlacesList.size(); i++) { + Log.d("onPostExecute","Entered into showing locations"); + MarkerOptions markerOptions = new MarkerOptions(); + HashMap googlePlace = nearbyPlacesList.get(i); + double lat = Double.parseDouble(googlePlace.get("lat")); + double lng = Double.parseDouble(googlePlace.get("lng")); + String placeName = googlePlace.get("place_name"); + String vicinity = googlePlace.get("vicinity"); + LatLng latLng = new LatLng(lat, lng); + markerOptions.position(latLng); + markerOptions.title(placeName + " : " + vicinity); + mMap.addMarker(markerOptions); + markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); + //move map camera + mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); + mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/womensafety/shajt3ch/Holder.java b/app/src/main/java/com/womensafety/shajt3ch/Holder.java new file mode 100644 index 0000000..fceacfc --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Holder.java @@ -0,0 +1,32 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + + +class Holder extends RecyclerView.ViewHolder { + TextView choice; + + Context context; + + String type,demand_name; + + public Holder(final View itemView) { + super(itemView); + context=itemView.getContext(); + + + choice=(TextView) itemView.findViewById(R.id.text_of_choice); + + + + } + + public void bindData(Model skillModel) + { + choice.setText(skillModel.name_of_choice); + + } +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/MainActivity.java b/app/src/main/java/com/womensafety/shajt3ch/MainActivity.java new file mode 100644 index 0000000..72ff474 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/MainActivity.java @@ -0,0 +1,357 @@ +package com.womensafety.shajt3ch; + +import android.app.ActionBar; +import android.app.ActivityManager; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.design.widget.NavigationView; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.GravityCompat; +import android.support.v4.view.MenuItemCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AlertDialog; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.ShareActionProvider; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.afollestad.materialdialogs.Theme; +import com.codemybrainsout.ratingdialog.RatingDialog; + + + +public class MainActivity extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener { + + public static Boolean isActive = false; + + private Button btStartService; + private TextView tvText; + + private ShareActionProvider mShareActionProvider; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_main); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + + + btStartService = (Button) findViewById(R.id.btStartService); + tvText = (TextView) findViewById(R.id.tvText); + enableAutoStart(); + + + if (checkServiceRunning()) { + btStartService.setText(getString(R.string.stop_service)); + tvText.setVisibility(View.VISIBLE); + } + + + btStartService.setOnClickListener(v -> { + if (btStartService.getText().toString().equalsIgnoreCase(getString(R.string.start_service))) { + startService(new Intent(MainActivity.this, MyService.class)); + btStartService.setText(getString(R.string.stop_service)); + tvText.setVisibility(View.VISIBLE); + } else { + stopService(new Intent(MainActivity.this, MyService.class)); + btStartService.setText(getString(R.string.start_service)); + tvText.setVisibility(View.GONE); + } + }); + + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this); + displaySelectedScreen(R.id.nav_inst); + + +/* + //wi;; delete + SQLiteDatabase db = openOrCreateDatabase("NumDB", Context.MODE_PRIVATE, null); + Cursor c = db.rawQuery("SELECT * FROM details", null); + + while (c.moveToFirst()) + { + Log.d("Number", c.getString(1)); + }*/ + + + + + + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_power: + android.support.v7.app.ActionBar bar = getSupportActionBar(); + //item.setTitle("changed"); + + Log.d("Title:", item.getTitle().toString()); + + if (item.getTitle().toString().contains("START")) { + Log.d("Title2:", "If er vitore"); + + SQLiteDatabase db2 = this.openOrCreateDatabase("NumberDB", MODE_PRIVATE, null); + + + + Log.d("Number is:", Register.getNumber(db2)); + + bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#78C257"))); + startService(new Intent(MainActivity.this, MyService.class)); + + item.setTitle("STOP SERVICE"); + + return true; + } + + else + { + bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#E81123"))); + startService(new Intent(MainActivity.this, MyService.class)); + item.setTitle("START SERVICE"); + return true; + } + +/* + bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#439EB8"))); + stopService(new Intent(MainActivity.this, MyService.class)); + return true; +*/ + default: + // If we got here, the user's action was not recognized. + // Invoke the superclass to handle it. + return super.onOptionsItemSelected(item); + + } } + + protected void onDestroy() { + super.onDestroy(); + } + + private boolean checkServiceRunning() { + ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + if (manager != null) { + for (ActivityManager.RunningServiceInfo service : manager.getRunningServices( + Integer.MAX_VALUE)) { + if (getString(R.string.my_service_name).equals(service.service.getClassName())) { + return true; + } + } + } + return false; + } + + private void enableAutoStart() { + for (Intent intent : Constants.AUTO_START_INTENTS) { + if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) { + new MaterialDialog.Builder(this).title(R.string.enable_autostart) + .content(R.string.ask_permission) + .theme(Theme.LIGHT) + .positiveText(getString(R.string.allow)) + .onPositive((dialog, which) -> { + try { + for (Intent intent1 : Constants.AUTO_START_INTENTS) + if (getPackageManager().resolveActivity(intent1, PackageManager.MATCH_DEFAULT_ONLY) + != null) { + startActivity(intent1); + break; + } + } catch (Exception e) { + e.printStackTrace(); + } + }) + .show(); + break; + } + } + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else { + super.onBackPressed(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate menu resource file. + getMenuInflater().inflate(R.menu.newbutton, menu); + + // Locate MenuItem with ShareActionProvider + // MenuItem item = menu.findItem(R.id.menu_share); + + // Fetch and store ShareActionProvider + //mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); + //setIntent("Testing Share Feature"); + // Return true to display menu + + return true; + } + + // Call to update the share intent + private void setIntent(String s) { + Intent intent=new Intent(Intent.ACTION_SEND); + intent.setType("text/html"); + intent.putExtra(Intent.EXTRA_TEXT,s); + mShareActionProvider.setShareIntent(intent); + + } + + + /* @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } +*/ + /* @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + }*/ + + @SuppressWarnings("StatementWithEmptyBody") + @Override + public boolean onNavigationItemSelected(MenuItem item) { + displaySelectedScreen(item.getItemId()); + + // Handle navigation view item clicks here. + /*int id = item.getItemId(); + if (id == R.id.nav_camera) { + + // Handle the camera action + } else if (id == R.id.nav_gallery) { + + } else if (id == R.id.nav_slideshow) { + + } else if (id == R.id.nav_manage) { + + } *//*else if (id == R.id.nav_share) { + + } else if (id == R.id.nav_send) { + + }*/ + + /* DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START);*/ + return true; + } + private void displaySelectedScreen(int itemId) { + + //creating fragment object + Fragment fragment = null; + + //initializing the fragment object which is selected + switch (itemId) { + case R.id.nav_inst: { + LayoutInflater inflater = getLayoutInflater(); + View alertLayout = inflater.inflate(R.layout.popup_layout, null); + AlertDialog alertDialog = new AlertDialog.Builder( + MainActivity.this).create(); + + // Setting Dialog Title + alertDialog.setTitle("Instructions"); + // Setting Dialog Message + alertDialog.setView(alertLayout); + + // Setting Icon to Dialog + alertDialog.setIcon(R.drawable.instruct_icon); + + + + // Showing Alert Message + alertDialog.show(); + }break; + + case R.id.nav_verify: + fragment = new Verify(); + break; + case R.id.nav_register: + fragment = new Register(); + break; + case R.id.nav_display: + fragment = new Display(); + break; + case R.id.nav_nearby: + Intent i = new Intent(MainActivity.this,MapsActivity.class); + startActivity(i); + break; + case R.id.nav_rate: + final RatingDialog ratingDialog = new RatingDialog.Builder(this) + .threshold(3) + .onRatingBarFormSumbit(new RatingDialog.Builder.RatingDialogFormListener() { + @Override + public void onFormSubmitted(String feedback) { + + } + }).build(); + + ratingDialog.show(); + break; + case R.id.nav_safety: + Intent intent = new Intent(MainActivity.this,Safety.class); + startActivity(intent); + break; + } + + //replacing the fragment + if (fragment != null) { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.replace(R.id.content_frame,fragment); + ft.commit(); + } + + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + + } + + + +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/MapsActivity.java b/app/src/main/java/com/womensafety/shajt3ch/MapsActivity.java new file mode 100644 index 0000000..29377ca --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/MapsActivity.java @@ -0,0 +1,286 @@ +package com.womensafety.shajt3ch; + +import android.Manifest; +import android.content.pm.PackageManager; +import android.location.Location; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.FragmentActivity; +import android.support.v4.content.ContextCompat; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.location.LocationListener; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; +import com.google.android.gms.maps.model.MarkerOptions; + +public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, + GoogleApiClient.ConnectionCallbacks, + GoogleApiClient.OnConnectionFailedListener, + LocationListener { + + private GoogleMap mMap; + double latitude; + double longitude; + private int PROXIMITY_RADIUS = 10000; + GoogleApiClient mGoogleApiClient; + Location mLastLocation; + Marker mCurrLocationMarker; + LocationRequest mLocationRequest; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_maps); + + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + checkLocationPermission(); + } + + //Check if Google Play Services Available or not + if (!CheckGooglePlayServices()) { + Log.d("onCreate", "Finishing test case since Google Play Services are not available"); + finish(); + } + else { + Log.d("onCreate","Google Play Services available."); + } + + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map); + mapFragment.getMapAsync(this); + } + + private boolean CheckGooglePlayServices() { + GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance(); + int result = googleAPI.isGooglePlayServicesAvailable(this); + if(result != ConnectionResult.SUCCESS) { + if(googleAPI.isUserResolvableError(result)) { + googleAPI.getErrorDialog(this, result, + 0).show(); + } + return false; + } + return true; + } + + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + //mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); + mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); + + //Initialize Google Play Services + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + buildGoogleApiClient(); + mMap.setMyLocationEnabled(true); + } + } + else { + buildGoogleApiClient(); + mMap.setMyLocationEnabled(true); + } + + Button btnPolice = (Button) findViewById(R.id.btnPolice); + btnPolice.setOnClickListener(new View.OnClickListener() { + String Police = "police"; + @Override + public void onClick(View v) { + Log.d("onClick", "Button is Clicked"); + mMap.clear(); + String url = getUrl(latitude, longitude, Police); + Object[] DataTransfer = new Object[2]; + DataTransfer[0] = mMap; + DataTransfer[1] = url; + Log.d("onClick", url); + GetNearbyPlacesData getNearbyPlacesData = new GetNearbyPlacesData(); + getNearbyPlacesData.execute(DataTransfer); + Toast.makeText(MapsActivity.this,"Nearby Police Stations", Toast.LENGTH_LONG).show(); + } + }); + + Button btnHospital = (Button) findViewById(R.id.btnHospital); + btnHospital.setOnClickListener(new View.OnClickListener() { + String Hospital = "hospital"; + @Override + public void onClick(View v) { + Log.d("onClick", "Button is Clicked"); + mMap.clear(); + String url = getUrl(latitude, longitude, Hospital); + Object[] DataTransfer = new Object[2]; + DataTransfer[0] = mMap; + DataTransfer[1] = url; + Log.d("onClick", url); + GetNearbyPlacesData getNearbyPlacesData = new GetNearbyPlacesData(); + getNearbyPlacesData.execute(DataTransfer); + Toast.makeText(MapsActivity.this,"Nearby Hospitals", Toast.LENGTH_LONG).show(); + } + }); + + + } + + protected synchronized void buildGoogleApiClient() { + mGoogleApiClient = new GoogleApiClient.Builder(this) + .addConnectionCallbacks(this) + .addOnConnectionFailedListener(this) + .addApi(LocationServices.API) + .build(); + mGoogleApiClient.connect(); + } + + @Override + public void onConnected(Bundle bundle) { + mLocationRequest = new LocationRequest(); + mLocationRequest.setInterval(1000); + mLocationRequest.setFastestInterval(1000); + mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); + } + } + + private String getUrl(double latitude, double longitude, String nearbyPlace) { + + StringBuilder googlePlacesUrl = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); + googlePlacesUrl.append("location=" + latitude + "," + longitude); + googlePlacesUrl.append("&radius=" + PROXIMITY_RADIUS); + googlePlacesUrl.append("&type=" + nearbyPlace); + googlePlacesUrl.append("&sensor=true"); + googlePlacesUrl.append("&key=" + "AIzaSyDxRfxqFdgUlccCFu65mDq2C9Ao33G9q4A"); + Log.d("getUrl", googlePlacesUrl.toString()); + return (googlePlacesUrl.toString()); + } + + @Override + public void onConnectionSuspended(int i) { + + } + + @Override + public void onLocationChanged(Location location) { + Log.d("onLocationChanged", "entered"); + + mLastLocation = location; + if (mCurrLocationMarker != null) { + mCurrLocationMarker.remove(); + } + + //Place current location marker + latitude = location.getLatitude(); + longitude = location.getLongitude(); + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + MarkerOptions markerOptions = new MarkerOptions(); + markerOptions.position(latLng); + markerOptions.title("Current Position"); + markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); + mCurrLocationMarker = mMap.addMarker(markerOptions); + + //move map camera + mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); + mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); + Toast.makeText(MapsActivity.this,"Your Current Location", Toast.LENGTH_LONG).show(); + + Log.d("onLocationChanged", String.format("latitude:%.3f longitude:%.3f",latitude,longitude)); + + //stop location updates + if (mGoogleApiClient != null) { + LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); + Log.d("onLocationChanged", "Removing Location Updates"); + } + Log.d("onLocationChanged", "Exit"); + + } + + @Override + public void onConnectionFailed(ConnectionResult connectionResult) { + + } + + public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; + public boolean checkLocationPermission(){ + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + != PackageManager.PERMISSION_GRANTED) { + + // Asking user if explanation is needed + if (ActivityCompat.shouldShowRequestPermissionRationale(this, + Manifest.permission.ACCESS_FINE_LOCATION)) { + + // Show an explanation to the user *asynchronously* -- don't block + // this thread waiting for the user's response! After the user + // sees the explanation, try again to request the permission. + + //Prompt the user once explanation has been shown + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + MY_PERMISSIONS_REQUEST_LOCATION); + + + } else { + // No explanation needed, we can request the permission. + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + MY_PERMISSIONS_REQUEST_LOCATION); + } + return false; + } else { + return true; + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_LOCATION: { + // If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted. Do the + // contacts-related task you need to do. + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + + if (mGoogleApiClient == null) { + buildGoogleApiClient(); + } + mMap.setMyLocationEnabled(true); + } + + } else { + + // Permission denied, Disable the functionality that depends on this permission. + Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show(); + } + return; + } + + // other 'case' lines to check for other permissions this app might request. + // You can add here other case statements according to your requirement. + } + } +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/Model.java b/app/src/main/java/com/womensafety/shajt3ch/Model.java new file mode 100644 index 0000000..130b486 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Model.java @@ -0,0 +1,11 @@ +package com.womensafety.shajt3ch; + + + +public class Model { + public String name_of_choice; + + public Model(String name_of_choice) { + this.name_of_choice = name_of_choice; + } +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/MyPagerAdapter.java b/app/src/main/java/com/womensafety/shajt3ch/MyPagerAdapter.java new file mode 100644 index 0000000..1334f4c --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/MyPagerAdapter.java @@ -0,0 +1,34 @@ +package com.womensafety.shajt3ch; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; + +import java.util.ArrayList; + +public class MyPagerAdapter extends FragmentPagerAdapter { + private ArrayList mFragments = new ArrayList<>(); + private final String[] mTitles; + + public MyPagerAdapter(FragmentManager fm, ArrayList mFragments, String[] mTitles) { + super(fm); + this.mFragments = mFragments; + this.mTitles = mTitles; + } + + @Override + public int getCount() { + return mFragments.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return mTitles[position]; + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } +} + diff --git a/app/src/main/java/com/womensafety/shajt3ch/MyService.java b/app/src/main/java/com/womensafety/shajt3ch/MyService.java new file mode 100644 index 0000000..3daad44 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/MyService.java @@ -0,0 +1,186 @@ +package com.womensafety.shajt3ch; + +import android.Manifest.permission; +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.media.AudioManager; +import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.os.IBinder; +import android.telephony.SmsManager; +import android.text.TextUtils; +import android.util.Log; +import android.widget.Toast; + +import com.sac.speech.GoogleVoiceTypingDisabledException; +import com.sac.speech.Speech; +import com.sac.speech.SpeechDelegate; +import com.sac.speech.SpeechRecognitionNotAvailable; +import com.tbruyelle.rxpermissions.RxPermissions; + +import java.util.List; +import java.util.Objects; +import java.util.Random; + +public class MyService extends Service implements SpeechDelegate, Speech.stopDueToDelay { + + public static SpeechDelegate delegate; + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + try { + if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { + ((AudioManager) Objects.requireNonNull( + getSystemService(Context.AUDIO_SERVICE))).setStreamMute(AudioManager.STREAM_SYSTEM, true); + } + } catch (Exception e) { + e.printStackTrace(); + } + + Speech.init(this); + delegate = this; + Speech.getInstance().setListener(this); + + if (Speech.getInstance().isListening()) { + Speech.getInstance().stopListening(); + muteBeepSoundOfRecorder(); + } else { + System.setProperty("rx.unsafe-disable", "True"); + RxPermissions.getInstance(this).request(permission.RECORD_AUDIO).subscribe(granted -> { + if (granted) { // Always true pre-M + try { + Speech.getInstance().stopTextToSpeech(); + Speech.getInstance().startListening(null, this); + } catch (SpeechRecognitionNotAvailable exc) { + //showSpeechNotSupportedDialog(); + + } catch (GoogleVoiceTypingDisabledException exc) { + //showEnableGoogleVoiceTyping(); + } + } else { + Toast.makeText(this, R.string.permission_required, Toast.LENGTH_LONG).show(); + } + }); + muteBeepSoundOfRecorder(); + } + return Service.START_STICKY; + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onStartOfSpeech() { + } + + @Override + public void onSpeechRmsChanged(float value) { + + } + + @Override + public void onSpeechPartialResults(List results) { + for (String partial : results) { + Log.d("Result", partial + ""); + } + } + + @Override + public void onSpeechResult(String result) { + + + Log.d("Result", result + ""); + if (!TextUtils.isEmpty(result)) { + + Toast.makeText(this, "You Said : " + result, Toast.LENGTH_SHORT).show(); + if (result.contains("help") || result.contains("bachao")) { + //Toast.makeText(this, "Help mode activated ", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "Help mode activated ", Toast.LENGTH_SHORT).show(); + + + SQLiteDatabase db2 = this.openOrCreateDatabase("NumberDB", MODE_PRIVATE, null); + + Log.d("Number is:", Register.getNumber(db2)); + + SmsManager smsManager = SmsManager.getDefault(); + smsManager.sendTextMessage(Register.getNumber(db2), null, "Please HELP me !! I am in Danger, I need your help", null, null); + + + Intent intent = new Intent(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + Register.getNumber(db2))); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_FROM_BACKGROUND); + startActivity(intent); + + + Toast.makeText(this, "Help mode activated ", Toast.LENGTH_SHORT).show(); + + + } + } + } + + @Override + public void onSpecifiedCommandPronounced(String event) { + try { + if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { + ((AudioManager) Objects.requireNonNull( + getSystemService(Context.AUDIO_SERVICE))).setStreamMute(AudioManager.STREAM_SYSTEM, true); + } + } catch (Exception e) { + e.printStackTrace(); + } + if (Speech.getInstance().isListening()) { + muteBeepSoundOfRecorder(); + Speech.getInstance().stopListening(); + } else { + RxPermissions.getInstance(this).request(permission.RECORD_AUDIO).subscribe(granted -> { + if (granted) { // Always true pre-M + try { + Speech.getInstance().stopTextToSpeech(); + Speech.getInstance().startListening(null, this); + } catch (SpeechRecognitionNotAvailable exc) { + //showSpeechNotSupportedDialog(); + + } catch (GoogleVoiceTypingDisabledException exc) { + //showEnableGoogleVoiceTyping(); + } + } else { + Toast.makeText(this, R.string.permission_required, Toast.LENGTH_LONG).show(); + } + }); + muteBeepSoundOfRecorder(); + } + } + + private void muteBeepSoundOfRecorder() { + AudioManager amanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + if (amanager != null) { + amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true); + amanager.setStreamMute(AudioManager.STREAM_ALARM, true); + amanager.setStreamMute(AudioManager.STREAM_MUSIC, true); + amanager.setStreamMute(AudioManager.STREAM_RING, true); + amanager.setStreamMute(AudioManager.STREAM_SYSTEM, true); + } + } + + @Override + public void onTaskRemoved(Intent rootIntent) { + PendingIntent service = + PendingIntent.getService(getApplicationContext(), new Random().nextInt(), + new Intent(getApplicationContext(), MyService.class), PendingIntent.FLAG_ONE_SHOT); + + AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + assert alarmManager != null; + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000, service); + super.onTaskRemoved(rootIntent); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/womensafety/shajt3ch/PhoneNumber.java b/app/src/main/java/com/womensafety/shajt3ch/PhoneNumber.java new file mode 100644 index 0000000..f00d225 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/PhoneNumber.java @@ -0,0 +1,6 @@ +package com.womensafety.shajt3ch; + +public class PhoneNumber { + public static String phoneNumber = "01521313051"; + +} diff --git a/app/src/main/java/com/womensafety/shajt3ch/RGeocoder.java b/app/src/main/java/com/womensafety/shajt3ch/RGeocoder.java new file mode 100644 index 0000000..ee6c22a --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/RGeocoder.java @@ -0,0 +1,82 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.location.Address; +import android.location.Geocoder; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import java.io.IOException; +import java.util.List; +import java.util.Locale; + + +public class RGeocoder { + + private static final String TAG = "LocationAddress"; + + + public void getAddressFromLocation(final double latitude, final double longitude, + final Context context, final Handler handler) { + + Thread thread = new Thread() { + @Override + public void run() { + Geocoder geocoder = new Geocoder(context, Locale.getDefault()); + String result = null; + try { + + List
addressList = geocoder.getFromLocation(latitude, longitude, 1); + if (addressList != null && addressList.size() > 0) { + Address address = addressList.get(0); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { + sb.append(address.getAddressLine(i)).append("\n"); + } + sb.append(address.getLocality()).append("\n"); + sb.append(address.getPostalCode()).append("\n"); + sb.append(address.getCountryName()); + result = sb.toString(); + + + } + } + + + catch (IOException e) { + Log.e(TAG, "Unable connect to Geocoder", e); + } + + + finally { + Message message = Message.obtain(); + message.setTarget(handler); + if (result != null) { + message.what = 1; + Bundle bundle = new Bundle(); + result = "Latitude: " + latitude + " Longitude: " + longitude + + "\n\nAddress:\n" + result; + bundle.putString("address", result); + message.setData(bundle); + } else { + message.what = 1; + Bundle bundle = new Bundle(); + result = "Latitude: " + latitude + " Longitude: " + longitude + + "\n Unable to get address for this lat-long."; + bundle.putString("address", result); + message.setData(bundle); + } + message.sendToTarget(); + } + } + }; + thread.start(); + + + + + } +} + diff --git a/app/src/main/java/com/womensafety/shajt3ch/RecyclerAdapter.java b/app/src/main/java/com/womensafety/shajt3ch/RecyclerAdapter.java new file mode 100644 index 0000000..2734212 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/RecyclerAdapter.java @@ -0,0 +1,39 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.List; + + + +public class RecyclerAdapter extends RecyclerView.Adapter { +private Context mContext; +private List mDatas; + +public RecyclerAdapter(Context context, List datas) { + mContext = context; + mDatas = datas; + } + +@Override +public Holder onCreateViewHolder(ViewGroup parent, int viewType) { + return new Holder(LayoutInflater.from( + mContext).inflate(R.layout.item_main, parent, false)); + } + +@Override +public void onBindViewHolder(Holder holder, int position) { + Model model=mDatas.get(position); + holder.bindData(model); + } + +@Override +public int getItemCount() { + return mDatas.size(); + } + } diff --git a/app/src/main/java/com/womensafety/shajt3ch/Register.java b/app/src/main/java/com/womensafety/shajt3ch/Register.java new file mode 100644 index 0000000..fa74e07 --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Register.java @@ -0,0 +1,104 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.annotation.Nullable; +import android.support.design.widget.TextInputLayout; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import static android.content.Context.MODE_PRIVATE; + + +public class Register extends Fragment implements View.OnClickListener { + TextInputLayout namelayout, numberlayout; + private static EditText name, number; + public SQLiteDatabase db; + public static SQLiteDatabase db2; + public static final String MY_PREFS_NAME = "MyPrefsFile"; + + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + //returning our layout file + //change R.layout.yourlayoutfilename for each of your fragments + View view = inflater.inflate(R.layout.contacts_register, container, false); + namelayout = view.findViewById(R.id.name); + numberlayout = view.findViewById(R.id.mobile); + name = view.findViewById(R.id.editText2); + number = view.findViewById(R.id.editText3); + Button save = view.findViewById(R.id.save); + save.setOnClickListener(this); + return view; + } + + @Override + public void onClick(View view) { + Toast.makeText(getActivity(), "save started", Toast.LENGTH_LONG).show(); + + /* name.setHint("Person name"); + number.setHint("Mobile Number");*/ + String str_name = name.getText().toString(); + String str_number = number.getText().toString(); + PhoneNumber.phoneNumber = str_number; + Log.d("Phone", PhoneNumber.phoneNumber); + db = getActivity().openOrCreateDatabase("NumberDB", MODE_PRIVATE, null); + //Toast.makeText(getApplicationContext(), "db created",Toast.LENGTH_LONG).show(); + //db2 = db; + db.execSQL("CREATE TABLE IF NOT EXISTS details(Pname VARCHAR,number VARCHAR);"); + //Toast.makeText(getApplicationContext(), "table created",Toast.LENGTH_LONG).show(); + + Cursor c = db.rawQuery("SELECT * FROM details", null); + if (c.getCount() < 1) { + db.execSQL("INSERT INTO details VALUES('" + str_name + "','" + str_number + "');"); + + + Toast.makeText(getActivity(), "Successfully Saved", Toast.LENGTH_SHORT).show(); + } else { + + db.execSQL("INSERT INTO details VALUES('" + str_name + "','" + str_number + "');"); + Toast.makeText(getActivity(), "Maximun Numbers limited reached. Previous numbers are replaced.", Toast.LENGTH_SHORT).show(); + } + + + db.close(); + + + } + + + public static String getNumber(SQLiteDatabase db2) { + + + Cursor c = null; + String phone_num = ""; + //db2 = openOrCreateDatabase("NumDB", MODE_PRIVATE, null); + + c = db2.rawQuery("SELECT * FROM details LIMIT 1", null); + if (c.getCount() > 0) { + //c.moveToFirst(); + + while (c.moveToNext()) { + + phone_num += c.getString(1); + } + + } + + return phone_num; + + + } + + +} + diff --git a/app/src/main/java/com/womensafety/shajt3ch/Safety.java b/app/src/main/java/com/womensafety/shajt3ch/Safety.java new file mode 100644 index 0000000..e86c4eb --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Safety.java @@ -0,0 +1,58 @@ +package com.womensafety.shajt3ch; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; + +import java.util.ArrayList; + +import cn.hugeterry.coordinatortablayout.CoordinatorTabLayout; + +public class Safety extends AppCompatActivity { + private CoordinatorTabLayout mCoordinatorTabLayout; + private int[] mImageArray, mColorArray; + private ArrayList mFragments; + private final String[] mTitles = {"First_Aid","Self_defence"}; + private ViewPager mViewPager; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_safety); + initFragments(); + initViewPager(); + mImageArray = new int[]{ + R.mipmap.firstaid_icon, + R.mipmap.selfdefence_icon, + }; + mColorArray = new int[]{ + + android.R.color.holo_red_light, + android.R.color.holo_orange_light, + }; + + mCoordinatorTabLayout = (CoordinatorTabLayout) findViewById(R.id.coordinatortablayout); + mCoordinatorTabLayout.setTranslucentStatusBar(this) + .setTitle("Safety Tips") + .setBackEnable(true) + .setImageArray(mImageArray, mColorArray) + .setupWithViewPager(mViewPager); + } + + private void initFragments() { + mFragments = new ArrayList<>(); + for (String title : mTitles) { + mFragments.add(DataHolder.getInstance(title)); + } + } + + private void initViewPager() { + mViewPager = (ViewPager) findViewById(R.id.vp); + mViewPager.setOffscreenPageLimit(1); + mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(), mFragments, mTitles)); + } + +} + diff --git a/app/src/main/java/com/womensafety/shajt3ch/Verify.java b/app/src/main/java/com/womensafety/shajt3ch/Verify.java new file mode 100644 index 0000000..893629a --- /dev/null +++ b/app/src/main/java/com/womensafety/shajt3ch/Verify.java @@ -0,0 +1,51 @@ +package com.womensafety.shajt3ch; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.design.widget.TextInputLayout; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + + +public class Verify extends Fragment implements View.OnClickListener { + TextInputLayout source_no; + private static EditText phone; + + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.selfregister, container, false); + source_no = (TextInputLayout) view.findViewById(R.id.verify); + phone = view.findViewById(R.id.editText1); + Button submit = view.findViewById(R.id.button1); + submit.setOnClickListener(this); + return view; + } + + + + + @Override + public void onClick(View view) { + + + /*source_no.setHint("Your Phone No.");*/ + String str_source_no = phone.getText().toString(); + SQLiteDatabase db; + db = getActivity().openOrCreateDatabase("NumDB", Context.MODE_PRIVATE, null); + // if(source_no.getText()!=null){ + + db.execSQL("CREATE TABLE IF NOT EXISTS source(number VARCHAR);"); + db.execSQL("INSERT INTO source VALUES('" + str_source_no + "');"); + Toast.makeText(getActivity(), str_source_no + " Successfully Saved", Toast.LENGTH_SHORT).show(); + db.close(); + + + } +} diff --git a/app/src/main/res/drawable-v21/card_view_border.xml b/app/src/main/res/drawable-v21/card_view_border.xml new file mode 100644 index 0000000..1f1c1ec --- /dev/null +++ b/app/src/main/res/drawable-v21/card_view_border.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/help.png b/app/src/main/res/drawable-v21/help.png new file mode 100644 index 0000000..8c1ce7b Binary files /dev/null and b/app/src/main/res/drawable-v21/help.png differ diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_manage.xml b/app/src/main/res/drawable-v21/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_send.xml b/app/src/main/res/drawable-v21/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_share.xml b/app/src/main/res/drawable-v21/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/rate.png b/app/src/main/res/drawable-v21/rate.png new file mode 100644 index 0000000..1740f81 Binary files /dev/null and b/app/src/main/res/drawable-v21/rate.png differ 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..c7bd21d --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable-v24/icon_power_black.png b/app/src/main/res/drawable-v24/icon_power_black.png new file mode 100644 index 0000000..2f67e50 Binary files /dev/null and b/app/src/main/res/drawable-v24/icon_power_black.png differ diff --git a/app/src/main/res/drawable-v24/icon_power_on.png b/app/src/main/res/drawable-v24/icon_power_on.png new file mode 100644 index 0000000..0c15223 Binary files /dev/null and b/app/src/main/res/drawable-v24/icon_power_on.png differ diff --git a/app/src/main/res/drawable-v24/icon_power_red.png b/app/src/main/res/drawable-v24/icon_power_red.png new file mode 100644 index 0000000..1f44d6f Binary files /dev/null and b/app/src/main/res/drawable-v24/icon_power_red.png differ diff --git a/app/src/main/res/drawable/ic_close_black_24dp.png b/app/src/main/res/drawable/ic_close_black_24dp.png new file mode 100644 index 0000000..1a9cd75 Binary files /dev/null and b/app/src/main/res/drawable/ic_close_black_24dp.png differ 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..01f0af0 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/icon_contatcs.png b/app/src/main/res/drawable/icon_contatcs.png new file mode 100644 index 0000000..6c291e3 Binary files /dev/null and b/app/src/main/res/drawable/icon_contatcs.png differ diff --git a/app/src/main/res/drawable/icon_display.png b/app/src/main/res/drawable/icon_display.png new file mode 100644 index 0000000..73d9402 Binary files /dev/null and b/app/src/main/res/drawable/icon_display.png differ diff --git a/app/src/main/res/drawable/icon_inst.png b/app/src/main/res/drawable/icon_inst.png new file mode 100644 index 0000000..f407118 Binary files /dev/null and b/app/src/main/res/drawable/icon_inst.png differ diff --git a/app/src/main/res/drawable/icon_nearby.png b/app/src/main/res/drawable/icon_nearby.png new file mode 100644 index 0000000..0c9cf1d Binary files /dev/null and b/app/src/main/res/drawable/icon_nearby.png differ diff --git a/app/src/main/res/drawable/icon_register.png b/app/src/main/res/drawable/icon_register.png new file mode 100644 index 0000000..7c29076 Binary files /dev/null and b/app/src/main/res/drawable/icon_register.png differ diff --git a/app/src/main/res/drawable/icon_safety.png b/app/src/main/res/drawable/icon_safety.png new file mode 100644 index 0000000..17f20c4 Binary files /dev/null and b/app/src/main/res/drawable/icon_safety.png differ diff --git a/app/src/main/res/drawable/instruct_icon.png b/app/src/main/res/drawable/instruct_icon.png new file mode 100644 index 0000000..0b6025f Binary files /dev/null and b/app/src/main/res/drawable/instruct_icon.png differ diff --git a/app/src/main/res/drawable/power.png b/app/src/main/res/drawable/power.png new file mode 100644 index 0000000..bdc7dd5 Binary files /dev/null and b/app/src/main/res/drawable/power.png differ diff --git a/app/src/main/res/drawable/power2.png b/app/src/main/res/drawable/power2.png new file mode 100644 index 0000000..eb881e3 Binary files /dev/null and b/app/src/main/res/drawable/power2.png differ diff --git a/app/src/main/res/drawable/power3.png b/app/src/main/res/drawable/power3.png new file mode 100644 index 0000000..07f1f7a Binary files /dev/null and b/app/src/main/res/drawable/power3.png differ diff --git a/app/src/main/res/drawable/power4.png b/app/src/main/res/drawable/power4.png new file mode 100644 index 0000000..5028568 Binary files /dev/null and b/app/src/main/res/drawable/power4.png differ diff --git a/app/src/main/res/drawable/power5.png b/app/src/main/res/drawable/power5.png new file mode 100644 index 0000000..1be6207 Binary files /dev/null and b/app/src/main/res/drawable/power5.png differ diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..6d81870 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ 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..a61d8a6 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml new file mode 100644 index 0000000..177baf8 --- /dev/null +++ b/app/src/main/res/layout/activity_maps.xml @@ -0,0 +1,63 @@ + + + + + + +