diff --git a/Dwarsoft-Lynk-Hack-master/.gitignore b/Dwarsoft-Lynk-Hack-master/.gitignore new file mode 100644 index 00000000..603b1407 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.gitignore @@ -0,0 +1,14 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/Dwarsoft-Lynk-Hack-master/.idea/.name b/Dwarsoft-Lynk-Hack-master/.idea/.name new file mode 100644 index 00000000..01b1230c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.idea/.name @@ -0,0 +1 @@ +Dwarsoft-Lynk-Hackathon \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/.idea/codeStyles/Project.xml b/Dwarsoft-Lynk-Hack-master/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..ae78c113 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.idea/codeStyles/Project.xml @@ -0,0 +1,113 @@ + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/.idea/gradle.xml b/Dwarsoft-Lynk-Hack-master/.idea/gradle.xml new file mode 100644 index 00000000..169fd0dd --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/.idea/misc.xml b/Dwarsoft-Lynk-Hack-master/.idea/misc.xml new file mode 100644 index 00000000..29bb4c57 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/.idea/runConfigurations.xml b/Dwarsoft-Lynk-Hack-master/.idea/runConfigurations.xml new file mode 100644 index 00000000..7f68460d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/.idea/vcs.xml b/Dwarsoft-Lynk-Hack-master/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/README.md b/Dwarsoft-Lynk-Hack-master/README.md new file mode 100644 index 00000000..005ceaa1 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/README.md @@ -0,0 +1 @@ +# Dwarsoft-Lynk-Hack \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/.gitignore b/Dwarsoft-Lynk-Hack-master/app/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Dwarsoft-Lynk-Hack-master/app/build.gradle b/Dwarsoft-Lynk-Hack-master/app/build.gradle new file mode 100644 index 00000000..1c1fcd7a --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/build.gradle @@ -0,0 +1,49 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 29 + defaultConfig { + applicationId "com.dwarsoftgames.dwarsoft_lynk_hackathon" + minSdkVersion 22 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + + debug { + shrinkResources false + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + + release { + shrinkResources true + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + implementation 'com.google.firebase:firebase-analytics:17.2.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'com.jaredrummler:material-spinner:1.3.1' + implementation 'androidx.room:room-runtime:2.1.0' + annotationProcessor 'androidx.room:room-compiler:2.1.0' + implementation 'com.mcxiaoke.volley:library-aar:1.0.0' + implementation 'com.airbnb.android:lottie:2.7.0' + + implementation 'com.google.android.gms:play-services-location:17.0.0' + implementation 'com.google.android.gms:play-services-places:17.0.0' + implementation 'com.google.android.gms:play-services-maps:17.0.0' +} +apply plugin: 'com.google.gms.google-services' diff --git a/Dwarsoft-Lynk-Hack-master/app/google-services.json b/Dwarsoft-Lynk-Hack-master/app/google-services.json new file mode 100644 index 00000000..f9f0f8a5 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "371774961168", + "firebase_url": "https://dwarsoft-lynk-hack.firebaseio.com", + "project_id": "dwarsoft-lynk-hack", + "storage_bucket": "dwarsoft-lynk-hack.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:371774961168:android:b3d1c230981151758bfc95", + "android_client_info": { + "package_name": "com.dwarsoftgames.dwarsoft_lynk_hackathon" + } + }, + "oauth_client": [ + { + "client_id": "371774961168-r04h24kt1951u6ssif7rnlqdq8g2nekf.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.dwarsoftgames.dwarsoft_lynk_hackathon", + "certificate_hash": "93fb60d715cc40c50eb13a94431657f6f4f6b373" + } + }, + { + "client_id": "371774961168-gatg2birmtokib0ke6l3kli9qdcg4s0e.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyB-sj_pBHx3TNa1wOu_3QfIe3FmcSAUsYg" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "371774961168-gatg2birmtokib0ke6l3kli9qdcg4s0e.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/proguard-rules.pro b/Dwarsoft-Lynk-Hack-master/app/proguard-rules.pro new file mode 100644 index 00000000..56d319b4 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/proguard-rules.pro @@ -0,0 +1,34 @@ +# 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 + +-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.NetworkDispatcher { + void processRequest(); +} +-keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.CacheDispatcher { + void processRequest(); +} +-dontwarn okhttp3.** +-dontwarn okio.** +-dontwarn javax.annotation.** +-dontwarn org.conscrypt.** +# A resource is loaded with a relative path so the package of this class must be preserved. +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/androidTest/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/ExampleInstrumentedTest.java b/Dwarsoft-Lynk-Hack-master/app/src/androidTest/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/ExampleInstrumentedTest.java new file mode 100644 index 00000000..8fddbfe4 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/androidTest/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon; + +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.dwarsoftgames.dwarsoft_lynk_hackathon", appContext.getPackageName()); + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/AndroidManifest.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..dfd21946 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/AndroidManifest.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/assets/correct.json b/Dwarsoft-Lynk-Hack-master/app/src/main/assets/correct.json new file mode 100644 index 00000000..8bfff24d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/assets/correct.json @@ -0,0 +1,499 @@ +{ + "v": "4.6.10", + "fr": 30, + "ip": 0, + "op": 55, + "w": 400, + "h": 300, + "nm": "check", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "CHECK", + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p667_1_0p333_0" + ], + "t": 16, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 22 + } + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 200, + 150, + 0 + ] + }, + "a": { + "a": 0, + "k": [ + 26.929, + -9.338, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 80, + 80, + 100 + ] + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.944, + -4.569 + ], + [ + 15.145, + 25.161 + ], + [ + 81.145, + -47.339 + ] + ], + "c": false + } + }, + "nm": "Trazado 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1, + 1 + ] + }, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 15 + }, + "lc": 2, + "lj": 1, + "ml": 4, + "nm": "Trazo 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 89.463, + 84.21 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transformar" + } + ], + "nm": "Forma 1", + "np": 3, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group" + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p667_1_0p333_0" + ], + "t": 16, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 22 + } + ], + "x": "var $bm_rt;\nvar n, n, t, t, v, amp, freq, decay;\n$bm_rt = n = 0;\nif (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n}\nif (n == 0) {\n $bm_rt = t = 0;\n} else {\n $bm_rt = t = sub(time, key(n).time);\n}\nif (n > 0 && t < 1) {\n v = velocityAtTime(sub(key(n).time, div(thisComp.frameDuration, 10)));\n amp = 0.02;\n freq = 3;\n decay = 7;\n $bm_rt = sum(value, div(mul(mul(v, amp), Math.sin(mul(mul(mul(freq, t), 2), Math.PI))), Math.exp(mul(decay, t))));\n} else {\n $bm_rt = value;\n}", + "ix": 1 + }, + "e": { + "a": 0, + "k": 0, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Recortar trazados 1", + "mn": "ADBE Vector Filter - Trim" + } + ], + "ip": 0, + "op": 300, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "CIRCULO", + "ks": { + "o": { + "a": 0, + "k": 100 + }, + "r": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 200, + 150, + 0 + ] + }, + "a": { + "a": 0, + "k": [ + 0, + -10, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.667, + 0.667, + 0.667 + ], + "y": [ + 1, + 1, + 0.667 + ] + }, + "o": { + "x": [ + 0.333, + 0.333, + 0.333 + ], + "y": [ + 0, + 0, + 0.333 + ] + }, + "n": [ + "0p667_1_0p333_0", + "0p667_1_0p333_0", + "0p667_0p667_0p333_0p333" + ], + "t": 3, + "s": [ + 0, + 0, + 100 + ], + "e": [ + 100, + 100, + 100 + ] + }, + { + "t": 9 + } + ], + "x": "var $bm_rt;\nvar n, n, t, t, v, amp, freq, decay;\n$bm_rt = n = 0;\nif (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n}\nif (n == 0) {\n $bm_rt = t = 0;\n} else {\n $bm_rt = t = sub(time, key(n).time);\n}\nif (n > 0 && t < 1) {\n v = velocityAtTime(sub(key(n).time, div(thisComp.frameDuration, 10)));\n amp = 0.01;\n freq = 2;\n decay = 7;\n $bm_rt = sum(value, div(mul(mul(v, amp), Math.sin(mul(mul(mul(freq, t), 2), Math.PI))), Math.exp(mul(decay, t))));\n} else {\n $bm_rt = value;\n}" + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { + "a": 0, + "k": [ + 127.574, + 127.574 + ] + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "nm": "Trazado elíptico 1", + "mn": "ADBE Vector Shape - Ellipse" + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1, + 1 + ] + }, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 0 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "nm": "Trazo 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0.2980392, + 0.6862745, + 0.3137255, + 1 + ] + }, + "o": { + "a": 0, + "k": 100 + }, + "r": 1, + "nm": "Relleno 1", + "mn": "ADBE Vector Graphic - Fill" + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 1.549, + -12.303 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transformar" + } + ], + "nm": "Elipse 1", + "np": 3, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 300, + "st": 0, + "bm": 0, + "sr": 1 + } + ] +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/Authentication.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/Authentication.java new file mode 100644 index 00000000..a4e70fc5 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/Authentication.java @@ -0,0 +1,146 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Authentication; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.MainActivity; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AUTH; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; + +public class Authentication extends AppCompatActivity { + + private TextInputLayout tiPhoneNumber; + private EditText etPhoneNumber; + private MaterialButton btEnter; + private String phoneNumber; + + private RequestQueue requestQueue; + private AppDatabase db; + private SharedPreferences sharedPreferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_authentication); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + } + + private void init() { + tiPhoneNumber = findViewById(R.id.tiPhoneNumber); + etPhoneNumber = findViewById(R.id.etPhoneNumber); + btEnter = findViewById(R.id.btEnter); + + requestQueue = Volley.newRequestQueue(getApplicationContext(),null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF,MODE_PRIVATE); + } + + private void setOnClicks() { + btEnter.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + phoneNumber = etPhoneNumber.getText().toString().trim(); + if (phoneNumber.length() != 10) { + tiPhoneNumber.setErrorEnabled(true); + tiPhoneNumber.setError("Phone Number should have 10 digits"); + } else { + tiPhoneNumber.setErrorEnabled(false); + post_Phone(); + } + } + }); + } + + private void post_Phone() { + + Map params = new HashMap<>(); + params.put("phoneNo",phoneNumber); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AUTH, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseAuth(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Auth"); + requestQueue.add(jsonObjReq); + } + + private void parseAuth(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + db.userDao().updatePhoneNo(phoneNumber); + sharedPreferences.edit().putBoolean("user_auth", true).apply(); + if (jsonObject.getBoolean("isNewUser")) { + openAuthDetails(); + } else { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + JSONObject jsonObject1 = jsonArray.getJSONObject(0); + db.userDao().updateVolunteerID(jsonObject1.getInt("VolunteerID")); + db.userDao().updateVictimID(jsonObject1.getInt("VictimID")); + db.userDao().updateAreaID(jsonObject1.getString("AreaID")); + + openDashboard(); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + private void openAuthDetails() { + Intent intent = new Intent(Authentication.this, AuthenticationDetails.class); + startActivity(intent); + finish(); + } + + private void openDashboard() { + Intent intent = new Intent(Authentication.this, MainActivity.class); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/AuthenticationDetails.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/AuthenticationDetails.java new file mode 100644 index 00000000..85c0b6f2 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/AuthenticationDetails.java @@ -0,0 +1,472 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Authentication; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.location.Address; +import android.location.Geocoder; +import android.location.Location; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.MainActivity; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer.VolunteerDashboard; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AUTH_DATA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; + +public class AuthenticationDetails extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, + GoogleApiClient.OnConnectionFailedListener { + + private TextInputLayout tiName; + private EditText etName; + private TextView tvAddress; + private MaterialSpinner spState, spCity, spArea; + private MaterialButton btEnter; + + private RequestQueue requestQueue; + private AppDatabase db; + private SharedPreferences sharedPreferences; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private String areaID; + private String address; + private String name; + private double latitude; + private double longitude; + + //Location + private FusedLocationProviderClient mFusedLocationClient; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_authentication_details); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setAdapters(); + setSpinnerListeners(); + setOnClicks(); + + getLocation(); + + post_state(); + post_city("1"); + post_area("1"); + } + + private void init() { + tiName = findViewById(R.id.tiName); + etName = findViewById(R.id.etName); + tvAddress = findViewById(R.id.tvAddress); + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + btEnter = findViewById(R.id.btEnter); + + requestQueue = Volley.newRequestQueue(getApplicationContext(),null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF,MODE_PRIVATE); + + spState.setHint("Select State"); + spCity.setHint("Select City"); + spArea.setHint("Select Area"); + + states.clear(); + city.clear(); + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + areaID = db.userDao().getAreaID(); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + } + }); + } + + private void setOnClicks() { + btEnter.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateData()) { + post_authDetails(); + } + } + }); + + tvAddress.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getAddress(); + } + }); + } + + private void post_state() { + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + states.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i params = new HashMap<>(); + params.put("StateID",stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + city.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i 0) { + areaID = "1"; + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + Map params = new HashMap<>(); + params.put("CityID",cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + area.clear(); + + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i 2) { + tiName.setErrorEnabled(false); + } else { + tiName.setErrorEnabled(true); + tiName.setError("Please enter proper Name"); + return false; + } + + if (latitude == 0 || longitude == 0) { + getLocation(); + } + + if (address == null) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.address_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + + return false; + } + + if (address.equalsIgnoreCase("")) { + getAddress(); + } + + return true; + } + + private void post_authDetails() { + + Map params = new HashMap<>(); + params.put("phoneNo",db.userDao().getPhoneNumber()); + params.put("Name",name); + params.put("Address",address); + params.put("Latitude", String.valueOf(latitude)); + params.put("Longitude", String.valueOf(longitude)); + params.put("AreaID",areaID); + + db.userDao().updateLatitude(String.valueOf(latitude)); + db.userDao().updateLongitude(String.valueOf(longitude)); + db.userDao().updateAreaID(areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AUTH_DATA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResponse(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("AuthenticationDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseResponse(JSONObject jsonObject) { + + try { + if (jsonObject.getBoolean("isSuccess")) { + sharedPreferences.edit().putBoolean("volunteerDetails",true).apply(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + JSONObject jsonObject1 = jsonArray.getJSONObject(0); + + db.userDao().updateVolunteerID(jsonObject1.getInt("VolunteerID")); + db.userDao().updateVictimID(jsonObject1.getInt("VictimID")); + + openDashboard(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void openDashboard() { + Intent intent = new Intent(AuthenticationDetails.this, MainActivity.class); + startActivity(intent); + finish(); + } + + //Location + private void getLocation() { + mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + mFusedLocationClient.getLastLocation() + .addOnSuccessListener(this, new OnSuccessListener() { + @Override + public void onSuccess(Location location) { + // Got last known location. In some rare situations, this can be null. + if (location != null) { + // Logic to handle location object + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + } + }); + } + + private void getAddress() { + Geocoder geocoder; + List
addresses; + geocoder = new Geocoder(this, Locale.getDefault()); + + try { + addresses = geocoder.getFromLocation(latitude, longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5 + address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() +// String city = addresses.get(0).getLocality(); +// String state = addresses.get(0).getAdminArea(); +// String country = addresses.get(0).getCountryName(); +// String postalCode = addresses.get(0).getPostalCode(); +// String knownName = addresses.get(0).getFeatureName(); + String setAddress = "Address - " + address; + tvAddress.setText(setAddress); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onConnected(@Nullable Bundle bundle) { + getLocation(); + } + + @Override + public void onConnectionSuspended(int i) { + Log.d("LynkHack","error 1 : "+i); + } + + @Override + public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { + Log.d("LynkHack","error 2 : "+connectionResult.getErrorMessage()); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/UpdateProfile.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/UpdateProfile.java new file mode 100644 index 00000000..a60f372c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Authentication/UpdateProfile.java @@ -0,0 +1,497 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Authentication; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.location.Address; +import android.location.Geocoder; +import android.location.Location; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.MainActivity; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer.VolunteerDashboard; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AUTH_DATA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_PROFILE_DETAILS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.UPDATE_PROFILE_DETAILS; + +public class UpdateProfile extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, + GoogleApiClient.OnConnectionFailedListener { + + private TextInputLayout tiName; + private EditText etName; + private TextView tvAddress; + private MaterialSpinner spState, spCity, spArea; + private MaterialButton btUpdate; + + private RequestQueue requestQueue; + private AppDatabase db; + private SharedPreferences sharedPreferences; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private String areaID; + private String address; + private String name; + private double latitude; + private double longitude; + + //Location + private FusedLocationProviderClient mFusedLocationClient; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_update_profile); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setAdapters(); + setSpinnerListeners(); + setOnClicks(); + + getLocation(); + + post_state(); + post_city("1"); + post_area("1"); + + post_userDetails(); + } + + private void init() { + tiName = findViewById(R.id.tiName); + etName = findViewById(R.id.etName); + tvAddress = findViewById(R.id.tvAddress); + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + btUpdate = findViewById(R.id.btUpdate); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF, MODE_PRIVATE); + + spState.setHint("Select State"); + spCity.setHint("Select City"); + spArea.setHint("Select Area"); + + states.clear(); + city.clear(); + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + areaID = db.userDao().getAreaID(); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + } + }); + } + + private void setOnClicks() { + btUpdate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateData()) { + post_updateUserDetails(); + } + } + }); + + tvAddress.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getAddress(); + } + }); + } + + private void post_state() { + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + states.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + states.add(jsonObject1.getString("StateID")); + spinnerAdapter_state.add(jsonObject1.getString("StateName")); + } + + spState.setAdapter(spinnerAdapter_state); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_userDetails() { + + Map params = new HashMap<>(); + params.put("VolunteerID", String.valueOf(db.userDao().getVolunteerID())); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_PROFILE_DETAILS, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseUserDetails(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("UserDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseUserDetails(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + JSONObject jsonObject1 = jsonArray.getJSONObject(0); + + name = jsonObject1.getString("Name"); + address = jsonObject1.getString("Address"); + areaID = jsonObject1.getString("AreaID"); + + etName.setText(name); + tvAddress.setText(address); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_city(String stateID) { + + Map params = new HashMap<>(); + params.put("StateID", stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + city.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + city.add(jsonObject1.getString("CityID")); + spinnerAdapter_city.add(jsonObject1.getString("CityName")); + } + if (city.size() > 0) { + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + Map params = new HashMap<>(); + params.put("CityID", cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + area.add(jsonObject1.getString("AreaID")); + spinnerAdapter_area.add(jsonObject1.getString("AName")); + } + + spArea.setAdapter(spinnerAdapter_area); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private boolean validateData() { + name = etName.getText().toString().trim(); + if (name.length() > 2) { + tiName.setErrorEnabled(false); + } else { + tiName.setErrorEnabled(true); + tiName.setError("Please enter proper Name"); + return false; + } + + if (latitude == 0 || longitude == 0) { + getLocation(); + } + + if (address == null) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.address_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + + return false; + } + + if (address.equalsIgnoreCase("")) { + getAddress(); + } + + return true; + } + + private void post_updateUserDetails() { + + Map params = new HashMap<>(); + params.put("Name", name); + params.put("Address", address); + params.put("Latitude", String.valueOf(latitude)); + params.put("Longitude", String.valueOf(longitude)); + params.put("AreaID", areaID); + params.put("VolunteerID", String.valueOf(db.userDao().getVolunteerID())); + params.put("VictimID", String.valueOf(db.userDao().getVictimID())); + + db.userDao().updateLatitude(String.valueOf(latitude)); + db.userDao().updateLongitude(String.valueOf(longitude)); + db.userDao().updateAreaID(areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + UPDATE_PROFILE_DETAILS, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResponse(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("UpdateDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseResponse() { + finish(); + } + + //Location + private void getLocation() { + mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + mFusedLocationClient.getLastLocation() + .addOnSuccessListener(this, new OnSuccessListener() { + @Override + public void onSuccess(Location location) { + // Got last known location. In some rare situations, this can be null. + if (location != null) { + // Logic to handle location object + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + } + }); + } + + private void getAddress() { + Geocoder geocoder; + List
addresses; + geocoder = new Geocoder(this, Locale.getDefault()); + + try { + addresses = geocoder.getFromLocation(latitude, longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5 + address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() +// String city = addresses.get(0).getLocality(); +// String state = addresses.get(0).getAdminArea(); +// String country = addresses.get(0).getCountryName(); +// String postalCode = addresses.get(0).getPostalCode(); +// String knownName = addresses.get(0).getFeatureName(); + String setAddress = "Address - " + address; + tvAddress.setText(setAddress); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onConnected(@Nullable Bundle bundle) { + getLocation(); + } + + @Override + public void onConnectionSuspended(int i) { + Log.d("LynkHack", "error 1 : " + i); + } + + @Override + public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { + Log.d("LynkHack", "error 2 : " + connectionResult.getErrorMessage()); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Groups/CreateGroup.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Groups/CreateGroup.java new file mode 100644 index 00000000..5d66f190 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Groups/CreateGroup.java @@ -0,0 +1,174 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Groups; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.SuccessScreen; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer.ShareResources; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CREATE_GROUP; + +public class CreateGroup extends AppCompatActivity { + + private TextInputLayout tiName, tiDescription, tiMembers, tiLink; + private EditText etName, etDescription, etMembers, etLink; + private MaterialButton btCreate; + + private RequestQueue requestQueue; + private AppDatabase db; + + private String name, description, members, link; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_create_group); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + } + + private void init() { + tiName = findViewById(R.id.tiName); + tiDescription = findViewById(R.id.tiDescription); + tiMembers = findViewById(R.id.tiMembers); + tiLink = findViewById(R.id.tiLink); + etName = findViewById(R.id.etName); + etDescription = findViewById(R.id.etDescription); + etMembers = findViewById(R.id.etMembers); + etLink = findViewById(R.id.etLink); + btCreate = findViewById(R.id.btCreate); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + } + + private void setOnClicks() { + btCreate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateDetails()) { + post_CreateGroup(); + } + } + }); + } + + private boolean validateDetails() { + int flag = 0; + name = etName.getText().toString().trim(); + description = etDescription.getText().toString().trim(); + members = etMembers.getText().toString().trim(); + link = etLink.getText().toString().trim(); + + if (name.length() < 2) { + flag = 1; + tiName.setErrorEnabled(true); + tiName.setError("Name Not Proper"); + } else { + tiName.setErrorEnabled(false); + } + + if (description.length() < 2) { + flag = 1; + tiDescription.setErrorEnabled(true); + tiDescription.setError("Description Not Proper"); + } else { + tiDescription.setErrorEnabled(false); + } + + if (members.length() == 0) { + flag = 1; + tiMembers.setErrorEnabled(true); + tiMembers.setError("Specify Members"); + } else { + tiMembers.setErrorEnabled(false); + } + + if (!link.contains("http")) { + flag = 1; + tiLink.setErrorEnabled(true); + tiLink.setError("Link Not Proper"); + } else { + tiLink.setErrorEnabled(false); + } + + return flag != 1; + } + + private void post_CreateGroup() { + + Map params = new HashMap<>(); + params.put("VolunteerID", String.valueOf(db.userDao().getVolunteerID())); + params.put("AreaID", db.userDao().getAreaID()); + params.put("Name", name); + params.put("Description", description); + params.put("Members", members); + params.put("link", link); + params.put("isCompleted", "0"); + params.put("latitude", db.userDao().getLatitude()); + params.put("longitude", db.userDao().getLongitude()); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CREATE_GROUP, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCreateGroup(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Authentication"); + requestQueue.add(jsonObjReq); + } + + private void parseCreateGroup(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + Intent intent = new Intent(CreateGroup.this, SuccessScreen.class); + startActivity(intent); + finish(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Groups/Groups.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Groups/Groups.java new file mode 100644 index 00000000..3b85615d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Groups/Groups.java @@ -0,0 +1,459 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Groups; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.GroupDetailsModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_GROUP_DETAILS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Utilities.UTCToIST; + +public class Groups extends AppCompatActivity { + + private MaterialButton btCreateGroup; + private MaterialSpinner spState, spCity, spArea; + private RecyclerView recyclerView; + + private RequestQueue requestQueue; + private AppDatabase db; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private String areaID; + + private final List mRecyclerViewItems = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_groups); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + setAdapters(); + setSpinnerListeners(); + setRecyclerView(); + + post_state(); + post_city("1"); + post_area("1"); + + post_groupDetails(); + } + + private void init() { + btCreateGroup = findViewById(R.id.btCreateGroup); + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + recyclerView = findViewById(R.id.recyclerView); + + requestQueue = Volley.newRequestQueue(getApplicationContext(),null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + + mRecyclerViewItems.clear(); + + areaID = db.userDao().getAreaID(); + } + + private void setOnClicks() { + btCreateGroup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(Groups.this,CreateGroup.class); + startActivity(intent); + } + }); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + post_groupDetails(); + } + }); + } + + private void setRecyclerView() { + recyclerView.setHasFixedSize(true); + recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1,1)); + GroupsAdapter groupsAdapter = new GroupsAdapter(mRecyclerViewItems); + recyclerView.setAdapter(groupsAdapter); + } + + private void post_state() { + + states.clear(); + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i params = new HashMap<>(); + params.put("StateID",stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i 0) { + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + Map params = new HashMap<>(); + params.put("CityID",cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i params = new HashMap<>(); + params.put("AreaID",areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_GROUP_DETAILS, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseGroups(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("GroupDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseGroups(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i { + + private final List mRecyclerViewItems_adapter; + + GroupsAdapter(List mRecyclerViewItem){ + this.mRecyclerViewItems_adapter = mRecyclerViewItem; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view; + view = LayoutInflater.from(Groups.this).inflate(R.layout.custom_group_details, parent, false); + return new GroupViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { + if (holder instanceof GroupViewHolder) { + GroupViewHolder groupViewHolder = (GroupViewHolder) holder; + final GroupDetailsModel groupDetailsModel = (GroupDetailsModel) mRecyclerViewItems_adapter.get(position); + + String members = "Members - " + groupDetailsModel.getMembers(); + String distance = "Distance - " + groupDetailsModel.getDistance(); + + groupViewHolder.tvName.setText(groupDetailsModel.getName()); + groupViewHolder.tvDescription.setText(groupDetailsModel.getDescription()); + groupViewHolder.tvDate.setText(groupDetailsModel.getCreatedOn()); + groupViewHolder.tvDistance.setText(distance); + groupViewHolder.tvMembers.setText(members); + + groupViewHolder.btOpen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(groupDetailsModel.getLink())); + startActivity(i); + } + }); + } + } + + private class GroupViewHolder extends RecyclerView.ViewHolder { + + private TextView tvName, tvDescription, tvDate, tvDistance, tvMembers; + private MaterialButton btOpen; + + GroupViewHolder(View itemView) { + super(itemView); + tvName = itemView.findViewById(R.id.tvName); + tvDescription = itemView.findViewById(R.id.tvDescription); + tvDate = itemView.findViewById(R.id.tvDate); + tvDistance = itemView.findViewById(R.id.tvDistance); + tvMembers = itemView.findViewById(R.id.tvMembers); + btOpen = itemView.findViewById(R.id.btOpen); + } + } + + @Override + public int getItemCount() { + return mRecyclerViewItems_adapter.size(); + } + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/HomeScreen.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/HomeScreen.java new file mode 100644 index 00000000..d6145a5f --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/HomeScreen.java @@ -0,0 +1,295 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentSender; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.location.Location; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; + +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Authentication.Authentication; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Organization.OrganizationAuth; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Organization.OrganizationDashboard; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.user_table; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.gms.common.api.ApiException; +import com.google.android.gms.common.api.ResolvableApiException; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.location.LocationSettingsRequest; +import com.google.android.gms.location.LocationSettingsResponse; +import com.google.android.gms.location.LocationSettingsStatusCodes; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.android.gms.tasks.Task; +import com.google.android.material.button.MaterialButton; + +import java.util.Locale; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Permissions.checkCoarseLocation; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Permissions.checkFineLocation; + +public class HomeScreen extends AppCompatActivity { + + private MaterialButton btV, btOrganization; + private ImageView ivLanguage; + private ImageView ivTwitter; + + private SharedPreferences sharedPreferences; + + private AppDatabase db; + + private FusedLocationProviderClient mFusedLocationClient; + private Double latitude, longitude; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home_screen); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + checkPermissions(); + } + + private void init() { + btV = findViewById(R.id.btV); + btOrganization = findViewById(R.id.btOrganization); + ivLanguage = findViewById(R.id.ivLanguage); + ivTwitter = findViewById(R.id.ivTwitter); + + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF, MODE_PRIVATE); + + if (sharedPreferences.getBoolean("firstTime", true)) { + sharedPreferences.edit().putBoolean("firstTime", false).apply(); + user_table user_table = new user_table(); + user_table.setUser_id(1); + user_table.setPhoneNo(""); + user_table.setVictim_id(0); + user_table.setVolunteer_id(0); + user_table.setLatitude(""); + user_table.setLongitude(""); + db.userDao().insertAll(user_table); + } + } + + private void setOnClicks() { + btV.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkPermissions()) { + if (sharedPreferences.getBoolean("user_auth", false)) { + Intent intent = new Intent(HomeScreen.this, MainActivity.class); + startActivity(intent); + } else { + Intent intent = new Intent(HomeScreen.this, Authentication.class); + startActivity(intent); + } + } + } + }); + + btOrganization.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkPermissions()) { + if (sharedPreferences.getBoolean("org_auth", false)) { + Intent intent = new Intent(HomeScreen.this, OrganizationDashboard.class); + startActivity(intent); + } else { + Intent intent = new Intent(HomeScreen.this, OrganizationAuth.class); + startActivity(intent); + } + } + } + }); + + ivLanguage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + changeLanguageDialog(); + } + }); + + ivTwitter.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(HomeScreen.this, TwitterView.class); + startActivity(intent); + } + }); + } + + private boolean checkPermissions() { + if (checkCoarseLocation(HomeScreen.this) && checkFineLocation(HomeScreen.this)) { + getLocation(); + checkGPS(); + return true; + } else { + return false; + } + } + + //Location + private void getLocation() { + mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + mFusedLocationClient.getLastLocation() + .addOnSuccessListener(this, new OnSuccessListener() { + @Override + public void onSuccess(Location location) { + // Got last known location. In some rare situations, this can be null. + if (location != null) { + // Logic to handle location object + latitude = location.getLatitude(); + longitude = location.getLongitude(); + if (db.userDao().getLatitude().equalsIgnoreCase("") || db.userDao().getLongitude().equalsIgnoreCase("")) { + db.userDao().updateLatitude(String.valueOf(latitude)); + db.userDao().updateLongitude(String.valueOf(longitude)); + } + } + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case LocationRequest.PRIORITY_HIGH_ACCURACY: + switch (resultCode) { + case Activity.RESULT_OK: + // All required changes were successfully made + Log.d("LynkHack", "GPS Enabled by user"); + break; + case Activity.RESULT_CANCELED: + // The user was asked to change settings, but chose not to + Log.d("LynkHack", "User rejected GPS request"); + showGPSDialog(); + break; + default: + break; + } + break; + } + } + + private void showGPSDialog() { + new AlertDialog.Builder(HomeScreen.this) + .setTitle(getString(R.string.gps_title)) + .setMessage(getString(R.string.gps_description)) + .setCancelable(false) + .setPositiveButton(getString(R.string.okay), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + checkGPS(); + } + }) + .show(); + } + + private void checkGPS() { + LocationRequest locationRequest = LocationRequest.create(); + locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); + LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() + .addLocationRequest(locationRequest); + + Task result = + LocationServices.getSettingsClient(this).checkLocationSettings(builder.build()); + + result.addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + try { + LocationSettingsResponse response = task.getResult(ApiException.class); + // All location settings are satisfied. The client can initialize location + // requests here. + } catch (ApiException exception) { + switch (exception.getStatusCode()) { + case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: + // Location settings are not satisfied. But could be fixed by showing the + // user a dialog. + try { + // Cast to a resolvable exception. + ResolvableApiException resolvable = (ResolvableApiException) exception; + // Show the dialog by calling startResolutionForResult(), + // and check the result in onActivityResult(). + resolvable.startResolutionForResult( + HomeScreen.this, + LocationRequest.PRIORITY_HIGH_ACCURACY); + } catch (IntentSender.SendIntentException e) { + // Ignore the error. + } catch (ClassCastException e) { + // Ignore, should be an impossible error. + } + break; + case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: + // Location settings are not satisfied. However, we have no way to fix the + // settings so we won't show the dialog. + break; + } + } + } + }); + } + + private void changeLanguageDialog() { + new AlertDialog.Builder(HomeScreen.this) + .setTitle(getString(R.string.language_header)) + .setMessage(getString(R.string.language_description)) + .setCancelable(false) + .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + setLocale(); + } + }) + .setNegativeButton(getString(R.string.cancel), null) + .show(); + } + + public void setLocale() { + + Locale locale; + + int language_type = sharedPreferences.getInt("language_type", 1); + if (language_type == 1) { + locale = new Locale("hi"); + sharedPreferences.edit().putInt("language_type", 0).apply(); + } else { + locale = new Locale("en"); + sharedPreferences.edit().putInt("language_type", 1).apply(); + } + + Locale.setDefault(locale); + Configuration config = new Configuration(); + config.locale = locale; + getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); + + finish(); + startActivity(getIntent()); + + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/MainActivity.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/MainActivity.java new file mode 100644 index 00000000..cc0bf68a --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/MainActivity.java @@ -0,0 +1,266 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentSender; +import android.content.SharedPreferences; +import android.location.Location; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; + +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Authentication.UpdateProfile; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Victim.VictimDashboard; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer.VolunteerDashboard; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.user_table; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.gms.common.api.ApiException; +import com.google.android.gms.common.api.ResolvableApiException; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.location.LocationSettingsRequest; +import com.google.android.gms.location.LocationSettingsResponse; +import com.google.android.gms.location.LocationSettingsStatusCodes; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.android.gms.tasks.Task; +import com.google.android.material.button.MaterialButton; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Permissions.checkCoarseLocation; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Permissions.checkFineLocation; + +public class MainActivity extends AppCompatActivity { + + private MaterialButton btVolunteer; + private MaterialButton btVictim; + private MaterialButton btVolunteer1, btVictim1; + private ImageView ivSettings; + + private AppDatabase db; + private SharedPreferences sharedPreferences; + + //Location + private FusedLocationProviderClient mFusedLocationClient; + private Double latitude, longitude; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + checkPermissions(); + } + + private void init() { + btVictim = findViewById(R.id.btVictim); + btVolunteer = findViewById(R.id.btVolunteer); + btVictim1 = findViewById(R.id.btVictim1); + btVolunteer1 = findViewById(R.id.btVolunteer1); + ivSettings = findViewById(R.id.ivSettings); + + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF,MODE_PRIVATE); + + if (sharedPreferences.getBoolean("firstTime",true)) { + sharedPreferences.edit().putBoolean("firstTime",false).apply(); + user_table user_table = new user_table(); + user_table.setUser_id(1); + user_table.setPhoneNo(""); + user_table.setVictim_id(0); + user_table.setVolunteer_id(0); + user_table.setLatitude(""); + user_table.setLongitude(""); + db.userDao().insertAll(user_table); + } + } + + private void setOnClicks() { + + btVictim.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkPermissions()) { + checkVictim(); + } + } + }); + + btVolunteer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkPermissions()) { + checkVolunteer(); + } + } + }); + + btVictim1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkPermissions()) { + checkVictim(); + } + } + }); + + btVolunteer1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (checkPermissions()) { + checkVolunteer(); + } + } + }); + + ivSettings.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, UpdateProfile.class); + startActivity(intent); + } + }); + } + + private boolean checkPermissions() { + if (checkCoarseLocation(MainActivity.this) && checkFineLocation(MainActivity.this)) { + getLocation(); + checkGPS(); + return true; + } else { + return false; + } + } + + private void checkGPS() { + LocationRequest locationRequest = LocationRequest.create(); + locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); + LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() + .addLocationRequest(locationRequest); + + Task result = + LocationServices.getSettingsClient(this).checkLocationSettings(builder.build()); + + result.addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + try { + LocationSettingsResponse response = task.getResult(ApiException.class); + // All location settings are satisfied. The client can initialize location + // requests here. + } catch (ApiException exception) { + switch (exception.getStatusCode()) { + case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: + // Location settings are not satisfied. But could be fixed by showing the + // user a dialog. + try { + // Cast to a resolvable exception. + ResolvableApiException resolvable = (ResolvableApiException) exception; + // Show the dialog by calling startResolutionForResult(), + // and check the result in onActivityResult(). + resolvable.startResolutionForResult( + MainActivity.this, + LocationRequest.PRIORITY_HIGH_ACCURACY); + } catch (IntentSender.SendIntentException e) { + // Ignore the error. + } catch (ClassCastException e) { + // Ignore, should be an impossible error. + } + break; + case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: + // Location settings are not satisfied. However, we have no way to fix the + // settings so we won't show the dialog. + break; + } + } + } + }); + } + + private void checkVolunteer() { + Intent intent = new Intent(MainActivity.this, VolunteerDashboard.class); + startActivity(intent); + } + + private void checkVictim() { + Intent intent = new Intent(MainActivity.this, VictimDashboard.class); + startActivity(intent); + } + + //Location + private void getLocation() { + mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + mFusedLocationClient.getLastLocation() + .addOnSuccessListener(this, new OnSuccessListener() { + @Override + public void onSuccess(Location location) { + // Got last known location. In some rare situations, this can be null. + if (location != null) { + // Logic to handle location object + latitude = location.getLatitude(); + longitude = location.getLongitude(); + if (db.userDao().getLatitude().equalsIgnoreCase("") || db.userDao().getLongitude().equalsIgnoreCase("")) { + db.userDao().updateLatitude(String.valueOf(latitude)); + db.userDao().updateLongitude(String.valueOf(longitude)); + } + } + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case LocationRequest.PRIORITY_HIGH_ACCURACY: + switch (resultCode) { + case Activity.RESULT_OK: + // All required changes were successfully made + Log.d("LynkHack", "GPS Enabled by user"); + break; + case Activity.RESULT_CANCELED: + // The user was asked to change settings, but chose not to + Log.d("LynkHack", "User rejected GPS request"); + showGPSDialog(); + break; + default: + break; + } + break; + } + } + + private void showGPSDialog() { + new AlertDialog.Builder(MainActivity.this) + .setTitle(getString(R.string.gps_title)) + .setMessage(getString(R.string.gps_description)) + .setCancelable(false) + .setPositiveButton(getString(R.string.okay), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + checkGPS(); + } + }) + .show(); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationAuth.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationAuth.java new file mode 100644 index 00000000..8655f28b --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationAuth.java @@ -0,0 +1,146 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Organization; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.MainActivity; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AUTH; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.ORGANIZATION_AUTH; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; + +public class OrganizationAuth extends AppCompatActivity { + + private TextInputLayout tiPhoneNumber; + private EditText etPhoneNumber; + private MaterialButton btEnter; + private String phoneNumber; + + private RequestQueue requestQueue; + private AppDatabase db; + private SharedPreferences sharedPreferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_authentication); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + } + + private void init() { + tiPhoneNumber = findViewById(R.id.tiPhoneNumber); + etPhoneNumber = findViewById(R.id.etPhoneNumber); + btEnter = findViewById(R.id.btEnter); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF, MODE_PRIVATE); + } + + private void setOnClicks() { + btEnter.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + phoneNumber = etPhoneNumber.getText().toString().trim(); + if (phoneNumber.length() != 10) { + tiPhoneNumber.setErrorEnabled(true); + tiPhoneNumber.setError("Phone Number should have 10 digits"); + } else { + tiPhoneNumber.setErrorEnabled(false); + post_Phone(); + } + } + }); + } + + private void post_Phone() { + + Map params = new HashMap<>(); + params.put("phoneNo", phoneNumber); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + ORGANIZATION_AUTH, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseAuth(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Auth"); + requestQueue.add(jsonObjReq); + } + + private void parseAuth(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + db.userDao().updatePhoneNo(phoneNumber); + if (jsonObject.getBoolean("isNewUser")) { + openAuthDetails(); + } else { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + JSONObject jsonObject1 = jsonArray.getJSONObject(0); + db.userDao().updateOrgID(jsonObject1.getInt("OrgID")); + + openDashboard(); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void openAuthDetails() { + Intent intent = new Intent(OrganizationAuth.this, OrganizationAuthDetails.class); + startActivity(intent); + finish(); + } + + private void openDashboard() { + sharedPreferences.edit().putBoolean("org_auth", true).apply(); + Intent intent = new Intent(OrganizationAuth.this, OrganizationDashboard.class); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationAuthDetails.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationAuthDetails.java new file mode 100644 index 00000000..68c57125 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationAuthDetails.java @@ -0,0 +1,181 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Organization; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.ORGANIZATION_AUTH_DATA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHAREDPREF; + +public class OrganizationAuthDetails extends AppCompatActivity { + + private TextInputLayout tiName, tiDescription, tiPhone, tiGST; + private EditText etName, etDescription, etPhone, etGST; + private MaterialButton btEnter; + + private String name, description, phone, GST; + + private RequestQueue requestQueue; + private AppDatabase db; + private SharedPreferences sharedPreferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_organization_auth_details); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + } + + private void init() { + tiName = findViewById(R.id.tiName); + tiDescription = findViewById(R.id.tiDescription); + tiPhone = findViewById(R.id.tiPhone); + tiGST = findViewById(R.id.tiGST); + etGST = findViewById(R.id.etGST); + etPhone = findViewById(R.id.etPhone); + etDescription = findViewById(R.id.etDescription); + etName = findViewById(R.id.etName); + btEnter = findViewById(R.id.btEnter); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + sharedPreferences = getSharedPreferences(SHAREDPREF, MODE_PRIVATE); + } + + private void setOnClicks() { + btEnter.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateData()) { + post_authDetails(); + } + } + }); + } + + private boolean validateData() { + int flag = 0; + + name = etName.getText().toString().trim(); + description = etDescription.getText().toString().trim(); + phone = etPhone.getText().toString().trim(); + GST = etGST.getText().toString().trim(); + + if (name == null || name.length() < 3) { + tiName.setErrorEnabled(true); + tiName.setError("Name Not Proper"); + flag = 1; + } else { + tiName.setErrorEnabled(false); + } + + if (description == null || description.length() < 3) { + tiDescription.setErrorEnabled(true); + tiDescription.setError("Description Not Proper"); + flag = 1; + } else { + tiDescription.setErrorEnabled(false); + } + + if (phone == null || phone.length() != 10) { + tiPhone.setErrorEnabled(true); + tiPhone.setError("Phone Not Proper"); + flag = 1; + } else { + tiPhone.setErrorEnabled(false); + } + + if (GST == null || GST.length() < 3) { + tiGST.setErrorEnabled(true); + tiGST.setError("GST IN Not Proper"); + flag = 1; + } else { + tiGST.setErrorEnabled(false); + } + + return flag != 1; + } + + private void post_authDetails() { + + Map params = new HashMap<>(); + params.put("phoneNo", phone); + params.put("Name", name); + params.put("GSTIn", GST); + params.put("Description", description); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + ORGANIZATION_AUTH_DATA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResponse(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("AuthenticationDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseResponse(JSONObject jsonObject) { + + try { + if (jsonObject.getBoolean("isSuccess")) { + sharedPreferences.edit().putBoolean("org_auth", true).apply(); + JSONObject jsonObject1 = jsonObject.getJSONObject("data"); + db.userDao().updateOrgID(jsonObject1.getInt("insertId")); + + openDashboard(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void openDashboard() { + Intent intent = new Intent(OrganizationAuthDetails.this, OrganizationDashboard.class); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationDashboard.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationDashboard.java new file mode 100644 index 00000000..73d4801d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/OrganizationDashboard.java @@ -0,0 +1,77 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Organization; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer.VictimHelpMap; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; + +public class OrganizationDashboard extends AppCompatActivity { + + private MaterialButton btLive, btFunds; + private MaterialButton btLive1, btFunds1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_organization_dashboard); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + } + + private void init() { + btLive = findViewById(R.id.btLive); + btFunds = findViewById(R.id.btFunds); + btLive1 = findViewById(R.id.btLive1); + btFunds1 = findViewById(R.id.btFunds1); + } + + private void setOnClicks() { + btLive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(OrganizationDashboard.this, VictimHelpMap.class); + startActivity(intent); + } + }); + + btFunds.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(OrganizationDashboard.this, RaiseFunds.class); + startActivity(intent); + } + }); + + btLive1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(OrganizationDashboard.this, VictimHelpMap.class); + startActivity(intent); + } + }); + + btFunds1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(OrganizationDashboard.this, RaiseFunds.class); + startActivity(intent); + } + }); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/RaiseFunds.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/RaiseFunds.java new file mode 100644 index 00000000..deab66e4 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Organization/RaiseFunds.java @@ -0,0 +1,163 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Organization; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.SuccessScreen; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.ORGANIZATION_FUND_CAMPAIGN; + +public class RaiseFunds extends AppCompatActivity { + + private TextInputLayout tiName, tiDescription, tiLink; + private EditText etName, etDescription, etSponsor, etLink; + private MaterialButton btCreate; + + private RequestQueue requestQueue; + private AppDatabase db; + + private String name, description, sponsor, link; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_raise_funds); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + } + + private void init() { + tiName = findViewById(R.id.tiName); + tiDescription = findViewById(R.id.tiDescription); + tiLink = findViewById(R.id.tiLink); + etName = findViewById(R.id.etName); + etDescription = findViewById(R.id.etDescription); + etSponsor = findViewById(R.id.etSponsor); + etLink = findViewById(R.id.etLink); + btCreate = findViewById(R.id.btCreate); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + } + + private void setOnClicks() { + btCreate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateDetails()) { + post_createCampaign(); + } + } + }); + } + + private boolean validateDetails() { + int flag = 0; + name = etName.getText().toString().trim(); + description = etDescription.getText().toString().trim(); + sponsor = etSponsor.getText().toString().trim(); + link = etLink.getText().toString().trim(); + + if (name.length() < 2) { + flag = 1; + tiName.setErrorEnabled(true); + tiName.setError("Name Not Proper"); + } else { + tiName.setErrorEnabled(false); + } + + if (description.length() < 2) { + flag = 1; + tiDescription.setErrorEnabled(true); + tiDescription.setError("Description Not Proper"); + } else { + tiDescription.setErrorEnabled(false); + } + + if (sponsor == null) { + sponsor = ""; + } + + if (!link.contains("http")) { + flag = 1; + tiLink.setErrorEnabled(true); + tiLink.setError("Link Not Proper"); + } else { + tiLink.setErrorEnabled(false); + } + + return flag != 1; + } + + private void post_createCampaign() { + + Map params = new HashMap<>(); + params.put("OrgID", String.valueOf(db.userDao().getOrgID())); + params.put("Name", name); + params.put("Description", description); + params.put("Sponsor", sponsor); + params.put("Link", link); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + ORGANIZATION_FUND_CAMPAIGN, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCreateGroup(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("RaiseFunds"); + requestQueue.add(jsonObjReq); + } + + private void parseCreateGroup(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + Intent intent = new Intent(RaiseFunds.this, SuccessScreen.class); + startActivity(intent); + finish(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/SuccessScreen.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/SuccessScreen.java new file mode 100644 index 00000000..a347e41c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/SuccessScreen.java @@ -0,0 +1,42 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; + +import com.airbnb.lottie.LottieAnimationView; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; + +public class SuccessScreen extends AppCompatActivity { + + private LottieAnimationView lottieAnimationCorrect; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_success_screen); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + playAnimation(); + } + + private void init() { + lottieAnimationCorrect = findViewById(R.id.lottieAnimationCorrect); + } + + private void playAnimation() { + lottieAnimationCorrect.bringToFront(); + lottieAnimationCorrect.setAnimation("correct.json"); + lottieAnimationCorrect.playAnimation(); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/TwitterView.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/TwitterView.java new file mode 100644 index 00000000..c0697ed1 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/TwitterView.java @@ -0,0 +1,51 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; + +public class TwitterView extends AppCompatActivity { + + private WebView mWebView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_twitter_view); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setWebView(); + } + + private void init() { + mWebView = findViewById(R.id.webview); + } + + private void setWebView() { + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.getSettings().setDomStorageEnabled(true); + mWebView.getSettings().setSaveFormData(true); + mWebView.getSettings().setAllowContentAccess(true); + mWebView.getSettings().setAllowFileAccess(true); + mWebView.getSettings().setSupportZoom(true); + mWebView.setWebViewClient(new WebViewClient()); + mWebView.setClickable(true); + mWebView.setWebChromeClient(new WebChromeClient()); + mWebView.loadUrl("https://mobile.twitter.com/hashtag/dwarsoftlynk?lang=en"); + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Victim/VictimDashboard.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Victim/VictimDashboard.java new file mode 100644 index 00000000..ca60af08 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Victim/VictimDashboard.java @@ -0,0 +1,559 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Victim; + +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.Typeface; +import android.os.Bundle; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.VictimsHelpModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.VolunteerHelpModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.maps.CameraUpdate; +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.BitmapDescriptor; +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; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AUTH_KEY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_VOLUNTEER_DETAILS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.TEXT_SMS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.UPDATE_VRMAP_ISCOMPLETE; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Utilities.UTCToIST; + +public class VictimDashboard extends AppCompatActivity implements OnMapReadyCallback { + + private MaterialSpinner spState, spCity, spArea; + private MaterialButton btHelp; + + private RequestQueue requestQueue; + private AppDatabase db; + + private String areaID; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private final List itemsList = new ArrayList<>(); + + private GoogleMap mMap; + private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; + + private String phoneNumber; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_victim_dashboard); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + initMaps(); + setAdapters(); + setSpinnerListeners(); + setOnClicks(); + + post_state(); + post_city("1"); + post_area("1"); + } + + private void init() { + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + btHelp = findViewById(R.id.btHelp); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + + spState.setHint("Select State"); + spCity.setHint("Select City"); + spArea.setHint("Select Area"); + + states.clear(); + city.clear(); + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + areaID = db.userDao().getAreaID(); + } + + private void initMaps() { + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map); + assert mapFragment != null; + mapFragment.getMapAsync(this); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + post_getVolunteerDetails(); + } + }); + } + + private void setOnClicks() { + btHelp.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(VictimDashboard.this, VictimHelpResource.class); + startActivity(intent); + } + }); + } + + private void initMapDetails() { + + mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { + + @Override + public View getInfoWindow(Marker arg0) { + return null; + } + + @Override + public View getInfoContents(Marker marker) { + + LinearLayout info = new LinearLayout(getApplicationContext()); + info.setOrientation(LinearLayout.VERTICAL); + + TextView title = new TextView(getApplicationContext()); + title.setTextColor(Color.BLACK); + title.setGravity(Gravity.CENTER); + title.setTypeface(null, Typeface.BOLD); + title.setText(marker.getTitle()); + + TextView snippet = new TextView(getApplicationContext()); + snippet.setTextColor(Color.GRAY); + snippet.setText(marker.getSnippet()); + + info.addView(title); + info.addView(snippet); + + return info; + } + }); + + mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { + @Override + public void onInfoWindowClick(Marker marker) { + int VHMapID = (Integer) marker.getTag(); + + for (int i = 0; i < itemsList.size(); i++) { + VolunteerHelpModel volunteerHelpModel = (VolunteerHelpModel) itemsList.get(i); + if (volunteerHelpModel.getVRMapID() == VHMapID) { + phoneNumber = volunteerHelpModel.getPhoneNo(); + break; + } + } + showCompleteDialog(VHMapID); + } + }); + } + + private void sendSMS() { + //Adding the method to the queue by calling the method getDataFromServer + requestQueue.add(getData()); + } + + private JsonObjectRequest getData() { + + String message = "Hi, Someone has accepted your help request. Contact - " + db.userDao().getPhoneNumber(); + + String url = TEXT_SMS + phoneNumber + AUTH_KEY + message; + + final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, + new com.android.volley.Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.message_sent), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.message_sent), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + return jsonObjectRequest; + } + + private void showCompleteDialog(final int VRMapID) { + new AlertDialog.Builder(VictimDashboard.this) + .setTitle(getString(R.string.complete_header1)) + .setMessage(getString(R.string.complete_description1)) + .setCancelable(false) + .setPositiveButton(getString(R.string.accept), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + sendSMS(); +// post_updateIsComplete(String.valueOf(VRMapID)); + } + }) + .setNegativeButton(getString(R.string.cancel), null) + .show(); + } + + private void post_state() { + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + states.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + states.add(jsonObject1.getString("StateID")); + spinnerAdapter_state.add(jsonObject1.getString("StateName")); + } + + spState.setAdapter(spinnerAdapter_state); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_city(String stateID) { + + Map params = new HashMap<>(); + params.put("StateID", stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + city.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + city.add(jsonObject1.getString("CityID")); + spinnerAdapter_city.add(jsonObject1.getString("CityName")); + } + if (city.size() > 0) { + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + Map params = new HashMap<>(); + params.put("CityID", cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + area.add(jsonObject1.getString("AreaID")); + spinnerAdapter_area.add(jsonObject1.getString("AName")); + } + + spArea.setAdapter(spinnerAdapter_area); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_getVolunteerDetails() { + + itemsList.clear(); + + Map params = new HashMap<>(); + params.put("AreaID", areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_VOLUNTEER_DETAILS, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseVolunteer(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("VictimDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseVolunteer(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + VolunteerHelpModel volunteerHelpModel = new VolunteerHelpModel(); + volunteerHelpModel.setVRMapID(jsonObject1.getInt("VRMapID")); + volunteerHelpModel.setVolunteerID(jsonObject1.getInt("VolunteerID")); + volunteerHelpModel.setHelpID(jsonObject1.getInt("HelpID")); + volunteerHelpModel.setAreaID(jsonObject1.getInt("AreaID")); + volunteerHelpModel.setDescription(jsonObject1.getString("Description")); + volunteerHelpModel.setLatitude(jsonObject1.getString("Latitude")); + volunteerHelpModel.setLongitude(jsonObject1.getString("Longitude")); + volunteerHelpModel.setPhoneNo(jsonObject1.getString("PhoneNo")); + volunteerHelpModel.setCreatedOn(jsonObject1.getString("createdOn")); + volunteerHelpModel.setUpdatedOn(jsonObject1.getString("updatedOn")); + itemsList.add(volunteerHelpModel); + } + setMapMarkers(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void setMapMarkers() { + for (int i = 0; i < itemsList.size(); i++) { + VolunteerHelpModel volunteerHelpModel = (VolunteerHelpModel) itemsList.get(i); + + int helpID = volunteerHelpModel.getHelpID(); + String helpName; + if (helpID == 1) { + helpName = "Food"; + } else if (helpID == 2) { + helpName = "Clothes"; + } else { + helpName = "Shelter"; + } + BitmapDescriptor bitmapDescriptor = null; + if (helpName.equalsIgnoreCase("food")) { + bitmapDescriptor = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED); + } else if (helpName.equalsIgnoreCase("clothes")) { + bitmapDescriptor = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE); + } else { + bitmapDescriptor = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN); + } + + LatLng latlng = new LatLng(Double.parseDouble(volunteerHelpModel.getLatitude()), Double.parseDouble(volunteerHelpModel.getLongitude())); + Marker marker = mMap.addMarker(new MarkerOptions() + .title("Available - " + helpName) + .snippet( + "Description - " + volunteerHelpModel.getDescription() + "\n" + + "Date - " + UTCToIST(volunteerHelpModel.getCreatedOn()) + "\n" + + "Phone No - " + volunteerHelpModel.getPhoneNo() + ) + .position(latlng) + .icon(bitmapDescriptor) + ); + marker.setTag(volunteerHelpModel.getVRMapID()); + } + } + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + setMaps(); + initMapDetails(); + post_getVolunteerDetails(); + } + + private void setMaps() { + mMap.setMyLocationEnabled(true); + CameraUpdate center = CameraUpdateFactory.newLatLng( + new LatLng(Double.parseDouble(db.userDao().getLatitude()), + Double.parseDouble(db.userDao().getLongitude()) + ) + ); + CameraUpdate zoom = CameraUpdateFactory.zoomTo(15); + mMap.moveCamera(center); + mMap.animateCamera(zoom); + } + + @Override + protected void onResume() { + super.onResume(); + + if (!checkPlayServices()) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "You need to install Google Play Services to use the App properly", Snackbar.LENGTH_SHORT); + snackbar.show(); + } + } + + private boolean checkPlayServices() { + GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); + int resultCode = apiAvailability.isGooglePlayServicesAvailable(this); + + if (resultCode != ConnectionResult.SUCCESS) { + if (apiAvailability.isUserResolvableError(resultCode)) { + apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST); + } else { + finish(); + } + return false; + } + return true; + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Victim/VictimHelpResource.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Victim/VictimHelpResource.java new file mode 100644 index 00000000..c18342af --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Victim/VictimHelpResource.java @@ -0,0 +1,237 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Victim; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.SuccessScreen; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_HELP_TYPES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.REQUEST_HELP; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHARE_RESOURCES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; + +public class VictimHelpResource extends AppCompatActivity { + + private TextInputLayout tiDescription; + private EditText etDescription, etMembers, etMale, etFemale, etChildren; + private MaterialSpinner spHelp; + private MaterialButton btRequest; + + private String description, members, male, female, children; + private String helpID = "1"; + private ArrayAdapter spinnerAdapter_help; + private ArrayList helpIDs = new ArrayList<>(); + + private RequestQueue requestQueue; + private AppDatabase db; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_victim_help_resource); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + setAdapters(); + setSpinnerListeners(); + + post_helpTypes(); + } + + private void init() { + tiDescription = findViewById(R.id.tiDescription); + etDescription = findViewById(R.id.etDescription); + etMembers = findViewById(R.id.etMembers); + etMale = findViewById(R.id.etMale); + etFemale = findViewById(R.id.etFemale); + etChildren = findViewById(R.id.etChildren); + spHelp = findViewById(R.id.spHelp); + btRequest = findViewById(R.id.btRequest); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + } + + private void setOnClicks() { + btRequest.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateData()) { + post_requestHelp(); + } + } + }); + } + + private void setAdapters() { + spinnerAdapter_help = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_help.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void setSpinnerListeners() { + spHelp.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + helpID = helpIDs.get(position); + } + }); + } + + private boolean validateData() { + int flag = 0; + + description = etDescription.getText().toString().trim(); + members = etMembers.getText().toString().trim(); + male = etMale.getText().toString().trim(); + female = etFemale.getText().toString().trim(); + children = etChildren.getText().toString().trim(); + + if (description.length() > 3) { + tiDescription.setErrorEnabled(false); + } else { + tiDescription.setErrorEnabled(true); + tiDescription.setError("Description Not Proper"); + flag = 1; + } + + if (members == null || members.equalsIgnoreCase("")) { + flag = 1; + } + + if (male == null || male.equalsIgnoreCase("")) { + male = "0"; + } + + if (female == null || female.equalsIgnoreCase("")) { + female = "0"; + } + + if (children == null || children.equalsIgnoreCase("")) { + children = "0"; + } + + return flag != 1; + } + + private void post_helpTypes() { + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_HELP_TYPES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseHelpTypes(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("HelpTypes"); + requestQueue.add(jsonObjReq); + } + + private void parseHelpTypes(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + helpIDs.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + helpIDs.add(jsonObject1.getString("HelpID")); + spinnerAdapter_help.add(jsonObject1.getString("HName")); + } + spHelp.setAdapter(spinnerAdapter_help); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_requestHelp() { + + Map params = new HashMap<>(); + params.put("VictimID", String.valueOf(db.userDao().getVictimID())); + params.put("HelpID", helpID); + params.put("AreaID", db.userDao().getAreaID()); + params.put("PhoneNo", db.userDao().getPhoneNumber()); + params.put("latitude", db.userDao().getLatitude()); + params.put("longitude", db.userDao().getLongitude()); + params.put("Description", description); + params.put("Members", members); + params.put("Male", male); + params.put("Female", female); + params.put("Children", children); + params.put("isCompleted", "0"); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + REQUEST_HELP, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResources(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("RequestHelp"); + requestQueue.add(jsonObjReq); + } + + private void parseResources(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + Intent intent = new Intent(VictimHelpResource.this, SuccessScreen.class); + startActivity(intent); + finish(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/Contribute.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/Contribute.java new file mode 100644 index 00000000..d8920b9b --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/Contribute.java @@ -0,0 +1,408 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.FundsModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.GroupDetailsModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_GROUP_DETAILS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.ORGANIZATION_FUNDS_LIST; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Utilities.UTCToIST; + +public class Contribute extends AppCompatActivity { + + private MaterialSpinner spState, spCity, spArea; + private RecyclerView recyclerView; + + private RequestQueue requestQueue; + private AppDatabase db; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private String areaID; + + private final List mRecyclerViewItems = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_contribute); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setAdapters(); + setSpinnerListeners(); + setRecyclerView(); + + post_state(); + post_city("1"); + post_area("1"); + + post_fundsDetails(); + } + + private void init() { + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + recyclerView = findViewById(R.id.recyclerView); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + + mRecyclerViewItems.clear(); + + areaID = db.userDao().getAreaID(); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + post_fundsDetails(); + } + }); + } + + private void setRecyclerView() { + recyclerView.setHasFixedSize(true); + recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, 1)); + ContributeAdapter contributeAdapter = new ContributeAdapter(mRecyclerViewItems); + recyclerView.setAdapter(contributeAdapter); + } + + private void post_state() { + + states.clear(); + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + states.add(jsonObject1.getString("StateID")); + spinnerAdapter_state.add(jsonObject1.getString("StateName")); + } + + spState.setAdapter(spinnerAdapter_state); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_city(String stateID) { + + city.clear(); + + Map params = new HashMap<>(); + params.put("StateID", stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + city.add(jsonObject1.getString("CityID")); + spinnerAdapter_city.add(jsonObject1.getString("CityName")); + } + if (city.size() > 0) { + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + Map params = new HashMap<>(); + params.put("CityID", cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + area.add(jsonObject1.getString("AreaID")); + spinnerAdapter_area.add(jsonObject1.getString("AName")); + } + + spArea.setAdapter(spinnerAdapter_area); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_fundsDetails() { + + Map params = new HashMap<>(); + params.put("AreaID", areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + ORGANIZATION_FUNDS_LIST, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseFundsList(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("FundDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseFundsList(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + addData(jsonObject1); + } + setRecyclerView(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void addData(JSONObject jsonObject1) { + FundsModel fundsModel = new FundsModel(); + try { + fundsModel.setOFMapID(jsonObject1.getInt("OFMapID")); + fundsModel.setName(jsonObject1.getString("Name")); + fundsModel.setDescription(jsonObject1.getString("Description")); + fundsModel.setSponsor(jsonObject1.getString("Sponsor")); + fundsModel.setLink(jsonObject1.getString("Link")); + mRecyclerViewItems.add(fundsModel); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private class ContributeAdapter extends RecyclerView.Adapter { + + private final List mRecyclerViewItems_adapter; + + ContributeAdapter(List mRecyclerViewItem) { + this.mRecyclerViewItems_adapter = mRecyclerViewItem; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view; + view = LayoutInflater.from(Contribute.this).inflate(R.layout.custom_funds, parent, false); + return new GroupViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { + if (holder instanceof GroupViewHolder) { + GroupViewHolder groupViewHolder = (GroupViewHolder) holder; + final FundsModel fundsModel = (FundsModel) mRecyclerViewItems_adapter.get(position); + + String sponsor = "Sponsored By - " + fundsModel.getSponsor(); + + groupViewHolder.tvName.setText(fundsModel.getName()); + groupViewHolder.tvDescription.setText(fundsModel.getDescription()); + groupViewHolder.tvSponsor.setText(sponsor); + + groupViewHolder.btContribute.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(fundsModel.getLink())); + startActivity(i); + } + }); + } + } + + private class GroupViewHolder extends RecyclerView.ViewHolder { + + private TextView tvName, tvDescription, tvSponsor; + private MaterialButton btContribute; + + GroupViewHolder(View itemView) { + super(itemView); + tvName = itemView.findViewById(R.id.tvName); + tvDescription = itemView.findViewById(R.id.tvDescription); + tvSponsor = itemView.findViewById(R.id.tvSponsor); + btContribute = itemView.findViewById(R.id.btContribute); + } + } + + @Override + public int getItemCount() { + return mRecyclerViewItems_adapter.size(); + } + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/OrganizationsList.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/OrganizationsList.java new file mode 100644 index 00000000..fbbb9853 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/OrganizationsList.java @@ -0,0 +1,410 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.FundsModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.GroupDetailsModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.OrganizationListModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_GROUP_DETAILS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.ORGANIZATION_FUNDS_LIST; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.ORGANIZATION_LIST; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Utilities.UTCToIST; + +public class OrganizationsList extends AppCompatActivity { + + private MaterialSpinner spState, spCity, spArea; + private RecyclerView recyclerView; + + private RequestQueue requestQueue; + private AppDatabase db; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private String areaID; + + private final List mRecyclerViewItems = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_organizations_list); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setAdapters(); + setSpinnerListeners(); + setRecyclerView(); + + post_state(); + post_city("1"); + post_area("1"); + + post_organizationDetails(); + } + + private void init() { + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + recyclerView = findViewById(R.id.recyclerView); + + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + + mRecyclerViewItems.clear(); + + areaID = db.userDao().getAreaID(); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + post_organizationDetails(); + } + }); + } + + private void setRecyclerView() { + recyclerView.setHasFixedSize(true); + recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, 1)); + OrganizationListsAdapter organizationListsAdapter = new OrganizationListsAdapter(mRecyclerViewItems); + recyclerView.setAdapter(organizationListsAdapter); + } + + private void post_state() { + + states.clear(); + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + states.add(jsonObject1.getString("StateID")); + spinnerAdapter_state.add(jsonObject1.getString("StateName")); + } + + spState.setAdapter(spinnerAdapter_state); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_city(String stateID) { + + city.clear(); + + Map params = new HashMap<>(); + params.put("StateID", stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + city.add(jsonObject1.getString("CityID")); + spinnerAdapter_city.add(jsonObject1.getString("CityName")); + } + if (city.size() > 0) { + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + Map params = new HashMap<>(); + params.put("CityID", cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + area.add(jsonObject1.getString("AreaID")); + spinnerAdapter_area.add(jsonObject1.getString("AName")); + } + + spArea.setAdapter(spinnerAdapter_area); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_organizationDetails() { + + Map params = new HashMap<>(); + params.put("AreaID", areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + ORGANIZATION_LIST, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseOrganizationDetails(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("OrganizationDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseOrganizationDetails(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + addData(jsonObject1); + } + setRecyclerView(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void addData(JSONObject jsonObject1) { + OrganizationListModel organizationListModel = new OrganizationListModel(); + try { + organizationListModel.setOrgID(jsonObject1.getInt("OrgID")); + organizationListModel.setName(jsonObject1.getString("Name")); + organizationListModel.setDescription(jsonObject1.getString("Description")); + organizationListModel.setPhoneNo(jsonObject1.getString("PhoneNo")); + organizationListModel.setGSTIn(jsonObject1.getString("GSTIn")); + mRecyclerViewItems.add(organizationListModel); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private class OrganizationListsAdapter extends RecyclerView.Adapter { + + private final List mRecyclerViewItems_adapter; + + OrganizationListsAdapter(List mRecyclerViewItem) { + this.mRecyclerViewItems_adapter = mRecyclerViewItem; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view; + view = LayoutInflater.from(OrganizationsList.this).inflate(R.layout.custom_organization_list, parent, false); + return new GroupViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { + if (holder instanceof GroupViewHolder) { + GroupViewHolder groupViewHolder = (GroupViewHolder) holder; + final OrganizationListModel organizationListModel = (OrganizationListModel) mRecyclerViewItems_adapter.get(position); + + String GST = "GST - " + organizationListModel.getGSTIn(); + + groupViewHolder.tvName.setText(organizationListModel.getName()); + groupViewHolder.tvDescription.setText(organizationListModel.getDescription()); + groupViewHolder.tvGST.setText(GST); + + groupViewHolder.btContact.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(Intent.ACTION_DIAL); + intent.setData(Uri.parse("tel:" + organizationListModel.getPhoneNo())); + startActivity(intent); + } + }); + } + } + + private class GroupViewHolder extends RecyclerView.ViewHolder { + + private TextView tvName, tvDescription, tvGST; + private MaterialButton btContact; + + GroupViewHolder(View itemView) { + super(itemView); + tvName = itemView.findViewById(R.id.tvName); + tvDescription = itemView.findViewById(R.id.tvDescription); + tvGST = itemView.findViewById(R.id.tvGST); + btContact = itemView.findViewById(R.id.btContact); + } + } + + @Override + public int getItemCount() { + return mRecyclerViewItems_adapter.size(); + } + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/ShareResources.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/ShareResources.java new file mode 100644 index 00000000..19f70252 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/ShareResources.java @@ -0,0 +1,201 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.EditText; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.SuccessScreen; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_HELP_TYPES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.SHARE_RESOURCES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; + +public class ShareResources extends AppCompatActivity { + + private TextInputLayout tiDescription; + private EditText etDescription; + private MaterialSpinner spHelp; + private MaterialButton btShare; + + private String description; + private String helpID = "1"; + private ArrayAdapter spinnerAdapter_help; + private ArrayList helpIDs = new ArrayList<>(); + + private RequestQueue requestQueue; + private AppDatabase db; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_share_resources); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + setOnClicks(); + setAdapters(); + setSpinnerListeners(); + + post_helpTypes(); + } + + private void init() { + tiDescription = findViewById(R.id.tiDescription); + etDescription = findViewById(R.id.etDescription); + spHelp = findViewById(R.id.spHelp); + btShare = findViewById(R.id.btShare); + + requestQueue = Volley.newRequestQueue(getApplicationContext(),null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + } + + private void setOnClicks() { + btShare.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (validateData()) { + post_shareResources(); + } + } + }); + } + + private void setAdapters() { + spinnerAdapter_help = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_help.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void setSpinnerListeners() { + spHelp.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + helpID = helpIDs.get(position); + } + }); + } + + private boolean validateData() { + description = etDescription.getText().toString().trim(); + if (description.length() > 3) { + tiDescription.setErrorEnabled(false); + return true; + } else { + tiDescription.setErrorEnabled(true); + tiDescription.setError("Description Not Proper"); + return false; + } + } + + private void post_helpTypes() { + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_HELP_TYPES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseHelpTypes(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("HelpTypes"); + requestQueue.add(jsonObjReq); + } + + private void parseHelpTypes(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + helpIDs.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i params = new HashMap<>(); + params.put("Description",description); + params.put("VolunteerID",String.valueOf(db.userDao().getVolunteerID())); + params.put("HelpID",helpID); + params.put("AreaID", db.userDao().getAreaID()); + params.put("isCompleted","0"); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + SHARE_RESOURCES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResources(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Resources"); + requestQueue.add(jsonObjReq); + } + + private void parseResources(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + Intent intent = new Intent(ShareResources.this, SuccessScreen.class); + startActivity(intent); + finish(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/VictimHelpMap.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/VictimHelpMap.java new file mode 100644 index 00000000..eb38dca6 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Activity/Volunteer/VictimHelpMap.java @@ -0,0 +1,589 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Activity.Volunteer; + +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.Typeface; +import android.os.Bundle; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Database.AppDatabase; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.Models.VictimsHelpModel; +import com.dwarsoftgames.dwarsoft_lynk_hackathon.R; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.maps.CameraUpdate; +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.BitmapDescriptor; +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; +import com.google.android.material.snackbar.Snackbar; +import com.jaredrummler.materialspinner.MaterialSpinner; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AREA; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.AUTH_KEY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.CITY; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.GET_VICTIM_DETAILS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.STATES; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.TEXT_SMS; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Constants.UPDATE_VHMAP_ISCOMPLETE; +import static com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils.Utilities.UTCToIST; + +public class VictimHelpMap extends AppCompatActivity implements OnMapReadyCallback { + + private MaterialSpinner spState, spCity, spArea; + + private RequestQueue requestQueue; + private AppDatabase db; + + private String areaID; + + private ArrayAdapter spinnerAdapter_state; + private ArrayAdapter spinnerAdapter_city; + private ArrayAdapter spinnerAdapter_area; + + private ArrayList states = new ArrayList<>(); + private ArrayList city = new ArrayList<>(); + private ArrayList area = new ArrayList<>(); + + private final List itemsList = new ArrayList<>(); + + private GoogleMap mMap; + private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; + + private String phoneNumber; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_victim_help_map); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + initMaps(); + setAdapters(); + setSpinnerListeners(); + + post_state(); + post_city("1"); + post_area("1"); + } + + private void init() { + spState = findViewById(R.id.spState); + spCity = findViewById(R.id.spCity); + spArea = findViewById(R.id.spArea); + + requestQueue = Volley.newRequestQueue(getApplicationContext(),null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + + spState.setHint("Select State"); + spCity.setHint("Select City"); + spArea.setHint("Select Area"); + + states.clear(); + city.clear(); + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + + areaID = db.userDao().getAreaID(); + } + + private void initMaps() { + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map); + assert mapFragment != null; + mapFragment.getMapAsync(this); + } + + private void setAdapters() { + spinnerAdapter_state = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + } + + private void clearAdapters() { + spinnerAdapter_city = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_city.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spinnerAdapter_area = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1); + spinnerAdapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + + spCity.setAdapter(spinnerAdapter_city); + spArea.setAdapter(spinnerAdapter_area); + } + + private void setSpinnerListeners() { + spState.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + clearAdapters(); + post_city(states.get(position)); + } + }); + + spCity.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + post_area(city.get(position)); + } + }); + + spArea.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { + @Override + public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { + areaID = area.get(position); + post_getVictimDetails(); + } + }); + } + + private void initMapDetails() { + + mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { + + @Override + public View getInfoWindow(Marker arg0) { + return null; + } + + @Override + public View getInfoContents(Marker marker) { + + LinearLayout info = new LinearLayout(getApplicationContext()); + info.setOrientation(LinearLayout.VERTICAL); + + TextView title = new TextView(getApplicationContext()); + title.setTextColor(Color.BLACK); + title.setGravity(Gravity.CENTER); + title.setTypeface(null, Typeface.BOLD); + title.setText(marker.getTitle()); + + TextView snippet = new TextView(getApplicationContext()); + snippet.setTextColor(Color.GRAY); + snippet.setText(marker.getSnippet()); + + info.addView(title); + info.addView(snippet); + + return info; + } + }); + + mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { + @Override + public void onInfoWindowClick(Marker marker) { + + int VHMapID = (Integer) marker.getTag(); + + for (int i = 0; i < itemsList.size(); i++) { + VictimsHelpModel victimsHelpModel = (VictimsHelpModel) itemsList.get(i); + if (victimsHelpModel.getVHMapID() == VHMapID) { + phoneNumber = victimsHelpModel.getPhoneNo(); + break; + } + } + + showCompleteDialog(VHMapID); + } + }); + } + + private void showCompleteDialog(final int VHMapID) { + new AlertDialog.Builder(VictimHelpMap.this) + .setTitle(getString(R.string.complete_header)) + .setMessage(getString(R.string.complete_description)) + .setCancelable(false) + .setPositiveButton(getString(R.string.accept), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + sendSMS(); +// post_updateIsComplete(String.valueOf(VHMapID)); + } + }) + .setNegativeButton(getString(R.string.cancel), null) + .show(); + } + + private void sendSMS() { + //Adding the method to the queue by calling the method getDataFromServer + requestQueue.add(getData()); + } + + private JsonObjectRequest getData() { + + String message = "Hi, Someone has requested to help you. Contact - " + db.userDao().getPhoneNumber(); + + String url = TEXT_SMS + phoneNumber + AUTH_KEY + message; + + final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, + new com.android.volley.Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.message_sent), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.message_sent), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + return jsonObjectRequest; + } + + private void post_updateIsComplete(String VHMapID) { + Map params = new HashMap<>(); + params.put("VHMapID", VHMapID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + UPDATE_VHMAP_ISCOMPLETE, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResponse(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("UpdateIsComplete"); + requestQueue.add(jsonObjReq); + } + + private void parseResponse(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + post_getVictimDetails(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_state() { + + Map params = new HashMap<>(); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + STATES, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseStates(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("States"); + requestQueue.add(jsonObjReq); + } + + private void parseStates(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + states.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i params = new HashMap<>(); + params.put("StateID",stateID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + CITY, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseCity(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("City"); + requestQueue.add(jsonObjReq); + } + + private void parseCity(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + city.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i 0) { + post_area(city.get(0)); + } + spCity.setAdapter(spinnerAdapter_city); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void post_area(String cityID) { + + Map params = new HashMap<>(); + params.put("CityID",cityID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + AREA, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseArea(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("Area"); + requestQueue.add(jsonObjReq); + } + + private void parseArea(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i params = new HashMap<>(); + if (areaID == null || areaID.equalsIgnoreCase("")) { + areaID = "1"; + } + params.put("AreaID",areaID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_VICTIM_DETAILS, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseVictims(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("VictimDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseVictims(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + area.clear(); + if (spinnerAdapter_area != null) { + spinnerAdapter_area.clear(); + } + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i=0; i mRecyclerViewItems = new ArrayList<>(); + + private RequestQueue requestQueue; + private AppDatabase db; + + private int postNumber; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_volunteer_posts); + + Window window = getWindow(); + // clear FLAG_TRANSLUCENT_STATUS flag: + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + // finally change the color + window.setStatusBarColor(getResources().getColor(R.color.white)); + + init(); + post_volunteerDetails(); + } + + private void init() { + recyclerView = findViewById(R.id.recyclerView); + requestQueue = Volley.newRequestQueue(getApplicationContext(), null); + db = AppDatabase.getAppDatabase(getApplicationContext()); + mRecyclerViewItems.clear(); + } + + private void setRecyclerView() { + recyclerView.setHasFixedSize(true); + recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, 1)); + VRMapAdapter vrMapAdapter = new VRMapAdapter(mRecyclerViewItems); + recyclerView.setAdapter(vrMapAdapter); + } + + private void post_volunteerDetails() { + Map params = new HashMap<>(); + params.put("VolunteerID", String.valueOf(db.userDao().getVolunteerID())); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + GET_VRMAP, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseVRDetails(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("VRDetails"); + requestQueue.add(jsonObjReq); + } + + private void parseVRDetails(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + postNumber = 0; + mRecyclerViewItems.clear(); + JSONArray jsonArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + addData(jsonObject1); + } + setRecyclerView(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void addData(JSONObject jsonObject1) { + VRMapModel vrMapModel = new VRMapModel(); + try { + postNumber++; + vrMapModel.setPost("Post #" + postNumber); + vrMapModel.setVRMapID(jsonObject1.getInt("VRMapID")); + vrMapModel.setDescription(jsonObject1.getString("Description")); + mRecyclerViewItems.add(vrMapModel); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private class VRMapAdapter extends RecyclerView.Adapter { + + private final List mRecyclerViewItems_adapter; + + VRMapAdapter(List mRecyclerViewItem) { + this.mRecyclerViewItems_adapter = mRecyclerViewItem; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view; + view = LayoutInflater.from(VolunteerPosts.this).inflate(R.layout.custom_my_posts, parent, false); + return new GroupViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { + if (holder instanceof GroupViewHolder) { + GroupViewHolder groupViewHolder = (GroupViewHolder) holder; + final VRMapModel vrMapModel = (VRMapModel) mRecyclerViewItems_adapter.get(position); + String description = "Description - " + vrMapModel.getDescription(); + groupViewHolder.tvName.setText(vrMapModel.getPost()); + groupViewHolder.tvDescription.setText(description); + groupViewHolder.btOpen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showCompleteDialog(vrMapModel.getVRMapID()); + } + }); + } + } + + private class GroupViewHolder extends RecyclerView.ViewHolder { + + private TextView tvName, tvDescription; + private MaterialButton btOpen; + + GroupViewHolder(View itemView) { + super(itemView); + tvName = itemView.findViewById(R.id.tvName); + tvDescription = itemView.findViewById(R.id.tvDescription); + btOpen = itemView.findViewById(R.id.btOpen); + } + } + + @Override + public int getItemCount() { + return mRecyclerViewItems_adapter.size(); + } + } + + private void showCompleteDialog(final int VRMapID) { + new AlertDialog.Builder(VolunteerPosts.this) + .setTitle(getString(R.string.close_complete)) + .setMessage(getString(R.string.complete_description)) + .setCancelable(false) + .setPositiveButton(getString(R.string.okay), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + post_updateIsComplete(String.valueOf(VRMapID)); + } + }) + .setNegativeButton(getString(R.string.cancel), null) + .show(); + } + + private void post_updateIsComplete(String VRMapID) { + Map params = new HashMap<>(); + params.put("VRMapID", VRMapID); + + JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, + UPDATE_VRMAP_ISCOMPLETE, new JSONObject(params), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + parseResponse(response); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.api_fail), Snackbar.LENGTH_LONG); + snackbar.show(); + } + }); + + jsonObjReq.setTag("UpdateIsComplete"); + requestQueue.add(jsonObjReq); + } + + private void parseResponse(JSONObject jsonObject) { + try { + if (jsonObject.getBoolean("isSuccess")) { + Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), getString(R.string.success), Snackbar.LENGTH_LONG); + snackbar.show(); + post_volunteerDetails(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/AppDatabase.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/AppDatabase.java new file mode 100644 index 00000000..93e2e46d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/AppDatabase.java @@ -0,0 +1,28 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Database; + +import android.content.Context; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; +import androidx.room.migration.Migration; +import androidx.sqlite.db.SupportSQLiteDatabase; + +@Database(entities = {user_table.class}, version = 1, exportSchema = false) +public abstract class AppDatabase extends RoomDatabase { + + private static AppDatabase INSTANCE; + + public abstract UserDao userDao(); + + public static AppDatabase getAppDatabase(Context context) { + if (INSTANCE == null) { + INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database") + // allow queries on the main thread. + // Don't do this on a real app! See PersistenceBasicSample for an example. + .allowMainThreadQueries() + .build(); + } + return INSTANCE; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/UserDao.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/UserDao.java new file mode 100644 index 00000000..8631e284 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/UserDao.java @@ -0,0 +1,62 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Database; + +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.Query; + +import java.util.List; + +@Dao +public interface UserDao { + + @Query("SELECT * FROM user_table") + List getAll(); + + @Query("SELECT * FROM user_table ORDER BY uid DESC LIMIT 1") + user_table getUserData(); + + @Query("SELECT volunteer_id FROM user_table WHERE user_id = 1") + int getVolunteerID(); + + @Query("SELECT victim_id FROM user_table WHERE user_id = 1") + int getVictimID(); + + @Query("SELECT phoneNo FROM user_table WHERE user_id = 1") + String getPhoneNumber(); + + @Query("SELECT latitude FROM user_table WHERE user_id = 1") + String getLatitude(); + + @Query("SELECT longitude FROM user_table WHERE user_id = 1") + String getLongitude(); + + @Query("SELECT areaID FROM user_table WHERE user_id = 1") + String getAreaID(); + + @Query("SELECT org_id FROM user_table WHERE user_id = 1") + int getOrgID(); + + @Query("UPDATE user_table SET volunteer_id = :volunteerID WHERE user_id = 1") + void updateVolunteerID(int volunteerID); + + @Query("UPDATE user_table SET phoneNo = :phoneNo WHERE user_id = 1") + void updatePhoneNo(String phoneNo); + + @Query("UPDATE user_table SET latitude = :latitude WHERE user_id = 1") + void updateLatitude(String latitude); + + @Query("UPDATE user_table SET longitude = :longitude WHERE user_id = 1") + void updateLongitude(String longitude); + + @Query("UPDATE user_table SET areaID = :areaID WHERE user_id = 1") + void updateAreaID(String areaID); + + @Query("UPDATE user_table SET victim_id = :victimID WHERE user_id = 1") + void updateVictimID(int victimID); + + @Query("UPDATE user_table SET org_id = :OrgID WHERE user_id = 1") + void updateOrgID(int OrgID); + + @Insert + void insertAll(user_table... user_tables); +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/UserInitializer.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/UserInitializer.java new file mode 100644 index 00000000..718cce53 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/UserInitializer.java @@ -0,0 +1,39 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Database; + +import android.os.AsyncTask; + +import androidx.annotation.NonNull; + +public class UserInitializer { + + public static void populateAsync(@NonNull final AppDatabase db, @NonNull user_table userTable) { + PopulateDbAsync task = new PopulateDbAsync(db, userTable); + task.execute(); + } + + private static void addUser(final AppDatabase db, user_table userTable) { + db.userDao().insertAll(userTable); + } + + private static void populateWithTestData(AppDatabase db, user_table userTable) { + addUser(db,userTable); + } + + private static class PopulateDbAsync extends AsyncTask { + + private final AppDatabase mDb; + private final user_table userr; + + PopulateDbAsync(AppDatabase db, user_table userTable) { + mDb = db; + userr = userTable; + } + + @Override + protected Void doInBackground(final Void... params) { + populateWithTestData(mDb,userr); + return null; + } + + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/user_table.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/user_table.java new file mode 100644 index 00000000..b91e1471 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Database/user_table.java @@ -0,0 +1,108 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Database; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "user_table") +public class user_table { + + @PrimaryKey(autoGenerate = true) + private int uid; + + @ColumnInfo(name = "user_id") + private int user_id; + + @ColumnInfo(name = "phoneNo") + private String phoneNo; + + @ColumnInfo(name = "volunteer_id") + private int volunteer_id = 0; + + @ColumnInfo(name = "victim_id") + private int victim_id = 0; + + @ColumnInfo(name = "org_id") + private int org_id = 0; + + @ColumnInfo(name = "latitude") + private String latitude = ""; + + @ColumnInfo(name = "longitude") + private String longitude = ""; + + @ColumnInfo(name = "areaID") + private String areaID; + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public int getUser_id() { + return user_id; + } + + public void setUser_id(int user_id) { + this.user_id = user_id; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public int getVolunteer_id() { + return volunteer_id; + } + + public void setVolunteer_id(int volunteer_id) { + this.volunteer_id = volunteer_id; + } + + public int getVictim_id() { + return victim_id; + } + + public void setVictim_id(int victim_id) { + this.victim_id = victim_id; + } + + public int getOrg_id() { + return org_id; + } + + public void setOrg_id(int org_id) { + this.org_id = org_id; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getAreaID() { + return areaID; + } + + public void setAreaID(String areaID) { + this.areaID = areaID; + } +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/FundsModel.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/FundsModel.java new file mode 100644 index 00000000..9575b4c9 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/FundsModel.java @@ -0,0 +1,50 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Models; + +public class FundsModel { + + private int OFMapID; + private String Name; + private String Description; + private String Sponsor; + private String Link; + + public int getOFMapID() { + return OFMapID; + } + + public void setOFMapID(int OFMapID) { + this.OFMapID = OFMapID; + } + + public String getName() { + return Name; + } + + public void setName(String name) { + Name = name; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } + + public String getSponsor() { + return Sponsor; + } + + public void setSponsor(String sponsor) { + Sponsor = sponsor; + } + + public String getLink() { + return Link; + } + + public void setLink(String link) { + Link = link; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/GroupDetailsModel.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/GroupDetailsModel.java new file mode 100644 index 00000000..cda3be9a --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/GroupDetailsModel.java @@ -0,0 +1,131 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Models; + +public class GroupDetailsModel { + + private int GroupsID; + private int VolunteerID; + private int AreaID; + private String Name; + private String Description; + private String Members; + private String link; + private String createdOn; + private String updatedOn; + private int isCompleted; + private int isActive; + private String distance; + private String latitude; + private String longitude; + + public int getGroupsID() { + return GroupsID; + } + + public int getVolunteerID() { + return VolunteerID; + } + + public int getAreaID() { + return AreaID; + } + + public String getName() { + return Name; + } + + public String getDescription() { + return Description; + } + + public String getMembers() { + return Members; + } + + public String getLink() { + return link; + } + + public String getCreatedOn() { + return createdOn; + } + + public String getUpdatedOn() { + return updatedOn; + } + + public int getIsActive() { + return isActive; + } + + public int getIsCompleted() { + return isCompleted; + } + + public String getDistance() { + return distance; + } + + public String getLatitude() { + return latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setGroupsID(int groupsID) { + GroupsID = groupsID; + } + + public void setVolunteerID(int volunteerID) { + VolunteerID = volunteerID; + } + + public void setAreaID(int areaID) { + AreaID = areaID; + } + + public void setName(String name) { + Name = name; + } + + public void setDescription(String description) { + Description = description; + } + + public void setMembers(String members) { + Members = members; + } + + public void setLink(String link) { + this.link = link; + } + + public void setCreatedOn(String createdOn) { + this.createdOn = createdOn; + } + + public void setUpdatedOn(String updatedOn) { + this.updatedOn = updatedOn; + } + + public void setIsCompleted(int isCompleted) { + this.isCompleted = isCompleted; + } + + public void setIsActive(int isActive) { + this.isActive = isActive; + } + + public void setDistance(String distance) { + this.distance = distance; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/OrganizationListModel.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/OrganizationListModel.java new file mode 100644 index 00000000..18401aa6 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/OrganizationListModel.java @@ -0,0 +1,50 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Models; + +public class OrganizationListModel { + + private int OrgID; + private String Name; + private String Description; + private String PhoneNo; + private String GSTIn; + + public int getOrgID() { + return OrgID; + } + + public void setOrgID(int orgID) { + OrgID = orgID; + } + + public String getName() { + return Name; + } + + public void setName(String name) { + Name = name; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } + + public String getPhoneNo() { + return PhoneNo; + } + + public void setPhoneNo(String phoneNo) { + PhoneNo = phoneNo; + } + + public String getGSTIn() { + return GSTIn; + } + + public void setGSTIn(String GSTIn) { + this.GSTIn = GSTIn; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VRMapModel.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VRMapModel.java new file mode 100644 index 00000000..3376b07d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VRMapModel.java @@ -0,0 +1,32 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Models; + +public class VRMapModel { + + private String post; + private int VRMapID; + private String Description; + + public String getPost() { + return post; + } + + public void setPost(String post) { + this.post = post; + } + + public int getVRMapID() { + return VRMapID; + } + + public void setVRMapID(int VRMapID) { + this.VRMapID = VRMapID; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VictimsHelpModel.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VictimsHelpModel.java new file mode 100644 index 00000000..ee6a933f --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VictimsHelpModel.java @@ -0,0 +1,131 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Models; + +public class VictimsHelpModel { + + private int VHMapID; + private int VictimID; + private int HelpID; + private int AreaID; + private String Description; + private String Members; + private String Male; + private String Female; + private String Children; + private String Latitude; + private String Longitude; + private String PhoneNo; + private String createdOn; + private String updatedOn; + + public int getVHMapID() { + return VHMapID; + } + public int getVictimID() { + return VictimID; + } + + public int getHelpID() { + return HelpID; + } + + public int getAreaID() { + return AreaID; + } + + public String getDescription() { + return Description; + } + + public String getMembers() { + return Members; + } + + public String getMale() { + return Male; + } + + public String getFemale() { + return Female; + } + + public String getChildren() { + return Children; + } + + public String getLatitude() { + return Latitude; + } + + public String getLongitude() { + return Longitude; + } + + public String getPhoneNo() { + return PhoneNo; + } + + public void setVHMapID(int VHMapID) { + this.VHMapID = VHMapID; + } + + public void setVictimID(int victimID) { + VictimID = victimID; + } + + public void setHelpID(int helpID) { + HelpID = helpID; + } + + public void setAreaID(int areaID) { + AreaID = areaID; + } + + public void setDescription(String description) { + Description = description; + } + + public void setMembers(String members) { + Members = members; + } + + + public void setMale(String male) { + Male = male; + } + + public void setFemale(String female) { + Female = female; + } + + public void setChildren(String children) { + Children = children; + } + + public void setLatitude(String latitude) { + Latitude = latitude; + } + + public void setLongitude(String longitude) { + Longitude = longitude; + } + + public void setPhoneNo(String phoneNo) { + PhoneNo = phoneNo; + } + + public String getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(String createdOn) { + this.createdOn = createdOn; + } + + public String getUpdatedOn() { + return updatedOn; + } + + public void setUpdatedOn(String updatedOn) { + this.updatedOn = updatedOn; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VolunteerHelpModel.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VolunteerHelpModel.java new file mode 100644 index 00000000..43a07356 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Models/VolunteerHelpModel.java @@ -0,0 +1,95 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Models; + +public class VolunteerHelpModel { + + private int VRMapID; + private int VolunteerID; + private int HelpID; + private int AreaID; + private String Description; + private String Latitude; + private String Longitude; + private String PhoneNo; + private String createdOn; + private String updatedOn; + + public int getVRMapID() { + return VRMapID; + } + + public void setVRMapID(int VRMapID) { + this.VRMapID = VRMapID; + } + + public int getVolunteerID() { + return VolunteerID; + } + + public void setVolunteerID(int volunteerID) { + VolunteerID = volunteerID; + } + + public int getHelpID() { + return HelpID; + } + + public void setHelpID(int helpID) { + HelpID = helpID; + } + + public int getAreaID() { + return AreaID; + } + + public void setAreaID(int areaID) { + AreaID = areaID; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } + + public String getLatitude() { + return Latitude; + } + + public void setLatitude(String latitude) { + Latitude = latitude; + } + + public String getLongitude() { + return Longitude; + } + + public void setLongitude(String longitude) { + Longitude = longitude; + } + + public String getPhoneNo() { + return PhoneNo; + } + + public void setPhoneNo(String phoneNo) { + PhoneNo = phoneNo; + } + + public String getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(String createdOn) { + this.createdOn = createdOn; + } + + public String getUpdatedOn() { + return updatedOn; + } + + public void setUpdatedOn(String updatedOn) { + this.updatedOn = updatedOn; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Constants.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Constants.java new file mode 100644 index 00000000..b5c58b41 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Constants.java @@ -0,0 +1,58 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils; + +public class Constants { + + public static final String SHAREDPREF = "SharedPreference"; + + private static final String ENDPOINT = "http://172.18.13.187:3004/api/"; + + public static final String AUTH = ENDPOINT + "volunteerauth"; + + public static final String AUTH_DATA = ENDPOINT + "volunteerinsert"; + + public static final String STATES = ENDPOINT + "getstates"; + + public static final String CITY = ENDPOINT + "getcities"; + + public static final String AREA = ENDPOINT + "getareas"; + + public static final String GET_GROUP_DETAILS = ENDPOINT + "getgroupdetails"; + + public static final String CREATE_GROUP = ENDPOINT + "creategroup"; + + public static final String GET_HELP_TYPES = ENDPOINT + "gethelpertypes"; + + public static final String SHARE_RESOURCES = ENDPOINT + "helpsomeone"; + + public static final String GET_VICTIM_DETAILS = ENDPOINT + "getvictimdetails"; + + public static final String GET_VOLUNTEER_DETAILS = ENDPOINT + "getvolunteerdetails"; + + public static final String REQUEST_HELP = ENDPOINT + "posthelpvictim"; + + public static final String GET_PROFILE_DETAILS = ENDPOINT + "getprofiledetails"; + + public static final String UPDATE_PROFILE_DETAILS = ENDPOINT + "updateprofile"; + + public static final String UPDATE_VHMAP_ISCOMPLETE = ENDPOINT + "iscompletevictim"; + + public static final String UPDATE_VRMAP_ISCOMPLETE = ENDPOINT + "iscompletevolunteer"; + +// public static final String GET_VHMAP = ENDPOINT + "getvictimshelpmap"; //VictimID + + public static final String GET_VRMAP = ENDPOINT + "getvolunteerhelpmap"; //VolunteerID + + public static final String ORGANIZATION_AUTH = ENDPOINT + "ngoauth"; + + public static final String ORGANIZATION_AUTH_DATA = ENDPOINT + "ngoinsert"; + + public static final String ORGANIZATION_FUND_CAMPAIGN = ENDPOINT + "ngofundinsert"; + + public static final String ORGANIZATION_FUNDS_LIST = ENDPOINT + "getngofunddetails"; + + public static final String ORGANIZATION_LIST = ENDPOINT + "getngodetails"; + + public static final String TEXT_SMS = "http://api.msg91.com/api/sendhttp.php?country=91&sender=TESTIN&route=4&mobiles="; + + public static final String AUTH_KEY = "&authkey=235086AuBUHp6g5b8a8abc&message="; +} \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Permissions.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Permissions.java new file mode 100644 index 00000000..6ec14e37 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Permissions.java @@ -0,0 +1,83 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils; + +import android.Manifest; +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.pm.PackageManager; +import android.os.Build; + +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +public class Permissions { + + private static final int MY_PERMISSIONS_REQUEST_COARSE = 123; + private static final int MY_PERMISSIONS_REQUEST_FINE = 1234; + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public static boolean checkCoarseLocation(final Context context) { + int currentAPIVersion = Build.VERSION.SDK_INT; + if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) { + if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.ACCESS_COARSE_LOCATION)) { + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); + alertBuilder.setCancelable(true); + alertBuilder.setTitle("Permission necessary"); + alertBuilder.setMessage("Location permission is necessary"); + alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public void onClick(DialogInterface dialog, int which) { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_COARSE); + } + }); + AlertDialog alert = alertBuilder.create(); + alert.show(); + + + } else { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_COARSE); + } + return false; + } else { + return true; + } + } else { + return true; + } + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public static boolean checkFineLocation(final Context context) { + int currentAPIVersion = Build.VERSION.SDK_INT; + if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) { + if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.ACCESS_FINE_LOCATION)) { + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); + alertBuilder.setCancelable(true); + alertBuilder.setTitle("Permission necessary"); + alertBuilder.setMessage("Location permission is necessary"); + alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public void onClick(DialogInterface dialog, int which) { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE); + } + }); + AlertDialog alert = alertBuilder.create(); + alert.show(); + + + } else { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE); + } + return false; + } else { + return true; + } + } else { + return true; + } + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Utilities.java b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Utilities.java new file mode 100644 index 00000000..7b44d787 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/Utils/Utilities.java @@ -0,0 +1,46 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon.Utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +public class Utilities { + + public static String UTCToIST(String dateUTC) { + try { + DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US); + utcFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + DateFormat indianFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US); + utcFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); + Date timestamp; + SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss", Locale.US); + sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); + timestamp = utcFormat.parse(dateUTC); + assert timestamp != null; + Date ist = sdf.parse(indianFormat.format(timestamp)); + Calendar cal = Calendar.getInstance(); + assert ist != null; + cal.setTime(ist); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH); + int date = cal.get(Calendar.DATE); + String mo = getMonthForInt(month); + return mo + " " + date + " " + ", " + year; + } catch (ParseException e) { + e.printStackTrace(); + } catch (AssertionError ignored) { + } + return ""; + } + + private static String getMonthForInt(int num) { + String[] months = {"Jan","Feb","Mar","Apr","May","Jun","July","Aug","Sept","Oct","Nov","Dec"}; + return months[num]; + } +} diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..1f6bb290 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/help.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/help.png new file mode 100644 index 00000000..a64fd0bd Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/help.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/helping.jpg b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/helping.jpg new file mode 100644 index 00000000..e72d068e Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/helping.jpg differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/helpsomeone.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/helpsomeone.png new file mode 100644 index 00000000..a20973db Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/helpsomeone.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_contribution.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_contribution.xml new file mode 100644 index 00000000..690566b3 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_contribution.xml @@ -0,0 +1,12 @@ + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_language.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_language.xml new file mode 100644 index 00000000..ad916eab --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_language.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_launcher_background.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..0d025f9b --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_live_tracking.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_live_tracking.xml new file mode 100644 index 00000000..46e6de22 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_live_tracking.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_posts.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_posts.xml new file mode 100644 index 00000000..f006156f --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_posts.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_raise_funds.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_raise_funds.xml new file mode 100644 index 00000000..78c8f77a --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_raise_funds.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_settings.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 00000000..6b4a2d57 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,12 @@ + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_twitter.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_twitter.xml new file mode 100644 index 00000000..6e4e009d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/ic_twitter.xml @@ -0,0 +1,12 @@ + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_donate.jpg b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_donate.jpg new file mode 100644 index 00000000..ba4408f6 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_donate.jpg differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_groups.jpg b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_groups.jpg new file mode 100644 index 00000000..d5268211 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_groups.jpg differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_organization.jpg b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_organization.jpg new file mode 100644 index 00000000..6d210601 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/icon_organization.jpg differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/linearlayout_border.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/linearlayout_border.xml new file mode 100644 index 00000000..94d63fda --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/linearlayout_border.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/my_posts.jpg b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/my_posts.jpg new file mode 100644 index 00000000..e92de626 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/my_posts.jpg differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/sharing_resources.jpg b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/sharing_resources.jpg new file mode 100644 index 00000000..8161abec Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/sharing_resources.jpg differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/spinner_border.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/spinner_border.xml new file mode 100644 index 00000000..6a896357 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/spinner_border.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/team.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/team.png new file mode 100644 index 00000000..74fa3114 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/team.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/textview_border.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/textview_border.xml new file mode 100644 index 00000000..2aef6c09 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/textview_border.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/victim.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/victim.png new file mode 100644 index 00000000..b2b35beb Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/drawable/victim.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/armata.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/armata.xml new file mode 100644 index 00000000..86805839 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/armata.xml @@ -0,0 +1,6 @@ + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/open_sans.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/open_sans.xml new file mode 100644 index 00000000..f646f76f --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/open_sans.xml @@ -0,0 +1,6 @@ + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/open_sans_bold.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/open_sans_bold.xml new file mode 100644 index 00000000..4584f040 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/open_sans_bold.xml @@ -0,0 +1,6 @@ + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/opensans_regular.ttf b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/opensans_regular.ttf new file mode 100644 index 00000000..2e31d024 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/opensans_regular.ttf differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/opensans_semibold.ttf b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/opensans_semibold.ttf new file mode 100644 index 00000000..99db86aa Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/opensans_semibold.ttf differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/roboto_medium.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/roboto_medium.xml new file mode 100644 index 00000000..e3d2f8e9 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/font/roboto_medium.xml @@ -0,0 +1,6 @@ + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_authentication.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_authentication.xml new file mode 100644 index 00000000..77522b2a --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_authentication.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_authentication_details.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_authentication_details.xml new file mode 100644 index 00000000..24dbb0fc --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_authentication_details.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_contribute.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_contribute.xml new file mode 100644 index 00000000..17a962d1 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_contribute.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_create_group.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_create_group.xml new file mode 100644 index 00000000..ea13ae40 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_create_group.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_groups.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_groups.xml new file mode 100644 index 00000000..b5acd885 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_groups.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_home_screen.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_home_screen.xml new file mode 100644 index 00000000..b3c2756c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_home_screen.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_main.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..1e9da33c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_auth.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_auth.xml new file mode 100644 index 00000000..055c53f5 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_auth.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_auth_details.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_auth_details.xml new file mode 100644 index 00000000..07c1a61d --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_auth_details.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_dashboard.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_dashboard.xml new file mode 100644 index 00000000..b6780d56 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organization_dashboard.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organizations_list.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organizations_list.xml new file mode 100644 index 00000000..ff8a13cf --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_organizations_list.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_raise_funds.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_raise_funds.xml new file mode 100644 index 00000000..2be8f704 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_raise_funds.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_share_resources.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_share_resources.xml new file mode 100644 index 00000000..3d35c3a6 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_share_resources.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_success_screen.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_success_screen.xml new file mode 100644 index 00000000..12632df4 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_success_screen.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_twitter_view.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_twitter_view.xml new file mode 100644 index 00000000..829fa975 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_twitter_view.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_update_profile.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_update_profile.xml new file mode 100644 index 00000000..36ec6d7c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_update_profile.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_dashboard.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_dashboard.xml new file mode 100644 index 00000000..e314b67c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_dashboard.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_help_map.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_help_map.xml new file mode 100644 index 00000000..938e8134 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_help_map.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_help_resource.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_help_resource.xml new file mode 100644 index 00000000..c3b2873b --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_victim_help_resource.xml @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_volunteer_dashboard.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_volunteer_dashboard.xml new file mode 100644 index 00000000..2ed523d5 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_volunteer_dashboard.xml @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_volunteer_posts.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_volunteer_posts.xml new file mode 100644 index 00000000..8f14edb3 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/activity_volunteer_posts.xml @@ -0,0 +1,42 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_funds.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_funds.xml new file mode 100644 index 00000000..1a073b41 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_funds.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_group_details.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_group_details.xml new file mode 100644 index 00000000..87f6ac01 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_group_details.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_my_posts.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_my_posts.xml new file mode 100644 index 00000000..19ab2f08 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_my_posts.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_organization_list.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_organization_list.xml new file mode 100644 index 00000000..625d495b --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/layout/custom_organization_list.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..eca70cfe --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..eca70cfe --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..898f3ed5 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000..dffca360 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-mdpi/ic_launcher.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..64ba76f7 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000..dae5e082 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..e5ed4659 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000..14ed0af3 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..b0907cac Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..d8ae0315 Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..2c18de9e Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..beed3cdd Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values-hi/strings.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values-hi/strings.xml new file mode 100644 index 00000000..947644a4 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values-hi/strings.xml @@ -0,0 +1,83 @@ + + Peedit + Swayamsevak + Sangathan + Phone Number + Pramaaneekaran Kare + Kuch Galat Hua + Sandesh Bhej Diya Gaya Hai + Samooh Banaya ja chuka hai! + Sansaadhan Share Kardiya Gaya hai + Safalta + Kripya pata chune + Naam + Idar Click Kare Apna pata ke liye + Samooh + Samooh khoj kare + Samooh banaye + Dhyaan den - WhatsApp ya Telegram Samooh ka link daale + Samooh ka prerana + Samooh ka naam + kitne log ko anumati hai + Samooh ka Link + Samooh banaye + Sansaadhan Share kare + Sansaadhan ka vivran dijiye + Share + Samooh mein shaamil hoye + GPS anivariye hai + Aachhi service ke liye GPS anivariye hai. Kriya permission accept kare + Theek hai + Danyawad!\nAapaka vivaran safalta poorvak darj kar diya gaya hai. + Peedit / Swayamsevak + Me hu + Aapada Prabandhan + Mujhe madad chaiye + Madad ke liye nivedan kare + Kitne log? + Kitne purush hai? (Optional) + Kitni mahilaye hai? (Optional) + Kitne bache hai? (Optional) + Madad ke prakaar + Nivedan + Apne Nivedan ka vivran dijiye + Saamaajik + Apne vivran ko update kare + Pramaaneekaran ka vivran + Pramaaneekaran + Kya aapko madat karni hai? + Ek baar accept karne pe piche nai ja sakte. + Kya aapko madat chaiye? Aapka phone number uss insaan se share kiya jayega. + Ek baar accept karne pe piche nai ja sakte. + Kya aap sahi me band karna chahate hai? Aapka phone number uss insaan se share kiya jayega. + Kya aap chahate ho hum ye entry hata de? + Manjur hai + Radh kare + Swagat hai + Poora kar liya hai? + GST No. + Prerana + Dashboard + Nearby Peedit + Pratispardha aayojit kare + Dhan jutaaye + Dhyaan den - Daan ka pata bhariye + Dhan jutane ka prerana + Abhiyaan ka naam + Dhaan Jutane ka abhiyaan + Abhiyaan shuru kariye + Praayojak karne wale ka naam (Optional) + Kisi ki madat kare + Mere Abhiyaan + Apna sahayog de + Dhaan jutane ke abhiyaan dunde + Sangathan ke saath kaam kare + Sangathan dunde + Sampark karen + Sahar + City + Kshetr + Bhaasha Badaliye + Kya aapko bhaasha badal ke Angrezi karni hai? + Haan + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/array.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/array.xml new file mode 100644 index 00000000..159aa62c --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/array.xml @@ -0,0 +1,9 @@ + + + + @string/none_enhance + @string/auto + @string/enhance + @string/enhance_sharp + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/colors.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..c00a6efd --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/colors.xml @@ -0,0 +1,19 @@ + + + + #15557c + #0d4669 + #f4724d + + #FFFFFF + #000000 + + #7c4dff + #ffb300 + #ef354e + #62c667 + #CFCFCF + #828282 + #80D3D3D3 + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/dimens.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/dimens.xml new file mode 100644 index 00000000..36f33507 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/dimens.xml @@ -0,0 +1,125 @@ + + + 16dp + 16dp + 40dp + 0dp + 5dp + 10dp + 15dp + 20dp + 30dp + 40dp + 50dp + 100dp + 55dp + 40dp + 1dp + 1dp + 2dp + 10dp + 10dp + 5dp + 20dp + 20dp + 20dp + 20dp + 20dp + 15dp + 25dp + 25dp + 50dp + 10dp + 20dp + 10dp + 0dp + 30dp + 20dp + 50dp + 50dp + 30dp + 30dp + 30dp + 20dp + 20dp + 24sp + 16sp + 100sp + 100sp + 10dp + 18sp + 2dp + 16sp + 200dp + 100dp + 10dp + 3dp + 5dp + 12dp + 16sp + 20sp + 300dp + 60dp + 12dp + 120dp + 275dp + 250dp + 10sp + 14sp + 11sp + 12sp + 22sp + 24sp + 26sp + 70sp + 1dp + 2dp + 45dp + 45dp + 15sp + 13sp + 18sp + 25sp + 10dp + 20dp + 2dp + 20dp + 8dp + 30dp + 90dp + 70dp + 18dp + 40dp + 30dip + 40dp + 100dp + 100dp + 100dp + 1dp + 40dp + 60dp + 15dp + 22dp + 16dp + 30dp + 25dp + 23dp + 12dp + 50dp + 5dp + 15dp + 20dp + 0dp + 30dp + 50dp + 8dp + + 70dp + 80dp + 35dp + 90dp + + 4dp + 8dp + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/font_certs.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/font_certs.xml new file mode 100644 index 00000000..0c7d340f --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/font_certs.xml @@ -0,0 +1,17 @@ + + + + @array/com_google_android_gms_fonts_certs_dev + @array/com_google_android_gms_fonts_certs_prod + + + + MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs= + + + + + MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/strings.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..7973bcf2 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/strings.xml @@ -0,0 +1,89 @@ + + Dwarsoft-Lynk-Hackathon + AIzaSyB-sj_pBHx3TNa1wOu_3QfIe3FmcSAUsYg + Auto + Original + Lighten + Magic Color + Victim + Volunteer + Organization + Phone Number + Sign In + Server Error + Message Sent + Group Created Successfully! + Resource Shared Successfully! + Success + Please Select Address + Name + Click To Set Current Address + Groups + Search For Groups + Create A Group + Note - Add WhatsApp/Telegram Group Link + Group Motive + Group Name + Number Of Members Allowed + Group Link + Create Group + Share Resources + Describe Your Resource + Share + Join Group + GPS Required + GPS is required for better Service. Please enable it. + Okay + Thank you!\nYour details has been submitted successfully. + Victim / Volunteer + I\'m a + DISASTER MANAGEMENT + I Need Help + Request Help + How Many Members? + No. Of Males? (Optional) + No. Of Females? (Optional) + No. Of Children? (Optional) + Help Type + Request + Describe Your Request? + SOCIAL HANDLE + Update Details + Authentication Details + Update + Do You Want To Help? Your contact details will be shared with the concerned person. + Once you accept, it is not reversible. + Do You Want The Help? Your contact details will be shared with the concerned person. + Once you accept, it is not reversible. + Are you sure you want to close? + Do you want us to delete your entry? + Accept + Cancel + Welcome + Completed? + GST No. + Motive + Dashboard + Nearby Victims + Host Events + Raise Funds + Note - Add Donation Link + Fund Campaign Motive + Campaign Name + Fund Raising Campaign + Start Campaign + Sponsor\'s Name (Optional) + Help Someone + My Posts + Contribute + Search For Fund Campaigns + Collaborate With Organizations + Search For Organizations + Contact + State + City + Area + Change Language + Do you want to change your language to Hinglish? + Yes + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/styles.xml b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..d6306697 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/main/res/values/styles.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/Dwarsoft-Lynk-Hack-master/app/src/test/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/ExampleUnitTest.java b/Dwarsoft-Lynk-Hack-master/app/src/test/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/ExampleUnitTest.java new file mode 100644 index 00000000..48f98aa3 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/app/src/test/java/com/dwarsoftgames/dwarsoft_lynk_hackathon/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.dwarsoftgames.dwarsoft_lynk_hackathon; + +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/Dwarsoft-Lynk-Hack-master/build.gradle b/Dwarsoft-Lynk-Hack-master/build.gradle new file mode 100644 index 00000000..6d976bed --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/build.gradle @@ -0,0 +1,27 @@ +// 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:3.5.1' + classpath 'com.google.gms:google-services:4.3.2' + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + maven { url 'https://jitpack.io' } + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/Dwarsoft-Lynk-Hack-master/gradle.properties b/Dwarsoft-Lynk-Hack-master/gradle.properties new file mode 100644 index 00000000..2937d5f4 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/gradle.properties @@ -0,0 +1,21 @@ +# 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=-Xmx1536m +# 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 +android.enableR8=false +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true + diff --git a/Dwarsoft-Lynk-Hack-master/gradle/wrapper/gradle-wrapper.jar b/Dwarsoft-Lynk-Hack-master/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..f6b961fd Binary files /dev/null and b/Dwarsoft-Lynk-Hack-master/gradle/wrapper/gradle-wrapper.jar differ diff --git a/Dwarsoft-Lynk-Hack-master/gradle/wrapper/gradle-wrapper.properties b/Dwarsoft-Lynk-Hack-master/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..453c1ebb --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sat Oct 12 11:48:41 IST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/Dwarsoft-Lynk-Hack-master/gradlew b/Dwarsoft-Lynk-Hack-master/gradlew new file mode 100644 index 00000000..cccdd3d5 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/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/Dwarsoft-Lynk-Hack-master/gradlew.bat b/Dwarsoft-Lynk-Hack-master/gradlew.bat new file mode 100644 index 00000000..f9553162 --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/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/Dwarsoft-Lynk-Hack-master/settings.gradle b/Dwarsoft-Lynk-Hack-master/settings.gradle new file mode 100644 index 00000000..cac2e88a --- /dev/null +++ b/Dwarsoft-Lynk-Hack-master/settings.gradle @@ -0,0 +1,2 @@ +include ':app' +rootProject.name='Dwarsoft-Lynk-Hackathon' diff --git a/Dwarsoft-Lynk-Hackathon.apk b/Dwarsoft-Lynk-Hackathon.apk new file mode 100644 index 00000000..ce8697c2 Binary files /dev/null and b/Dwarsoft-Lynk-Hackathon.apk differ diff --git a/Lynk-Hack-Backend-master/.gitignore b/Lynk-Hack-Backend-master/.gitignore new file mode 100644 index 00000000..b409efe1 --- /dev/null +++ b/Lynk-Hack-Backend-master/.gitignore @@ -0,0 +1,72 @@ +################# +## Windows detritus +################# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini +history +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store +.vscode +cypress + +# bat files +app.bat + +package-lock.json +data.xml + + +################# +## Directories +################# + +node_modules/ +/.project +npm-debug.log* +.history +waste + + +################# +## Windows detritus +################# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini +history +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store +.vscode +cypress + +# bat files +app.bat + +package-lock.json +data.xml + + +################# +## Directories +################# + +node_modules/ +/.project +npm-debug.log* +.history +waste \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/README.md b/Lynk-Hack-Backend-master/README.md new file mode 100644 index 00000000..7e4d1f2e --- /dev/null +++ b/Lynk-Hack-Backend-master/README.md @@ -0,0 +1,3 @@ +# QuotesAndFacts + +API'S for Quotes and Facts App \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/ReadMe b/Lynk-Hack-Backend-master/_core/ReadMe new file mode 100644 index 00000000..d24f616e --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/ReadMe @@ -0,0 +1,43 @@ +BIBLIO VALIDATE 2.0 API DOCUMENTATION: + +The bilbio validate api supports the following set of services: + +1. Search by PMID: + +Searches the Pubmed database based on PMID entered and returns the following set of details in JSON format: 1. Input Supplied 2. Input Data Converted to JSON. 3. Fetched Pubmed JSON. 4. Merged JSON 5. Output from Truecaser for title 7. Citeproc JSON 8. Biblio graph string from Citeproc system ( without tagging styled) 9. Citation data. 10. BiblioGraphy string (tagged html) from citeproc system ( with CSS STYLED) 11. DOI ID of the article 12. PUBMED ID of the article. + +Parameters to be passed in api call: /search? 1. type = pmid 2. style=*required_style* 3. data=*pmid to be searched for* 4. locale=*required locale* 5. pre=extra pre string to be attched in bibliography data. 6. post=extra post string to be attached in bibliography data. Example api call: /search?style=academy-of-management-review.csl&data=11808601&locale=locales-en-US.xml&pre=hi&post=hi&type=pmid + +BIBLIO VALIDATE 2.0 API DOCUMENTATION: + +2. Search by DOI: + +Searches the Crossref database based on DOI entered and returns the following set of details in JSON format: 1. Input Supplied 2. Input Data Converted to JSON. 3. Fetched Pubmed JSON. 4. Merged JSON 5. Output from Truecaser for title 7. Citeproc JSON 8. Biblio graph string from Citeproc system ( without tagging styled) 9. Citation data. 10. BiblioGraphy string (tagged html) from citeproc system ( with CSS STYLED) 11. DOI ID of the article 12. PUBMED ID of the article. + +Parameters to be passed in api call: /search? 1. type = doi 2. style=*required_style* 3. data=*doi to be searched for* 4. locale=*required locale* 5. pre=extra pre string to be attched in bibliography data. 6. post=extra post string to be attached in bibliography data. Example api call: /search?style=academy-of-management-review.csl&data=10.1126/science.169.3946.635&locale=locales-en-US.xml&pre=hi&post=hi&type=doi + +3. Search by Tagged Input along with validation. + +Searches the pubmed and crossref database based on html tagged input entered and returns the following set of details in JSON format: 1. Input Supplied 2. Input Data Converted to JSON. 3. Output from ParseReference.(without true casing) 4. Fetched Pubmed JSON. 5. Fetched Crossref JSON. 6. Merged JSON 6. Output from Truecaser for title 7. Input JSON to citeproc system 8. Biblio graph string from citeproc system ( without styled) 9. Generated citation data. 10. Biblio Graphy string (tagged html) from citeproc system ( with CSS STYLED) 11. DOI ID of the article 12. PUBMED ID of the article. + +Parameters to be passed in api call: /validate? 1. type = html 2. style=*required_style* 3. data=*tagged to be validated * 4. locale=*required locale* 5. pre=extra pre string to be attched in bibliography data. 6. post=extra post string to be attached in bibliography data. 7. refJournalType=*Desired type* (Journal | Book | etc ) 8. flag=true + +4. Search by Reference Input + +Searches the pubmed and crossref database based on reference text input entered and returns the following set of details in JSON format: 1. Input Supplied 2. Input Data Converted to JSON. 3. Output from ParseReference.(without true casing) 4. Fetched Pubmed JSON. 5. Fetched Crossref JSON. 6. Merged JSON 6. Output from Truecaser for title 7. Input JSON to citeproc system 8. Biblio graph string from citeproc system ( without styled) 9. Generated citation data. 10. Biblio Graphy string (tagged html) from citeproc system ( with CSS STYLED) 11. DOI ID of the article 12. PUBMED ID of the article. + +Parameters to be passed in api call: /validate? 1. type = html 2. style=*required_style* 3. data=*tagged to be validated * 4. locale=*required locale* 5. pre=extra pre string to be attched in bibliography data. 6. post=extra post string to be attached in bibliography data. 7. refJournalType=*Desired type* (Journal | Book | etc ) 8. flag=true + +5. Extract style set present in the server: + +Extracts the possible style set along with its style name from the server: + +EXAMPLE API CALL: /extractLocaleList? + +6. Search by tagged input without validation. Searches the pubmed and crossref database based on html tagged input entered and returns the following set of details in JSON format: 1. Input Supplied 2. Input Data Converted to JSON. 3. Output from Truecaser for title 4. Input JSON to citeproc system 5. Biblio graph string from citeproc system ( without styled) 6. Generated citation data. 7. Biblio Graphy string (tagged html) from citeproc system ( with CSS STYLED) + +Parameters to be passed in api call: /validate? 1. type = html 2. style=*required_style* 3. data=*tagged to be validated * 4. locale=*required locale* 5. pre=extra pre string to be attched in bibliography data. 6. post=extra post string to be attached in bibliography data. 7. refJournalType=*Desired type* (Journal | Book | etc ) 8. flag=false + +Example api call: + +/validate?type=html&style=dove-medical-press.csl&locale=locales-en-US.xml&pre=&post=&data=4.Stotz%20M,%20Gerger%20A,%20Haybaeck%20J,%20Kiesslich%20T,%20Bullock%20MD,%20Pichler%20M.%20Molecular%20Targeted%20Therapies%20in%20Hepatocellular%20Carcinoma:%20Past,%20Present%20and%20Future.%20Anticancer%20Res.%202015;35(11):5737–5744.

&refJournalType=Journal&flag=false \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/JS/connection.js b/Lynk-Hack-Backend-master/_core/post/JS/connection.js new file mode 100644 index 00000000..e2b6ca8b --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/JS/connection.js @@ -0,0 +1,1421 @@ +var mysql = require('mysql'); + +module.exports = { + volunteerauth: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "SELECT * FROM LynkHack.Victims as Vi JOIN Volunteer as Vo on Vi.PhoneNo = Vo.PhoneNo"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.phoneNo) { + queryValue += " where Vi.PhoneNo = " + data.phoneNo; + } else { + resolve({ "status": 400, "error": "No phoneNo field found" }); + connection.end(); + return; + + } + if (data.lowLimit && data.HighLimit) { + queryValue += " LIMIT " + data.lowLimit + "," + data.HighLimit; + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result.length && result.length > 0) { + resolve({ "status": 200, "data": result, "isNewUser": false, "isSuccess": true }); + } else { + resolve({ "status": 200, "isNewUser": true, "isSuccess": true }); + } + + + connection.end(); + return; + + }); + }); + + + }); + }, + volunteerinsert: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`Volunteer` ( `PhoneNo`, `Name`, `Address`, `Latitude`, `Longitude`, `AreaID`, `createdOn`, `updatedOn`, `ipAddress`, `isActive`) VALUES ("; + var queryValue2 = "INSERT INTO `LynkHack`.`Victims` ( `PhoneNo`, `Name`, `Address`, `Latitude`, `Longitude`, `AreaID`, `createdOn`, `updatedOn`, `ipAddress`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + if (data.phoneNo) { + queryValue += "'" + data.phoneNo + "',"; + queryValue2 += "'" + data.phoneNo + "',"; + } else { + resolve({ "status": 400, "error": "No phoneNo field found" }); + connection.end(); + return; + + } + + if (data.Name) { + queryValue += "'" + data.Name + "',"; + queryValue2 += "'" + data.Name + "',"; + } else { + resolve({ "status": 400, "error": "No Name field found" }); + connection.end(); + return; + + } + + if (data.Address) { + queryValue += "'" + data.Address + "',"; + queryValue2 += "'" + data.Address + "',"; + } else { + resolve({ "status": 400, "error": "No Address field found" }); + connection.end(); + return; + + } + + if (data.Latitude) { + queryValue += "'" + data.Latitude + "',"; + queryValue2 += "'" + data.Latitude + "',"; + } else { + resolve({ "status": 400, "error": "No Latitude field found" }); + connection.end(); + return; + + } + if (data.Longitude) { + queryValue += "'" + data.Longitude + "',"; + queryValue2 += "'" + data.Longitude + "',"; + } else { + resolve({ "status": 400, "error": "No Longitude field found" }); + connection.end(); + return; + + } + + if (data.AreaID) { + queryValue += "'" + data.AreaID + "',"; + queryValue2 += "'" + data.AreaID + "',"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00','1.1.1.1','1')"; + queryValue2 += "'2019-01-01 00:00:00','2019-01-01 00:00:00','1.1.1.1','1')"; + var queryValue3 = "SELECT * FROM LynkHack.Victims as Vi JOIN Volunteer as Vo on Vi.PhoneNo = Vo.PhoneNo"; + if (data.phoneNo) { + queryValue3 += " where Vi.PhoneNo =" + "'" + data.phoneNo + "';";; + } else { + resolve({ "status": 400, "error": "No phoneNo field found" }); + connection.end(); + return; + + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + connection.query(queryValue2, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + connection.query(queryValue3, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isNewUser": false, "isSuccess": true }); + } + connection.end(); + return; + + }); + + }); + + }); + }); + + + }); + }, + ngoauth: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "SELECT * FROM LynkHack.Organizations "; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.phoneNo) { + queryValue += "where PhoneNo = " + data.phoneNo; + } else { + resolve({ "status": 400, "error": "No phoneNo field found" }); + connection.end(); + return; + + } + if (data.lowLimit && data.HighLimit) { + queryValue += " LIMIT " + data.lowLimit + "," + data.HighLimit; + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result.length && result.length > 0) { + resolve({ "status": 200, "data": result, "isNewUser": false, "isSuccess": true }); + } else { + resolve({ "status": 200, "isNewUser": true, "isSuccess": true }); + } + + + connection.end(); + return; + + }); + }); + + + }); + }, + ngoinsert: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`Organizations` ( `PhoneNo`, `Name`,`GSTIn`,`Description`, `createdOn`, `updatedOn`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + if (data.phoneNo) { + queryValue += "'" + data.phoneNo + "',"; + } else { + resolve({ "status": 400, "error": "No phoneNo field found" }); + connection.end(); + return; + + } + + if (data.Name) { + queryValue += "'" + data.Name + "',"; + } else { + resolve({ "status": 400, "error": "No Name field found" }); + connection.end(); + return; + + } + + if (data.GSTIn) { + queryValue += "'" + data.GSTIn + "',"; + } else { + resolve({ "status": 400, "error": "No GSTIn field found" }); + connection.end(); + return; + + } + + if (data.Description) { + queryValue += "'" + data.Description + "',"; + } else { + resolve({ "status": 400, "error": "No Description field found" }); + connection.end(); + return; + + } + + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00','1')"; + + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + getstates: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from States"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + getcities: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from City"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.StateID) { + queryValue += " where StateID = " + data.StateID; + } else { + resolve({ "status": 400, "error": "No StateID field found" }); + connection.end(); + return; + + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + getareas: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from Areas"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.CityID) { + queryValue += " where CityID = " + data.CityID; + } else { + resolve({ "status": 400, "error": "No CityID field found" }); + connection.end(); + return; + + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + getvictimshelpmap: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from VictimsHelpMap"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.VictimID) { + queryValue += " where isCompleted=0 and VictimID = " + data.VictimID; + } else { + resolve({ "status": 400, "error": "No CityID field found" }); + connection.end(); + return; + + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + getvolunteerhelpmap: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from VolunteerResourceMap"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.VolunteerID) { + queryValue += " where isCompleted=0 and VolunteerID = " + data.VolunteerID; + } else { + resolve({ "status": 400, "error": "No VolunteerID field found" }); + connection.end(); + return; + + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + creategroup: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`Groups` (`VolunteerID`, `AreaID`, `Name`, `Description`, `Members`, `link`, `createdOn`, `updatedOn`, `isCompleted`,`latitude`,`longitude`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + if (data.VolunteerID) { + queryValue += "'" + data.VolunteerID + "',"; + } else { + resolve({ "status": 400, "error": "No VolunteerID field found" }); + connection.end(); + return; + + } + + if (data.AreaID) { + queryValue += "'" + data.AreaID + "',"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + + if (data.Name) { + queryValue += "'" + data.Name + "',"; + } else { + resolve({ "status": 400, "error": "No Name field found" }); + connection.end(); + return; + + } + + if (data.Description) { + queryValue += "'" + data.Description + "',"; + } else { + resolve({ "status": 400, "error": "No Description field found" }); + connection.end(); + return; + + } + if (data.Members) { + queryValue += "'" + data.Members + "',"; + } else { + resolve({ "status": 400, "error": "No Members field found" }); + connection.end(); + return; + + } + + if (data.link) { + queryValue += "'" + data.link + "',"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00'"; + if (data.latitude) { + queryValue += ",'" + data.latitude + "',"; + } else { + resolve({ "status": 400, "error": "No latitude field found" }); + connection.end(); + return; + + } + if (data.longitude) { + queryValue += "'" + data.longitude + "',"; + } else { + resolve({ "status": 400, "error": "No longitude field found" }); + connection.end(); + return; + + } + if (data.isCompleted) { + queryValue += "'" + data.isCompleted + "',"; + } else { + resolve({ "status": 400, "error": "No isCompleted field found" }); + connection.end(); + return; + + } + queryValue += "'1')"; + + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + updatearea: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "UPDATE `LynkHack`.`Volunteer` SET `AreaID` = "; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.AreaID) { + queryValue += "'" + data.AreaID + "'"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + queryValue += " WHERE `VolunteerID` ="; + + if (data.VolunteerID) { + queryValue += "'" + data.VolunteerID + "';"; + } else { + resolve({ "status": 400, "error": "No VolunteerID field found" }); + connection.end(); + return; + + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + getgroupdetails: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "Select * from Groups where AreaID= "; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.AreaID) { + queryValue += " '" + data.AreaID + "'"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + getvictimdetails: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "Select * from VictimsHelpMap where isCompleted=0 and AreaID= "; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.AreaID) { + queryValue += " '" + data.AreaID + "'"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + getprofiledetails: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "Select * from Volunteer where VolunteerID= "; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.VolunteerID) { + queryValue += " '" + data.VolunteerID + "'"; + } else { + resolve({ "status": 400, "error": "No VolunteerID field found" }); + connection.end(); + return; + + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + gethelpertypes: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "Select * from HelpType "; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + helpsomeone: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`VolunteerResourceMap` (`VolunteerID`, `AreaID`,`HelpID`, `Description`, `createdOn`, `updatedOn`, `isCompleted`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + + if (data.VolunteerID) { + queryValue += "'" + data.VolunteerID + "',"; + } else { + resolve({ "status": 400, "error": "No VolunteerID field found" }); + connection.end(); + return; + + } + + + if (data.AreaID) { + queryValue += "'" + data.AreaID + "',"; + } else { + resolve({ "status": 400, "error": "No VolunteerID field found" }); + connection.end(); + return; + + } + + if (data.HelpID) { + queryValue += "'" + data.HelpID + "',"; + } else { + resolve({ "status": 400, "error": "No HelpID field found" }); + connection.end(); + return; + + } + + if (data.Description) { + queryValue += "'" + data.Description + "',"; + } else { + resolve({ "status": 400, "error": "No Description field found" }); + connection.end(); + return; + + } + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00'," + + if (data.isCompleted) { + queryValue += "'" + data.isCompleted + "',"; + } else { + resolve({ "status": 400, "error": "No isCompleted field found" }); + connection.end(); + return; + + } + + queryValue += "'1')"; + + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isNewUser": false, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + victiminsert: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`Victims` ( `PhoneNo`, `Name`, `Address`, `Latitude`, `Longitude`, `AreaID`, `createdOn`, `updatedOn`, `ipAddress`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + if (data.phoneNo) { + queryValue += "'" + data.phoneNo + "',"; + } else { + resolve({ "status": 400, "error": "No phoneNo field found" }); + connection.end(); + return; + + } + + if (data.Name) { + queryValue += "'" + data.Name + "',"; + } else { + resolve({ "status": 400, "error": "No Name field found" }); + connection.end(); + return; + + } + + if (data.Address) { + queryValue += "'" + data.Address + "',"; + } else { + resolve({ "status": 400, "error": "No Address field found" }); + connection.end(); + return; + + } + + if (data.Latitude) { + queryValue += "'" + data.Latitude + "',"; + } else { + resolve({ "status": 400, "error": "No Latitude field found" }); + connection.end(); + return; + + } + if (data.Longitude) { + queryValue += "'" + data.Longitude + "',"; + } else { + resolve({ "status": 400, "error": "No Longitude field found" }); + connection.end(); + return; + + } + + if (data.AreaID) { + queryValue += "'" + data.AreaID + "',"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00','1.1.1.1','1')"; + + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isNewUser": false, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + }); + }, + getvolunteerdetails: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "SELECT * FROM LynkHack.VolunteerResourceMap as VRMap JOIN Volunteer as Vol on VRMap.VolunteerID = Vol.VolunteerID where isCompleted=0 and VRMap.AreaID= "; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.AreaID) { + queryValue += " '" + data.AreaID + "'"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + posthelpvictim: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`VictimsHelpMap` (`VictimID`,`HelpID`, `AreaID`, `Description`, `Members`, `Male`, `Female`, `Children`, `latitude`, `longitude`, `PhoneNo`, `createdOn`, `updatedOn`, `isCompleted`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (data.VictimID) { + queryValue += "'" + data.VictimID + "',"; + } else { + resolve({ "status": 400, "error": "No VictimID field found" }); + connection.end(); + return; + + } + if (data.HelpID) { + queryValue += "'" + data.HelpID + "',"; + } else { + resolve({ "status": 400, "error": "No HelpID field found" }); + connection.end(); + return; + + } + if (data.AreaID) { + queryValue += "'" + data.AreaID + "',"; + } else { + resolve({ "status": 400, "error": "No AreaID field found" }); + connection.end(); + return; + + } + if (data.Description) { + queryValue += "'" + data.Description + "',"; + } else { + resolve({ "status": 400, "error": "No Description field found" }); + connection.end(); + return; + + } + if (data.Members) { + queryValue += "'" + data.Members + "',"; + } else { + resolve({ "status": 400, "error": "No Members field found" }); + connection.end(); + return; + + } + if (data.Male) { + queryValue += "'" + data.Male + "',"; + } else { + resolve({ "status": 400, "error": "No Male field found" }); + connection.end(); + return; + + } + if (data.Female) { + queryValue += "'" + data.Female + "',"; + } else { + resolve({ "status": 400, "error": "No Female field found" }); + connection.end(); + return; + + } + if (data.Children) { + queryValue += "'" + data.Children + "',"; + } else { + resolve({ "status": 400, "error": "No Children field found" }); + connection.end(); + return; + + } + + if (data.latitude) { + queryValue += "'" + data.latitude + "',"; + } else { + resolve({ "status": 400, "error": "No latitude field found" }); + connection.end(); + return; + + } + if (data.longitude) { + queryValue += "'" + data.longitude + "',"; + } else { + resolve({ "status": 400, "error": "No longitude field found" }); + connection.end(); + return; + + } + if (data.PhoneNo) { + queryValue += "'" + data.PhoneNo + "',"; + } else { + resolve({ "status": 400, "error": "No PhoneNo field found" }); + connection.end(); + return; + + } + + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00'," + if (data.isCompleted) { + queryValue += "'" + data.isCompleted + "'"; + } else { + resolve({ "status": 400, "error": "No VictimID field found" }); + connection.end(); + return; + + } + queryValue += ",'1')"; + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isNewUser": false, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + }); + }, + updateprofile: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "UPDATE `LynkHack`.`Volunteer` SET `Name` = '" + data.Name + "', `Address` = '" + data.Address + "', `Latitude` = '" + data.Latitude + "', `Longitude` = '" + data.Longitude + "', `AreaID` = '" + data.AreaID + "' WHERE `VolunteerID` = '" + data.VolunteerID + "';"; + var queryValue2 = "UPDATE `LynkHack`.`Victims` SET `Name` = '" + data.Name + "', `Address` = '" + data.Address + "', `Latitude` = '" + data.Latitude + "', `Longitude` = '" + data.Longitude + "', `AreaID` = '" + data.AreaID + "' WHERE `VictimID` = '" + data.VictimID + "';"; + + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + connection.query(queryValue2, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + + }); + }); + + + }); + }, + iscompletevolunteer: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "UPDATE `LynkHack`.`VolunteerResourceMap` SET `isCompleted` = '" + '1' + "' WHERE `VRMapID` = '" + data.VRMapID + "';"; + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + iscompletevictim: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "UPDATE `LynkHack`.`VictimsHelpMap` SET `isCompleted` = '" + '1' + "' WHERE `VHMapID` = '" + data.VHMapID + "';"; + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + if (result) { + resolve({ "status": 200, "data": result, "isSuccess": true }); + } + connection.end(); + return; + + }); + }); + + + }); + }, + getngodetails: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from Organizations"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + getngofunddetails: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + + connection.getConnection(function (err) { + var queryValue = "select * from OrganizationsFunds"; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + }, + ngofundinsert: function (data) { + return new Promise(function (resolve, reject) { + var connection = mysql.createPool({ + host: '139.59.94.48', + user: 'playtowindbuser', + password: 'Gameuser@123', + database: 'LynkHack' + }); + connection.getConnection(function (err) { + var queryValue = "INSERT INTO `LynkHack`.`OrganizationsFunds` (`OrgID`, `Name`, `Description`, `Sponsor`, `Link`, `createdOn`, `updatedOn`, `isActive`) VALUES ("; + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + + if (data.OrgID) { + queryValue += "'" + data.OrgID + "',"; + } else { + resolve({ "status": 400, "error": "No OrgID field found" }); + connection.end(); + return; + + } + + if (data.Name) { + queryValue += "'" + data.Name + "',"; + } else { + resolve({ "status": 400, "error": "No Name field found" }); + connection.end(); + return; + + } + + if (data.Description) { + queryValue += "'" + data.Description + "',"; + } else { + resolve({ "status": 400, "error": "No Description field found" }); + connection.end(); + return; + + } + + if (data.Sponsor) { + queryValue += "'" + data.Sponsor + "',"; + } else { + resolve({ "status": 400, "error": "No Sponsor field found" }); + connection.end(); + return; + + } + if (data.Link) { + queryValue += "'" + data.Link + "',"; + } else { + resolve({ "status": 400, "error": "No Link field found" }); + connection.end(); + return; + + } + + queryValue += "'2019-01-01 00:00:00','2019-01-01 00:00:00','1')"; + + + connection.query(queryValue, function (err, result, fields) { + if (err) { + resolve({ "status": 400, "error": err }); + connection.end(); + return; + } + resolve({ "status": 200, "data": result, "isSuccess": true }); + + connection.end(); + return; + + }); + }); + + + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/analytics.js b/Lynk-Hack-Backend-master/_core/post/analytics.js new file mode 100644 index 00000000..0aa62d8a --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/analytics.js @@ -0,0 +1,16 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + settings: function (req, res, wfXML) { + connection.settings(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data.data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/biblio.txt b/Lynk-Hack-Backend-master/_core/post/biblio.txt new file mode 100644 index 00000000..3711914f --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/biblio.txt @@ -0,0 +1 @@ +dsd \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/creategroup.js b/Lynk-Hack-Backend-master/_core/post/creategroup.js new file mode 100644 index 00000000..3fa47b44 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/creategroup.js @@ -0,0 +1,17 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + creategroup: function (req, res, wfXML) { + connection.creategroup(req.body).then(function(data){ + console.log(req.body); + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getareas.js b/Lynk-Hack-Backend-master/_core/post/getareas.js new file mode 100644 index 00000000..e59c1b9b --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getareas.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getareas: function (req, res, wfXML) { + connection.getareas(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getcategorypapers.js b/Lynk-Hack-Backend-master/_core/post/getcategorypapers.js new file mode 100644 index 00000000..606e9b8d --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getcategorypapers.js @@ -0,0 +1,21 @@ +var path = require('path'); +var exec = require('child_process').exec; +const fs = require('fs'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getcategorypapers: function (req, res, wfXML) { + + fs.writeFile("/Users/apple/quotesandfacts/_core/post/biblio.txt", req.body.text, function(err) { + if(err) { + return console.log(err); + } + execute("anystyle -f json parse /Users/apple/quotesandfacts/_core/post/biblio.txt", function(name){ + res.status(200).json(name).end(); + }); + }); + + } +} +function execute(command, callback){ + exec(command, function(error, stdout, stderr){ callback(stdout); }); +}; \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getcities.js b/Lynk-Hack-Backend-master/_core/post/getcities.js new file mode 100644 index 00000000..23e0e5e3 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getcities.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getcities: function (req, res, wfXML) { + connection.getcities(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getgroupdetails.js b/Lynk-Hack-Backend-master/_core/post/getgroupdetails.js new file mode 100644 index 00000000..915f0345 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getgroupdetails.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getgroupdetails: function (req, res, wfXML) { + connection.getgroupdetails(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/gethelpertypes.js b/Lynk-Hack-Backend-master/_core/post/gethelpertypes.js new file mode 100644 index 00000000..7e9398cf --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/gethelpertypes.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + gethelpertypes: function (req, res, wfXML) { + connection.gethelpertypes(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getngodetails.js b/Lynk-Hack-Backend-master/_core/post/getngodetails.js new file mode 100644 index 00000000..66d1ff06 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getngodetails.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getngodetails: function (req, res, wfXML) { + connection.getngodetails(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getngofunddetails.js b/Lynk-Hack-Backend-master/_core/post/getngofunddetails.js new file mode 100644 index 00000000..8acb4890 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getngofunddetails.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getngofunddetails: function (req, res, wfXML) { + connection.getngofunddetails(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getprofiledetails.js b/Lynk-Hack-Backend-master/_core/post/getprofiledetails.js new file mode 100644 index 00000000..7175eaaf --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getprofiledetails.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getprofiledetails: function (req, res, wfXML) { + connection.getprofiledetails(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getstates.js b/Lynk-Hack-Backend-master/_core/post/getstates.js new file mode 100644 index 00000000..7e9828c6 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getstates.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getstates: function (req, res, wfXML) { + connection.getstates(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getvictimdetails.js b/Lynk-Hack-Backend-master/_core/post/getvictimdetails.js new file mode 100644 index 00000000..06efe49c --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getvictimdetails.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getvictimdetails: function (req, res, wfXML) { + connection.getvictimdetails(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getvictimshelpmap.js b/Lynk-Hack-Backend-master/_core/post/getvictimshelpmap.js new file mode 100644 index 00000000..e585a99b --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getvictimshelpmap.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getvictimshelpmap: function (req, res, wfXML) { + connection.getvictimshelpmap(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getvolunteerdetails.js b/Lynk-Hack-Backend-master/_core/post/getvolunteerdetails.js new file mode 100644 index 00000000..51add14c --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getvolunteerdetails.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getvolunteerdetails: function (req, res, wfXML) { + connection.getvolunteerdetails(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/getvolunteerhelpmap.js b/Lynk-Hack-Backend-master/_core/post/getvolunteerhelpmap.js new file mode 100644 index 00000000..5e152498 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/getvolunteerhelpmap.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + getvolunteerhelpmap: function (req, res, wfXML) { + connection.getvolunteerhelpmap(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/helpsomeone.js b/Lynk-Hack-Backend-master/_core/post/helpsomeone.js new file mode 100644 index 00000000..7db3072e --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/helpsomeone.js @@ -0,0 +1,16 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + helpsomeone: function (req, res, wfXML) { + connection.helpsomeone(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/iscompletevictim.js b/Lynk-Hack-Backend-master/_core/post/iscompletevictim.js new file mode 100644 index 00000000..6a7d73bb --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/iscompletevictim.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + iscompletevictim: function (req, res, wfXML) { + connection.iscompletevictim(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/iscompletevolunteer.js b/Lynk-Hack-Backend-master/_core/post/iscompletevolunteer.js new file mode 100644 index 00000000..63685a23 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/iscompletevolunteer.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + iscompletevolunteer: function (req, res, wfXML) { + connection.iscompletevolunteer(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/likedquotes.js b/Lynk-Hack-Backend-master/_core/post/likedquotes.js new file mode 100644 index 00000000..d04bb859 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/likedquotes.js @@ -0,0 +1,15 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + likedquotes: function (req, res, wfXML) { + connection.likedquotes(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data.data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/ngoauth.js b/Lynk-Hack-Backend-master/_core/post/ngoauth.js new file mode 100644 index 00000000..0204c484 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/ngoauth.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + ngoauth: function (req, res, wfXML) { + connection.ngoauth(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/ngofundinsert.js b/Lynk-Hack-Backend-master/_core/post/ngofundinsert.js new file mode 100644 index 00000000..5c03bc5c --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/ngofundinsert.js @@ -0,0 +1,16 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + ngofundinsert: function (req, res, wfXML) { + connection.ngofundinsert(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/ngoinsert.js b/Lynk-Hack-Backend-master/_core/post/ngoinsert.js new file mode 100644 index 00000000..c125838f --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/ngoinsert.js @@ -0,0 +1,16 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + ngoinsert: function (req, res, wfXML) { + connection.ngoinsert(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/posthelpvictim.js b/Lynk-Hack-Backend-master/_core/post/posthelpvictim.js new file mode 100644 index 00000000..3e25762c --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/posthelpvictim.js @@ -0,0 +1,17 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + posthelpvictim: function (req, res, wfXML) { + connection.posthelpvictim(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/quotes.js b/Lynk-Hack-Backend-master/_core/post/quotes.js new file mode 100644 index 00000000..20b3f868 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/quotes.js @@ -0,0 +1,26 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + quotes: function (req, res, wfXML) { + connection.quotes(req.body).then(function(data){ + if(req.client && req.client._peername) + { + if(!req.client._peername.address) + {req.client._peername["address"]="";} + if(!req.client._peername.port) + {req.client._peername["port"]="";} + if(!req.client._peername.family) + {req.client._peername["family"]="";} + req.body["ipaddress"]=req.client._peername.address+":"+req.client._peername.port+" "+req.client._peername.family; + } + if(data.status==200) + { + res.status(200).json(data.data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/updatearea.js b/Lynk-Hack-Backend-master/_core/post/updatearea.js new file mode 100644 index 00000000..90de77f3 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/updatearea.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + updatearea: function (req, res, wfXML) { + connection.updatearea(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/updateprofile.js b/Lynk-Hack-Backend-master/_core/post/updateprofile.js new file mode 100644 index 00000000..6820a059 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/updateprofile.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + updateprofile: function (req, res, wfXML) { + connection.updateprofile(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/victiminsert.js b/Lynk-Hack-Backend-master/_core/post/victiminsert.js new file mode 100644 index 00000000..d0e52648 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/victiminsert.js @@ -0,0 +1,16 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + victiminsert: function (req, res, wfXML) { + connection.victiminsert(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/volunteerauth.js b/Lynk-Hack-Backend-master/_core/post/volunteerauth.js new file mode 100644 index 00000000..b53859dc --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/volunteerauth.js @@ -0,0 +1,22 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + volunteerauth: function (req, res, wfXML) { + connection.volunteerauth(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + let msg=""; + if(data.error) + { + msg=data.error; + } + + res.status(400).json({"message":msg}).end(); + } + return; + }); + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/post/volunteerinsert.js b/Lynk-Hack-Backend-master/_core/post/volunteerinsert.js new file mode 100644 index 00000000..605b4618 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/post/volunteerinsert.js @@ -0,0 +1,17 @@ +var path = require('path'); +var connection = require(path.join(__dirname, '..', 'post', 'JS', 'connection.js')); +module.exports = { + volunteerinsert: function (req, res, wfXML) { + connection.volunteerinsert(req.body).then(function(data){ + if(data.status==200) + { + res.status(200).json(data).end(); + }else + { + res.status(400).json({"message":"something went wrong."}).end(); + } + return; + }); + + } +} \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/_core/routers.js b/Lynk-Hack-Backend-master/_core/routers.js new file mode 100644 index 00000000..a8be58f4 --- /dev/null +++ b/Lynk-Hack-Backend-master/_core/routers.js @@ -0,0 +1,48 @@ +var bodyParser = require('body-parser') + , express = require('express') + , router = express.Router() + ; + + +// There will not be any authorisation because the request is going to be limited to Whitelisted IP + +router.use(bodyParser.urlencoded({ limit: '50mb', extended: true })) // parse application/x-www-form-urlencoded +router.use(bodyParser.text({ limit: '50mb', type: 'application/xml' })) // parse application/xml +router.use(bodyParser.json({ limit: 1024 * 1024 * 20, type: 'application/json' })) // parse application/json + +//adding it to set default directory for loading interface page +router.use(express.static('public')); +router.use(bodyParser.json()); +/** + * handle all api calls, GET/POST/PUT/DELETE/... + */ +router.post('/api/*', function(req, res){ + var pageName = req.url.toLowerCase(); + var endPointName = pageName.replace(/^\/api\/([^\/\?]+)\/?.*$/gi, '$1'); + var reqMethod = req.method.toLowerCase(); + + try { + + var api=require('../_core/'+reqMethod+'/'+endPointName+'.js'); + api[endPointName](req,res); + //console.log("success"); + + } + catch(e){ + //console.log("failed"); + res.status(404).json({status:{code: 404, message: "You have used an incorrect request methos (GET instead of POST?) or the requested resource does not exist"}}).end(); + } + + //logRequests(req, 'success'); + + }); + + +/** + * handle all other requests here, just say not found!!! + */ +router.all('*', function (req, res) { + res.status(200).json({ status: { code: 404, message: "You have used an incorrect request methos (GET instead of POST?) or the requested resource does not exist" } }).end(); +}); + +module.exports = router \ No newline at end of file diff --git a/Lynk-Hack-Backend-master/app.js b/Lynk-Hack-Backend-master/app.js new file mode 100644 index 00000000..f797f3eb --- /dev/null +++ b/Lynk-Hack-Backend-master/app.js @@ -0,0 +1,52 @@ +var compression = require('compression') + , express = require('express') + , expressStatus = require('express-status-monitor') + , helmet = require('helmet') + , routers = require('./_core/routers.js'); + + +var app = express(); // call the express framwork +app.use(expressStatus()); // status monitor +app.enable('trust proxy'); // to get the actual ip address behind aws elb proxy + +//to define port from an argument +var port = 3004; +if ((process.argv.length > 2) && (process.argv[2])) { + port = process.argv[2] ? process.argv[2] : port; +} + +app.use(helmet()); // to set the http headers +app.use(compression()); // New call to compress content +app.use(routers); // call the controllers + +// app exit normally +process.on('exit', function () { + console.log('app exit'); + process.exit(); +}); + +// catch ctrl+c event and exit normally +process.on('SIGINT', function () { + //console.log('Ctrl-C...'); + process.exit(); +}); + +// TODO: IMPORTANT: Need to update this section +//catch uncaught exceptions, trace, then exit normally +process.on('uncaughtException', function (e) { + console.log('Uncaught Exception...'); + console.log(e.stack); + process.exit(); +}); + +// start the server and listen to the port +app.listen(port, function () { + console.log("\033c"); + console.log(' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+'); + console.log(' | b i b l i o s e r v i c e |'); + console.log(' +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+'); + console.log(''); + console.log('listening on port : ' + port); + console.log('server is ready ...'); + console.log('environment', process.env.NODE_ENV); +}) diff --git a/Lynk-Hack-Backend-master/package.json b/Lynk-Hack-Backend-master/package.json new file mode 100644 index 00000000..f303afe1 --- /dev/null +++ b/Lynk-Hack-Backend-master/package.json @@ -0,0 +1,28 @@ +{ + "name": "editreference", + "version": "1.0.0", + "description": "Edit reference per customer preference", + "main": "editReference.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "edit", + "reference", + "pubmed", + "crossref" + ], + "author": "Chetan Dwarkani", + "license": "ISC", + "dependencies": { + "body-parser": "^1.18.3", + "compression": "^1.7.3", + "express": "^4.16.3", + "express-status-monitor": "^1.1.5", + "fs": "0.0.1-security", + "helmet": "^3.13.0", + "mysql": "^2.16.0", + "path": "^0.12.7", + "q": "^1.5.1" + } +} diff --git a/Lynk-Hack-Backend-master/public/index.html b/Lynk-Hack-Backend-master/public/index.html new file mode 100644 index 00000000..1e29ace7 --- /dev/null +++ b/Lynk-Hack-Backend-master/public/index.html @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + This works! + \ No newline at end of file diff --git a/MySQL_DB_ER.png b/MySQL_DB_ER.png new file mode 100644 index 00000000..111ca42c Binary files /dev/null and b/MySQL_DB_ER.png differ diff --git a/README.md b/README.md index 8485fa33..3e400793 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,32 @@ # disaster-management Lynk Hackathon 2019 - Disaster Management + +- Team Dwarsoft - + +Tech Stack - + +1. Android Studio - Java, XML +2. Backend - Node JS +3. Database - MySQL + +- Postman Docs of the APIs - https://documenter.getpostman.com/view/6059098/SVtWvmjC?version=latest#51227406-b3f9-4064-aec2-ac7cfbbac259 +- Please find the attached the APK of the Android App in the root folder. (Please change the IP address accordingly) +- App Screenshots - https://drive.google.com/drive/folders/1MUGRaxoNR_W55YQGdvYNxZhcOwa69tS_?usp=sharing + +The following is the description of our project - + +Android - + - Written in Android Native Java Platform. + - APK size is well optimized using multiple techniques such as R8, shrinking the resources, lint checks and others +obfuscation algoriths (Less than 1.8 MB for the release build) + - Google's Volley is being used for the Networking calls which has the least size of the aar with great thread mechanism. + - Google's Material Design Theme has been followed accordingly throughout the application. + - Localization - The app can be used in multiple languages (helps in conditions where locals can use it easily) - currently +supports two languages but can be easily extended to any number of languages. + - App is also interconnected with Twitter, Telegram and many other social networking platforms for better reach. + - Local caching has been adopted using Google's Room Database which in-turn is one of the best local storage libraries available for Android. + +Backend - + - MySQL - RDBMS has been used to create multiple tables (currently 16 tables). + - Proper Foriegn Key and Naming has been followed along with the DBMS normalized approach. + - Node JS - 25 API Endpoints has been written addressing various use cases of the application making all the features of the app as much dynamic as possible. \ No newline at end of file